@contentstack/live-preview-utils 4.4.2 → 4.4.3
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 +3 -2
- package/dist/legacy/configManager/config.default.cjs +6 -0
- package/dist/legacy/configManager/config.default.cjs.map +1 -1
- package/dist/legacy/configManager/config.default.js +6 -0
- package/dist/legacy/configManager/config.default.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/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 +3 -3
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
- 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/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/legacy/types/types.cjs.map +1 -1
- package/dist/legacy/types/types.d.cts +15 -1
- package/dist/legacy/types/types.d.ts +15 -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/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/getWholeFieldElement.cjs +38 -0
- 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/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/configManager/config.default.cjs +6 -0
- package/dist/modern/configManager/config.default.cjs.map +1 -1
- package/dist/modern/configManager/config.default.js +6 -0
- package/dist/modern/configManager/config.default.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/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 +3 -3
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
- 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/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/modern/types/types.cjs.map +1 -1
- package/dist/modern/types/types.d.cts +15 -1
- package/dist/modern/types/types.d.ts +15 -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/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/getWholeFieldElement.cjs +38 -0
- 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/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/README.md
CHANGED
|
@@ -29,11 +29,11 @@ npm install @contentstack/live-preview-utils
|
|
|
29
29
|
|
|
30
30
|
### Load from a CDN (advanced)
|
|
31
31
|
|
|
32
|
-
Pin the version to match your app (update `4.4.
|
|
32
|
+
Pin the version to match your app (update `4.4.3` when you upgrade):
|
|
33
33
|
|
|
34
34
|
```html
|
|
35
35
|
<script type="module" crossorigin="anonymous">
|
|
36
|
-
import ContentstackLivePreview from "https://esm.sh/@contentstack/live-preview-utils@4.4.
|
|
36
|
+
import ContentstackLivePreview from "https://esm.sh/@contentstack/live-preview-utils@4.4.3";
|
|
37
37
|
|
|
38
38
|
ContentstackLivePreview.init({
|
|
39
39
|
stackDetails: {
|
|
@@ -71,6 +71,7 @@ You can configure the SDK using the following options:
|
|
|
71
71
|
- [`mode`](docs/live-preview-configs.md#mode) (`preview` vs `builder`)
|
|
72
72
|
- [`editButton`](docs/live-preview-configs.md#editbutton)
|
|
73
73
|
- [`editInVisualBuilderButton`](docs/live-preview-configs.md#editinvisualbuilderbutton) (Start Editing outside Visual Editor)
|
|
74
|
+
- [`overlayPropagation`](docs/live-preview-configs.md#overlaypropagation) (opt-in fallback to pierce blocking sibling overlays during hover/click detection)
|
|
74
75
|
- [`cleanCslpOnProduction`](docs/live-preview-configs.md#cleancslponproduction)
|
|
75
76
|
- [`stackDetails`](docs/live-preview-configs.md#stackdetails) ([`apiKey`](docs/live-preview-configs.md#apikey), [`environment`](docs/live-preview-configs.md#environment))
|
|
76
77
|
- [`clientUrlParams`](docs/live-preview-configs.md#clienturlparams) — [NA](docs/live-preview-configs.md#na-config) / [EU](docs/live-preview-configs.md#eu-config)
|
|
@@ -41,6 +41,9 @@ function getUserInitData() {
|
|
|
41
41
|
enable: true,
|
|
42
42
|
position: "bottom-right"
|
|
43
43
|
},
|
|
44
|
+
overlayPropagation: {
|
|
45
|
+
enable: false
|
|
46
|
+
},
|
|
44
47
|
mode: "preview",
|
|
45
48
|
stackDetails: {
|
|
46
49
|
apiKey: "",
|
|
@@ -76,6 +79,9 @@ function getDefaultConfig() {
|
|
|
76
79
|
enable: true,
|
|
77
80
|
position: "bottom-right"
|
|
78
81
|
},
|
|
82
|
+
overlayPropagation: {
|
|
83
|
+
enable: false
|
|
84
|
+
},
|
|
79
85
|
hash: "",
|
|
80
86
|
mode: 1,
|
|
81
87
|
windowType: import_types.ILivePreviewWindowType.INDEPENDENT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/configManager/config.default.ts"],"sourcesContent":["import {\n ILivePreviewWindowType,\n type IConfig,\n type IInitData,\n} from \"../types/types\";\n\nexport function getUserInitData(): IInitData {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n\n mode: \"preview\",\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n branch: \"\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n },\n stackSdk: {\n live_preview: {},\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n\nexport function getDefaultConfig(): IConfig {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n\n hash: \"\",\n mode: 1,\n windowType: ILivePreviewWindowType.INDEPENDENT,\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n contentTypeUid: \"\",\n entryUid: \"\",\n locale: \"en-us\",\n branch: \"main\",\n masterLocale: \"en-us\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n url: \"https://app.contentstack.com:443\",\n },\n stackSdk: {\n live_preview: {},\n headers: {\n api_key: \"\",\n },\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n\n onChange() {\n return;\n },\n\n elements: {\n highlightedElement: null,\n },\n collab: {\n enable: false,\n fromShare: false,\n pauseFeedback: false,\n isFeedbackMode: false,\n inviteMetadata: {\n currentUser: {\n email: \"\",\n uid: \"\",\n },\n users: [],\n inviteUid: \"\",\n },\n payload: [],\n },\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAIO;AAEA,SAAS,kBAA6B;AACzC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IAEA,MAAM;AAAA,IAEN,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACZ;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IACpB,gCAAgC;AAAA,EACpC;AACJ;AAEO,SAAS,mBAA4B;AACxC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IAEA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,oCAAuB;AAAA,IAEnC,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,IAClB;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,SAAS;AAAA,QACL,SAAS;AAAA,MACb;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IAEpB,WAAW;AACP;AAAA,IACJ;AAAA,IAEA,UAAU;AAAA,MACN,oBAAoB;AAAA,IACxB;AAAA,IACA,QAAQ;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,QACZ,aAAa;AAAA,UACT,OAAO;AAAA,UACP,KAAK;AAAA,QACT;AAAA,QACA,OAAO,CAAC;AAAA,QACR,WAAW;AAAA,MACf;AAAA,MACA,SAAS,CAAC;AAAA,IACd;AAAA,IACA,gCAAgC;AAAA,EACpC;AACJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/configManager/config.default.ts"],"sourcesContent":["import {\n ILivePreviewWindowType,\n type IConfig,\n type IInitData,\n} from \"../types/types\";\n\nexport function getUserInitData(): IInitData {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n overlayPropagation: {\n enable: false,\n },\n\n mode: \"preview\",\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n branch: \"\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n },\n stackSdk: {\n live_preview: {},\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n\nexport function getDefaultConfig(): IConfig {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n overlayPropagation: {\n enable: false,\n },\n\n hash: \"\",\n mode: 1,\n windowType: ILivePreviewWindowType.INDEPENDENT,\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n contentTypeUid: \"\",\n entryUid: \"\",\n locale: \"en-us\",\n branch: \"main\",\n masterLocale: \"en-us\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n url: \"https://app.contentstack.com:443\",\n },\n stackSdk: {\n live_preview: {},\n headers: {\n api_key: \"\",\n },\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n\n onChange() {\n return;\n },\n\n elements: {\n highlightedElement: null,\n },\n collab: {\n enable: false,\n fromShare: false,\n pauseFeedback: false,\n isFeedbackMode: false,\n inviteMetadata: {\n currentUser: {\n email: \"\",\n uid: \"\",\n },\n users: [],\n inviteUid: \"\",\n },\n payload: [],\n },\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAIO;AAEA,SAAS,kBAA6B;AACzC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IACA,oBAAoB;AAAA,MAChB,QAAQ;AAAA,IACZ;AAAA,IAEA,MAAM;AAAA,IAEN,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACZ;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IACpB,gCAAgC;AAAA,EACpC;AACJ;AAEO,SAAS,mBAA4B;AACxC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IACA,oBAAoB;AAAA,MAChB,QAAQ;AAAA,IACZ;AAAA,IAEA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,oCAAuB;AAAA,IAEnC,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,IAClB;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,SAAS;AAAA,QACL,SAAS;AAAA,MACb;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IAEpB,WAAW;AACP;AAAA,IACJ;AAAA,IAEA,UAAU;AAAA,MACN,oBAAoB;AAAA,IACxB;AAAA,IACA,QAAQ;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,QACZ,aAAa;AAAA,UACT,OAAO;AAAA,UACP,KAAK;AAAA,QACT;AAAA,QACA,OAAO,CAAC;AAAA,QACR,WAAW;AAAA,MACf;AAAA,MACA,SAAS,CAAC;AAAA,IACd;AAAA,IACA,gCAAgC;AAAA,EACpC;AACJ;","names":[]}
|
|
@@ -20,6 +20,9 @@ function getUserInitData() {
|
|
|
20
20
|
enable: true,
|
|
21
21
|
position: "bottom-right"
|
|
22
22
|
},
|
|
23
|
+
overlayPropagation: {
|
|
24
|
+
enable: false
|
|
25
|
+
},
|
|
23
26
|
mode: "preview",
|
|
24
27
|
stackDetails: {
|
|
25
28
|
apiKey: "",
|
|
@@ -55,6 +58,9 @@ function getDefaultConfig() {
|
|
|
55
58
|
enable: true,
|
|
56
59
|
position: "bottom-right"
|
|
57
60
|
},
|
|
61
|
+
overlayPropagation: {
|
|
62
|
+
enable: false
|
|
63
|
+
},
|
|
58
64
|
hash: "",
|
|
59
65
|
mode: 1,
|
|
60
66
|
windowType: ILivePreviewWindowType.INDEPENDENT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/configManager/config.default.ts"],"sourcesContent":["import {\n ILivePreviewWindowType,\n type IConfig,\n type IInitData,\n} from \"../types/types\";\n\nexport function getUserInitData(): IInitData {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n\n mode: \"preview\",\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n branch: \"\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n },\n stackSdk: {\n live_preview: {},\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n\nexport function getDefaultConfig(): IConfig {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n\n hash: \"\",\n mode: 1,\n windowType: ILivePreviewWindowType.INDEPENDENT,\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n contentTypeUid: \"\",\n entryUid: \"\",\n locale: \"en-us\",\n branch: \"main\",\n masterLocale: \"en-us\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n url: \"https://app.contentstack.com:443\",\n },\n stackSdk: {\n live_preview: {},\n headers: {\n api_key: \"\",\n },\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n\n onChange() {\n return;\n },\n\n elements: {\n highlightedElement: null,\n },\n collab: {\n enable: false,\n fromShare: false,\n pauseFeedback: false,\n isFeedbackMode: false,\n inviteMetadata: {\n currentUser: {\n email: \"\",\n uid: \"\",\n },\n users: [],\n inviteUid: \"\",\n },\n payload: [],\n },\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n"],"mappings":";;;AAAA;AAAA,EACI;AAAA,OAGG;AAEA,SAAS,kBAA6B;AACzC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IAEA,MAAM;AAAA,IAEN,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACZ;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IACpB,gCAAgC;AAAA,EACpC;AACJ;AAEO,SAAS,mBAA4B;AACxC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IAEA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,uBAAuB;AAAA,IAEnC,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,IAClB;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,SAAS;AAAA,QACL,SAAS;AAAA,MACb;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IAEpB,WAAW;AACP;AAAA,IACJ;AAAA,IAEA,UAAU;AAAA,MACN,oBAAoB;AAAA,IACxB;AAAA,IACA,QAAQ;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,QACZ,aAAa;AAAA,UACT,OAAO;AAAA,UACP,KAAK;AAAA,QACT;AAAA,QACA,OAAO,CAAC;AAAA,QACR,WAAW;AAAA,MACf;AAAA,MACA,SAAS,CAAC;AAAA,IACd;AAAA,IACA,gCAAgC;AAAA,EACpC;AACJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/configManager/config.default.ts"],"sourcesContent":["import {\n ILivePreviewWindowType,\n type IConfig,\n type IInitData,\n} from \"../types/types\";\n\nexport function getUserInitData(): IInitData {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n overlayPropagation: {\n enable: false,\n },\n\n mode: \"preview\",\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n branch: \"\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n },\n stackSdk: {\n live_preview: {},\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n\nexport function getDefaultConfig(): IConfig {\n return {\n ssr: true,\n enable: true,\n debug: false,\n cleanCslpOnProduction: true,\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n editInVisualBuilderButton: {\n enable: true,\n position: \"bottom-right\"\n },\n overlayPropagation: {\n enable: false,\n },\n\n hash: \"\",\n mode: 1,\n windowType: ILivePreviewWindowType.INDEPENDENT,\n\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n contentTypeUid: \"\",\n entryUid: \"\",\n locale: \"en-us\",\n branch: \"main\",\n masterLocale: \"en-us\",\n },\n\n clientUrlParams: {\n protocol: \"https\",\n host: \"app.contentstack.com\",\n port: 443,\n url: \"https://app.contentstack.com:443\",\n },\n stackSdk: {\n live_preview: {},\n headers: {\n api_key: \"\",\n },\n environment: \"\",\n },\n runScriptsOnUpdate: false,\n\n onChange() {\n return;\n },\n\n elements: {\n highlightedElement: null,\n },\n collab: {\n enable: false,\n fromShare: false,\n pauseFeedback: false,\n isFeedbackMode: false,\n inviteMetadata: {\n currentUser: {\n email: \"\",\n uid: \"\",\n },\n users: [],\n inviteUid: \"\",\n },\n payload: [],\n },\n enableLivePreviewOutsideIframe: undefined,\n };\n}\n"],"mappings":";;;AAAA;AAAA,EACI;AAAA,OAGG;AAEA,SAAS,kBAA6B;AACzC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IACA,oBAAoB;AAAA,MAChB,QAAQ;AAAA,IACZ;AAAA,IAEA,MAAM;AAAA,IAEN,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ;AAAA,IACZ;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IACpB,gCAAgC;AAAA,EACpC;AACJ;AAEO,SAAS,mBAA4B;AACxC,SAAO;AAAA,IACH,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,uBAAuB;AAAA,IACvB,YAAY;AAAA,MACR,QAAQ;AAAA,MACR,SAAS,CAAC;AAAA,MACV,UAAU;AAAA,MACV,yBAAyB;AAAA,IAC7B;AAAA,IACA,2BAA2B;AAAA,MACvB,QAAQ;AAAA,MACR,UAAU;AAAA,IACd;AAAA,IACA,oBAAoB;AAAA,MAChB,QAAQ;AAAA,IACZ;AAAA,IAEA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,YAAY,uBAAuB;AAAA,IAEnC,cAAc;AAAA,MACV,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,IAClB;AAAA,IAEA,iBAAiB;AAAA,MACb,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACN,cAAc,CAAC;AAAA,MACf,SAAS;AAAA,QACL,SAAS;AAAA,MACb;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,IACA,oBAAoB;AAAA,IAEpB,WAAW;AACP;AAAA,IACJ;AAAA,IAEA,UAAU;AAAA,MACN,oBAAoB;AAAA,IACxB;AAAA,IACA,QAAQ;AAAA,MACJ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,QACZ,aAAa;AAAA,UACT,OAAO;AAAA,UACP,KAAK;AAAA,QACT;AAAA,QACA,OAAO,CAAC;AAAA,QACR,WAAW;AAAA,MACf;AAAA,MACA,SAAS,CAAC;AAAA,IACd;AAAA,IACA,gCAAgC;AAAA,EACpC;AACJ;","names":[]}
|
|
@@ -69,7 +69,7 @@ var handleClientUrlParams = (userConfig) => {
|
|
|
69
69
|
import_configManager.default.set("clientUrlParams.url", url);
|
|
70
70
|
};
|
|
71
71
|
var handleInitData = (initData) => {
|
|
72
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
72
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A;
|
|
73
73
|
const config = import_configManager.default.get();
|
|
74
74
|
const stackSdk = initData.stackSdk || config.stackSdk;
|
|
75
75
|
import_configManager.default.set(
|
|
@@ -100,12 +100,15 @@ var handleInitData = (initData) => {
|
|
|
100
100
|
enable: ((_r = initData.editInVisualBuilderButton) == null ? void 0 : _r.enable) ?? ((_t = (_s = stackSdk.live_preview) == null ? void 0 : _s.editInVisualBuilderButton) == null ? void 0 : _t.enable) ?? config.editInVisualBuilderButton.enable,
|
|
101
101
|
position: ((_u = initData.editInVisualBuilderButton) == null ? void 0 : _u.position) ?? ((_v = stackSdk.live_preview) == null ? void 0 : _v.position) ?? config.editInVisualBuilderButton.position ?? "bottom-right"
|
|
102
102
|
});
|
|
103
|
+
import_configManager.default.set("overlayPropagation", {
|
|
104
|
+
enable: ((_w = initData.overlayPropagation) == null ? void 0 : _w.enable) ?? ((_y = (_x = stackSdk.live_preview) == null ? void 0 : _x.overlayPropagation) == null ? void 0 : _y.enable) ?? config.overlayPropagation.enable
|
|
105
|
+
});
|
|
103
106
|
import_configManager.default.set(
|
|
104
107
|
"enableLivePreviewOutsideIframe",
|
|
105
108
|
initData.enableLivePreviewOutsideIframe ?? config.enableLivePreviewOutsideIframe
|
|
106
109
|
);
|
|
107
110
|
handleClientUrlParams(
|
|
108
|
-
initData.clientUrlParams ?? ((
|
|
111
|
+
initData.clientUrlParams ?? ((_z = stackSdk.live_preview) == null ? void 0 : _z.clientUrlParams) ?? config.clientUrlParams
|
|
109
112
|
);
|
|
110
113
|
if (initData.mode) {
|
|
111
114
|
switch (initData.mode) {
|
|
@@ -126,7 +129,7 @@ var handleInitData = (initData) => {
|
|
|
126
129
|
}
|
|
127
130
|
import_configManager.default.set(
|
|
128
131
|
"debug",
|
|
129
|
-
initData.debug ?? ((
|
|
132
|
+
initData.debug ?? ((_A = stackSdk.live_preview) == null ? void 0 : _A.debug) ?? config.debug
|
|
130
133
|
);
|
|
131
134
|
handleStackDetails(initData, stackSdk);
|
|
132
135
|
};
|
|
@@ -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: \n initData.editInVisualBuilderButton?.position ??\n stackSdk.live_preview?.position ??\n config.editInVisualBuilderButton.position ??\n \"bottom-right\",\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKO;AACP,2BAAmB;AAEnB,IAAM,wBAAwB,CAAC,eAAgD;AAC3E,QAAM,SAAS,qBAAAA,QAAO,IAAI;AAC1B,QAAM,kBAAkB,OAAO;AAE/B,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,WAAW,QAAQ,OAAO,gBAAgB;AAAA,EAC9C;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,WAAW,YAAY,gBAAgB;AAAA,EAC3C;AACA,uBAAAA,QAAO,IAAI,wBAAwB,WAAW,QAAQ,gBAAgB,IAAI;AAE1E,MAAI,WAAW,aAAa,UAAa,WAAW,SAAS,QAAW;AACpE,YAAQ,WAAW,UAAU;AAAA,MACzB,KAAK,QAAQ;AACT,6BAAAA,QAAO,IAAI,wBAAwB,EAAE;AACrC;AAAA,MACJ;AAAA,MACA,KAAK,SAAS;AACV,6BAAAA,QAAO,IAAI,wBAAwB,GAAG;AACtC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,OAAO,OAAO,gBAAgB;AAGlC,MAAI,OAAO,QAAQ,YAAY,KAAK,SAAS,GAAG,GAAG;AAC/C,WAAO,KAAK,MAAM,GAAG,EAAE;AACvB,yBAAAA,QAAO,IAAI,wBAAwB,IAAI;AAAA,EAC3C;AAEA,QAAM,MAAM,GAAG,gBAAgB,QAAQ,MAAM,OAAO,gBAAgB,IAAI,IAAI,gBAAgB,IAAI;AAEhG,uBAAAA,QAAO,IAAI,uBAAuB,GAAG;AACzC;AAIO,IAAM,iBAAiB,CAAC,aAAuC;AAnDtE;AAoDI,QAAM,SAAS,qBAAAA,QAAO,IAAI;AAC1B,QAAM,WAAW,SAAS,YAAY,OAAO;AAE7C,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,SAAS,YAAU,cAAS,iBAAT,mBAAuB,WAAU,OAAO;AAAA,EAC/D;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,MACA,cAAS,iBAAT,mBAAuB,QACnB,SAAS,QACR,OAAO,SAAS,aAAa,WAAW,QAAQ,SACjD;AAAA,EACR;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,SAAS,wBACL,cAAS,iBAAT,mBAAuB,uBACvB,OAAO;AAAA,EACf;AAEA,uBAAAA,QAAO,IAAI,YAAY,SAAS,YAAY,OAAO,QAAQ;AAE3D,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,SAAS,2BACL,cAAS,iBAAT,mBAAuB,0BACvB,OAAO;AAAA,EACf;AAEA,uBAAAA,QAAO,IAAI,cAAc;AAAA,IACrB,UACI,cAAS,eAAT,mBAAqB,aACrB,oBAAS,iBAAT,mBAAuB,eAAvB,mBAAmC,WACnC,OAAO,WAAW;AAAA;AAAA,IAEtB,SACI,MAAM,SAAQ,cAAS,eAAT,mBAAqB,OAAO,OAC1C,cAAS,eAAT,mBAAqB,YACf,cAAS,eAAT,mBAAqB,UACrB,MAAM,SAAQ,cAAS,iBAAT,mBAAuB,OAAO,OAC1C,cAAS,iBAAT,mBAAuB,YACvB,cAAS,iBAAT,mBAAuB,UACtB,OAAO,WAAW,WAAW,CAAC;AAAA,IAC3C,YACI,cAAS,eAAT,mBAAqB,eACrB,cAAS,iBAAT,mBAAuB,aACvB,OAAO,WAAW,YAClB;AAAA,IAEJ,2BACI,cAAS,eAAT,mBAAqB,8BACrB,cAAS,iBAAT,mBAAuB,4BACvB,OAAO,WAAW,2BAClB;AAAA,EACR,CAAC;AAED,uBAAAA,QAAO,IAAI,6BAA6B;AAAA,IACpC,UACI,cAAS,8BAAT,mBAAoC,aACpC,oBAAS,iBAAT,mBAAuB,8BAAvB,mBAAkD,WAClD,OAAO,0BAA0B;AAAA,IACrC,YACI,cAAS,8BAAT,mBAAoC,eACpC,cAAS,iBAAT,mBAAuB,aACvB,OAAO,0BAA0B,YACjC;AAAA,EACR,CAAC;AAED,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,SAAS,kCACL,OAAO;AAAA,EACf;AAGA;AAAA,IACI,SAAS,qBACL,cAAS,iBAAT,mBAAuB,oBACvB,OAAO;AAAA,EACf;AAEA,MAAI,SAAS,MAAM;AACf,YAAQ,SAAS,MAAM;AAAA,MACnB,KAAK,WAAW;AACZ,6BAAAA,QAAO,IAAI,QAAQ,oCAAuB,OAAO;AACjD;AAAA,MACJ;AAAA,MACA,KAAK,WAAW;AACZ,6BAAAA,QAAO,IAAI,QAAQ,oCAAuB,OAAO;AACjD;AAAA,MACJ;AAAA,MACA,SAAS;AACL,cAAM,IAAI;AAAA,UACN;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,IACA,SAAS,WAAS,cAAS,iBAAT,mBAAuB,UAAS,OAAO;AAAA,EAC7D;AAEA,qBAAmB,UAAU,QAAqB;AACtD;AAEA,SAAS,mBACL,UACA,UACI;AArKR;AAsKI,QAAM,SAAS,qBAAAA,QAAO,IAAI;AAE1B,uBAAAA,QAAO;AAAA,IACH;AAAA,MACA,cAAS,iBAAT,mBAAuB,WAAU,OAAO,aAAa;AAAA,EACzD;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,MACA,cAAS,iBAAT,mBAAuB,gBACnB,SAAS,eACT,OAAO,aAAa;AAAA,EAC5B;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,MACA,cAAS,iBAAT,mBAAuB,WACnB,SAAS,YACT,cAAS,YAAT,mBAAkB,WAClB,OAAO,aAAa;AAAA,EAC5B;AAEA,uBAAAA,QAAO;AAAA,IACH;AAAA,MACA,cAAS,iBAAT,mBAAuB,WAAU,OAAO,aAAa;AAAA,EACzD;AAEA,MAAI,OAAO,QAAQ,oCAAuB,SAAS;AAC/C,QAAI,CAAC,OAAO,aAAa,aAAa;AAClC,YAAM,MAAM,2CAA2C;AAAA,IAC3D;AAEA,QAAI,CAAC,OAAO,aAAa,QAAQ;AAC7B,YAAM,MAAM,uCAAuC;AAAA,IACvD;AAAA,EACJ;AACJ;AAEO,IAAM,mBAAmB;AAAA,EAC5B,iBAAiB;AACrB;","names":["Config"]}
|
|
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"]}
|
|
@@ -38,7 +38,7 @@ var handleClientUrlParams = (userConfig) => {
|
|
|
38
38
|
Config.set("clientUrlParams.url", url);
|
|
39
39
|
};
|
|
40
40
|
var handleInitData = (initData) => {
|
|
41
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
41
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A;
|
|
42
42
|
const config = Config.get();
|
|
43
43
|
const stackSdk = initData.stackSdk || config.stackSdk;
|
|
44
44
|
Config.set(
|
|
@@ -69,12 +69,15 @@ var handleInitData = (initData) => {
|
|
|
69
69
|
enable: ((_r = initData.editInVisualBuilderButton) == null ? void 0 : _r.enable) ?? ((_t = (_s = stackSdk.live_preview) == null ? void 0 : _s.editInVisualBuilderButton) == null ? void 0 : _t.enable) ?? config.editInVisualBuilderButton.enable,
|
|
70
70
|
position: ((_u = initData.editInVisualBuilderButton) == null ? void 0 : _u.position) ?? ((_v = stackSdk.live_preview) == null ? void 0 : _v.position) ?? config.editInVisualBuilderButton.position ?? "bottom-right"
|
|
71
71
|
});
|
|
72
|
+
Config.set("overlayPropagation", {
|
|
73
|
+
enable: ((_w = initData.overlayPropagation) == null ? void 0 : _w.enable) ?? ((_y = (_x = stackSdk.live_preview) == null ? void 0 : _x.overlayPropagation) == null ? void 0 : _y.enable) ?? config.overlayPropagation.enable
|
|
74
|
+
});
|
|
72
75
|
Config.set(
|
|
73
76
|
"enableLivePreviewOutsideIframe",
|
|
74
77
|
initData.enableLivePreviewOutsideIframe ?? config.enableLivePreviewOutsideIframe
|
|
75
78
|
);
|
|
76
79
|
handleClientUrlParams(
|
|
77
|
-
initData.clientUrlParams ?? ((
|
|
80
|
+
initData.clientUrlParams ?? ((_z = stackSdk.live_preview) == null ? void 0 : _z.clientUrlParams) ?? config.clientUrlParams
|
|
78
81
|
);
|
|
79
82
|
if (initData.mode) {
|
|
80
83
|
switch (initData.mode) {
|
|
@@ -95,7 +98,7 @@ var handleInitData = (initData) => {
|
|
|
95
98
|
}
|
|
96
99
|
Config.set(
|
|
97
100
|
"debug",
|
|
98
|
-
initData.debug ?? ((
|
|
101
|
+
initData.debug ?? ((_A = stackSdk.live_preview) == null ? void 0 : _A.debug) ?? config.debug
|
|
99
102
|
);
|
|
100
103
|
handleStackDetails(initData, stackSdk);
|
|
101
104
|
};
|
|
@@ -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":[]}
|
|
@@ -138,7 +138,19 @@ 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 == null ? void 0 : callback({ cslpTag, highlightedElement: element });
|
|
151
|
+
}
|
|
141
152
|
function addCslpOutline(e, callback) {
|
|
153
|
+
var _a;
|
|
142
154
|
const elements = import_configManager.default.get().elements;
|
|
143
155
|
let trigger = true;
|
|
144
156
|
const eventTargets = e.composedPath();
|
|
@@ -148,23 +160,25 @@ function addCslpOutline(e, callback) {
|
|
|
148
160
|
if (typeof (element == null ? void 0 : element.getAttribute) !== "function") continue;
|
|
149
161
|
const cslpTag = element.getAttribute("data-cslp");
|
|
150
162
|
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 == null ? void 0 : callback({
|
|
160
|
-
cslpTag,
|
|
161
|
-
highlightedElement: element
|
|
162
|
-
});
|
|
163
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
163
164
|
trigger = false;
|
|
164
165
|
} else if (!trigger) {
|
|
165
166
|
element.classList.remove((0, import_editButton.cslpTagStyles)()["cslp-edit-mode"]);
|
|
166
167
|
}
|
|
167
168
|
}
|
|
169
|
+
if (trigger && ((_a = import_configManager.default.get().overlayPropagation) == null ? void 0 : _a.enable)) {
|
|
170
|
+
const pointElements = document.elementsFromPoint(e.clientX, e.clientY);
|
|
171
|
+
for (const el of pointElements) {
|
|
172
|
+
const element = el;
|
|
173
|
+
if (element.nodeName === "BODY") break;
|
|
174
|
+
if (typeof (element == null ? void 0 : element.getAttribute) !== "function") continue;
|
|
175
|
+
const cslpTag = element.getAttribute("data-cslp");
|
|
176
|
+
if (isValidCslp(cslpTag)) {
|
|
177
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
168
182
|
}
|
|
169
183
|
// Annotate the CommonJS export names for ESM import in node:
|
|
170
184
|
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,7 +104,19 @@ 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 == null ? void 0 : callback({ cslpTag, highlightedElement: element });
|
|
117
|
+
}
|
|
107
118
|
function addCslpOutline(e, callback) {
|
|
119
|
+
var _a;
|
|
108
120
|
const elements = Config.get().elements;
|
|
109
121
|
let trigger = true;
|
|
110
122
|
const eventTargets = e.composedPath();
|
|
@@ -114,23 +126,25 @@ function addCslpOutline(e, callback) {
|
|
|
114
126
|
if (typeof (element == null ? void 0 : element.getAttribute) !== "function") continue;
|
|
115
127
|
const cslpTag = element.getAttribute("data-cslp");
|
|
116
128
|
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 == null ? void 0 : callback({
|
|
126
|
-
cslpTag,
|
|
127
|
-
highlightedElement: element
|
|
128
|
-
});
|
|
129
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
129
130
|
trigger = false;
|
|
130
131
|
} else if (!trigger) {
|
|
131
132
|
element.classList.remove(cslpTagStyles()["cslp-edit-mode"]);
|
|
132
133
|
}
|
|
133
134
|
}
|
|
135
|
+
if (trigger && ((_a = Config.get().overlayPropagation) == null ? void 0 : _a.enable)) {
|
|
136
|
+
const pointElements = document.elementsFromPoint(e.clientX, e.clientY);
|
|
137
|
+
for (const el of pointElements) {
|
|
138
|
+
const element = el;
|
|
139
|
+
if (element.nodeName === "BODY") break;
|
|
140
|
+
if (typeof (element == null ? void 0 : element.getAttribute) !== "function") continue;
|
|
141
|
+
const cslpTag = element.getAttribute("data-cslp");
|
|
142
|
+
if (isValidCslp(cslpTag)) {
|
|
143
|
+
highlightCslpElement(element, cslpTag, elements, callback);
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
134
148
|
}
|
|
135
149
|
export {
|
|
136
150
|
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.3" : void 0) ?? "";
|
|
64
64
|
}
|
|
65
65
|
};
|
|
66
66
|
_LightLivePreviewHoC.previewConstructors = {};
|
package/dist/legacy/light-sdk.js
CHANGED
|
@@ -38,7 +38,7 @@ var _LightLivePreviewHoC = class _LightLivePreviewHoC {
|
|
|
38
38
|
static unsubscribeOnEntryChange() {
|
|
39
39
|
}
|
|
40
40
|
static getSdkVersion() {
|
|
41
|
-
return (typeof process !== "undefined" ? "4.4.
|
|
41
|
+
return (typeof process !== "undefined" ? "4.4.3" : void 0) ?? "";
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
_LightLivePreviewHoC.previewConstructors = {};
|