{"version":3,"file":"Relations.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n  type InputProps,\n  useField,\n  useForm,\n  useNotification,\n  useFocusInputField,\n  useRBAC,\n  useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n  Box,\n  Combobox,\n  ComboboxOption,\n  Flex,\n  IconButton,\n  TextButton,\n  Typography,\n  VisuallyHidden,\n  useComposedRefs,\n  Link,\n  Field,\n  FlexComponent,\n  BoxComponent,\n  EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Cross, Drag, ArrowClockwise, Link as LinkIcon, Plus, WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\nimport { styled } from 'styled-components';\n\nimport { RelationDragPreviewProps } from '../../../../../components/DragPreviews/RelationDragPreview';\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDebounce } from '../../../../../hooks/useDebounce';\nimport { useDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta, useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport {\n  DROP_SENSITIVITY,\n  UseDragAndDropOptions,\n  useDragAndDrop,\n} from '../../../../../hooks/useDragAndDrop';\nimport {\n  useGetRelationsQuery,\n  useLazySearchRelationsQuery,\n  RelationResult,\n} from '../../../../../services/relations';\nimport { type MainField } from '../../../../../utils/attributes';\nimport { getRelationLabel } from '../../../../../utils/relations';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { useComponent } from '../ComponentContext';\nimport { RelationModalRenderer, getCollectionType } from '../Relations/RelationModal';\n\nimport type { FindAvailable } from '../../../../../../../shared/contracts/relations';\nimport type { Schema } from '@strapi/types';\n\n/**\n * Remove a relation, whether it's been already saved or not.\n * It's used both in RelationsList, where the \"remove relation\" button is, and in the input,\n * because we sometimes need to remove a previous relation when selecting a new one.\n */\nfunction useHandleDisconnect(fieldName: string, consumerName: string) {\n  const field = useField(fieldName);\n  const removeFieldRow = useForm(consumerName, (state) => state.removeFieldRow);\n  const addFieldRow = useForm(consumerName, (state) => state.addFieldRow);\n\n  const handleDisconnect = React.useCallback<ListItemProps['data']['handleDisconnect']>(\n    (relation) => {\n      if (field.value && field.value.connect) {\n        /**\n         * A relation will exist in the `connect` array _if_ it has\n         * been added without saving. In this case, we just remove it\n         * from the connect array\n         */\n        const indexOfRelationInConnectArray = field.value.connect.findIndex(\n          (rel: NonNullable<RelationsFormValue['connect']>[number]) => rel.id === relation.id\n        );\n\n        if (indexOfRelationInConnectArray >= 0) {\n          removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);\n          return;\n        }\n      }\n\n      addFieldRow(`${fieldName}.disconnect`, {\n        id: relation.id,\n        apiData: {\n          id: relation.id,\n          documentId: relation.documentId,\n          locale: relation.locale,\n        },\n      });\n    },\n    [addFieldRow, field.value, fieldName, removeFieldRow]\n  );\n\n  return handleDisconnect;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsField\n * -----------------------------------------------------------------------------------------------*/\n\nconst RELATIONS_TO_DISPLAY = 5;\nconst ONE_WAY_RELATIONS = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'];\nconst EMPTY_RELATION_RESULTS: RelationResult[] = [];\n\ntype RelationPosition =\n  | (Pick<RelationResult, 'status' | 'locale'> & {\n      before: string;\n      end?: never;\n    })\n  | { end: boolean; before?: never; status?: never; locale?: never };\n\ninterface Relation extends Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> {\n  href: string;\n  label: string;\n  position?: RelationPosition;\n  __temp_key__: string;\n  apiData?: {\n    documentId: RelationResult['documentId'];\n    id: RelationResult['id'];\n    locale?: RelationResult['locale'];\n    position: RelationPosition;\n    // Added this property to prevent call useDocument with a not temporary relation (one already saved in the database)\n    isTemporary?: boolean;\n  };\n}\n\ninterface RelationsFieldProps\n  extends Omit<Extract<EditFieldLayout, { type: 'relation' }>, 'size' | 'hint'>,\n    Pick<InputProps, 'hint'> {}\n\nexport interface RelationsFormValue {\n  connect?: Relation[];\n  disconnect?: Pick<Relation, 'id'>[];\n}\n\n/**\n * TODO: we get a rather ugly flash when we remove a single relation from the list leaving\n * no other relations when we press save. The initial relation re-renders, probably because\n * of the lag in the Form cleaning it's \"disconnect\" array, whilst our data has not been invalidated.\n *\n * Could we invalidate relation data on the document actions? Should we?\n */\n\n/**\n * @internal\n * @description The relations field holds a lot of domain logic for handling relations which is rather complicated\n * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should\n * they wish to do so.\n */\nconst RelationsField = React.forwardRef<HTMLDivElement, RelationsFieldProps>(\n  ({ disabled, label, ...props }, ref) => {\n    const { currentDocument, currentDocumentMeta } = useDocumentContext('RelationsField');\n\n    const [currentPage, setCurrentPage] = React.useState(1);\n\n    // Use the documentId from the actual document, not the params (meta)\n    const documentId = currentDocument.document?.documentId;\n\n    const { formatMessage } = useIntl();\n\n    const isMorph = props.attribute.relation.toLowerCase().includes('morph');\n    const isDisabled = isMorph || disabled;\n    // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n    const targetModel = props.attribute.targetModel;\n\n    const componentId = useComponent('RelationsField', (state) => state.id);\n    const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n    const isSubmitting = useForm('RelationsList', (state) => state.isSubmitting);\n\n    React.useEffect(() => {\n      setCurrentPage(1);\n    }, [isSubmitting]);\n\n    const component = componentUID ? currentDocument.components[componentUID] : undefined;\n\n    /**\n     * We'll always have a documentId in a created entry, so we look for a componentId first.\n     * Same with `uid` and `documentModel`.\n     * The componentId is empty when adding a new component in a repeatable. Let it be null to skip isRelatedToCurrentDocument\n     */\n    const model = componentUID || currentDocumentMeta.model;\n    const id = componentUID ? componentId?.toString() : documentId;\n\n    /**\n     * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n     * Where the above example would a nested field within two components, however\n     * we only require the field on the component not the complete path since we query\n     * individual components. Therefore we split the string and take the last item.\n     */\n    const [targetField] = props.name.split('.').slice(-1);\n\n    const schemaAttributes = component\n      ? (component.attributes ?? {})\n      : (currentDocument.schema?.attributes ?? {});\n\n    /**\n     * Confirm the target field is related to the current document.\n     * Since relations can exist in a modal on top of the root document,\n     * we need to ensure we are fetching relations for the correct document (root document vs related document),\n     */\n    const isRelatedToCurrentDocument =\n      Object.values(schemaAttributes).filter(\n        (attribute) =>\n          attribute.type === 'relation' &&\n          'target' in attribute &&\n          'target' in props.attribute &&\n          attribute.target === props.attribute.target\n      ).length > 0;\n\n    const { data, isLoading, isFetching } = useGetRelationsQuery(\n      {\n        model,\n        targetField,\n        // below we don't run the query if there is no id.\n        id,\n        params: {\n          ...currentDocumentMeta.params,\n          pageSize: RELATIONS_TO_DISPLAY,\n          page: currentPage,\n        },\n      },\n      {\n        refetchOnMountOrArgChange: true,\n        skip: !id || !isRelatedToCurrentDocument,\n      }\n    );\n\n    const handleLoadMore = () => {\n      setCurrentPage((prev) => prev + 1);\n    };\n\n    const field = useField(props.name);\n    const serverData = data?.results ?? EMPTY_RELATION_RESULTS;\n\n    const isFetchingMoreRelations = isLoading || isFetching;\n\n    const realServerRelationsCount = data?.pagination ? data.pagination.total : 0;\n\n    /**\n     * Items that are already connected, but reordered would be in\n     * this list, so to get an accurate figure, we remove them.\n     */\n    const relationsConnected =\n      (field.value?.connect ?? []).filter(\n        (rel: Relation) => serverData.findIndex((relation) => relation.id === rel.id) === -1\n      ).length ?? 0;\n    const relationsDisconnected = field.value?.disconnect?.length ?? 0;\n\n    const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;\n\n    /**\n     * This is it, the source of truth for reordering in conjunction with partial loading & updating\n     * of relations. Relations on load are given __temp_key__ when fetched, because we don't want to\n     * create brand new keys everytime the data updates, just keep adding them onto the newly loaded ones.\n     */\n    const relations = React.useMemo(() => {\n      const ctx = {\n        field: field.value,\n        href: `../${COLLECTION_TYPES}/${targetModel}`,\n        mainField: props.mainField,\n      };\n\n      /**\n       * Tidy up our data.\n       */\n      const transformations = pipe(\n        removeConnected(ctx),\n        removeDisconnected(ctx),\n        addLabelAndHref(ctx)\n      );\n\n      const transformedRels = transformations([...serverData]);\n\n      /**\n       * Connect items (e.g. from fill-from-locale) may lack href/label. Ensure they have them\n       * so ListItem's getCollectionType(href) and display work correctly.\n       */\n      const connectItems = (field.value?.connect ?? []).map((rel: Relation) => {\n        const urlLocaleParam = rel.locale ? `?plugins[i18n][locale]=${rel.locale}` : '';\n        if (rel.href) return rel;\n        return {\n          ...rel,\n          label: rel.label ?? getRelationLabel(rel, props.mainField),\n          href: `../${COLLECTION_TYPES}/${targetModel}/${rel.documentId}${urlLocaleParam}`,\n        };\n      });\n\n      /**\n       * THIS IS CRUCIAL. If you don't sort by the __temp_key__ which comes from fractional indexing\n       * then the list will be in the wrong order.\n       */\n      return [...transformedRels, ...connectItems].sort((a, b) => {\n        if (a.__temp_key__ < b.__temp_key__) return -1;\n        if (a.__temp_key__ > b.__temp_key__) return 1;\n        return 0;\n      });\n    }, [serverData, field.value, targetModel, props.mainField]);\n\n    const handleDisconnect = useHandleDisconnect(props.name, 'RelationsField');\n\n    const handleConnect = React.useCallback<RelationsInputProps['onChange']>(\n      (relation) => {\n        const [lastItemInList] = relations.slice(-1);\n        const item = {\n          id: relation.id,\n          apiData: {\n            id: relation.id,\n            documentId: relation.documentId,\n            locale: relation.locale,\n            isTemporary: true,\n          },\n          status: relation.status,\n          /**\n           * If there's a last item, that's the first key we use to generate out next one.\n           */\n          __temp_key__: generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],\n          // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.\n          [props.mainField?.name ?? 'documentId']: relation[props.mainField?.name ?? 'documentId'],\n          label: getRelationLabel(relation, props.mainField),\n          href: `../${COLLECTION_TYPES}/${targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n        };\n\n        if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {\n          // Remove any existing relation so they can be replaced with the new one\n          field.value?.connect?.forEach(handleDisconnect);\n          relations.forEach(handleDisconnect);\n\n          field.onChange(`${props.name}.connect`, [item]);\n        } else {\n          field.onChange(`${props.name}.connect`, [...(field.value?.connect ?? []), item]);\n        }\n      },\n      [\n        field,\n        handleDisconnect,\n        props.attribute.relation,\n        props.mainField,\n        props.name,\n        relations,\n        targetModel,\n      ]\n    );\n\n    return (\n      <Flex\n        ref={ref}\n        direction=\"column\"\n        gap={3}\n        justifyContent=\"space-between\"\n        alignItems=\"stretch\"\n        wrap=\"wrap\"\n      >\n        <StyledFlex direction=\"column\" alignItems=\"start\" gap={2} width=\"100%\">\n          <MemoizedRelationsComboboxInput\n            disabled={isDisabled}\n            // NOTE: we should not default to using the documentId if the component is being created (componentUID is undefined)\n            id={id}\n            label={`${label} ${relationsCount > 0 ? `(${relationsCount})` : ''}`}\n            model={model}\n            onChange={handleConnect}\n            isRelatedToCurrentDocument={isRelatedToCurrentDocument}\n            {...props}\n          />\n          {data?.pagination && data.pagination.pageCount > data.pagination.page ? (\n            <TextButton\n              disabled={isFetchingMoreRelations}\n              onClick={handleLoadMore}\n              loading={isFetchingMoreRelations}\n              startIcon={<ArrowClockwise />}\n              // prevent the label from line-wrapping\n              shrink={0}\n            >\n              {formatMessage({\n                id: getTranslation('relation.loadMore'),\n                defaultMessage: 'Load More',\n              })}\n            </TextButton>\n          ) : null}\n        </StyledFlex>\n        <MemoizedRelationsList\n          data={relations}\n          serverData={serverData}\n          disabled={isDisabled}\n          name={props.name}\n          isLoading={isFetchingMoreRelations}\n          relationType={props.attribute.relation}\n          targetModel={targetModel}\n          documentParams={currentDocumentMeta.params}\n          mainField={props.mainField}\n        />\n      </Flex>\n    );\n  }\n);\n\n/**\n * TODO: this can be removed once we stop shipping Inputs with\n * labels wrapped round in DS@2.\n */\nconst StyledFlex = styled<FlexComponent>(Flex)`\n  & > div {\n    width: 100%;\n  }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Relation Transformations\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TransformationContext extends Pick<RelationsFieldProps, 'mainField'> {\n  field?: RelationsFormValue;\n  href: string;\n}\n\n/**\n * If it's in the connected array, it can get out of our data array,\n * we'll be putting it back in later and sorting it anyway.\n */\nconst removeConnected =\n  ({ field }: TransformationContext) =>\n  (relations: RelationResult[]) => {\n    return relations.filter((relation) => {\n      const connectedRelations = field?.connect ?? [];\n\n      return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n    });\n  };\n\n/**\n * @description Removes relations that are in the `disconnect` array of the field\n */\nconst removeDisconnected =\n  ({ field }: TransformationContext) =>\n  (relations: RelationResult[]): RelationResult[] =>\n    relations.filter((relation) => {\n      const disconnectedRelations = field?.disconnect ?? [];\n\n      return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n    });\n\n/**\n * @description Adds a label and href to the relation object we use this to render\n * a better UI where we can link to the relation and display a human-readable label.\n */\nconst addLabelAndHref =\n  ({ mainField, href }: TransformationContext) =>\n  (relations: RelationResult[]): Relation[] =>\n    relations.map((relation) => {\n      return {\n        ...relation,\n        // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.\n        [mainField?.name ?? 'documentId']: relation[mainField?.name ?? 'documentId'],\n        label: getRelationLabel(relation, mainField),\n        href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n      };\n    });\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsInput\n * -----------------------------------------------------------------------------------------------*/\ninterface RelationsInputProps extends Omit<RelationsFieldProps, 'type'> {\n  id?: string;\n  model: string;\n  isRelatedToCurrentDocument: boolean;\n  onChange: (\n    relation: Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> & {\n      [key: string]: any;\n    }\n  ) => void;\n}\n\n/**\n * @description Contains all the logic for the combobox that can search\n * for relations and then add them to the field's connect array.\n */\nconst RelationsInput = ({\n  hint,\n  id,\n  model,\n  label,\n  labelAction,\n  name,\n  mainField,\n  placeholder,\n  required,\n  unique: _unique,\n  'aria-label': _ariaLabel,\n  onChange,\n  isRelatedToCurrentDocument,\n  ...props\n}: RelationsInputProps) => {\n  const [searchParams, setSearchParams] = React.useState({\n    _q: '',\n    page: 1,\n  });\n  const { toggleNotification } = useNotification();\n  const { currentDocumentMeta } = useDocumentContext('RelationsInput');\n  const { formatMessage } = useIntl();\n\n  const field = useField<RelationsFormValue>(name);\n  // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n  const targetModel = props.attribute.targetModel;\n\n  const searchParamsDebounced = useDebounce(searchParams, 300);\n  const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();\n\n  /**\n   * Because we're using a lazy query, we need to trigger the search\n   * when the component mounts and when the search params change.\n   * We also need to trigger the search when the field value changes\n   * so that we can filter out the relations that are already connected.\n   */\n  React.useEffect(() => {\n    /**\n     * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n     * Where the above example would a nested field within two components, however\n     * we only require the field on the component not the complete path since we query\n     * individual components. Therefore we split the string and take the last item.\n     */\n    const [targetField] = name.split('.').slice(-1);\n\n    // Return early if there is no relation to the document\n    if (!isRelatedToCurrentDocument) return;\n\n    searchForTrigger({\n      model,\n      targetField,\n      params: {\n        ...currentDocumentMeta.params,\n        id: id ?? '',\n        pageSize: 10,\n        idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],\n        idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],\n        ...searchParamsDebounced,\n      },\n    });\n  }, [\n    field.value?.connect,\n    field.value?.disconnect,\n    id,\n    model,\n    name,\n    searchForTrigger,\n    searchParamsDebounced,\n    isRelatedToCurrentDocument,\n    currentDocumentMeta.params,\n  ]);\n\n  const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;\n\n  const handleChange = React.useCallback(\n    (relationId?: string) => {\n      if (!relationId) {\n        return;\n      }\n\n      const options = data?.results ?? [];\n      const relation = options.find((opt) => opt.id.toString() === relationId);\n\n      if (!relation) {\n        // This is very unlikely to happen, but it ensures we don't have any data for.\n        console.error(\n          \"You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue.\"\n        );\n\n        toggleNotification({\n          message: formatMessage({\n            id: getTranslation('relation.error-adding-relation'),\n            defaultMessage: 'An error occurred while trying to add the relation.',\n          }),\n          type: 'danger',\n        });\n\n        return;\n      }\n\n      /**\n       * You need to give this relation a correct _temp_key_ but\n       * this component doesn't know about those ones, you can't rely\n       * on the connect array because that doesn't hold items that haven't\n       * moved. So use a callback to fill in the gaps when connecting.\n       *\n       */\n      onChange(relation);\n    },\n    [data, formatMessage, onChange, toggleNotification]\n  );\n\n  const relation = React.useMemo(\n    () =>\n      ({\n        collectionType: COLLECTION_TYPES,\n        model: targetModel,\n        documentId: '',\n        params: currentDocumentMeta.params,\n      }) as DocumentMeta,\n    [currentDocumentMeta.params, targetModel]\n  );\n\n  const {\n    permissions = [],\n    isLoading: isLoadingPermissions,\n    error,\n  } = useRBAC(\n    PERMISSIONS.map((action) => ({\n      action,\n      subject: relation.model,\n    }))\n  );\n\n  if (error) {\n    return (\n      <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n        <EmptyStateLayout\n          icon={<WarningCircle width=\"16rem\" />}\n          content={formatMessage({\n            id: 'anErrorOccurred',\n            defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n          })}\n        />\n      </Flex>\n    );\n  }\n\n  return (\n    <Field.Root error={field.error} hint={hint} name={name} required={required}>\n      <Field.Label action={labelAction}>{label}</Field.Label>\n      <DocumentRBAC permissions={permissions} model={relation.model}>\n        <MemoizedRelationModalWithContext\n          relation={relation}\n          name={name}\n          placeholder={placeholder}\n          hasNextPage={hasNextPage}\n          isLoadingPermissions={isLoadingPermissions}\n          isLoadingSearchRelations={isLoading}\n          handleChange={handleChange}\n          setSearchParams={setSearchParams}\n          data={data}\n          mainField={mainField}\n          fieldValue={field.value}\n          {...props}\n        />\n      </DocumentRBAC>\n      <Field.Error />\n      <Field.Hint />\n    </Field.Root>\n  );\n};\n\nconst MemoizedRelationsComboboxInput = React.memo(RelationsInput);\n\ninterface RelationModalWithContextProps\n  extends Omit<RelationsInputProps, 'onChange' | 'label' | 'model' | 'isRelatedToCurrentDocument'> {\n  relation: DocumentMeta;\n  hasNextPage: boolean;\n  isLoadingSearchRelations: boolean;\n  isLoadingPermissions: boolean;\n  handleChange: (relationId?: string) => void;\n  data?: FindAvailable.Response;\n  fieldValue?: RelationsFormValue;\n  setSearchParams: React.Dispatch<\n    React.SetStateAction<{\n      _q: string;\n      page: number;\n    }>\n  >;\n}\n\nconst RelationModalWithContext = ({\n  relation,\n  name,\n  placeholder,\n  hasNextPage,\n  isLoadingSearchRelations,\n  isLoadingPermissions,\n  handleChange,\n  mainField,\n  setSearchParams,\n  fieldValue,\n  data,\n  ...props\n}: RelationModalWithContextProps) => {\n  const [textValue, setTextValue] = React.useState<string | undefined>('');\n  const { formatMessage } = useIntl();\n  const canCreate = useDocumentRBAC('RelationModalWrapper', (state) => state.canCreate);\n  const fieldRef = useFocusInputField<HTMLInputElement>(name);\n  const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n  const handleLoadMore = () => {\n    if (!data || !data.pagination) {\n      return;\n    } else if (data.pagination.page < data.pagination.pageCount) {\n      setSearchParams((s) => ({ ...s, page: s.page + 1 }));\n    }\n  };\n\n  const options = data?.results ?? [];\n\n  React.useLayoutEffect(() => {\n    setTextValue('');\n  }, [fieldValue]);\n\n  const handleSearch = async (search: string) => {\n    setSearchParams((s) => ({ ...s, _q: search, page: 1 }));\n  };\n  return (\n    <RelationModalRenderer>\n      {({ dispatch }) => (\n        <Combobox\n          ref={fieldRef}\n          creatable=\"visible\"\n          creatableDisabled={!canCreate}\n          createMessage={() =>\n            formatMessage({\n              id: getTranslation('relation.create'),\n              defaultMessage: 'Create a relation',\n            })\n          }\n          onCreateOption={() => {\n            if (canCreate) {\n              dispatch({\n                type: 'GO_TO_RELATION',\n                payload: {\n                  document: relation,\n                  shouldBypassConfirmation: false,\n                  fieldToConnect: name,\n                  fieldToConnectUID: componentUID,\n                },\n              });\n            }\n          }}\n          creatableStartIcon={<Plus fill=\"neutral500\" />}\n          name={name}\n          autocomplete={{ type: 'list', filter: 'contains' }}\n          placeholder={\n            placeholder ||\n            formatMessage({\n              id: getTranslation('relation.add'),\n              defaultMessage: 'Add relation',\n            })\n          }\n          hasMoreItems={hasNextPage}\n          loading={isLoadingSearchRelations || isLoadingPermissions}\n          onOpenChange={() => {\n            handleSearch(textValue ?? '');\n          }}\n          noOptionsMessage={() =>\n            formatMessage({\n              id: getTranslation('relation.notAvailable'),\n              defaultMessage: 'No relations available',\n            })\n          }\n          loadingMessage={formatMessage({\n            id: getTranslation('relation.isLoading'),\n            defaultMessage: 'Relations are loading',\n          })}\n          onLoadMore={handleLoadMore}\n          textValue={textValue}\n          onChange={handleChange}\n          onTextValueChange={(text) => {\n            setTextValue(text);\n          }}\n          onInputChange={(event) => {\n            handleSearch(event.currentTarget.value);\n          }}\n          {...props}\n        >\n          {options?.map((opt) => {\n            const textValue = getRelationLabel(opt, mainField);\n\n            return (\n              <ComboboxOption key={opt.id} value={opt.id.toString()} textValue={textValue}>\n                <Flex gap={2} justifyContent=\"space-between\">\n                  <Flex gap={2}>\n                    <LinkIcon fill=\"neutral500\" />\n                    <Typography ellipsis>{textValue}</Typography>\n                  </Flex>\n                  {opt.status ? <DocumentStatus status={opt.status} /> : null}\n                </Flex>\n              </ComboboxOption>\n            );\n          })}\n        </Combobox>\n      )}\n    </RelationModalRenderer>\n  );\n};\n\nconst MemoizedRelationModalWithContext = React.memo(RelationModalWithContext);\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsList\n * -----------------------------------------------------------------------------------------------*/\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\ninterface RelationsListProps extends Pick<RelationsFieldProps, 'disabled' | 'name'> {\n  data: Relation[];\n  isLoading?: boolean;\n  relationType: Schema.Attribute.RelationKind.Any;\n  /**\n   * The existing relations connected on the server. We need these to diff against.\n   */\n  serverData: RelationResult[];\n  targetModel: string;\n  documentParams?: DocumentMeta['params'];\n  mainField?: MainField;\n}\n\nconst RelationsList = ({\n  data,\n  serverData,\n  disabled,\n  name,\n  isLoading,\n  relationType,\n  targetModel,\n  documentParams,\n  mainField,\n}: RelationsListProps) => {\n  const ariaDescriptionId = React.useId();\n  const { formatMessage } = useIntl();\n  const listRef = React.useRef<FixedSizeList>(null);\n  const outerListRef = React.useRef<HTMLUListElement>(null);\n  const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n  const [liveText, setLiveText] = React.useState('');\n  const field = useField(name);\n\n  React.useEffect(() => {\n    if (data.length <= RELATIONS_TO_DISPLAY) {\n      return setOverflow(undefined);\n    }\n\n    const handleNativeScroll = (e: Event) => {\n      const el = e.target as HTMLUListElement;\n      const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n      const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n      if (el.scrollTop === 0) {\n        return setOverflow('bottom');\n      }\n\n      if (maxScrollBottom === parentScrollContainerHeight) {\n        return setOverflow('top');\n      }\n\n      return setOverflow('top-bottom');\n    };\n\n    const outerListRefCurrent = outerListRef?.current;\n\n    if (!isLoading && data.length > 0 && outerListRefCurrent) {\n      outerListRef.current.addEventListener('scroll', handleNativeScroll);\n    }\n\n    return () => {\n      if (outerListRefCurrent) {\n        outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n      }\n    };\n  }, [isLoading, data.length]);\n\n  const getItemPos = React.useCallback(\n    (index: number) => `${index + 1} of ${data.length}`,\n    [data.length]\n  );\n\n  const handleMoveItem = React.useCallback<NonNullable<UseDragAndDropOptions['onMoveItem']>>(\n    (newIndex, oldIndex) => {\n      const item = data[oldIndex];\n\n      setLiveText(\n        formatMessage(\n          {\n            id: getTranslation('dnd.reorder'),\n            defaultMessage: '{item}, moved. New position in list: {position}.',\n          },\n          {\n            item: item.label ?? item.documentId,\n            position: getItemPos(newIndex),\n          }\n        )\n      );\n\n      /**\n       * Splicing mutates the array, so we need to create a new array\n       */\n      const newData = [...data];\n      const currentRow = data[oldIndex];\n\n      const startKey =\n        oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;\n      const endKey =\n        oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;\n\n      /**\n       * We're moving the relation between two other relations, so\n       * we need to generate a new key that keeps the order\n       */\n      const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n      newData.splice(oldIndex, 1);\n      newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n      /**\n       * Now we diff against the server to understand what's different so we\n       * can keep the connect array nice and tidy. It also needs reversing because\n       * we reverse the relations from the server in the first place.\n       */\n      const connectedRelations = newData\n        .reduce<Relation[]>((acc, relation, currentIndex, array) => {\n          const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);\n\n          const relationInFront = array[currentIndex + 1];\n\n          if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n            const position = relationInFront\n              ? {\n                  before: relationInFront.documentId,\n                  locale: relationInFront.locale,\n                  status:\n                    'publishedAt' in relationInFront && relationInFront.publishedAt\n                      ? ('published' as Relation['status'])\n                      : ('draft' as Relation['status']),\n                }\n              : { end: true };\n\n            const relationWithPosition: Relation = {\n              ...relation,\n              ...{\n                apiData: {\n                  id: relation.id,\n                  documentId: relation.documentId ?? relation.apiData?.documentId ?? '',\n                  locale: relation.locale || relation.apiData?.locale,\n                  isTemporary: relation.apiData?.isTemporary,\n                  position,\n                },\n              },\n            };\n\n            return [...acc, relationWithPosition];\n          }\n\n          return acc;\n        }, [])\n        .toReversed();\n\n      field.onChange(`${name}.connect`, connectedRelations);\n    },\n    [data, serverData, field, name, formatMessage, getItemPos]\n  );\n\n  const handleGrabItem = React.useCallback<NonNullable<UseDragAndDropOptions['onGrabItem']>>(\n    (index) => {\n      const item = data[index];\n\n      setLiveText(\n        formatMessage(\n          {\n            id: getTranslation('dnd.grab-item'),\n            defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n          },\n          {\n            item: item.label ?? item.documentId,\n            position: getItemPos(index),\n          }\n        )\n      );\n    },\n    [data, formatMessage, getItemPos]\n  );\n\n  const handleDropItem = React.useCallback<NonNullable<UseDragAndDropOptions['onDropItem']>>(\n    (index) => {\n      const { href: _href, label, ...item } = data[index];\n\n      setLiveText(\n        formatMessage(\n          {\n            id: getTranslation('dnd.drop-item'),\n            defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n          },\n          {\n            item: label ?? item.documentId,\n            position: getItemPos(index),\n          }\n        )\n      );\n    },\n    [data, formatMessage, getItemPos]\n  );\n\n  const handleCancel = React.useCallback<NonNullable<UseDragAndDropOptions['onCancel']>>(\n    (index) => {\n      const item = data[index];\n\n      setLiveText(\n        formatMessage(\n          {\n            id: getTranslation('dnd.cancel-item'),\n            defaultMessage: '{item}, dropped. Re-order cancelled.',\n          },\n          {\n            item: item.label ?? item.documentId,\n          }\n        )\n      );\n    },\n    [data, formatMessage]\n  );\n\n  const handleDisconnect = useHandleDisconnect(name, 'RelationsList');\n\n  /**\n   * These relation types will only ever have one item\n   * in their list, so you can't reorder a single item!\n   */\n  const canReorder = !ONE_WAY_RELATIONS.includes(relationType);\n\n  const dynamicListHeight =\n    data.length > RELATIONS_TO_DISPLAY\n      ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n        RELATION_ITEM_HEIGHT / 2\n      : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);\n\n  const itemData = React.useMemo(\n    () => ({\n      ariaDescribedBy: ariaDescriptionId,\n      canDrag: canReorder,\n      disabled,\n      documentParams,\n      handleCancel,\n      handleDropItem,\n      handleGrabItem,\n      handleMoveItem,\n      name,\n      handleDisconnect,\n      relations: data,\n      targetModel,\n      mainField,\n    }),\n    [\n      ariaDescriptionId,\n      canReorder,\n      disabled,\n      documentParams,\n      handleCancel,\n      handleDisconnect,\n      handleDropItem,\n      handleGrabItem,\n      handleMoveItem,\n      name,\n      data,\n      targetModel,\n      mainField,\n    ]\n  );\n\n  return (\n    <ShadowBox $overflowDirection={overflow}>\n      <VisuallyHidden id={ariaDescriptionId}>\n        {formatMessage({\n          id: getTranslation('dnd.instructions'),\n          defaultMessage: `Press spacebar to grab and re-order`,\n        })}\n      </VisuallyHidden>\n      <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n      {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n      <FixedSizeList\n        height={dynamicListHeight}\n        ref={listRef}\n        outerRef={outerListRef}\n        itemCount={data.length}\n        itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n        itemData={itemData}\n        itemKey={(index) => data[index].id}\n        innerElementType=\"ol\"\n      >\n        {ListItem}\n      </FixedSizeList>\n    </ShadowBox>\n  );\n};\n\nconst MemoizedRelationsList = React.memo(RelationsList);\n\nconst ShadowBox = styled<BoxComponent>(Box)<{\n  $overflowDirection?: 'top-bottom' | 'top' | 'bottom';\n}>`\n  position: relative;\n  overflow: hidden;\n  flex: 1;\n\n  &:before,\n  &:after {\n    position: absolute;\n    width: 100%;\n    height: 4px;\n    z-index: 1;\n  }\n\n  &:before {\n    /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n    content: '';\n    background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n    top: 0;\n    opacity: ${({ $overflowDirection }) =>\n      $overflowDirection === 'top-bottom' || $overflowDirection === 'top' ? 1 : 0};\n    transition: opacity 0.2s ease-in-out;\n  }\n\n  &:after {\n    /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n    content: '';\n    background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n    bottom: 0;\n    opacity: ${({ $overflowDirection }) =>\n      $overflowDirection === 'top-bottom' || $overflowDirection === 'bottom' ? 1 : 0};\n    transition: opacity 0.2s ease-in-out;\n  }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListItemProps extends Pick<ListChildComponentProps, 'style' | 'index'> {\n  data: {\n    ariaDescribedBy: string;\n    canDrag?: boolean;\n    disabled?: boolean;\n    handleCancel: UseDragAndDropOptions['onCancel'];\n    handleDropItem: UseDragAndDropOptions['onDropItem'];\n    handleGrabItem: UseDragAndDropOptions['onGrabItem'];\n    handleMoveItem: UseDragAndDropOptions['onMoveItem'];\n    handleDisconnect: (relation: Relation) => void;\n    name: string;\n    relations: Relation[];\n    targetModel: string;\n    documentParams?: DocumentMeta['params'];\n    mainField?: MainField;\n  };\n}\n\nconst RelationRow = styled<FlexComponent>(Flex)`\n  padding-top: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n  padding-bottom: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n\n  ${({ theme }) => theme.breakpoints.medium} {\n    padding-top: ${({ theme }) => theme.spaces[2]};\n    padding-bottom: ${({ theme }) => theme.spaces[2]};\n  }\n`;\n\nconst ListItem = React.memo(({ data, index, style }: ListItemProps) => {\n  const {\n    ariaDescribedBy,\n    canDrag = false,\n    disabled = false,\n    handleCancel,\n    handleDisconnect,\n    handleDropItem,\n    handleGrabItem,\n    handleMoveItem,\n    name,\n    relations,\n    targetModel,\n    documentParams,\n    mainField,\n  } = data;\n  const isDesktop = useIsDesktop();\n\n  const { formatMessage } = useIntl();\n\n  const {\n    href,\n    id,\n    label: originalLabel,\n    status: originalStatus,\n    documentId,\n    apiData,\n    locale,\n  } = relations[index];\n\n  /**\n   * The code above attempts to retrieve the updated value of a relation that has not yet been saved.\n   * This is necessary when a relation modal is opened, and the mainField or its status is updated.\n   * These changes need to be reflected in the initial relation field.\n   */\n  const collectionType = getCollectionType(href)!;\n  const isTemporary = apiData?.isTemporary ?? false;\n  const { document } = useDocument(\n    {\n      collectionType,\n      model: targetModel,\n      documentId: documentId ?? apiData?.documentId,\n      params: documentParams,\n    },\n    { skip: !isTemporary }\n  );\n  const label = isTemporary && document ? getRelationLabel(document, mainField) : originalLabel;\n  const status = isTemporary && document ? document?.status : originalStatus;\n\n  const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n    useDragAndDrop<number, Omit<RelationDragPreviewProps, 'width'>, HTMLDivElement>(\n      canDrag && !disabled,\n      {\n        type: `${ItemTypes.RELATION}_${name}`,\n        index,\n        item: {\n          displayedValue: label,\n          status,\n          id: id,\n          index,\n        },\n        onMoveItem: handleMoveItem,\n        onDropItem: handleDropItem,\n        onGrabItem: handleGrabItem,\n        onCancel: handleCancel,\n        dropSensitivity: DROP_SENSITIVITY.REGULAR,\n      }\n    );\n\n  const composedRefs = useComposedRefs<HTMLDivElement>(relationRef, dragRef);\n\n  React.useEffect(() => {\n    dragPreviewRef(getEmptyImage());\n  }, [dragPreviewRef]);\n\n  const safeDocumentId = documentId ?? apiData?.documentId;\n  const safeLocale = locale ?? apiData?.locale ?? null;\n  const documentMeta = React.useMemo(\n    () =>\n      ({\n        documentId: safeDocumentId,\n        model: targetModel,\n        collectionType: getCollectionType(href)!,\n        params: {\n          locale: safeLocale,\n        },\n      }) as DocumentMeta,\n    [safeDocumentId, href, safeLocale, targetModel]\n  );\n\n  return (\n    <Box\n      style={style}\n      tag=\"li\"\n      ref={dropRef}\n      aria-describedby={ariaDescribedBy}\n      cursor={canDrag ? 'all-scroll' : 'default'}\n    >\n      {isDragging ? (\n        <RelationItemPlaceholder />\n      ) : (\n        <RelationRow\n          paddingTop={2}\n          paddingBottom={2}\n          paddingLeft={canDrag ? 2 : 4}\n          paddingRight={4}\n          hasRadius\n          borderColor=\"neutral200\"\n          background={disabled ? 'neutral150' : 'neutral0'}\n          justifyContent=\"space-between\"\n          ref={composedRefs}\n          data-handler-id={handlerId}\n        >\n          <FlexWrapper gap={1}>\n            {canDrag && isDesktop ? (\n              <IconButton\n                tag=\"div\"\n                role=\"button\"\n                tabIndex={0}\n                withTooltip={false}\n                label={formatMessage({\n                  id: getTranslation('components.RelationInput.icon-button-aria-label'),\n                  defaultMessage: 'Drag',\n                })}\n                variant=\"ghost\"\n                onKeyDown={handleKeyDown}\n                disabled={disabled}\n              >\n                <Drag />\n              </IconButton>\n            ) : null}\n            <Flex width=\"100%\" minWidth={0} gap={4} justifyContent=\"space-between\">\n              <Box flex={1} minWidth={0} paddingTop={1} paddingBottom={1}>\n                <RelationModalRenderer relation={documentMeta}>{label}</RelationModalRenderer>\n              </Box>\n              {status ? <DocumentStatus status={status} /> : null}\n            </Flex>\n          </FlexWrapper>\n          <Box paddingLeft={4}>\n            <IconButton\n              onClick={() => handleDisconnect(relations[index])}\n              disabled={disabled}\n              label={formatMessage({\n                id: getTranslation('relation.disconnect'),\n                defaultMessage: 'Remove',\n              })}\n              variant=\"ghost\"\n              size=\"S\"\n            >\n              <Cross />\n            </IconButton>\n          </Box>\n        </RelationRow>\n      )}\n    </Box>\n  );\n});\n\nconst FlexWrapper = styled<FlexComponent>(Flex)`\n  width: 100%;\n  /* Used to prevent endAction to be pushed out of container */\n  min-width: 0;\n\n  & > div[role='button'] {\n    cursor: all-scroll;\n  }\n`;\n\nconst DisconnectButton = styled.button`\n  svg path {\n    fill: ${({ theme, disabled }) =>\n      disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n  }\n\n  &:hover svg path,\n  &:focus svg path {\n    fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n  }\n`;\n\nconst LinkEllipsis = styled(Link)`\n  display: block;\n\n  & > span {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    display: block;\n  }\n`;\n\nconst RelationItemPlaceholder = () => (\n  <Box\n    paddingTop={2}\n    paddingBottom={2}\n    paddingLeft={4}\n    paddingRight={4}\n    hasRadius\n    borderStyle=\"dashed\"\n    borderColor=\"primary600\"\n    borderWidth=\"1px\"\n    background=\"primary100\"\n    height={`calc(100% - ${RELATION_GUTTER}px)`}\n  />\n);\n\nconst MemoizedRelationsField = React.memo(RelationsField);\n\nexport { MemoizedRelationsField as RelationsInput, FlexWrapper, DisconnectButton, LinkEllipsis };\nexport type { RelationsFieldProps };\n"],"names":["useHandleDisconnect","fieldName","consumerName","field","useField","removeFieldRow","useForm","state","addFieldRow","handleDisconnect","React","useCallback","relation","value","connect","indexOfRelationInConnectArray","findIndex","rel","id","apiData","documentId","locale","RELATIONS_TO_DISPLAY","ONE_WAY_RELATIONS","EMPTY_RELATION_RESULTS","RelationsField","forwardRef","disabled","label","props","ref","currentDocument","currentDocumentMeta","useDocumentContext","currentPage","setCurrentPage","useState","document","formatMessage","useIntl","isMorph","attribute","toLowerCase","includes","isDisabled","targetModel","componentId","useComponent","componentUID","uid","isSubmitting","useEffect","component","components","undefined","model","toString","targetField","name","split","slice","schemaAttributes","attributes","schema","isRelatedToCurrentDocument","Object","values","filter","type","target","length","data","isLoading","isFetching","useGetRelationsQuery","params","pageSize","page","refetchOnMountOrArgChange","skip","handleLoadMore","prev","serverData","results","isFetchingMoreRelations","realServerRelationsCount","pagination","total","relationsConnected","relationsDisconnected","disconnect","relationsCount","relations","useMemo","ctx","href","COLLECTION_TYPES","mainField","transformations","pipe","removeConnected","removeDisconnected","addLabelAndHref","transformedRels","connectItems","map","urlLocaleParam","getRelationLabel","sort","a","b","__temp_key__","handleConnect","lastItemInList","item","isTemporary","status","generateNKeysBetween","forEach","onChange","_jsxs","Flex","direction","gap","justifyContent","alignItems","wrap","StyledFlex","width","_jsx","MemoizedRelationsComboboxInput","pageCount","TextButton","onClick","loading","startIcon","ArrowClockwise","shrink","getTranslation","defaultMessage","MemoizedRelationsList","relationType","documentParams","styled","connectedRelations","disconnectedRelations","RelationsInput","hint","labelAction","placeholder","required","unique","_unique","_ariaLabel","searchParams","setSearchParams","_q","toggleNotification","useNotification","searchParamsDebounced","useDebounce","searchForTrigger","useLazySearchRelationsQuery","idsToInclude","idsToOmit","hasNextPage","handleChange","relationId","options","find","opt","console","error","message","collectionType","permissions","isLoadingPermissions","useRBAC","PERMISSIONS","action","subject","height","EmptyStateLayout","icon","WarningCircle","content","Field","Root","Label","DocumentRBAC","MemoizedRelationModalWithContext","isLoadingSearchRelations","fieldValue","Error","Hint","memo","RelationModalWithContext","textValue","setTextValue","canCreate","useDocumentRBAC","fieldRef","useFocusInputField","s","useLayoutEffect","handleSearch","search","RelationModalRenderer","dispatch","Combobox","creatable","creatableDisabled","createMessage","onCreateOption","payload","shouldBypassConfirmation","fieldToConnect","fieldToConnectUID","creatableStartIcon","Plus","fill","autocomplete","hasMoreItems","onOpenChange","noOptionsMessage","loadingMessage","onLoadMore","onTextValueChange","text","onInputChange","event","currentTarget","ComboboxOption","LinkIcon","Typography","ellipsis","DocumentStatus","RELATION_ITEM_HEIGHT","RELATION_GUTTER","RelationsList","ariaDescriptionId","useId","listRef","useRef","outerListRef","overflow","setOverflow","liveText","setLiveText","handleNativeScroll","e","el","parentScrollContainerHeight","parentNode","scrollHeight","maxScrollBottom","scrollTop","outerListRefCurrent","current","addEventListener","removeEventListener","getItemPos","index","handleMoveItem","newIndex","oldIndex","position","newData","currentRow","startKey","endKey","newKey","splice","reduce","acc","currentIndex","array","relationOnServer","oldRelation","relationInFront","before","publishedAt","end","relationWithPosition","toReversed","handleGrabItem","handleDropItem","_href","handleCancel","canReorder","dynamicListHeight","Math","min","itemData","ariaDescribedBy","canDrag","ShadowBox","$overflowDirection","VisuallyHidden","aria-live","FixedSizeList","outerRef","itemCount","itemSize","itemKey","innerElementType","ListItem","Box","RelationRow","theme","spaces","breakpoints","medium","style","isDesktop","useIsDesktop","originalLabel","originalStatus","getCollectionType","useDocument","handlerId","isDragging","handleKeyDown","relationRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","RELATION","displayedValue","onMoveItem","onDropItem","onGrabItem","onCancel","dropSensitivity","DROP_SENSITIVITY","REGULAR","composedRefs","useComposedRefs","getEmptyImage","safeDocumentId","safeLocale","documentMeta","tag","aria-describedby","cursor","RelationItemPlaceholder","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","data-handler-id","FlexWrapper","IconButton","role","tabIndex","withTooltip","variant","onKeyDown","Drag","minWidth","flex","size","Cross","DisconnectButton","button","colors","neutral600","neutral500","LinkEllipsis","Link","borderStyle","borderWidth","MemoizedRelationsField"],"mappings":"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"}