@contentstack/live-preview-utils 1.4.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +1 -1
  2. package/dist/legacy/compare.cjs +115 -0
  3. package/dist/legacy/compare.cjs.map +1 -0
  4. package/dist/legacy/compare.d.cts +3 -0
  5. package/dist/legacy/compare.d.ts +3 -0
  6. package/dist/legacy/compare.js +80 -0
  7. package/dist/legacy/compare.js.map +1 -0
  8. package/dist/legacy/contentstack-live-preview-HOC.cjs +200 -0
  9. package/dist/legacy/contentstack-live-preview-HOC.cjs.map +1 -0
  10. package/dist/legacy/contentstack-live-preview-HOC.d.cts +26 -0
  11. package/dist/legacy/contentstack-live-preview-HOC.d.ts +26 -0
  12. package/dist/legacy/contentstack-live-preview-HOC.js +169 -0
  13. package/dist/legacy/contentstack-live-preview-HOC.js.map +1 -0
  14. package/dist/legacy/index.cjs +58 -0
  15. package/dist/legacy/index.cjs.map +1 -0
  16. package/dist/legacy/index.d.cts +7 -0
  17. package/dist/legacy/index.d.ts +7 -0
  18. package/dist/legacy/index.js +23 -0
  19. package/dist/legacy/index.js.map +1 -0
  20. package/dist/legacy/live-preview.cjs +511 -0
  21. package/dist/legacy/live-preview.cjs.map +1 -0
  22. package/dist/legacy/live-preview.d.cts +42 -0
  23. package/dist/{src → legacy}/live-preview.d.ts +5 -3
  24. package/dist/legacy/live-preview.js +495 -0
  25. package/dist/legacy/live-preview.js.map +1 -0
  26. package/dist/legacy/styles/compare.cjs +56 -0
  27. package/dist/legacy/styles/compare.cjs.map +1 -0
  28. package/dist/legacy/styles/compare.d.cts +3 -0
  29. package/dist/legacy/styles/compare.d.ts +3 -0
  30. package/dist/legacy/styles/compare.js +31 -0
  31. package/dist/legacy/styles/compare.js.map +1 -0
  32. package/dist/legacy/styles/live_preview.cjs +120 -0
  33. package/dist/legacy/styles/live_preview.cjs.map +1 -0
  34. package/dist/legacy/styles/live_preview.d.cts +8 -0
  35. package/dist/legacy/styles/live_preview.d.ts +8 -0
  36. package/dist/legacy/styles/live_preview.js +95 -0
  37. package/dist/legacy/styles/live_preview.js.map +1 -0
  38. package/dist/legacy/utils/camelCase.cjs +64 -0
  39. package/dist/legacy/utils/camelCase.cjs.map +1 -0
  40. package/dist/legacy/utils/camelCase.d.cts +3 -0
  41. package/dist/legacy/utils/camelCase.d.ts +3 -0
  42. package/dist/legacy/utils/camelCase.js +43 -0
  43. package/dist/legacy/utils/camelCase.js.map +1 -0
  44. package/dist/legacy/utils/compare.cjs +43 -0
  45. package/dist/legacy/utils/compare.cjs.map +1 -0
  46. package/dist/legacy/utils/compare.d.cts +3 -0
  47. package/dist/legacy/utils/compare.d.ts +3 -0
  48. package/dist/legacy/utils/compare.js +18 -0
  49. package/dist/legacy/utils/compare.js.map +1 -0
  50. package/dist/legacy/utils/defaults.cjs +59 -0
  51. package/dist/legacy/utils/defaults.cjs.map +1 -0
  52. package/dist/legacy/utils/defaults.d.cts +5 -0
  53. package/dist/legacy/utils/defaults.d.ts +5 -0
  54. package/dist/legacy/utils/defaults.js +34 -0
  55. package/dist/legacy/utils/defaults.js.map +1 -0
  56. package/dist/legacy/utils/handlePageTraversal.cjs +47 -0
  57. package/dist/legacy/utils/handlePageTraversal.cjs.map +1 -0
  58. package/dist/legacy/utils/handlePageTraversal.d.cts +3 -0
  59. package/dist/legacy/utils/handlePageTraversal.d.ts +3 -0
  60. package/dist/legacy/utils/handlePageTraversal.js +22 -0
  61. package/dist/legacy/utils/handlePageTraversal.js.map +1 -0
  62. package/dist/legacy/utils/handleUserConfig.cjs +124 -0
  63. package/dist/legacy/utils/handleUserConfig.cjs.map +1 -0
  64. package/dist/legacy/utils/handleUserConfig.d.cts +8 -0
  65. package/dist/legacy/utils/handleUserConfig.d.ts +8 -0
  66. package/dist/legacy/utils/handleUserConfig.js +98 -0
  67. package/dist/legacy/utils/handleUserConfig.js.map +1 -0
  68. package/dist/legacy/utils/index.cjs +241 -0
  69. package/dist/legacy/utils/index.cjs.map +1 -0
  70. package/dist/legacy/utils/index.d.cts +12 -0
  71. package/dist/legacy/utils/index.d.ts +12 -0
  72. package/dist/legacy/utils/index.js +209 -0
  73. package/dist/legacy/utils/index.js.map +1 -0
  74. package/dist/legacy/utils/public-logger.cjs +46 -0
  75. package/dist/legacy/utils/public-logger.cjs.map +1 -0
  76. package/dist/legacy/utils/public-logger.d.cts +8 -0
  77. package/dist/{src → legacy}/utils/public-logger.d.ts +3 -2
  78. package/dist/legacy/utils/public-logger.js +21 -0
  79. package/dist/legacy/utils/public-logger.js.map +1 -0
  80. package/dist/legacy/utils/types.cjs +19 -0
  81. package/dist/legacy/utils/types.cjs.map +1 -0
  82. package/dist/legacy/utils/types.d.cts +99 -0
  83. package/dist/{src → legacy}/utils/types.d.ts +19 -18
  84. package/dist/legacy/utils/types.js +1 -0
  85. package/dist/legacy/utils/types.js.map +1 -0
  86. package/dist/modern/compare.cjs +115 -0
  87. package/dist/modern/compare.cjs.map +1 -0
  88. package/dist/modern/compare.d.cts +3 -0
  89. package/dist/modern/compare.d.ts +3 -0
  90. package/dist/modern/compare.js +80 -0
  91. package/dist/modern/compare.js.map +1 -0
  92. package/dist/modern/contentstack-live-preview-HOC.cjs +200 -0
  93. package/dist/modern/contentstack-live-preview-HOC.cjs.map +1 -0
  94. package/dist/modern/contentstack-live-preview-HOC.d.cts +26 -0
  95. package/dist/modern/contentstack-live-preview-HOC.d.ts +26 -0
  96. package/dist/modern/contentstack-live-preview-HOC.js +169 -0
  97. package/dist/modern/contentstack-live-preview-HOC.js.map +1 -0
  98. package/dist/modern/index.cjs +58 -0
  99. package/dist/modern/index.cjs.map +1 -0
  100. package/dist/modern/index.d.cts +7 -0
  101. package/dist/modern/index.d.ts +7 -0
  102. package/dist/modern/index.js +23 -0
  103. package/dist/modern/index.js.map +1 -0
  104. package/dist/modern/live-preview.cjs +509 -0
  105. package/dist/modern/live-preview.cjs.map +1 -0
  106. package/dist/modern/live-preview.d.cts +42 -0
  107. package/dist/modern/live-preview.d.ts +42 -0
  108. package/dist/modern/live-preview.js +493 -0
  109. package/dist/modern/live-preview.js.map +1 -0
  110. package/dist/modern/styles/compare.cjs +56 -0
  111. package/dist/modern/styles/compare.cjs.map +1 -0
  112. package/dist/modern/styles/compare.d.cts +3 -0
  113. package/dist/modern/styles/compare.d.ts +3 -0
  114. package/dist/modern/styles/compare.js +31 -0
  115. package/dist/modern/styles/compare.js.map +1 -0
  116. package/dist/modern/styles/live_preview.cjs +120 -0
  117. package/dist/modern/styles/live_preview.cjs.map +1 -0
  118. package/dist/modern/styles/live_preview.d.cts +8 -0
  119. package/dist/modern/styles/live_preview.d.ts +8 -0
  120. package/dist/modern/styles/live_preview.js +95 -0
  121. package/dist/modern/styles/live_preview.js.map +1 -0
  122. package/dist/modern/utils/camelCase.cjs +63 -0
  123. package/dist/modern/utils/camelCase.cjs.map +1 -0
  124. package/dist/modern/utils/camelCase.d.cts +3 -0
  125. package/dist/modern/utils/camelCase.d.ts +3 -0
  126. package/dist/modern/utils/camelCase.js +42 -0
  127. package/dist/modern/utils/camelCase.js.map +1 -0
  128. package/dist/modern/utils/compare.cjs +43 -0
  129. package/dist/modern/utils/compare.cjs.map +1 -0
  130. package/dist/modern/utils/compare.d.cts +3 -0
  131. package/dist/modern/utils/compare.d.ts +3 -0
  132. package/dist/modern/utils/compare.js +18 -0
  133. package/dist/modern/utils/compare.js.map +1 -0
  134. package/dist/modern/utils/defaults.cjs +59 -0
  135. package/dist/modern/utils/defaults.cjs.map +1 -0
  136. package/dist/modern/utils/defaults.d.cts +5 -0
  137. package/dist/modern/utils/defaults.d.ts +5 -0
  138. package/dist/modern/utils/defaults.js +34 -0
  139. package/dist/modern/utils/defaults.js.map +1 -0
  140. package/dist/modern/utils/handlePageTraversal.cjs +47 -0
  141. package/dist/modern/utils/handlePageTraversal.cjs.map +1 -0
  142. package/dist/modern/utils/handlePageTraversal.d.cts +3 -0
  143. package/dist/modern/utils/handlePageTraversal.d.ts +3 -0
  144. package/dist/modern/utils/handlePageTraversal.js +22 -0
  145. package/dist/modern/utils/handlePageTraversal.js.map +1 -0
  146. package/dist/modern/utils/handleUserConfig.cjs +123 -0
  147. package/dist/modern/utils/handleUserConfig.cjs.map +1 -0
  148. package/dist/modern/utils/handleUserConfig.d.cts +8 -0
  149. package/dist/modern/utils/handleUserConfig.d.ts +8 -0
  150. package/dist/modern/utils/handleUserConfig.js +97 -0
  151. package/dist/modern/utils/handleUserConfig.js.map +1 -0
  152. package/dist/modern/utils/index.cjs +240 -0
  153. package/dist/modern/utils/index.cjs.map +1 -0
  154. package/dist/modern/utils/index.d.cts +12 -0
  155. package/dist/modern/utils/index.d.ts +12 -0
  156. package/dist/modern/utils/index.js +208 -0
  157. package/dist/modern/utils/index.js.map +1 -0
  158. package/dist/modern/utils/public-logger.cjs +46 -0
  159. package/dist/modern/utils/public-logger.cjs.map +1 -0
  160. package/dist/modern/utils/public-logger.d.cts +8 -0
  161. package/dist/modern/utils/public-logger.d.ts +8 -0
  162. package/dist/modern/utils/public-logger.js +21 -0
  163. package/dist/modern/utils/public-logger.js.map +1 -0
  164. package/dist/modern/utils/types.cjs +19 -0
  165. package/dist/modern/utils/types.cjs.map +1 -0
  166. package/dist/modern/utils/types.d.cts +99 -0
  167. package/dist/modern/utils/types.d.ts +99 -0
  168. package/dist/modern/utils/types.js +1 -0
  169. package/dist/modern/utils/types.js.map +1 -0
  170. package/package.json +35 -10
  171. package/dist/index.js +0 -2
  172. package/dist/index.js.map +0 -1
  173. package/dist/main.css +0 -89
  174. package/dist/main.css.map +0 -1
  175. package/dist/mustache.d.ts +0 -2
  176. package/dist/mustache.d.ts.map +0 -1
  177. package/dist/setupJest.d.ts +0 -1
  178. package/dist/setupJest.d.ts.map +0 -1
  179. package/dist/src/contentstack-live-preview-HOC.d.ts +0 -44
  180. package/dist/src/contentstack-live-preview-HOC.d.ts.map +0 -1
  181. package/dist/src/index.d.ts +0 -5
  182. package/dist/src/index.d.ts.map +0 -1
  183. package/dist/src/live-preview.d.ts.map +0 -1
  184. package/dist/src/utils/defaults.d.ts +0 -3
  185. package/dist/src/utils/defaults.d.ts.map +0 -1
  186. package/dist/src/utils/handleUserConfig.d.ts +0 -6
  187. package/dist/src/utils/handleUserConfig.d.ts.map +0 -1
  188. package/dist/src/utils/index.d.ts +0 -10
  189. package/dist/src/utils/index.d.ts.map +0 -1
  190. package/dist/src/utils/public-logger.d.ts.map +0 -1
  191. package/dist/src/utils/types.d.ts.map +0 -1
@@ -0,0 +1,495 @@
1
+ // src/live-preview.ts
2
+ import {
3
+ createSingularEditButton,
4
+ createMultipleEditButton,
5
+ addLivePreviewQueryTags,
6
+ getEditButtonPosition
7
+ } from "./utils/index.js";
8
+ import { PublicLogger } from "./utils/public-logger.js";
9
+ import { handleInitData } from "./utils/handleUserConfig.js";
10
+ import { userInitData } from "./utils/defaults.js";
11
+ import { livePreviewStyles } from "./styles/live_preview.js";
12
+ var LivePreview = class {
13
+ constructor(initData = userInitData) {
14
+ /**
15
+ * @hideconstructor
16
+ */
17
+ this.config = {
18
+ ssr: true,
19
+ enable: true,
20
+ runScriptsOnUpdate: false,
21
+ cleanCslpOnProduction: true,
22
+ hash: "",
23
+ editButton: {
24
+ enable: true,
25
+ exclude: [],
26
+ position: "top",
27
+ includeByQueryParameter: true
28
+ },
29
+ stackDetails: {
30
+ apiKey: "",
31
+ environment: "",
32
+ branch: "main",
33
+ contentTypeUid: "",
34
+ entryUid: ""
35
+ },
36
+ clientUrlParams: {
37
+ protocol: "https",
38
+ host: "app.contentstack.com",
39
+ port: 443,
40
+ url: "https://app.contentstack.com:443"
41
+ },
42
+ stackSdk: {
43
+ live_preview: {},
44
+ headers: {
45
+ api_key: ""
46
+ },
47
+ environment: ""
48
+ },
49
+ onChange: () => {
50
+ }
51
+ };
52
+ this.tooltip = null;
53
+ // this tooltip is responsible to redirect user to Contentstack edit page
54
+ this.currentElementBesideTooltip = null;
55
+ // this element helps to move tooltip with the scroll
56
+ this.isHoveringOnTooltip = false;
57
+ this.hideInterval = null;
58
+ this.tooltipChild = {
59
+ singular: null,
60
+ multiple: null
61
+ };
62
+ this.tooltipCurrentChild = "singular";
63
+ this.createCslpTooltip = () => {
64
+ if (!document.getElementById("cslp-tooltip") && this.config.editButton.enable) {
65
+ const tooltip = document.createElement("button");
66
+ const tooltipInnerContainer = document.createElement("div");
67
+ tooltipInnerContainer.classList.add(
68
+ livePreviewStyles()["cslp-tooltip-inner-container"]
69
+ );
70
+ tooltip.classList.add(livePreviewStyles()["cslp-tooltip"]);
71
+ tooltip.classList.add(livePreviewStyles()["cslp-tooltip"]);
72
+ tooltip.setAttribute("data-test-id", "cs-cslp-tooltip");
73
+ tooltip.id = "cslp-tooltip";
74
+ tooltipInnerContainer.id = "cslp-tooltip-inner-container";
75
+ tooltip.addEventListener("mouseover", () => {
76
+ this.toggleHoveringOnEditButton(true);
77
+ });
78
+ tooltip.addEventListener("mouseleave", (e) => {
79
+ this.toggleHoveringOnEditButton(false);
80
+ this.removeEditButtonStyle(e);
81
+ });
82
+ window.document.body.insertAdjacentElement("beforeend", tooltip);
83
+ this.tooltipChild.singular = createSingularEditButton(
84
+ this.scrollHandler
85
+ );
86
+ this.tooltipChild.multiple = createMultipleEditButton(
87
+ this.scrollHandler,
88
+ this.linkClickHandler
89
+ );
90
+ tooltipInnerContainer.innerHTML = "";
91
+ tooltipInnerContainer.appendChild(this.tooltipChild.singular);
92
+ tooltip.appendChild(tooltipInnerContainer);
93
+ this.tooltip = tooltip;
94
+ }
95
+ this.updateTooltipPosition();
96
+ };
97
+ this.toggleHoveringOnEditButton = (isHoveringOnTooltip) => {
98
+ this.isHoveringOnTooltip = isHoveringOnTooltip;
99
+ };
100
+ handleInitData(initData, this.config);
101
+ this.addEditStyleOnHover = this.addEditStyleOnHover.bind(this);
102
+ this.removeEditButtonStyle = this.removeEditButtonStyle.bind(this);
103
+ this.generateRedirectUrl = this.generateRedirectUrl.bind(this);
104
+ this.scrollHandler = this.scrollHandler.bind(this);
105
+ this.linkClickHandler = this.linkClickHandler.bind(this);
106
+ this.handleUserChange = this.handleUserChange.bind(this);
107
+ this.setOnChangeCallback = this.setOnChangeCallback.bind(this);
108
+ this.resolveIncomingMessage = this.resolveIncomingMessage.bind(this);
109
+ this.createCslpTooltip = this.createCslpTooltip.bind(this);
110
+ this.requestDataSync = this.requestDataSync.bind(this);
111
+ this.updateTooltipPosition = this.updateTooltipPosition.bind(this);
112
+ this.removeDataCslp = this.removeDataCslp.bind(this);
113
+ this.toggleHoveringOnEditButton = this.toggleHoveringOnEditButton.bind(this);
114
+ this.hideTooltip = this.hideTooltip.bind(this);
115
+ if (initData.debug) {
116
+ PublicLogger.debug(
117
+ "Contentstack Live Preview Debugging mode: config --",
118
+ this.config
119
+ );
120
+ }
121
+ if (this.config.enable) {
122
+ if (typeof document !== void 0 && document.readyState === "complete") {
123
+ this.requestDataSync();
124
+ } else {
125
+ window.addEventListener("load", this.requestDataSync);
126
+ }
127
+ window.addEventListener("message", this.resolveIncomingMessage);
128
+ window.addEventListener("scroll", this.updateTooltipPosition);
129
+ if (this.config.editButton.enable) {
130
+ window.addEventListener("mouseover", this.addEditStyleOnHover);
131
+ }
132
+ if (this.config.ssr) {
133
+ window.addEventListener("load", (e) => {
134
+ const allATags = document.querySelectorAll("a");
135
+ allATags.forEach((tag) => {
136
+ const docOrigin = document.location.origin;
137
+ if (tag.href && tag.href.includes(docOrigin)) {
138
+ const newUrl = addLivePreviewQueryTags(tag.href);
139
+ tag.href = newUrl;
140
+ }
141
+ });
142
+ });
143
+ window.addEventListener("click", (event) => {
144
+ const target = event.target;
145
+ const targetHref = target.href;
146
+ const docOrigin = document.location.origin;
147
+ if (targetHref && targetHref.includes(docOrigin) && !targetHref.includes("live_preview")) {
148
+ const newUrl = addLivePreviewQueryTags(target.href);
149
+ event.target.href = newUrl || target.href;
150
+ }
151
+ });
152
+ }
153
+ } else if (this.config.cleanCslpOnProduction) {
154
+ this.removeDataCslp();
155
+ }
156
+ }
157
+ addEditStyleOnHover(e) {
158
+ var _a, _b;
159
+ let trigger = true;
160
+ const eventTargets = e.composedPath();
161
+ for (const eventTarget of eventTargets) {
162
+ const element = eventTarget;
163
+ if (element.nodeName === "BODY")
164
+ break;
165
+ if (typeof (element == null ? void 0 : element.getAttribute) !== "function")
166
+ continue;
167
+ const cslpTag = element.getAttribute("data-cslp");
168
+ if (trigger && cslpTag) {
169
+ if (this.hideInterval) {
170
+ clearInterval(this.hideInterval);
171
+ this.hideInterval = null;
172
+ }
173
+ if (this.currentElementBesideTooltip) {
174
+ this.currentElementBesideTooltip.classList.remove(
175
+ livePreviewStyles()["cslp-edit-mode"]
176
+ );
177
+ this.currentElementBesideTooltip.removeEventListener(
178
+ "mouseleave",
179
+ this.removeEditButtonStyle
180
+ );
181
+ }
182
+ element.classList.add(livePreviewStyles()["cslp-edit-mode"]);
183
+ this.currentElementBesideTooltip = element;
184
+ this.currentElementBesideTooltip.addEventListener(
185
+ "mouseleave",
186
+ this.removeEditButtonStyle
187
+ );
188
+ if (this.updateTooltipPosition()) {
189
+ (_a = this.tooltip) == null ? void 0 : _a.setAttribute("current-data-cslp", cslpTag);
190
+ (_b = this.tooltip) == null ? void 0 : _b.setAttribute(
191
+ "current-href",
192
+ element.getAttribute("href") ?? ""
193
+ );
194
+ }
195
+ trigger = false;
196
+ } else if (!trigger) {
197
+ element.classList.remove(livePreviewStyles()["cslp-edit-mode"]);
198
+ }
199
+ }
200
+ }
201
+ removeEditButtonStyle(e) {
202
+ if (!this.currentElementBesideTooltip || !this.tooltip)
203
+ return false;
204
+ let trigger = true;
205
+ const eventTargets = e.composedPath();
206
+ for (const eventTarget of eventTargets) {
207
+ const element = eventTarget;
208
+ if (element.nodeName === "BODY")
209
+ break;
210
+ if (typeof (element == null ? void 0 : element.getAttribute) !== "function")
211
+ continue;
212
+ const cslpTag = element.getAttribute("data-cslp");
213
+ if (trigger && cslpTag) {
214
+ this.hideInterval = setInterval(this.hideTooltip, 500);
215
+ trigger = false;
216
+ } else if (!trigger) {
217
+ element.classList.remove(livePreviewStyles()["cslp-edit-mode"]);
218
+ }
219
+ }
220
+ }
221
+ hideTooltip() {
222
+ if (!this.currentElementBesideTooltip || !this.tooltip || this.isHoveringOnTooltip)
223
+ return false;
224
+ this.currentElementBesideTooltip.classList.remove(
225
+ livePreviewStyles()["cslp-edit-mode"]
226
+ );
227
+ this.currentElementBesideTooltip.removeEventListener(
228
+ "mouseleave",
229
+ this.removeEditButtonStyle
230
+ );
231
+ this.currentElementBesideTooltip = null;
232
+ this.tooltip.style.top = "-100%";
233
+ }
234
+ generateRedirectUrl(content_type_uid, locale = "en-us", entry_uid, preview_field) {
235
+ if (!this.config.stackDetails.apiKey) {
236
+ throw `To use edit tags, you must provide the stack API key. Specify the API key while initializing the Live Preview SDK.
237
+
238
+ ContentstackLivePreview.init({
239
+ ...,
240
+ stackDetails: {
241
+ apiKey: 'your-api-key'
242
+ },
243
+ ...
244
+ })`;
245
+ }
246
+ if (!this.config.stackDetails.environment) {
247
+ throw `To use edit tags, you must provide the preview environment. Specify the preview environment while initializing the Live Preview SDK.
248
+
249
+ ContentstackLivePreview.init({
250
+ ...,
251
+ stackDetails: {
252
+ environment: 'Your-environment'
253
+ },
254
+ ...
255
+ })`;
256
+ }
257
+ const protocol = String(this.config.clientUrlParams.protocol);
258
+ const host = String(this.config.clientUrlParams.host);
259
+ const port = String(this.config.clientUrlParams.port);
260
+ const environment = String(this.config.stackDetails.environment);
261
+ const branch = String(this.config.stackDetails.branch || "main");
262
+ const urlHash = `!/stack/${this.config.stackDetails.apiKey}/content-type/${content_type_uid}/${locale ?? "en-us"}/entry/${entry_uid}/edit`;
263
+ const url = new URL(`${protocol}://${host}`);
264
+ url.port = port;
265
+ url.hash = urlHash;
266
+ url.searchParams.append("branch", branch);
267
+ url.searchParams.append("preview-field", preview_field);
268
+ url.searchParams.append("preview-locale", locale ?? "en-us");
269
+ url.searchParams.append("preview-environment", environment);
270
+ return `${url.origin}/${url.hash}${url.search}`;
271
+ }
272
+ scrollHandler() {
273
+ if (!this.tooltip)
274
+ return;
275
+ const cslpTag = this.tooltip.getAttribute("current-data-cslp");
276
+ if (cslpTag) {
277
+ const [content_type_uid, entry_uid, locale, ...field] = cslpTag.split(".");
278
+ if (window.location !== window.parent.location) {
279
+ window.parent.postMessage(
280
+ {
281
+ from: "live-preview",
282
+ type: "scroll",
283
+ data: {
284
+ field: field.join("."),
285
+ content_type_uid,
286
+ entry_uid,
287
+ locale
288
+ }
289
+ },
290
+ "*"
291
+ );
292
+ } else {
293
+ try {
294
+ const redirectUrl = this.generateRedirectUrl(
295
+ content_type_uid,
296
+ locale,
297
+ entry_uid,
298
+ field.join(".")
299
+ );
300
+ window.open(redirectUrl, "_blank");
301
+ } catch (error) {
302
+ PublicLogger.error(error);
303
+ }
304
+ }
305
+ }
306
+ }
307
+ linkClickHandler() {
308
+ if (!this.tooltip)
309
+ return;
310
+ const hrefAttribute = this.tooltip.getAttribute("current-href");
311
+ if (hrefAttribute) {
312
+ window.location.assign(hrefAttribute);
313
+ }
314
+ }
315
+ handleUserChange(editEntrySearchParams) {
316
+ this.config.stackSdk.live_preview = {
317
+ ...this.config.stackSdk.live_preview,
318
+ ...editEntrySearchParams,
319
+ live_preview: editEntrySearchParams.hash
320
+ };
321
+ this.config.onChange();
322
+ }
323
+ setOnChangeCallback(onChangeCallback) {
324
+ this.config.onChange = onChangeCallback;
325
+ }
326
+ /**
327
+ * It is the live preview hash.
328
+ * This hash could be used when data is fetched manually.
329
+ */
330
+ get hash() {
331
+ return this.config.hash;
332
+ }
333
+ /**
334
+ * Sets the live preview hash from the query param which is
335
+ * accessible via `hash` property.
336
+ * @param params query param in an object form
337
+ */
338
+ setConfigFromParams(params = {}) {
339
+ if (typeof params !== "object")
340
+ throw new TypeError(
341
+ "Live preview SDK: query param must be an object"
342
+ );
343
+ const urlParams = new URLSearchParams(params);
344
+ const live_preview = urlParams.get("live_preview");
345
+ if (live_preview) {
346
+ this.config.hash = live_preview;
347
+ }
348
+ }
349
+ resolveIncomingMessage(e) {
350
+ if (typeof e.data !== "object")
351
+ return;
352
+ if (e.data.from !== "live-preview")
353
+ return;
354
+ switch (e.data.type) {
355
+ case "client-data-send": {
356
+ const { contentTypeUid, entryUid } = this.config.stackDetails;
357
+ const { hash } = e.data.data;
358
+ this.setConfigFromParams({ live_preview: hash });
359
+ if (!this.config.ssr) {
360
+ this.handleUserChange({
361
+ content_type_uid: contentTypeUid,
362
+ entry_uid: entryUid,
363
+ hash
364
+ });
365
+ }
366
+ break;
367
+ }
368
+ case "init-ack": {
369
+ const { contentTypeUid, entryUid } = e.data.data;
370
+ this.config.stackDetails.contentTypeUid = contentTypeUid;
371
+ this.config.stackDetails.entryUid = entryUid;
372
+ break;
373
+ }
374
+ case "history": {
375
+ switch (e.data.data.type) {
376
+ case "forward": {
377
+ window.history.forward();
378
+ break;
379
+ }
380
+ case "backward": {
381
+ window.history.back();
382
+ break;
383
+ }
384
+ case "reload": {
385
+ window.history.go();
386
+ }
387
+ }
388
+ break;
389
+ }
390
+ default: {
391
+ const exhaustiveCheck = e.data;
392
+ return exhaustiveCheck;
393
+ }
394
+ }
395
+ }
396
+ // Request parent for data sync when document loads
397
+ requestDataSync() {
398
+ this.createCslpTooltip();
399
+ window.parent.postMessage(
400
+ {
401
+ from: "live-preview",
402
+ type: "init",
403
+ data: {
404
+ config: {
405
+ shouldReload: this.config.ssr,
406
+ href: window.location.href,
407
+ sdkVersion: "2.0.0"
408
+ }
409
+ }
410
+ },
411
+ "*"
412
+ );
413
+ if (!this.config.ssr) {
414
+ setInterval(() => {
415
+ window.parent.postMessage(
416
+ {
417
+ from: "live-preview",
418
+ type: "check-entry-page",
419
+ data: {
420
+ href: window.location.href
421
+ }
422
+ },
423
+ "*"
424
+ );
425
+ }, 1500);
426
+ }
427
+ }
428
+ updateTooltipPosition() {
429
+ var _a;
430
+ if (!this.currentElementBesideTooltip || !this.tooltip)
431
+ return false;
432
+ const currentRectOfElement = this.currentElementBesideTooltip.getBoundingClientRect();
433
+ const currentRectOfParentOfElement = (_a = this.tooltip.parentElement) == null ? void 0 : _a.getBoundingClientRect();
434
+ if (currentRectOfElement && currentRectOfParentOfElement) {
435
+ let {
436
+ upperBoundOfTooltip,
437
+ // eslint-disable-next-line prefer-const
438
+ leftBoundOfTooltip
439
+ } = getEditButtonPosition(
440
+ this.currentElementBesideTooltip,
441
+ this.config.editButton.position
442
+ );
443
+ if (upperBoundOfTooltip < 0) {
444
+ if (currentRectOfElement.top < 0)
445
+ upperBoundOfTooltip = currentRectOfElement.top;
446
+ else
447
+ upperBoundOfTooltip = 0;
448
+ }
449
+ this.tooltip.style.top = upperBoundOfTooltip + "px";
450
+ this.tooltip.style.zIndex = this.currentElementBesideTooltip.style.zIndex || "200";
451
+ this.tooltip.style.left = leftBoundOfTooltip + "px";
452
+ if (this.tooltipChild.singular && this.tooltipChild.multiple) {
453
+ if (this.currentElementBesideTooltip.hasAttribute("href")) {
454
+ if (this.tooltipCurrentChild !== "multiple") {
455
+ const tooltipInnerContainer = this.tooltip.querySelector(
456
+ `div.${livePreviewStyles()["cslp-tooltip-inner-container"]}`
457
+ );
458
+ if (tooltipInnerContainer) {
459
+ tooltipInnerContainer.innerHTML = "";
460
+ tooltipInnerContainer.appendChild(
461
+ this.tooltipChild.multiple
462
+ );
463
+ this.tooltipCurrentChild = "multiple";
464
+ }
465
+ }
466
+ } else if (this.tooltipCurrentChild !== "singular") {
467
+ const tooltipInnerContainer = this.tooltip.querySelector(
468
+ `div.${livePreviewStyles()["cslp-tooltip-inner-container"]}`
469
+ );
470
+ if (tooltipInnerContainer) {
471
+ tooltipInnerContainer.innerHTML = "";
472
+ tooltipInnerContainer.appendChild(
473
+ this.tooltipChild.singular
474
+ );
475
+ this.tooltipCurrentChild = "singular";
476
+ }
477
+ }
478
+ }
479
+ return true;
480
+ }
481
+ return false;
482
+ }
483
+ // remove attributes when livePreview is false
484
+ removeDataCslp() {
485
+ const nodes = document.querySelectorAll("[data-cslp]");
486
+ nodes.forEach((node) => {
487
+ node.removeAttribute("data-cslp");
488
+ node.removeAttribute("data-cslp-button-position");
489
+ });
490
+ }
491
+ };
492
+ export {
493
+ LivePreview as default
494
+ };
495
+ //# sourceMappingURL=live-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/live-preview.ts"],"sourcesContent":["import {\n createSingularEditButton,\n createMultipleEditButton,\n addLivePreviewQueryTags,\n shouldRenderEditButton,\n getEditButtonPosition,\n} from \"./utils\";\nimport { PublicLogger } from \"./utils/public-logger\";\nimport {\n IConfig,\n IEditButtonPosition,\n IEditEntrySearchParams,\n IInitData,\n ILivePreviewReceivePostMessages,\n} from \"./utils/types\";\nimport { handleInitData } from \"./utils/handleUserConfig\";\nimport { userInitData } from \"./utils/defaults\";\nimport { livePreviewStyles } from \"./styles/live_preview\";\n\nexport default class LivePreview {\n /**\n * @hideconstructor\n */\n\n private config: IConfig = {\n ssr: true,\n enable: true,\n runScriptsOnUpdate: false,\n cleanCslpOnProduction: true,\n hash: \"\",\n\n editButton: {\n enable: true,\n exclude: [],\n position: \"top\",\n includeByQueryParameter: true,\n },\n stackDetails: {\n apiKey: \"\",\n environment: \"\",\n branch: \"main\",\n contentTypeUid: \"\",\n entryUid: \"\",\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\n onChange: () => {\n // this is intentional\n },\n };\n\n private tooltip: HTMLButtonElement | null = null; // this tooltip is responsible to redirect user to Contentstack edit page\n private currentElementBesideTooltip: HTMLElement | null = null; // this element helps to move tooltip with the scroll\n private isHoveringOnTooltip = false;\n private hideInterval: ReturnType<typeof setInterval> | null = null;\n\n private tooltipChild: {\n singular: HTMLDivElement | null;\n multiple: HTMLDivElement | null;\n } = {\n singular: null,\n multiple: null,\n };\n private tooltipCurrentChild: \"multiple\" | \"singular\" = \"singular\";\n\n constructor(initData: Partial<IInitData> = userInitData) {\n handleInitData(initData, this.config);\n\n this.addEditStyleOnHover = this.addEditStyleOnHover.bind(this);\n this.removeEditButtonStyle = this.removeEditButtonStyle.bind(this);\n this.generateRedirectUrl = this.generateRedirectUrl.bind(this);\n this.scrollHandler = this.scrollHandler.bind(this);\n this.linkClickHandler = this.linkClickHandler.bind(this);\n this.handleUserChange = this.handleUserChange.bind(this);\n this.setOnChangeCallback = this.setOnChangeCallback.bind(this);\n this.resolveIncomingMessage = this.resolveIncomingMessage.bind(this);\n this.createCslpTooltip = this.createCslpTooltip.bind(this);\n this.requestDataSync = this.requestDataSync.bind(this);\n this.updateTooltipPosition = this.updateTooltipPosition.bind(this);\n this.removeDataCslp = this.removeDataCslp.bind(this);\n this.toggleHoveringOnEditButton =\n this.toggleHoveringOnEditButton.bind(this);\n this.hideTooltip = this.hideTooltip.bind(this);\n\n // @ts-ignore\n if (initData.debug) {\n PublicLogger.debug(\n \"Contentstack Live Preview Debugging mode: config --\",\n this.config\n );\n }\n\n if (this.config.enable) {\n if (\n typeof document !== undefined &&\n document.readyState === \"complete\"\n ) {\n this.requestDataSync();\n } else {\n window.addEventListener(\"load\", this.requestDataSync);\n }\n window.addEventListener(\"message\", this.resolveIncomingMessage);\n window.addEventListener(\"scroll\", this.updateTooltipPosition);\n // render the hover outline only when edit button enable\n if (this.config.editButton.enable) {\n window.addEventListener(\"mouseover\", this.addEditStyleOnHover);\n }\n\n if (this.config.ssr) {\n window.addEventListener(\"load\", (e) => {\n const allATags = document.querySelectorAll(\"a\");\n allATags.forEach((tag) => {\n const docOrigin: string = document.location.origin;\n if (tag.href && tag.href.includes(docOrigin)) {\n const newUrl = addLivePreviewQueryTags(tag.href);\n tag.href = newUrl;\n }\n });\n });\n\n // Setting the query params to all the click events related to current domain\n window.addEventListener(\"click\", (event: any) => {\n const target: any = event.target;\n const targetHref: string | any = target.href;\n const docOrigin: string = document.location.origin;\n if (\n targetHref &&\n targetHref.includes(docOrigin) &&\n !targetHref.includes(\"live_preview\")\n ) {\n const newUrl = addLivePreviewQueryTags(target.href);\n event.target.href = newUrl || target.href;\n }\n });\n }\n } else if (this.config.cleanCslpOnProduction) {\n this.removeDataCslp();\n }\n }\n\n private addEditStyleOnHover(e: MouseEvent) {\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 && cslpTag) {\n if (this.hideInterval) {\n clearInterval(this.hideInterval);\n this.hideInterval = null;\n }\n if (this.currentElementBesideTooltip) {\n this.currentElementBesideTooltip.classList.remove(\n livePreviewStyles()[\"cslp-edit-mode\"]\n );\n this.currentElementBesideTooltip.removeEventListener(\n \"mouseleave\",\n this.removeEditButtonStyle\n );\n }\n element.classList.add(livePreviewStyles()[\"cslp-edit-mode\"]);\n this.currentElementBesideTooltip = element;\n this.currentElementBesideTooltip.addEventListener(\n \"mouseleave\",\n this.removeEditButtonStyle\n );\n\n if (this.updateTooltipPosition()) {\n this.tooltip?.setAttribute(\"current-data-cslp\", cslpTag);\n this.tooltip?.setAttribute(\n \"current-href\",\n element.getAttribute(\"href\") ?? \"\"\n );\n }\n\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(livePreviewStyles()[\"cslp-edit-mode\"]);\n }\n }\n }\n\n private removeEditButtonStyle(e: MouseEvent) {\n if (!this.currentElementBesideTooltip || !this.tooltip) return false;\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 && cslpTag) {\n this.hideInterval = setInterval(this.hideTooltip, 500);\n trigger = false;\n } else if (!trigger) {\n element.classList.remove(livePreviewStyles()[\"cslp-edit-mode\"]);\n }\n }\n }\n\n private hideTooltip() {\n if (\n !this.currentElementBesideTooltip ||\n !this.tooltip ||\n this.isHoveringOnTooltip\n )\n return false;\n this.currentElementBesideTooltip.classList.remove(\n livePreviewStyles()[\"cslp-edit-mode\"]\n );\n this.currentElementBesideTooltip.removeEventListener(\n \"mouseleave\",\n this.removeEditButtonStyle\n );\n this.currentElementBesideTooltip = null;\n this.tooltip.style.top = \"-100%\";\n }\n\n private generateRedirectUrl(\n content_type_uid: string,\n locale = \"en-us\",\n entry_uid: string,\n preview_field: string\n ): string {\n if (!this.config.stackDetails.apiKey) {\n throw `To use edit tags, you must provide the stack API key. Specify the API key while initializing the Live Preview SDK.\n\n ContentstackLivePreview.init({\n ...,\n stackDetails: {\n apiKey: 'your-api-key'\n },\n ...\n })`;\n }\n\n if (!this.config.stackDetails.environment) {\n throw `To use edit tags, you must provide the preview environment. Specify the preview environment while initializing the Live Preview SDK.\n\n ContentstackLivePreview.init({\n ...,\n stackDetails: {\n environment: 'Your-environment'\n },\n ...\n })`;\n }\n\n const protocol = String(this.config.clientUrlParams.protocol);\n const host = String(this.config.clientUrlParams.host);\n const port = String(this.config.clientUrlParams.port);\n const environment = String(this.config.stackDetails.environment);\n const branch = String(this.config.stackDetails.branch || \"main\");\n\n const urlHash = `!/stack/${\n this.config.stackDetails.apiKey\n }/content-type/${content_type_uid}/${\n locale ?? \"en-us\"\n }/entry/${entry_uid}/edit`;\n\n const url = new URL(`${protocol}://${host}`);\n url.port = port;\n url.hash = urlHash;\n url.searchParams.append(\"branch\", branch);\n url.searchParams.append(\"preview-field\", preview_field);\n url.searchParams.append(\"preview-locale\", locale ?? \"en-us\");\n url.searchParams.append(\"preview-environment\", environment);\n\n return `${url.origin}/${url.hash}${url.search}`;\n }\n\n private scrollHandler() {\n if (!this.tooltip) return;\n\n const cslpTag = this.tooltip.getAttribute(\"current-data-cslp\");\n\n if (cslpTag) {\n const [content_type_uid, entry_uid, locale, ...field] =\n cslpTag.split(\".\");\n\n // check if opened inside an iframe\n if (window.location !== window.parent.location) {\n window.parent.postMessage(\n {\n from: \"live-preview\",\n type: \"scroll\",\n data: {\n field: field.join(\".\"),\n content_type_uid,\n entry_uid,\n locale,\n },\n },\n \"*\"\n );\n } else {\n try {\n const redirectUrl = this.generateRedirectUrl(\n content_type_uid,\n locale,\n entry_uid,\n field.join(\".\")\n );\n\n window.open(redirectUrl, \"_blank\");\n } catch (error) {\n PublicLogger.error(error);\n }\n }\n }\n }\n\n private linkClickHandler() {\n if (!this.tooltip) return;\n const hrefAttribute = this.tooltip.getAttribute(\"current-href\");\n\n if (hrefAttribute) {\n window.location.assign(hrefAttribute);\n }\n }\n\n private handleUserChange(editEntrySearchParams: IEditEntrySearchParams) {\n // here we provide contentTypeUid and EntryUid to the StackDelivery SDK.\n this.config.stackSdk.live_preview = {\n ...this.config.stackSdk.live_preview,\n ...editEntrySearchParams,\n live_preview: editEntrySearchParams.hash,\n };\n this.config.onChange();\n }\n\n setOnChangeCallback(onChangeCallback: () => void): void {\n this.config.onChange = onChangeCallback;\n }\n\n /**\n * It is the live preview hash.\n * This hash could be used when data is fetched manually.\n */\n get hash(): string {\n return this.config.hash;\n }\n\n /**\n * Sets the live preview hash from the query param which is\n * accessible via `hash` property.\n * @param params query param in an object form\n */\n setConfigFromParams(\n params: ConstructorParameters<typeof URLSearchParams>[0] = {}\n ): void {\n if (typeof params !== \"object\")\n throw new TypeError(\n \"Live preview SDK: query param must be an object\"\n );\n\n const urlParams = new URLSearchParams(params);\n const live_preview = urlParams.get(\"live_preview\");\n\n if (live_preview) {\n this.config.hash = live_preview;\n }\n }\n\n private resolveIncomingMessage(\n e: MessageEvent<ILivePreviewReceivePostMessages>\n ) {\n if (typeof e.data !== \"object\") return;\n\n if (e.data.from !== \"live-preview\") return;\n\n switch (e.data.type) {\n case \"client-data-send\": {\n const { contentTypeUid, entryUid } = this.config.stackDetails;\n const { hash } = e.data.data;\n\n this.setConfigFromParams({ live_preview: hash });\n\n if (!this.config.ssr) {\n this.handleUserChange({\n content_type_uid: contentTypeUid,\n entry_uid: entryUid,\n hash: hash,\n });\n }\n break;\n }\n case \"init-ack\": {\n const { contentTypeUid, entryUid } = e.data.data;\n\n this.config.stackDetails.contentTypeUid = contentTypeUid;\n this.config.stackDetails.entryUid = entryUid;\n break;\n }\n case \"history\": {\n switch (e.data.data.type) {\n case \"forward\": {\n window.history.forward();\n break;\n }\n case \"backward\": {\n window.history.back();\n break;\n }\n case \"reload\": {\n window.history.go();\n }\n }\n break;\n }\n default: {\n // ensure that the switch statement is exhaustive\n const exhaustiveCheck: never = e.data;\n return exhaustiveCheck; // TODO: add debug message while we are in development mode.\n }\n }\n }\n\n private createCslpTooltip = () => {\n if (\n !document.getElementById(\"cslp-tooltip\") &&\n this.config.editButton.enable\n ) {\n const tooltip = document.createElement(\"button\");\n const tooltipInnerContainer = document.createElement(\"div\");\n tooltipInnerContainer.classList.add(\n livePreviewStyles()[\"cslp-tooltip-inner-container\"]\n );\n tooltip.classList.add(livePreviewStyles()[\"cslp-tooltip\"]);\n tooltip.classList.add(livePreviewStyles()[\"cslp-tooltip\"]);\n tooltip.setAttribute(\"data-test-id\", \"cs-cslp-tooltip\");\n tooltip.id = \"cslp-tooltip\";\n tooltipInnerContainer.id = \"cslp-tooltip-inner-container\";\n tooltip.addEventListener(\"mouseover\", () => {\n this.toggleHoveringOnEditButton(true);\n });\n tooltip.addEventListener(\"mouseleave\", (e: MouseEvent) => {\n this.toggleHoveringOnEditButton(false);\n this.removeEditButtonStyle(e);\n });\n window.document.body.insertAdjacentElement(\"beforeend\", tooltip);\n this.tooltipChild.singular = createSingularEditButton(\n this.scrollHandler\n );\n this.tooltipChild.multiple = createMultipleEditButton(\n this.scrollHandler,\n this.linkClickHandler\n );\n\n tooltipInnerContainer.innerHTML = \"\";\n tooltipInnerContainer.appendChild(this.tooltipChild.singular);\n tooltip.appendChild(tooltipInnerContainer);\n this.tooltip = tooltip;\n }\n this.updateTooltipPosition();\n };\n\n private toggleHoveringOnEditButton = (isHoveringOnTooltip: boolean) => {\n this.isHoveringOnTooltip = isHoveringOnTooltip;\n };\n\n // Request parent for data sync when document loads\n private requestDataSync() {\n // add edit tooltip\n this.createCslpTooltip();\n\n window.parent.postMessage(\n {\n from: \"live-preview\",\n type: \"init\",\n data: {\n config: {\n shouldReload: this.config.ssr,\n href: window.location.href,\n sdkVersion: process.env.PACKAGE_VERSION,\n },\n },\n },\n \"*\"\n );\n\n // set timeout for client side (use to show warning: You are not editing this page)\n if (!this.config.ssr) {\n setInterval(() => {\n window.parent.postMessage(\n {\n from: \"live-preview\",\n type: \"check-entry-page\",\n data: {\n href: window.location.href,\n },\n },\n \"*\"\n );\n }, 1500);\n }\n }\n\n private updateTooltipPosition() {\n if (!this.currentElementBesideTooltip || !this.tooltip) return false;\n\n const currentRectOfElement =\n this.currentElementBesideTooltip.getBoundingClientRect();\n const currentRectOfParentOfElement =\n this.tooltip.parentElement?.getBoundingClientRect();\n\n if (currentRectOfElement && currentRectOfParentOfElement) {\n let {\n upperBoundOfTooltip,\n // eslint-disable-next-line prefer-const\n leftBoundOfTooltip,\n }: IEditButtonPosition = getEditButtonPosition(\n this.currentElementBesideTooltip,\n this.config.editButton.position\n );\n\n // if scrolled and element is still visible, make sure tooltip is also visible\n if (upperBoundOfTooltip < 0) {\n if (currentRectOfElement.top < 0)\n upperBoundOfTooltip = currentRectOfElement.top;\n else upperBoundOfTooltip = 0;\n }\n\n this.tooltip.style.top = upperBoundOfTooltip + \"px\";\n this.tooltip.style.zIndex =\n this.currentElementBesideTooltip.style.zIndex || \"200\";\n this.tooltip.style.left = leftBoundOfTooltip + \"px\";\n\n if (this.tooltipChild.singular && this.tooltipChild.multiple) {\n if (this.currentElementBesideTooltip.hasAttribute(\"href\")) {\n if (this.tooltipCurrentChild !== \"multiple\") {\n const tooltipInnerContainer =\n this.tooltip.querySelector(\n `div.${\n livePreviewStyles()[\n \"cslp-tooltip-inner-container\"\n ]\n }`\n );\n if (tooltipInnerContainer) {\n tooltipInnerContainer.innerHTML = \"\";\n tooltipInnerContainer.appendChild(\n this.tooltipChild.multiple\n );\n this.tooltipCurrentChild = \"multiple\";\n }\n }\n } else if (this.tooltipCurrentChild !== \"singular\") {\n const tooltipInnerContainer = this.tooltip.querySelector(\n `div.${\n livePreviewStyles()[\"cslp-tooltip-inner-container\"]\n }`\n );\n if (tooltipInnerContainer) {\n tooltipInnerContainer.innerHTML = \"\";\n tooltipInnerContainer.appendChild(\n this.tooltipChild.singular\n );\n this.tooltipCurrentChild = \"singular\";\n }\n }\n }\n return true;\n }\n\n return false;\n }\n\n // remove attributes when livePreview is false\n private removeDataCslp() {\n const nodes = document.querySelectorAll(\"[data-cslp]\");\n\n nodes.forEach((node) => {\n node.removeAttribute(\"data-cslp\");\n node.removeAttribute(\"data-cslp-button-position\");\n });\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/styles/compare.ts
21
+ var compare_exports = {};
22
+ __export(compare_exports, {
23
+ loadCompareGlobalStyle: () => loadCompareGlobalStyle
24
+ });
25
+ module.exports = __toCommonJS(compare_exports);
26
+ var import_goober = require("goober");
27
+ var loadCompareGlobalStyle = () => {
28
+ const css = import_goober.glob;
29
+ css`
30
+ cs-compare {
31
+ &.cs-compare--added {
32
+ background: rgba(0, 122, 82, 0.2);
33
+ border-bottom: 2px solid rgba(0, 122, 82);
34
+ }
35
+
36
+ &.cs-compare--removed {
37
+ background: rgba(214, 36, 0, 0.2);
38
+ text-decoration: line-through 2px solid rgba(214, 36, 0, 1);
39
+ }
40
+ }
41
+ .cs-compare__void--added {
42
+ background: rgba(0, 122, 82, 0.2);
43
+ outline: 2px solid rgba(0, 122, 82);
44
+ }
45
+
46
+ .cs-compare__void--removed {
47
+ background: rgba(214, 36, 0, 0.2);
48
+ outline: 2px solid rgba(214, 36, 0, 1);
49
+ }
50
+ `;
51
+ };
52
+ // Annotate the CommonJS export names for ESM import in node:
53
+ 0 && (module.exports = {
54
+ loadCompareGlobalStyle
55
+ });
56
+ //# sourceMappingURL=compare.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/styles/compare.ts"],"sourcesContent":["import { glob } from \"goober\";\n\nexport const loadCompareGlobalStyle = () => {\n const css = glob;\n css`\n cs-compare {\n &.cs-compare--added {\n background: rgba(0, 122, 82, 0.2);\n border-bottom: 2px solid rgba(0, 122, 82);\n }\n\n &.cs-compare--removed {\n background: rgba(214, 36, 0, 0.2);\n text-decoration: line-through 2px solid rgba(214, 36, 0, 1);\n }\n }\n .cs-compare__void--added {\n background: rgba(0, 122, 82, 0.2);\n outline: 2px solid rgba(0, 122, 82);\n }\n\n .cs-compare__void--removed {\n background: rgba(214, 36, 0, 0.2);\n outline: 2px solid rgba(214, 36, 0, 1);\n }\n `;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAqB;AAEd,IAAM,yBAAyB,MAAM;AACxC,QAAM,MAAM;AACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBJ;","names":[]}
@@ -0,0 +1,3 @@
1
+ declare const loadCompareGlobalStyle: () => void;
2
+
3
+ export { loadCompareGlobalStyle };
@@ -0,0 +1,3 @@
1
+ declare const loadCompareGlobalStyle: () => void;
2
+
3
+ export { loadCompareGlobalStyle };
@@ -0,0 +1,31 @@
1
+ // src/styles/compare.ts
2
+ import { glob } from "goober";
3
+ var loadCompareGlobalStyle = () => {
4
+ const css = glob;
5
+ css`
6
+ cs-compare {
7
+ &.cs-compare--added {
8
+ background: rgba(0, 122, 82, 0.2);
9
+ border-bottom: 2px solid rgba(0, 122, 82);
10
+ }
11
+
12
+ &.cs-compare--removed {
13
+ background: rgba(214, 36, 0, 0.2);
14
+ text-decoration: line-through 2px solid rgba(214, 36, 0, 1);
15
+ }
16
+ }
17
+ .cs-compare__void--added {
18
+ background: rgba(0, 122, 82, 0.2);
19
+ outline: 2px solid rgba(0, 122, 82);
20
+ }
21
+
22
+ .cs-compare__void--removed {
23
+ background: rgba(214, 36, 0, 0.2);
24
+ outline: 2px solid rgba(214, 36, 0, 1);
25
+ }
26
+ `;
27
+ };
28
+ export {
29
+ loadCompareGlobalStyle
30
+ };
31
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/styles/compare.ts"],"sourcesContent":["import { glob } from \"goober\";\n\nexport const loadCompareGlobalStyle = () => {\n const css = glob;\n css`\n cs-compare {\n &.cs-compare--added {\n background: rgba(0, 122, 82, 0.2);\n border-bottom: 2px solid rgba(0, 122, 82);\n }\n\n &.cs-compare--removed {\n background: rgba(214, 36, 0, 0.2);\n text-decoration: line-through 2px solid rgba(214, 36, 0, 1);\n }\n }\n .cs-compare__void--added {\n background: rgba(0, 122, 82, 0.2);\n outline: 2px solid rgba(0, 122, 82);\n }\n\n .cs-compare__void--removed {\n background: rgba(214, 36, 0, 0.2);\n outline: 2px solid rgba(214, 36, 0, 1);\n }\n `;\n};\n"],"mappings":";AAAA,SAAS,YAAY;AAEd,IAAM,yBAAyB,MAAM;AACxC,QAAM,MAAM;AACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBJ;","names":[]}