@contentstack/live-preview-utils 4.4.2 → 4.4.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 +4 -2
- package/dist/legacy/common/inIframe.cjs +9 -0
- package/dist/legacy/common/inIframe.cjs.map +1 -1
- package/dist/legacy/common/inIframe.d.cts +2 -1
- package/dist/legacy/common/inIframe.d.ts +2 -1
- package/dist/legacy/common/inIframe.js +8 -0
- package/dist/legacy/common/inIframe.js.map +1 -1
- package/dist/legacy/configManager/config.default.cjs +8 -1
- package/dist/legacy/configManager/config.default.cjs.map +1 -1
- package/dist/legacy/configManager/config.default.js +8 -1
- package/dist/legacy/configManager/config.default.js.map +1 -1
- package/dist/legacy/configManager/configManager.cjs +24 -5
- package/dist/legacy/configManager/configManager.cjs.map +1 -1
- package/dist/legacy/configManager/configManager.d.cts +11 -1
- package/dist/legacy/configManager/configManager.d.ts +11 -1
- package/dist/legacy/configManager/configManager.js +23 -5
- package/dist/legacy/configManager/configManager.js.map +1 -1
- package/dist/legacy/configManager/handleUserConfig.cjs +6 -3
- package/dist/legacy/configManager/handleUserConfig.cjs.map +1 -1
- package/dist/legacy/configManager/handleUserConfig.js +6 -3
- package/dist/legacy/configManager/handleUserConfig.js.map +1 -1
- package/dist/legacy/configManager/index.d.cts +1 -1
- package/dist/legacy/configManager/index.d.ts +1 -1
- package/dist/legacy/cslp/cslpdata.cjs +26 -12
- package/dist/legacy/cslp/cslpdata.cjs.map +1 -1
- package/dist/legacy/cslp/cslpdata.d.cts +0 -5
- package/dist/legacy/cslp/cslpdata.d.ts +0 -5
- package/dist/legacy/cslp/cslpdata.js +26 -12
- package/dist/legacy/cslp/cslpdata.js.map +1 -1
- package/dist/legacy/light-sdk.cjs +1 -1
- package/dist/legacy/light-sdk.js +1 -1
- package/dist/legacy/livePreview/editButton/editButton.cjs +20 -0
- package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
- package/dist/legacy/livePreview/editButton/editButton.d.cts +1 -0
- package/dist/legacy/livePreview/editButton/editButton.d.ts +1 -0
- package/dist/legacy/livePreview/editButton/editButton.js +20 -0
- package/dist/legacy/livePreview/editButton/editButton.js.map +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +13 -10
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +15 -12
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
- package/dist/legacy/livePreview/live-preview.cjs +2 -0
- package/dist/legacy/livePreview/live-preview.cjs.map +1 -1
- package/dist/legacy/livePreview/live-preview.js +2 -0
- package/dist/legacy/livePreview/live-preview.js.map +1 -1
- package/dist/legacy/livePreview/onPageTraversal.cjs +1 -1
- package/dist/legacy/livePreview/onPageTraversal.cjs.map +1 -1
- package/dist/legacy/livePreview/onPageTraversal.js +1 -1
- package/dist/legacy/livePreview/onPageTraversal.js.map +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +37 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs.map +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.d.cts +19 -0
- package/dist/legacy/preview/contentstack-live-preview-HOC.d.ts +19 -0
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +39 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js.map +1 -1
- package/dist/legacy/types/global.d.cjs +19 -0
- package/dist/legacy/types/global.d.cjs.map +1 -0
- package/dist/legacy/types/global.d.d.cts +8 -0
- package/dist/legacy/types/global.d.d.ts +8 -0
- package/dist/legacy/types/global.d.js +1 -0
- package/dist/legacy/types/global.d.js.map +1 -0
- package/dist/legacy/types/types.cjs.map +1 -1
- package/dist/legacy/types/types.d.cts +20 -1
- package/dist/legacy/types/types.d.ts +20 -1
- package/dist/legacy/types/types.js.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +32 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.js +32 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useCollab.cjs +8 -8
- package/dist/legacy/visualBuilder/eventManager/useCollab.cjs.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useCollab.js +8 -8
- package/dist/legacy/visualBuilder/eventManager/useCollab.js.map +1 -1
- package/dist/legacy/visualBuilder/index.cjs +8 -3
- package/dist/legacy/visualBuilder/index.cjs.map +1 -1
- package/dist/legacy/visualBuilder/index.js +8 -3
- package/dist/legacy/visualBuilder/index.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +26 -0
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.js +26 -0
- package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +29 -0
- package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseHover.js +29 -0
- package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs +19 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.d.cts +8 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.d.ts +8 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js +9 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +8 -0
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +8 -0
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
- package/dist/legacy/{utils/handlePageTraversal.cjs → visualBuilder/utils/getWholeFieldElement.cjs} +15 -24
- package/dist/legacy/visualBuilder/utils/getWholeFieldElement.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/getWholeFieldElement.d.cts +4 -0
- package/dist/legacy/visualBuilder/utils/getWholeFieldElement.d.ts +4 -0
- package/dist/legacy/visualBuilder/utils/getWholeFieldElement.js +14 -0
- package/dist/legacy/visualBuilder/utils/getWholeFieldElement.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +2 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +2 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.cjs +38 -0
- package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.d.cts +7 -0
- package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.d.ts +7 -0
- package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.js +15 -0
- package/dist/legacy/visualBuilder/utils/isCustomFieldMultipleInstance.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/resolvePageContext.cjs +49 -0
- package/dist/legacy/visualBuilder/utils/resolvePageContext.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/resolvePageContext.d.cts +6 -0
- package/dist/legacy/visualBuilder/utils/resolvePageContext.d.ts +6 -0
- package/dist/legacy/visualBuilder/utils/resolvePageContext.js +16 -0
- package/dist/legacy/visualBuilder/utils/resolvePageContext.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs +12 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +1 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +1 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.js +12 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
- package/dist/modern/common/inIframe.cjs +9 -0
- package/dist/modern/common/inIframe.cjs.map +1 -1
- package/dist/modern/common/inIframe.d.cts +2 -1
- package/dist/modern/common/inIframe.d.ts +2 -1
- package/dist/modern/common/inIframe.js +8 -0
- package/dist/modern/common/inIframe.js.map +1 -1
- package/dist/modern/configManager/config.default.cjs +8 -1
- package/dist/modern/configManager/config.default.cjs.map +1 -1
- package/dist/modern/configManager/config.default.js +8 -1
- package/dist/modern/configManager/config.default.js.map +1 -1
- package/dist/modern/configManager/configManager.cjs +24 -5
- package/dist/modern/configManager/configManager.cjs.map +1 -1
- package/dist/modern/configManager/configManager.d.cts +11 -1
- package/dist/modern/configManager/configManager.d.ts +11 -1
- package/dist/modern/configManager/configManager.js +23 -5
- package/dist/modern/configManager/configManager.js.map +1 -1
- package/dist/modern/configManager/handleUserConfig.cjs +3 -0
- package/dist/modern/configManager/handleUserConfig.cjs.map +1 -1
- package/dist/modern/configManager/handleUserConfig.js +3 -0
- package/dist/modern/configManager/handleUserConfig.js.map +1 -1
- package/dist/modern/configManager/index.d.cts +1 -1
- package/dist/modern/configManager/index.d.ts +1 -1
- package/dist/modern/cslp/cslpdata.cjs +25 -12
- package/dist/modern/cslp/cslpdata.cjs.map +1 -1
- package/dist/modern/cslp/cslpdata.d.cts +0 -5
- package/dist/modern/cslp/cslpdata.d.ts +0 -5
- package/dist/modern/cslp/cslpdata.js +25 -12
- package/dist/modern/cslp/cslpdata.js.map +1 -1
- package/dist/modern/light-sdk.cjs +1 -1
- package/dist/modern/light-sdk.js +1 -1
- package/dist/modern/livePreview/editButton/editButton.cjs +19 -0
- package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
- package/dist/modern/livePreview/editButton/editButton.d.cts +1 -0
- package/dist/modern/livePreview/editButton/editButton.d.ts +1 -0
- package/dist/modern/livePreview/editButton/editButton.js +19 -0
- package/dist/modern/livePreview/editButton/editButton.js.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +13 -10
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +15 -12
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
- package/dist/modern/livePreview/live-preview.cjs +1 -0
- package/dist/modern/livePreview/live-preview.cjs.map +1 -1
- package/dist/modern/livePreview/live-preview.js +1 -0
- package/dist/modern/livePreview/live-preview.js.map +1 -1
- package/dist/modern/livePreview/onPageTraversal.cjs +1 -1
- package/dist/modern/livePreview/onPageTraversal.cjs.map +1 -1
- package/dist/modern/livePreview/onPageTraversal.js +1 -1
- package/dist/modern/livePreview/onPageTraversal.js.map +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs +36 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs.map +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.d.cts +19 -0
- package/dist/modern/preview/contentstack-live-preview-HOC.d.ts +19 -0
- package/dist/modern/preview/contentstack-live-preview-HOC.js +38 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js.map +1 -1
- package/dist/modern/types/global.d.cjs +19 -0
- package/dist/modern/types/global.d.cjs.map +1 -0
- package/dist/modern/types/global.d.d.cts +8 -0
- package/dist/modern/types/global.d.d.ts +8 -0
- package/dist/modern/types/global.d.js +1 -0
- package/dist/modern/types/global.d.js.map +1 -0
- package/dist/modern/types/types.cjs.map +1 -1
- package/dist/modern/types/types.d.cts +20 -1
- package/dist/modern/types/types.d.ts +20 -1
- package/dist/modern/types/types.js.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs +32 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.js +32 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useCollab.cjs +5 -5
- package/dist/modern/visualBuilder/eventManager/useCollab.cjs.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useCollab.js +5 -5
- package/dist/modern/visualBuilder/eventManager/useCollab.js.map +1 -1
- package/dist/modern/visualBuilder/index.cjs +8 -3
- package/dist/modern/visualBuilder/index.cjs.map +1 -1
- package/dist/modern/visualBuilder/index.js +8 -3
- package/dist/modern/visualBuilder/index.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs +26 -0
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.js +26 -0
- package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseHover.cjs +29 -0
- package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseHover.js +29 -0
- package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs +19 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.d.cts +8 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.d.ts +8 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.js +9 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +8 -0
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +8 -0
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
- package/dist/modern/{utils/handlePageTraversal.cjs → visualBuilder/utils/getWholeFieldElement.cjs} +15 -24
- package/dist/modern/visualBuilder/utils/getWholeFieldElement.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/getWholeFieldElement.d.cts +4 -0
- package/dist/modern/visualBuilder/utils/getWholeFieldElement.d.ts +4 -0
- package/dist/modern/visualBuilder/utils/getWholeFieldElement.js +14 -0
- package/dist/modern/visualBuilder/utils/getWholeFieldElement.js.map +1 -0
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +2 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js +2 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.cjs +37 -0
- package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.d.cts +7 -0
- package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.d.ts +7 -0
- package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.js +14 -0
- package/dist/modern/visualBuilder/utils/isCustomFieldMultipleInstance.js.map +1 -0
- package/dist/modern/visualBuilder/utils/resolvePageContext.cjs +48 -0
- package/dist/modern/visualBuilder/utils/resolvePageContext.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/resolvePageContext.d.cts +6 -0
- package/dist/modern/visualBuilder/utils/resolvePageContext.d.ts +6 -0
- package/dist/modern/visualBuilder/utils/resolvePageContext.js +15 -0
- package/dist/modern/visualBuilder/utils/resolvePageContext.js.map +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.js +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.cjs +12 -0
- package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.d.cts +1 -0
- package/dist/modern/visualBuilder/visualBuilder.style.d.ts +1 -0
- package/dist/modern/visualBuilder/visualBuilder.style.js +12 -0
- package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
- package/package.json +1 -1
- package/dist/legacy/utils/handlePageTraversal.cjs.map +0 -1
- package/dist/legacy/utils/handlePageTraversal.d.cts +0 -3
- package/dist/legacy/utils/handlePageTraversal.d.ts +0 -3
- package/dist/legacy/utils/handlePageTraversal.js +0 -24
- package/dist/legacy/utils/handlePageTraversal.js.map +0 -1
- package/dist/modern/utils/handlePageTraversal.cjs.map +0 -1
- package/dist/modern/utils/handlePageTraversal.d.cts +0 -3
- package/dist/modern/utils/handlePageTraversal.d.ts +0 -3
- package/dist/modern/utils/handlePageTraversal.js +0 -24
- package/dist/modern/utils/handlePageTraversal.js.map +0 -1
|
@@ -22,6 +22,7 @@ var configManager_exports = {};
|
|
|
22
22
|
__export(configManager_exports, {
|
|
23
23
|
default: () => configManager_default,
|
|
24
24
|
setConfigFromParams: () => setConfigFromParams,
|
|
25
|
+
syncToStackSdk: () => syncToStackSdk,
|
|
25
26
|
updateConfigFromUrl: () => updateConfigFromUrl
|
|
26
27
|
});
|
|
27
28
|
module.exports = __toCommonJS(configManager_exports);
|
|
@@ -59,25 +60,43 @@ function setConfigFromParams(params = {}) {
|
|
|
59
60
|
const live_preview = urlParams.get("live_preview");
|
|
60
61
|
const content_type_uid = urlParams.get("content_type_uid");
|
|
61
62
|
const entry_uid = urlParams.get("entry_uid");
|
|
62
|
-
const stackSdkLivePreview = Config.get().stackSdk.live_preview;
|
|
63
63
|
if (live_preview) {
|
|
64
64
|
Config.set("hash", live_preview);
|
|
65
|
-
stackSdkLivePreview.hash = live_preview;
|
|
66
|
-
stackSdkLivePreview.live_preview = live_preview;
|
|
67
65
|
}
|
|
68
66
|
if (content_type_uid) {
|
|
69
67
|
Config.set("stackDetails.contentTypeUid", content_type_uid);
|
|
70
|
-
stackSdkLivePreview.content_type_uid = content_type_uid;
|
|
71
68
|
}
|
|
72
69
|
if (entry_uid) {
|
|
73
70
|
Config.set("stackDetails.entryUid", entry_uid);
|
|
74
|
-
|
|
71
|
+
}
|
|
72
|
+
syncToStackSdk({
|
|
73
|
+
hash: live_preview,
|
|
74
|
+
contentTypeUid: content_type_uid,
|
|
75
|
+
entryUid: entry_uid
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function syncToStackSdk({
|
|
79
|
+
hash,
|
|
80
|
+
contentTypeUid,
|
|
81
|
+
entryUid
|
|
82
|
+
}) {
|
|
83
|
+
const stackSdkLivePreview = Config.get().stackSdk.live_preview;
|
|
84
|
+
if (hash) {
|
|
85
|
+
stackSdkLivePreview.hash = hash;
|
|
86
|
+
stackSdkLivePreview.live_preview = hash;
|
|
87
|
+
}
|
|
88
|
+
if (contentTypeUid) {
|
|
89
|
+
stackSdkLivePreview.content_type_uid = contentTypeUid;
|
|
90
|
+
}
|
|
91
|
+
if (entryUid) {
|
|
92
|
+
stackSdkLivePreview.entry_uid = entryUid;
|
|
75
93
|
}
|
|
76
94
|
Config.set("stackSdk.live_preview", stackSdkLivePreview);
|
|
77
95
|
}
|
|
78
96
|
// Annotate the CommonJS export names for ESM import in node:
|
|
79
97
|
0 && (module.exports = {
|
|
80
98
|
setConfigFromParams,
|
|
99
|
+
syncToStackSdk,
|
|
81
100
|
updateConfigFromUrl
|
|
82
101
|
});
|
|
83
102
|
//# sourceMappingURL=configManager.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/configManager/configManager.ts"],"sourcesContent":["import { DeepSignal, deepSignal } from \"deepsignal\";\nimport type { IConfig, IInitData } from \"../types/types\";\nimport { getDefaultConfig, getUserInitData } from \"./config.default\";\nimport { handleInitData } from \"./handleUserConfig\";\nimport { has as lodashHas, set as lodashSet } from \"lodash-es\";\n\nclass Config {\n static config: {\n state: DeepSignal<IConfig>;\n } = {\n state: deepSignal(getDefaultConfig()),\n };\n\n static replace(userInput: Partial<IInitData> = getUserInitData()): void {\n handleInitData(userInput);\n }\n\n static set(key: string, value: any): void {\n if (!lodashHas(this.config.state, key)) {\n throw new Error(`Invalid key: ${key}`);\n }\n lodashSet(this.config.state, key, value);\n }\n\n static get(): DeepSignal<IConfig> {\n return this.config.state;\n }\n\n static reset(): void {\n lodashSet(this.config, \"state\", getDefaultConfig());\n }\n}\n\nexport default Config;\n\n/**\n * Updates the configuration from the URL parameters.\n * It will receive live_preview containing the hash, content_type_uid and entry_uid.\n */\n\nexport function updateConfigFromUrl(): void {\n const searchParams = new URLSearchParams(window.location.search);\n setConfigFromParams(searchParams.toString());\n}\n\n/**\n * Sets the live preview hash, content_type_uid and entry_uid\n * from the query param to config.\n *\n * @param params query param in an object form, query string.\n *\n * @example\n * ```js\n * setConfigFromParams({\n * live_preview: \"hash\",\n * content_type_uid: \"content_type_uid\",\n * entry_uid: \"entry_uid\",\n * });\n * ```\n *\n * @example\n * ```js\n * setConfigFromParams(\"?live_preview=hash&content_type_uid=content_type_uid&entry_uid=entry_uid\");\n * ```\n * Basically anything that can be passed to `URLSearchParams` constructor.\n */\n\nexport function setConfigFromParams(\n params: ConstructorParameters<typeof URLSearchParams>[0] = {}\n): void {\n const urlParams = new URLSearchParams(params);\n const live_preview = urlParams.get(\"live_preview\");\n const content_type_uid = urlParams.get(\"content_type_uid\");\n const entry_uid = urlParams.get(\"entry_uid\");\n\n
|
|
1
|
+
{"version":3,"sources":["../../../src/configManager/configManager.ts"],"sourcesContent":["import { DeepSignal, deepSignal } from \"deepsignal\";\nimport type { IConfig, IInitData } from \"../types/types\";\nimport { getDefaultConfig, getUserInitData } from \"./config.default\";\nimport { handleInitData } from \"./handleUserConfig\";\nimport { has as lodashHas, set as lodashSet } from \"lodash-es\";\n\nclass Config {\n static config: {\n state: DeepSignal<IConfig>;\n } = {\n state: deepSignal(getDefaultConfig()),\n };\n\n static replace(userInput: Partial<IInitData> = getUserInitData()): void {\n handleInitData(userInput);\n }\n\n static set(key: string, value: any): void {\n if (!lodashHas(this.config.state, key)) {\n throw new Error(`Invalid key: ${key}`);\n }\n lodashSet(this.config.state, key, value);\n }\n\n static get(): DeepSignal<IConfig> {\n return this.config.state;\n }\n\n static reset(): void {\n lodashSet(this.config, \"state\", getDefaultConfig());\n }\n}\n\nexport default Config;\n\n/**\n * Updates the configuration from the URL parameters.\n * It will receive live_preview containing the hash, content_type_uid and entry_uid.\n */\n\nexport function updateConfigFromUrl(): void {\n const searchParams = new URLSearchParams(window.location.search);\n setConfigFromParams(searchParams.toString());\n}\n\n/**\n * Sets the live preview hash, content_type_uid and entry_uid\n * from the query param to config.\n *\n * @param params query param in an object form, query string.\n *\n * @example\n * ```js\n * setConfigFromParams({\n * live_preview: \"hash\",\n * content_type_uid: \"content_type_uid\",\n * entry_uid: \"entry_uid\",\n * });\n * ```\n *\n * @example\n * ```js\n * setConfigFromParams(\"?live_preview=hash&content_type_uid=content_type_uid&entry_uid=entry_uid\");\n * ```\n * Basically anything that can be passed to `URLSearchParams` constructor.\n */\n\nexport function setConfigFromParams(\n params: ConstructorParameters<typeof URLSearchParams>[0] = {}\n): void {\n const urlParams = new URLSearchParams(params);\n const live_preview = urlParams.get(\"live_preview\");\n const content_type_uid = urlParams.get(\"content_type_uid\");\n const entry_uid = urlParams.get(\"entry_uid\");\n\n if (live_preview) {\n Config.set(\"hash\", live_preview);\n }\n\n if (content_type_uid) {\n Config.set(\"stackDetails.contentTypeUid\", content_type_uid);\n }\n\n if (entry_uid) {\n Config.set(\"stackDetails.entryUid\", entry_uid);\n }\n\n syncToStackSdk({\n hash: live_preview,\n contentTypeUid: content_type_uid,\n entryUid: entry_uid,\n });\n}\n\n/**\n * Syncs hash, contentTypeUid, and entryUid into the user's stackSdk.live_preview object.\n * Auto-effects via deepsignal were ruled out because Config.reset() replaces the deepSignal\n * instance, which would blind any bound effect. Explicit sync is the safe alternative.\n */\nexport function syncToStackSdk({\n hash,\n contentTypeUid,\n entryUid,\n}: {\n hash?: string | null;\n contentTypeUid?: string | null;\n entryUid?: string | null;\n}): void {\n const stackSdkLivePreview = Config.get().stackSdk.live_preview;\n\n if (hash) {\n stackSdkLivePreview.hash = hash;\n stackSdkLivePreview.live_preview = hash;\n }\n if (contentTypeUid) {\n stackSdkLivePreview.content_type_uid = contentTypeUid;\n }\n if (entryUid) {\n stackSdkLivePreview.entry_uid = entryUid;\n }\n\n Config.set(\"stackSdk.live_preview\", stackSdkLivePreview);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAuC;AAEvC,oBAAkD;AAClD,8BAA+B;AAC/B,uBAAmD;AAEnD,IAAM,SAAN,MAAa;AAAA,EAOT,OAAO,QAAQ,gBAAgC,+BAAgB,GAAS;AACpE,gDAAe,SAAS;AAAA,EAC5B;AAAA,EAEA,OAAO,IAAI,KAAa,OAAkB;AACtC,QAAI,KAAC,iBAAAA,KAAU,KAAK,OAAO,OAAO,GAAG,GAAG;AACpC,YAAM,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAAA,IACzC;AACA,yBAAAC,KAAU,KAAK,OAAO,OAAO,KAAK,KAAK;AAAA,EAC3C;AAAA,EAEA,OAAO,MAA2B;AAC9B,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,OAAO,QAAc;AACjB,yBAAAA,KAAU,KAAK,QAAQ,aAAS,gCAAiB,CAAC;AAAA,EACtD;AACJ;AAzBM,OACK,SAEH;AAAA,EACA,WAAO,kCAAW,gCAAiB,CAAC;AACxC;AAsBJ,IAAO,wBAAQ;AAOR,SAAS,sBAA4B;AACxC,QAAM,eAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC/D,sBAAoB,aAAa,SAAS,CAAC;AAC/C;AAwBO,SAAS,oBACZ,SAA2D,CAAC,GACxD;AACJ,QAAM,YAAY,IAAI,gBAAgB,MAAM;AAC5C,QAAM,eAAe,UAAU,IAAI,cAAc;AACjD,QAAM,mBAAmB,UAAU,IAAI,kBAAkB;AACzD,QAAM,YAAY,UAAU,IAAI,WAAW;AAE3C,MAAI,cAAc;AACd,WAAO,IAAI,QAAQ,YAAY;AAAA,EACnC;AAEA,MAAI,kBAAkB;AAClB,WAAO,IAAI,+BAA+B,gBAAgB;AAAA,EAC9D;AAEA,MAAI,WAAW;AACX,WAAO,IAAI,yBAAyB,SAAS;AAAA,EACjD;AAEA,iBAAe;AAAA,IACX,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACd,CAAC;AACL;AAOO,SAAS,eAAe;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACJ,GAIS;AACL,QAAM,sBAAsB,OAAO,IAAI,EAAE,SAAS;AAElD,MAAI,MAAM;AACN,wBAAoB,OAAO;AAC3B,wBAAoB,eAAe;AAAA,EACvC;AACA,MAAI,gBAAgB;AAChB,wBAAoB,mBAAmB;AAAA,EAC3C;AACA,MAAI,UAAU;AACV,wBAAoB,YAAY;AAAA,EACpC;AAEA,SAAO,IAAI,yBAAyB,mBAAmB;AAC3D;","names":["lodashHas","lodashSet"]}
|
|
@@ -39,5 +39,15 @@ declare function updateConfigFromUrl(): void;
|
|
|
39
39
|
* Basically anything that can be passed to `URLSearchParams` constructor.
|
|
40
40
|
*/
|
|
41
41
|
declare function setConfigFromParams(params?: ConstructorParameters<typeof URLSearchParams>[0]): void;
|
|
42
|
+
/**
|
|
43
|
+
* Syncs hash, contentTypeUid, and entryUid into the user's stackSdk.live_preview object.
|
|
44
|
+
* Auto-effects via deepsignal were ruled out because Config.reset() replaces the deepSignal
|
|
45
|
+
* instance, which would blind any bound effect. Explicit sync is the safe alternative.
|
|
46
|
+
*/
|
|
47
|
+
declare function syncToStackSdk({ hash, contentTypeUid, entryUid, }: {
|
|
48
|
+
hash?: string | null;
|
|
49
|
+
contentTypeUid?: string | null;
|
|
50
|
+
entryUid?: string | null;
|
|
51
|
+
}): void;
|
|
42
52
|
|
|
43
|
-
export { Config as default, setConfigFromParams, updateConfigFromUrl };
|
|
53
|
+
export { Config as default, setConfigFromParams, syncToStackSdk, updateConfigFromUrl };
|
|
@@ -39,5 +39,15 @@ declare function updateConfigFromUrl(): void;
|
|
|
39
39
|
* Basically anything that can be passed to `URLSearchParams` constructor.
|
|
40
40
|
*/
|
|
41
41
|
declare function setConfigFromParams(params?: ConstructorParameters<typeof URLSearchParams>[0]): void;
|
|
42
|
+
/**
|
|
43
|
+
* Syncs hash, contentTypeUid, and entryUid into the user's stackSdk.live_preview object.
|
|
44
|
+
* Auto-effects via deepsignal were ruled out because Config.reset() replaces the deepSignal
|
|
45
|
+
* instance, which would blind any bound effect. Explicit sync is the safe alternative.
|
|
46
|
+
*/
|
|
47
|
+
declare function syncToStackSdk({ hash, contentTypeUid, entryUid, }: {
|
|
48
|
+
hash?: string | null;
|
|
49
|
+
contentTypeUid?: string | null;
|
|
50
|
+
entryUid?: string | null;
|
|
51
|
+
}): void;
|
|
42
52
|
|
|
43
|
-
export { Config as default, setConfigFromParams, updateConfigFromUrl };
|
|
53
|
+
export { Config as default, setConfigFromParams, syncToStackSdk, updateConfigFromUrl };
|
|
@@ -35,25 +35,43 @@ function setConfigFromParams(params = {}) {
|
|
|
35
35
|
const live_preview = urlParams.get("live_preview");
|
|
36
36
|
const content_type_uid = urlParams.get("content_type_uid");
|
|
37
37
|
const entry_uid = urlParams.get("entry_uid");
|
|
38
|
-
const stackSdkLivePreview = Config.get().stackSdk.live_preview;
|
|
39
38
|
if (live_preview) {
|
|
40
39
|
Config.set("hash", live_preview);
|
|
41
|
-
stackSdkLivePreview.hash = live_preview;
|
|
42
|
-
stackSdkLivePreview.live_preview = live_preview;
|
|
43
40
|
}
|
|
44
41
|
if (content_type_uid) {
|
|
45
42
|
Config.set("stackDetails.contentTypeUid", content_type_uid);
|
|
46
|
-
stackSdkLivePreview.content_type_uid = content_type_uid;
|
|
47
43
|
}
|
|
48
44
|
if (entry_uid) {
|
|
49
45
|
Config.set("stackDetails.entryUid", entry_uid);
|
|
50
|
-
|
|
46
|
+
}
|
|
47
|
+
syncToStackSdk({
|
|
48
|
+
hash: live_preview,
|
|
49
|
+
contentTypeUid: content_type_uid,
|
|
50
|
+
entryUid: entry_uid
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function syncToStackSdk({
|
|
54
|
+
hash,
|
|
55
|
+
contentTypeUid,
|
|
56
|
+
entryUid
|
|
57
|
+
}) {
|
|
58
|
+
const stackSdkLivePreview = Config.get().stackSdk.live_preview;
|
|
59
|
+
if (hash) {
|
|
60
|
+
stackSdkLivePreview.hash = hash;
|
|
61
|
+
stackSdkLivePreview.live_preview = hash;
|
|
62
|
+
}
|
|
63
|
+
if (contentTypeUid) {
|
|
64
|
+
stackSdkLivePreview.content_type_uid = contentTypeUid;
|
|
65
|
+
}
|
|
66
|
+
if (entryUid) {
|
|
67
|
+
stackSdkLivePreview.entry_uid = entryUid;
|
|
51
68
|
}
|
|
52
69
|
Config.set("stackSdk.live_preview", stackSdkLivePreview);
|
|
53
70
|
}
|
|
54
71
|
export {
|
|
55
72
|
configManager_default as default,
|
|
56
73
|
setConfigFromParams,
|
|
74
|
+
syncToStackSdk,
|
|
57
75
|
updateConfigFromUrl
|
|
58
76
|
};
|
|
59
77
|
//# sourceMappingURL=configManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/configManager/configManager.ts"],"sourcesContent":["import { DeepSignal, deepSignal } from \"deepsignal\";\nimport type { IConfig, IInitData } from \"../types/types\";\nimport { getDefaultConfig, getUserInitData } from \"./config.default\";\nimport { handleInitData } from \"./handleUserConfig\";\nimport { has as lodashHas, set as lodashSet } from \"lodash-es\";\n\nclass Config {\n static config: {\n state: DeepSignal<IConfig>;\n } = {\n state: deepSignal(getDefaultConfig()),\n };\n\n static replace(userInput: Partial<IInitData> = getUserInitData()): void {\n handleInitData(userInput);\n }\n\n static set(key: string, value: any): void {\n if (!lodashHas(this.config.state, key)) {\n throw new Error(`Invalid key: ${key}`);\n }\n lodashSet(this.config.state, key, value);\n }\n\n static get(): DeepSignal<IConfig> {\n return this.config.state;\n }\n\n static reset(): void {\n lodashSet(this.config, \"state\", getDefaultConfig());\n }\n}\n\nexport default Config;\n\n/**\n * Updates the configuration from the URL parameters.\n * It will receive live_preview containing the hash, content_type_uid and entry_uid.\n */\n\nexport function updateConfigFromUrl(): void {\n const searchParams = new URLSearchParams(window.location.search);\n setConfigFromParams(searchParams.toString());\n}\n\n/**\n * Sets the live preview hash, content_type_uid and entry_uid\n * from the query param to config.\n *\n * @param params query param in an object form, query string.\n *\n * @example\n * ```js\n * setConfigFromParams({\n * live_preview: \"hash\",\n * content_type_uid: \"content_type_uid\",\n * entry_uid: \"entry_uid\",\n * });\n * ```\n *\n * @example\n * ```js\n * setConfigFromParams(\"?live_preview=hash&content_type_uid=content_type_uid&entry_uid=entry_uid\");\n * ```\n * Basically anything that can be passed to `URLSearchParams` constructor.\n */\n\nexport function setConfigFromParams(\n params: ConstructorParameters<typeof URLSearchParams>[0] = {}\n): void {\n const urlParams = new URLSearchParams(params);\n const live_preview = urlParams.get(\"live_preview\");\n const content_type_uid = urlParams.get(\"content_type_uid\");\n const entry_uid = urlParams.get(\"entry_uid\");\n\n
|
|
1
|
+
{"version":3,"sources":["../../../src/configManager/configManager.ts"],"sourcesContent":["import { DeepSignal, deepSignal } from \"deepsignal\";\nimport type { IConfig, IInitData } from \"../types/types\";\nimport { getDefaultConfig, getUserInitData } from \"./config.default\";\nimport { handleInitData } from \"./handleUserConfig\";\nimport { has as lodashHas, set as lodashSet } from \"lodash-es\";\n\nclass Config {\n static config: {\n state: DeepSignal<IConfig>;\n } = {\n state: deepSignal(getDefaultConfig()),\n };\n\n static replace(userInput: Partial<IInitData> = getUserInitData()): void {\n handleInitData(userInput);\n }\n\n static set(key: string, value: any): void {\n if (!lodashHas(this.config.state, key)) {\n throw new Error(`Invalid key: ${key}`);\n }\n lodashSet(this.config.state, key, value);\n }\n\n static get(): DeepSignal<IConfig> {\n return this.config.state;\n }\n\n static reset(): void {\n lodashSet(this.config, \"state\", getDefaultConfig());\n }\n}\n\nexport default Config;\n\n/**\n * Updates the configuration from the URL parameters.\n * It will receive live_preview containing the hash, content_type_uid and entry_uid.\n */\n\nexport function updateConfigFromUrl(): void {\n const searchParams = new URLSearchParams(window.location.search);\n setConfigFromParams(searchParams.toString());\n}\n\n/**\n * Sets the live preview hash, content_type_uid and entry_uid\n * from the query param to config.\n *\n * @param params query param in an object form, query string.\n *\n * @example\n * ```js\n * setConfigFromParams({\n * live_preview: \"hash\",\n * content_type_uid: \"content_type_uid\",\n * entry_uid: \"entry_uid\",\n * });\n * ```\n *\n * @example\n * ```js\n * setConfigFromParams(\"?live_preview=hash&content_type_uid=content_type_uid&entry_uid=entry_uid\");\n * ```\n * Basically anything that can be passed to `URLSearchParams` constructor.\n */\n\nexport function setConfigFromParams(\n params: ConstructorParameters<typeof URLSearchParams>[0] = {}\n): void {\n const urlParams = new URLSearchParams(params);\n const live_preview = urlParams.get(\"live_preview\");\n const content_type_uid = urlParams.get(\"content_type_uid\");\n const entry_uid = urlParams.get(\"entry_uid\");\n\n if (live_preview) {\n Config.set(\"hash\", live_preview);\n }\n\n if (content_type_uid) {\n Config.set(\"stackDetails.contentTypeUid\", content_type_uid);\n }\n\n if (entry_uid) {\n Config.set(\"stackDetails.entryUid\", entry_uid);\n }\n\n syncToStackSdk({\n hash: live_preview,\n contentTypeUid: content_type_uid,\n entryUid: entry_uid,\n });\n}\n\n/**\n * Syncs hash, contentTypeUid, and entryUid into the user's stackSdk.live_preview object.\n * Auto-effects via deepsignal were ruled out because Config.reset() replaces the deepSignal\n * instance, which would blind any bound effect. Explicit sync is the safe alternative.\n */\nexport function syncToStackSdk({\n hash,\n contentTypeUid,\n entryUid,\n}: {\n hash?: string | null;\n contentTypeUid?: string | null;\n entryUid?: string | null;\n}): void {\n const stackSdkLivePreview = Config.get().stackSdk.live_preview;\n\n if (hash) {\n stackSdkLivePreview.hash = hash;\n stackSdkLivePreview.live_preview = hash;\n }\n if (contentTypeUid) {\n stackSdkLivePreview.content_type_uid = contentTypeUid;\n }\n if (entryUid) {\n stackSdkLivePreview.entry_uid = entryUid;\n }\n\n Config.set(\"stackSdk.live_preview\", stackSdkLivePreview);\n}\n"],"mappings":";;;AAAA,SAAqB,kBAAkB;AAEvC,SAAS,kBAAkB,uBAAuB;AAClD,SAAS,sBAAsB;AAC/B,SAAS,OAAO,WAAW,OAAO,iBAAiB;AAEnD,IAAM,SAAN,MAAa;AAAA,EAOT,OAAO,QAAQ,YAAgC,gBAAgB,GAAS;AACpE,mBAAe,SAAS;AAAA,EAC5B;AAAA,EAEA,OAAO,IAAI,KAAa,OAAkB;AACtC,QAAI,CAAC,UAAU,KAAK,OAAO,OAAO,GAAG,GAAG;AACpC,YAAM,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAAA,IACzC;AACA,cAAU,KAAK,OAAO,OAAO,KAAK,KAAK;AAAA,EAC3C;AAAA,EAEA,OAAO,MAA2B;AAC9B,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,OAAO,QAAc;AACjB,cAAU,KAAK,QAAQ,SAAS,iBAAiB,CAAC;AAAA,EACtD;AACJ;AAzBM,OACK,SAEH;AAAA,EACA,OAAO,WAAW,iBAAiB,CAAC;AACxC;AAsBJ,IAAO,wBAAQ;AAOR,SAAS,sBAA4B;AACxC,QAAM,eAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC/D,sBAAoB,aAAa,SAAS,CAAC;AAC/C;AAwBO,SAAS,oBACZ,SAA2D,CAAC,GACxD;AACJ,QAAM,YAAY,IAAI,gBAAgB,MAAM;AAC5C,QAAM,eAAe,UAAU,IAAI,cAAc;AACjD,QAAM,mBAAmB,UAAU,IAAI,kBAAkB;AACzD,QAAM,YAAY,UAAU,IAAI,WAAW;AAE3C,MAAI,cAAc;AACd,WAAO,IAAI,QAAQ,YAAY;AAAA,EACnC;AAEA,MAAI,kBAAkB;AAClB,WAAO,IAAI,+BAA+B,gBAAgB;AAAA,EAC9D;AAEA,MAAI,WAAW;AACX,WAAO,IAAI,yBAAyB,SAAS;AAAA,EACjD;AAEA,iBAAe;AAAA,IACX,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACd,CAAC;AACL;AAOO,SAAS,eAAe;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACJ,GAIS;AACL,QAAM,sBAAsB,OAAO,IAAI,EAAE,SAAS;AAElD,MAAI,MAAM;AACN,wBAAoB,OAAO;AAC3B,wBAAoB,eAAe;AAAA,EACvC;AACA,MAAI,gBAAgB;AAChB,wBAAoB,mBAAmB;AAAA,EAC3C;AACA,MAAI,UAAU;AACV,wBAAoB,YAAY;AAAA,EACpC;AAEA,SAAO,IAAI,yBAAyB,mBAAmB;AAC3D;","names":[]}
|
|
@@ -99,6 +99,9 @@ var handleInitData = (initData) => {
|
|
|
99
99
|
enable: initData.editInVisualBuilderButton?.enable ?? stackSdk.live_preview?.editInVisualBuilderButton?.enable ?? config.editInVisualBuilderButton.enable,
|
|
100
100
|
position: initData.editInVisualBuilderButton?.position ?? stackSdk.live_preview?.position ?? config.editInVisualBuilderButton.position ?? "bottom-right"
|
|
101
101
|
});
|
|
102
|
+
import_configManager.default.set("overlayPropagation", {
|
|
103
|
+
enable: initData.overlayPropagation?.enable ?? stackSdk.live_preview?.overlayPropagation?.enable ?? config.overlayPropagation.enable
|
|
104
|
+
});
|
|
102
105
|
import_configManager.default.set(
|
|
103
106
|
"enableLivePreviewOutsideIframe",
|
|
104
107
|
initData.enableLivePreviewOutsideIframe ?? config.enableLivePreviewOutsideIframe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/configManager/handleUserConfig.ts"],"sourcesContent":["import {\n type IClientUrlParams,\n type IInitData,\n ILivePreviewModeConfig,\n type IStackSdk,\n} from \"../types/types\";\nimport Config from \"./configManager\";\n\nconst handleClientUrlParams = (userConfig: Partial<IClientUrlParams>): void => {\n const config = Config.get();\n const clientUrlParams = config.clientUrlParams;\n\n Config.set(\n \"clientUrlParams.host\",\n userConfig.host ?? config.clientUrlParams.host\n );\n\n Config.set(\n \"clientUrlParams.protocol\",\n userConfig.protocol ?? clientUrlParams.protocol\n );\n Config.set(\"clientUrlParams.port\", userConfig.port ?? clientUrlParams.port);\n\n if (userConfig.protocol !== undefined && userConfig.port === undefined) {\n switch (userConfig.protocol) {\n case \"http\": {\n Config.set(\"clientUrlParams.port\", 80);\n break;\n }\n case \"https\": {\n Config.set(\"clientUrlParams.port\", 443);\n break;\n }\n }\n }\n\n let host = config.clientUrlParams.host;\n\n // build url\n if (typeof host == \"string\" && host.endsWith(\"/\")) {\n host = host.slice(0, -1);\n Config.set(\"clientUrlParams.host\", host);\n }\n\n const url = `${clientUrlParams.protocol}://${config.clientUrlParams.host}:${clientUrlParams.port}`;\n\n Config.set(\"clientUrlParams.url\", url);\n};\n\n// TODO: add documentation mentioning that you cannot pass stack sdk in the init data\n\nexport const handleInitData = (initData: Partial<IInitData>): void => {\n const config = Config.get();\n const stackSdk = initData.stackSdk || config.stackSdk;\n\n Config.set(\n \"enable\",\n initData.enable ?? stackSdk.live_preview?.enable ?? config.enable\n );\n\n Config.set(\n \"ssr\",\n stackSdk.live_preview?.ssr ??\n initData.ssr ??\n (typeof initData.stackSdk === \"object\" ? false : true) ??\n true\n );\n\n Config.set(\n \"runScriptsOnUpdate\",\n initData.runScriptsOnUpdate ??\n stackSdk.live_preview?.runScriptsOnUpdate ??\n config.runScriptsOnUpdate\n );\n\n Config.set(\"stackSdk\", initData.stackSdk ?? config.stackSdk);\n\n Config.set(\n \"cleanCslpOnProduction\",\n initData.cleanCslpOnProduction ??\n stackSdk.live_preview?.cleanCslpOnProduction ??\n config.cleanCslpOnProduction\n );\n\n Config.set(\"editButton\", {\n enable:\n initData.editButton?.enable ??\n stackSdk.live_preview?.editButton?.enable ??\n config.editButton.enable,\n // added extra check if exclude data passed by user is array or not\n exclude:\n Array.isArray(initData.editButton?.exclude) &&\n initData.editButton?.exclude\n ? initData.editButton?.exclude\n : Array.isArray(stackSdk.live_preview?.exclude) &&\n stackSdk.live_preview?.exclude\n ? stackSdk.live_preview?.exclude\n : (config.editButton.exclude ?? []),\n position:\n initData.editButton?.position ??\n stackSdk.live_preview?.position ??\n config.editButton.position ??\n \"top\",\n\n includeByQueryParameter:\n initData.editButton?.includeByQueryParameter ??\n stackSdk.live_preview?.includeByQueryParameter ??\n config.editButton.includeByQueryParameter ??\n true,\n });\n \n Config.set(\"editInVisualBuilderButton\", {\n enable:\n initData.editInVisualBuilderButton?.enable ??\n stackSdk.live_preview?.editInVisualBuilderButton?.enable ??\n config.editInVisualBuilderButton.enable,\n position
|
|
1
|
+
{"version":3,"sources":["../../../src/configManager/handleUserConfig.ts"],"sourcesContent":["import {\n type IClientUrlParams,\n type IInitData,\n ILivePreviewModeConfig,\n type IStackSdk,\n} from \"../types/types\";\nimport Config from \"./configManager\";\n\nconst handleClientUrlParams = (userConfig: Partial<IClientUrlParams>): void => {\n const config = Config.get();\n const clientUrlParams = config.clientUrlParams;\n\n Config.set(\n \"clientUrlParams.host\",\n userConfig.host ?? config.clientUrlParams.host\n );\n\n Config.set(\n \"clientUrlParams.protocol\",\n userConfig.protocol ?? clientUrlParams.protocol\n );\n Config.set(\"clientUrlParams.port\", userConfig.port ?? clientUrlParams.port);\n\n if (userConfig.protocol !== undefined && userConfig.port === undefined) {\n switch (userConfig.protocol) {\n case \"http\": {\n Config.set(\"clientUrlParams.port\", 80);\n break;\n }\n case \"https\": {\n Config.set(\"clientUrlParams.port\", 443);\n break;\n }\n }\n }\n\n let host = config.clientUrlParams.host;\n\n // build url\n if (typeof host == \"string\" && host.endsWith(\"/\")) {\n host = host.slice(0, -1);\n Config.set(\"clientUrlParams.host\", host);\n }\n\n const url = `${clientUrlParams.protocol}://${config.clientUrlParams.host}:${clientUrlParams.port}`;\n\n Config.set(\"clientUrlParams.url\", url);\n};\n\n// TODO: add documentation mentioning that you cannot pass stack sdk in the init data\n\nexport const handleInitData = (initData: Partial<IInitData>): void => {\n const config = Config.get();\n const stackSdk = initData.stackSdk || config.stackSdk;\n\n Config.set(\n \"enable\",\n initData.enable ?? stackSdk.live_preview?.enable ?? config.enable\n );\n\n Config.set(\n \"ssr\",\n stackSdk.live_preview?.ssr ??\n initData.ssr ??\n (typeof initData.stackSdk === \"object\" ? false : true) ??\n true\n );\n\n Config.set(\n \"runScriptsOnUpdate\",\n initData.runScriptsOnUpdate ??\n stackSdk.live_preview?.runScriptsOnUpdate ??\n config.runScriptsOnUpdate\n );\n\n Config.set(\"stackSdk\", initData.stackSdk ?? config.stackSdk);\n\n Config.set(\n \"cleanCslpOnProduction\",\n initData.cleanCslpOnProduction ??\n stackSdk.live_preview?.cleanCslpOnProduction ??\n config.cleanCslpOnProduction\n );\n\n Config.set(\"editButton\", {\n enable:\n initData.editButton?.enable ??\n stackSdk.live_preview?.editButton?.enable ??\n config.editButton.enable,\n // added extra check if exclude data passed by user is array or not\n exclude:\n Array.isArray(initData.editButton?.exclude) &&\n initData.editButton?.exclude\n ? initData.editButton?.exclude\n : Array.isArray(stackSdk.live_preview?.exclude) &&\n stackSdk.live_preview?.exclude\n ? stackSdk.live_preview?.exclude\n : (config.editButton.exclude ?? []),\n position:\n initData.editButton?.position ??\n stackSdk.live_preview?.position ??\n config.editButton.position ??\n \"top\",\n\n includeByQueryParameter:\n initData.editButton?.includeByQueryParameter ??\n stackSdk.live_preview?.includeByQueryParameter ??\n config.editButton.includeByQueryParameter ??\n true,\n });\n \n Config.set(\"editInVisualBuilderButton\", {\n enable:\n initData.editInVisualBuilderButton?.enable ??\n stackSdk.live_preview?.editInVisualBuilderButton?.enable ??\n config.editInVisualBuilderButton.enable,\n position:\n initData.editInVisualBuilderButton?.position ??\n stackSdk.live_preview?.position ??\n config.editInVisualBuilderButton.position ??\n \"bottom-right\",\n })\n\n Config.set(\"overlayPropagation\", {\n enable:\n initData.overlayPropagation?.enable ??\n stackSdk.live_preview?.overlayPropagation?.enable ??\n config.overlayPropagation.enable,\n });\n\n Config.set(\n \"enableLivePreviewOutsideIframe\",\n initData.enableLivePreviewOutsideIframe ??\n config.enableLivePreviewOutsideIframe\n );\n\n // client URL params\n handleClientUrlParams(\n initData.clientUrlParams ??\n stackSdk.live_preview?.clientUrlParams ??\n config.clientUrlParams\n );\n\n if (initData.mode) {\n switch (initData.mode) {\n case \"preview\": {\n Config.set(\"mode\", ILivePreviewModeConfig.PREVIEW);\n break;\n }\n case \"builder\": {\n Config.set(\"mode\", ILivePreviewModeConfig.BUILDER);\n break;\n }\n default: {\n throw new TypeError(\n \"Live Preview SDK: The mode must be either 'builder' or 'preview'\"\n );\n }\n }\n }\n\n Config.set(\n \"debug\",\n initData.debug ?? stackSdk.live_preview?.debug ?? config.debug\n );\n\n handleStackDetails(initData, stackSdk as IStackSdk);\n};\n\nfunction handleStackDetails(\n initData: Partial<IInitData>,\n stackSdk: Partial<IStackSdk>\n): void {\n const config = Config.get();\n\n Config.set(\n \"stackDetails.apiKey\",\n initData.stackDetails?.apiKey ?? config.stackDetails.apiKey\n );\n\n Config.set(\n \"stackDetails.environment\",\n initData.stackDetails?.environment ??\n stackSdk.environment ??\n config.stackDetails.environment\n );\n\n Config.set(\n \"stackDetails.branch\",\n initData.stackDetails?.branch ??\n stackSdk.branch ??\n stackSdk.headers?.branch ??\n config.stackDetails.branch\n );\n\n Config.set(\n \"stackDetails.locale\",\n initData.stackDetails?.locale ?? config.stackDetails.locale\n );\n\n if (config.mode >= ILivePreviewModeConfig.BUILDER) {\n if (!config.stackDetails.environment) {\n throw Error(\"Live preview SDK: environment is required\");\n }\n\n if (!config.stackDetails.apiKey) {\n throw Error(\"Live preview SDK: api key is required\");\n }\n }\n}\n\nexport const handleUserConfig = {\n clientUrlParams: handleClientUrlParams,\n};\n"],"mappings":"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","names":["Config"]}
|
|
@@ -68,6 +68,9 @@ var handleInitData = (initData) => {
|
|
|
68
68
|
enable: initData.editInVisualBuilderButton?.enable ?? stackSdk.live_preview?.editInVisualBuilderButton?.enable ?? config.editInVisualBuilderButton.enable,
|
|
69
69
|
position: initData.editInVisualBuilderButton?.position ?? stackSdk.live_preview?.position ?? config.editInVisualBuilderButton.position ?? "bottom-right"
|
|
70
70
|
});
|
|
71
|
+
Config.set("overlayPropagation", {
|
|
72
|
+
enable: initData.overlayPropagation?.enable ?? stackSdk.live_preview?.overlayPropagation?.enable ?? config.overlayPropagation.enable
|
|
73
|
+
});
|
|
71
74
|
Config.set(
|
|
72
75
|
"enableLivePreviewOutsideIframe",
|
|
73
76
|
initData.enableLivePreviewOutsideIframe ?? config.enableLivePreviewOutsideIframe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/configManager/handleUserConfig.ts"],"sourcesContent":["import {\n type IClientUrlParams,\n type IInitData,\n ILivePreviewModeConfig,\n type IStackSdk,\n} from \"../types/types\";\nimport Config from \"./configManager\";\n\nconst handleClientUrlParams = (userConfig: Partial<IClientUrlParams>): void => {\n const config = Config.get();\n const clientUrlParams = config.clientUrlParams;\n\n Config.set(\n \"clientUrlParams.host\",\n userConfig.host ?? config.clientUrlParams.host\n );\n\n Config.set(\n \"clientUrlParams.protocol\",\n userConfig.protocol ?? clientUrlParams.protocol\n );\n Config.set(\"clientUrlParams.port\", userConfig.port ?? clientUrlParams.port);\n\n if (userConfig.protocol !== undefined && userConfig.port === undefined) {\n switch (userConfig.protocol) {\n case \"http\": {\n Config.set(\"clientUrlParams.port\", 80);\n break;\n }\n case \"https\": {\n Config.set(\"clientUrlParams.port\", 443);\n break;\n }\n }\n }\n\n let host = config.clientUrlParams.host;\n\n // build url\n if (typeof host == \"string\" && host.endsWith(\"/\")) {\n host = host.slice(0, -1);\n Config.set(\"clientUrlParams.host\", host);\n }\n\n const url = `${clientUrlParams.protocol}://${config.clientUrlParams.host}:${clientUrlParams.port}`;\n\n Config.set(\"clientUrlParams.url\", url);\n};\n\n// TODO: add documentation mentioning that you cannot pass stack sdk in the init data\n\nexport const handleInitData = (initData: Partial<IInitData>): void => {\n const config = Config.get();\n const stackSdk = initData.stackSdk || config.stackSdk;\n\n Config.set(\n \"enable\",\n initData.enable ?? stackSdk.live_preview?.enable ?? config.enable\n );\n\n Config.set(\n \"ssr\",\n stackSdk.live_preview?.ssr ??\n initData.ssr ??\n (typeof initData.stackSdk === \"object\" ? false : true) ??\n true\n );\n\n Config.set(\n \"runScriptsOnUpdate\",\n initData.runScriptsOnUpdate ??\n stackSdk.live_preview?.runScriptsOnUpdate ??\n config.runScriptsOnUpdate\n );\n\n Config.set(\"stackSdk\", initData.stackSdk ?? config.stackSdk);\n\n Config.set(\n \"cleanCslpOnProduction\",\n initData.cleanCslpOnProduction ??\n stackSdk.live_preview?.cleanCslpOnProduction ??\n config.cleanCslpOnProduction\n );\n\n Config.set(\"editButton\", {\n enable:\n initData.editButton?.enable ??\n stackSdk.live_preview?.editButton?.enable ??\n config.editButton.enable,\n // added extra check if exclude data passed by user is array or not\n exclude:\n Array.isArray(initData.editButton?.exclude) &&\n initData.editButton?.exclude\n ? initData.editButton?.exclude\n : Array.isArray(stackSdk.live_preview?.exclude) &&\n stackSdk.live_preview?.exclude\n ? stackSdk.live_preview?.exclude\n : (config.editButton.exclude ?? []),\n position:\n initData.editButton?.position ??\n stackSdk.live_preview?.position ??\n config.editButton.position ??\n \"top\",\n\n includeByQueryParameter:\n initData.editButton?.includeByQueryParameter ??\n stackSdk.live_preview?.includeByQueryParameter ??\n config.editButton.includeByQueryParameter ??\n true,\n });\n \n Config.set(\"editInVisualBuilderButton\", {\n enable:\n initData.editInVisualBuilderButton?.enable ??\n stackSdk.live_preview?.editInVisualBuilderButton?.enable ??\n config.editInVisualBuilderButton.enable,\n position
|
|
1
|
+
{"version":3,"sources":["../../../src/configManager/handleUserConfig.ts"],"sourcesContent":["import {\n type IClientUrlParams,\n type IInitData,\n ILivePreviewModeConfig,\n type IStackSdk,\n} from \"../types/types\";\nimport Config from \"./configManager\";\n\nconst handleClientUrlParams = (userConfig: Partial<IClientUrlParams>): void => {\n const config = Config.get();\n const clientUrlParams = config.clientUrlParams;\n\n Config.set(\n \"clientUrlParams.host\",\n userConfig.host ?? config.clientUrlParams.host\n );\n\n Config.set(\n \"clientUrlParams.protocol\",\n userConfig.protocol ?? clientUrlParams.protocol\n );\n Config.set(\"clientUrlParams.port\", userConfig.port ?? clientUrlParams.port);\n\n if (userConfig.protocol !== undefined && userConfig.port === undefined) {\n switch (userConfig.protocol) {\n case \"http\": {\n Config.set(\"clientUrlParams.port\", 80);\n break;\n }\n case \"https\": {\n Config.set(\"clientUrlParams.port\", 443);\n break;\n }\n }\n }\n\n let host = config.clientUrlParams.host;\n\n // build url\n if (typeof host == \"string\" && host.endsWith(\"/\")) {\n host = host.slice(0, -1);\n Config.set(\"clientUrlParams.host\", host);\n }\n\n const url = `${clientUrlParams.protocol}://${config.clientUrlParams.host}:${clientUrlParams.port}`;\n\n Config.set(\"clientUrlParams.url\", url);\n};\n\n// TODO: add documentation mentioning that you cannot pass stack sdk in the init data\n\nexport const handleInitData = (initData: Partial<IInitData>): void => {\n const config = Config.get();\n const stackSdk = initData.stackSdk || config.stackSdk;\n\n Config.set(\n \"enable\",\n initData.enable ?? stackSdk.live_preview?.enable ?? config.enable\n );\n\n Config.set(\n \"ssr\",\n stackSdk.live_preview?.ssr ??\n initData.ssr ??\n (typeof initData.stackSdk === \"object\" ? false : true) ??\n true\n );\n\n Config.set(\n \"runScriptsOnUpdate\",\n initData.runScriptsOnUpdate ??\n stackSdk.live_preview?.runScriptsOnUpdate ??\n config.runScriptsOnUpdate\n );\n\n Config.set(\"stackSdk\", initData.stackSdk ?? config.stackSdk);\n\n Config.set(\n \"cleanCslpOnProduction\",\n initData.cleanCslpOnProduction ??\n stackSdk.live_preview?.cleanCslpOnProduction ??\n config.cleanCslpOnProduction\n );\n\n Config.set(\"editButton\", {\n enable:\n initData.editButton?.enable ??\n stackSdk.live_preview?.editButton?.enable ??\n config.editButton.enable,\n // added extra check if exclude data passed by user is array or not\n exclude:\n Array.isArray(initData.editButton?.exclude) &&\n initData.editButton?.exclude\n ? initData.editButton?.exclude\n : Array.isArray(stackSdk.live_preview?.exclude) &&\n stackSdk.live_preview?.exclude\n ? stackSdk.live_preview?.exclude\n : (config.editButton.exclude ?? []),\n position:\n initData.editButton?.position ??\n stackSdk.live_preview?.position ??\n config.editButton.position ??\n \"top\",\n\n includeByQueryParameter:\n initData.editButton?.includeByQueryParameter ??\n stackSdk.live_preview?.includeByQueryParameter ??\n config.editButton.includeByQueryParameter ??\n true,\n });\n \n Config.set(\"editInVisualBuilderButton\", {\n enable:\n initData.editInVisualBuilderButton?.enable ??\n stackSdk.live_preview?.editInVisualBuilderButton?.enable ??\n config.editInVisualBuilderButton.enable,\n position:\n initData.editInVisualBuilderButton?.position ??\n stackSdk.live_preview?.position ??\n config.editInVisualBuilderButton.position ??\n \"bottom-right\",\n })\n\n Config.set(\"overlayPropagation\", {\n enable:\n initData.overlayPropagation?.enable ??\n stackSdk.live_preview?.overlayPropagation?.enable ??\n config.overlayPropagation.enable,\n });\n\n Config.set(\n \"enableLivePreviewOutsideIframe\",\n initData.enableLivePreviewOutsideIframe ??\n config.enableLivePreviewOutsideIframe\n );\n\n // client URL params\n handleClientUrlParams(\n initData.clientUrlParams ??\n stackSdk.live_preview?.clientUrlParams ??\n config.clientUrlParams\n );\n\n if (initData.mode) {\n switch (initData.mode) {\n case \"preview\": {\n Config.set(\"mode\", ILivePreviewModeConfig.PREVIEW);\n break;\n }\n case \"builder\": {\n Config.set(\"mode\", ILivePreviewModeConfig.BUILDER);\n break;\n }\n default: {\n throw new TypeError(\n \"Live Preview SDK: The mode must be either 'builder' or 'preview'\"\n );\n }\n }\n }\n\n Config.set(\n \"debug\",\n initData.debug ?? stackSdk.live_preview?.debug ?? config.debug\n );\n\n handleStackDetails(initData, stackSdk as IStackSdk);\n};\n\nfunction handleStackDetails(\n initData: Partial<IInitData>,\n stackSdk: Partial<IStackSdk>\n): void {\n const config = Config.get();\n\n Config.set(\n \"stackDetails.apiKey\",\n initData.stackDetails?.apiKey ?? config.stackDetails.apiKey\n );\n\n Config.set(\n \"stackDetails.environment\",\n initData.stackDetails?.environment ??\n stackSdk.environment ??\n config.stackDetails.environment\n );\n\n Config.set(\n \"stackDetails.branch\",\n initData.stackDetails?.branch ??\n stackSdk.branch ??\n stackSdk.headers?.branch ??\n config.stackDetails.branch\n );\n\n Config.set(\n \"stackDetails.locale\",\n initData.stackDetails?.locale ?? config.stackDetails.locale\n );\n\n if (config.mode >= ILivePreviewModeConfig.BUILDER) {\n if (!config.stackDetails.environment) {\n throw Error(\"Live preview SDK: environment is required\");\n }\n\n if (!config.stackDetails.apiKey) {\n throw Error(\"Live preview SDK: api key is required\");\n }\n }\n}\n\nexport const handleUserConfig = {\n clientUrlParams: handleClientUrlParams,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { setConfigFromParams, updateConfigFromUrl } from './configManager.cjs';
|
|
1
|
+
export { setConfigFromParams, syncToStackSdk, updateConfigFromUrl } from './configManager.cjs';
|
|
2
2
|
import 'deepsignal';
|
|
3
3
|
import '../types/types.cjs';
|
|
4
4
|
import '../visualBuilder/types/collab.types.cjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { setConfigFromParams, updateConfigFromUrl } from './configManager.js';
|
|
1
|
+
export { setConfigFromParams, syncToStackSdk, updateConfigFromUrl } from './configManager.js';
|
|
2
2
|
import 'deepsignal';
|
|
3
3
|
import '../types/types.js';
|
|
4
4
|
import '../visualBuilder/types/collab.types.js';
|
|
@@ -138,6 +138,17 @@ function getMultipleFieldMetadata(content_type_uid, entry_uid, locale, fieldPath
|
|
|
138
138
|
index: (0, import_lodash_es.isNil)(index) ? -1 : +index
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
|
+
function highlightCslpElement(element, cslpTag, elements, callback) {
|
|
142
|
+
if (elements.highlightedElement)
|
|
143
|
+
elements.highlightedElement.classList.remove(
|
|
144
|
+
(0, import_editButton.cslpTagStyles)()["cslp-edit-mode"]
|
|
145
|
+
);
|
|
146
|
+
element.classList.add((0, import_editButton.cslpTagStyles)()["cslp-edit-mode"]);
|
|
147
|
+
const updatedElements = elements;
|
|
148
|
+
updatedElements.highlightedElement = element;
|
|
149
|
+
import_configManager.default.set("elements", updatedElements);
|
|
150
|
+
callback?.({ cslpTag, highlightedElement: element });
|
|
151
|
+
}
|
|
141
152
|
function addCslpOutline(e, callback) {
|
|
142
153
|
const elements = import_configManager.default.get().elements;
|
|
143
154
|
let trigger = true;
|
|
@@ -148,23 +159,25 @@ function addCslpOutline(e, callback) {
|
|
|
148
159
|
if (typeof element?.getAttribute !== "function") continue;
|
|
149
160
|
const cslpTag = element.getAttribute("data-cslp");
|
|
150
161
|
if (trigger && isValidCslp(cslpTag)) {
|
|
151
|
-
|
|
152
|
-
elements.highlightedElement.classList.remove(
|
|
153
|
-
(0, import_editButton.cslpTagStyles)()["cslp-edit-mode"]
|
|
154
|
-
);
|
|
155
|
-
element.classList.add((0, import_editButton.cslpTagStyles)()["cslp-edit-mode"]);
|
|
156
|
-
const updatedElements = elements;
|
|
157
|
-
updatedElements.highlightedElement = element;
|
|
158
|
-
import_configManager.default.set("elements", updatedElements);
|
|
159
|
-
callback?.({
|
|
160
|
-
cslpTag,
|
|
161
|
-
highlightedElement: element
|
|
162
|
-
});
|
|
162
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
163
163
|
trigger = false;
|
|
164
164
|
} else if (!trigger) {
|
|
165
165
|
element.classList.remove((0, import_editButton.cslpTagStyles)()["cslp-edit-mode"]);
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
+
if (trigger && import_configManager.default.get().overlayPropagation?.enable) {
|
|
169
|
+
const pointElements = document.elementsFromPoint(e.clientX, e.clientY);
|
|
170
|
+
for (const el of pointElements) {
|
|
171
|
+
const element = el;
|
|
172
|
+
if (element.nodeName === "BODY") break;
|
|
173
|
+
if (typeof element?.getAttribute !== "function") continue;
|
|
174
|
+
const cslpTag = element.getAttribute("data-cslp");
|
|
175
|
+
if (isValidCslp(cslpTag)) {
|
|
176
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
168
181
|
}
|
|
169
182
|
// Annotate the CommonJS export names for ESM import in node:
|
|
170
183
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cslp/cslpdata.ts"],"sourcesContent":["import { isNil, isFinite, findLastIndex, findLast } from \"lodash-es\";\nimport {\n CslpData,\n CslpDataMultipleFieldMetadata,\n CslpDataParentDetails,\n} from \"./types/cslp.types\";\nimport Config from \"../configManager/configManager\";\nimport { DeepSignal } from \"deepsignal\";\nimport { cslpTagStyles } from \"../livePreview/editButton/editButton.style\";\n\n/**\n * Validates that the required CSLP parts (content_type_uid, entry_uid/entry_uid_variant_uid, locale) are non-empty.\n * @param parts The array of parts from splitting the CSLP string by \".\"\n * @returns `true` if all required parts (first 3) are non-empty, `false` otherwise.\n */\nfunction areRequiredPartsNonEmpty(parts: string[]): boolean {\n // Check that we have at least 3 parts\n if (parts.length < 3) {\n return false;\n }\n // Verify that content_type_uid (parts[0]), entry_uid/entry_uid_variant_uid (parts[1]), and locale (parts[2]) are all non-empty\n return parts[0].length > 0 && parts[1].length > 0 && parts[2].length > 0;\n}\n\n/**\n * Validates if a CSLP value string is valid.\n * \n * Supports two formats:\n * - **v1 format**: `content_type_uid.entry_uid.locale[.field_path]` (requires at least 3 parts)\n * - **v2 format**: `v2:content_type_uid.entry_uid_variant_uid.locale[.field_path]` \n * (requires at least 3 parts, entry_uid_variant_uid must contain underscore separating entry_uid and variant_uid)\n * \n * @param cslpValue The CSLP value string to validate (can be null or undefined).\n * @returns Type predicate: `true` if the CSLP value is valid (narrows type to `string`), `false` otherwise.\n * \n * @example\n * Valid v1 format\n * isValidCslp(\"page.entry123.en-us\") -> true\n * isValidCslp(\"page.entry123.en-us.title\") -> true\n * \n * Valid v2 format\n * isValidCslp(\"v2:page.entry123_variant456.en-us\") -> true\n * isValidCslp(\"v2:page.entry123_variant456.en-us.title\") -> true\n * \n * Invalid cases\n * isValidCslp(null) -> false\n * isValidCslp(\"invalid\") -> false (less than 3 parts)\n * isValidCslp(\"v2:page.entry123.en-us\") -> false (missing underscore in entry_uid_variant_uid)\n */\nexport function isValidCslp(\n cslpValue: string | null | undefined\n): cslpValue is string {\n // Return false for null, undefined, or empty string\n if (!cslpValue) {\n return false;\n }\n\n // Check for v2 format (starts with \"v2:\")\n if (cslpValue.startsWith(\"v2:\")) {\n const dataAfterPrefix = cslpValue.substring(3); // Remove \"v2:\" prefix\n const parts = dataAfterPrefix.split(\".\");\n // v2 format requires at least 3 parts: content_type_uid.entry_uid_variant_uid.locale\n // Verify that content_type_uid, entry_uid_variant_uid, and locale are all non-empty\n if (!areRequiredPartsNonEmpty(parts)) {\n return false;\n }\n // Verify that entry_uid_variant_uid (second part) contains both entry_uid and variant_uid separated by at least one underscore\n const entryUidVariantUid = parts[1];\n const entryVariantParts = entryUidVariantUid.split(\"_\");\n // Check that we have at least 2 parts (entry_uid and variant_uid) and all parts are non-empty\n return entryVariantParts.length >= 2 && entryVariantParts.every((part) => part.length > 0);\n }\n\n // v1 format (default, no prefix)\n const parts = cslpValue.split(\".\");\n // v1 format requires at least 3 parts: content_type_uid.entry_uid.locale\n // Verify that content_type_uid, entry_uid, and locale are all non-empty\n return areRequiredPartsNonEmpty(parts);\n}\n\n/**\n * Extracts details from a CSLP value string.\n * @param cslpValue The CSLP value string to extract details from.\n * @returns An object containing the extracted details.\n */\nexport function extractDetailsFromCslp(cslpValue: string): CslpData {\n let [cslpVersion, cslpData] = cslpValue.split(\":\");\n // If the cslpVersion is greater than 2 letter which means it is v1 version of cslp data\n if (cslpVersion.length > 2) {\n cslpData = cslpVersion;\n cslpVersion = \"v1\";\n }\n\n const [content_type_uid, entryInfo, locale, ...fieldPath] =\n cslpData.split(\".\");\n\n let entry_uid: string;\n let variant;\n\n switch (cslpVersion) {\n case \"v2\": {\n const [uid, variant_uid] = entryInfo.split(\"_\");\n entry_uid = uid;\n variant = variant_uid;\n break;\n }\n default: {\n entry_uid = entryInfo;\n break;\n }\n }\n const instancePathWithInstance = fieldPath.join(\".\");\n const calculatedPath = fieldPath.filter((path) => {\n const isEmpty = isNil(path);\n const isNumber = isFinite(+path);\n return (!isEmpty && !isNumber) || false;\n });\n\n const multipleFieldMetadata: CslpDataMultipleFieldMetadata =\n getMultipleFieldMetadata(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n /**\n * The index in the end of the field does not represent a field.\n * It represents the index of the field in the multiple field.\n * Hence, we pop it out.\n */\n if (isFinite(+fieldPath[fieldPath.length - 1])) {\n fieldPath.pop();\n }\n\n return {\n entry_uid,\n content_type_uid,\n variant,\n locale,\n cslpValue: cslpValue,\n fieldPath: calculatedPath.join(\".\"),\n fieldPathWithIndex: fieldPath.join(\".\"),\n multipleFieldMetadata: multipleFieldMetadata,\n instance: {\n fieldPathWithIndex: instancePathWithInstance,\n },\n };\n}\n\n/**\n * Returns the parent path details of a given field path in CSLP format.\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the entry.\n * @param locale - The locale of the entry.\n * @param fieldPath - The field path to get the parent path details for.\n * @returns The parent path details in CSLP format, or null if the field path does not have a parent.\n */\nfunction getParentPathDetails(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataParentDetails | null {\n const index = findLastIndex(fieldPath, (path) => isFinite(+path));\n if (index === -1) return null;\n\n const parentPath = fieldPath.slice(0, index);\n return {\n parentPath: parentPath.join(\".\"),\n parentCslpValue: [\n content_type_uid,\n entry_uid,\n locale,\n ...parentPath,\n ].join(\".\"),\n };\n}\n\n/**\n * Returns metadata for a multiple field in a content entry.\n * @summary ONLY USE THESE RETURNED VALUES WHEN FIELD IS MULTIPLE\n * @summary IT GIVES WRONG DATA IF FIELD IS NOT MULTIPLE\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the content entry.\n * @param locale - The locale of the content entry.\n * @param fieldPath - The path of the multiple field.\n * @returns The metadata for the multiple field.\n */\nfunction getMultipleFieldMetadata(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataMultipleFieldMetadata {\n const parentDetails = getParentPathDetails(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n const index = findLast(fieldPath, (path) => isFinite(+path));\n\n return {\n parentDetails: parentDetails,\n index: isNil(index) ? -1 : +index,\n };\n}\n\n//TODO: move this to editbutton\n/**\n * Adds an outline to the clicked element and triggers a callback function.\n * @param e - The MouseEvent object representing the click event.\n * @param callback - An optional callback function that will be called with the CSLP tag and highlighted element as arguments.\n */\nexport function addCslpOutline(\n e: MouseEvent,\n callback?: (args: {\n cslpTag: string;\n highlightedElement: HTMLElement;\n }) => void\n): void {\n const elements = Config.get().elements;\n\n let trigger = true;\n const eventTargets = e.composedPath();\n\n for (const eventTarget of eventTargets) {\n const element = eventTarget as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n\n const cslpTag = element.getAttribute(\"data-cslp\");\n\n if (trigger && isValidCslp(cslpTag)) {\n if (elements.highlightedElement)\n elements.highlightedElement.classList.remove(\n cslpTagStyles()[\"cslp-edit-mode\"]\n );\n element.classList.add(cslpTagStyles()[\"cslp-edit-mode\"]);\n\n const updatedElements = elements;\n updatedElements.highlightedElement =\n element as DeepSignal<HTMLElement>;\n Config.set(\"elements\", updatedElements);\n\n callback?.({\n cslpTag: cslpTag,\n highlightedElement: element,\n });\n\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(cslpTagStyles()[\"cslp-edit-mode\"]);\n }\n }\n}\n"],"mappings":"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","names":["parts","Config"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cslp/cslpdata.ts"],"sourcesContent":["import { isNil, isFinite, findLastIndex, findLast } from \"lodash-es\";\nimport {\n CslpData,\n CslpDataMultipleFieldMetadata,\n CslpDataParentDetails,\n} from \"./types/cslp.types\";\nimport Config from \"../configManager/configManager\";\nimport { DeepSignal } from \"deepsignal\";\nimport { cslpTagStyles } from \"../livePreview/editButton/editButton.style\";\n\n/**\n * Validates that the required CSLP parts (content_type_uid, entry_uid/entry_uid_variant_uid, locale) are non-empty.\n * @param parts The array of parts from splitting the CSLP string by \".\"\n * @returns `true` if all required parts (first 3) are non-empty, `false` otherwise.\n */\nfunction areRequiredPartsNonEmpty(parts: string[]): boolean {\n // Check that we have at least 3 parts\n if (parts.length < 3) {\n return false;\n }\n // Verify that content_type_uid (parts[0]), entry_uid/entry_uid_variant_uid (parts[1]), and locale (parts[2]) are all non-empty\n return parts[0].length > 0 && parts[1].length > 0 && parts[2].length > 0;\n}\n\n/**\n * Validates if a CSLP value string is valid.\n * \n * Supports two formats:\n * - **v1 format**: `content_type_uid.entry_uid.locale[.field_path]` (requires at least 3 parts)\n * - **v2 format**: `v2:content_type_uid.entry_uid_variant_uid.locale[.field_path]` \n * (requires at least 3 parts, entry_uid_variant_uid must contain underscore separating entry_uid and variant_uid)\n * \n * @param cslpValue The CSLP value string to validate (can be null or undefined).\n * @returns Type predicate: `true` if the CSLP value is valid (narrows type to `string`), `false` otherwise.\n * \n * @example\n * Valid v1 format\n * isValidCslp(\"page.entry123.en-us\") -> true\n * isValidCslp(\"page.entry123.en-us.title\") -> true\n * \n * Valid v2 format\n * isValidCslp(\"v2:page.entry123_variant456.en-us\") -> true\n * isValidCslp(\"v2:page.entry123_variant456.en-us.title\") -> true\n * \n * Invalid cases\n * isValidCslp(null) -> false\n * isValidCslp(\"invalid\") -> false (less than 3 parts)\n * isValidCslp(\"v2:page.entry123.en-us\") -> false (missing underscore in entry_uid_variant_uid)\n */\nexport function isValidCslp(\n cslpValue: string | null | undefined\n): cslpValue is string {\n // Return false for null, undefined, or empty string\n if (!cslpValue) {\n return false;\n }\n\n // Check for v2 format (starts with \"v2:\")\n if (cslpValue.startsWith(\"v2:\")) {\n const dataAfterPrefix = cslpValue.substring(3); // Remove \"v2:\" prefix\n const parts = dataAfterPrefix.split(\".\");\n // v2 format requires at least 3 parts: content_type_uid.entry_uid_variant_uid.locale\n // Verify that content_type_uid, entry_uid_variant_uid, and locale are all non-empty\n if (!areRequiredPartsNonEmpty(parts)) {\n return false;\n }\n // Verify that entry_uid_variant_uid (second part) contains both entry_uid and variant_uid separated by at least one underscore\n const entryUidVariantUid = parts[1];\n const entryVariantParts = entryUidVariantUid.split(\"_\");\n // Check that we have at least 2 parts (entry_uid and variant_uid) and all parts are non-empty\n return entryVariantParts.length >= 2 && entryVariantParts.every((part) => part.length > 0);\n }\n\n // v1 format (default, no prefix)\n const parts = cslpValue.split(\".\");\n // v1 format requires at least 3 parts: content_type_uid.entry_uid.locale\n // Verify that content_type_uid, entry_uid, and locale are all non-empty\n return areRequiredPartsNonEmpty(parts);\n}\n\n/**\n * Extracts details from a CSLP value string.\n * @param cslpValue The CSLP value string to extract details from.\n * @returns An object containing the extracted details.\n */\nexport function extractDetailsFromCslp(cslpValue: string): CslpData {\n let [cslpVersion, cslpData] = cslpValue.split(\":\");\n // If the cslpVersion is greater than 2 letter which means it is v1 version of cslp data\n if (cslpVersion.length > 2) {\n cslpData = cslpVersion;\n cslpVersion = \"v1\";\n }\n\n const [content_type_uid, entryInfo, locale, ...fieldPath] =\n cslpData.split(\".\");\n\n let entry_uid: string;\n let variant;\n\n switch (cslpVersion) {\n case \"v2\": {\n const [uid, variant_uid] = entryInfo.split(\"_\");\n entry_uid = uid;\n variant = variant_uid;\n break;\n }\n default: {\n entry_uid = entryInfo;\n break;\n }\n }\n const instancePathWithInstance = fieldPath.join(\".\");\n const calculatedPath = fieldPath.filter((path) => {\n const isEmpty = isNil(path);\n const isNumber = isFinite(+path);\n return (!isEmpty && !isNumber) || false;\n });\n\n const multipleFieldMetadata: CslpDataMultipleFieldMetadata =\n getMultipleFieldMetadata(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n /**\n * The index in the end of the field does not represent a field.\n * It represents the index of the field in the multiple field.\n * Hence, we pop it out.\n */\n if (isFinite(+fieldPath[fieldPath.length - 1])) {\n fieldPath.pop();\n }\n\n return {\n entry_uid,\n content_type_uid,\n variant,\n locale,\n cslpValue: cslpValue,\n fieldPath: calculatedPath.join(\".\"),\n fieldPathWithIndex: fieldPath.join(\".\"),\n multipleFieldMetadata: multipleFieldMetadata,\n instance: {\n fieldPathWithIndex: instancePathWithInstance,\n },\n };\n}\n\n/**\n * Returns the parent path details of a given field path in CSLP format.\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the entry.\n * @param locale - The locale of the entry.\n * @param fieldPath - The field path to get the parent path details for.\n * @returns The parent path details in CSLP format, or null if the field path does not have a parent.\n */\nfunction getParentPathDetails(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataParentDetails | null {\n const index = findLastIndex(fieldPath, (path) => isFinite(+path));\n if (index === -1) return null;\n\n const parentPath = fieldPath.slice(0, index);\n return {\n parentPath: parentPath.join(\".\"),\n parentCslpValue: [\n content_type_uid,\n entry_uid,\n locale,\n ...parentPath,\n ].join(\".\"),\n };\n}\n\n/**\n * Returns metadata for a multiple field in a content entry.\n * @summary ONLY USE THESE RETURNED VALUES WHEN FIELD IS MULTIPLE\n * @summary IT GIVES WRONG DATA IF FIELD IS NOT MULTIPLE\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the content entry.\n * @param locale - The locale of the content entry.\n * @param fieldPath - The path of the multiple field.\n * @returns The metadata for the multiple field.\n */\nfunction getMultipleFieldMetadata(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataMultipleFieldMetadata {\n const parentDetails = getParentPathDetails(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n const index = findLast(fieldPath, (path) => isFinite(+path));\n\n return {\n parentDetails: parentDetails,\n index: isNil(index) ? -1 : +index,\n };\n}\n\n//TODO: move this to editbutton\n/**\n * Adds an outline to the clicked element and triggers a callback function.\n * @param e - The MouseEvent object representing the click event.\n * @param callback - An optional callback function that will be called with the CSLP tag and highlighted element as arguments.\n */\nfunction highlightCslpElement(\n element: HTMLElement,\n cslpTag: string,\n elements: ReturnType<typeof Config.get>[\"elements\"],\n callback?: (args: { cslpTag: string; highlightedElement: HTMLElement }) => void\n): void {\n if (elements.highlightedElement)\n elements.highlightedElement.classList.remove(\n cslpTagStyles()[\"cslp-edit-mode\"]\n );\n element.classList.add(cslpTagStyles()[\"cslp-edit-mode\"]);\n const updatedElements = elements;\n updatedElements.highlightedElement = element as DeepSignal<HTMLElement>;\n Config.set(\"elements\", updatedElements);\n callback?.({ cslpTag, highlightedElement: element });\n}\n\nexport function addCslpOutline(\n e: MouseEvent,\n callback?: (args: {\n cslpTag: string;\n highlightedElement: HTMLElement;\n }) => void\n): void {\n const elements = Config.get().elements;\n\n let trigger = true;\n const eventTargets = e.composedPath();\n\n for (const eventTarget of eventTargets) {\n const element = eventTarget as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n\n const cslpTag = element.getAttribute(\"data-cslp\");\n\n if (trigger && isValidCslp(cslpTag)) {\n highlightCslpElement(element, cslpTag, elements, callback);\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(cslpTagStyles()[\"cslp-edit-mode\"]);\n }\n }\n\n // composedPath() misses elements that are visually under a sibling overlay;\n // fall back to elementsFromPoint so the Edit button can still find the field.\n if (trigger && Config.get().overlayPropagation?.enable) {\n const pointElements = document.elementsFromPoint(e.clientX, e.clientY);\n for (const el of pointElements) {\n const element = el as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n const cslpTag = element.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpTag)) {\n highlightCslpElement(element, cslpTag, elements, callback);\n break;\n }\n }\n }\n}\n"],"mappings":"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","names":["parts","Config"]}
|
|
@@ -32,11 +32,6 @@ declare function isValidCslp(cslpValue: string | null | undefined): cslpValue is
|
|
|
32
32
|
* @returns An object containing the extracted details.
|
|
33
33
|
*/
|
|
34
34
|
declare function extractDetailsFromCslp(cslpValue: string): CslpData;
|
|
35
|
-
/**
|
|
36
|
-
* Adds an outline to the clicked element and triggers a callback function.
|
|
37
|
-
* @param e - The MouseEvent object representing the click event.
|
|
38
|
-
* @param callback - An optional callback function that will be called with the CSLP tag and highlighted element as arguments.
|
|
39
|
-
*/
|
|
40
35
|
declare function addCslpOutline(e: MouseEvent, callback?: (args: {
|
|
41
36
|
cslpTag: string;
|
|
42
37
|
highlightedElement: HTMLElement;
|
|
@@ -32,11 +32,6 @@ declare function isValidCslp(cslpValue: string | null | undefined): cslpValue is
|
|
|
32
32
|
* @returns An object containing the extracted details.
|
|
33
33
|
*/
|
|
34
34
|
declare function extractDetailsFromCslp(cslpValue: string): CslpData;
|
|
35
|
-
/**
|
|
36
|
-
* Adds an outline to the clicked element and triggers a callback function.
|
|
37
|
-
* @param e - The MouseEvent object representing the click event.
|
|
38
|
-
* @param callback - An optional callback function that will be called with the CSLP tag and highlighted element as arguments.
|
|
39
|
-
*/
|
|
40
35
|
declare function addCslpOutline(e: MouseEvent, callback?: (args: {
|
|
41
36
|
cslpTag: string;
|
|
42
37
|
highlightedElement: HTMLElement;
|
|
@@ -104,6 +104,17 @@ function getMultipleFieldMetadata(content_type_uid, entry_uid, locale, fieldPath
|
|
|
104
104
|
index: isNil(index) ? -1 : +index
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
|
+
function highlightCslpElement(element, cslpTag, elements, callback) {
|
|
108
|
+
if (elements.highlightedElement)
|
|
109
|
+
elements.highlightedElement.classList.remove(
|
|
110
|
+
cslpTagStyles()["cslp-edit-mode"]
|
|
111
|
+
);
|
|
112
|
+
element.classList.add(cslpTagStyles()["cslp-edit-mode"]);
|
|
113
|
+
const updatedElements = elements;
|
|
114
|
+
updatedElements.highlightedElement = element;
|
|
115
|
+
Config.set("elements", updatedElements);
|
|
116
|
+
callback?.({ cslpTag, highlightedElement: element });
|
|
117
|
+
}
|
|
107
118
|
function addCslpOutline(e, callback) {
|
|
108
119
|
const elements = Config.get().elements;
|
|
109
120
|
let trigger = true;
|
|
@@ -114,23 +125,25 @@ function addCslpOutline(e, callback) {
|
|
|
114
125
|
if (typeof element?.getAttribute !== "function") continue;
|
|
115
126
|
const cslpTag = element.getAttribute("data-cslp");
|
|
116
127
|
if (trigger && isValidCslp(cslpTag)) {
|
|
117
|
-
|
|
118
|
-
elements.highlightedElement.classList.remove(
|
|
119
|
-
cslpTagStyles()["cslp-edit-mode"]
|
|
120
|
-
);
|
|
121
|
-
element.classList.add(cslpTagStyles()["cslp-edit-mode"]);
|
|
122
|
-
const updatedElements = elements;
|
|
123
|
-
updatedElements.highlightedElement = element;
|
|
124
|
-
Config.set("elements", updatedElements);
|
|
125
|
-
callback?.({
|
|
126
|
-
cslpTag,
|
|
127
|
-
highlightedElement: element
|
|
128
|
-
});
|
|
128
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
129
129
|
trigger = false;
|
|
130
130
|
} else if (!trigger) {
|
|
131
131
|
element.classList.remove(cslpTagStyles()["cslp-edit-mode"]);
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
+
if (trigger && Config.get().overlayPropagation?.enable) {
|
|
135
|
+
const pointElements = document.elementsFromPoint(e.clientX, e.clientY);
|
|
136
|
+
for (const el of pointElements) {
|
|
137
|
+
const element = el;
|
|
138
|
+
if (element.nodeName === "BODY") break;
|
|
139
|
+
if (typeof element?.getAttribute !== "function") continue;
|
|
140
|
+
const cslpTag = element.getAttribute("data-cslp");
|
|
141
|
+
if (isValidCslp(cslpTag)) {
|
|
142
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
134
147
|
}
|
|
135
148
|
export {
|
|
136
149
|
addCslpOutline,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cslp/cslpdata.ts"],"sourcesContent":["import { isNil, isFinite, findLastIndex, findLast } from \"lodash-es\";\nimport {\n CslpData,\n CslpDataMultipleFieldMetadata,\n CslpDataParentDetails,\n} from \"./types/cslp.types\";\nimport Config from \"../configManager/configManager\";\nimport { DeepSignal } from \"deepsignal\";\nimport { cslpTagStyles } from \"../livePreview/editButton/editButton.style\";\n\n/**\n * Validates that the required CSLP parts (content_type_uid, entry_uid/entry_uid_variant_uid, locale) are non-empty.\n * @param parts The array of parts from splitting the CSLP string by \".\"\n * @returns `true` if all required parts (first 3) are non-empty, `false` otherwise.\n */\nfunction areRequiredPartsNonEmpty(parts: string[]): boolean {\n // Check that we have at least 3 parts\n if (parts.length < 3) {\n return false;\n }\n // Verify that content_type_uid (parts[0]), entry_uid/entry_uid_variant_uid (parts[1]), and locale (parts[2]) are all non-empty\n return parts[0].length > 0 && parts[1].length > 0 && parts[2].length > 0;\n}\n\n/**\n * Validates if a CSLP value string is valid.\n * \n * Supports two formats:\n * - **v1 format**: `content_type_uid.entry_uid.locale[.field_path]` (requires at least 3 parts)\n * - **v2 format**: `v2:content_type_uid.entry_uid_variant_uid.locale[.field_path]` \n * (requires at least 3 parts, entry_uid_variant_uid must contain underscore separating entry_uid and variant_uid)\n * \n * @param cslpValue The CSLP value string to validate (can be null or undefined).\n * @returns Type predicate: `true` if the CSLP value is valid (narrows type to `string`), `false` otherwise.\n * \n * @example\n * Valid v1 format\n * isValidCslp(\"page.entry123.en-us\") -> true\n * isValidCslp(\"page.entry123.en-us.title\") -> true\n * \n * Valid v2 format\n * isValidCslp(\"v2:page.entry123_variant456.en-us\") -> true\n * isValidCslp(\"v2:page.entry123_variant456.en-us.title\") -> true\n * \n * Invalid cases\n * isValidCslp(null) -> false\n * isValidCslp(\"invalid\") -> false (less than 3 parts)\n * isValidCslp(\"v2:page.entry123.en-us\") -> false (missing underscore in entry_uid_variant_uid)\n */\nexport function isValidCslp(\n cslpValue: string | null | undefined\n): cslpValue is string {\n // Return false for null, undefined, or empty string\n if (!cslpValue) {\n return false;\n }\n\n // Check for v2 format (starts with \"v2:\")\n if (cslpValue.startsWith(\"v2:\")) {\n const dataAfterPrefix = cslpValue.substring(3); // Remove \"v2:\" prefix\n const parts = dataAfterPrefix.split(\".\");\n // v2 format requires at least 3 parts: content_type_uid.entry_uid_variant_uid.locale\n // Verify that content_type_uid, entry_uid_variant_uid, and locale are all non-empty\n if (!areRequiredPartsNonEmpty(parts)) {\n return false;\n }\n // Verify that entry_uid_variant_uid (second part) contains both entry_uid and variant_uid separated by at least one underscore\n const entryUidVariantUid = parts[1];\n const entryVariantParts = entryUidVariantUid.split(\"_\");\n // Check that we have at least 2 parts (entry_uid and variant_uid) and all parts are non-empty\n return entryVariantParts.length >= 2 && entryVariantParts.every((part) => part.length > 0);\n }\n\n // v1 format (default, no prefix)\n const parts = cslpValue.split(\".\");\n // v1 format requires at least 3 parts: content_type_uid.entry_uid.locale\n // Verify that content_type_uid, entry_uid, and locale are all non-empty\n return areRequiredPartsNonEmpty(parts);\n}\n\n/**\n * Extracts details from a CSLP value string.\n * @param cslpValue The CSLP value string to extract details from.\n * @returns An object containing the extracted details.\n */\nexport function extractDetailsFromCslp(cslpValue: string): CslpData {\n let [cslpVersion, cslpData] = cslpValue.split(\":\");\n // If the cslpVersion is greater than 2 letter which means it is v1 version of cslp data\n if (cslpVersion.length > 2) {\n cslpData = cslpVersion;\n cslpVersion = \"v1\";\n }\n\n const [content_type_uid, entryInfo, locale, ...fieldPath] =\n cslpData.split(\".\");\n\n let entry_uid: string;\n let variant;\n\n switch (cslpVersion) {\n case \"v2\": {\n const [uid, variant_uid] = entryInfo.split(\"_\");\n entry_uid = uid;\n variant = variant_uid;\n break;\n }\n default: {\n entry_uid = entryInfo;\n break;\n }\n }\n const instancePathWithInstance = fieldPath.join(\".\");\n const calculatedPath = fieldPath.filter((path) => {\n const isEmpty = isNil(path);\n const isNumber = isFinite(+path);\n return (!isEmpty && !isNumber) || false;\n });\n\n const multipleFieldMetadata: CslpDataMultipleFieldMetadata =\n getMultipleFieldMetadata(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n /**\n * The index in the end of the field does not represent a field.\n * It represents the index of the field in the multiple field.\n * Hence, we pop it out.\n */\n if (isFinite(+fieldPath[fieldPath.length - 1])) {\n fieldPath.pop();\n }\n\n return {\n entry_uid,\n content_type_uid,\n variant,\n locale,\n cslpValue: cslpValue,\n fieldPath: calculatedPath.join(\".\"),\n fieldPathWithIndex: fieldPath.join(\".\"),\n multipleFieldMetadata: multipleFieldMetadata,\n instance: {\n fieldPathWithIndex: instancePathWithInstance,\n },\n };\n}\n\n/**\n * Returns the parent path details of a given field path in CSLP format.\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the entry.\n * @param locale - The locale of the entry.\n * @param fieldPath - The field path to get the parent path details for.\n * @returns The parent path details in CSLP format, or null if the field path does not have a parent.\n */\nfunction getParentPathDetails(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataParentDetails | null {\n const index = findLastIndex(fieldPath, (path) => isFinite(+path));\n if (index === -1) return null;\n\n const parentPath = fieldPath.slice(0, index);\n return {\n parentPath: parentPath.join(\".\"),\n parentCslpValue: [\n content_type_uid,\n entry_uid,\n locale,\n ...parentPath,\n ].join(\".\"),\n };\n}\n\n/**\n * Returns metadata for a multiple field in a content entry.\n * @summary ONLY USE THESE RETURNED VALUES WHEN FIELD IS MULTIPLE\n * @summary IT GIVES WRONG DATA IF FIELD IS NOT MULTIPLE\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the content entry.\n * @param locale - The locale of the content entry.\n * @param fieldPath - The path of the multiple field.\n * @returns The metadata for the multiple field.\n */\nfunction getMultipleFieldMetadata(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataMultipleFieldMetadata {\n const parentDetails = getParentPathDetails(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n const index = findLast(fieldPath, (path) => isFinite(+path));\n\n return {\n parentDetails: parentDetails,\n index: isNil(index) ? -1 : +index,\n };\n}\n\n//TODO: move this to editbutton\n/**\n * Adds an outline to the clicked element and triggers a callback function.\n * @param e - The MouseEvent object representing the click event.\n * @param callback - An optional callback function that will be called with the CSLP tag and highlighted element as arguments.\n */\nexport function addCslpOutline(\n e: MouseEvent,\n callback?: (args: {\n cslpTag: string;\n highlightedElement: HTMLElement;\n }) => void\n): void {\n const elements = Config.get().elements;\n\n let trigger = true;\n const eventTargets = e.composedPath();\n\n for (const eventTarget of eventTargets) {\n const element = eventTarget as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n\n const cslpTag = element.getAttribute(\"data-cslp\");\n\n if (trigger && isValidCslp(cslpTag)) {\n if (elements.highlightedElement)\n elements.highlightedElement.classList.remove(\n cslpTagStyles()[\"cslp-edit-mode\"]\n );\n element.classList.add(cslpTagStyles()[\"cslp-edit-mode\"]);\n\n const updatedElements = elements;\n updatedElements.highlightedElement =\n element as DeepSignal<HTMLElement>;\n Config.set(\"elements\", updatedElements);\n\n callback?.({\n cslpTag: cslpTag,\n highlightedElement: element,\n });\n\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(cslpTagStyles()[\"cslp-edit-mode\"]);\n }\n }\n}\n"],"mappings":"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","names":["parts"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/cslp/cslpdata.ts"],"sourcesContent":["import { isNil, isFinite, findLastIndex, findLast } from \"lodash-es\";\nimport {\n CslpData,\n CslpDataMultipleFieldMetadata,\n CslpDataParentDetails,\n} from \"./types/cslp.types\";\nimport Config from \"../configManager/configManager\";\nimport { DeepSignal } from \"deepsignal\";\nimport { cslpTagStyles } from \"../livePreview/editButton/editButton.style\";\n\n/**\n * Validates that the required CSLP parts (content_type_uid, entry_uid/entry_uid_variant_uid, locale) are non-empty.\n * @param parts The array of parts from splitting the CSLP string by \".\"\n * @returns `true` if all required parts (first 3) are non-empty, `false` otherwise.\n */\nfunction areRequiredPartsNonEmpty(parts: string[]): boolean {\n // Check that we have at least 3 parts\n if (parts.length < 3) {\n return false;\n }\n // Verify that content_type_uid (parts[0]), entry_uid/entry_uid_variant_uid (parts[1]), and locale (parts[2]) are all non-empty\n return parts[0].length > 0 && parts[1].length > 0 && parts[2].length > 0;\n}\n\n/**\n * Validates if a CSLP value string is valid.\n * \n * Supports two formats:\n * - **v1 format**: `content_type_uid.entry_uid.locale[.field_path]` (requires at least 3 parts)\n * - **v2 format**: `v2:content_type_uid.entry_uid_variant_uid.locale[.field_path]` \n * (requires at least 3 parts, entry_uid_variant_uid must contain underscore separating entry_uid and variant_uid)\n * \n * @param cslpValue The CSLP value string to validate (can be null or undefined).\n * @returns Type predicate: `true` if the CSLP value is valid (narrows type to `string`), `false` otherwise.\n * \n * @example\n * Valid v1 format\n * isValidCslp(\"page.entry123.en-us\") -> true\n * isValidCslp(\"page.entry123.en-us.title\") -> true\n * \n * Valid v2 format\n * isValidCslp(\"v2:page.entry123_variant456.en-us\") -> true\n * isValidCslp(\"v2:page.entry123_variant456.en-us.title\") -> true\n * \n * Invalid cases\n * isValidCslp(null) -> false\n * isValidCslp(\"invalid\") -> false (less than 3 parts)\n * isValidCslp(\"v2:page.entry123.en-us\") -> false (missing underscore in entry_uid_variant_uid)\n */\nexport function isValidCslp(\n cslpValue: string | null | undefined\n): cslpValue is string {\n // Return false for null, undefined, or empty string\n if (!cslpValue) {\n return false;\n }\n\n // Check for v2 format (starts with \"v2:\")\n if (cslpValue.startsWith(\"v2:\")) {\n const dataAfterPrefix = cslpValue.substring(3); // Remove \"v2:\" prefix\n const parts = dataAfterPrefix.split(\".\");\n // v2 format requires at least 3 parts: content_type_uid.entry_uid_variant_uid.locale\n // Verify that content_type_uid, entry_uid_variant_uid, and locale are all non-empty\n if (!areRequiredPartsNonEmpty(parts)) {\n return false;\n }\n // Verify that entry_uid_variant_uid (second part) contains both entry_uid and variant_uid separated by at least one underscore\n const entryUidVariantUid = parts[1];\n const entryVariantParts = entryUidVariantUid.split(\"_\");\n // Check that we have at least 2 parts (entry_uid and variant_uid) and all parts are non-empty\n return entryVariantParts.length >= 2 && entryVariantParts.every((part) => part.length > 0);\n }\n\n // v1 format (default, no prefix)\n const parts = cslpValue.split(\".\");\n // v1 format requires at least 3 parts: content_type_uid.entry_uid.locale\n // Verify that content_type_uid, entry_uid, and locale are all non-empty\n return areRequiredPartsNonEmpty(parts);\n}\n\n/**\n * Extracts details from a CSLP value string.\n * @param cslpValue The CSLP value string to extract details from.\n * @returns An object containing the extracted details.\n */\nexport function extractDetailsFromCslp(cslpValue: string): CslpData {\n let [cslpVersion, cslpData] = cslpValue.split(\":\");\n // If the cslpVersion is greater than 2 letter which means it is v1 version of cslp data\n if (cslpVersion.length > 2) {\n cslpData = cslpVersion;\n cslpVersion = \"v1\";\n }\n\n const [content_type_uid, entryInfo, locale, ...fieldPath] =\n cslpData.split(\".\");\n\n let entry_uid: string;\n let variant;\n\n switch (cslpVersion) {\n case \"v2\": {\n const [uid, variant_uid] = entryInfo.split(\"_\");\n entry_uid = uid;\n variant = variant_uid;\n break;\n }\n default: {\n entry_uid = entryInfo;\n break;\n }\n }\n const instancePathWithInstance = fieldPath.join(\".\");\n const calculatedPath = fieldPath.filter((path) => {\n const isEmpty = isNil(path);\n const isNumber = isFinite(+path);\n return (!isEmpty && !isNumber) || false;\n });\n\n const multipleFieldMetadata: CslpDataMultipleFieldMetadata =\n getMultipleFieldMetadata(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n /**\n * The index in the end of the field does not represent a field.\n * It represents the index of the field in the multiple field.\n * Hence, we pop it out.\n */\n if (isFinite(+fieldPath[fieldPath.length - 1])) {\n fieldPath.pop();\n }\n\n return {\n entry_uid,\n content_type_uid,\n variant,\n locale,\n cslpValue: cslpValue,\n fieldPath: calculatedPath.join(\".\"),\n fieldPathWithIndex: fieldPath.join(\".\"),\n multipleFieldMetadata: multipleFieldMetadata,\n instance: {\n fieldPathWithIndex: instancePathWithInstance,\n },\n };\n}\n\n/**\n * Returns the parent path details of a given field path in CSLP format.\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the entry.\n * @param locale - The locale of the entry.\n * @param fieldPath - The field path to get the parent path details for.\n * @returns The parent path details in CSLP format, or null if the field path does not have a parent.\n */\nfunction getParentPathDetails(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataParentDetails | null {\n const index = findLastIndex(fieldPath, (path) => isFinite(+path));\n if (index === -1) return null;\n\n const parentPath = fieldPath.slice(0, index);\n return {\n parentPath: parentPath.join(\".\"),\n parentCslpValue: [\n content_type_uid,\n entry_uid,\n locale,\n ...parentPath,\n ].join(\".\"),\n };\n}\n\n/**\n * Returns metadata for a multiple field in a content entry.\n * @summary ONLY USE THESE RETURNED VALUES WHEN FIELD IS MULTIPLE\n * @summary IT GIVES WRONG DATA IF FIELD IS NOT MULTIPLE\n * @param content_type_uid - The UID of the content type.\n * @param entry_uid - The UID of the content entry.\n * @param locale - The locale of the content entry.\n * @param fieldPath - The path of the multiple field.\n * @returns The metadata for the multiple field.\n */\nfunction getMultipleFieldMetadata(\n content_type_uid: string,\n entry_uid: string,\n locale: string,\n fieldPath: string[]\n): CslpDataMultipleFieldMetadata {\n const parentDetails = getParentPathDetails(\n content_type_uid,\n entry_uid,\n locale,\n fieldPath\n );\n\n const index = findLast(fieldPath, (path) => isFinite(+path));\n\n return {\n parentDetails: parentDetails,\n index: isNil(index) ? -1 : +index,\n };\n}\n\n//TODO: move this to editbutton\n/**\n * Adds an outline to the clicked element and triggers a callback function.\n * @param e - The MouseEvent object representing the click event.\n * @param callback - An optional callback function that will be called with the CSLP tag and highlighted element as arguments.\n */\nfunction highlightCslpElement(\n element: HTMLElement,\n cslpTag: string,\n elements: ReturnType<typeof Config.get>[\"elements\"],\n callback?: (args: { cslpTag: string; highlightedElement: HTMLElement }) => void\n): void {\n if (elements.highlightedElement)\n elements.highlightedElement.classList.remove(\n cslpTagStyles()[\"cslp-edit-mode\"]\n );\n element.classList.add(cslpTagStyles()[\"cslp-edit-mode\"]);\n const updatedElements = elements;\n updatedElements.highlightedElement = element as DeepSignal<HTMLElement>;\n Config.set(\"elements\", updatedElements);\n callback?.({ cslpTag, highlightedElement: element });\n}\n\nexport function addCslpOutline(\n e: MouseEvent,\n callback?: (args: {\n cslpTag: string;\n highlightedElement: HTMLElement;\n }) => void\n): void {\n const elements = Config.get().elements;\n\n let trigger = true;\n const eventTargets = e.composedPath();\n\n for (const eventTarget of eventTargets) {\n const element = eventTarget as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n\n const cslpTag = element.getAttribute(\"data-cslp\");\n\n if (trigger && isValidCslp(cslpTag)) {\n highlightCslpElement(element, cslpTag, elements, callback);\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(cslpTagStyles()[\"cslp-edit-mode\"]);\n }\n }\n\n // composedPath() misses elements that are visually under a sibling overlay;\n // fall back to elementsFromPoint so the Edit button can still find the field.\n if (trigger && Config.get().overlayPropagation?.enable) {\n const pointElements = document.elementsFromPoint(e.clientX, e.clientY);\n for (const el of pointElements) {\n const element = el as HTMLElement;\n if (element.nodeName === \"BODY\") break;\n if (typeof element?.getAttribute !== \"function\") continue;\n const cslpTag = element.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpTag)) {\n highlightCslpElement(element, cslpTag, elements, callback);\n break;\n }\n }\n }\n}\n"],"mappings":"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","names":["parts"]}
|
|
@@ -60,7 +60,7 @@ var _LightLivePreviewHoC = class _LightLivePreviewHoC {
|
|
|
60
60
|
static unsubscribeOnEntryChange() {
|
|
61
61
|
}
|
|
62
62
|
static getSdkVersion() {
|
|
63
|
-
return (typeof process !== "undefined" ? "4.4.
|
|
63
|
+
return (typeof process !== "undefined" ? "4.4.4" : void 0) ?? "";
|
|
64
64
|
}
|
|
65
65
|
};
|
|
66
66
|
_LightLivePreviewHoC.previewConstructors = {};
|