@contentstack/live-preview-utils 3.2.2 → 3.2.4
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.
- package/README.md +2 -2
- package/dist/legacy/index.cjs +2 -44
- package/dist/legacy/index.cjs.map +1 -1
- package/dist/legacy/index.d.cts +3 -15
- package/dist/legacy/index.d.ts +3 -15
- package/dist/legacy/index.js +1 -43
- package/dist/legacy/index.js.map +1 -1
- package/dist/legacy/light-sdk.cjs +70 -0
- package/dist/legacy/light-sdk.cjs.map +1 -0
- package/dist/legacy/light-sdk.d.cts +19 -0
- package/dist/legacy/light-sdk.d.ts +19 -0
- package/dist/legacy/light-sdk.js +51 -0
- package/dist/legacy/light-sdk.js.map +1 -0
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs +23 -20
- package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js +23 -20
- package/dist/legacy/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useCollab.cjs +6 -2
- package/dist/legacy/visualBuilder/eventManager/useCollab.cjs.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useCollab.js +6 -2
- package/dist/legacy/visualBuilder/eventManager/useCollab.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateThread.cjs +1 -0
- package/dist/legacy/visualBuilder/generators/generateThread.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateThread.js +1 -0
- package/dist/legacy/visualBuilder/generators/generateThread.js.map +1 -1
- package/dist/modern/index.cjs +2 -44
- package/dist/modern/index.cjs.map +1 -1
- package/dist/modern/index.d.cts +2 -14
- package/dist/modern/index.d.ts +2 -14
- package/dist/modern/index.js +1 -43
- package/dist/modern/index.js.map +1 -1
- package/dist/modern/light-sdk.cjs +70 -0
- package/dist/modern/light-sdk.cjs.map +1 -0
- package/dist/modern/light-sdk.d.cts +19 -0
- package/dist/modern/light-sdk.d.ts +19 -0
- package/dist/modern/light-sdk.js +51 -0
- package/dist/modern/light-sdk.js.map +1 -0
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs +7 -1
- package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js +7 -1
- package/dist/modern/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.js.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useCollab.cjs +4 -0
- package/dist/modern/visualBuilder/eventManager/useCollab.cjs.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useCollab.js +4 -0
- package/dist/modern/visualBuilder/eventManager/useCollab.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateThread.cjs +1 -0
- package/dist/modern/visualBuilder/generators/generateThread.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateThread.js +1 -0
- package/dist/modern/visualBuilder/generators/generateThread.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/generators/generateThread.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport { render } from \"preact\";\nimport { css } from \"goober\";\nimport CollabIndicator from \"../components/Collab/CollabIndicator\";\nimport Config from \"../../configManager/configManager\";\nimport { IThreadDTO, IThreadRenderStatus } from \"../types/collab.types\";\nimport {\n MissingThreadsInfo,\n toggleCollabPopupEvent,\n} from \"../types/collab.types\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { adjustPositionToViewport } from \"../utils/collabUtils\";\n\nconst popupTopOffset = 43;\nconst popupLeftOffset = 9;\n\nconst hiddenClass = css`\n display: none;\n`;\n\nfunction createPopupContainer(\n resolvedXPath: string,\n relativeX: number,\n relativeY: number,\n top: number,\n left: number,\n updateConfig: boolean,\n hidden: boolean,\n payload: IThreadDTO | any\n): HTMLDivElement {\n const popupContainer = document.createElement(\"div\");\n popupContainer.setAttribute(\"field-path\", resolvedXPath);\n popupContainer.setAttribute(\"relative\", `x: ${relativeX}, y: ${relativeY}`);\n popupContainer.style.position = \"absolute\";\n popupContainer.style.top = `${top - popupTopOffset}px`;\n popupContainer.style.left = `${left - popupLeftOffset}px`;\n popupContainer.style.zIndex = updateConfig ? \"1000\" : \"999\";\n popupContainer.style.cursor = \"pointer\";\n popupContainer.className = \"collab-thread\";\n if (hidden) popupContainer.classList.add(hiddenClass);\n if (payload?._id) popupContainer.setAttribute(\"threaduid\", payload._id);\n return popupContainer;\n}\n\nfunction appendPopupContainer(popupContainer: HTMLDivElement): void {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__collab-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__collab-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(popupContainer);\n } else {\n document.body.appendChild(popupContainer);\n }\n}\n\nexport function generateThread(\n payload: IThreadDTO | any,\n options: {\n isNewThread?: boolean;\n updateConfig?: boolean;\n hidden?: boolean;\n } = {}\n): string | undefined {\n const {\n isNewThread = false,\n updateConfig = false,\n hidden = false,\n } = options;\n const config = Config.get?.();\n\n let relativeX: number, relativeY: number, resolvedXPath: string;\n\n if (isNewThread) {\n ({ relativeX, relativeY, xpath: resolvedXPath } = payload);\n } else {\n const { position, elementXPath } = payload;\n ({ x: relativeX, y: relativeY } = position);\n resolvedXPath = elementXPath;\n }\n\n // Filter to remove already rendered threads\n if (payload?._id) {\n const existingThread = document.querySelector(\n `div[threaduid='${payload._id}']`\n );\n if (existingThread) {\n return undefined;\n }\n }\n\n const element = getElementByXpath(resolvedXPath);\n if (!element) {\n return payload._id;\n }\n\n const rect = element.getBoundingClientRect();\n let top = rect.top + window.scrollY + relativeY * rect.height;\n let left = rect.left + window.scrollX + relativeX * rect.width;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n const popupContainer = createPopupContainer(\n resolvedXPath,\n relativeX,\n relativeY,\n top,\n left,\n updateConfig,\n hidden,\n payload\n );\n\n if (updateConfig && config?.collab?.enable) {\n if (config?.collab.isFeedbackMode) {\n Config.set(\"collab.isFeedbackMode\", false);\n }\n }\n\n render(\n <CollabIndicator\n activeThread={!isNewThread ? payload : undefined}\n newThread={isNewThread}\n />,\n popupContainer\n );\n\n appendPopupContainer(popupContainer);\n\n return undefined;\n}\n\nexport function updateCollabIconPosition() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n icons.forEach((icon) => {\n if (!(icon instanceof HTMLElement)) return;\n\n const path = icon.getAttribute(\"field-path\");\n const relative = icon.getAttribute(\"relative\");\n\n if (!path || !relative) {\n console.error(\"Missing field-path or relative attribute.\");\n return;\n }\n\n const match = relative.match(/x: ([\\d.]+), y: ([\\d.]+)/);\n if (!match) {\n console.error(\"Invalid relative attribute format.\");\n return;\n }\n\n const relativeX = parseFloat(match[1]);\n const relativeY = parseFloat(match[2]);\n\n const targetElement = getElementByXpath(path);\n\n if (!targetElement) {\n icon.classList.add(hiddenClass);\n return;\n }\n\n const rect = targetElement.getBoundingClientRect();\n let left = rect.left + rect.width * relativeX + window.scrollX;\n let top = rect.top + rect.height * relativeY + window.scrollY;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n icon.style.top = `${top - popupTopOffset}px`;\n icon.style.left = `${left - popupLeftOffset}px`;\n icon.classList.remove(hiddenClass);\n });\n}\nexport function updatePopupPositions() {\n const popups = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread .collab-popup\"\n );\n\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n popups.forEach((popup) => {\n if (popup && popup instanceof HTMLElement) {\n const parent = popup.closest(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n\n if (!parent) {\n console.error(\n \"Parent element with class 'collab-thread' not found.\"\n );\n return;\n }\n\n const button = parent.querySelector(\n \".visual-builder__collab-wrapper .collab-thread .collab-indicator\"\n );\n\n if (!button || !(button instanceof HTMLElement)) {\n console.error(\n \"Button with class 'collab-indicator' not found.\"\n );\n return;\n }\n\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function updateSuggestionListPosition() {\n const suggestionLists = document.querySelectorAll(\n \".collab-thread-body--input--textarea--suggestionsList\"\n );\n\n if (!suggestionLists.length) return;\n\n suggestionLists.forEach((list) => {\n if (!(list instanceof HTMLElement)) return;\n\n const textarea = document.querySelector(\n \".collab-thread-body--input--textarea\"\n ) as HTMLTextAreaElement | null;\n\n if (!textarea) return;\n const positionData = list.getAttribute(\"data-position\");\n const parsedData = positionData ? JSON.parse(positionData) : null;\n const showAbove = window.getComputedStyle(list).bottom !== \"auto\";\n const textareaRect = textarea.getBoundingClientRect();\n if (showAbove) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n } else {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n }\n\n if (!positionData && textareaRect) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const positionInfo = {\n showAbove: showAbove,\n cursorLineY: paddingTop + lineHeight,\n };\n list.setAttribute(\"data-position\", JSON.stringify(positionInfo));\n }\n\n const listRect = list.getBoundingClientRect();\n\n if (!showAbove && listRect.bottom > window.innerHeight) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = true;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n } else if (showAbove && listRect.top < 0) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = false;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n }\n });\n}\n\nexport function calculatePopupPosition(\n button: HTMLElement,\n popup: HTMLElement\n) {\n const buttonRect = button.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let popupHeight = popup.offsetHeight || 198;\n let popupWidth = popup.offsetWidth || 334;\n\n const spaceAbove = buttonRect.top;\n const spaceBelow = viewportHeight - buttonRect.bottom;\n\n let top, left;\n\n if (spaceAbove >= popupHeight) {\n top = buttonRect.top - popupHeight - 8;\n } else if (spaceBelow >= popupHeight) {\n top = buttonRect.bottom + 8;\n } else {\n top =\n spaceBelow > spaceAbove\n ? buttonRect.bottom + 8\n : Math.max(buttonRect.top - popupHeight - 8, 0);\n }\n\n left = buttonRect.left + buttonRect.width / 2 - popupWidth / 2;\n\n top = Math.max(top, 0);\n left = Math.max(left, 0);\n left = Math.min(left, viewportWidth - popupWidth);\n\n popup.style.top = `${top}px`;\n popup.style.left = `${left}px`;\n\n requestAnimationFrame(() => {\n const newPopupHeight = popup.offsetHeight;\n if (newPopupHeight !== popupHeight) {\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function removeAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.remove());\n}\n\nexport function hideAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.add(hiddenClass));\n}\n\nexport function showAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.remove(hiddenClass));\n}\n\nexport function removeCollabIcon(threadUid: string): void {\n const thread = document.querySelector(`div[threaduid='${threadUid}']`);\n thread?.remove();\n}\n\nexport function toggleCollabPopup({\n threadUid = \"\",\n action,\n}: toggleCollabPopupEvent): void {\n document.dispatchEvent(\n new CustomEvent(\"toggleCollabPopup\", {\n detail: { threadUid, action },\n })\n );\n}\n\nexport function HighlightThread(threadUid: string): void {\n toggleCollabPopup({ threadUid, action: \"open\" });\n}\n\nexport function isCollabThread(target: HTMLElement): boolean {\n return Array.from(target.classList).some((className) =>\n className.startsWith(\"collab\")\n );\n}\n\nexport function handleMissingThreads(payload: MissingThreadsInfo) {\n visualBuilderPostMessage?.send(\n VisualBuilderPostMessageEvents.COLLAB_MISSING_THREADS,\n payload\n );\n}\n\nexport function handleEmptyThreads() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => {\n if (!icon.hasAttribute(\"threaduid\")) {\n icon.remove();\n }\n });\n}\n\nconst retryConfig = {\n maxRetries: 5,\n retryDelay: 1000,\n};\n\nlet isProcessingThreads = false;\n\nexport const threadRenderStatus = new Map<string, IThreadRenderStatus>();\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction getRenderStatus(threadId: string): IThreadRenderStatus {\n if (!threadRenderStatus.has(threadId)) {\n threadRenderStatus.set(threadId, {\n threadId,\n attempts: 0,\n isRendered: false,\n });\n }\n return threadRenderStatus.get(threadId)!;\n}\n\nfunction updateRenderStatus(threadId: string, isRendered: boolean): void {\n const status = getRenderStatus(threadId);\n status.isRendered = isRendered;\n threadRenderStatus.set(threadId, status);\n}\n\nexport function clearThreadStatus(threadId: string): void {\n threadRenderStatus.delete(threadId);\n}\n\nexport function clearAllThreadStatus(): void {\n threadRenderStatus.clear();\n isProcessingThreads = false;\n}\n\nasync function processThread(thread: IThreadDTO): Promise<string | undefined> {\n let status = getRenderStatus(thread._id);\n\n while (status.attempts < retryConfig.maxRetries) {\n try {\n const result = generateThread(thread);\n if (result === undefined) {\n updateRenderStatus(thread._id, true);\n return undefined;\n }\n\n status.attempts++;\n updateRenderStatus(thread._id, false);\n\n if (status.attempts < retryConfig.maxRetries) {\n await delay(retryConfig.retryDelay);\n }\n } catch (error) {\n console.error(`Error rendering thread ${thread._id}:`, error);\n status.attempts++;\n if (status.attempts >= retryConfig.maxRetries) {\n break;\n }\n await delay(retryConfig.retryDelay);\n }\n }\n\n return thread._id;\n}\n\nexport async function processThreadsBatch(\n threads: IThreadDTO[]\n): Promise<string[]> {\n if (isProcessingThreads) return [];\n\n try {\n isProcessingThreads = true;\n const unrenderedThreads = filterUnrenderedThreads(threads);\n if (unrenderedThreads.length === 0) return [];\n\n const missingThreadIds = (\n await Promise.all(\n unrenderedThreads.map((thread) => processThread(thread))\n )\n ).filter(Boolean) as string[];\n\n missingThreadIds.forEach(clearThreadStatus);\n return missingThreadIds;\n } finally {\n isProcessingThreads = false;\n }\n}\n\nexport function filterUnrenderedThreads(threads: IThreadDTO[]): IThreadDTO[] {\n return threads.filter((thread) => {\n const existingThread = document.querySelector(\n `[threaduid=\"${thread._id}\"]`\n );\n if (existingThread) {\n updateRenderStatus(thread._id, true);\n return false;\n }\n return true;\n });\n}\n\nfunction getElementByXpath(xpath: string): HTMLElement | null {\n const result = document.evaluate(\n xpath,\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n return result.singleNodeValue as HTMLElement | null;\n}\n"],"mappings":"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","names":["Config","CollabIndicator","visualBuilderPostMessage"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/generators/generateThread.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport { render } from \"preact\";\nimport { css } from \"goober\";\nimport CollabIndicator from \"../components/Collab/CollabIndicator\";\nimport Config from \"../../configManager/configManager\";\nimport { IThreadDTO, IThreadRenderStatus } from \"../types/collab.types\";\nimport {\n MissingThreadsInfo,\n toggleCollabPopupEvent,\n} from \"../types/collab.types\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { adjustPositionToViewport } from \"../utils/collabUtils\";\n\nconst popupTopOffset = 43;\nconst popupLeftOffset = 9;\n\nconst hiddenClass = css`\n display: none;\n`;\n\nfunction createPopupContainer(\n resolvedXPath: string,\n relativeX: number,\n relativeY: number,\n top: number,\n left: number,\n updateConfig: boolean,\n hidden: boolean,\n payload: IThreadDTO | any\n): HTMLDivElement {\n const popupContainer = document.createElement(\"div\");\n popupContainer.setAttribute(\"field-path\", resolvedXPath);\n popupContainer.setAttribute(\"relative\", `x: ${relativeX}, y: ${relativeY}`);\n popupContainer.style.position = \"absolute\";\n popupContainer.style.top = `${top - popupTopOffset}px`;\n popupContainer.style.left = `${left - popupLeftOffset}px`;\n popupContainer.style.zIndex = updateConfig ? \"1000\" : \"999\";\n popupContainer.style.cursor = \"pointer\";\n popupContainer.className = \"collab-thread\";\n if (hidden) popupContainer.classList.add(hiddenClass);\n if (payload?._id) popupContainer.setAttribute(\"threaduid\", payload._id);\n return popupContainer;\n}\n\nfunction appendPopupContainer(popupContainer: HTMLDivElement): void {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__collab-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__collab-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(popupContainer);\n } else {\n document.body.appendChild(popupContainer);\n }\n}\n\nexport function generateThread(\n payload: IThreadDTO | any,\n options: {\n isNewThread?: boolean;\n updateConfig?: boolean;\n hidden?: boolean;\n } = {}\n): string | undefined {\n const {\n isNewThread = false,\n updateConfig = false,\n hidden = false,\n } = options;\n const config = Config.get?.();\n\n let relativeX: number, relativeY: number, resolvedXPath: string;\n\n if (isNewThread) {\n ({ relativeX, relativeY, xpath: resolvedXPath } = payload);\n } else {\n const { position, elementXPath } = payload;\n ({ x: relativeX, y: relativeY } = position);\n resolvedXPath = elementXPath;\n }\n\n // Filter to remove already rendered threads\n if (payload?._id) {\n const existingThread = document.querySelector(\n `div[threaduid='${payload._id}']`\n );\n if (existingThread) {\n return undefined;\n }\n }\n\n const element = getElementByXpath(resolvedXPath);\n if (!element) {\n return payload._id;\n }\n\n const rect = element.getBoundingClientRect();\n let top = rect.top + window.scrollY + relativeY * rect.height;\n let left = rect.left + window.scrollX + relativeX * rect.width;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n const popupContainer = createPopupContainer(\n resolvedXPath,\n relativeX,\n relativeY,\n top,\n left,\n updateConfig,\n hidden,\n payload\n );\n\n if (updateConfig && config?.collab?.enable) {\n if (config?.collab.isFeedbackMode) {\n Config.set(\"collab.isFeedbackMode\", false);\n }\n }\n\n render(\n <CollabIndicator\n activeThread={!isNewThread ? payload : undefined}\n newThread={isNewThread}\n />,\n popupContainer\n );\n\n appendPopupContainer(popupContainer);\n\n return undefined;\n}\n\nexport function updateCollabIconPosition() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n icons.forEach((icon) => {\n if (!(icon instanceof HTMLElement)) return;\n\n const path = icon.getAttribute(\"field-path\");\n const relative = icon.getAttribute(\"relative\");\n\n if (!path || !relative) {\n console.error(\"Missing field-path or relative attribute.\");\n return;\n }\n\n const match = relative.match(/x: ([\\d.]+), y: ([\\d.]+)/);\n if (!match) {\n console.error(\"Invalid relative attribute format.\");\n return;\n }\n\n const relativeX = parseFloat(match[1]);\n const relativeY = parseFloat(match[2]);\n\n const targetElement = getElementByXpath(path);\n\n if (!targetElement) {\n icon.classList.add(hiddenClass);\n return;\n }\n\n const rect = targetElement.getBoundingClientRect();\n let left = rect.left + rect.width * relativeX + window.scrollX;\n let top = rect.top + rect.height * relativeY + window.scrollY;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n icon.style.top = `${top - popupTopOffset}px`;\n icon.style.left = `${left - popupLeftOffset}px`;\n icon.classList.remove(hiddenClass);\n });\n}\nexport function updatePopupPositions() {\n const popups = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread .collab-popup\"\n );\n\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n popups.forEach((popup) => {\n if (popup && popup instanceof HTMLElement) {\n const parent = popup.closest(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n\n if (!parent) {\n console.error(\n \"Parent element with class 'collab-thread' not found.\"\n );\n return;\n }\n\n const button = parent.querySelector(\n \".visual-builder__collab-wrapper .collab-thread .collab-indicator\"\n );\n\n if (!button || !(button instanceof HTMLElement)) {\n console.error(\n \"Button with class 'collab-indicator' not found.\"\n );\n return;\n }\n\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function updateSuggestionListPosition() {\n const suggestionLists = document.querySelectorAll(\n \".collab-thread-body--input--textarea--suggestionsList\"\n );\n\n if (!suggestionLists.length) return;\n\n suggestionLists.forEach((list) => {\n if (!(list instanceof HTMLElement)) return;\n\n const textarea = document.querySelector(\n \".collab-thread-body--input--textarea\"\n ) as HTMLTextAreaElement | null;\n\n if (!textarea) return;\n const positionData = list.getAttribute(\"data-position\");\n const parsedData = positionData ? JSON.parse(positionData) : null;\n const showAbove = window.getComputedStyle(list).bottom !== \"auto\";\n const textareaRect = textarea.getBoundingClientRect();\n if (showAbove) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n } else {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n }\n\n if (!positionData && textareaRect) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const positionInfo = {\n showAbove: showAbove,\n cursorLineY: paddingTop + lineHeight,\n };\n list.setAttribute(\"data-position\", JSON.stringify(positionInfo));\n }\n\n const listRect = list.getBoundingClientRect();\n\n if (!showAbove && listRect.bottom > window.innerHeight) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = true;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n } else if (showAbove && listRect.top < 0) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = false;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n }\n });\n}\n\nexport function calculatePopupPosition(\n button: HTMLElement,\n popup: HTMLElement\n) {\n const buttonRect = button.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let popupHeight = popup.offsetHeight || 198;\n let popupWidth = popup.offsetWidth || 334;\n\n const spaceAbove = buttonRect.top;\n const spaceBelow = viewportHeight - buttonRect.bottom;\n\n let top, left;\n\n if (spaceAbove >= popupHeight) {\n top = buttonRect.top - popupHeight - 8;\n } else if (spaceBelow >= popupHeight) {\n top = buttonRect.bottom + 8;\n } else {\n top =\n spaceBelow > spaceAbove\n ? buttonRect.bottom + 8\n : Math.max(buttonRect.top - popupHeight - 8, 0);\n }\n\n left = buttonRect.left + buttonRect.width / 2 - popupWidth / 2;\n\n top = Math.max(top, 0);\n left = Math.max(left, 0);\n left = Math.min(left, viewportWidth - popupWidth);\n\n popup.style.top = `${top}px`;\n popup.style.left = `${left}px`;\n\n requestAnimationFrame(() => {\n const newPopupHeight = popup.offsetHeight;\n if (newPopupHeight !== popupHeight) {\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function removeAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.remove());\n}\n\nexport function hideAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.add(hiddenClass));\n toggleCollabPopup({ threadUid: \"\", action: \"close\" });\n}\n\nexport function showAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.remove(hiddenClass));\n}\n\nexport function removeCollabIcon(threadUid: string): void {\n const thread = document.querySelector(`div[threaduid='${threadUid}']`);\n thread?.remove();\n}\n\nexport function toggleCollabPopup({\n threadUid = \"\",\n action,\n}: toggleCollabPopupEvent): void {\n document.dispatchEvent(\n new CustomEvent(\"toggleCollabPopup\", {\n detail: { threadUid, action },\n })\n );\n}\n\nexport function HighlightThread(threadUid: string): void {\n toggleCollabPopup({ threadUid, action: \"open\" });\n}\n\nexport function isCollabThread(target: HTMLElement): boolean {\n return Array.from(target.classList).some((className) =>\n className.startsWith(\"collab\")\n );\n}\n\nexport function handleMissingThreads(payload: MissingThreadsInfo) {\n visualBuilderPostMessage?.send(\n VisualBuilderPostMessageEvents.COLLAB_MISSING_THREADS,\n payload\n );\n}\n\nexport function handleEmptyThreads() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => {\n if (!icon.hasAttribute(\"threaduid\")) {\n icon.remove();\n }\n });\n}\n\nconst retryConfig = {\n maxRetries: 5,\n retryDelay: 1000,\n};\n\nlet isProcessingThreads = false;\n\nexport const threadRenderStatus = new Map<string, IThreadRenderStatus>();\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction getRenderStatus(threadId: string): IThreadRenderStatus {\n if (!threadRenderStatus.has(threadId)) {\n threadRenderStatus.set(threadId, {\n threadId,\n attempts: 0,\n isRendered: false,\n });\n }\n return threadRenderStatus.get(threadId)!;\n}\n\nfunction updateRenderStatus(threadId: string, isRendered: boolean): void {\n const status = getRenderStatus(threadId);\n status.isRendered = isRendered;\n threadRenderStatus.set(threadId, status);\n}\n\nexport function clearThreadStatus(threadId: string): void {\n threadRenderStatus.delete(threadId);\n}\n\nexport function clearAllThreadStatus(): void {\n threadRenderStatus.clear();\n isProcessingThreads = false;\n}\n\nasync function processThread(thread: IThreadDTO): Promise<string | undefined> {\n let status = getRenderStatus(thread._id);\n\n while (status.attempts < retryConfig.maxRetries) {\n try {\n const result = generateThread(thread);\n if (result === undefined) {\n updateRenderStatus(thread._id, true);\n return undefined;\n }\n\n status.attempts++;\n updateRenderStatus(thread._id, false);\n\n if (status.attempts < retryConfig.maxRetries) {\n await delay(retryConfig.retryDelay);\n }\n } catch (error) {\n console.error(`Error rendering thread ${thread._id}:`, error);\n status.attempts++;\n if (status.attempts >= retryConfig.maxRetries) {\n break;\n }\n await delay(retryConfig.retryDelay);\n }\n }\n\n return thread._id;\n}\n\nexport async function processThreadsBatch(\n threads: IThreadDTO[]\n): Promise<string[]> {\n if (isProcessingThreads) return [];\n\n try {\n isProcessingThreads = true;\n const unrenderedThreads = filterUnrenderedThreads(threads);\n if (unrenderedThreads.length === 0) return [];\n\n const missingThreadIds = (\n await Promise.all(\n unrenderedThreads.map((thread) => processThread(thread))\n )\n ).filter(Boolean) as string[];\n\n missingThreadIds.forEach(clearThreadStatus);\n return missingThreadIds;\n } finally {\n isProcessingThreads = false;\n }\n}\n\nexport function filterUnrenderedThreads(threads: IThreadDTO[]): IThreadDTO[] {\n return threads.filter((thread) => {\n const existingThread = document.querySelector(\n `[threaduid=\"${thread._id}\"]`\n );\n if (existingThread) {\n updateRenderStatus(thread._id, true);\n return false;\n }\n return true;\n });\n}\n\nfunction getElementByXpath(xpath: string): HTMLElement | null {\n const result = document.evaluate(\n xpath,\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n return result.singleNodeValue as HTMLElement | null;\n}\n"],"mappings":"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","names":["Config","CollabIndicator","visualBuilderPostMessage"]}
|
|
@@ -279,6 +279,7 @@ function hideAllCollabIcons() {
|
|
|
279
279
|
".visual-builder__collab-wrapper .collab-thread"
|
|
280
280
|
);
|
|
281
281
|
icons?.forEach((icon) => icon?.classList.add(hiddenClass));
|
|
282
|
+
toggleCollabPopup({ threadUid: "", action: "close" });
|
|
282
283
|
}
|
|
283
284
|
function showAllCollabIcons() {
|
|
284
285
|
const icons = document.querySelectorAll(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/generators/generateThread.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport { render } from \"preact\";\nimport { css } from \"goober\";\nimport CollabIndicator from \"../components/Collab/CollabIndicator\";\nimport Config from \"../../configManager/configManager\";\nimport { IThreadDTO, IThreadRenderStatus } from \"../types/collab.types\";\nimport {\n MissingThreadsInfo,\n toggleCollabPopupEvent,\n} from \"../types/collab.types\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { adjustPositionToViewport } from \"../utils/collabUtils\";\n\nconst popupTopOffset = 43;\nconst popupLeftOffset = 9;\n\nconst hiddenClass = css`\n display: none;\n`;\n\nfunction createPopupContainer(\n resolvedXPath: string,\n relativeX: number,\n relativeY: number,\n top: number,\n left: number,\n updateConfig: boolean,\n hidden: boolean,\n payload: IThreadDTO | any\n): HTMLDivElement {\n const popupContainer = document.createElement(\"div\");\n popupContainer.setAttribute(\"field-path\", resolvedXPath);\n popupContainer.setAttribute(\"relative\", `x: ${relativeX}, y: ${relativeY}`);\n popupContainer.style.position = \"absolute\";\n popupContainer.style.top = `${top - popupTopOffset}px`;\n popupContainer.style.left = `${left - popupLeftOffset}px`;\n popupContainer.style.zIndex = updateConfig ? \"1000\" : \"999\";\n popupContainer.style.cursor = \"pointer\";\n popupContainer.className = \"collab-thread\";\n if (hidden) popupContainer.classList.add(hiddenClass);\n if (payload?._id) popupContainer.setAttribute(\"threaduid\", payload._id);\n return popupContainer;\n}\n\nfunction appendPopupContainer(popupContainer: HTMLDivElement): void {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__collab-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__collab-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(popupContainer);\n } else {\n document.body.appendChild(popupContainer);\n }\n}\n\nexport function generateThread(\n payload: IThreadDTO | any,\n options: {\n isNewThread?: boolean;\n updateConfig?: boolean;\n hidden?: boolean;\n } = {}\n): string | undefined {\n const {\n isNewThread = false,\n updateConfig = false,\n hidden = false,\n } = options;\n const config = Config.get?.();\n\n let relativeX: number, relativeY: number, resolvedXPath: string;\n\n if (isNewThread) {\n ({ relativeX, relativeY, xpath: resolvedXPath } = payload);\n } else {\n const { position, elementXPath } = payload;\n ({ x: relativeX, y: relativeY } = position);\n resolvedXPath = elementXPath;\n }\n\n // Filter to remove already rendered threads\n if (payload?._id) {\n const existingThread = document.querySelector(\n `div[threaduid='${payload._id}']`\n );\n if (existingThread) {\n return undefined;\n }\n }\n\n const element = getElementByXpath(resolvedXPath);\n if (!element) {\n return payload._id;\n }\n\n const rect = element.getBoundingClientRect();\n let top = rect.top + window.scrollY + relativeY * rect.height;\n let left = rect.left + window.scrollX + relativeX * rect.width;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n const popupContainer = createPopupContainer(\n resolvedXPath,\n relativeX,\n relativeY,\n top,\n left,\n updateConfig,\n hidden,\n payload\n );\n\n if (updateConfig && config?.collab?.enable) {\n if (config?.collab.isFeedbackMode) {\n Config.set(\"collab.isFeedbackMode\", false);\n }\n }\n\n render(\n <CollabIndicator\n activeThread={!isNewThread ? payload : undefined}\n newThread={isNewThread}\n />,\n popupContainer\n );\n\n appendPopupContainer(popupContainer);\n\n return undefined;\n}\n\nexport function updateCollabIconPosition() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n icons.forEach((icon) => {\n if (!(icon instanceof HTMLElement)) return;\n\n const path = icon.getAttribute(\"field-path\");\n const relative = icon.getAttribute(\"relative\");\n\n if (!path || !relative) {\n console.error(\"Missing field-path or relative attribute.\");\n return;\n }\n\n const match = relative.match(/x: ([\\d.]+), y: ([\\d.]+)/);\n if (!match) {\n console.error(\"Invalid relative attribute format.\");\n return;\n }\n\n const relativeX = parseFloat(match[1]);\n const relativeY = parseFloat(match[2]);\n\n const targetElement = getElementByXpath(path);\n\n if (!targetElement) {\n icon.classList.add(hiddenClass);\n return;\n }\n\n const rect = targetElement.getBoundingClientRect();\n let left = rect.left + rect.width * relativeX + window.scrollX;\n let top = rect.top + rect.height * relativeY + window.scrollY;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n icon.style.top = `${top - popupTopOffset}px`;\n icon.style.left = `${left - popupLeftOffset}px`;\n icon.classList.remove(hiddenClass);\n });\n}\nexport function updatePopupPositions() {\n const popups = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread .collab-popup\"\n );\n\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n popups.forEach((popup) => {\n if (popup && popup instanceof HTMLElement) {\n const parent = popup.closest(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n\n if (!parent) {\n console.error(\n \"Parent element with class 'collab-thread' not found.\"\n );\n return;\n }\n\n const button = parent.querySelector(\n \".visual-builder__collab-wrapper .collab-thread .collab-indicator\"\n );\n\n if (!button || !(button instanceof HTMLElement)) {\n console.error(\n \"Button with class 'collab-indicator' not found.\"\n );\n return;\n }\n\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function updateSuggestionListPosition() {\n const suggestionLists = document.querySelectorAll(\n \".collab-thread-body--input--textarea--suggestionsList\"\n );\n\n if (!suggestionLists.length) return;\n\n suggestionLists.forEach((list) => {\n if (!(list instanceof HTMLElement)) return;\n\n const textarea = document.querySelector(\n \".collab-thread-body--input--textarea\"\n ) as HTMLTextAreaElement | null;\n\n if (!textarea) return;\n const positionData = list.getAttribute(\"data-position\");\n const parsedData = positionData ? JSON.parse(positionData) : null;\n const showAbove = window.getComputedStyle(list).bottom !== \"auto\";\n const textareaRect = textarea.getBoundingClientRect();\n if (showAbove) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n } else {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n }\n\n if (!positionData && textareaRect) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const positionInfo = {\n showAbove: showAbove,\n cursorLineY: paddingTop + lineHeight,\n };\n list.setAttribute(\"data-position\", JSON.stringify(positionInfo));\n }\n\n const listRect = list.getBoundingClientRect();\n\n if (!showAbove && listRect.bottom > window.innerHeight) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = true;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n } else if (showAbove && listRect.top < 0) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = false;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n }\n });\n}\n\nexport function calculatePopupPosition(\n button: HTMLElement,\n popup: HTMLElement\n) {\n const buttonRect = button.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let popupHeight = popup.offsetHeight || 198;\n let popupWidth = popup.offsetWidth || 334;\n\n const spaceAbove = buttonRect.top;\n const spaceBelow = viewportHeight - buttonRect.bottom;\n\n let top, left;\n\n if (spaceAbove >= popupHeight) {\n top = buttonRect.top - popupHeight - 8;\n } else if (spaceBelow >= popupHeight) {\n top = buttonRect.bottom + 8;\n } else {\n top =\n spaceBelow > spaceAbove\n ? buttonRect.bottom + 8\n : Math.max(buttonRect.top - popupHeight - 8, 0);\n }\n\n left = buttonRect.left + buttonRect.width / 2 - popupWidth / 2;\n\n top = Math.max(top, 0);\n left = Math.max(left, 0);\n left = Math.min(left, viewportWidth - popupWidth);\n\n popup.style.top = `${top}px`;\n popup.style.left = `${left}px`;\n\n requestAnimationFrame(() => {\n const newPopupHeight = popup.offsetHeight;\n if (newPopupHeight !== popupHeight) {\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function removeAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.remove());\n}\n\nexport function hideAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.add(hiddenClass));\n}\n\nexport function showAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.remove(hiddenClass));\n}\n\nexport function removeCollabIcon(threadUid: string): void {\n const thread = document.querySelector(`div[threaduid='${threadUid}']`);\n thread?.remove();\n}\n\nexport function toggleCollabPopup({\n threadUid = \"\",\n action,\n}: toggleCollabPopupEvent): void {\n document.dispatchEvent(\n new CustomEvent(\"toggleCollabPopup\", {\n detail: { threadUid, action },\n })\n );\n}\n\nexport function HighlightThread(threadUid: string): void {\n toggleCollabPopup({ threadUid, action: \"open\" });\n}\n\nexport function isCollabThread(target: HTMLElement): boolean {\n return Array.from(target.classList).some((className) =>\n className.startsWith(\"collab\")\n );\n}\n\nexport function handleMissingThreads(payload: MissingThreadsInfo) {\n visualBuilderPostMessage?.send(\n VisualBuilderPostMessageEvents.COLLAB_MISSING_THREADS,\n payload\n );\n}\n\nexport function handleEmptyThreads() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => {\n if (!icon.hasAttribute(\"threaduid\")) {\n icon.remove();\n }\n });\n}\n\nconst retryConfig = {\n maxRetries: 5,\n retryDelay: 1000,\n};\n\nlet isProcessingThreads = false;\n\nexport const threadRenderStatus = new Map<string, IThreadRenderStatus>();\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction getRenderStatus(threadId: string): IThreadRenderStatus {\n if (!threadRenderStatus.has(threadId)) {\n threadRenderStatus.set(threadId, {\n threadId,\n attempts: 0,\n isRendered: false,\n });\n }\n return threadRenderStatus.get(threadId)!;\n}\n\nfunction updateRenderStatus(threadId: string, isRendered: boolean): void {\n const status = getRenderStatus(threadId);\n status.isRendered = isRendered;\n threadRenderStatus.set(threadId, status);\n}\n\nexport function clearThreadStatus(threadId: string): void {\n threadRenderStatus.delete(threadId);\n}\n\nexport function clearAllThreadStatus(): void {\n threadRenderStatus.clear();\n isProcessingThreads = false;\n}\n\nasync function processThread(thread: IThreadDTO): Promise<string | undefined> {\n let status = getRenderStatus(thread._id);\n\n while (status.attempts < retryConfig.maxRetries) {\n try {\n const result = generateThread(thread);\n if (result === undefined) {\n updateRenderStatus(thread._id, true);\n return undefined;\n }\n\n status.attempts++;\n updateRenderStatus(thread._id, false);\n\n if (status.attempts < retryConfig.maxRetries) {\n await delay(retryConfig.retryDelay);\n }\n } catch (error) {\n console.error(`Error rendering thread ${thread._id}:`, error);\n status.attempts++;\n if (status.attempts >= retryConfig.maxRetries) {\n break;\n }\n await delay(retryConfig.retryDelay);\n }\n }\n\n return thread._id;\n}\n\nexport async function processThreadsBatch(\n threads: IThreadDTO[]\n): Promise<string[]> {\n if (isProcessingThreads) return [];\n\n try {\n isProcessingThreads = true;\n const unrenderedThreads = filterUnrenderedThreads(threads);\n if (unrenderedThreads.length === 0) return [];\n\n const missingThreadIds = (\n await Promise.all(\n unrenderedThreads.map((thread) => processThread(thread))\n )\n ).filter(Boolean) as string[];\n\n missingThreadIds.forEach(clearThreadStatus);\n return missingThreadIds;\n } finally {\n isProcessingThreads = false;\n }\n}\n\nexport function filterUnrenderedThreads(threads: IThreadDTO[]): IThreadDTO[] {\n return threads.filter((thread) => {\n const existingThread = document.querySelector(\n `[threaduid=\"${thread._id}\"]`\n );\n if (existingThread) {\n updateRenderStatus(thread._id, true);\n return false;\n }\n return true;\n });\n}\n\nfunction getElementByXpath(xpath: string): HTMLElement | null {\n const result = document.evaluate(\n xpath,\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n return result.singleNodeValue as HTMLElement | null;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/generators/generateThread.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport { render } from \"preact\";\nimport { css } from \"goober\";\nimport CollabIndicator from \"../components/Collab/CollabIndicator\";\nimport Config from \"../../configManager/configManager\";\nimport { IThreadDTO, IThreadRenderStatus } from \"../types/collab.types\";\nimport {\n MissingThreadsInfo,\n toggleCollabPopupEvent,\n} from \"../types/collab.types\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { adjustPositionToViewport } from \"../utils/collabUtils\";\n\nconst popupTopOffset = 43;\nconst popupLeftOffset = 9;\n\nconst hiddenClass = css`\n display: none;\n`;\n\nfunction createPopupContainer(\n resolvedXPath: string,\n relativeX: number,\n relativeY: number,\n top: number,\n left: number,\n updateConfig: boolean,\n hidden: boolean,\n payload: IThreadDTO | any\n): HTMLDivElement {\n const popupContainer = document.createElement(\"div\");\n popupContainer.setAttribute(\"field-path\", resolvedXPath);\n popupContainer.setAttribute(\"relative\", `x: ${relativeX}, y: ${relativeY}`);\n popupContainer.style.position = \"absolute\";\n popupContainer.style.top = `${top - popupTopOffset}px`;\n popupContainer.style.left = `${left - popupLeftOffset}px`;\n popupContainer.style.zIndex = updateConfig ? \"1000\" : \"999\";\n popupContainer.style.cursor = \"pointer\";\n popupContainer.className = \"collab-thread\";\n if (hidden) popupContainer.classList.add(hiddenClass);\n if (payload?._id) popupContainer.setAttribute(\"threaduid\", payload._id);\n return popupContainer;\n}\n\nfunction appendPopupContainer(popupContainer: HTMLDivElement): void {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n );\n if (visualBuilderContainer) {\n let highlightCommentWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__collab-wrapper\"\n );\n if (!highlightCommentWrapper) {\n highlightCommentWrapper = document.createElement(\"div\");\n highlightCommentWrapper.className =\n \"visual-builder__collab-wrapper\";\n visualBuilderContainer.appendChild(highlightCommentWrapper);\n }\n highlightCommentWrapper.appendChild(popupContainer);\n } else {\n document.body.appendChild(popupContainer);\n }\n}\n\nexport function generateThread(\n payload: IThreadDTO | any,\n options: {\n isNewThread?: boolean;\n updateConfig?: boolean;\n hidden?: boolean;\n } = {}\n): string | undefined {\n const {\n isNewThread = false,\n updateConfig = false,\n hidden = false,\n } = options;\n const config = Config.get?.();\n\n let relativeX: number, relativeY: number, resolvedXPath: string;\n\n if (isNewThread) {\n ({ relativeX, relativeY, xpath: resolvedXPath } = payload);\n } else {\n const { position, elementXPath } = payload;\n ({ x: relativeX, y: relativeY } = position);\n resolvedXPath = elementXPath;\n }\n\n // Filter to remove already rendered threads\n if (payload?._id) {\n const existingThread = document.querySelector(\n `div[threaduid='${payload._id}']`\n );\n if (existingThread) {\n return undefined;\n }\n }\n\n const element = getElementByXpath(resolvedXPath);\n if (!element) {\n return payload._id;\n }\n\n const rect = element.getBoundingClientRect();\n let top = rect.top + window.scrollY + relativeY * rect.height;\n let left = rect.left + window.scrollX + relativeX * rect.width;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n const popupContainer = createPopupContainer(\n resolvedXPath,\n relativeX,\n relativeY,\n top,\n left,\n updateConfig,\n hidden,\n payload\n );\n\n if (updateConfig && config?.collab?.enable) {\n if (config?.collab.isFeedbackMode) {\n Config.set(\"collab.isFeedbackMode\", false);\n }\n }\n\n render(\n <CollabIndicator\n activeThread={!isNewThread ? payload : undefined}\n newThread={isNewThread}\n />,\n popupContainer\n );\n\n appendPopupContainer(popupContainer);\n\n return undefined;\n}\n\nexport function updateCollabIconPosition() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n icons.forEach((icon) => {\n if (!(icon instanceof HTMLElement)) return;\n\n const path = icon.getAttribute(\"field-path\");\n const relative = icon.getAttribute(\"relative\");\n\n if (!path || !relative) {\n console.error(\"Missing field-path or relative attribute.\");\n return;\n }\n\n const match = relative.match(/x: ([\\d.]+), y: ([\\d.]+)/);\n if (!match) {\n console.error(\"Invalid relative attribute format.\");\n return;\n }\n\n const relativeX = parseFloat(match[1]);\n const relativeY = parseFloat(match[2]);\n\n const targetElement = getElementByXpath(path);\n\n if (!targetElement) {\n icon.classList.add(hiddenClass);\n return;\n }\n\n const rect = targetElement.getBoundingClientRect();\n let left = rect.left + rect.width * relativeX + window.scrollX;\n let top = rect.top + rect.height * relativeY + window.scrollY;\n\n const adjustedPosition = adjustPositionToViewport({ top, left });\n top = adjustedPosition.top;\n left = adjustedPosition.left;\n\n icon.style.top = `${top - popupTopOffset}px`;\n icon.style.left = `${left - popupLeftOffset}px`;\n icon.classList.remove(hiddenClass);\n });\n}\nexport function updatePopupPositions() {\n const popups = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread .collab-popup\"\n );\n\n const config = Config.get?.();\n if (config?.collab?.pauseFeedback) return;\n\n popups.forEach((popup) => {\n if (popup && popup instanceof HTMLElement) {\n const parent = popup.closest(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n\n if (!parent) {\n console.error(\n \"Parent element with class 'collab-thread' not found.\"\n );\n return;\n }\n\n const button = parent.querySelector(\n \".visual-builder__collab-wrapper .collab-thread .collab-indicator\"\n );\n\n if (!button || !(button instanceof HTMLElement)) {\n console.error(\n \"Button with class 'collab-indicator' not found.\"\n );\n return;\n }\n\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function updateSuggestionListPosition() {\n const suggestionLists = document.querySelectorAll(\n \".collab-thread-body--input--textarea--suggestionsList\"\n );\n\n if (!suggestionLists.length) return;\n\n suggestionLists.forEach((list) => {\n if (!(list instanceof HTMLElement)) return;\n\n const textarea = document.querySelector(\n \".collab-thread-body--input--textarea\"\n ) as HTMLTextAreaElement | null;\n\n if (!textarea) return;\n const positionData = list.getAttribute(\"data-position\");\n const parsedData = positionData ? JSON.parse(positionData) : null;\n const showAbove = window.getComputedStyle(list).bottom !== \"auto\";\n const textareaRect = textarea.getBoundingClientRect();\n if (showAbove) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n } else {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.position = \"fixed\";\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n }\n\n if (!positionData && textareaRect) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n\n const positionInfo = {\n showAbove: showAbove,\n cursorLineY: paddingTop + lineHeight,\n };\n list.setAttribute(\"data-position\", JSON.stringify(positionInfo));\n }\n\n const listRect = list.getBoundingClientRect();\n\n if (!showAbove && listRect.bottom > window.innerHeight) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.bottom = `${window.innerHeight - textareaRect.top - cursorLineY + lineHeight}px`;\n list.style.top = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = true;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n } else if (showAbove && listRect.top < 0) {\n const lineHeight =\n parseInt(window.getComputedStyle(textarea).lineHeight) || 20;\n const paddingTop =\n parseInt(window.getComputedStyle(textarea).paddingTop) || 8;\n const cursorLineY =\n parsedData?.cursorLineY || paddingTop + lineHeight;\n\n list.style.top = `${textareaRect.top + cursorLineY}px`;\n list.style.bottom = \"auto\";\n\n if (positionData) {\n const updatedData = JSON.parse(positionData);\n updatedData.showAbove = false;\n list.setAttribute(\"data-position\", JSON.stringify(updatedData));\n }\n }\n });\n}\n\nexport function calculatePopupPosition(\n button: HTMLElement,\n popup: HTMLElement\n) {\n const buttonRect = button.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let popupHeight = popup.offsetHeight || 198;\n let popupWidth = popup.offsetWidth || 334;\n\n const spaceAbove = buttonRect.top;\n const spaceBelow = viewportHeight - buttonRect.bottom;\n\n let top, left;\n\n if (spaceAbove >= popupHeight) {\n top = buttonRect.top - popupHeight - 8;\n } else if (spaceBelow >= popupHeight) {\n top = buttonRect.bottom + 8;\n } else {\n top =\n spaceBelow > spaceAbove\n ? buttonRect.bottom + 8\n : Math.max(buttonRect.top - popupHeight - 8, 0);\n }\n\n left = buttonRect.left + buttonRect.width / 2 - popupWidth / 2;\n\n top = Math.max(top, 0);\n left = Math.max(left, 0);\n left = Math.min(left, viewportWidth - popupWidth);\n\n popup.style.top = `${top}px`;\n popup.style.left = `${left}px`;\n\n requestAnimationFrame(() => {\n const newPopupHeight = popup.offsetHeight;\n if (newPopupHeight !== popupHeight) {\n calculatePopupPosition(button, popup);\n }\n });\n}\n\nexport function removeAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.remove());\n}\n\nexport function hideAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.add(hiddenClass));\n toggleCollabPopup({ threadUid: \"\", action: \"close\" });\n}\n\nexport function showAllCollabIcons(): void {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => icon?.classList.remove(hiddenClass));\n}\n\nexport function removeCollabIcon(threadUid: string): void {\n const thread = document.querySelector(`div[threaduid='${threadUid}']`);\n thread?.remove();\n}\n\nexport function toggleCollabPopup({\n threadUid = \"\",\n action,\n}: toggleCollabPopupEvent): void {\n document.dispatchEvent(\n new CustomEvent(\"toggleCollabPopup\", {\n detail: { threadUid, action },\n })\n );\n}\n\nexport function HighlightThread(threadUid: string): void {\n toggleCollabPopup({ threadUid, action: \"open\" });\n}\n\nexport function isCollabThread(target: HTMLElement): boolean {\n return Array.from(target.classList).some((className) =>\n className.startsWith(\"collab\")\n );\n}\n\nexport function handleMissingThreads(payload: MissingThreadsInfo) {\n visualBuilderPostMessage?.send(\n VisualBuilderPostMessageEvents.COLLAB_MISSING_THREADS,\n payload\n );\n}\n\nexport function handleEmptyThreads() {\n const icons = document.querySelectorAll(\n \".visual-builder__collab-wrapper .collab-thread\"\n );\n icons?.forEach((icon) => {\n if (!icon.hasAttribute(\"threaduid\")) {\n icon.remove();\n }\n });\n}\n\nconst retryConfig = {\n maxRetries: 5,\n retryDelay: 1000,\n};\n\nlet isProcessingThreads = false;\n\nexport const threadRenderStatus = new Map<string, IThreadRenderStatus>();\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction getRenderStatus(threadId: string): IThreadRenderStatus {\n if (!threadRenderStatus.has(threadId)) {\n threadRenderStatus.set(threadId, {\n threadId,\n attempts: 0,\n isRendered: false,\n });\n }\n return threadRenderStatus.get(threadId)!;\n}\n\nfunction updateRenderStatus(threadId: string, isRendered: boolean): void {\n const status = getRenderStatus(threadId);\n status.isRendered = isRendered;\n threadRenderStatus.set(threadId, status);\n}\n\nexport function clearThreadStatus(threadId: string): void {\n threadRenderStatus.delete(threadId);\n}\n\nexport function clearAllThreadStatus(): void {\n threadRenderStatus.clear();\n isProcessingThreads = false;\n}\n\nasync function processThread(thread: IThreadDTO): Promise<string | undefined> {\n let status = getRenderStatus(thread._id);\n\n while (status.attempts < retryConfig.maxRetries) {\n try {\n const result = generateThread(thread);\n if (result === undefined) {\n updateRenderStatus(thread._id, true);\n return undefined;\n }\n\n status.attempts++;\n updateRenderStatus(thread._id, false);\n\n if (status.attempts < retryConfig.maxRetries) {\n await delay(retryConfig.retryDelay);\n }\n } catch (error) {\n console.error(`Error rendering thread ${thread._id}:`, error);\n status.attempts++;\n if (status.attempts >= retryConfig.maxRetries) {\n break;\n }\n await delay(retryConfig.retryDelay);\n }\n }\n\n return thread._id;\n}\n\nexport async function processThreadsBatch(\n threads: IThreadDTO[]\n): Promise<string[]> {\n if (isProcessingThreads) return [];\n\n try {\n isProcessingThreads = true;\n const unrenderedThreads = filterUnrenderedThreads(threads);\n if (unrenderedThreads.length === 0) return [];\n\n const missingThreadIds = (\n await Promise.all(\n unrenderedThreads.map((thread) => processThread(thread))\n )\n ).filter(Boolean) as string[];\n\n missingThreadIds.forEach(clearThreadStatus);\n return missingThreadIds;\n } finally {\n isProcessingThreads = false;\n }\n}\n\nexport function filterUnrenderedThreads(threads: IThreadDTO[]): IThreadDTO[] {\n return threads.filter((thread) => {\n const existingThread = document.querySelector(\n `[threaduid=\"${thread._id}\"]`\n );\n if (existingThread) {\n updateRenderStatus(thread._id, true);\n return false;\n }\n return true;\n });\n}\n\nfunction getElementByXpath(xpath: string): HTMLElement | null {\n const result = document.evaluate(\n xpath,\n document,\n null,\n XPathResult.FIRST_ORDERED_NODE_TYPE,\n null\n );\n return result.singleNodeValue as HTMLElement | null;\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentstack/live-preview-utils",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.4",
|
|
4
4
|
"description": "Contentstack provides the Live Preview SDK to establish a communication channel between the various Contentstack SDKs and your website, transmitting live changes to the preview pane.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "dist/legacy/index.d.ts",
|