@strapi/content-manager 5.30.0 → 5.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/admin/components/ComponentIcon.js +3 -0
  2. package/dist/admin/components/ComponentIcon.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.mjs +3 -0
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  6. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  7. package/dist/admin/components/RelativeTime.js.map +1 -1
  8. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js.map +1 -1
  10. package/dist/admin/components/Widgets.mjs.map +1 -1
  11. package/dist/admin/content-manager.js.map +1 -1
  12. package/dist/admin/content-manager.mjs.map +1 -1
  13. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  14. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  18. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  19. package/dist/admin/history/components/VersionsList.js.map +1 -1
  20. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  21. package/dist/admin/history/pages/History.js.map +1 -1
  22. package/dist/admin/history/pages/History.mjs.map +1 -1
  23. package/dist/admin/history/services/historyVersion.js.map +1 -1
  24. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  25. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  26. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  27. package/dist/admin/hooks/useDocumentActions.js +24 -5
  28. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  29. package/dist/admin/hooks/useDocumentActions.mjs +24 -5
  30. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  31. package/dist/admin/index.js.map +1 -1
  32. package/dist/admin/index.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.js +5 -3
  34. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/DocumentActions.mjs +5 -3
  36. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  38. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  60. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  62. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  70. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  72. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  76. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  78. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.js +12 -11
  80. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/InputRenderer.mjs +12 -11
  82. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  84. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  85. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  86. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  87. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  88. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  89. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  90. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  91. package/dist/admin/pages/ListView/ListViewPage.js +0 -2
  92. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  93. package/dist/admin/pages/ListView/ListViewPage.mjs +0 -2
  94. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  95. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  96. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  97. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  98. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  100. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  101. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  102. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  103. package/dist/admin/preview/services/preview.js.map +1 -1
  104. package/dist/admin/preview/services/preview.mjs.map +1 -1
  105. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  106. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  107. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  108. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  109. package/dist/admin/router.js.map +1 -1
  110. package/dist/admin/router.mjs.map +1 -1
  111. package/dist/admin/services/documents.js.map +1 -1
  112. package/dist/admin/services/documents.mjs.map +1 -1
  113. package/dist/admin/services/homepage.js.map +1 -1
  114. package/dist/admin/services/homepage.mjs.map +1 -1
  115. package/dist/admin/services/relations.js.map +1 -1
  116. package/dist/admin/services/relations.mjs.map +1 -1
  117. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  118. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  119. package/dist/admin/src/services/api.d.ts +1 -1
  120. package/dist/admin/src/services/components.d.ts +2 -2
  121. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  122. package/dist/admin/src/services/documents.d.ts +16 -16
  123. package/dist/admin/src/services/homepage.d.ts +1 -1
  124. package/dist/admin/src/services/init.d.ts +1 -1
  125. package/dist/admin/src/services/relations.d.ts +2 -2
  126. package/dist/admin/src/services/uid.d.ts +3 -3
  127. package/dist/admin/translations/fr.json.js +1 -1
  128. package/dist/admin/translations/fr.json.mjs +1 -1
  129. package/dist/admin/utils/translations.js.map +1 -1
  130. package/dist/admin/utils/translations.mjs.map +1 -1
  131. package/dist/admin/utils/urls.js.map +1 -1
  132. package/dist/admin/utils/urls.mjs.map +1 -1
  133. package/dist/admin/utils/users.js.map +1 -1
  134. package/dist/admin/utils/users.mjs.map +1 -1
  135. package/dist/admin/utils/validation.js.map +1 -1
  136. package/dist/admin/utils/validation.mjs.map +1 -1
  137. package/dist/server/controllers/relations.js.map +1 -1
  138. package/dist/server/controllers/relations.mjs.map +1 -1
  139. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  140. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  141. package/dist/server/controllers/validation/index.js.map +1 -1
  142. package/dist/server/controllers/validation/index.mjs.map +1 -1
  143. package/dist/server/history/utils.js.map +1 -1
  144. package/dist/server/history/utils.mjs.map +1 -1
  145. package/dist/server/homepage/services/homepage.js.map +1 -1
  146. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  147. package/dist/server/middlewares/routing.js.map +1 -1
  148. package/dist/server/middlewares/routing.mjs.map +1 -1
  149. package/dist/server/preview/services/preview.js.map +1 -1
  150. package/dist/server/preview/services/preview.mjs.map +1 -1
  151. package/dist/server/preview/utils.js.map +1 -1
  152. package/dist/server/preview/utils.mjs.map +1 -1
  153. package/dist/server/services/configuration.js.map +1 -1
  154. package/dist/server/services/configuration.mjs.map +1 -1
  155. package/dist/server/services/document-metadata.js +23 -1
  156. package/dist/server/services/document-metadata.js.map +1 -1
  157. package/dist/server/services/document-metadata.mjs +23 -1
  158. package/dist/server/services/document-metadata.mjs.map +1 -1
  159. package/dist/server/services/field-sizes.js.map +1 -1
  160. package/dist/server/services/field-sizes.mjs.map +1 -1
  161. package/dist/server/services/uid.js.map +1 -1
  162. package/dist/server/services/uid.mjs.map +1 -1
  163. package/dist/server/services/utils/store.js.map +1 -1
  164. package/dist/server/services/utils/store.mjs.map +1 -1
  165. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  166. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Media.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","description","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
1
+ {"version":3,"file":"Media.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","description","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","description","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
1
+ {"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","description","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sources":["../../../../admin/src/preview/services/preview.ts"],"sourcesContent":["import { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { contentManagerApi } from '../../services/api';\n\nconst previewApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getPreviewUrl: builder.query<GetPreviewUrl.Response, GetPreviewUrl.Request>({\n query({ query, params }) {\n return {\n url: `/content-manager/preview/url/${params.contentType}`,\n method: 'GET',\n config: {\n params: query,\n },\n };\n },\n }),\n }),\n});\n\nconst { useGetPreviewUrlQuery } = previewApi;\n\nexport { useGetPreviewUrlQuery };\n"],"names":["previewApi","contentManagerApi","injectEndpoints","endpoints","builder","getPreviewUrl","query","params","url","contentType","method","config","useGetPreviewUrlQuery"],"mappings":";;;;AAGA,MAAMA,UAAAA,GAAaC,qBAAkBC,CAAAA,eAAe,CAAC;IACnDC,SAAW,EAAA,CAACC,WAAa;YACvBC,aAAeD,EAAAA,OAAAA,CAAQE,KAAK,CAAgD;AAC1EA,gBAAAA,KAAAA,CAAAA,CAAM,EAAEA,KAAK,EAAEC,MAAM,EAAE,EAAA;oBACrB,OAAO;AACLC,wBAAAA,GAAAA,EAAK,CAAC,6BAA6B,EAAED,MAAOE,CAAAA,WAAW,CAAC,CAAC;wBACzDC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;4BACNJ,MAAQD,EAAAA;AACV;AACF,qBAAA;AACF;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEM,MAAA,EAAEM,qBAAqB,EAAE,GAAGZ;;;;"}
1
+ {"version":3,"file":"preview.js","sources":["../../../../admin/src/preview/services/preview.ts"],"sourcesContent":["import { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { contentManagerApi } from '../../services/api';\n\nconst previewApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getPreviewUrl: builder.query<GetPreviewUrl.Response, GetPreviewUrl.Request>({\n query({ query, params }) {\n return {\n url: `/content-manager/preview/url/${params.contentType}`,\n method: 'GET',\n config: {\n params: query,\n },\n };\n },\n }),\n }),\n});\n\nconst { useGetPreviewUrlQuery } = previewApi;\n\nexport { useGetPreviewUrlQuery };\n"],"names":["previewApi","contentManagerApi","injectEndpoints","endpoints","builder","getPreviewUrl","query","params","url","contentType","method","config","useGetPreviewUrlQuery"],"mappings":";;;;AAGA,MAAMA,UAAAA,GAAaC,qBAAkBC,CAAAA,eAAe,CAAC;IACnDC,SAAW,EAAA,CAACC,WAAa;YACvBC,aAAeD,EAAAA,OAAAA,CAAQE,KAAK,CAAgD;AAC1EA,gBAAAA,KAAAA,CAAAA,CAAM,EAAEA,KAAK,EAAEC,MAAM,EAAE,EAAA;oBACrB,OAAO;AACLC,wBAAAA,GAAAA,EAAK,CAAC,6BAA6B,EAAED,MAAAA,CAAOE,WAAW,CAAE,CAAA;wBACzDC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;4BACNJ,MAAQD,EAAAA;AACV;AACF,qBAAA;AACF;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEM,MAAA,EAAEM,qBAAqB,EAAE,GAAGZ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.mjs","sources":["../../../../admin/src/preview/services/preview.ts"],"sourcesContent":["import { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { contentManagerApi } from '../../services/api';\n\nconst previewApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getPreviewUrl: builder.query<GetPreviewUrl.Response, GetPreviewUrl.Request>({\n query({ query, params }) {\n return {\n url: `/content-manager/preview/url/${params.contentType}`,\n method: 'GET',\n config: {\n params: query,\n },\n };\n },\n }),\n }),\n});\n\nconst { useGetPreviewUrlQuery } = previewApi;\n\nexport { useGetPreviewUrlQuery };\n"],"names":["previewApi","contentManagerApi","injectEndpoints","endpoints","builder","getPreviewUrl","query","params","url","contentType","method","config","useGetPreviewUrlQuery"],"mappings":";;AAGA,MAAMA,UAAAA,GAAaC,iBAAkBC,CAAAA,eAAe,CAAC;IACnDC,SAAW,EAAA,CAACC,WAAa;YACvBC,aAAeD,EAAAA,OAAAA,CAAQE,KAAK,CAAgD;AAC1EA,gBAAAA,KAAAA,CAAAA,CAAM,EAAEA,KAAK,EAAEC,MAAM,EAAE,EAAA;oBACrB,OAAO;AACLC,wBAAAA,GAAAA,EAAK,CAAC,6BAA6B,EAAED,MAAOE,CAAAA,WAAW,CAAC,CAAC;wBACzDC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;4BACNJ,MAAQD,EAAAA;AACV;AACF,qBAAA;AACF;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEM,MAAA,EAAEM,qBAAqB,EAAE,GAAGZ;;;;"}
1
+ {"version":3,"file":"preview.mjs","sources":["../../../../admin/src/preview/services/preview.ts"],"sourcesContent":["import { GetPreviewUrl } from '../../../../shared/contracts/preview';\nimport { contentManagerApi } from '../../services/api';\n\nconst previewApi = contentManagerApi.injectEndpoints({\n endpoints: (builder) => ({\n getPreviewUrl: builder.query<GetPreviewUrl.Response, GetPreviewUrl.Request>({\n query({ query, params }) {\n return {\n url: `/content-manager/preview/url/${params.contentType}`,\n method: 'GET',\n config: {\n params: query,\n },\n };\n },\n }),\n }),\n});\n\nconst { useGetPreviewUrlQuery } = previewApi;\n\nexport { useGetPreviewUrlQuery };\n"],"names":["previewApi","contentManagerApi","injectEndpoints","endpoints","builder","getPreviewUrl","query","params","url","contentType","method","config","useGetPreviewUrlQuery"],"mappings":";;AAGA,MAAMA,UAAAA,GAAaC,iBAAkBC,CAAAA,eAAe,CAAC;IACnDC,SAAW,EAAA,CAACC,WAAa;YACvBC,aAAeD,EAAAA,OAAAA,CAAQE,KAAK,CAAgD;AAC1EA,gBAAAA,KAAAA,CAAAA,CAAM,EAAEA,KAAK,EAAEC,MAAM,EAAE,EAAA;oBACrB,OAAO;AACLC,wBAAAA,GAAAA,EAAK,CAAC,6BAA6B,EAAED,MAAAA,CAAOE,WAAW,CAAE,CAAA;wBACzDC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;4BACNJ,MAAQD,EAAAA;AACV;AACF,qBAAA;AACF;AACF,aAAA;SACF;AACF,CAAA,CAAA;AAEM,MAAA,EAAEM,qBAAqB,EAAE,GAAGZ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"fieldUtils.js","sources":["../../../../admin/src/preview/utils/fieldUtils.ts"],"sourcesContent":["import { type FieldContentSourceMap } from '@strapi/admin/strapi-admin';\n\nimport type { PREVIEW_ERROR_MESSAGES } from './constants';\nimport type { PreviewContextValue } from '../pages/Preview';\nimport type { Modules, Schema, Struct, UID } from '@strapi/types';\n\ntype PreviewErrorMessage = keyof typeof PREVIEW_ERROR_MESSAGES;\n\n// Generic error class for preview field operations\nexport class PreviewFieldError extends Error {\n public readonly messageKey: PreviewErrorMessage;\n\n constructor(messageKey: PreviewErrorMessage) {\n super(messageKey);\n this.name = 'PreviewFieldError';\n this.messageKey = messageKey;\n }\n}\n\ntype PathPart = { name: string; index?: number };\n\n// Helper function to parse path with array indices and return clean attribute names\nexport const parsePathWithIndices = (path: string): PathPart[] => {\n // Split by dots, then parse array indices from each part. For example:\n // input \"components.4.field.relations.2.name\"\n // output [{name: \"components\", index: 4}, {name: \"field\"}, {name: \"relations\", index: 2}, {name: \"name\"}]\n return path\n .split('.')\n .map((part) => {\n const numericIndex = parseInt(part, 10);\n if (!isNaN(numericIndex) && part === numericIndex.toString()) {\n // This part is a pure numeric index, return it as an index for the previous part\n return { name: '', index: numericIndex };\n }\n return { name: part };\n })\n .reduce((acc: PathPart[], part) => {\n if (part.name === '' && part.index !== undefined) {\n // This is an index, attach it to the previous part\n if (acc.length > 0) {\n acc[acc.length - 1].index = part.index;\n }\n } else {\n acc.push(part);\n }\n return acc;\n }, []);\n};\n\nexport function getAttributeSchemaFromPath({\n path,\n schema,\n components,\n document,\n}: {\n path: string;\n schema: PreviewContextValue['schema'] | PreviewContextValue['components'][string];\n components: PreviewContextValue['components'];\n document: Modules.Documents.AnyDocument;\n}): Schema.Attribute.AnyAttribute {\n /**\n * Create the function that will be recursively called.\n * We don't do recursion on getAttributeSchemaFromPath itself because:\n * - it takes a path string, not the parsed array that's better for recursion\n * - even when several levels deep, we still need access to the root schema and components\n */\n const visitor = (\n currentPathParts: PathPart[],\n currentAttributes: Schema.Attributes,\n currentData: any\n ): Schema.Attribute.AnyAttribute => {\n const [currentPart, ...remainingParts] = currentPathParts;\n\n // Get the data and schema for the current path\n const currentAttribute = currentAttributes[currentPart.name];\n\n if (!currentAttribute) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n if (currentAttribute.type === 'relation') {\n throw new PreviewFieldError('RELATIONS_NOT_HANDLED');\n }\n\n if (currentAttribute.type === 'component') {\n const componentAttributes = components[currentAttribute.component].attributes;\n if (currentAttribute.repeatable) {\n // We must have the index, otherwise we don't know what data to use\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n return visitor(\n remainingParts,\n componentAttributes,\n currentData[currentPart.name][currentPart.index]\n );\n }\n\n // Non repeatable component\n return visitor(remainingParts, componentAttributes, currentData[currentPart.name]);\n }\n\n if (currentAttribute.type === 'dynamiczone') {\n // We must have the index, otherwise we don't know what component we're dealing with\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n const componentData = currentData[currentPart.name][currentPart.index];\n const componentAttributes = components[componentData.__component].attributes;\n return visitor(remainingParts, componentAttributes, componentData);\n }\n\n // Plain regular field. It ends the recursion\n return currentAttributes[currentPart.name];\n };\n\n return visitor(parsePathWithIndices(path), schema.attributes, document);\n}\n\nexport function parseFieldMetaData(strapiSource: string): FieldContentSourceMap | null {\n const searchParams = new URLSearchParams(strapiSource);\n const path = searchParams.get('path');\n const type = searchParams.get('type');\n const documentId = searchParams.get('documentId');\n const locale = searchParams.get('locale');\n const model = searchParams.get('model');\n const kind = searchParams.get('kind');\n\n if (!path || !type || !documentId || !model) {\n return null;\n }\n\n return {\n path,\n type: type as Schema.Attribute.AnyAttribute['type'],\n documentId,\n locale: locale ?? null,\n model: model as UID.Schema | undefined,\n kind: kind ? (kind as Struct.ContentTypeKind) : undefined,\n };\n}\n"],"names":["PreviewFieldError","Error","constructor","messageKey","name","parsePathWithIndices","path","split","map","part","numericIndex","parseInt","isNaN","toString","index","reduce","acc","undefined","length","push","getAttributeSchemaFromPath","schema","components","document","visitor","currentPathParts","currentAttributes","currentData","currentPart","remainingParts","currentAttribute","type","componentAttributes","component","attributes","repeatable","componentData","__component","parseFieldMetaData","strapiSource","searchParams","URLSearchParams","get","documentId","locale","model","kind"],"mappings":"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"}
1
+ {"version":3,"file":"fieldUtils.js","sources":["../../../../admin/src/preview/utils/fieldUtils.ts"],"sourcesContent":["import { type FieldContentSourceMap } from '@strapi/admin/strapi-admin';\n\nimport type { PREVIEW_ERROR_MESSAGES } from './constants';\nimport type { PreviewContextValue } from '../pages/Preview';\nimport type { Modules, Schema, Struct, UID } from '@strapi/types';\n\ntype PreviewErrorMessage = keyof typeof PREVIEW_ERROR_MESSAGES;\n\n// Generic error class for preview field operations\nexport class PreviewFieldError extends Error {\n public readonly messageKey: PreviewErrorMessage;\n\n constructor(messageKey: PreviewErrorMessage) {\n super(messageKey);\n this.name = 'PreviewFieldError';\n this.messageKey = messageKey;\n }\n}\n\ntype PathPart = { name: string; index?: number };\n\n// Helper function to parse path with array indices and return clean attribute names\nexport const parsePathWithIndices = (path: string): PathPart[] => {\n // Split by dots, then parse array indices from each part. For example:\n // input \"components.4.field.relations.2.name\"\n // output [{name: \"components\", index: 4}, {name: \"field\"}, {name: \"relations\", index: 2}, {name: \"name\"}]\n return path\n .split('.')\n .map((part) => {\n const numericIndex = parseInt(part, 10);\n if (!isNaN(numericIndex) && part === numericIndex.toString()) {\n // This part is a pure numeric index, return it as an index for the previous part\n return { name: '', index: numericIndex };\n }\n return { name: part };\n })\n .reduce((acc: PathPart[], part) => {\n if (part.name === '' && part.index !== undefined) {\n // This is an index, attach it to the previous part\n if (acc.length > 0) {\n acc[acc.length - 1].index = part.index;\n }\n } else {\n acc.push(part);\n }\n return acc;\n }, []);\n};\n\nexport function getAttributeSchemaFromPath({\n path,\n schema,\n components,\n document,\n}: {\n path: string;\n schema: PreviewContextValue['schema'] | PreviewContextValue['components'][string];\n components: PreviewContextValue['components'];\n document: Modules.Documents.AnyDocument;\n}): Schema.Attribute.AnyAttribute {\n /**\n * Create the function that will be recursively called.\n * We don't do recursion on getAttributeSchemaFromPath itself because:\n * - it takes a path string, not the parsed array that's better for recursion\n * - even when several levels deep, we still need access to the root schema and components\n */\n const visitor = (\n currentPathParts: PathPart[],\n currentAttributes: Schema.Attributes,\n currentData: any\n ): Schema.Attribute.AnyAttribute => {\n const [currentPart, ...remainingParts] = currentPathParts;\n\n // Get the data and schema for the current path\n const currentAttribute = currentAttributes[currentPart.name];\n\n if (!currentAttribute) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n if (currentAttribute.type === 'relation') {\n throw new PreviewFieldError('RELATIONS_NOT_HANDLED');\n }\n\n if (currentAttribute.type === 'component') {\n const componentAttributes = components[currentAttribute.component].attributes;\n if (currentAttribute.repeatable) {\n // We must have the index, otherwise we don't know what data to use\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n return visitor(\n remainingParts,\n componentAttributes,\n currentData[currentPart.name][currentPart.index]\n );\n }\n\n // Non repeatable component\n return visitor(remainingParts, componentAttributes, currentData[currentPart.name]);\n }\n\n if (currentAttribute.type === 'dynamiczone') {\n // We must have the index, otherwise we don't know what component we're dealing with\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n const componentData = currentData[currentPart.name][currentPart.index];\n const componentAttributes = components[componentData.__component].attributes;\n return visitor(remainingParts, componentAttributes, componentData);\n }\n\n // Plain regular field. It ends the recursion\n return currentAttributes[currentPart.name];\n };\n\n return visitor(parsePathWithIndices(path), schema.attributes, document);\n}\n\nexport function parseFieldMetaData(strapiSource: string): FieldContentSourceMap | null {\n const searchParams = new URLSearchParams(strapiSource);\n const path = searchParams.get('path');\n const type = searchParams.get('type');\n const documentId = searchParams.get('documentId');\n const locale = searchParams.get('locale');\n const model = searchParams.get('model');\n const kind = searchParams.get('kind');\n\n if (!path || !type || !documentId || !model) {\n return null;\n }\n\n return {\n path,\n type: type as Schema.Attribute.AnyAttribute['type'],\n documentId,\n locale: locale ?? null,\n model: model as UID.Schema | undefined,\n kind: kind ? (kind as Struct.ContentTypeKind) : undefined,\n };\n}\n"],"names":["PreviewFieldError","Error","messageKey","name","parsePathWithIndices","path","split","map","part","numericIndex","parseInt","isNaN","toString","index","reduce","acc","undefined","length","push","getAttributeSchemaFromPath","schema","components","document","visitor","currentPathParts","currentAttributes","currentData","currentPart","remainingParts","currentAttribute","type","componentAttributes","component","attributes","repeatable","componentData","__component","parseFieldMetaData","strapiSource","searchParams","URLSearchParams","get","documentId","locale","model","kind"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fieldUtils.mjs","sources":["../../../../admin/src/preview/utils/fieldUtils.ts"],"sourcesContent":["import { type FieldContentSourceMap } from '@strapi/admin/strapi-admin';\n\nimport type { PREVIEW_ERROR_MESSAGES } from './constants';\nimport type { PreviewContextValue } from '../pages/Preview';\nimport type { Modules, Schema, Struct, UID } from '@strapi/types';\n\ntype PreviewErrorMessage = keyof typeof PREVIEW_ERROR_MESSAGES;\n\n// Generic error class for preview field operations\nexport class PreviewFieldError extends Error {\n public readonly messageKey: PreviewErrorMessage;\n\n constructor(messageKey: PreviewErrorMessage) {\n super(messageKey);\n this.name = 'PreviewFieldError';\n this.messageKey = messageKey;\n }\n}\n\ntype PathPart = { name: string; index?: number };\n\n// Helper function to parse path with array indices and return clean attribute names\nexport const parsePathWithIndices = (path: string): PathPart[] => {\n // Split by dots, then parse array indices from each part. For example:\n // input \"components.4.field.relations.2.name\"\n // output [{name: \"components\", index: 4}, {name: \"field\"}, {name: \"relations\", index: 2}, {name: \"name\"}]\n return path\n .split('.')\n .map((part) => {\n const numericIndex = parseInt(part, 10);\n if (!isNaN(numericIndex) && part === numericIndex.toString()) {\n // This part is a pure numeric index, return it as an index for the previous part\n return { name: '', index: numericIndex };\n }\n return { name: part };\n })\n .reduce((acc: PathPart[], part) => {\n if (part.name === '' && part.index !== undefined) {\n // This is an index, attach it to the previous part\n if (acc.length > 0) {\n acc[acc.length - 1].index = part.index;\n }\n } else {\n acc.push(part);\n }\n return acc;\n }, []);\n};\n\nexport function getAttributeSchemaFromPath({\n path,\n schema,\n components,\n document,\n}: {\n path: string;\n schema: PreviewContextValue['schema'] | PreviewContextValue['components'][string];\n components: PreviewContextValue['components'];\n document: Modules.Documents.AnyDocument;\n}): Schema.Attribute.AnyAttribute {\n /**\n * Create the function that will be recursively called.\n * We don't do recursion on getAttributeSchemaFromPath itself because:\n * - it takes a path string, not the parsed array that's better for recursion\n * - even when several levels deep, we still need access to the root schema and components\n */\n const visitor = (\n currentPathParts: PathPart[],\n currentAttributes: Schema.Attributes,\n currentData: any\n ): Schema.Attribute.AnyAttribute => {\n const [currentPart, ...remainingParts] = currentPathParts;\n\n // Get the data and schema for the current path\n const currentAttribute = currentAttributes[currentPart.name];\n\n if (!currentAttribute) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n if (currentAttribute.type === 'relation') {\n throw new PreviewFieldError('RELATIONS_NOT_HANDLED');\n }\n\n if (currentAttribute.type === 'component') {\n const componentAttributes = components[currentAttribute.component].attributes;\n if (currentAttribute.repeatable) {\n // We must have the index, otherwise we don't know what data to use\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n return visitor(\n remainingParts,\n componentAttributes,\n currentData[currentPart.name][currentPart.index]\n );\n }\n\n // Non repeatable component\n return visitor(remainingParts, componentAttributes, currentData[currentPart.name]);\n }\n\n if (currentAttribute.type === 'dynamiczone') {\n // We must have the index, otherwise we don't know what component we're dealing with\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n const componentData = currentData[currentPart.name][currentPart.index];\n const componentAttributes = components[componentData.__component].attributes;\n return visitor(remainingParts, componentAttributes, componentData);\n }\n\n // Plain regular field. It ends the recursion\n return currentAttributes[currentPart.name];\n };\n\n return visitor(parsePathWithIndices(path), schema.attributes, document);\n}\n\nexport function parseFieldMetaData(strapiSource: string): FieldContentSourceMap | null {\n const searchParams = new URLSearchParams(strapiSource);\n const path = searchParams.get('path');\n const type = searchParams.get('type');\n const documentId = searchParams.get('documentId');\n const locale = searchParams.get('locale');\n const model = searchParams.get('model');\n const kind = searchParams.get('kind');\n\n if (!path || !type || !documentId || !model) {\n return null;\n }\n\n return {\n path,\n type: type as Schema.Attribute.AnyAttribute['type'],\n documentId,\n locale: locale ?? null,\n model: model as UID.Schema | undefined,\n kind: kind ? (kind as Struct.ContentTypeKind) : undefined,\n };\n}\n"],"names":["PreviewFieldError","Error","constructor","messageKey","name","parsePathWithIndices","path","split","map","part","numericIndex","parseInt","isNaN","toString","index","reduce","acc","undefined","length","push","getAttributeSchemaFromPath","schema","components","document","visitor","currentPathParts","currentAttributes","currentData","currentPart","remainingParts","currentAttribute","type","componentAttributes","component","attributes","repeatable","componentData","__component","parseFieldMetaData","strapiSource","searchParams","URLSearchParams","get","documentId","locale","model","kind"],"mappings":"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"}
1
+ {"version":3,"file":"fieldUtils.mjs","sources":["../../../../admin/src/preview/utils/fieldUtils.ts"],"sourcesContent":["import { type FieldContentSourceMap } from '@strapi/admin/strapi-admin';\n\nimport type { PREVIEW_ERROR_MESSAGES } from './constants';\nimport type { PreviewContextValue } from '../pages/Preview';\nimport type { Modules, Schema, Struct, UID } from '@strapi/types';\n\ntype PreviewErrorMessage = keyof typeof PREVIEW_ERROR_MESSAGES;\n\n// Generic error class for preview field operations\nexport class PreviewFieldError extends Error {\n public readonly messageKey: PreviewErrorMessage;\n\n constructor(messageKey: PreviewErrorMessage) {\n super(messageKey);\n this.name = 'PreviewFieldError';\n this.messageKey = messageKey;\n }\n}\n\ntype PathPart = { name: string; index?: number };\n\n// Helper function to parse path with array indices and return clean attribute names\nexport const parsePathWithIndices = (path: string): PathPart[] => {\n // Split by dots, then parse array indices from each part. For example:\n // input \"components.4.field.relations.2.name\"\n // output [{name: \"components\", index: 4}, {name: \"field\"}, {name: \"relations\", index: 2}, {name: \"name\"}]\n return path\n .split('.')\n .map((part) => {\n const numericIndex = parseInt(part, 10);\n if (!isNaN(numericIndex) && part === numericIndex.toString()) {\n // This part is a pure numeric index, return it as an index for the previous part\n return { name: '', index: numericIndex };\n }\n return { name: part };\n })\n .reduce((acc: PathPart[], part) => {\n if (part.name === '' && part.index !== undefined) {\n // This is an index, attach it to the previous part\n if (acc.length > 0) {\n acc[acc.length - 1].index = part.index;\n }\n } else {\n acc.push(part);\n }\n return acc;\n }, []);\n};\n\nexport function getAttributeSchemaFromPath({\n path,\n schema,\n components,\n document,\n}: {\n path: string;\n schema: PreviewContextValue['schema'] | PreviewContextValue['components'][string];\n components: PreviewContextValue['components'];\n document: Modules.Documents.AnyDocument;\n}): Schema.Attribute.AnyAttribute {\n /**\n * Create the function that will be recursively called.\n * We don't do recursion on getAttributeSchemaFromPath itself because:\n * - it takes a path string, not the parsed array that's better for recursion\n * - even when several levels deep, we still need access to the root schema and components\n */\n const visitor = (\n currentPathParts: PathPart[],\n currentAttributes: Schema.Attributes,\n currentData: any\n ): Schema.Attribute.AnyAttribute => {\n const [currentPart, ...remainingParts] = currentPathParts;\n\n // Get the data and schema for the current path\n const currentAttribute = currentAttributes[currentPart.name];\n\n if (!currentAttribute) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n if (currentAttribute.type === 'relation') {\n throw new PreviewFieldError('RELATIONS_NOT_HANDLED');\n }\n\n if (currentAttribute.type === 'component') {\n const componentAttributes = components[currentAttribute.component].attributes;\n if (currentAttribute.repeatable) {\n // We must have the index, otherwise we don't know what data to use\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n return visitor(\n remainingParts,\n componentAttributes,\n currentData[currentPart.name][currentPart.index]\n );\n }\n\n // Non repeatable component\n return visitor(remainingParts, componentAttributes, currentData[currentPart.name]);\n }\n\n if (currentAttribute.type === 'dynamiczone') {\n // We must have the index, otherwise we don't know what component we're dealing with\n if (currentPart.index === undefined) {\n throw new PreviewFieldError('INVALID_FIELD_PATH');\n }\n\n const componentData = currentData[currentPart.name][currentPart.index];\n const componentAttributes = components[componentData.__component].attributes;\n return visitor(remainingParts, componentAttributes, componentData);\n }\n\n // Plain regular field. It ends the recursion\n return currentAttributes[currentPart.name];\n };\n\n return visitor(parsePathWithIndices(path), schema.attributes, document);\n}\n\nexport function parseFieldMetaData(strapiSource: string): FieldContentSourceMap | null {\n const searchParams = new URLSearchParams(strapiSource);\n const path = searchParams.get('path');\n const type = searchParams.get('type');\n const documentId = searchParams.get('documentId');\n const locale = searchParams.get('locale');\n const model = searchParams.get('model');\n const kind = searchParams.get('kind');\n\n if (!path || !type || !documentId || !model) {\n return null;\n }\n\n return {\n path,\n type: type as Schema.Attribute.AnyAttribute['type'],\n documentId,\n locale: locale ?? null,\n model: model as UID.Schema | undefined,\n kind: kind ? (kind as Struct.ContentTypeKind) : undefined,\n };\n}\n"],"names":["PreviewFieldError","Error","messageKey","name","parsePathWithIndices","path","split","map","part","numericIndex","parseInt","isNaN","toString","index","reduce","acc","undefined","length","push","getAttributeSchemaFromPath","schema","components","document","visitor","currentPathParts","currentAttributes","currentData","currentPart","remainingParts","currentAttribute","type","componentAttributes","component","attributes","repeatable","componentData","__component","parseFieldMetaData","strapiSource","searchParams","URLSearchParams","get","documentId","locale","model","kind"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"previewScript.js","sources":["../../../../admin/src/preview/utils/previewScript.ts"],"sourcesContent":["// NOTE: This override is for the properties on _user's site_, it's not about Strapi Admin.\ndeclare global {\n interface Window {\n __strapi_previewCleanup?: () => void;\n STRAPI_HIGHLIGHT_HOVER_COLOR?: string;\n STRAPI_HIGHLIGHT_ACTIVE_COLOR?: string;\n STRAPI_DISABLE_STEGA_DECODING?: boolean;\n }\n}\n\n/**\n * previewScript will be injected into the preview iframe after being stringified.\n * Therefore it CANNOT use any imports, or refer to any variables outside of its own scope.\n * It's why many functions are defined within previewScript, it's the only way to avoid going full spaghetti.\n * To get a better overview of everything previewScript does, go to the orchestration part at its end.\n */\nconst previewScript = (shouldRun = true) => {\n /* -----------------------------------------------------------------------------------------------\n * Params\n * ---------------------------------------------------------------------------------------------*/\n const HIGHLIGHT_PADDING = 2; // in pixels\n const HIGHLIGHT_HOVER_COLOR = window.STRAPI_HIGHLIGHT_HOVER_COLOR ?? '#4945ff'; // dark primary500\n const HIGHLIGHT_ACTIVE_COLOR = window.STRAPI_HIGHLIGHT_ACTIVE_COLOR ?? '#7b79ff'; // dark primary600\n const HIGHLIGHT_STYLES_ID = 'strapi-preview-highlight-styles';\n const DOUBLE_CLICK_TIMEOUT = 300; // milliseconds to wait for potential double-click\n\n const DISABLE_STEGA_DECODING = window.STRAPI_DISABLE_STEGA_DECODING ?? false;\n const SOURCE_ATTRIBUTE = 'data-strapi-source';\n const OVERLAY_ID = 'strapi-preview-overlay';\n const INTERNAL_EVENTS = {\n STRAPI_FIELD_FOCUS: 'strapiFieldFocus',\n STRAPI_FIELD_BLUR: 'strapiFieldBlur',\n STRAPI_FIELD_CHANGE: 'strapiFieldChange',\n STRAPI_FIELD_FOCUS_INTENT: 'strapiFieldFocusIntent',\n STRAPI_FIELD_SINGLE_CLICK_HINT: 'strapiFieldSingleClickHint',\n } as const;\n\n /**\n * Calling the function in no-run mode lets us retrieve the constants from other files and keep\n * a single source of truth for them. It's the only way to do this because this script can't\n * refer to any variables outside of its own scope, because it's stringified before it's run.\n */\n if (!shouldRun) {\n return { INTERNAL_EVENTS };\n }\n\n /* -----------------------------------------------------------------------------------------------\n * Utils\n * ---------------------------------------------------------------------------------------------*/\n\n const sendMessage = (\n type: (typeof INTERNAL_EVENTS)[keyof typeof INTERNAL_EVENTS],\n payload: unknown\n ) => {\n window.parent.postMessage({ type, payload }, '*');\n };\n\n const getElementsByPath = (path: string) => {\n return document.querySelectorAll(`[${SOURCE_ATTRIBUTE}*=\"path=${path}\"]`);\n };\n\n /* -----------------------------------------------------------------------------------------------\n * Functionality pieces\n * ---------------------------------------------------------------------------------------------*/\n\n const setupStegaDOMObserver = async () => {\n if (DISABLE_STEGA_DECODING) {\n return;\n }\n\n const { vercelStegaDecode: stegaDecode, vercelStegaClean: stegaClean } = await import(\n // @ts-expect-error it's not a local dependency\n // eslint-disable-next-line import/no-unresolved\n 'https://cdn.jsdelivr.net/npm/@vercel/stega@0.1.2/+esm'\n );\n\n const applyStegaToElement = (element: Element) => {\n const directTextNodes = Array.from(element.childNodes).filter(\n (node) => node.nodeType === Node.TEXT_NODE\n );\n\n const directTextContent = directTextNodes.map((node) => node.textContent || '').join('');\n\n if (directTextContent) {\n try {\n // TODO: check if we can call split instead of decode+clean\n const result = stegaDecode(directTextContent);\n if (result && 'strapiSource' in result) {\n element.setAttribute(SOURCE_ATTRIBUTE, result.strapiSource);\n\n // Remove encoded part from DOM text content (to avoid breaking links for example)\n directTextNodes.forEach((node) => {\n if (node.textContent) {\n const cleanedText = stegaClean(node.textContent);\n if (cleanedText !== node.textContent) {\n node.textContent = cleanedText;\n }\n }\n });\n }\n } catch (error) {}\n }\n };\n\n // Process all existing elements\n const allElements = document.querySelectorAll('*');\n Array.from(allElements).forEach(applyStegaToElement);\n\n // Create observer for new elements and text changes\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n // Handle added nodes\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n // Process the added element\n applyStegaToElement(element);\n // Process all child elements\n const childElements = element.querySelectorAll('*');\n Array.from(childElements).forEach(applyStegaToElement);\n }\n });\n }\n\n // Handle text content changes\n if (mutation.type === 'characterData' && mutation.target.parentElement) {\n applyStegaToElement(mutation.target.parentElement);\n }\n });\n });\n\n observer.observe(document, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n return observer;\n };\n\n const createHighlightStyles = () => {\n const existingStyles = document.getElementById(HIGHLIGHT_STYLES_ID);\n // Remove existing styles to avoid duplicates\n if (existingStyles) {\n existingStyles.remove();\n }\n\n const styleElement = document.createElement('style');\n styleElement.id = HIGHLIGHT_STYLES_ID;\n styleElement.textContent = `\n .strapi-highlight {\n position: absolute;\n outline: 2px solid transparent;\n pointer-events: auto;\n border-radius: 2px;\n background-color: transparent;\n will-change: transform;\n transition: outline-color 0.1s ease-in-out;\n }\n\n .strapi-highlight:hover {\n outline-color: ${HIGHLIGHT_HOVER_COLOR} !important;\n }\n\n .strapi-highlight.strapi-highlight-focused {\n outline-color: ${HIGHLIGHT_ACTIVE_COLOR} !important;\n outline-width: 3px !important;\n }\n `;\n\n document.head.appendChild(styleElement);\n return styleElement;\n };\n\n const createOverlaySystem = () => {\n // Clean up before creating a new overlay so we can safely call previewScript multiple times\n window.__strapi_previewCleanup?.();\n document.getElementById(OVERLAY_ID)?.remove();\n\n const overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 9999;\n `;\n\n window.document.body.appendChild(overlay);\n return overlay;\n };\n\n type EventListenersList = Array<{\n element: HTMLElement | Window;\n type: keyof HTMLElementEventMap | 'message';\n handler: EventListener;\n }>;\n\n const createHighlightManager = (overlay: HTMLElement) => {\n const elementsToHighlight = new Map<Element, HTMLElement>();\n const eventListeners: EventListenersList = [];\n const focusedHighlights: HTMLElement[] = [];\n const pendingClicks = new Map<Element, number>(); // number is timeout id\n let focusedField: string | null = null;\n\n const drawHighlight = (target: Element, highlight: HTMLElement) => {\n if (!highlight) return;\n\n const rect = target.getBoundingClientRect();\n highlight.style.width = `${rect.width + HIGHLIGHT_PADDING * 2}px`;\n highlight.style.height = `${rect.height + HIGHLIGHT_PADDING * 2}px`;\n highlight.style.transform = `translate(${rect.left - HIGHLIGHT_PADDING}px, ${rect.top - HIGHLIGHT_PADDING}px)`;\n };\n\n const updateAllHighlights = () => {\n elementsToHighlight.forEach((highlight, element) => {\n drawHighlight(element, highlight);\n });\n };\n\n const createHighlightForElement = (element: HTMLElement) => {\n if (elementsToHighlight.has(element)) {\n // Already has a highlight\n return;\n }\n\n const highlight = document.createElement('div');\n highlight.className = 'strapi-highlight';\n const clickHandler = (event: MouseEvent) => {\n // Skip if this is a re-dispatched event from our delayed handler to avoid infinite loops\n if ((event as any).__strapi_redispatched) {\n return;\n }\n\n // Prevent the immediate action for interactive elements\n event.preventDefault();\n event.stopPropagation();\n\n // Clear any existing timeout for this element\n const existingTimeout = pendingClicks.get(element);\n if (existingTimeout) {\n window.clearTimeout(existingTimeout);\n pendingClicks.delete(element);\n }\n\n // Set up a delayed single-click handler\n const timeout = window.setTimeout(() => {\n pendingClicks.delete(element);\n\n // Send single-click hint notification\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT, null);\n\n // Re-trigger the click on the underlying element after the double-click timeout\n // Create a new event to dispatch with a marker to prevent re-handling\n const newEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n detail: 1,\n button: event.button,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: event.clientY,\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n });\n (newEvent as any).__strapi_redispatched = true;\n element.dispatchEvent(newEvent);\n }, DOUBLE_CLICK_TIMEOUT);\n\n pendingClicks.set(element, timeout);\n };\n\n const doubleClickHandler = (event: MouseEvent) => {\n // Prevent the default behavior on double-click\n event.preventDefault();\n event.stopPropagation();\n\n // Clear any pending single-click action\n const existingTimeout = pendingClicks.get(element);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n pendingClicks.delete(element);\n }\n\n const sourceAttribute = element.getAttribute(SOURCE_ATTRIBUTE);\n if (sourceAttribute) {\n const rect = element.getBoundingClientRect();\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT, {\n path: sourceAttribute,\n position: {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n },\n });\n }\n };\n\n const mouseDownHandler = (event: MouseEvent) => {\n // Prevent default multi click to select behavior\n if (event.detail >= 2) {\n event.preventDefault();\n }\n };\n\n highlight.addEventListener('click', clickHandler);\n highlight.addEventListener('dblclick', doubleClickHandler);\n highlight.addEventListener('mousedown', mouseDownHandler);\n\n // Store event listeners for cleanup\n eventListeners.push(\n { element: highlight, type: 'click', handler: clickHandler as EventListener },\n { element: highlight, type: 'dblclick', handler: doubleClickHandler as EventListener },\n { element: highlight, type: 'mousedown', handler: mouseDownHandler as EventListener }\n );\n\n elementsToHighlight.set(element, highlight);\n overlay.appendChild(highlight);\n drawHighlight(element, highlight);\n };\n\n const removeHighlightForElement = (element: Element) => {\n const highlight = elementsToHighlight.get(element);\n\n if (!highlight) return;\n\n // Clear any pending click timeout for this element\n const pendingTimeout = pendingClicks.get(element);\n if (pendingTimeout) {\n window.clearTimeout(pendingTimeout);\n pendingClicks.delete(element);\n }\n\n highlight.remove();\n elementsToHighlight.delete(element);\n\n // Remove event listeners for this highlight\n const listenersToRemove = eventListeners.filter((listener) => listener.element === highlight);\n listenersToRemove.forEach(({ element, type, handler }) => {\n element.removeEventListener(type, handler);\n });\n\n // Mutate eventListeners to remove listeners for this highlight\n eventListeners.splice(\n 0,\n eventListeners.length,\n ...eventListeners.filter((listener) => listener.element !== highlight)\n );\n };\n\n // Process all existing elements with source attributes\n const initialElements = window.document.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);\n Array.from(initialElements).forEach((element) => {\n if (element instanceof HTMLElement) {\n createHighlightForElement(element);\n }\n });\n\n return {\n get elements() {\n return Array.from(elementsToHighlight.keys());\n },\n get highlights() {\n return Array.from(elementsToHighlight.values());\n },\n updateAllHighlights,\n eventListeners,\n focusedHighlights,\n createHighlightForElement,\n removeHighlightForElement,\n setFocusedField: (field: string | null) => {\n focusedField = field;\n },\n getFocusedField: () => focusedField,\n clearAllPendingClicks: () => {\n pendingClicks.forEach((timeout) => clearTimeout(timeout));\n pendingClicks.clear();\n },\n };\n };\n\n type HighlightManager = ReturnType<typeof createHighlightManager>;\n\n /**\n * We need to track scroll in all the element parents in order to keep the highlight position\n * in sync with the element position. Listening to window scroll is not enough because the\n * element can be inside one or more scrollable containers.\n */\n const setupScrollManagement = (highlightManager: HighlightManager) => {\n const updateOnScroll = () => {\n highlightManager.updateAllHighlights();\n };\n\n const scrollableElements = new Set<Element | Window>();\n scrollableElements.add(window);\n\n // Find all scrollable ancestors for all tracked elements and set up scroll listeners\n highlightManager.elements.forEach((element) => {\n let parent = element.parentElement;\n while (parent) {\n const computedStyle = window.getComputedStyle(parent);\n const overflow = computedStyle.overflow + computedStyle.overflowX + computedStyle.overflowY;\n\n if (overflow.includes('scroll') || overflow.includes('auto')) {\n scrollableElements.add(parent);\n }\n\n parent = parent.parentElement;\n }\n });\n\n // Add scroll listeners to all scrollable elements\n scrollableElements.forEach((element) => {\n if (element === window) {\n window.addEventListener('scroll', updateOnScroll);\n window.addEventListener('resize', updateOnScroll);\n } else {\n element.addEventListener('scroll', updateOnScroll);\n }\n });\n\n const cleanup = () => {\n scrollableElements.forEach((element) => {\n if (element === window) {\n window.removeEventListener('scroll', updateOnScroll);\n window.removeEventListener('resize', updateOnScroll);\n } else {\n (element as Element).removeEventListener('scroll', updateOnScroll);\n }\n });\n };\n\n return { cleanup };\n };\n\n const setupObservers = (\n highlightManager: HighlightManager,\n stegaObserver: MutationObserver | undefined\n ) => {\n const resizeObserver = new ResizeObserver(() => {\n highlightManager.updateAllHighlights();\n });\n\n const observeElementForResize = (element: Element) => {\n resizeObserver.observe(element);\n };\n\n // Observe existing elements\n highlightManager.elements.forEach(observeElementForResize);\n resizeObserver.observe(document.documentElement);\n\n // Create highlight observer to watch for new elements with source attributes\n const highlightObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === SOURCE_ATTRIBUTE) {\n const target = mutation.target as HTMLElement;\n if (target.hasAttribute(SOURCE_ATTRIBUTE)) {\n highlightManager.createHighlightForElement(target);\n observeElementForResize(target);\n } else {\n highlightManager.removeHighlightForElement(target);\n }\n }\n\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n // Check if the added element has source attribute\n if (element.hasAttribute(SOURCE_ATTRIBUTE) && element instanceof HTMLElement) {\n highlightManager.createHighlightForElement(element);\n observeElementForResize(element);\n }\n // Check all child elements for source attributes\n const elementsWithSource = element.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);\n Array.from(elementsWithSource).forEach((childElement) => {\n if (childElement instanceof HTMLElement) {\n highlightManager.createHighlightForElement(childElement);\n observeElementForResize(childElement);\n }\n });\n }\n });\n\n mutation.removedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n highlightManager.removeHighlightForElement(element);\n }\n });\n }\n });\n });\n\n highlightObserver.observe(document, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [SOURCE_ATTRIBUTE],\n });\n\n return {\n resizeObserver,\n highlightObserver,\n stegaObserver,\n };\n };\n\n const setupEventHandlers = (highlightManager: HighlightManager) => {\n const handleMessage = (event: MessageEvent) => {\n if (!event.data?.type) return;\n\n // The user typed in an input, reflect the change in the preview\n if (event.data.type === INTERNAL_EVENTS.STRAPI_FIELD_CHANGE) {\n const { field, value } = event.data.payload;\n if (!field) return;\n\n getElementsByPath(field).forEach((element) => {\n if (element instanceof HTMLElement) {\n element.textContent = value || '';\n }\n });\n\n // Update highlight dimensions since the new text content may affect them\n highlightManager.updateAllHighlights();\n return;\n }\n\n // The user focused a new input, update the highlights in the preview\n if (event.data.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS) {\n const { field } = event.data.payload;\n if (!field) return;\n\n // Clear existing focused highlights\n highlightManager.focusedHighlights.forEach((highlight: HTMLElement) => {\n highlight.classList.remove('strapi-highlight-focused');\n });\n highlightManager.focusedHighlights.length = 0;\n\n // Set new focused field and highlight matching elements\n highlightManager.setFocusedField(field);\n getElementsByPath(field).forEach((element, index) => {\n if (index === 0) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n const highlight =\n highlightManager.highlights[Array.from(highlightManager.elements).indexOf(element)];\n if (highlight) {\n highlight.classList.add('strapi-highlight-focused');\n highlightManager.focusedHighlights.push(highlight);\n }\n });\n return;\n }\n\n // The user is no longer focusing an input, remove the highlights\n if (event.data.type === INTERNAL_EVENTS.STRAPI_FIELD_BLUR) {\n const { field } = event.data.payload;\n if (field !== highlightManager.getFocusedField()) return;\n\n highlightManager.focusedHighlights.forEach((highlight: HTMLElement) => {\n highlight.classList.remove('strapi-highlight-focused');\n });\n highlightManager.focusedHighlights.length = 0;\n highlightManager.setFocusedField(null);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n // Add the message handler to the cleanup list\n const messageEventListener = {\n element: window,\n type: 'message' as keyof HTMLElementEventMap,\n handler: handleMessage as EventListener,\n };\n\n return [...highlightManager.eventListeners, messageEventListener];\n };\n\n const createCleanupSystem = (\n overlay: HTMLElement,\n observers: ReturnType<typeof setupObservers>,\n scrollManager: ReturnType<typeof setupScrollManagement>,\n eventHandlers: EventListenersList,\n highlightManager: HighlightManager\n ) => {\n window.__strapi_previewCleanup = () => {\n observers.resizeObserver.disconnect();\n observers.highlightObserver.disconnect();\n observers.stegaObserver?.disconnect();\n\n // Clean up scroll listeners\n scrollManager.cleanup();\n\n // Clear all pending click timeouts\n highlightManager.clearAllPendingClicks();\n\n // Remove highlight event listeners\n eventHandlers.forEach(({ element, type, handler }) => {\n element.removeEventListener(type, handler);\n });\n\n // Clean up CSS styles\n const existingStyles = document.getElementById(HIGHLIGHT_STYLES_ID);\n if (existingStyles) {\n existingStyles.remove();\n }\n\n overlay.remove();\n };\n };\n\n /* -----------------------------------------------------------------------------------------------\n * Orchestration\n * ---------------------------------------------------------------------------------------------*/\n\n setupStegaDOMObserver().then((stegaObserver) => {\n createHighlightStyles();\n const overlay = createOverlaySystem();\n const highlightManager = createHighlightManager(overlay);\n const observers = setupObservers(highlightManager, stegaObserver);\n const scrollManager = setupScrollManagement(highlightManager);\n const eventHandlers = setupEventHandlers(highlightManager);\n createCleanupSystem(overlay, observers, scrollManager, eventHandlers, highlightManager);\n });\n};\n\nexport { previewScript };\n"],"names":["previewScript","shouldRun","HIGHLIGHT_PADDING","HIGHLIGHT_HOVER_COLOR","window","STRAPI_HIGHLIGHT_HOVER_COLOR","HIGHLIGHT_ACTIVE_COLOR","STRAPI_HIGHLIGHT_ACTIVE_COLOR","HIGHLIGHT_STYLES_ID","DOUBLE_CLICK_TIMEOUT","DISABLE_STEGA_DECODING","STRAPI_DISABLE_STEGA_DECODING","SOURCE_ATTRIBUTE","OVERLAY_ID","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS","STRAPI_FIELD_BLUR","STRAPI_FIELD_CHANGE","STRAPI_FIELD_FOCUS_INTENT","STRAPI_FIELD_SINGLE_CLICK_HINT","sendMessage","type","payload","parent","postMessage","getElementsByPath","path","document","querySelectorAll","setupStegaDOMObserver","vercelStegaDecode","stegaDecode","vercelStegaClean","stegaClean","applyStegaToElement","element","directTextNodes","Array","from","childNodes","filter","node","nodeType","Node","TEXT_NODE","directTextContent","map","textContent","join","result","setAttribute","strapiSource","forEach","cleanedText","error","allElements","observer","MutationObserver","mutations","mutation","addedNodes","ELEMENT_NODE","childElements","target","parentElement","observe","childList","subtree","characterData","createHighlightStyles","existingStyles","getElementById","remove","styleElement","createElement","id","head","appendChild","createOverlaySystem","__strapi_previewCleanup","overlay","style","cssText","body","createHighlightManager","elementsToHighlight","Map","eventListeners","focusedHighlights","pendingClicks","focusedField","drawHighlight","highlight","rect","getBoundingClientRect","width","height","transform","left","top","updateAllHighlights","createHighlightForElement","has","className","clickHandler","event","__strapi_redispatched","preventDefault","stopPropagation","existingTimeout","get","clearTimeout","delete","timeout","setTimeout","newEvent","MouseEvent","bubbles","cancelable","view","detail","button","buttons","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","dispatchEvent","set","doubleClickHandler","sourceAttribute","getAttribute","position","right","bottom","mouseDownHandler","addEventListener","push","handler","removeHighlightForElement","pendingTimeout","listenersToRemove","listener","removeEventListener","splice","length","initialElements","HTMLElement","elements","keys","highlights","values","setFocusedField","field","getFocusedField","clearAllPendingClicks","clear","setupScrollManagement","highlightManager","updateOnScroll","scrollableElements","Set","add","computedStyle","getComputedStyle","overflow","overflowX","overflowY","includes","cleanup","setupObservers","stegaObserver","resizeObserver","ResizeObserver","observeElementForResize","documentElement","highlightObserver","attributeName","hasAttribute","elementsWithSource","childElement","removedNodes","attributes","attributeFilter","setupEventHandlers","handleMessage","data","value","classList","index","scrollIntoView","behavior","block","indexOf","messageEventListener","createCleanupSystem","observers","scrollManager","eventHandlers","disconnect","then"],"mappings":"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"}
1
+ {"version":3,"file":"previewScript.js","sources":["../../../../admin/src/preview/utils/previewScript.ts"],"sourcesContent":["// NOTE: This override is for the properties on _user's site_, it's not about Strapi Admin.\ndeclare global {\n interface Window {\n __strapi_previewCleanup?: () => void;\n STRAPI_HIGHLIGHT_HOVER_COLOR?: string;\n STRAPI_HIGHLIGHT_ACTIVE_COLOR?: string;\n STRAPI_DISABLE_STEGA_DECODING?: boolean;\n }\n}\n\n/**\n * previewScript will be injected into the preview iframe after being stringified.\n * Therefore it CANNOT use any imports, or refer to any variables outside of its own scope.\n * It's why many functions are defined within previewScript, it's the only way to avoid going full spaghetti.\n * To get a better overview of everything previewScript does, go to the orchestration part at its end.\n */\nconst previewScript = (shouldRun = true) => {\n /* -----------------------------------------------------------------------------------------------\n * Params\n * ---------------------------------------------------------------------------------------------*/\n const HIGHLIGHT_PADDING = 2; // in pixels\n const HIGHLIGHT_HOVER_COLOR = window.STRAPI_HIGHLIGHT_HOVER_COLOR ?? '#4945ff'; // dark primary500\n const HIGHLIGHT_ACTIVE_COLOR = window.STRAPI_HIGHLIGHT_ACTIVE_COLOR ?? '#7b79ff'; // dark primary600\n const HIGHLIGHT_STYLES_ID = 'strapi-preview-highlight-styles';\n const DOUBLE_CLICK_TIMEOUT = 300; // milliseconds to wait for potential double-click\n\n const DISABLE_STEGA_DECODING = window.STRAPI_DISABLE_STEGA_DECODING ?? false;\n const SOURCE_ATTRIBUTE = 'data-strapi-source';\n const OVERLAY_ID = 'strapi-preview-overlay';\n const INTERNAL_EVENTS = {\n STRAPI_FIELD_FOCUS: 'strapiFieldFocus',\n STRAPI_FIELD_BLUR: 'strapiFieldBlur',\n STRAPI_FIELD_CHANGE: 'strapiFieldChange',\n STRAPI_FIELD_FOCUS_INTENT: 'strapiFieldFocusIntent',\n STRAPI_FIELD_SINGLE_CLICK_HINT: 'strapiFieldSingleClickHint',\n } as const;\n\n /**\n * Calling the function in no-run mode lets us retrieve the constants from other files and keep\n * a single source of truth for them. It's the only way to do this because this script can't\n * refer to any variables outside of its own scope, because it's stringified before it's run.\n */\n if (!shouldRun) {\n return { INTERNAL_EVENTS };\n }\n\n /* -----------------------------------------------------------------------------------------------\n * Utils\n * ---------------------------------------------------------------------------------------------*/\n\n const sendMessage = (\n type: (typeof INTERNAL_EVENTS)[keyof typeof INTERNAL_EVENTS],\n payload: unknown\n ) => {\n window.parent.postMessage({ type, payload }, '*');\n };\n\n const getElementsByPath = (path: string) => {\n return document.querySelectorAll(`[${SOURCE_ATTRIBUTE}*=\"path=${path}\"]`);\n };\n\n /* -----------------------------------------------------------------------------------------------\n * Functionality pieces\n * ---------------------------------------------------------------------------------------------*/\n\n const setupStegaDOMObserver = async () => {\n if (DISABLE_STEGA_DECODING) {\n return;\n }\n\n const { vercelStegaDecode: stegaDecode, vercelStegaClean: stegaClean } = await import(\n // @ts-expect-error it's not a local dependency\n // eslint-disable-next-line import/no-unresolved\n 'https://cdn.jsdelivr.net/npm/@vercel/stega@0.1.2/+esm'\n );\n\n const applyStegaToElement = (element: Element) => {\n const directTextNodes = Array.from(element.childNodes).filter(\n (node) => node.nodeType === Node.TEXT_NODE\n );\n\n const directTextContent = directTextNodes.map((node) => node.textContent || '').join('');\n\n if (directTextContent) {\n try {\n // TODO: check if we can call split instead of decode+clean\n const result = stegaDecode(directTextContent);\n if (result && 'strapiSource' in result) {\n element.setAttribute(SOURCE_ATTRIBUTE, result.strapiSource);\n\n // Remove encoded part from DOM text content (to avoid breaking links for example)\n directTextNodes.forEach((node) => {\n if (node.textContent) {\n const cleanedText = stegaClean(node.textContent);\n if (cleanedText !== node.textContent) {\n node.textContent = cleanedText;\n }\n }\n });\n }\n } catch (error) {}\n }\n };\n\n // Process all existing elements\n const allElements = document.querySelectorAll('*');\n Array.from(allElements).forEach(applyStegaToElement);\n\n // Create observer for new elements and text changes\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n // Handle added nodes\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n // Process the added element\n applyStegaToElement(element);\n // Process all child elements\n const childElements = element.querySelectorAll('*');\n Array.from(childElements).forEach(applyStegaToElement);\n }\n });\n }\n\n // Handle text content changes\n if (mutation.type === 'characterData' && mutation.target.parentElement) {\n applyStegaToElement(mutation.target.parentElement);\n }\n });\n });\n\n observer.observe(document, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n\n return observer;\n };\n\n const createHighlightStyles = () => {\n const existingStyles = document.getElementById(HIGHLIGHT_STYLES_ID);\n // Remove existing styles to avoid duplicates\n if (existingStyles) {\n existingStyles.remove();\n }\n\n const styleElement = document.createElement('style');\n styleElement.id = HIGHLIGHT_STYLES_ID;\n styleElement.textContent = `\n .strapi-highlight {\n position: absolute;\n outline: 2px solid transparent;\n pointer-events: auto;\n border-radius: 2px;\n background-color: transparent;\n will-change: transform;\n transition: outline-color 0.1s ease-in-out;\n }\n\n .strapi-highlight:hover {\n outline-color: ${HIGHLIGHT_HOVER_COLOR} !important;\n }\n\n .strapi-highlight.strapi-highlight-focused {\n outline-color: ${HIGHLIGHT_ACTIVE_COLOR} !important;\n outline-width: 3px !important;\n }\n `;\n\n document.head.appendChild(styleElement);\n return styleElement;\n };\n\n const createOverlaySystem = () => {\n // Clean up before creating a new overlay so we can safely call previewScript multiple times\n window.__strapi_previewCleanup?.();\n document.getElementById(OVERLAY_ID)?.remove();\n\n const overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 9999;\n `;\n\n window.document.body.appendChild(overlay);\n return overlay;\n };\n\n type EventListenersList = Array<{\n element: HTMLElement | Window;\n type: keyof HTMLElementEventMap | 'message';\n handler: EventListener;\n }>;\n\n const createHighlightManager = (overlay: HTMLElement) => {\n const elementsToHighlight = new Map<Element, HTMLElement>();\n const eventListeners: EventListenersList = [];\n const focusedHighlights: HTMLElement[] = [];\n const pendingClicks = new Map<Element, number>(); // number is timeout id\n let focusedField: string | null = null;\n\n const drawHighlight = (target: Element, highlight: HTMLElement) => {\n if (!highlight) return;\n\n const rect = target.getBoundingClientRect();\n highlight.style.width = `${rect.width + HIGHLIGHT_PADDING * 2}px`;\n highlight.style.height = `${rect.height + HIGHLIGHT_PADDING * 2}px`;\n highlight.style.transform = `translate(${rect.left - HIGHLIGHT_PADDING}px, ${rect.top - HIGHLIGHT_PADDING}px)`;\n };\n\n const updateAllHighlights = () => {\n elementsToHighlight.forEach((highlight, element) => {\n drawHighlight(element, highlight);\n });\n };\n\n const createHighlightForElement = (element: HTMLElement) => {\n if (elementsToHighlight.has(element)) {\n // Already has a highlight\n return;\n }\n\n const highlight = document.createElement('div');\n highlight.className = 'strapi-highlight';\n const clickHandler = (event: MouseEvent) => {\n // Skip if this is a re-dispatched event from our delayed handler to avoid infinite loops\n if ((event as any).__strapi_redispatched) {\n return;\n }\n\n // Prevent the immediate action for interactive elements\n event.preventDefault();\n event.stopPropagation();\n\n // Clear any existing timeout for this element\n const existingTimeout = pendingClicks.get(element);\n if (existingTimeout) {\n window.clearTimeout(existingTimeout);\n pendingClicks.delete(element);\n }\n\n // Set up a delayed single-click handler\n const timeout = window.setTimeout(() => {\n pendingClicks.delete(element);\n\n // Send single-click hint notification\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT, null);\n\n // Re-trigger the click on the underlying element after the double-click timeout\n // Create a new event to dispatch with a marker to prevent re-handling\n const newEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window,\n detail: 1,\n button: event.button,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: event.clientY,\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey,\n metaKey: event.metaKey,\n });\n (newEvent as any).__strapi_redispatched = true;\n element.dispatchEvent(newEvent);\n }, DOUBLE_CLICK_TIMEOUT);\n\n pendingClicks.set(element, timeout);\n };\n\n const doubleClickHandler = (event: MouseEvent) => {\n // Prevent the default behavior on double-click\n event.preventDefault();\n event.stopPropagation();\n\n // Clear any pending single-click action\n const existingTimeout = pendingClicks.get(element);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n pendingClicks.delete(element);\n }\n\n const sourceAttribute = element.getAttribute(SOURCE_ATTRIBUTE);\n if (sourceAttribute) {\n const rect = element.getBoundingClientRect();\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT, {\n path: sourceAttribute,\n position: {\n top: rect.top,\n left: rect.left,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height,\n },\n });\n }\n };\n\n const mouseDownHandler = (event: MouseEvent) => {\n // Prevent default multi click to select behavior\n if (event.detail >= 2) {\n event.preventDefault();\n }\n };\n\n highlight.addEventListener('click', clickHandler);\n highlight.addEventListener('dblclick', doubleClickHandler);\n highlight.addEventListener('mousedown', mouseDownHandler);\n\n // Store event listeners for cleanup\n eventListeners.push(\n { element: highlight, type: 'click', handler: clickHandler as EventListener },\n { element: highlight, type: 'dblclick', handler: doubleClickHandler as EventListener },\n { element: highlight, type: 'mousedown', handler: mouseDownHandler as EventListener }\n );\n\n elementsToHighlight.set(element, highlight);\n overlay.appendChild(highlight);\n drawHighlight(element, highlight);\n };\n\n const removeHighlightForElement = (element: Element) => {\n const highlight = elementsToHighlight.get(element);\n\n if (!highlight) return;\n\n // Clear any pending click timeout for this element\n const pendingTimeout = pendingClicks.get(element);\n if (pendingTimeout) {\n window.clearTimeout(pendingTimeout);\n pendingClicks.delete(element);\n }\n\n highlight.remove();\n elementsToHighlight.delete(element);\n\n // Remove event listeners for this highlight\n const listenersToRemove = eventListeners.filter((listener) => listener.element === highlight);\n listenersToRemove.forEach(({ element, type, handler }) => {\n element.removeEventListener(type, handler);\n });\n\n // Mutate eventListeners to remove listeners for this highlight\n eventListeners.splice(\n 0,\n eventListeners.length,\n ...eventListeners.filter((listener) => listener.element !== highlight)\n );\n };\n\n // Process all existing elements with source attributes\n const initialElements = window.document.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);\n Array.from(initialElements).forEach((element) => {\n if (element instanceof HTMLElement) {\n createHighlightForElement(element);\n }\n });\n\n return {\n get elements() {\n return Array.from(elementsToHighlight.keys());\n },\n get highlights() {\n return Array.from(elementsToHighlight.values());\n },\n updateAllHighlights,\n eventListeners,\n focusedHighlights,\n createHighlightForElement,\n removeHighlightForElement,\n setFocusedField: (field: string | null) => {\n focusedField = field;\n },\n getFocusedField: () => focusedField,\n clearAllPendingClicks: () => {\n pendingClicks.forEach((timeout) => clearTimeout(timeout));\n pendingClicks.clear();\n },\n };\n };\n\n type HighlightManager = ReturnType<typeof createHighlightManager>;\n\n /**\n * We need to track scroll in all the element parents in order to keep the highlight position\n * in sync with the element position. Listening to window scroll is not enough because the\n * element can be inside one or more scrollable containers.\n */\n const setupScrollManagement = (highlightManager: HighlightManager) => {\n const updateOnScroll = () => {\n highlightManager.updateAllHighlights();\n };\n\n const scrollableElements = new Set<Element | Window>();\n scrollableElements.add(window);\n\n // Find all scrollable ancestors for all tracked elements and set up scroll listeners\n highlightManager.elements.forEach((element) => {\n let parent = element.parentElement;\n while (parent) {\n const computedStyle = window.getComputedStyle(parent);\n const overflow = computedStyle.overflow + computedStyle.overflowX + computedStyle.overflowY;\n\n if (overflow.includes('scroll') || overflow.includes('auto')) {\n scrollableElements.add(parent);\n }\n\n parent = parent.parentElement;\n }\n });\n\n // Add scroll listeners to all scrollable elements\n scrollableElements.forEach((element) => {\n if (element === window) {\n window.addEventListener('scroll', updateOnScroll);\n window.addEventListener('resize', updateOnScroll);\n } else {\n element.addEventListener('scroll', updateOnScroll);\n }\n });\n\n const cleanup = () => {\n scrollableElements.forEach((element) => {\n if (element === window) {\n window.removeEventListener('scroll', updateOnScroll);\n window.removeEventListener('resize', updateOnScroll);\n } else {\n (element as Element).removeEventListener('scroll', updateOnScroll);\n }\n });\n };\n\n return { cleanup };\n };\n\n const setupObservers = (\n highlightManager: HighlightManager,\n stegaObserver: MutationObserver | undefined\n ) => {\n const resizeObserver = new ResizeObserver(() => {\n highlightManager.updateAllHighlights();\n });\n\n const observeElementForResize = (element: Element) => {\n resizeObserver.observe(element);\n };\n\n // Observe existing elements\n highlightManager.elements.forEach(observeElementForResize);\n resizeObserver.observe(document.documentElement);\n\n // Create highlight observer to watch for new elements with source attributes\n const highlightObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === SOURCE_ATTRIBUTE) {\n const target = mutation.target as HTMLElement;\n if (target.hasAttribute(SOURCE_ATTRIBUTE)) {\n highlightManager.createHighlightForElement(target);\n observeElementForResize(target);\n } else {\n highlightManager.removeHighlightForElement(target);\n }\n }\n\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n // Check if the added element has source attribute\n if (element.hasAttribute(SOURCE_ATTRIBUTE) && element instanceof HTMLElement) {\n highlightManager.createHighlightForElement(element);\n observeElementForResize(element);\n }\n // Check all child elements for source attributes\n const elementsWithSource = element.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);\n Array.from(elementsWithSource).forEach((childElement) => {\n if (childElement instanceof HTMLElement) {\n highlightManager.createHighlightForElement(childElement);\n observeElementForResize(childElement);\n }\n });\n }\n });\n\n mutation.removedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n highlightManager.removeHighlightForElement(element);\n }\n });\n }\n });\n });\n\n highlightObserver.observe(document, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [SOURCE_ATTRIBUTE],\n });\n\n return {\n resizeObserver,\n highlightObserver,\n stegaObserver,\n };\n };\n\n const setupEventHandlers = (highlightManager: HighlightManager) => {\n const handleMessage = (event: MessageEvent) => {\n if (!event.data?.type) return;\n\n // The user typed in an input, reflect the change in the preview\n if (event.data.type === INTERNAL_EVENTS.STRAPI_FIELD_CHANGE) {\n const { field, value } = event.data.payload;\n if (!field) return;\n\n getElementsByPath(field).forEach((element) => {\n if (element instanceof HTMLElement) {\n element.textContent = value || '';\n }\n });\n\n // Update highlight dimensions since the new text content may affect them\n highlightManager.updateAllHighlights();\n return;\n }\n\n // The user focused a new input, update the highlights in the preview\n if (event.data.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS) {\n const { field } = event.data.payload;\n if (!field) return;\n\n // Clear existing focused highlights\n highlightManager.focusedHighlights.forEach((highlight: HTMLElement) => {\n highlight.classList.remove('strapi-highlight-focused');\n });\n highlightManager.focusedHighlights.length = 0;\n\n // Set new focused field and highlight matching elements\n highlightManager.setFocusedField(field);\n getElementsByPath(field).forEach((element, index) => {\n if (index === 0) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n const highlight =\n highlightManager.highlights[Array.from(highlightManager.elements).indexOf(element)];\n if (highlight) {\n highlight.classList.add('strapi-highlight-focused');\n highlightManager.focusedHighlights.push(highlight);\n }\n });\n return;\n }\n\n // The user is no longer focusing an input, remove the highlights\n if (event.data.type === INTERNAL_EVENTS.STRAPI_FIELD_BLUR) {\n const { field } = event.data.payload;\n if (field !== highlightManager.getFocusedField()) return;\n\n highlightManager.focusedHighlights.forEach((highlight: HTMLElement) => {\n highlight.classList.remove('strapi-highlight-focused');\n });\n highlightManager.focusedHighlights.length = 0;\n highlightManager.setFocusedField(null);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n // Add the message handler to the cleanup list\n const messageEventListener = {\n element: window,\n type: 'message' as keyof HTMLElementEventMap,\n handler: handleMessage as EventListener,\n };\n\n return [...highlightManager.eventListeners, messageEventListener];\n };\n\n const createCleanupSystem = (\n overlay: HTMLElement,\n observers: ReturnType<typeof setupObservers>,\n scrollManager: ReturnType<typeof setupScrollManagement>,\n eventHandlers: EventListenersList,\n highlightManager: HighlightManager\n ) => {\n window.__strapi_previewCleanup = () => {\n observers.resizeObserver.disconnect();\n observers.highlightObserver.disconnect();\n observers.stegaObserver?.disconnect();\n\n // Clean up scroll listeners\n scrollManager.cleanup();\n\n // Clear all pending click timeouts\n highlightManager.clearAllPendingClicks();\n\n // Remove highlight event listeners\n eventHandlers.forEach(({ element, type, handler }) => {\n element.removeEventListener(type, handler);\n });\n\n // Clean up CSS styles\n const existingStyles = document.getElementById(HIGHLIGHT_STYLES_ID);\n if (existingStyles) {\n existingStyles.remove();\n }\n\n overlay.remove();\n };\n };\n\n /* -----------------------------------------------------------------------------------------------\n * Orchestration\n * ---------------------------------------------------------------------------------------------*/\n\n setupStegaDOMObserver().then((stegaObserver) => {\n createHighlightStyles();\n const overlay = createOverlaySystem();\n const highlightManager = createHighlightManager(overlay);\n const observers = setupObservers(highlightManager, stegaObserver);\n const scrollManager = setupScrollManagement(highlightManager);\n const eventHandlers = setupEventHandlers(highlightManager);\n createCleanupSystem(overlay, observers, scrollManager, eventHandlers, highlightManager);\n });\n};\n\nexport { previewScript };\n"],"names":["previewScript","shouldRun","HIGHLIGHT_PADDING","HIGHLIGHT_HOVER_COLOR","window","STRAPI_HIGHLIGHT_HOVER_COLOR","HIGHLIGHT_ACTIVE_COLOR","STRAPI_HIGHLIGHT_ACTIVE_COLOR","HIGHLIGHT_STYLES_ID","DOUBLE_CLICK_TIMEOUT","DISABLE_STEGA_DECODING","STRAPI_DISABLE_STEGA_DECODING","SOURCE_ATTRIBUTE","OVERLAY_ID","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS","STRAPI_FIELD_BLUR","STRAPI_FIELD_CHANGE","STRAPI_FIELD_FOCUS_INTENT","STRAPI_FIELD_SINGLE_CLICK_HINT","sendMessage","type","payload","parent","postMessage","getElementsByPath","path","document","querySelectorAll","setupStegaDOMObserver","vercelStegaDecode","stegaDecode","vercelStegaClean","stegaClean","applyStegaToElement","element","directTextNodes","Array","from","childNodes","filter","node","nodeType","Node","TEXT_NODE","directTextContent","map","textContent","join","result","setAttribute","strapiSource","forEach","cleanedText","error","allElements","observer","MutationObserver","mutations","mutation","addedNodes","ELEMENT_NODE","childElements","target","parentElement","observe","childList","subtree","characterData","createHighlightStyles","existingStyles","getElementById","remove","styleElement","createElement","id","head","appendChild","createOverlaySystem","__strapi_previewCleanup","overlay","style","cssText","body","createHighlightManager","elementsToHighlight","Map","eventListeners","focusedHighlights","pendingClicks","focusedField","drawHighlight","highlight","rect","getBoundingClientRect","width","height","transform","left","top","updateAllHighlights","createHighlightForElement","has","className","clickHandler","event","__strapi_redispatched","preventDefault","stopPropagation","existingTimeout","get","clearTimeout","delete","timeout","setTimeout","newEvent","MouseEvent","bubbles","cancelable","view","detail","button","buttons","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","dispatchEvent","set","doubleClickHandler","sourceAttribute","getAttribute","position","right","bottom","mouseDownHandler","addEventListener","push","handler","removeHighlightForElement","pendingTimeout","listenersToRemove","listener","removeEventListener","splice","length","initialElements","HTMLElement","elements","keys","highlights","values","setFocusedField","field","getFocusedField","clearAllPendingClicks","clear","setupScrollManagement","highlightManager","updateOnScroll","scrollableElements","Set","add","computedStyle","getComputedStyle","overflow","overflowX","overflowY","includes","cleanup","setupObservers","stegaObserver","resizeObserver","ResizeObserver","observeElementForResize","documentElement","highlightObserver","attributeName","hasAttribute","elementsWithSource","childElement","removedNodes","attributes","attributeFilter","setupEventHandlers","handleMessage","data","value","classList","index","scrollIntoView","behavior","block","indexOf","messageEventListener","createCleanupSystem","observers","scrollManager","eventHandlers","disconnect","then"],"mappings":"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"}