@strapi/content-manager 5.45.1 → 5.46.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 (145) hide show
  1. package/dist/admin/constants/hooks.js +5 -0
  2. package/dist/admin/constants/hooks.js.map +1 -1
  3. package/dist/admin/constants/hooks.mjs +5 -0
  4. package/dist/admin/constants/hooks.mjs.map +1 -1
  5. package/dist/admin/content-manager.js +26 -2
  6. package/dist/admin/content-manager.js.map +1 -1
  7. package/dist/admin/content-manager.mjs +26 -2
  8. package/dist/admin/content-manager.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionInputRenderer.js +1 -1
  10. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  11. package/dist/admin/history/components/VersionInputRenderer.mjs +1 -1
  12. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  13. package/dist/admin/hooks/usePersistentQueryParams.js +4 -1
  14. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  15. package/dist/admin/hooks/usePersistentQueryParams.mjs +4 -1
  16. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  17. package/dist/admin/pages/ComponentConfigurationPage.js +2 -45
  18. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  19. package/dist/admin/pages/ComponentConfigurationPage.mjs +3 -46
  20. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +21 -4
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +19 -2
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +1 -1
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +9 -6
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +10 -7
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +1 -34
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +3 -35
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +33 -18
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +34 -19
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.js +22 -0
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.js.map +1 -0
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.mjs +20 -0
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.mjs.map +1 -0
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +15 -4
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +16 -5
  45. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +26 -4
  47. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +26 -4
  49. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +31 -0
  51. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +31 -0
  53. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  54. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +11 -3
  55. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  56. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +11 -3
  57. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  58. package/dist/admin/pages/ListView/ListViewPage.js +1 -0
  59. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  60. package/dist/admin/pages/ListView/ListViewPage.mjs +1 -0
  61. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  62. package/dist/admin/pages/ListView/components/Filters.js +38 -4
  63. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  64. package/dist/admin/pages/ListView/components/Filters.mjs +39 -5
  65. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  66. package/dist/admin/pages/formatComponentConfigurationEditLayout.js +58 -0
  67. package/dist/admin/pages/formatComponentConfigurationEditLayout.js.map +1 -0
  68. package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs +56 -0
  69. package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs.map +1 -0
  70. package/dist/admin/preview/components/InputPopover.js +3 -0
  71. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  72. package/dist/admin/preview/components/InputPopover.mjs +3 -0
  73. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  74. package/dist/admin/preview/hooks/usePreviewInputManager.js +24 -0
  75. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  76. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +24 -0
  77. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
  78. package/dist/admin/preview/utils/previewScript.js +616 -78
  79. package/dist/admin/preview/utils/previewScript.js.map +1 -1
  80. package/dist/admin/preview/utils/previewScript.mjs +616 -78
  81. package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
  82. package/dist/admin/src/constants/hooks.d.ts +23 -0
  83. package/dist/admin/src/content-manager.d.ts +26 -0
  84. package/dist/admin/src/exports.d.ts +2 -0
  85. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +14 -8
  86. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.d.ts +3 -0
  87. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCard.d.ts +1 -1
  88. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +11 -1
  89. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +9 -5
  90. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +4 -2
  91. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +38 -6
  92. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -5
  93. package/dist/admin/src/pages/ListView/components/Filters.d.ts +3 -4
  94. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +15 -0
  95. package/dist/admin/translations/cs.json.js +0 -1
  96. package/dist/admin/translations/cs.json.js.map +1 -1
  97. package/dist/admin/translations/cs.json.mjs +0 -1
  98. package/dist/admin/translations/cs.json.mjs.map +1 -1
  99. package/dist/admin/translations/de.json.js +0 -1
  100. package/dist/admin/translations/de.json.js.map +1 -1
  101. package/dist/admin/translations/de.json.mjs +0 -1
  102. package/dist/admin/translations/de.json.mjs.map +1 -1
  103. package/dist/admin/translations/en.json.js +0 -1
  104. package/dist/admin/translations/en.json.js.map +1 -1
  105. package/dist/admin/translations/en.json.mjs +0 -1
  106. package/dist/admin/translations/en.json.mjs.map +1 -1
  107. package/dist/admin/translations/es.json.js +0 -1
  108. package/dist/admin/translations/es.json.js.map +1 -1
  109. package/dist/admin/translations/es.json.mjs +0 -1
  110. package/dist/admin/translations/es.json.mjs.map +1 -1
  111. package/dist/admin/translations/fr.json.js +0 -1
  112. package/dist/admin/translations/fr.json.js.map +1 -1
  113. package/dist/admin/translations/fr.json.mjs +0 -1
  114. package/dist/admin/translations/fr.json.mjs.map +1 -1
  115. package/dist/admin/translations/nl.json.js +0 -1
  116. package/dist/admin/translations/nl.json.js.map +1 -1
  117. package/dist/admin/translations/nl.json.mjs +0 -1
  118. package/dist/admin/translations/nl.json.mjs.map +1 -1
  119. package/dist/admin/translations/pl.json.js +0 -1
  120. package/dist/admin/translations/pl.json.js.map +1 -1
  121. package/dist/admin/translations/pl.json.mjs +0 -1
  122. package/dist/admin/translations/pl.json.mjs.map +1 -1
  123. package/dist/admin/translations/ru.json.js +0 -1
  124. package/dist/admin/translations/ru.json.js.map +1 -1
  125. package/dist/admin/translations/ru.json.mjs +0 -1
  126. package/dist/admin/translations/ru.json.mjs.map +1 -1
  127. package/dist/admin/translations/uk.json.js +0 -1
  128. package/dist/admin/translations/uk.json.js.map +1 -1
  129. package/dist/admin/translations/uk.json.mjs +0 -1
  130. package/dist/admin/translations/uk.json.mjs.map +1 -1
  131. package/dist/admin/translations/zh-Hans.json.js +0 -1
  132. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  133. package/dist/admin/translations/zh-Hans.json.mjs +0 -1
  134. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  135. package/dist/server/homepage/services/homepage.js +12 -8
  136. package/dist/server/homepage/services/homepage.js.map +1 -1
  137. package/dist/server/homepage/services/homepage.mjs +12 -8
  138. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  139. package/dist/server/services/metrics.js +1 -5
  140. package/dist/server/services/metrics.js.map +1 -1
  141. package/dist/server/services/metrics.mjs +1 -5
  142. package/dist/server/services/metrics.mjs.map +1 -1
  143. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  144. package/dist/server/src/services/metrics.d.ts.map +1 -1
  145. package/package.json +7 -7
@@ -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 */\ntype PreviewScriptColors = {\n highlightHoverColor: string;\n highlightActiveColor: string;\n};\n\ntype PreviewScriptConfig = {\n shouldRun?: boolean;\n colors: PreviewScriptColors;\n};\n\nconst previewScript = (config: PreviewScriptConfig) => {\n const { shouldRun = true, colors } = config;\n\n /* -----------------------------------------------------------------------------------------------\n * Params\n * ---------------------------------------------------------------------------------------------*/\n const HIGHLIGHT_PADDING = 2; // in pixels\n const HIGHLIGHT_HOVER_COLOR = window.STRAPI_HIGHLIGHT_HOVER_COLOR ?? colors.highlightHoverColor;\n const HIGHLIGHT_ACTIVE_COLOR =\n window.STRAPI_HIGHLIGHT_ACTIVE_COLOR ?? colors.highlightActiveColor;\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","config","shouldRun","colors","HIGHLIGHT_PADDING","HIGHLIGHT_HOVER_COLOR","window","STRAPI_HIGHLIGHT_HOVER_COLOR","highlightHoverColor","HIGHLIGHT_ACTIVE_COLOR","STRAPI_HIGHLIGHT_ACTIVE_COLOR","highlightActiveColor","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 */\ntype PreviewScriptColors = {\n highlightHoverColor: string;\n highlightActiveColor: string;\n};\n\ntype PreviewScriptConfig = {\n shouldRun?: boolean;\n colors: PreviewScriptColors;\n};\n\nconst previewScript = (config: PreviewScriptConfig) => {\n const { shouldRun = true, colors } = config;\n\n /* -----------------------------------------------------------------------------------------------\n * Params\n * ---------------------------------------------------------------------------------------------*/\n const HIGHLIGHT_PADDING = 2; // in pixels\n const HIGHLIGHT_HOVER_COLOR = window.STRAPI_HIGHLIGHT_HOVER_COLOR ?? colors.highlightHoverColor;\n const HIGHLIGHT_ACTIVE_COLOR =\n window.STRAPI_HIGHLIGHT_ACTIVE_COLOR ?? colors.highlightActiveColor;\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 const isMediaElement = (element: Element): boolean => {\n return element.tagName === 'IMG' || element.tagName === 'VIDEO' || element.tagName === 'AUDIO';\n };\n\n /**\n * When a media field's mime type changes (e.g. image -> video), we can't\n * swap the rendered DOM tag in place — the host framework (e.g. React)\n * owns the original element and throws on removeChild if we replaceChild\n * it. Instead we leave the original where it is, hide it, and insert our\n * own sibling element of the correct tag. The injection lives outside the\n * host framework's virtual DOM, so reconciliation never touches it.\n *\n * On save the host framework re-renders with the saved data and unmounts\n * the original, leaving our injection orphaned next to its replacement —\n * which is what was producing duplicate previews. The childList observer\n * below uses these maps to drop the injection whenever its associated\n * original is removed.\n */\n const originalToInjection = new Map<HTMLElement, HTMLElement>();\n const injectionToOriginal = new Map<HTMLElement, HTMLElement>();\n\n const trackInjection = (original: HTMLElement, injection: HTMLElement) => {\n originalToInjection.set(original, injection);\n injectionToOriginal.set(injection, original);\n };\n\n const untrackInjection = (injection: HTMLElement) => {\n const original = injectionToOriginal.get(injection);\n if (original) originalToInjection.delete(original);\n injectionToOriginal.delete(injection);\n };\n\n /**\n * When a media field is cleared, the original media element gets hidden and\n * has no bounding box, so the highlight system stops drawing a clickable\n * area for it. That leaves the user no way to re-add media from the preview.\n * We insert a sized placeholder div carrying the original's source attribute\n * so the highlight system keeps tracking the spot. The placeholder is\n * tracked in the same injection maps as a real injection, so the next\n * `setMediaElement` call (when the user picks new media) tears it down and\n * restores/replaces the original element via the existing flow.\n */\n const PLACEHOLDER_ATTRIBUTE = 'data-strapi-media-placeholder';\n /**\n * For a multi-media field, growing the rendered DOM (e.g. 1 image → 2)\n * needs a slot for the new item, but the host framework only re-renders\n * the gallery on save. We synthesize the missing slots by cloning the\n * last rendered item and marking each clone with this attribute so the\n * ghost-sweep below can drop them once the framework eventually re-renders\n * with the saved value.\n */\n const CLONE_ATTRIBUTE = 'data-strapi-media-clone';\n /**\n * Galleries commonly wrap each media element in its own layout cell\n * (e.g. `<div class=\"grid\"><div><img/></div><div><img/></div></div>`),\n * so cloning just the IMG makes the new item stack inside the existing\n * wrapper. We walk up to the closest ancestor whose parent uses a sibling\n * layout (flex/grid) and clone that instead, marking the cloned wrapper\n * so cleanup removes the wrapper rather than leaving an empty cell.\n */\n const CLONE_WRAPPER_ATTRIBUTE = 'data-strapi-media-clone-wrapper';\n const createMediaPlaceholder = (sourceAttr: string, rect: DOMRect): HTMLElement => {\n const placeholder = document.createElement('div');\n placeholder.setAttribute(PLACEHOLDER_ATTRIBUTE, '');\n placeholder.setAttribute(SOURCE_ATTRIBUTE, sourceAttr);\n\n const width = rect.width > 0 ? rect.width : 200;\n const height = rect.height > 0 ? rect.height : 200;\n placeholder.style.cssText = `\n display: inline-block;\n width: ${width}px;\n height: ${height}px;\n background-color: rgba(0, 0, 0, 0.04);\n border: 2px dashed rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n box-sizing: border-box;\n vertical-align: top;\n `;\n return placeholder;\n };\n\n /**\n * Form values for media fields carry the raw Strapi URL (often relative,\n * e.g. \"/uploads/foo.jpg\"). The host framework typically renders the\n * original element with an absolute URL (resolved against the Strapi\n * backend, not the iframe origin). If we naively set the relative form\n * value as src, the browser resolves it against the iframe origin and\n * fails to load. Resolve against the original element's existing src\n * origin so the swap targets the same backend.\n */\n const resolveMediaUrl = (originalEl: HTMLElement, rawUrl: string): string => {\n if (/^(?:[a-z]+:)?\\/\\//i.test(rawUrl) || rawUrl.startsWith('data:')) {\n return rawUrl;\n }\n const currentSrc = originalEl.getAttribute('src');\n if (!currentSrc) return rawUrl;\n try {\n const currentUrl = new URL(currentSrc, window.location.href);\n return new URL(rawUrl, currentUrl.origin).href;\n } catch {\n return rawUrl;\n }\n };\n\n /**\n * Extract a recognizable media filename from a URL string. Works for\n * direct backend URLs, relative paths, and proxy URLs that embed the\n * real path in a query parameter (e.g. Next.js's \"/_next/image?url=...\").\n * Used to detect whether the rendered element already shows the same\n * asset as the form value, so we can skip src updates that would only\n * substitute one URL representation for another.\n */\n const getMediaFilename = (raw: string): string => {\n if (!raw) return '';\n let decoded = raw;\n try {\n decoded = decodeURIComponent(raw);\n } catch {}\n const match = decoded.match(\n /([^/?#&=\\s]+\\.(?:jpg|jpeg|png|gif|webp|avif|svg|mp4|mov|webm|ogg|m4v|mp3|wav|m4a|aac|flac|opus))(?:[?#&]|$)/i\n );\n return match ? match[1].toLowerCase() : '';\n };\n\n /**\n * Get the field path to use for focusing a media field.\n * - For IMG/VIDEO elements: the path was already normalized (stripped of .url) during stega decoding\n * - For tracked injections (e.g., placeholder divs we insert when media is cleared): the source\n * attribute was copied from the post-normalization media element, so it's already correct\n * - For non-media elements with model=plugin::upload.file (e.g., caption text): strip the last\n * segment to focus the parent media field (e.g., \"hero.caption\" -> \"hero\")\n */\n const getFieldPathForMedia = (sourceAttr: string, element: Element): string => {\n if (isMediaElement(element) || injectionToOriginal.has(element as HTMLElement)) {\n return sourceAttr;\n }\n\n // For non-media elements, check if it's a media asset field\n const params = new URLSearchParams(sourceAttr);\n if (params.get('model') === 'plugin::upload.file') {\n const elementPath = params.get('path');\n if (elementPath) {\n // Strip the last segment (e.g., \"hero.caption\" -> \"hero\")\n const parentPath = elementPath.split('.').slice(0, -1).join('.');\n params.set('path', parentPath);\n return params.toString();\n }\n }\n\n return sourceAttr;\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 // Handle img and video tags - check src attribute for stega encoding\n if (isMediaElement(element)) {\n const src = element.getAttribute('src');\n if (src) {\n try {\n const result = stegaDecode(src);\n if (result && 'strapiSource' in result) {\n // Parse the source and remove .url suffix to point to the media field\n const sourceValue = result.strapiSource as string;\n const pathMatch = sourceValue.match(/path=([^&]+)/);\n if (pathMatch) {\n const originalPath = pathMatch[1];\n // Remove .url to get the media field path\n const mediaPath = originalPath.replace(/\\.url$/, '');\n const newSource = sourceValue.replace(`path=${originalPath}`, `path=${mediaPath}`);\n element.setAttribute(SOURCE_ATTRIBUTE, newSource);\n }\n }\n // Clean the src attribute so the resource can load\n const cleanedSrc = stegaClean(src);\n if (cleanedSrc !== src) {\n element.setAttribute('src', cleanedSrc);\n }\n } catch (error) {}\n }\n return;\n }\n\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 // Handle src attribute changes for img/video elements\n if (mutation.type === 'attributes' && mutation.attributeName === 'src') {\n const target = mutation.target as Element;\n if (isMediaElement(target)) {\n applyStegaToElement(target);\n }\n }\n });\n });\n\n observer.observe(document, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['src'],\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 /**\n * Group all elements that share the exact same `data-strapi-source` value\n * under one highlight. This is what makes a multi-media field render as a\n * single bounding box in the preview (and what makes the popover open the\n * multi-media input rather than treating each item as its own field). The\n * grouping is keyed off the source string so other accidental same-source\n * renders (e.g. the title rendered twice) also collapse to one highlight,\n * which matches how the focused state already behaves.\n */\n type HighlightGroup = {\n highlight: HTMLElement;\n elements: Set<HTMLElement>;\n };\n\n const createHighlightManager = (overlay: HTMLElement) => {\n const groups = new Map<string, HighlightGroup>();\n const elementToGroupKey = new Map<HTMLElement, string>();\n const eventListeners: EventListenersList = [];\n const focusedHighlights: HTMLElement[] = [];\n const pendingClicks = new Map<HighlightGroup, number>();\n let focusedField: string | null = null;\n\n const computeGroupRect = (group: HighlightGroup) => {\n let minLeft = Infinity;\n let minTop = Infinity;\n let maxRight = -Infinity;\n let maxBottom = -Infinity;\n let any = false;\n group.elements.forEach((el) => {\n const r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0) return;\n any = true;\n if (r.left < minLeft) minLeft = r.left;\n if (r.top < minTop) minTop = r.top;\n if (r.right > maxRight) maxRight = r.right;\n if (r.bottom > maxBottom) maxBottom = r.bottom;\n });\n if (!any) return null;\n return {\n left: minLeft,\n top: minTop,\n width: maxRight - minLeft,\n height: maxBottom - minTop,\n };\n };\n\n const drawGroup = (group: HighlightGroup) => {\n const rect = computeGroupRect(group);\n if (!rect) {\n group.highlight.style.display = 'none';\n return;\n }\n group.highlight.style.display = '';\n group.highlight.style.width = `${rect.width + HIGHLIGHT_PADDING * 2}px`;\n group.highlight.style.height = `${rect.height + HIGHLIGHT_PADDING * 2}px`;\n group.highlight.style.transform = `translate(${rect.left - HIGHLIGHT_PADDING}px, ${rect.top - HIGHLIGHT_PADDING}px)`;\n };\n\n const updateAllHighlights = () => {\n groups.forEach(drawGroup);\n };\n\n /**\n * Pick the underlying source element under the pointer so single-click\n * redispatch hits the specific item the user clicked, even when the group\n * highlight covers several elements (multi-media gallery).\n */\n const pickElementAtPoint = (\n group: HighlightGroup,\n x: number,\n y: number\n ): HTMLElement | null => {\n for (const el of group.elements) {\n const r = el.getBoundingClientRect();\n if (x >= r.left && x <= r.right && y >= r.top && y <= r.bottom) {\n return el;\n }\n }\n const first = group.elements.values().next().value;\n return first ?? null;\n };\n\n const createGroup = (groupKey: string): HighlightGroup => {\n const highlight = document.createElement('div');\n highlight.className = 'strapi-highlight';\n const group: HighlightGroup = { highlight, elements: new Set() };\n\n const clickHandler = (event: MouseEvent) => {\n if ((event as any).__strapi_redispatched) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const existingTimeout = pendingClicks.get(group);\n if (existingTimeout) {\n window.clearTimeout(existingTimeout);\n pendingClicks.delete(group);\n }\n\n const timeout = window.setTimeout(() => {\n pendingClicks.delete(group);\n\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT, null);\n\n // Pick the specific underlying element under the pointer so the\n // redispatched click targets the right item in a multi-element group\n const underlying = pickElementAtPoint(group, event.clientX, event.clientY);\n if (!underlying) return;\n\n let targetElement: HTMLElement = underlying;\n if (isMediaElement(underlying)) {\n let parent = underlying.parentElement;\n while (parent) {\n if (\n parent.tagName === 'A' ||\n parent.tagName === 'BUTTON' ||\n parent.hasAttribute('onclick') ||\n parent.getAttribute('role') === 'button' ||\n parent.getAttribute('role') === 'link'\n ) {\n targetElement = parent;\n break;\n }\n parent = parent.parentElement;\n }\n }\n\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 targetElement.dispatchEvent(newEvent);\n }, DOUBLE_CLICK_TIMEOUT);\n\n pendingClicks.set(group, timeout);\n };\n\n const doubleClickHandler = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n const existingTimeout = pendingClicks.get(group);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n pendingClicks.delete(group);\n }\n\n const anchor = pickElementAtPoint(group, event.clientX, event.clientY);\n if (!anchor) return;\n const sourceAttribute = anchor.getAttribute(SOURCE_ATTRIBUTE);\n if (!sourceAttribute) return;\n const path = getFieldPathForMedia(sourceAttribute, anchor);\n const rect = computeGroupRect(group);\n if (!rect) return;\n sendMessage(INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT, {\n path,\n position: {\n top: rect.top,\n left: rect.left,\n right: rect.left + rect.width,\n bottom: rect.top + rect.height,\n width: rect.width,\n height: rect.height,\n },\n });\n };\n\n const mouseDownHandler = (event: MouseEvent) => {\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 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 overlay.appendChild(highlight);\n groups.set(groupKey, group);\n return group;\n };\n\n const destroyGroup = (groupKey: string, group: HighlightGroup) => {\n const pendingTimeout = pendingClicks.get(group);\n if (pendingTimeout) {\n window.clearTimeout(pendingTimeout);\n pendingClicks.delete(group);\n }\n\n const focusedIndex = focusedHighlights.indexOf(group.highlight);\n if (focusedIndex !== -1) {\n focusedHighlights.splice(focusedIndex, 1);\n }\n\n group.highlight.remove();\n\n const listenersToRemove = eventListeners.filter(\n (listener) => listener.element === group.highlight\n );\n listenersToRemove.forEach(({ element, type, handler }) => {\n element.removeEventListener(type, handler);\n });\n eventListeners.splice(\n 0,\n eventListeners.length,\n ...eventListeners.filter((listener) => listener.element !== group.highlight)\n );\n\n groups.delete(groupKey);\n };\n\n const createHighlightForElement = (element: HTMLElement) => {\n if (elementToGroupKey.has(element)) {\n return;\n }\n const groupKey = element.getAttribute(SOURCE_ATTRIBUTE);\n if (!groupKey) return;\n\n let group = groups.get(groupKey);\n\n // When a framework-rendered media element joins a group that still\n // holds stale ghosts from a previous clear (a standalone placeholder,\n // our injection paired with a hidden placeholder, or a clone we\n // synthesized to give an added array item a slot), sweep the ghosts\n // so we don't end up with two visible elements stacked on top of\n // each other after a save commits a real value.\n if (\n group &&\n isMediaElement(element) &&\n !injectionToOriginal.has(element) &&\n !element.hasAttribute(CLONE_ATTRIBUTE)\n ) {\n const ghostInjections: HTMLElement[] = [];\n const ghostPlaceholders: HTMLElement[] = [];\n const ghostClones: HTMLElement[] = [];\n group.elements.forEach((el) => {\n if (injectionToOriginal.has(el)) {\n ghostInjections.push(el);\n } else if (el.hasAttribute(CLONE_ATTRIBUTE)) {\n ghostClones.push(el);\n } else if (el.hasAttribute(PLACEHOLDER_ATTRIBUTE)) {\n ghostPlaceholders.push(el);\n }\n });\n ghostInjections.forEach((injection) => {\n const orig = injectionToOriginal.get(injection);\n untrackInjection(injection);\n if (orig?.hasAttribute(CLONE_ATTRIBUTE)) {\n // Tag-swap injection of a clone (e.g. user added a video as\n // the new item, swapping our cloned IMG for a VIDEO). Remove\n // the wrapper so we don't leave an empty layout cell behind.\n const wrapper = orig.closest(`[${CLONE_WRAPPER_ATTRIBUTE}]`) as HTMLElement | null;\n (wrapper ?? orig).remove();\n } else if (orig?.hasAttribute(PLACEHOLDER_ATTRIBUTE)) {\n orig.remove();\n }\n group?.elements.delete(injection);\n elementToGroupKey.delete(injection);\n injection.remove();\n });\n ghostPlaceholders.forEach((placeholder) => {\n group?.elements.delete(placeholder);\n elementToGroupKey.delete(placeholder);\n placeholder.remove();\n });\n // Remove the wrapper if we cloned an ancestor for layout — falling\n // back to the clone itself when it's its own root. Removing via\n // .remove() also triggers the mutation observer's removedNodes\n // branch, which untracks any injection paired with descendants.\n ghostClones.forEach((clone) => {\n group?.elements.delete(clone);\n elementToGroupKey.delete(clone);\n const wrapper = clone.closest(`[${CLONE_WRAPPER_ATTRIBUTE}]`) as HTMLElement | null;\n (wrapper ?? clone).remove();\n });\n }\n\n if (!group) {\n group = createGroup(groupKey);\n }\n group.elements.add(element);\n elementToGroupKey.set(element, groupKey);\n drawGroup(group);\n };\n\n const removeHighlightForElement = (element: Element) => {\n const groupKey = elementToGroupKey.get(element as HTMLElement);\n if (!groupKey) return;\n const group = groups.get(groupKey);\n if (!group) return;\n\n group.elements.delete(element as HTMLElement);\n elementToGroupKey.delete(element as HTMLElement);\n\n if (group.elements.size === 0) {\n destroyGroup(groupKey, group);\n } else {\n drawGroup(group);\n }\n };\n\n /**\n * Resolve groups whose elements match a focused field path. We delegate\n * to `getElementsByPath` so this preserves the same loose substring match\n * the highlight system has always used (e.g. focusing `hero` matches\n * `hero.caption` too).\n */\n const findGroupForPath = (path: string): HighlightGroup[] => {\n const matched = new Set<HighlightGroup>();\n getElementsByPath(path).forEach((el) => {\n const key = elementToGroupKey.get(el as HTMLElement);\n if (!key) return;\n const group = groups.get(key);\n if (group) matched.add(group);\n });\n return Array.from(matched);\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(elementToGroupKey.keys());\n },\n get groups() {\n return Array.from(groups.values());\n },\n updateAllHighlights,\n eventListeners,\n focusedHighlights,\n createHighlightForElement,\n removeHighlightForElement,\n findGroupForPath,\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 // If a tracked media original (or its ancestor) was removed —\n // typically when the host framework re-renders after save and\n // unmounts the previous element — drop our matching injection\n // so we don't end up with duplicate previews next to the new one.\n // This applies to placeholders too: once the framework owns\n // the layout for a cleared field (and likely renders its own\n // empty state), our placeholder would just stack next to it.\n originalToInjection.forEach((injection, original) => {\n if (element === original || element.contains(original)) {\n untrackInjection(injection);\n injection.remove();\n } else if (element === injection || element.contains(injection)) {\n // Our injection itself was removed (e.g. parent unmounted)\n untrackInjection(injection);\n }\n });\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 setMediaElement = (el: HTMLElement, url: string | null, mime?: string) => {\n const original = injectionToOriginal.get(el) ?? el;\n const injection = originalToInjection.get(original) ?? null;\n\n const removeInjection = () => {\n if (!injection) return;\n // Move the source attribute back to the original so highlights track it again\n const sourceAttr = injection.getAttribute(SOURCE_ATTRIBUTE);\n if (sourceAttr) original.setAttribute(SOURCE_ATTRIBUTE, sourceAttr);\n untrackInjection(injection);\n injection.remove();\n };\n\n if (!url) {\n // Capture rect from whatever's currently visible before any DOM\n // changes, so the placeholder can be sized to match.\n const visibleEl = injection ?? original;\n const rect = visibleEl.getBoundingClientRect();\n\n // removeInjection moves the source attr back to original, so we read\n // it after.\n removeInjection();\n\n const sourceAttr = original.getAttribute(SOURCE_ATTRIBUTE);\n if (!sourceAttr) {\n original.style.display = 'none';\n return;\n }\n\n // Hide the host-framework-managed original. We deliberately keep\n // its `src` attribute around so `resolveMediaUrl` can still derive\n // the backend origin when the user later picks a new media file\n // with a relative URL.\n original.style.display = 'none';\n\n // Move the source attr onto a placeholder div so the highlight\n // system keeps tracking the spot and the user can click to re-add\n // media.\n original.removeAttribute(SOURCE_ATTRIBUTE);\n const placeholder = createMediaPlaceholder(sourceAttr, rect);\n original.parentNode?.insertBefore(placeholder, original.nextSibling);\n trackInjection(original, placeholder);\n return;\n }\n\n const desiredTag = mime?.startsWith('image/')\n ? 'IMG'\n : mime?.startsWith('video/')\n ? 'VIDEO'\n : mime?.startsWith('audio/')\n ? 'AUDIO'\n : null;\n\n // If the rendered element already shows the same media file as the\n // form value, do nothing. Compare by filename so we're agnostic to\n // URL representation — the host framework may have rendered a proxy\n // URL (e.g. Next.js's \"/_next/image?url=...\") that wouldn't match a\n // raw form-value URL string-wise but resolves to the same asset.\n const active = injection ?? original;\n const newFilename = getMediaFilename(url);\n const currentFilename = getMediaFilename(active.getAttribute('src') ?? '');\n const tagAlreadyMatches = !desiredTag || active.tagName === desiredTag;\n if (tagAlreadyMatches && newFilename && newFilename === currentFilename) {\n active.style.display = '';\n return;\n }\n\n // Resolve relative form-value URLs against the existing src's origin\n // so the swap targets the Strapi backend, not the iframe origin.\n const resolvedUrl = resolveMediaUrl(original, url);\n\n // No mime info — fall back to updating whatever's active\n if (!desiredTag) {\n if (active.getAttribute('src') !== resolvedUrl) {\n active.setAttribute('src', resolvedUrl);\n }\n active.style.display = '';\n return;\n }\n\n // Original's tag matches: restore it (removing any previous injection)\n if (original.tagName === desiredTag) {\n removeInjection();\n if (original.getAttribute('src') !== resolvedUrl) {\n original.setAttribute('src', resolvedUrl);\n }\n original.style.display = '';\n return;\n }\n\n // Existing injection of the right tag: just update its src\n if (injection && injection.tagName === desiredTag) {\n if (injection.getAttribute('src') !== resolvedUrl) {\n injection.setAttribute('src', resolvedUrl);\n }\n return;\n }\n\n // Need a fresh injection of the correct tag\n removeInjection();\n\n const newInjection = document.createElement(desiredTag) as HTMLElement;\n // Mirror the original's attributes so styling/classes carry over.\n // Skip src/srcset — those carry the *previous* media's URL and would\n // make the new element try to load it (a video element fed an image\n // URL renders a permanent \"No supported format\" error). We set src\n // explicitly below.\n // For audio, skip visual-sizing attributes too — image/video classes\n // (e.g. aspect-square, h-96) don't suit a horizontal audio control\n // and produce a giant empty box around the player.\n const isAudio = desiredTag === 'AUDIO';\n const skipForAudio = new Set(['class', 'style', 'width', 'height']);\n Array.from(original.attributes).forEach((attr) => {\n if (attr.name === 'id' || attr.name === 'src' || attr.name === 'srcset') return;\n if (isAudio && skipForAudio.has(attr.name)) return;\n newInjection.setAttribute(attr.name, attr.value);\n });\n newInjection.setAttribute('src', resolvedUrl);\n if (desiredTag === 'VIDEO' || desiredTag === 'AUDIO') {\n newInjection.setAttribute('controls', '');\n }\n if (!isAudio) {\n newInjection.style.cssText = original.style.cssText;\n }\n newInjection.style.display = '';\n\n // Hide the host-framework-managed original and let highlights track our injection\n original.style.display = 'none';\n original.removeAttribute(SOURCE_ATTRIBUTE);\n original.parentNode?.insertBefore(newInjection, original.nextSibling);\n trackInjection(original, newInjection);\n };\n\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 const matchedElements = Array.from(getElementsByPath(field)).filter(\n (el): el is HTMLElement => el instanceof HTMLElement\n );\n\n // A cleared media field is represented by a placeholder div sitting\n // where the (hidden or unmounted) original used to be. Treat it like\n // a media element here so the next change routes through\n // setMediaElement and tears the placeholder down. Standalone\n // placeholders (those whose original was unmounted by the host\n // framework after save) are not in the injection maps but still\n // need to be matchable.\n const isMediaTarget = (el: Element) =>\n isMediaElement(el) ||\n injectionToOriginal.has(el as HTMLElement) ||\n el.hasAttribute(PLACEHOLDER_ATTRIBUTE);\n\n // Multi-media field: value is an array of media items. After the\n // server change, every item shares `path=<field>`, so we map array\n // items to media elements in DOM order. Removing items reuses\n // existing elements (extras get cleared into placeholders); adding\n // items synthesizes new slots by cloning the last rendered element,\n // since the host framework only re-renders the gallery on save.\n if (Array.isArray(value)) {\n const mediaEls = matchedElements.filter(isMediaTarget);\n if (mediaEls.length > 0 && mediaEls.length < value.length) {\n const lastEl = mediaEls[mediaEls.length - 1];\n // Walk up until we reach an ancestor whose parent lays out\n // children as siblings (flex/grid). Record indices so we can\n // re-find the media element inside each cloned wrapper.\n const indices: number[] = [];\n let template: HTMLElement = lastEl;\n let parent = template.parentElement;\n const SIBLING_LAYOUTS = new Set(['flex', 'inline-flex', 'grid', 'inline-grid']);\n const MAX_DEPTH = 5;\n for (let depth = 0; parent && depth < MAX_DEPTH; depth++) {\n if (SIBLING_LAYOUTS.has(window.getComputedStyle(parent).display)) {\n break;\n }\n indices.push(Array.prototype.indexOf.call(parent.children, template));\n template = parent;\n parent = parent.parentElement;\n }\n\n let insertAfter: HTMLElement = template;\n for (let i = mediaEls.length; i < value.length; i++) {\n const wrapperClone = template.cloneNode(true) as HTMLElement;\n let cloneMedia: HTMLElement = wrapperClone;\n for (let j = indices.length - 1; j >= 0; j--) {\n cloneMedia = cloneMedia.children[indices[j]] as HTMLElement;\n }\n cloneMedia.setAttribute(CLONE_ATTRIBUTE, '');\n cloneMedia.removeAttribute('id');\n if (wrapperClone !== cloneMedia) {\n wrapperClone.setAttribute(CLONE_WRAPPER_ATTRIBUTE, '');\n }\n insertAfter.parentNode?.insertBefore(wrapperClone, insertAfter.nextSibling);\n mediaEls.push(cloneMedia);\n insertAfter = wrapperClone;\n }\n }\n mediaEls.forEach((el, index) => {\n const item = value[index];\n if (item && typeof item === 'object') {\n const url = (item as any).url as string | undefined;\n const mime = (item as any).mime as string | undefined;\n setMediaElement(el, url || null, mime);\n } else {\n setMediaElement(el, null);\n }\n });\n } else {\n matchedElements.forEach((element) => {\n if (isMediaTarget(element)) {\n const url = typeof value === 'object' && value !== null ? value.url : value;\n const mime =\n typeof value === 'object' && value !== null\n ? (value.mime as string | undefined)\n : undefined;\n setMediaElement(element, url || null, mime);\n } else {\n element.textContent = value || '';\n }\n });\n }\n\n // Handle nested media asset fields (caption, alt, etc.)\n // These are identified by model=plugin::upload.file in the source attribute\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const allSourceElements = document.querySelectorAll(`[${SOURCE_ATTRIBUTE}]`);\n\n allSourceElements.forEach((element) => {\n const sourceAttr = element.getAttribute(SOURCE_ATTRIBUTE);\n if (!sourceAttr) return;\n\n // Parse the source attribute as URL search params\n const params = new URLSearchParams(sourceAttr);\n const model = params.get('model');\n const elementPath = params.get('path');\n\n // Only process media asset fields\n if (model !== 'plugin::upload.file' || !elementPath) return;\n\n // Check if this element's path starts with the field path (e.g., \"hero.caption\" starts with \"hero\")\n if (elementPath.startsWith(`${field}.`)) {\n // Extract the property name (e.g., \"caption\" from \"hero.caption\")\n const propertyName = elementPath.slice(field.length + 1);\n const propertyValue = value[propertyName];\n if (element instanceof HTMLElement && propertyValue !== undefined) {\n element.textContent = propertyValue || '';\n }\n }\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 groups\n highlightManager.setFocusedField(field);\n const matchingGroups = highlightManager.findGroupForPath(field);\n matchingGroups.forEach((group, index) => {\n if (index === 0) {\n const first = group.elements.values().next().value;\n first?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n group.highlight.classList.add('strapi-highlight-focused');\n highlightManager.focusedHighlights.push(group.highlight);\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","config","shouldRun","colors","HIGHLIGHT_PADDING","HIGHLIGHT_HOVER_COLOR","window","STRAPI_HIGHLIGHT_HOVER_COLOR","highlightHoverColor","HIGHLIGHT_ACTIVE_COLOR","STRAPI_HIGHLIGHT_ACTIVE_COLOR","highlightActiveColor","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","isMediaElement","element","tagName","originalToInjection","Map","injectionToOriginal","trackInjection","original","injection","set","untrackInjection","get","delete","PLACEHOLDER_ATTRIBUTE","CLONE_ATTRIBUTE","CLONE_WRAPPER_ATTRIBUTE","createMediaPlaceholder","sourceAttr","rect","placeholder","createElement","setAttribute","width","height","style","cssText","resolveMediaUrl","originalEl","rawUrl","test","startsWith","currentSrc","getAttribute","currentUrl","URL","location","href","origin","getMediaFilename","raw","decoded","decodeURIComponent","match","toLowerCase","getFieldPathForMedia","has","params","URLSearchParams","elementPath","parentPath","split","slice","join","toString","setupStegaDOMObserver","vercelStegaDecode","stegaDecode","vercelStegaClean","stegaClean","applyStegaToElement","src","result","sourceValue","strapiSource","pathMatch","originalPath","mediaPath","replace","newSource","cleanedSrc","error","directTextNodes","Array","from","childNodes","filter","node","nodeType","Node","TEXT_NODE","directTextContent","map","textContent","forEach","cleanedText","allElements","observer","MutationObserver","mutations","mutation","addedNodes","ELEMENT_NODE","childElements","target","parentElement","attributeName","observe","childList","subtree","characterData","attributes","attributeFilter","createHighlightStyles","existingStyles","getElementById","remove","styleElement","id","head","appendChild","createOverlaySystem","__strapi_previewCleanup","overlay","body","createHighlightManager","groups","elementToGroupKey","eventListeners","focusedHighlights","pendingClicks","focusedField","computeGroupRect","group","minLeft","Infinity","minTop","maxRight","maxBottom","any","elements","el","r","getBoundingClientRect","left","top","right","bottom","drawGroup","highlight","display","transform","updateAllHighlights","pickElementAtPoint","x","y","first","values","next","value","createGroup","groupKey","className","Set","clickHandler","event","__strapi_redispatched","preventDefault","stopPropagation","existingTimeout","clearTimeout","timeout","setTimeout","underlying","clientX","clientY","targetElement","hasAttribute","newEvent","MouseEvent","bubbles","cancelable","view","detail","button","buttons","ctrlKey","altKey","shiftKey","metaKey","dispatchEvent","doubleClickHandler","anchor","sourceAttribute","position","mouseDownHandler","addEventListener","push","handler","destroyGroup","pendingTimeout","focusedIndex","indexOf","splice","listenersToRemove","listener","removeEventListener","length","createHighlightForElement","ghostInjections","ghostPlaceholders","ghostClones","orig","wrapper","closest","clone","add","removeHighlightForElement","size","findGroupForPath","matched","key","initialElements","HTMLElement","keys","setFocusedField","field","getFocusedField","clearAllPendingClicks","clear","setupScrollManagement","highlightManager","updateOnScroll","scrollableElements","computedStyle","getComputedStyle","overflow","overflowX","overflowY","includes","cleanup","setupObservers","stegaObserver","resizeObserver","ResizeObserver","observeElementForResize","documentElement","highlightObserver","elementsWithSource","childElement","removedNodes","contains","setupEventHandlers","setMediaElement","url","mime","removeInjection","visibleEl","removeAttribute","parentNode","insertBefore","nextSibling","desiredTag","active","newFilename","currentFilename","tagAlreadyMatches","resolvedUrl","newInjection","isAudio","skipForAudio","attr","name","handleMessage","data","matchedElements","isMediaTarget","isArray","mediaEls","lastEl","indices","template","SIBLING_LAYOUTS","MAX_DEPTH","depth","prototype","call","children","insertAfter","i","wrapperClone","cloneNode","cloneMedia","j","index","item","undefined","allSourceElements","model","propertyName","propertyValue","classList","matchingGroups","scrollIntoView","behavior","block","messageEventListener","createCleanupSystem","observers","scrollManager","eventHandlers","disconnect","then"],"mappings":"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"}