@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/components/Collab/ThreadPopup/CommentTextArea.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport React from \"preact/compat\";\nimport { useEffect } from \"preact/hooks\";\nimport { useCommentTextArea } from \"../../../hooks/useCommentTextArea\";\nimport { collabStyles, flexAlignCenter } from \"../../../collab.style\";\nimport {\n ICommentTextAreaProps,\n IMentionList,\n} from \"../../../types/collab.types\";\nimport classNames from \"classnames\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\nconst ErrorIndicator: React.FC<{ errorMessage: string }> = ({\n errorMessage,\n}) => (\n <div\n className={classNames(\n \"collab-thread-input-indicator--error\",\n collabStyles()[\"collab-thread-input-indicator--error\"]\n )}\n >\n {errorMessage}\n </div>\n);\n\nconst CharacterCounter: React.FC<{\n currentLength: number;\n maxLength: number;\n}> = ({ currentLength, maxLength }) => (\n <div\n className={classNames(\n \"collab-thread-input-indicator--count\",\n collabStyles()[\"collab-thread-input-indicator--count\"]\n )}\n >\n {currentLength}/{maxLength}\n </div>\n);\n\nconst MentionSuggestionsList: React.FC<{\n filteredUsers: IMentionList[];\n selectedIndex: number;\n cursorPosition: { top: number; showAbove: boolean };\n inputRef: React.RefObject<HTMLTextAreaElement>;\n listRef: React.RefObject<HTMLUListElement>;\n itemRefs: React.MutableRefObject<(HTMLLIElement | null)[]>;\n insertMention: (user: IMentionList) => void;\n handleKeyDown: (event: KeyboardEvent) => void;\n}> = ({\n filteredUsers,\n selectedIndex,\n cursorPosition,\n inputRef,\n listRef,\n itemRefs,\n insertMention,\n handleKeyDown,\n}) => {\n if (filteredUsers.length === 0) return null;\n\n return (\n <ul\n className={classNames(\n \"collab-thread-body--input--textarea--suggestionsList\",\n collabStyles()[\n \"collab-thread-body--input--textarea--suggestionsList\"\n ]\n )}\n style={{\n ...(cursorPosition.showAbove\n ? {\n bottom: `${window.innerHeight - (inputRef.current?.getBoundingClientRect().top || 0) - cursorPosition.top}px`,\n top: \"auto\",\n }\n : {\n top: `${(inputRef.current?.getBoundingClientRect().top || 0) + cursorPosition.top}px`,\n }),\n }}\n ref={listRef}\n >\n {filteredUsers.map((user, index) => (\n <li\n key={user.uid}\n onClick={() => insertMention(user)}\n className={classNames(\n \"collab-thread-body--input--textarea--suggestionsList--item\",\n collabStyles()[\n \"collab-thread-body--input--textarea--suggestionsList--item\"\n ],\n index === selectedIndex\n ? collabStyles()[\n \"collab-thread-body--input--textarea--suggestionsList--item-selected\"\n ]\n : \"\"\n )}\n ref={(el) => (itemRefs.current[index] = el)}\n onKeyDown={(e) =>\n e.key === \"Enter\"\n ? insertMention(user)\n : handleKeyDown(e as KeyboardEvent)\n }\n tabIndex={-1}\n aria-selected={index === selectedIndex}\n >\n {(user.display?.length || 0) > 20 ? (\n <Tooltip content={user.display || \"\"}>\n {(user.display || \"\").substring(0, 18) + \"...\"}\n </Tooltip>\n ) : (\n user.display || \"\"\n )}\n </li>\n ))}\n </ul>\n );\n};\n\nconst CommentTextArea: React.FC<ICommentTextAreaProps> = React.memo(\n ({ userState, handleOnSaveRef, comment, onClose }) => {\n const {\n state,\n error,\n showSuggestions,\n cursorPosition,\n selectedIndex,\n filteredUsers,\n inputRef,\n listRef,\n itemRefs,\n handleInputChange,\n handleKeyDown,\n handleSubmit,\n insertMention,\n maxMessageLength,\n } = useCommentTextArea(userState, comment, onClose);\n\n const onChangeHandler = (event: Event) =>\n handleInputChange(event as any);\n const onKeyDownHandler = (event: KeyboardEvent) =>\n handleKeyDown(event as any);\n\n useEffect(() => {\n handleOnSaveRef.current = handleSubmit;\n }, [handleSubmit, handleOnSaveRef]);\n\n return (\n <div\n className={classNames(\n \"collab-thread-body--input--wrapper\",\n collabStyles()[\"collab-thread-body--input--wrapper\"]\n )}\n >\n <div\n className={classNames(\n \"collab-thread-body--input\",\n collabStyles()[\"collab-thread-body--input\"]\n )}\n >\n <div\n className={classNames(\n \"collab-thread-body--input--textarea--wrapper\",\n collabStyles()[\n \"collab-thread-body--input--textarea--wrapper\"\n ]\n )}\n >\n <textarea\n name=\"collab-thread-body--input--textarea\"\n id=\"collab-thread-body--input--textarea\"\n rows={1}\n className={classNames(\n \"collab-thread-body--input--textarea\",\n collabStyles()[\n \"collab-thread-body--input--textarea\"\n ]\n )}\n value={state.message}\n onChange={onChangeHandler}\n onKeyDown={onKeyDownHandler}\n maxLength={maxMessageLength}\n placeholder=\"Enter a comment or tag others using “@”\"\n ref={inputRef}\n />\n {showSuggestions && (\n <MentionSuggestionsList\n filteredUsers={filteredUsers}\n selectedIndex={selectedIndex}\n cursorPosition={cursorPosition}\n inputRef={inputRef}\n listRef={listRef}\n itemRefs={itemRefs}\n insertMention={insertMention}\n handleKeyDown={handleKeyDown}\n />\n )}\n </div>\n </div>\n\n <div\n className={classNames(\n \"collab-thread-input-indicator--wrapper\",\n \"flex-v-center\",\n collabStyles()[\n \"collab-thread-input-indicator--wrapper\"\n ],\n flexAlignCenter\n )}\n >\n <ErrorIndicator errorMessage={error.message} />\n <CharacterCounter\n currentLength={state.message.length}\n maxLength={maxMessageLength}\n />\n </div>\n </div>\n );\n }\n);\n\nexport default CommentTextArea;\n"],"mappings":"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","names":["_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/visualBuilder/components/Collab/ThreadPopup/CommentTextArea.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport React from \"preact/compat\";\nimport { useEffect } from \"preact/hooks\";\nimport { useCommentTextArea } from \"../../../hooks/useCommentTextArea\";\nimport { collabStyles, flexAlignCenter } from \"../../../collab.style\";\nimport {\n ICommentTextAreaProps,\n IMentionList,\n} from \"../../../types/collab.types\";\nimport classNames from \"classnames\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\nconst ErrorIndicator: React.FC<{ errorMessage: string }> = ({\n errorMessage,\n}) => (\n <div\n className={classNames(\n \"collab-thread-input-indicator--error\",\n collabStyles()[\"collab-thread-input-indicator--error\"]\n )}\n >\n {errorMessage}\n </div>\n);\n\nconst CharacterCounter: React.FC<{\n currentLength: number;\n maxLength: number;\n}> = ({ currentLength, maxLength }) => (\n <div\n className={classNames(\n \"collab-thread-input-indicator--count\",\n collabStyles()[\"collab-thread-input-indicator--count\"]\n )}\n >\n {currentLength}/{maxLength}\n </div>\n);\n\nconst MentionSuggestionsList: React.FC<{\n filteredUsers: IMentionList[];\n selectedIndex: number;\n cursorPosition: { top: number; showAbove: boolean };\n inputRef: React.RefObject<HTMLTextAreaElement>;\n listRef: React.RefObject<HTMLUListElement>;\n itemRefs: React.MutableRefObject<(HTMLLIElement | null)[]>;\n insertMention: (user: IMentionList) => void;\n handleKeyDown: (event: KeyboardEvent) => void;\n}> = ({\n filteredUsers,\n selectedIndex,\n cursorPosition,\n inputRef,\n listRef,\n itemRefs,\n insertMention,\n handleKeyDown,\n}) => {\n if (filteredUsers.length === 0) return null;\n\n return (\n <ul\n className={classNames(\n \"collab-thread-body--input--textarea--suggestionsList\",\n collabStyles()[\n \"collab-thread-body--input--textarea--suggestionsList\"\n ]\n )}\n style={{\n ...(cursorPosition.showAbove\n ? {\n bottom: `${window.innerHeight - (inputRef.current?.getBoundingClientRect().top || 0) - cursorPosition.top}px`,\n top: \"auto\",\n }\n : {\n top: `${(inputRef.current?.getBoundingClientRect().top || 0) + cursorPosition.top}px`,\n }),\n }}\n ref={listRef}\n >\n {filteredUsers.map((user, index) => (\n <li\n key={user.uid}\n onClick={() => insertMention(user)}\n className={classNames(\n \"collab-thread-body--input--textarea--suggestionsList--item\",\n collabStyles()[\n \"collab-thread-body--input--textarea--suggestionsList--item\"\n ],\n index === selectedIndex\n ? collabStyles()[\n \"collab-thread-body--input--textarea--suggestionsList--item-selected\"\n ]\n : \"\"\n )}\n ref={(el) => (itemRefs.current[index] = el)}\n onKeyDown={(e) =>\n e.key === \"Enter\"\n ? insertMention(user)\n : handleKeyDown(e as KeyboardEvent)\n }\n tabIndex={-1}\n aria-selected={index === selectedIndex}\n >\n {user.display === user.email ? (\n user.display.length > 20 ? (\n <Tooltip content={user.display || \"\"}>\n {(user.display || \"\").substring(0, 18) + \"...\"}\n </Tooltip>\n ) : (\n user.display\n )\n ) : (\n <Tooltip\n content={user.display + \" - \" + user.email || \"\"}\n >\n {user.display.length > 20\n ? (user.display || \"\").substring(0, 18) + \"...\"\n : user.display}\n </Tooltip>\n )}\n </li>\n ))}\n </ul>\n );\n};\n\nconst CommentTextArea: React.FC<ICommentTextAreaProps> = React.memo(\n ({ userState, handleOnSaveRef, comment, onClose }) => {\n const {\n state,\n error,\n showSuggestions,\n cursorPosition,\n selectedIndex,\n filteredUsers,\n inputRef,\n listRef,\n itemRefs,\n handleInputChange,\n handleKeyDown,\n handleSubmit,\n insertMention,\n maxMessageLength,\n } = useCommentTextArea(userState, comment, onClose);\n\n const onChangeHandler = (event: Event) =>\n handleInputChange(event as any);\n const onKeyDownHandler = (event: KeyboardEvent) =>\n handleKeyDown(event as any);\n\n useEffect(() => {\n handleOnSaveRef.current = handleSubmit;\n }, [handleSubmit, handleOnSaveRef]);\n\n return (\n <div\n className={classNames(\n \"collab-thread-body--input--wrapper\",\n collabStyles()[\"collab-thread-body--input--wrapper\"]\n )}\n >\n <div\n className={classNames(\n \"collab-thread-body--input\",\n collabStyles()[\"collab-thread-body--input\"]\n )}\n >\n <div\n className={classNames(\n \"collab-thread-body--input--textarea--wrapper\",\n collabStyles()[\n \"collab-thread-body--input--textarea--wrapper\"\n ]\n )}\n >\n <textarea\n name=\"collab-thread-body--input--textarea\"\n id=\"collab-thread-body--input--textarea\"\n rows={1}\n className={classNames(\n \"collab-thread-body--input--textarea\",\n collabStyles()[\n \"collab-thread-body--input--textarea\"\n ]\n )}\n value={state.message}\n onChange={onChangeHandler}\n onKeyDown={onKeyDownHandler}\n maxLength={maxMessageLength}\n placeholder=\"Enter a comment or tag others using “@”\"\n ref={inputRef}\n />\n {showSuggestions && (\n <MentionSuggestionsList\n filteredUsers={filteredUsers}\n selectedIndex={selectedIndex}\n cursorPosition={cursorPosition}\n inputRef={inputRef}\n listRef={listRef}\n itemRefs={itemRefs}\n insertMention={insertMention}\n handleKeyDown={handleKeyDown}\n />\n )}\n </div>\n </div>\n\n <div\n className={classNames(\n \"collab-thread-input-indicator--wrapper\",\n \"flex-v-center\",\n collabStyles()[\n \"collab-thread-input-indicator--wrapper\"\n ],\n flexAlignCenter\n )}\n >\n <ErrorIndicator errorMessage={error.message} />\n <CharacterCounter\n currentLength={state.message.length}\n maxLength={maxMessageLength}\n />\n </div>\n </div>\n );\n }\n);\n\nexport default CommentTextArea;\n"],"mappings":"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","names":[]}
|
|
@@ -51,7 +51,7 @@ var useCollab = () => {
|
|
|
51
51
|
const collabEnable = (_a = import_visualBuilderPostMessage.default) == null ? void 0 : _a.on(
|
|
52
52
|
import_postMessage.VisualBuilderPostMessageEvents.COLLAB_ENABLE,
|
|
53
53
|
(data) => {
|
|
54
|
-
var _a2, _b2, _c2, _d2, _e2, _f2, _g;
|
|
54
|
+
var _a2, _b2, _c2, _d2, _e2, _f2, _g, _h, _i;
|
|
55
55
|
if (!((_a2 = data == null ? void 0 : data.data) == null ? void 0 : _a2.collab)) {
|
|
56
56
|
console.error("Invalid collab data structure:", data);
|
|
57
57
|
return;
|
|
@@ -61,6 +61,10 @@ var useCollab = () => {
|
|
|
61
61
|
"collab.pauseFeedback",
|
|
62
62
|
(_e2 = (_d2 = data == null ? void 0 : data.data) == null ? void 0 : _d2.collab) == null ? void 0 : _e2.pauseFeedback
|
|
63
63
|
);
|
|
64
|
+
import_configManager.default.set(
|
|
65
|
+
"collab.isFeedbackMode",
|
|
66
|
+
(_g = (_f2 = data == null ? void 0 : data.data) == null ? void 0 : _f2.collab) == null ? void 0 : _g.isFeedbackMode
|
|
67
|
+
);
|
|
64
68
|
(0, import_generateThread.showAllCollabIcons)();
|
|
65
69
|
return;
|
|
66
70
|
}
|
|
@@ -71,7 +75,7 @@ var useCollab = () => {
|
|
|
71
75
|
);
|
|
72
76
|
import_configManager.default.set(
|
|
73
77
|
"collab.pauseFeedback",
|
|
74
|
-
(
|
|
78
|
+
(_i = (_h = data == null ? void 0 : data.data) == null ? void 0 : _h.collab) == null ? void 0 : _i.pauseFeedback
|
|
75
79
|
);
|
|
76
80
|
import_configManager.default.set(
|
|
77
81
|
"collab.inviteMetadata",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/eventManager/useCollab.ts"],"sourcesContent":["import visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport Config from \"../../configManager/configManager\";\nimport {\n removeAllCollabIcons,\n hideAllCollabIcons,\n removeCollabIcon,\n HighlightThread,\n showAllCollabIcons,\n} from \"../generators/generateThread\";\nimport {\n generateThread,\n handleMissingThreads,\n} from \"../generators/generateThread\";\nimport {\n IThreadDTO,\n ICollabConfig,\n IThreadIdentifier,\n IThreadRemove,\n IThreadReopen,\n} from \"../types/collab.types\";\nimport { OnEvent } from \"@contentstack/advanced-post-message\";\n\nconst handleRemoveCommentIcons = (fromShare: boolean = false): void => {\n if (fromShare) {\n hideAllCollabIcons();\n return;\n }\n removeAllCollabIcons();\n};\n\nexport const useCollab = () => {\n const config = Config.get();\n const collabEnable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_ENABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n showAllCollabIcons();\n return;\n }\n\n Config.set(\"collab.enable\", data.data.collab.enable ?? false);\n Config.set(\n \"collab.isFeedbackMode\",\n data.data.collab.isFeedbackMode ?? false\n );\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n Config.set(\n \"collab.inviteMetadata\",\n data.data.collab.inviteMetadata\n );\n }\n );\n\n const collabPayload = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DATA_UPDATE,\n (data: OnEvent<ICollabConfig>) => {\n if (!config?.collab?.enable) return;\n\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n\n if (data?.data?.collab?.inviteMetadata) {\n Config.set(\n \"collab.inviteMetadata\",\n data?.data?.collab?.inviteMetadata\n );\n return;\n }\n\n const missingThreadIds =\n data?.data?.collab?.payload\n ?.map((payload: IThreadDTO) => generateThread(payload))\n .filter((id): id is string => id !== undefined) || [];\n if (missingThreadIds.length > 0) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: missingThreadIds,\n });\n }\n }\n );\n\n const collabDisable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DISABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n handleRemoveCommentIcons(true);\n return;\n }\n\n Config.set(\"collab.enable\", false);\n Config.set(\"collab.isFeedbackMode\", false);\n\n handleRemoveCommentIcons();\n }\n );\n\n const collabThreadRemove = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREADS_REMOVE,\n (data: OnEvent<IThreadRemove>) => {\n const threadUids = data?.data?.threadUids;\n\n if (!config?.collab?.enable) return;\n\n if (data?.data?.updateConfig) {\n Config.set(\"collab.isFeedbackMode\", true);\n }\n if (threadUids.length > 0) {\n threadUids.forEach((threadUid) => {\n removeCollabIcon(threadUid);\n });\n }\n }\n );\n\n const collabThreadReopen = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_REOPEN,\n (data: OnEvent<IThreadReopen>) => {\n const thread = data.data.thread;\n\n if (!config?.collab?.enable) return;\n\n const result = generateThread(thread, {\n hidden: Boolean(config?.collab?.pauseFeedback),\n });\n if (result) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: [result],\n });\n }\n }\n );\n\n const collabThreadHighlight = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_HIGHLIGHT,\n (data: OnEvent<IThreadIdentifier>) => {\n const { threadUid } = data.data;\n if (!config?.collab?.enable || config?.collab?.pauseFeedback)\n return;\n\n HighlightThread(threadUid);\n }\n );\n\n return () => {\n collabEnable?.unregister();\n collabPayload?.unregister();\n collabDisable?.unregister();\n collabThreadRemove?.unregister();\n collabThreadReopen?.unregister();\n collabThreadHighlight?.unregister();\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAqC;AACrC,yBAA+C;AAC/C,2BAAmB;AACnB,4BAMO;AACP,IAAAA,yBAGO;AAUP,IAAM,2BAA2B,CAAC,YAAqB,UAAgB;AACnE,MAAI,WAAW;AACX,kDAAmB;AACnB;AAAA,EACJ;AACA,kDAAqB;AACzB;AAEO,IAAM,YAAY,MAAM;AA/B/B;AAgCI,QAAM,SAAS,qBAAAC,QAAO,IAAI;AAC1B,QAAM,gBAAe,qCAAAC,YAAA,mBAA0B;AAAA,IAC3C,kDAA+B;AAAA,IAC/B,CAAC,SAAiC;AAnC1C,UAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA;AAoCY,UAAI,GAACL,MAAA,6BAAM,SAAN,gBAAAA,IAAY,SAAQ;AACrB,gBAAQ,MAAM,kCAAkC,IAAI;AACpD;AAAA,MACJ;AACA,WAAIE,OAAAD,MAAA,6BAAM,SAAN,gBAAAA,IAAY,WAAZ,gBAAAC,IAAoB,WAAW;AAC/B,6BAAAJ,QAAO;AAAA,UACH;AAAA,WACAM,OAAAD,MAAA,6BAAM,SAAN,gBAAAA,IAAY,WAAZ,gBAAAC,IAAoB;AAAA,QACxB;AACA,sDAAmB;AACnB;AAAA,MACJ;AAEA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/eventManager/useCollab.ts"],"sourcesContent":["import visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport Config from \"../../configManager/configManager\";\nimport {\n removeAllCollabIcons,\n hideAllCollabIcons,\n removeCollabIcon,\n HighlightThread,\n showAllCollabIcons,\n} from \"../generators/generateThread\";\nimport {\n generateThread,\n handleMissingThreads,\n} from \"../generators/generateThread\";\nimport {\n IThreadDTO,\n ICollabConfig,\n IThreadIdentifier,\n IThreadRemove,\n IThreadReopen,\n} from \"../types/collab.types\";\nimport { OnEvent } from \"@contentstack/advanced-post-message\";\n\nconst handleRemoveCommentIcons = (fromShare: boolean = false): void => {\n if (fromShare) {\n hideAllCollabIcons();\n return;\n }\n removeAllCollabIcons();\n};\n\nexport const useCollab = () => {\n const config = Config.get();\n const collabEnable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_ENABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n Config.set(\n \"collab.isFeedbackMode\",\n data?.data?.collab?.isFeedbackMode\n );\n showAllCollabIcons();\n return;\n }\n\n Config.set(\"collab.enable\", data.data.collab.enable ?? false);\n Config.set(\n \"collab.isFeedbackMode\",\n data.data.collab.isFeedbackMode ?? false\n );\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n Config.set(\n \"collab.inviteMetadata\",\n data.data.collab.inviteMetadata\n );\n }\n );\n\n const collabPayload = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DATA_UPDATE,\n (data: OnEvent<ICollabConfig>) => {\n if (!config?.collab?.enable) return;\n\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n\n if (data?.data?.collab?.inviteMetadata) {\n Config.set(\n \"collab.inviteMetadata\",\n data?.data?.collab?.inviteMetadata\n );\n return;\n }\n\n const missingThreadIds =\n data?.data?.collab?.payload\n ?.map((payload: IThreadDTO) => generateThread(payload))\n .filter((id): id is string => id !== undefined) || [];\n if (missingThreadIds.length > 0) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: missingThreadIds,\n });\n }\n }\n );\n\n const collabDisable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DISABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n handleRemoveCommentIcons(true);\n return;\n }\n\n Config.set(\"collab.enable\", false);\n Config.set(\"collab.isFeedbackMode\", false);\n\n handleRemoveCommentIcons();\n }\n );\n\n const collabThreadRemove = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREADS_REMOVE,\n (data: OnEvent<IThreadRemove>) => {\n const threadUids = data?.data?.threadUids;\n\n if (!config?.collab?.enable) return;\n\n if (data?.data?.updateConfig) {\n Config.set(\"collab.isFeedbackMode\", true);\n }\n if (threadUids.length > 0) {\n threadUids.forEach((threadUid) => {\n removeCollabIcon(threadUid);\n });\n }\n }\n );\n\n const collabThreadReopen = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_REOPEN,\n (data: OnEvent<IThreadReopen>) => {\n const thread = data.data.thread;\n\n if (!config?.collab?.enable) return;\n\n const result = generateThread(thread, {\n hidden: Boolean(config?.collab?.pauseFeedback),\n });\n if (result) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: [result],\n });\n }\n }\n );\n\n const collabThreadHighlight = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_HIGHLIGHT,\n (data: OnEvent<IThreadIdentifier>) => {\n const { threadUid } = data.data;\n if (!config?.collab?.enable || config?.collab?.pauseFeedback)\n return;\n\n HighlightThread(threadUid);\n }\n );\n\n return () => {\n collabEnable?.unregister();\n collabPayload?.unregister();\n collabDisable?.unregister();\n collabThreadRemove?.unregister();\n collabThreadReopen?.unregister();\n collabThreadHighlight?.unregister();\n };\n};\n"],"mappings":"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","names":["import_generateThread","Config","visualBuilderPostMessage","_a","_b","_c","_d","_e","_f"]}
|
|
@@ -28,7 +28,7 @@ var useCollab = () => {
|
|
|
28
28
|
const collabEnable = (_a = visualBuilderPostMessage) == null ? void 0 : _a.on(
|
|
29
29
|
VisualBuilderPostMessageEvents.COLLAB_ENABLE,
|
|
30
30
|
(data) => {
|
|
31
|
-
var _a2, _b2, _c2, _d2, _e2, _f2, _g;
|
|
31
|
+
var _a2, _b2, _c2, _d2, _e2, _f2, _g, _h, _i;
|
|
32
32
|
if (!((_a2 = data == null ? void 0 : data.data) == null ? void 0 : _a2.collab)) {
|
|
33
33
|
console.error("Invalid collab data structure:", data);
|
|
34
34
|
return;
|
|
@@ -38,6 +38,10 @@ var useCollab = () => {
|
|
|
38
38
|
"collab.pauseFeedback",
|
|
39
39
|
(_e2 = (_d2 = data == null ? void 0 : data.data) == null ? void 0 : _d2.collab) == null ? void 0 : _e2.pauseFeedback
|
|
40
40
|
);
|
|
41
|
+
Config.set(
|
|
42
|
+
"collab.isFeedbackMode",
|
|
43
|
+
(_g = (_f2 = data == null ? void 0 : data.data) == null ? void 0 : _f2.collab) == null ? void 0 : _g.isFeedbackMode
|
|
44
|
+
);
|
|
41
45
|
showAllCollabIcons();
|
|
42
46
|
return;
|
|
43
47
|
}
|
|
@@ -48,7 +52,7 @@ var useCollab = () => {
|
|
|
48
52
|
);
|
|
49
53
|
Config.set(
|
|
50
54
|
"collab.pauseFeedback",
|
|
51
|
-
(
|
|
55
|
+
(_i = (_h = data == null ? void 0 : data.data) == null ? void 0 : _h.collab) == null ? void 0 : _i.pauseFeedback
|
|
52
56
|
);
|
|
53
57
|
Config.set(
|
|
54
58
|
"collab.inviteMetadata",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/eventManager/useCollab.ts"],"sourcesContent":["import visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport Config from \"../../configManager/configManager\";\nimport {\n removeAllCollabIcons,\n hideAllCollabIcons,\n removeCollabIcon,\n HighlightThread,\n showAllCollabIcons,\n} from \"../generators/generateThread\";\nimport {\n generateThread,\n handleMissingThreads,\n} from \"../generators/generateThread\";\nimport {\n IThreadDTO,\n ICollabConfig,\n IThreadIdentifier,\n IThreadRemove,\n IThreadReopen,\n} from \"../types/collab.types\";\nimport { OnEvent } from \"@contentstack/advanced-post-message\";\n\nconst handleRemoveCommentIcons = (fromShare: boolean = false): void => {\n if (fromShare) {\n hideAllCollabIcons();\n return;\n }\n removeAllCollabIcons();\n};\n\nexport const useCollab = () => {\n const config = Config.get();\n const collabEnable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_ENABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n showAllCollabIcons();\n return;\n }\n\n Config.set(\"collab.enable\", data.data.collab.enable ?? false);\n Config.set(\n \"collab.isFeedbackMode\",\n data.data.collab.isFeedbackMode ?? false\n );\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n Config.set(\n \"collab.inviteMetadata\",\n data.data.collab.inviteMetadata\n );\n }\n );\n\n const collabPayload = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DATA_UPDATE,\n (data: OnEvent<ICollabConfig>) => {\n if (!config?.collab?.enable) return;\n\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n\n if (data?.data?.collab?.inviteMetadata) {\n Config.set(\n \"collab.inviteMetadata\",\n data?.data?.collab?.inviteMetadata\n );\n return;\n }\n\n const missingThreadIds =\n data?.data?.collab?.payload\n ?.map((payload: IThreadDTO) => generateThread(payload))\n .filter((id): id is string => id !== undefined) || [];\n if (missingThreadIds.length > 0) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: missingThreadIds,\n });\n }\n }\n );\n\n const collabDisable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DISABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n handleRemoveCommentIcons(true);\n return;\n }\n\n Config.set(\"collab.enable\", false);\n Config.set(\"collab.isFeedbackMode\", false);\n\n handleRemoveCommentIcons();\n }\n );\n\n const collabThreadRemove = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREADS_REMOVE,\n (data: OnEvent<IThreadRemove>) => {\n const threadUids = data?.data?.threadUids;\n\n if (!config?.collab?.enable) return;\n\n if (data?.data?.updateConfig) {\n Config.set(\"collab.isFeedbackMode\", true);\n }\n if (threadUids.length > 0) {\n threadUids.forEach((threadUid) => {\n removeCollabIcon(threadUid);\n });\n }\n }\n );\n\n const collabThreadReopen = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_REOPEN,\n (data: OnEvent<IThreadReopen>) => {\n const thread = data.data.thread;\n\n if (!config?.collab?.enable) return;\n\n const result = generateThread(thread, {\n hidden: Boolean(config?.collab?.pauseFeedback),\n });\n if (result) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: [result],\n });\n }\n }\n );\n\n const collabThreadHighlight = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_HIGHLIGHT,\n (data: OnEvent<IThreadIdentifier>) => {\n const { threadUid } = data.data;\n if (!config?.collab?.enable || config?.collab?.pauseFeedback)\n return;\n\n HighlightThread(threadUid);\n }\n );\n\n return () => {\n collabEnable?.unregister();\n collabPayload?.unregister();\n collabDisable?.unregister();\n collabThreadRemove?.unregister();\n collabThreadReopen?.unregister();\n collabThreadHighlight?.unregister();\n };\n};\n"],"mappings":";;;AAAA,OAAO,8BAA8B;AACrC,SAAS,sCAAsC;AAC/C,OAAO,YAAY;AACnB;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAUP,IAAM,2BAA2B,CAAC,YAAqB,UAAgB;AACnE,MAAI,WAAW;AACX,uBAAmB;AACnB;AAAA,EACJ;AACA,uBAAqB;AACzB;AAEO,IAAM,YAAY,MAAM;AA/B/B;AAgCI,QAAM,SAAS,OAAO,IAAI;AAC1B,QAAM,gBAAe,qDAA0B;AAAA,IAC3C,+BAA+B;AAAA,IAC/B,CAAC,SAAiC;AAnC1C,UAAAA,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC,KAAA;AAoCY,UAAI,GAACL,MAAA,6BAAM,SAAN,gBAAAA,IAAY,SAAQ;AACrB,gBAAQ,MAAM,kCAAkC,IAAI;AACpD;AAAA,MACJ;AACA,WAAIE,OAAAD,MAAA,6BAAM,SAAN,gBAAAA,IAAY,WAAZ,gBAAAC,IAAoB,WAAW;AAC/B,eAAO;AAAA,UACH;AAAA,WACAE,OAAAD,MAAA,6BAAM,SAAN,gBAAAA,IAAY,WAAZ,gBAAAC,IAAoB;AAAA,QACxB;AACA,2BAAmB;AACnB;AAAA,MACJ;AAEA,aAAO,IAAI,iBAAiB,KAAK,KAAK,OAAO,UAAU,KAAK;AAC5D,aAAO;AAAA,QACH;AAAA,QACA,KAAK,KAAK,OAAO,kBAAkB;AAAA,MACvC;AACA,aAAO;AAAA,QACH;AAAA,SACA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/eventManager/useCollab.ts"],"sourcesContent":["import visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport Config from \"../../configManager/configManager\";\nimport {\n removeAllCollabIcons,\n hideAllCollabIcons,\n removeCollabIcon,\n HighlightThread,\n showAllCollabIcons,\n} from \"../generators/generateThread\";\nimport {\n generateThread,\n handleMissingThreads,\n} from \"../generators/generateThread\";\nimport {\n IThreadDTO,\n ICollabConfig,\n IThreadIdentifier,\n IThreadRemove,\n IThreadReopen,\n} from \"../types/collab.types\";\nimport { OnEvent } from \"@contentstack/advanced-post-message\";\n\nconst handleRemoveCommentIcons = (fromShare: boolean = false): void => {\n if (fromShare) {\n hideAllCollabIcons();\n return;\n }\n removeAllCollabIcons();\n};\n\nexport const useCollab = () => {\n const config = Config.get();\n const collabEnable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_ENABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n Config.set(\n \"collab.isFeedbackMode\",\n data?.data?.collab?.isFeedbackMode\n );\n showAllCollabIcons();\n return;\n }\n\n Config.set(\"collab.enable\", data.data.collab.enable ?? false);\n Config.set(\n \"collab.isFeedbackMode\",\n data.data.collab.isFeedbackMode ?? false\n );\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n Config.set(\n \"collab.inviteMetadata\",\n data.data.collab.inviteMetadata\n );\n }\n );\n\n const collabPayload = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DATA_UPDATE,\n (data: OnEvent<ICollabConfig>) => {\n if (!config?.collab?.enable) return;\n\n if (!data?.data?.collab) {\n console.error(\"Invalid collab data structure:\", data);\n return;\n }\n\n if (data?.data?.collab?.inviteMetadata) {\n Config.set(\n \"collab.inviteMetadata\",\n data?.data?.collab?.inviteMetadata\n );\n return;\n }\n\n const missingThreadIds =\n data?.data?.collab?.payload\n ?.map((payload: IThreadDTO) => generateThread(payload))\n .filter((id): id is string => id !== undefined) || [];\n if (missingThreadIds.length > 0) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: missingThreadIds,\n });\n }\n }\n );\n\n const collabDisable = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_DISABLE,\n (data: OnEvent<ICollabConfig>) => {\n if (data?.data?.collab?.fromShare) {\n Config.set(\n \"collab.pauseFeedback\",\n data?.data?.collab?.pauseFeedback\n );\n handleRemoveCommentIcons(true);\n return;\n }\n\n Config.set(\"collab.enable\", false);\n Config.set(\"collab.isFeedbackMode\", false);\n\n handleRemoveCommentIcons();\n }\n );\n\n const collabThreadRemove = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREADS_REMOVE,\n (data: OnEvent<IThreadRemove>) => {\n const threadUids = data?.data?.threadUids;\n\n if (!config?.collab?.enable) return;\n\n if (data?.data?.updateConfig) {\n Config.set(\"collab.isFeedbackMode\", true);\n }\n if (threadUids.length > 0) {\n threadUids.forEach((threadUid) => {\n removeCollabIcon(threadUid);\n });\n }\n }\n );\n\n const collabThreadReopen = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_REOPEN,\n (data: OnEvent<IThreadReopen>) => {\n const thread = data.data.thread;\n\n if (!config?.collab?.enable) return;\n\n const result = generateThread(thread, {\n hidden: Boolean(config?.collab?.pauseFeedback),\n });\n if (result) {\n handleMissingThreads({\n payload: { isElementPresent: false },\n threadUids: [result],\n });\n }\n }\n );\n\n const collabThreadHighlight = visualBuilderPostMessage?.on(\n VisualBuilderPostMessageEvents.COLLAB_THREAD_HIGHLIGHT,\n (data: OnEvent<IThreadIdentifier>) => {\n const { threadUid } = data.data;\n if (!config?.collab?.enable || config?.collab?.pauseFeedback)\n return;\n\n HighlightThread(threadUid);\n }\n );\n\n return () => {\n collabEnable?.unregister();\n collabPayload?.unregister();\n collabDisable?.unregister();\n collabThreadRemove?.unregister();\n collabThreadReopen?.unregister();\n collabThreadHighlight?.unregister();\n };\n};\n"],"mappings":"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","names":["_a","_b","_c","_d","_e","_f"]}
|
|
@@ -332,6 +332,7 @@ function hideAllCollabIcons() {
|
|
|
332
332
|
".visual-builder__collab-wrapper .collab-thread"
|
|
333
333
|
);
|
|
334
334
|
icons == null ? void 0 : icons.forEach((icon) => icon == null ? void 0 : icon.classList.add(hiddenClass));
|
|
335
|
+
toggleCollabPopup({ threadUid: "", action: "close" });
|
|
335
336
|
}
|
|
336
337
|
function showAllCollabIcons() {
|
|
337
338
|
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":["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"]}
|
|
@@ -282,6 +282,7 @@ function hideAllCollabIcons() {
|
|
|
282
282
|
".visual-builder__collab-wrapper .collab-thread"
|
|
283
283
|
);
|
|
284
284
|
icons == null ? void 0 : icons.forEach((icon) => icon == null ? void 0 : icon.classList.add(hiddenClass));
|
|
285
|
+
toggleCollabPopup({ threadUid: "", action: "close" });
|
|
285
286
|
}
|
|
286
287
|
function showAllCollabIcons() {
|
|
287
288
|
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":";;;AACA,SAAS,cAAc;AACvB,SAAS,WAAW;AACpB,OAAO,qBAAqB;AAC5B,OAAO,YAAY;AAMnB,OAAO,8BAA8B;AACrC,SAAS,sCAAsC;AAC/C,SAAS,gCAAgC;AAuHjC;AArHR,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AAExB,IAAM,cAAc;AAAA;AAAA;AAIpB,SAAS,qBACL,eACA,WACA,WACA,KACA,MACA,cACA,QACA,SACc;AACd,QAAM,iBAAiB,SAAS,cAAc,KAAK;AACnD,iBAAe,aAAa,cAAc,aAAa;AACvD,iBAAe,aAAa,YAAY,MAAM,SAAS,QAAQ,SAAS,EAAE;AAC1E,iBAAe,MAAM,WAAW;AAChC,iBAAe,MAAM,MAAM,GAAG,MAAM,cAAc;AAClD,iBAAe,MAAM,OAAO,GAAG,OAAO,eAAe;AACrD,iBAAe,MAAM,SAAS,eAAe,SAAS;AACtD,iBAAe,MAAM,SAAS;AAC9B,iBAAe,YAAY;AAC3B,MAAI,OAAQ,gBAAe,UAAU,IAAI,WAAW;AACpD,MAAI,mCAAS,IAAK,gBAAe,aAAa,aAAa,QAAQ,GAAG;AACtE,SAAO;AACX;AAEA,SAAS,qBAAqB,gBAAsC;AAChE,QAAM,yBAAyB,SAAS;AAAA,IACpC;AAAA,EACJ;AACA,MAAI,wBAAwB;AACxB,QAAI,0BAA0B,uBAAuB;AAAA,MACjD;AAAA,IACJ;AACA,QAAI,CAAC,yBAAyB;AAC1B,gCAA0B,SAAS,cAAc,KAAK;AACtD,8BAAwB,YACpB;AACJ,6BAAuB,YAAY,uBAAuB;AAAA,IAC9D;AACA,4BAAwB,YAAY,cAAc;AAAA,EACtD,OAAO;AACH,aAAS,KAAK,YAAY,cAAc;AAAA,EAC5C;AACJ;AAEO,SAAS,eACZ,SACA,UAII,CAAC,GACa;AAxEtB;AAyEI,QAAM;AAAA,IACF,cAAc;AAAA,IACd,eAAe;AAAA,IACf,SAAS;AAAA,EACb,IAAI;AACJ,QAAM,UAAS,mBAAO,QAAP;AAEf,MAAI,WAAmB,WAAmB;AAE1C,MAAI,aAAa;AACb,KAAC,EAAE,WAAW,WAAW,OAAO,cAAc,IAAI;AAAA,EACtD,OAAO;AACH,UAAM,EAAE,UAAU,aAAa,IAAI;AACnC,KAAC,EAAE,GAAG,WAAW,GAAG,UAAU,IAAI;AAClC,oBAAgB;AAAA,EACpB;AAGA,MAAI,mCAAS,KAAK;AACd,UAAM,iBAAiB,SAAS;AAAA,MAC5B,kBAAkB,QAAQ,GAAG;AAAA,IACjC;AACA,QAAI,gBAAgB;AAChB,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,QAAM,UAAU,kBAAkB,aAAa;AAC/C,MAAI,CAAC,SAAS;AACV,WAAO,QAAQ;AAAA,EACnB;AAEA,QAAM,OAAO,QAAQ,sBAAsB;AAC3C,MAAI,MAAM,KAAK,MAAM,OAAO,UAAU,YAAY,KAAK;AACvD,MAAI,OAAO,KAAK,OAAO,OAAO,UAAU,YAAY,KAAK;AAEzD,QAAM,mBAAmB,yBAAyB,EAAE,KAAK,KAAK,CAAC;AAC/D,QAAM,iBAAiB;AACvB,SAAO,iBAAiB;AAExB,QAAM,iBAAiB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,MAAI,kBAAgB,sCAAQ,WAAR,mBAAgB,SAAQ;AACxC,QAAI,iCAAQ,OAAO,gBAAgB;AAC/B,aAAO,IAAI,yBAAyB,KAAK;AAAA,IAC7C;AAAA,EACJ;AAEA;AAAA,IACI;AAAA,MAAC;AAAA;AAAA,QACG,cAAc,CAAC,cAAc,UAAU;AAAA,QACvC,WAAW;AAAA;AAAA,IACf;AAAA,IACA;AAAA,EACJ;AAEA,uBAAqB,cAAc;AAEnC,SAAO;AACX;AAEO,SAAS,2BAA2B;AA/I3C;AAgJI,QAAM,QAAQ,SAAS;AAAA,IACnB;AAAA,EACJ;AACA,QAAM,UAAS,mBAAO,QAAP;AACf,OAAI,sCAAQ,WAAR,mBAAgB,cAAe;AAEnC,QAAM,QAAQ,CAAC,SAAS;AACpB,QAAI,EAAE,gBAAgB,aAAc;AAEpC,UAAM,OAAO,KAAK,aAAa,YAAY;AAC3C,UAAM,WAAW,KAAK,aAAa,UAAU;AAE7C,QAAI,CAAC,QAAQ,CAAC,UAAU;AACpB,cAAQ,MAAM,2CAA2C;AACzD;AAAA,IACJ;AAEA,UAAM,QAAQ,SAAS,MAAM,0BAA0B;AACvD,QAAI,CAAC,OAAO;AACR,cAAQ,MAAM,oCAAoC;AAClD;AAAA,IACJ;AAEA,UAAM,YAAY,WAAW,MAAM,CAAC,CAAC;AACrC,UAAM,YAAY,WAAW,MAAM,CAAC,CAAC;AAErC,UAAM,gBAAgB,kBAAkB,IAAI;AAE5C,QAAI,CAAC,eAAe;AAChB,WAAK,UAAU,IAAI,WAAW;AAC9B;AAAA,IACJ;AAEA,UAAM,OAAO,cAAc,sBAAsB;AACjD,QAAI,OAAO,KAAK,OAAO,KAAK,QAAQ,YAAY,OAAO;AACvD,QAAI,MAAM,KAAK,MAAM,KAAK,SAAS,YAAY,OAAO;AAEtD,UAAM,mBAAmB,yBAAyB,EAAE,KAAK,KAAK,CAAC;AAC/D,UAAM,iBAAiB;AACvB,WAAO,iBAAiB;AAExB,SAAK,MAAM,MAAM,GAAG,MAAM,cAAc;AACxC,SAAK,MAAM,OAAO,GAAG,OAAO,eAAe;AAC3C,SAAK,UAAU,OAAO,WAAW;AAAA,EACrC,CAAC;AACL;AACO,SAAS,uBAAuB;AA9LvC;AA+LI,QAAM,SAAS,SAAS;AAAA,IACpB;AAAA,EACJ;AAEA,QAAM,UAAS,mBAAO,QAAP;AACf,OAAI,sCAAQ,WAAR,mBAAgB,cAAe;AAEnC,SAAO,QAAQ,CAAC,UAAU;AACtB,QAAI,SAAS,iBAAiB,aAAa;AACvC,YAAM,SAAS,MAAM;AAAA,QACjB;AAAA,MACJ;AAEA,UAAI,CAAC,QAAQ;AACT,gBAAQ;AAAA,UACJ;AAAA,QACJ;AACA;AAAA,MACJ;AAEA,YAAM,SAAS,OAAO;AAAA,QAClB;AAAA,MACJ;AAEA,UAAI,CAAC,UAAU,EAAE,kBAAkB,cAAc;AAC7C,gBAAQ;AAAA,UACJ;AAAA,QACJ;AACA;AAAA,MACJ;AAEA,6BAAuB,QAAQ,KAAK;AAAA,IACxC;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,+BAA+B;AAC3C,QAAM,kBAAkB,SAAS;AAAA,IAC7B;AAAA,EACJ;AAEA,MAAI,CAAC,gBAAgB,OAAQ;AAE7B,kBAAgB,QAAQ,CAAC,SAAS;AAC9B,QAAI,EAAE,gBAAgB,aAAc;AAEpC,UAAM,WAAW,SAAS;AAAA,MACtB;AAAA,IACJ;AAEA,QAAI,CAAC,SAAU;AACf,UAAM,eAAe,KAAK,aAAa,eAAe;AACtD,UAAM,aAAa,eAAe,KAAK,MAAM,YAAY,IAAI;AAC7D,UAAM,YAAY,OAAO,iBAAiB,IAAI,EAAE,WAAW;AAC3D,UAAM,eAAe,SAAS,sBAAsB;AACpD,QAAI,WAAW;AACX,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,eACF,yCAAY,gBAAe,aAAa;AAE5C,WAAK,MAAM,WAAW;AACtB,WAAK,MAAM,SAAS,GAAG,OAAO,cAAc,aAAa,MAAM,cAAc,UAAU;AACvF,WAAK,MAAM,MAAM;AAAA,IACrB,OAAO;AACH,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAE9D,YAAM,eACF,yCAAY,gBAAe,aAAa;AAE5C,WAAK,MAAM,WAAW;AACtB,WAAK,MAAM,MAAM,GAAG,aAAa,MAAM,WAAW;AAClD,WAAK,MAAM,SAAS;AAAA,IACxB;AAEA,QAAI,CAAC,gBAAgB,cAAc;AAC/B,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAE9D,YAAM,eAAe;AAAA,QACjB;AAAA,QACA,aAAa,aAAa;AAAA,MAC9B;AACA,WAAK,aAAa,iBAAiB,KAAK,UAAU,YAAY,CAAC;AAAA,IACnE;AAEA,UAAM,WAAW,KAAK,sBAAsB;AAE5C,QAAI,CAAC,aAAa,SAAS,SAAS,OAAO,aAAa;AACpD,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,eACF,yCAAY,gBAAe,aAAa;AAE5C,WAAK,MAAM,SAAS,GAAG,OAAO,cAAc,aAAa,MAAM,cAAc,UAAU;AACvF,WAAK,MAAM,MAAM;AAEjB,UAAI,cAAc;AACd,cAAM,cAAc,KAAK,MAAM,YAAY;AAC3C,oBAAY,YAAY;AACxB,aAAK,aAAa,iBAAiB,KAAK,UAAU,WAAW,CAAC;AAAA,MAClE;AAAA,IACJ,WAAW,aAAa,SAAS,MAAM,GAAG;AACtC,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,aACF,SAAS,OAAO,iBAAiB,QAAQ,EAAE,UAAU,KAAK;AAC9D,YAAM,eACF,yCAAY,gBAAe,aAAa;AAE5C,WAAK,MAAM,MAAM,GAAG,aAAa,MAAM,WAAW;AAClD,WAAK,MAAM,SAAS;AAEpB,UAAI,cAAc;AACd,cAAM,cAAc,KAAK,MAAM,YAAY;AAC3C,oBAAY,YAAY;AACxB,aAAK,aAAa,iBAAiB,KAAK,UAAU,WAAW,CAAC;AAAA,MAClE;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,uBACZ,QACA,OACF;AACE,QAAM,aAAa,OAAO,sBAAsB;AAChD,QAAM,iBAAiB,OAAO;AAC9B,QAAM,gBAAgB,OAAO;AAE7B,MAAI,cAAc,MAAM,gBAAgB;AACxC,MAAI,aAAa,MAAM,eAAe;AAEtC,QAAM,aAAa,WAAW;AAC9B,QAAM,aAAa,iBAAiB,WAAW;AAE/C,MAAI,KAAK;AAET,MAAI,cAAc,aAAa;AAC3B,UAAM,WAAW,MAAM,cAAc;AAAA,EACzC,WAAW,cAAc,aAAa;AAClC,UAAM,WAAW,SAAS;AAAA,EAC9B,OAAO;AACH,UACI,aAAa,aACP,WAAW,SAAS,IACpB,KAAK,IAAI,WAAW,MAAM,cAAc,GAAG,CAAC;AAAA,EAC1D;AAEA,SAAO,WAAW,OAAO,WAAW,QAAQ,IAAI,aAAa;AAE7D,QAAM,KAAK,IAAI,KAAK,CAAC;AACrB,SAAO,KAAK,IAAI,MAAM,CAAC;AACvB,SAAO,KAAK,IAAI,MAAM,gBAAgB,UAAU;AAEhD,QAAM,MAAM,MAAM,GAAG,GAAG;AACxB,QAAM,MAAM,OAAO,GAAG,IAAI;AAE1B,wBAAsB,MAAM;AACxB,UAAM,iBAAiB,MAAM;AAC7B,QAAI,mBAAmB,aAAa;AAChC,6BAAuB,QAAQ,KAAK;AAAA,IACxC;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,uBAA6B;AACzC,QAAM,QAAQ,SAAS;AAAA,IACnB;AAAA,EACJ;AACA,iCAAO,QAAQ,CAAC,SAAS,6BAAM;AACnC;AAEO,SAAS,qBAA2B;AACvC,QAAM,QAAQ,SAAS;AAAA,IACnB;AAAA,EACJ;AACA,iCAAO,QAAQ,CAAC,SAAS,6BAAM,UAAU,IAAI;AAC7C,oBAAkB,EAAE,WAAW,IAAI,QAAQ,QAAQ,CAAC;AACxD;AAEO,SAAS,qBAA2B;AACvC,QAAM,QAAQ,SAAS;AAAA,IACnB;AAAA,EACJ;AACA,iCAAO,QAAQ,CAAC,SAAS,6BAAM,UAAU,OAAO;AACpD;AAEO,SAAS,iBAAiB,WAAyB;AACtD,QAAM,SAAS,SAAS,cAAc,kBAAkB,SAAS,IAAI;AACrE,mCAAQ;AACZ;AAEO,SAAS,kBAAkB;AAAA,EAC9B,YAAY;AAAA,EACZ;AACJ,GAAiC;AAC7B,WAAS;AAAA,IACL,IAAI,YAAY,qBAAqB;AAAA,MACjC,QAAQ,EAAE,WAAW,OAAO;AAAA,IAChC,CAAC;AAAA,EACL;AACJ;AAEO,SAAS,gBAAgB,WAAyB;AACrD,oBAAkB,EAAE,WAAW,QAAQ,OAAO,CAAC;AACnD;AAEO,SAAS,eAAe,QAA8B;AACzD,SAAO,MAAM,KAAK,OAAO,SAAS,EAAE;AAAA,IAAK,CAAC,cACtC,UAAU,WAAW,QAAQ;AAAA,EACjC;AACJ;AAEO,SAAS,qBAAqB,SAA6B;AA9ZlE;AA+ZI,wDAA0B;AAAA,IACtB,+BAA+B;AAAA,IAC/B;AAAA;AAER;AAEO,SAAS,qBAAqB;AACjC,QAAM,QAAQ,SAAS;AAAA,IACnB;AAAA,EACJ;AACA,iCAAO,QAAQ,CAAC,SAAS;AACrB,QAAI,CAAC,KAAK,aAAa,WAAW,GAAG;AACjC,WAAK,OAAO;AAAA,IAChB;AAAA,EACJ;AACJ;AAEA,IAAM,cAAc;AAAA,EAChB,YAAY;AAAA,EACZ,YAAY;AAChB;AAEA,IAAI,sBAAsB;AAEnB,IAAM,qBAAqB,oBAAI,IAAiC;AAEvE,SAAS,MAAM,IAA2B;AACtC,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAC3D;AAEA,SAAS,gBAAgB,UAAuC;AAC5D,MAAI,CAAC,mBAAmB,IAAI,QAAQ,GAAG;AACnC,uBAAmB,IAAI,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,IAChB,CAAC;AAAA,EACL;AACA,SAAO,mBAAmB,IAAI,QAAQ;AAC1C;AAEA,SAAS,mBAAmB,UAAkB,YAA2B;AACrE,QAAM,SAAS,gBAAgB,QAAQ;AACvC,SAAO,aAAa;AACpB,qBAAmB,IAAI,UAAU,MAAM;AAC3C;AAEO,SAAS,kBAAkB,UAAwB;AACtD,qBAAmB,OAAO,QAAQ;AACtC;AAEO,SAAS,uBAA6B;AACzC,qBAAmB,MAAM;AACzB,wBAAsB;AAC1B;AAEA,eAAe,cAAc,QAAiD;AAC1E,MAAI,SAAS,gBAAgB,OAAO,GAAG;AAEvC,SAAO,OAAO,WAAW,YAAY,YAAY;AAC7C,QAAI;AACA,YAAM,SAAS,eAAe,MAAM;AACpC,UAAI,WAAW,QAAW;AACtB,2BAAmB,OAAO,KAAK,IAAI;AACnC,eAAO;AAAA,MACX;AAEA,aAAO;AACP,yBAAmB,OAAO,KAAK,KAAK;AAEpC,UAAI,OAAO,WAAW,YAAY,YAAY;AAC1C,cAAM,MAAM,YAAY,UAAU;AAAA,MACtC;AAAA,IACJ,SAAS,OAAO;AACZ,cAAQ,MAAM,0BAA0B,OAAO,GAAG,KAAK,KAAK;AAC5D,aAAO;AACP,UAAI,OAAO,YAAY,YAAY,YAAY;AAC3C;AAAA,MACJ;AACA,YAAM,MAAM,YAAY,UAAU;AAAA,IACtC;AAAA,EACJ;AAEA,SAAO,OAAO;AAClB;AAEA,eAAsB,oBAClB,SACiB;AACjB,MAAI,oBAAqB,QAAO,CAAC;AAEjC,MAAI;AACA,0BAAsB;AACtB,UAAM,oBAAoB,wBAAwB,OAAO;AACzD,QAAI,kBAAkB,WAAW,EAAG,QAAO,CAAC;AAE5C,UAAM,oBACF,MAAM,QAAQ;AAAA,MACV,kBAAkB,IAAI,CAAC,WAAW,cAAc,MAAM,CAAC;AAAA,IAC3D,GACF,OAAO,OAAO;AAEhB,qBAAiB,QAAQ,iBAAiB;AAC1C,WAAO;AAAA,EACX,UAAE;AACE,0BAAsB;AAAA,EAC1B;AACJ;AAEO,SAAS,wBAAwB,SAAqC;AACzE,SAAO,QAAQ,OAAO,CAAC,WAAW;AAC9B,UAAM,iBAAiB,SAAS;AAAA,MAC5B,eAAe,OAAO,GAAG;AAAA,IAC7B;AACA,QAAI,gBAAgB;AAChB,yBAAmB,OAAO,KAAK,IAAI;AACnC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX,CAAC;AACL;AAEA,SAAS,kBAAkB,OAAmC;AAC1D,QAAM,SAAS,SAAS;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EACJ;AACA,SAAO,OAAO;AAClB;","names":[]}
|
package/dist/modern/index.cjs
CHANGED
|
@@ -35,50 +35,8 @@ __export(index_exports, {
|
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(index_exports);
|
|
37
37
|
var import_contentstack_live_preview_HOC = __toESM(require("./preview/contentstack-live-preview-HOC.cjs"), 1);
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
if (typeof window === "undefined") {
|
|
41
|
-
return Promise.resolve(_LightLivePreviewHoC.previewConstructors);
|
|
42
|
-
}
|
|
43
|
-
return _LightLivePreviewHoC.initializePreview();
|
|
44
|
-
}
|
|
45
|
-
static initializePreview() {
|
|
46
|
-
_LightLivePreviewHoC.previewConstructors = {
|
|
47
|
-
livePreview: {},
|
|
48
|
-
visualBuilder: {}
|
|
49
|
-
};
|
|
50
|
-
_LightLivePreviewHoC.onEntryChangeCallbacks = {};
|
|
51
|
-
return Promise.resolve(_LightLivePreviewHoC.previewConstructors);
|
|
52
|
-
}
|
|
53
|
-
static get hash() {
|
|
54
|
-
return "";
|
|
55
|
-
}
|
|
56
|
-
static get config() {
|
|
57
|
-
return {};
|
|
58
|
-
}
|
|
59
|
-
static isInitialized() {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
static onEntryChange(callback, config = {}) {
|
|
63
|
-
const { skipInitialRender = false } = config;
|
|
64
|
-
if (!skipInitialRender) {
|
|
65
|
-
callback();
|
|
66
|
-
}
|
|
67
|
-
return "live-preview-id";
|
|
68
|
-
}
|
|
69
|
-
static onLiveEdit(callback) {
|
|
70
|
-
return "live-preview-id";
|
|
71
|
-
}
|
|
72
|
-
static unsubscribeOnEntryChange() {
|
|
73
|
-
}
|
|
74
|
-
static getSdkVersion() {
|
|
75
|
-
return "3.2.2";
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
_LightLivePreviewHoC.previewConstructors = {};
|
|
79
|
-
_LightLivePreviewHoC.onEntryChangeCallbacks = {};
|
|
80
|
-
var LightLivePreviewHoC = _LightLivePreviewHoC;
|
|
81
|
-
var ContentstackLivePreview = typeof process !== "undefined" && (process.env.PURGE_PREVIEW_SDK === "true" || process.env.REACT_APP_PURGE_PREVIEW_SDK === "true") ? LightLivePreviewHoC : import_contentstack_live_preview_HOC.default;
|
|
38
|
+
var import_light_sdk = __toESM(require("./light-sdk.cjs"), 1);
|
|
39
|
+
var ContentstackLivePreview = typeof process !== "undefined" && (process.env.PURGE_PREVIEW_SDK === "true" || process.env.REACT_APP_PURGE_PREVIEW_SDK === "true") ? import_light_sdk.default : import_contentstack_live_preview_HOC.default;
|
|
82
40
|
var VB_EmptyBlockParentClass = "visual-builder__empty-block-parent";
|
|
83
41
|
var index_default = ContentstackLivePreview;
|
|
84
42
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import ContentstackLivePreviewHOC from \"./preview/contentstack-live-preview-HOC\";\nimport { IStackSdk as ExternalStackSdkType } from \"./types/types\";\n\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import ContentstackLivePreviewHOC from \"./preview/contentstack-live-preview-HOC\";\nimport { IStackSdk as ExternalStackSdkType } from \"./types/types\";\n\nimport LightLivePreviewHoC from \"./light-sdk\";\n\nexport type IStackSdk = ExternalStackSdkType;\n\n\nconst ContentstackLivePreview =\n typeof process !== \"undefined\" &&\n (process?.env?.PURGE_PREVIEW_SDK === \"true\" ||\n process?.env?.REACT_APP_PURGE_PREVIEW_SDK === \"true\")\n ? LightLivePreviewHoC\n : ContentstackLivePreviewHOC;\n\nexport const VB_EmptyBlockParentClass = \"visual-builder__empty-block-parent\";\nexport default ContentstackLivePreview;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAAuC;AAGvC,uBAAgC;AAKhC,IAAM,0BACF,OAAO,YAAY,gBAClB,kCAAoC,UACjC,4CAA8C,UAC5C,iBAAAA,UACA,qCAAAC;AAEH,IAAM,2BAA2B;AACxC,IAAO,gBAAQ;","names":["LightLivePreviewHoC","ContentstackLivePreviewHOC"]}
|
package/dist/modern/index.d.cts
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
import ContentstackLivePreview$1 from './preview/contentstack-live-preview-HOC.cjs';
|
|
2
2
|
import { IStackSdk as IStackSdk$1 } from './types/types.cjs';
|
|
3
|
-
import
|
|
3
|
+
import LightLivePreviewHoC from './light-sdk.cjs';
|
|
4
|
+
import './livePreview/types/onEntryChangeCallback.type.cjs';
|
|
4
5
|
import './visualBuilder/types/collab.types.cjs';
|
|
5
6
|
|
|
6
7
|
type IStackSdk = IStackSdk$1;
|
|
7
|
-
declare class LightLivePreviewHoC {
|
|
8
|
-
private static previewConstructors;
|
|
9
|
-
private static onEntryChangeCallbacks;
|
|
10
|
-
static init(): Promise<{}>;
|
|
11
|
-
private static initializePreview;
|
|
12
|
-
static get hash(): string;
|
|
13
|
-
static get config(): {};
|
|
14
|
-
static isInitialized(): boolean;
|
|
15
|
-
static onEntryChange(callback: OnEntryChangeCallback, config?: OnEntryChangeConfig): OnEntryChangeCallbackUID;
|
|
16
|
-
static onLiveEdit(callback: OnEntryChangeCallback): string;
|
|
17
|
-
static unsubscribeOnEntryChange(): void;
|
|
18
|
-
static getSdkVersion(): string;
|
|
19
|
-
}
|
|
20
8
|
declare const ContentstackLivePreview: typeof LightLivePreviewHoC | typeof ContentstackLivePreview$1;
|
|
21
9
|
declare const VB_EmptyBlockParentClass = "visual-builder__empty-block-parent";
|
|
22
10
|
|