@webiny/website-builder-sdk 0.0.0-unstable.06b2ede40f

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 (237) hide show
  1. package/BindingsApi.d.ts +25 -0
  2. package/BindingsApi.js +42 -0
  3. package/BindingsApi.js.map +1 -0
  4. package/BindingsProcessor.d.ts +11 -0
  5. package/BindingsProcessor.js +49 -0
  6. package/BindingsProcessor.js.map +1 -0
  7. package/BindingsProcessor.test.d.ts +1 -0
  8. package/BindingsProcessor.test.js +86 -0
  9. package/BindingsProcessor.test.js.map +1 -0
  10. package/BindingsResolver.d.ts +20 -0
  11. package/BindingsResolver.js +134 -0
  12. package/BindingsResolver.js.map +1 -0
  13. package/BindingsResolver.test.d.ts +1 -0
  14. package/BindingsResolver.test.js +382 -0
  15. package/BindingsResolver.test.js.map +1 -0
  16. package/ComponentInputTraverser.d.ts +18 -0
  17. package/ComponentInputTraverser.js +56 -0
  18. package/ComponentInputTraverser.js.map +1 -0
  19. package/ComponentManifestToAstConverter.d.ts +13 -0
  20. package/ComponentManifestToAstConverter.js +24 -0
  21. package/ComponentManifestToAstConverter.js.map +1 -0
  22. package/ComponentRegistry.d.ts +15 -0
  23. package/ComponentRegistry.js +25 -0
  24. package/ComponentRegistry.js.map +1 -0
  25. package/ComponentResolver.d.ts +14 -0
  26. package/ComponentResolver.js +36 -0
  27. package/ComponentResolver.js.map +1 -0
  28. package/ContentSdk.d.ts +44 -0
  29. package/ContentSdk.js +106 -0
  30. package/ContentSdk.js.map +1 -0
  31. package/DocumentStore.d.ts +15 -0
  32. package/DocumentStore.js +67 -0
  33. package/DocumentStore.js.map +1 -0
  34. package/DocumentStoreManager.d.ts +11 -0
  35. package/DocumentStoreManager.js +22 -0
  36. package/DocumentStoreManager.js.map +1 -0
  37. package/EditingSdk.d.ts +21 -0
  38. package/EditingSdk.js +143 -0
  39. package/EditingSdk.js.map +1 -0
  40. package/ElementFactory.d.ts +54 -0
  41. package/ElementFactory.js +183 -0
  42. package/ElementFactory.js.map +1 -0
  43. package/Environment.d.ts +9 -0
  44. package/Environment.js +23 -0
  45. package/Environment.js.map +1 -0
  46. package/FunctionConverter.d.ts +6 -0
  47. package/FunctionConverter.js +11 -0
  48. package/FunctionConverter.js.map +1 -0
  49. package/HashObject.d.ts +6 -0
  50. package/HashObject.js +17 -0
  51. package/HashObject.js.map +1 -0
  52. package/HotkeyManager.d.ts +6 -0
  53. package/HotkeyManager.js +58 -0
  54. package/HotkeyManager.js.map +1 -0
  55. package/IBindingsUpdater.d.ts +6 -0
  56. package/IBindingsUpdater.js +3 -0
  57. package/IBindingsUpdater.js.map +1 -0
  58. package/IRedirects.d.ts +5 -0
  59. package/IRedirects.js +3 -0
  60. package/IRedirects.js.map +1 -0
  61. package/InheritanceProcessor.d.ts +29 -0
  62. package/InheritanceProcessor.js +147 -0
  63. package/InheritanceProcessor.js.map +1 -0
  64. package/InheritanceProcessor.test.d.ts +1 -0
  65. package/InheritanceProcessor.test.js +192 -0
  66. package/InheritanceProcessor.test.js.map +1 -0
  67. package/InheritedValueResolver.d.ts +10 -0
  68. package/InheritedValueResolver.js +24 -0
  69. package/InheritedValueResolver.js.map +1 -0
  70. package/InputBindingsProcessor.d.ts +38 -0
  71. package/InputBindingsProcessor.js +306 -0
  72. package/InputBindingsProcessor.js.map +1 -0
  73. package/InputsBindingsProcessor.test.d.ts +1 -0
  74. package/InputsBindingsProcessor.test.js +327 -0
  75. package/InputsBindingsProcessor.test.js.map +1 -0
  76. package/InputsUpdater.d.ts +12 -0
  77. package/InputsUpdater.js +34 -0
  78. package/InputsUpdater.js.map +1 -0
  79. package/LICENSE +21 -0
  80. package/LiveSdk.d.ts +7 -0
  81. package/LiveSdk.js +18 -0
  82. package/LiveSdk.js.map +1 -0
  83. package/Logger.d.ts +1 -0
  84. package/Logger.js +10 -0
  85. package/Logger.js.map +1 -0
  86. package/MouseTracker.d.ts +39 -0
  87. package/MouseTracker.js +93 -0
  88. package/MouseTracker.js.map +1 -0
  89. package/NullSdk.d.ts +8 -0
  90. package/NullSdk.js +17 -0
  91. package/NullSdk.js.map +1 -0
  92. package/PreviewDocument.d.ts +8 -0
  93. package/PreviewDocument.js +35 -0
  94. package/PreviewDocument.js.map +1 -0
  95. package/PreviewSdk.d.ts +8 -0
  96. package/PreviewSdk.js +22 -0
  97. package/PreviewSdk.js.map +1 -0
  98. package/PreviewViewport.d.ts +9 -0
  99. package/PreviewViewport.js +88 -0
  100. package/PreviewViewport.js.map +1 -0
  101. package/README.md +3 -0
  102. package/ResizeObserver.d.ts +5 -0
  103. package/ResizeObserver.js +41 -0
  104. package/ResizeObserver.js.map +1 -0
  105. package/StylesBindingsProcessor.d.ts +33 -0
  106. package/StylesBindingsProcessor.js +91 -0
  107. package/StylesBindingsProcessor.js.map +1 -0
  108. package/StylesUpdater.d.ts +10 -0
  109. package/StylesUpdater.js +34 -0
  110. package/StylesUpdater.js.map +1 -0
  111. package/Theme.d.ts +4 -0
  112. package/Theme.js +36 -0
  113. package/Theme.js.map +1 -0
  114. package/ViewportManager.d.ts +34 -0
  115. package/ViewportManager.js +106 -0
  116. package/ViewportManager.js.map +1 -0
  117. package/constants.d.ts +6 -0
  118. package/constants.js +8 -0
  119. package/constants.js.map +1 -0
  120. package/createElement.d.ts +10 -0
  121. package/createElement.js +8 -0
  122. package/createElement.js.map +1 -0
  123. package/createInput.d.ts +17 -0
  124. package/createInput.js +128 -0
  125. package/createInput.js.map +1 -0
  126. package/createTheme.d.ts +3 -0
  127. package/createTheme.js +5 -0
  128. package/createTheme.js.map +1 -0
  129. package/dataProviders/ApiClient.d.ts +13 -0
  130. package/dataProviders/ApiClient.js +43 -0
  131. package/dataProviders/ApiClient.js.map +1 -0
  132. package/dataProviders/DefaultDataProvider.d.ts +14 -0
  133. package/dataProviders/DefaultDataProvider.js +47 -0
  134. package/dataProviders/DefaultDataProvider.js.map +1 -0
  135. package/dataProviders/GET_ACTIVE_REDIRECTS.d.ts +1 -0
  136. package/dataProviders/GET_ACTIVE_REDIRECTS.js +21 -0
  137. package/dataProviders/GET_ACTIVE_REDIRECTS.js.map +1 -0
  138. package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -0
  139. package/dataProviders/GET_PAGE_BY_ID.js +21 -0
  140. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -0
  141. package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -0
  142. package/dataProviders/GET_PAGE_BY_PATH.js +21 -0
  143. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -0
  144. package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -0
  145. package/dataProviders/LIST_PUBLISHED_PAGES.js +21 -0
  146. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -0
  147. package/dataProviders/NullDataProvider.d.ts +7 -0
  148. package/dataProviders/NullDataProvider.js +16 -0
  149. package/dataProviders/NullDataProvider.js.map +1 -0
  150. package/dataProviders/RedirectsProvider.d.ts +11 -0
  151. package/dataProviders/RedirectsProvider.js +33 -0
  152. package/dataProviders/RedirectsProvider.js.map +1 -0
  153. package/defaultBreakpoints.d.ts +2 -0
  154. package/defaultBreakpoints.js +25 -0
  155. package/defaultBreakpoints.js.map +1 -0
  156. package/documentOperations/$addElementReferenceToParent.d.ts +9 -0
  157. package/documentOperations/$addElementReferenceToParent.js +31 -0
  158. package/documentOperations/$addElementReferenceToParent.js.map +1 -0
  159. package/documentOperations/AddElement.d.ts +7 -0
  160. package/documentOperations/AddElement.js +10 -0
  161. package/documentOperations/AddElement.js.map +1 -0
  162. package/documentOperations/AddToParent.d.ts +8 -0
  163. package/documentOperations/AddToParent.js +17 -0
  164. package/documentOperations/AddToParent.js.map +1 -0
  165. package/documentOperations/IDocumentOperation.d.ts +4 -0
  166. package/documentOperations/IDocumentOperation.js +3 -0
  167. package/documentOperations/IDocumentOperation.js.map +1 -0
  168. package/documentOperations/RemoveElement.d.ts +7 -0
  169. package/documentOperations/RemoveElement.js +10 -0
  170. package/documentOperations/RemoveElement.js.map +1 -0
  171. package/documentOperations/SetGlobalInputBinding.d.ts +9 -0
  172. package/documentOperations/SetGlobalInputBinding.js +25 -0
  173. package/documentOperations/SetGlobalInputBinding.js.map +1 -0
  174. package/documentOperations/SetGlobalStyleBinding.d.ts +9 -0
  175. package/documentOperations/SetGlobalStyleBinding.js +26 -0
  176. package/documentOperations/SetGlobalStyleBinding.js.map +1 -0
  177. package/documentOperations/SetInputBindingOverride.d.ts +10 -0
  178. package/documentOperations/SetInputBindingOverride.js +33 -0
  179. package/documentOperations/SetInputBindingOverride.js.map +1 -0
  180. package/documentOperations/SetStyleBindingOverride.d.ts +10 -0
  181. package/documentOperations/SetStyleBindingOverride.js +35 -0
  182. package/documentOperations/SetStyleBindingOverride.js.map +1 -0
  183. package/documentOperations/index.d.ts +17 -0
  184. package/documentOperations/index.js +18 -0
  185. package/documentOperations/index.js.map +1 -0
  186. package/findMatchingAstNode.d.ts +2 -0
  187. package/findMatchingAstNode.js +17 -0
  188. package/findMatchingAstNode.js.map +1 -0
  189. package/generateElementId.d.ts +1 -0
  190. package/generateElementId.js +7 -0
  191. package/generateElementId.js.map +1 -0
  192. package/headersProvider.d.ts +4 -0
  193. package/headersProvider.js +7 -0
  194. package/headersProvider.js.map +1 -0
  195. package/index.d.ts +31 -0
  196. package/index.js +33 -0
  197. package/index.js.map +1 -0
  198. package/jsonPatch.d.ts +6 -0
  199. package/jsonPatch.js +12 -0
  200. package/jsonPatch.js.map +1 -0
  201. package/lexical/createDefaultLexicalTheme.d.ts +2 -0
  202. package/lexical/createDefaultLexicalTheme.js +84 -0
  203. package/lexical/createDefaultLexicalTheme.js.map +1 -0
  204. package/lexical/createLexicalTheme.d.ts +2 -0
  205. package/lexical/createLexicalTheme.js +7 -0
  206. package/lexical/createLexicalTheme.js.map +1 -0
  207. package/lexical/deepMerge.d.ts +1 -0
  208. package/lexical/deepMerge.js +23 -0
  209. package/lexical/deepMerge.js.map +1 -0
  210. package/messages.d.ts +11 -0
  211. package/messages.js +13 -0
  212. package/messages.js.map +1 -0
  213. package/messenger/MessageOrigin.d.ts +7 -0
  214. package/messenger/MessageOrigin.js +14 -0
  215. package/messenger/MessageOrigin.js.map +1 -0
  216. package/messenger/Messenger.d.ts +22 -0
  217. package/messenger/Messenger.js +80 -0
  218. package/messenger/Messenger.js.map +1 -0
  219. package/messenger/index.d.ts +2 -0
  220. package/messenger/index.js +4 -0
  221. package/messenger/index.js.map +1 -0
  222. package/package.json +54 -0
  223. package/registerComponentGroup.d.ts +2 -0
  224. package/registerComponentGroup.js +10 -0
  225. package/registerComponentGroup.js.map +1 -0
  226. package/types/LexicalEditorTheme.d.ts +2 -0
  227. package/types/LexicalEditorTheme.js +3 -0
  228. package/types/LexicalEditorTheme.js.map +1 -0
  229. package/types/ShorthandCssProperties.d.ts +1 -0
  230. package/types/ShorthandCssProperties.js +3 -0
  231. package/types/ShorthandCssProperties.js.map +1 -0
  232. package/types/WebsiteBuilderTheme.d.ts +92 -0
  233. package/types/WebsiteBuilderTheme.js +3 -0
  234. package/types/WebsiteBuilderTheme.js.map +1 -0
  235. package/types.d.ts +295 -0
  236. package/types.js +3 -0
  237. package/types.js.map +1 -0
package/NullSdk.js ADDED
@@ -0,0 +1,17 @@
1
+ export class NullSdk {
2
+ async getPage() {
3
+ return null;
4
+ }
5
+ listPages() {
6
+ return Promise.resolve([]);
7
+ }
8
+ listRedirects() {
9
+ return Promise.resolve([]);
10
+ }
11
+ registerComponent() {}
12
+ resolveElement() {
13
+ return null;
14
+ }
15
+ }
16
+
17
+ //# sourceMappingURL=NullSdk.js.map
package/NullSdk.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NullSdk","getPage","listPages","Promise","resolve","listRedirects","registerComponent","resolveElement"],"sources":["NullSdk.ts"],"sourcesContent":["import type { IContentSdk, Page, PublicRedirect, ResolvedComponent } from \"./types\";\n\nexport class NullSdk implements IContentSdk {\n async getPage(): Promise<Page | null> {\n return null;\n }\n\n listPages(): Promise<Page[]> {\n return Promise.resolve([]);\n }\n\n listRedirects(): Promise<PublicRedirect[]> {\n return Promise.resolve([]);\n }\n\n registerComponent(): void {}\n\n resolveElement(): ResolvedComponent[] | null {\n return null;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,OAAO,CAAwB;EACxC,MAAMC,OAAOA,CAAA,EAAyB;IAClC,OAAO,IAAI;EACf;EAEAC,SAASA,CAAA,EAAoB;IACzB,OAAOC,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;EAC9B;EAEAC,aAAaA,CAAA,EAA8B;IACvC,OAAOF,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;EAC9B;EAEAE,iBAAiBA,CAAA,EAAS,CAAC;EAE3BC,cAAcA,CAAA,EAA+B;IACzC,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ export declare class PreviewDocument {
2
+ readonly props: Record<string, string>;
3
+ private constructor();
4
+ static createFromWindow(): PreviewDocument;
5
+ static createFromHeaders(): Promise<PreviewDocument>;
6
+ matches(params: Record<string, string>): boolean;
7
+ getId(): string;
8
+ }
@@ -0,0 +1,35 @@
1
+ import { getHeadersProvider } from "./headersProvider";
2
+ export class PreviewDocument {
3
+ constructor(prefix, query) {
4
+ this.props = {};
5
+ query.forEach((value, key) => {
6
+ if (key.startsWith(prefix + ".")) {
7
+ const strippedKey = key.slice(prefix.length + 1); // +1 for the dot
8
+ this.props[strippedKey] = value;
9
+ }
10
+ });
11
+ }
12
+ static createFromWindow() {
13
+ const query = new URLSearchParams(window.location.search);
14
+ return new PreviewDocument("wb", query);
15
+ }
16
+ static async createFromHeaders() {
17
+ const headersProvider = getHeadersProvider();
18
+ const headers = await headersProvider();
19
+ const previewFromHeaders = headers.get("X-Preview-Params");
20
+ return new PreviewDocument("wb", new URLSearchParams(previewFromHeaders ?? ""));
21
+ }
22
+ matches(params) {
23
+ for (const [key, value] of Object.entries(params)) {
24
+ if (this.props[key] !== value) {
25
+ return false;
26
+ }
27
+ }
28
+ return true;
29
+ }
30
+ getId() {
31
+ return this.props.id;
32
+ }
33
+ }
34
+
35
+ //# sourceMappingURL=PreviewDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getHeadersProvider","PreviewDocument","constructor","prefix","query","props","forEach","value","key","startsWith","strippedKey","slice","length","createFromWindow","URLSearchParams","window","location","search","createFromHeaders","headersProvider","headers","previewFromHeaders","get","matches","params","Object","entries","getId","id"],"sources":["PreviewDocument.ts"],"sourcesContent":["import { getHeadersProvider } from \"./headersProvider\";\n\nexport class PreviewDocument {\n public readonly props: Record<string, string>;\n\n private constructor(prefix: string, query: URLSearchParams) {\n this.props = {};\n query.forEach((value, key) => {\n if (key.startsWith(prefix + \".\")) {\n const strippedKey = key.slice(prefix.length + 1); // +1 for the dot\n this.props[strippedKey] = value as string;\n }\n });\n }\n\n static createFromWindow(): PreviewDocument {\n const query = new URLSearchParams(window.location.search);\n return new PreviewDocument(\"wb\", query);\n }\n\n static async createFromHeaders(): Promise<PreviewDocument> {\n const headersProvider = getHeadersProvider();\n const headers = await headersProvider();\n const previewFromHeaders = headers.get(\"X-Preview-Params\");\n\n return new PreviewDocument(\"wb\", new URLSearchParams(previewFromHeaders ?? \"\"));\n }\n\n matches(params: Record<string, string>) {\n for (const [key, value] of Object.entries(params)) {\n if (this.props[key] !== value) {\n return false;\n }\n }\n return true;\n }\n\n getId() {\n return this.props.id;\n }\n}\n"],"mappings":"AAAA,SAASA,kBAAkB;AAE3B,OAAO,MAAMC,eAAe,CAAC;EAGjBC,WAAWA,CAACC,MAAc,EAAEC,KAAsB,EAAE;IACxD,IAAI,CAACC,KAAK,GAAG,CAAC,CAAC;IACfD,KAAK,CAACE,OAAO,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;MAC1B,IAAIA,GAAG,CAACC,UAAU,CAACN,MAAM,GAAG,GAAG,CAAC,EAAE;QAC9B,MAAMO,WAAW,GAAGF,GAAG,CAACG,KAAK,CAACR,MAAM,CAACS,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAACP,KAAK,CAACK,WAAW,CAAC,GAAGH,KAAe;MAC7C;IACJ,CAAC,CAAC;EACN;EAEA,OAAOM,gBAAgBA,CAAA,EAAoB;IACvC,MAAMT,KAAK,GAAG,IAAIU,eAAe,CAACC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC;IACzD,OAAO,IAAIhB,eAAe,CAAC,IAAI,EAAEG,KAAK,CAAC;EAC3C;EAEA,aAAac,iBAAiBA,CAAA,EAA6B;IACvD,MAAMC,eAAe,GAAGnB,kBAAkB,CAAC,CAAC;IAC5C,MAAMoB,OAAO,GAAG,MAAMD,eAAe,CAAC,CAAC;IACvC,MAAME,kBAAkB,GAAGD,OAAO,CAACE,GAAG,CAAC,kBAAkB,CAAC;IAE1D,OAAO,IAAIrB,eAAe,CAAC,IAAI,EAAE,IAAIa,eAAe,CAACO,kBAAkB,IAAI,EAAE,CAAC,CAAC;EACnF;EAEAE,OAAOA,CAACC,MAA8B,EAAE;IACpC,KAAK,MAAM,CAAChB,GAAG,EAAED,KAAK,CAAC,IAAIkB,MAAM,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;MAC/C,IAAI,IAAI,CAACnB,KAAK,CAACG,GAAG,CAAC,KAAKD,KAAK,EAAE;QAC3B,OAAO,KAAK;MAChB;IACJ;IACA,OAAO,IAAI;EACf;EAEAoB,KAAKA,CAAA,EAAG;IACJ,OAAO,IAAI,CAACtB,KAAK,CAACuB,EAAE;EACxB;AACJ","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import type { IContentSdk, IDataProvider, PublicPage } from "./types.js";
2
+ export declare class PreviewSdk implements IContentSdk {
3
+ private liveSdk;
4
+ private dataProvider;
5
+ constructor(dataProvider: IDataProvider, liveSdk: IContentSdk);
6
+ getPage(path: string): Promise<PublicPage | null>;
7
+ listPages(): Promise<PublicPage[]>;
8
+ }
package/PreviewSdk.js ADDED
@@ -0,0 +1,22 @@
1
+ import { PreviewDocument } from "./PreviewDocument";
2
+ export class PreviewSdk {
3
+ constructor(dataProvider, liveSdk) {
4
+ this.liveSdk = liveSdk;
5
+ this.dataProvider = dataProvider;
6
+ }
7
+ async getPage(path) {
8
+ const previewDocument = await PreviewDocument.createFromHeaders();
9
+ if (!previewDocument.matches({
10
+ type: "page",
11
+ path
12
+ })) {
13
+ return this.liveSdk.getPage(path);
14
+ }
15
+ return this.dataProvider.getPageById(previewDocument.getId());
16
+ }
17
+ async listPages() {
18
+ return this.liveSdk.listPages();
19
+ }
20
+ }
21
+
22
+ //# sourceMappingURL=PreviewSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PreviewDocument","PreviewSdk","constructor","dataProvider","liveSdk","getPage","path","previewDocument","createFromHeaders","matches","type","getPageById","getId","listPages"],"sources":["PreviewSdk.ts"],"sourcesContent":["import type { IContentSdk, IDataProvider, PublicPage } from \"~/types.js\";\nimport { PreviewDocument } from \"~/PreviewDocument\";\n\nexport class PreviewSdk implements IContentSdk {\n private liveSdk: IContentSdk;\n private dataProvider: IDataProvider;\n\n constructor(dataProvider: IDataProvider, liveSdk: IContentSdk) {\n this.liveSdk = liveSdk;\n this.dataProvider = dataProvider;\n }\n\n async getPage(path: string): Promise<PublicPage | null> {\n const previewDocument = await PreviewDocument.createFromHeaders();\n if (!previewDocument.matches({ type: \"page\", path })) {\n return this.liveSdk.getPage(path);\n }\n return this.dataProvider.getPageById(previewDocument.getId());\n }\n\n async listPages(): Promise<PublicPage[]> {\n return this.liveSdk.listPages();\n }\n}\n"],"mappings":"AACA,SAASA,eAAe;AAExB,OAAO,MAAMC,UAAU,CAAwB;EAI3CC,WAAWA,CAACC,YAA2B,EAAEC,OAAoB,EAAE;IAC3D,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACD,YAAY,GAAGA,YAAY;EACpC;EAEA,MAAME,OAAOA,CAACC,IAAY,EAA8B;IACpD,MAAMC,eAAe,GAAG,MAAMP,eAAe,CAACQ,iBAAiB,CAAC,CAAC;IACjE,IAAI,CAACD,eAAe,CAACE,OAAO,CAAC;MAAEC,IAAI,EAAE,MAAM;MAAEJ;IAAK,CAAC,CAAC,EAAE;MAClD,OAAO,IAAI,CAACF,OAAO,CAACC,OAAO,CAACC,IAAI,CAAC;IACrC;IACA,OAAO,IAAI,CAACH,YAAY,CAACQ,WAAW,CAACJ,eAAe,CAACK,KAAK,CAAC,CAAC,CAAC;EACjE;EAEA,MAAMC,SAASA,CAAA,EAA0B;IACrC,OAAO,IAAI,CAACT,OAAO,CAACS,SAAS,CAAC,CAAC;EACnC;AACJ","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import type { ElementBoxData, ElementSlotBoxData } from "./types.js";
2
+ export declare class PreviewViewport {
3
+ getBoxes(): {
4
+ [x: string]: ElementBoxData | ElementSlotBoxData;
5
+ };
6
+ getViewport(): import("./ViewportManager").ViewportInfo;
7
+ getVisibleBoxes(): Record<string, ElementBoxData | ElementSlotBoxData>;
8
+ destroy(): void;
9
+ }
@@ -0,0 +1,88 @@
1
+ import { viewportManager } from "./ViewportManager";
2
+ export class PreviewViewport {
3
+ getBoxes() {
4
+ const elementBoxes = {};
5
+
6
+ // Collect positions for all elements
7
+ const elements = document.querySelectorAll("[data-element-id]");
8
+ elements.forEach(element => {
9
+ const id = element.getAttribute("data-element-id");
10
+ const depth = element.getAttribute("data-depth");
11
+ if (id) {
12
+ // Get the bounding box relative to the viewport
13
+ const rect = element.firstElementChild?.getBoundingClientRect();
14
+ if (!rect) {
15
+ return;
16
+ }
17
+
18
+ // Convert DOMRect to a plain object to ensure it can be serialized
19
+ elementBoxes[id] = {
20
+ type: "element",
21
+ depth: parseInt(depth ?? "0"),
22
+ parentId: element.getAttribute("data-parent-id"),
23
+ parentSlot: element.getAttribute("data-parent-slot"),
24
+ parentIndex: parseInt(element.getAttribute("data-parent-index") ?? "0"),
25
+ top: rect.top,
26
+ left: rect.left,
27
+ width: rect.width,
28
+ height: rect.height
29
+ };
30
+ }
31
+ });
32
+
33
+ // Collect positions for all element slots
34
+ const slotBoxes = {};
35
+ const elementSlots = document.querySelectorAll("[data-role='element-slot']");
36
+ elementSlots.forEach(element => {
37
+ const parentId = element.getAttribute("data-parent-id");
38
+ const slot = element.getAttribute("data-parent-slot");
39
+ const depth = element.getAttribute("data-depth");
40
+
41
+ // Get the bounding box relative to the viewport
42
+ const rect = element.getBoundingClientRect();
43
+
44
+ // Convert DOMRect to a plain object to ensure it can be serialized
45
+ slotBoxes[`${parentId}:${slot}`] = {
46
+ type: "element-slot",
47
+ depth: parseInt(depth ?? "0"),
48
+ parentId: element.getAttribute("data-parent-id"),
49
+ parentSlot: element.getAttribute("data-parent-slot"),
50
+ parentIndex: parseInt(element.getAttribute("data-parent-index") ?? "0"),
51
+ top: rect.top,
52
+ left: rect.left,
53
+ width: rect.width,
54
+ height: rect.height
55
+ };
56
+ });
57
+ return {
58
+ ...elementBoxes,
59
+ ...slotBoxes
60
+ };
61
+ }
62
+ getViewport() {
63
+ return viewportManager.getViewport();
64
+ }
65
+ getVisibleBoxes() {
66
+ const allBoxes = this.getBoxes();
67
+ const viewport = this.getViewport();
68
+ const visibleBoxes = {};
69
+ for (const [id, box] of Object.entries(allBoxes)) {
70
+ const {
71
+ top,
72
+ left,
73
+ width,
74
+ height
75
+ } = box;
76
+ const bottom = top + height;
77
+ const right = left + width;
78
+ const isVisible = bottom > 0 && right > 0 && top < viewport.height && left < viewport.width;
79
+ if (isVisible) {
80
+ visibleBoxes[id] = box;
81
+ }
82
+ }
83
+ return visibleBoxes;
84
+ }
85
+ destroy() {}
86
+ }
87
+
88
+ //# sourceMappingURL=PreviewViewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["viewportManager","PreviewViewport","getBoxes","elementBoxes","elements","document","querySelectorAll","forEach","element","id","getAttribute","depth","rect","firstElementChild","getBoundingClientRect","type","parseInt","parentId","parentSlot","parentIndex","top","left","width","height","slotBoxes","elementSlots","slot","getViewport","getVisibleBoxes","allBoxes","viewport","visibleBoxes","box","Object","entries","bottom","right","isVisible","destroy"],"sources":["PreviewViewport.ts"],"sourcesContent":["import type { ElementBoxData, ElementSlotBoxData } from \"~/types.js\";\nimport { viewportManager } from \"./ViewportManager\";\n\nexport class PreviewViewport {\n getBoxes() {\n const elementBoxes: Record<string, ElementBoxData> = {};\n\n // Collect positions for all elements\n const elements = document.querySelectorAll(\"[data-element-id]\");\n\n elements.forEach(element => {\n const id = element.getAttribute(\"data-element-id\");\n const depth = element.getAttribute(\"data-depth\");\n if (id) {\n // Get the bounding box relative to the viewport\n const rect = element.firstElementChild?.getBoundingClientRect();\n\n if (!rect) {\n return;\n }\n\n // Convert DOMRect to a plain object to ensure it can be serialized\n elementBoxes[id] = {\n type: \"element\",\n depth: parseInt(depth ?? \"0\"),\n parentId: element.getAttribute(\"data-parent-id\")!,\n parentSlot: element.getAttribute(\"data-parent-slot\")!,\n parentIndex: parseInt(element.getAttribute(\"data-parent-index\") ?? \"0\"),\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n };\n }\n });\n\n // Collect positions for all element slots\n const slotBoxes: Record<string, ElementSlotBoxData> = {};\n\n const elementSlots = document.querySelectorAll(\"[data-role='element-slot']\");\n\n elementSlots.forEach(element => {\n const parentId = element.getAttribute(\"data-parent-id\");\n const slot = element.getAttribute(\"data-parent-slot\");\n const depth = element.getAttribute(\"data-depth\");\n\n // Get the bounding box relative to the viewport\n const rect = element.getBoundingClientRect();\n\n // Convert DOMRect to a plain object to ensure it can be serialized\n slotBoxes[`${parentId}:${slot}`] = {\n type: \"element-slot\",\n depth: parseInt(depth ?? \"0\"),\n parentId: element.getAttribute(\"data-parent-id\")!,\n parentSlot: element.getAttribute(\"data-parent-slot\")!,\n parentIndex: parseInt(element.getAttribute(\"data-parent-index\") ?? \"0\"),\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n };\n });\n\n return { ...elementBoxes, ...slotBoxes };\n }\n\n getViewport() {\n return viewportManager.getViewport();\n }\n\n getVisibleBoxes(): Record<string, ElementBoxData | ElementSlotBoxData> {\n const allBoxes = this.getBoxes();\n const viewport = this.getViewport();\n\n const visibleBoxes: Record<string, ElementBoxData | ElementSlotBoxData> = {};\n\n for (const [id, box] of Object.entries(allBoxes)) {\n const { top, left, width, height } = box;\n\n const bottom = top + height;\n const right = left + width;\n\n const isVisible =\n bottom > 0 && right > 0 && top < viewport.height && left < viewport.width;\n\n if (isVisible) {\n visibleBoxes[id] = box;\n }\n }\n\n return visibleBoxes;\n }\n\n destroy(): void {}\n}\n"],"mappings":"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","ignoreList":[]}
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Website Builder SDK
2
+
3
+ An integration SDK for Webiny Website Builder.
@@ -0,0 +1,5 @@
1
+ export declare const resizeObserver: {
2
+ observe: (element: HTMLElement) => void;
3
+ unobserve: (element: HTMLElement) => void;
4
+ onChange: (cb: () => void) => void;
5
+ };
@@ -0,0 +1,41 @@
1
+ let resizeQueue = {};
2
+ const onChangeListeners = [];
3
+ const flushResizeQueue = () => {
4
+ if (Object.entries(resizeQueue).length > 0) {
5
+ onChangeListeners.forEach(entry => {
6
+ entry();
7
+ });
8
+ }
9
+ resizeQueue = {};
10
+ };
11
+ let observer;
12
+ if (typeof window === "undefined") {
13
+ observer = {
14
+ observe: () => {},
15
+ unobserve: () => {}
16
+ };
17
+ } else {
18
+ observer = new ResizeObserver(entries => {
19
+ for (const entry of entries) {
20
+ const el = entry.target;
21
+ const id = el.getAttribute("data-element-id");
22
+ if (id) {
23
+ resizeQueue[id] = el.getBoundingClientRect();
24
+ }
25
+ }
26
+ requestAnimationFrame(flushResizeQueue);
27
+ });
28
+ }
29
+ export const resizeObserver = {
30
+ observe: element => {
31
+ observer.observe(element);
32
+ },
33
+ unobserve: element => {
34
+ observer.unobserve(element);
35
+ },
36
+ onChange: cb => {
37
+ onChangeListeners.push(cb);
38
+ }
39
+ };
40
+
41
+ //# sourceMappingURL=ResizeObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["resizeQueue","onChangeListeners","flushResizeQueue","Object","entries","length","forEach","entry","observer","window","observe","unobserve","ResizeObserver","el","target","id","getAttribute","getBoundingClientRect","requestAnimationFrame","resizeObserver","element","onChange","cb","push"],"sources":["ResizeObserver.ts"],"sourcesContent":["let resizeQueue: Record<string, DOMRect> = {};\nconst onChangeListeners: Array<() => void> = [];\n\nconst flushResizeQueue = () => {\n if (Object.entries(resizeQueue).length > 0) {\n onChangeListeners.forEach(entry => {\n entry();\n });\n }\n resizeQueue = {};\n};\n\nlet observer: any;\n\nif (typeof window === \"undefined\") {\n observer = {\n observe: () => {},\n unobserve: () => {}\n };\n} else {\n observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n const id = el.getAttribute(\"data-element-id\");\n if (id) {\n resizeQueue[id] = el.getBoundingClientRect();\n }\n }\n requestAnimationFrame(flushResizeQueue);\n });\n}\n\nexport const resizeObserver = {\n observe: (element: HTMLElement) => {\n observer.observe(element);\n },\n unobserve: (element: HTMLElement) => {\n observer.unobserve(element);\n },\n onChange: (cb: () => void) => {\n onChangeListeners.push(cb);\n }\n};\n"],"mappings":"AAAA,IAAIA,WAAoC,GAAG,CAAC,CAAC;AAC7C,MAAMC,iBAAoC,GAAG,EAAE;AAE/C,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EAC3B,IAAIC,MAAM,CAACC,OAAO,CAACJ,WAAW,CAAC,CAACK,MAAM,GAAG,CAAC,EAAE;IACxCJ,iBAAiB,CAACK,OAAO,CAACC,KAAK,IAAI;MAC/BA,KAAK,CAAC,CAAC;IACX,CAAC,CAAC;EACN;EACAP,WAAW,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,IAAIQ,QAAa;AAEjB,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;EAC/BD,QAAQ,GAAG;IACPE,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC;IACjBC,SAAS,EAAEA,CAAA,KAAM,CAAC;EACtB,CAAC;AACL,CAAC,MAAM;EACHH,QAAQ,GAAG,IAAII,cAAc,CAACR,OAAO,IAAI;IACrC,KAAK,MAAMG,KAAK,IAAIH,OAAO,EAAE;MACzB,MAAMS,EAAE,GAAGN,KAAK,CAACO,MAAqB;MACtC,MAAMC,EAAE,GAAGF,EAAE,CAACG,YAAY,CAAC,iBAAiB,CAAC;MAC7C,IAAID,EAAE,EAAE;QACJf,WAAW,CAACe,EAAE,CAAC,GAAGF,EAAE,CAACI,qBAAqB,CAAC,CAAC;MAChD;IACJ;IACAC,qBAAqB,CAAChB,gBAAgB,CAAC;EAC3C,CAAC,CAAC;AACN;AAEA,OAAO,MAAMiB,cAAc,GAAG;EAC1BT,OAAO,EAAGU,OAAoB,IAAK;IAC/BZ,QAAQ,CAACE,OAAO,CAACU,OAAO,CAAC;EAC7B,CAAC;EACDT,SAAS,EAAGS,OAAoB,IAAK;IACjCZ,QAAQ,CAACG,SAAS,CAACS,OAAO,CAAC;EAC/B,CAAC;EACDC,QAAQ,EAAGC,EAAc,IAAK;IAC1BrB,iBAAiB,CAACsB,IAAI,CAACD,EAAE,CAAC;EAC9B;AACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import type { DocumentElementBindings, DocumentElementStyleBindings } from "./types";
2
+ import { StylesUpdater } from "./StylesUpdater";
3
+ type DeepBindings = Record<string, any>;
4
+ export type ElementStylesBindings = {
5
+ styles: DocumentElementStyleBindings;
6
+ overrides: {
7
+ [breakpoint: string]: {
8
+ styles: DocumentElementStyleBindings;
9
+ };
10
+ };
11
+ };
12
+ /**
13
+ * Handles deep-to-flat and flat-to-deep conversion of style bindings,
14
+ * with breakpoint inheritance awareness.
15
+ */
16
+ export declare class StylesBindingsProcessor {
17
+ private breakpoints;
18
+ private rawBindings;
19
+ private elementId;
20
+ constructor(elementId: string, breakpoints: string[], rawBindings: DocumentElementBindings);
21
+ /**
22
+ * Converts flat style bindings into deep styles object (removes `.static`).
23
+ */
24
+ toDeepStyles(styles?: DocumentElementBindings["styles"]): DeepBindings;
25
+ /**
26
+ * Flattens deep styles object into flat bindings with `.static` wrappers.
27
+ * Skips overrides where the value matches inherited parent breakpoint.
28
+ */
29
+ createUpdate(styles: DeepBindings, currentBreakpoint: string): StylesUpdater;
30
+ private getBaseStyles;
31
+ private isBaseBreakpoint;
32
+ }
33
+ export {};
@@ -0,0 +1,91 @@
1
+ import set from "lodash/set";
2
+ import unset from "lodash/unset";
3
+ import { InheritedValueResolver } from "./InheritedValueResolver";
4
+ import { StylesUpdater } from "./StylesUpdater";
5
+ /**
6
+ * Handles deep-to-flat and flat-to-deep conversion of style bindings,
7
+ * with breakpoint inheritance awareness.
8
+ */
9
+ export class StylesBindingsProcessor {
10
+ constructor(elementId, breakpoints, rawBindings) {
11
+ this.elementId = elementId;
12
+ this.breakpoints = breakpoints;
13
+ this.rawBindings = rawBindings;
14
+ }
15
+
16
+ /**
17
+ * Converts flat style bindings into deep styles object (removes `.static`).
18
+ */
19
+ toDeepStyles(styles = {}) {
20
+ const result = {};
21
+ Object.keys(styles).forEach(key => {
22
+ // @ts-expect-error Style keys cannot be indexed with a string.
23
+ result[key] = styles[key].static;
24
+ });
25
+ return result;
26
+ }
27
+
28
+ /**
29
+ * Flattens deep styles object into flat bindings with `.static` wrappers.
30
+ * Skips overrides where the value matches inherited parent breakpoint.
31
+ */
32
+ createUpdate(styles, currentBreakpoint) {
33
+ const rebuilt = this.getBaseStyles();
34
+ const valueResolver = new InheritedValueResolver(this.breakpoints, breakpoint => {
35
+ if (this.isBaseBreakpoint(breakpoint)) {
36
+ return this.rawBindings.styles;
37
+ }
38
+ return this.rawBindings?.overrides?.[breakpoint]?.styles;
39
+ });
40
+
41
+ // Collect original keys for the breakpoint
42
+ const originalStyles = this.isBaseBreakpoint(currentBreakpoint) ? this.rawBindings.styles || {} : this.rawBindings?.overrides?.[currentBreakpoint]?.styles || {};
43
+ const newKeys = new Set(Object.keys(styles));
44
+ const originalKeys = Object.keys(originalStyles);
45
+
46
+ // Remove keys that no longer exist
47
+ for (const key of originalKeys) {
48
+ if (!newKeys.has(key)) {
49
+ if (this.isBaseBreakpoint(currentBreakpoint)) {
50
+ unset(rebuilt, `styles.${key}`);
51
+ } else {
52
+ unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);
53
+ }
54
+ }
55
+ }
56
+ for (const [key, value] of Object.entries(styles)) {
57
+ if (this.isBaseBreakpoint(currentBreakpoint)) {
58
+ set(rebuilt, `styles.${key}.static`, value);
59
+ } else {
60
+ const inheritedValue = valueResolver.getInheritedValue(key, currentBreakpoint);
61
+ if (value !== inheritedValue) {
62
+ set(rebuilt, `overrides.${currentBreakpoint}.styles.${key}.static`, value);
63
+ } else {
64
+ unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);
65
+ }
66
+ }
67
+ }
68
+ return new StylesUpdater(this.elementId, rebuilt);
69
+ }
70
+ getBaseStyles() {
71
+ const baseStyles = {
72
+ styles: structuredClone(this.rawBindings.styles) ?? {},
73
+ overrides: {}
74
+ };
75
+
76
+ // Clone existing overrides if present, to avoid losing breakpoint overrides
77
+ if (this.rawBindings.overrides) {
78
+ for (const [bp, overrides] of Object.entries(this.rawBindings.overrides)) {
79
+ if (overrides.styles) {
80
+ set(baseStyles, `overrides.${bp}.styles`, structuredClone(this.rawBindings.overrides[bp].styles));
81
+ }
82
+ }
83
+ }
84
+ return baseStyles;
85
+ }
86
+ isBaseBreakpoint(name) {
87
+ return this.breakpoints.indexOf(name) === 0;
88
+ }
89
+ }
90
+
91
+ //# sourceMappingURL=StylesBindingsProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["set","unset","InheritedValueResolver","StylesUpdater","StylesBindingsProcessor","constructor","elementId","breakpoints","rawBindings","toDeepStyles","styles","result","Object","keys","forEach","key","static","createUpdate","currentBreakpoint","rebuilt","getBaseStyles","valueResolver","breakpoint","isBaseBreakpoint","overrides","originalStyles","newKeys","Set","originalKeys","has","value","entries","inheritedValue","getInheritedValue","baseStyles","structuredClone","bp","name","indexOf"],"sources":["StylesBindingsProcessor.ts"],"sourcesContent":["import set from \"lodash/set\";\nimport unset from \"lodash/unset\";\nimport type { DocumentElementBindings, DocumentElementStyleBindings } from \"~/types\";\nimport { InheritedValueResolver } from \"~/InheritedValueResolver\";\nimport { StylesUpdater } from \"./StylesUpdater\";\n\ntype DeepBindings = Record<string, any>;\n\nexport type ElementStylesBindings = {\n styles: DocumentElementStyleBindings;\n overrides: {\n [breakpoint: string]: {\n styles: DocumentElementStyleBindings;\n };\n };\n};\n\n/**\n * Handles deep-to-flat and flat-to-deep conversion of style bindings,\n * with breakpoint inheritance awareness.\n */\nexport class StylesBindingsProcessor {\n private breakpoints: string[];\n private rawBindings: DocumentElementBindings;\n private elementId: string;\n\n constructor(elementId: string, breakpoints: string[], rawBindings: DocumentElementBindings) {\n this.elementId = elementId;\n this.breakpoints = breakpoints;\n this.rawBindings = rawBindings;\n }\n\n /**\n * Converts flat style bindings into deep styles object (removes `.static`).\n */\n public toDeepStyles(styles: DocumentElementBindings[\"styles\"] = {}): DeepBindings {\n const result: DeepBindings = {};\n Object.keys(styles).forEach(key => {\n // @ts-expect-error Style keys cannot be indexed with a string.\n result[key] = styles[key].static;\n });\n return result;\n }\n\n /**\n * Flattens deep styles object into flat bindings with `.static` wrappers.\n * Skips overrides where the value matches inherited parent breakpoint.\n */\n public createUpdate(styles: DeepBindings, currentBreakpoint: string) {\n const rebuilt = this.getBaseStyles();\n const valueResolver = new InheritedValueResolver(this.breakpoints, breakpoint => {\n if (this.isBaseBreakpoint(breakpoint)) {\n return this.rawBindings.styles;\n }\n return this.rawBindings?.overrides?.[breakpoint]?.styles;\n });\n\n // Collect original keys for the breakpoint\n const originalStyles = this.isBaseBreakpoint(currentBreakpoint)\n ? this.rawBindings.styles || {}\n : this.rawBindings?.overrides?.[currentBreakpoint]?.styles || {};\n\n const newKeys = new Set(Object.keys(styles));\n const originalKeys = Object.keys(originalStyles);\n\n // Remove keys that no longer exist\n for (const key of originalKeys) {\n if (!newKeys.has(key)) {\n if (this.isBaseBreakpoint(currentBreakpoint)) {\n unset(rebuilt, `styles.${key}`);\n } else {\n unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);\n }\n }\n }\n\n for (const [key, value] of Object.entries(styles)) {\n if (this.isBaseBreakpoint(currentBreakpoint)) {\n set(rebuilt, `styles.${key}.static`, value);\n } else {\n const inheritedValue = valueResolver.getInheritedValue(key, currentBreakpoint);\n\n if (value !== inheritedValue) {\n set(rebuilt, `overrides.${currentBreakpoint}.styles.${key}.static`, value);\n } else {\n unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);\n }\n }\n }\n\n return new StylesUpdater(this.elementId, rebuilt);\n }\n\n private getBaseStyles(): ElementStylesBindings {\n const baseStyles: ElementStylesBindings = {\n styles: structuredClone(this.rawBindings.styles) ?? {},\n overrides: {}\n };\n\n // Clone existing overrides if present, to avoid losing breakpoint overrides\n if (this.rawBindings.overrides) {\n for (const [bp, overrides] of Object.entries(this.rawBindings.overrides)) {\n if (overrides.styles) {\n set(\n baseStyles,\n `overrides.${bp}.styles`,\n structuredClone(this.rawBindings.overrides[bp].styles)\n );\n }\n }\n }\n\n return baseStyles;\n }\n\n private isBaseBreakpoint(name: string): boolean {\n return this.breakpoints.indexOf(name) === 0;\n }\n}\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,YAAY;AAC5B,OAAOC,KAAK,MAAM,cAAc;AAEhC,SAASC,sBAAsB;AAC/B,SAASC,aAAa;AAatB;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,CAAC;EAKjCC,WAAWA,CAACC,SAAiB,EAAEC,WAAqB,EAAEC,WAAoC,EAAE;IACxF,IAAI,CAACF,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,WAAW,GAAGA,WAAW;EAClC;;EAEA;AACJ;AACA;EACWC,YAAYA,CAACC,MAAyC,GAAG,CAAC,CAAC,EAAgB;IAC9E,MAAMC,MAAoB,GAAG,CAAC,CAAC;IAC/BC,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,CAACI,OAAO,CAACC,GAAG,IAAI;MAC/B;MACAJ,MAAM,CAACI,GAAG,CAAC,GAAGL,MAAM,CAACK,GAAG,CAAC,CAACC,MAAM;IACpC,CAAC,CAAC;IACF,OAAOL,MAAM;EACjB;;EAEA;AACJ;AACA;AACA;EACWM,YAAYA,CAACP,MAAoB,EAAEQ,iBAAyB,EAAE;IACjE,MAAMC,OAAO,GAAG,IAAI,CAACC,aAAa,CAAC,CAAC;IACpC,MAAMC,aAAa,GAAG,IAAInB,sBAAsB,CAAC,IAAI,CAACK,WAAW,EAAEe,UAAU,IAAI;MAC7E,IAAI,IAAI,CAACC,gBAAgB,CAACD,UAAU,CAAC,EAAE;QACnC,OAAO,IAAI,CAACd,WAAW,CAACE,MAAM;MAClC;MACA,OAAO,IAAI,CAACF,WAAW,EAAEgB,SAAS,GAAGF,UAAU,CAAC,EAAEZ,MAAM;IAC5D,CAAC,CAAC;;IAEF;IACA,MAAMe,cAAc,GAAG,IAAI,CAACF,gBAAgB,CAACL,iBAAiB,CAAC,GACzD,IAAI,CAACV,WAAW,CAACE,MAAM,IAAI,CAAC,CAAC,GAC7B,IAAI,CAACF,WAAW,EAAEgB,SAAS,GAAGN,iBAAiB,CAAC,EAAER,MAAM,IAAI,CAAC,CAAC;IAEpE,MAAMgB,OAAO,GAAG,IAAIC,GAAG,CAACf,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,CAAC;IAC5C,MAAMkB,YAAY,GAAGhB,MAAM,CAACC,IAAI,CAACY,cAAc,CAAC;;IAEhD;IACA,KAAK,MAAMV,GAAG,IAAIa,YAAY,EAAE;MAC5B,IAAI,CAACF,OAAO,CAACG,GAAG,CAACd,GAAG,CAAC,EAAE;QACnB,IAAI,IAAI,CAACQ,gBAAgB,CAACL,iBAAiB,CAAC,EAAE;UAC1CjB,KAAK,CAACkB,OAAO,EAAE,UAAUJ,GAAG,EAAE,CAAC;QACnC,CAAC,MAAM;UACHd,KAAK,CAACkB,OAAO,EAAE,aAAaD,iBAAiB,WAAWH,GAAG,EAAE,CAAC;QAClE;MACJ;IACJ;IAEA,KAAK,MAAM,CAACA,GAAG,EAAEe,KAAK,CAAC,IAAIlB,MAAM,CAACmB,OAAO,CAACrB,MAAM,CAAC,EAAE;MAC/C,IAAI,IAAI,CAACa,gBAAgB,CAACL,iBAAiB,CAAC,EAAE;QAC1ClB,GAAG,CAACmB,OAAO,EAAE,UAAUJ,GAAG,SAAS,EAAEe,KAAK,CAAC;MAC/C,CAAC,MAAM;QACH,MAAME,cAAc,GAAGX,aAAa,CAACY,iBAAiB,CAAClB,GAAG,EAAEG,iBAAiB,CAAC;QAE9E,IAAIY,KAAK,KAAKE,cAAc,EAAE;UAC1BhC,GAAG,CAACmB,OAAO,EAAE,aAAaD,iBAAiB,WAAWH,GAAG,SAAS,EAAEe,KAAK,CAAC;QAC9E,CAAC,MAAM;UACH7B,KAAK,CAACkB,OAAO,EAAE,aAAaD,iBAAiB,WAAWH,GAAG,EAAE,CAAC;QAClE;MACJ;IACJ;IAEA,OAAO,IAAIZ,aAAa,CAAC,IAAI,CAACG,SAAS,EAAEa,OAAO,CAAC;EACrD;EAEQC,aAAaA,CAAA,EAA0B;IAC3C,MAAMc,UAAiC,GAAG;MACtCxB,MAAM,EAAEyB,eAAe,CAAC,IAAI,CAAC3B,WAAW,CAACE,MAAM,CAAC,IAAI,CAAC,CAAC;MACtDc,SAAS,EAAE,CAAC;IAChB,CAAC;;IAED;IACA,IAAI,IAAI,CAAChB,WAAW,CAACgB,SAAS,EAAE;MAC5B,KAAK,MAAM,CAACY,EAAE,EAAEZ,SAAS,CAAC,IAAIZ,MAAM,CAACmB,OAAO,CAAC,IAAI,CAACvB,WAAW,CAACgB,SAAS,CAAC,EAAE;QACtE,IAAIA,SAAS,CAACd,MAAM,EAAE;UAClBV,GAAG,CACCkC,UAAU,EACV,aAAaE,EAAE,SAAS,EACxBD,eAAe,CAAC,IAAI,CAAC3B,WAAW,CAACgB,SAAS,CAACY,EAAE,CAAC,CAAC1B,MAAM,CACzD,CAAC;QACL;MACJ;IACJ;IAEA,OAAOwB,UAAU;EACrB;EAEQX,gBAAgBA,CAACc,IAAY,EAAW;IAC5C,OAAO,IAAI,CAAC9B,WAAW,CAAC+B,OAAO,CAACD,IAAI,CAAC,KAAK,CAAC;EAC/C;AACJ","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import type { Document, DocumentElementBindings } from "./types";
2
+ import type { IBindingsUpdater } from "./IBindingsUpdater";
3
+ import type { ElementStylesBindings } from "./StylesBindingsProcessor";
4
+ export declare class StylesUpdater implements IBindingsUpdater {
5
+ private readonly bindings;
6
+ private elementId;
7
+ constructor(elementId: string, bindings: ElementStylesBindings);
8
+ applyToDocument(document: Document): void;
9
+ createJsonPatch(bindings: DocumentElementBindings): import("./jsonPatch").JsonPatchOperation[];
10
+ }
@@ -0,0 +1,34 @@
1
+ import { jsonPatch } from "./jsonPatch";
2
+ import set from "lodash/set";
3
+ export class StylesUpdater {
4
+ constructor(elementId, bindings) {
5
+ this.elementId = elementId;
6
+ this.bindings = bindings;
7
+ }
8
+ applyToDocument(document) {
9
+ if (this.bindings.styles) {
10
+ document.bindings[this.elementId].styles = this.bindings.styles;
11
+ }
12
+ if (this.bindings.overrides) {
13
+ for (const [bp, overrides] of Object.entries(this.bindings.overrides)) {
14
+ if (overrides.styles) {
15
+ set(document.bindings, `${this.elementId}.overrides.${bp}.styles`, structuredClone(this.bindings.overrides[bp].styles));
16
+ }
17
+ }
18
+ }
19
+ }
20
+ createJsonPatch(bindings) {
21
+ const toCompare = {
22
+ ...this.bindings
23
+ };
24
+ if (Object.keys(toCompare.overrides ?? {}).length === 0) {
25
+ delete toCompare.overrides;
26
+ }
27
+ const ignore = ["/inputs", "/overrides/inputs", "/metadata"];
28
+ return jsonPatch.compare(bindings, toCompare).filter(op => {
29
+ return !ignore.some(prefix => op.path.startsWith(prefix));
30
+ });
31
+ }
32
+ }
33
+
34
+ //# sourceMappingURL=StylesUpdater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsonPatch","set","StylesUpdater","constructor","elementId","bindings","applyToDocument","document","styles","overrides","bp","Object","entries","structuredClone","createJsonPatch","toCompare","keys","length","ignore","compare","filter","op","some","prefix","path","startsWith"],"sources":["StylesUpdater.ts"],"sourcesContent":["import { jsonPatch } from \"~/jsonPatch\";\nimport set from \"lodash/set\";\nimport type { Document, DocumentElementBindings } from \"./types\";\nimport type { IBindingsUpdater } from \"./IBindingsUpdater\";\nimport type { ElementStylesBindings } from \"./StylesBindingsProcessor\";\n\nexport class StylesUpdater implements IBindingsUpdater {\n private readonly bindings: ElementStylesBindings;\n private elementId: string;\n\n constructor(elementId: string, bindings: ElementStylesBindings) {\n this.elementId = elementId;\n this.bindings = bindings;\n }\n\n applyToDocument(document: Document) {\n if (this.bindings.styles) {\n document.bindings[this.elementId].styles = this.bindings.styles;\n }\n\n if (this.bindings.overrides) {\n for (const [bp, overrides] of Object.entries(this.bindings.overrides)) {\n if (overrides.styles) {\n set(\n document.bindings,\n `${this.elementId}.overrides.${bp}.styles`,\n structuredClone(this.bindings.overrides[bp].styles)\n );\n }\n }\n }\n }\n\n createJsonPatch(bindings: DocumentElementBindings) {\n const toCompare: Partial<DocumentElementBindings> = { ...this.bindings };\n if (Object.keys(toCompare.overrides ?? {}).length === 0) {\n delete toCompare.overrides;\n }\n\n const ignore = [\"/inputs\", \"/overrides/inputs\", \"/metadata\"];\n\n return jsonPatch.compare(bindings, toCompare).filter(op => {\n return !ignore.some(prefix => op.path.startsWith(prefix));\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,OAAOC,GAAG,MAAM,YAAY;AAK5B,OAAO,MAAMC,aAAa,CAA6B;EAInDC,WAAWA,CAACC,SAAiB,EAAEC,QAA+B,EAAE;IAC5D,IAAI,CAACD,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,QAAQ,GAAGA,QAAQ;EAC5B;EAEAC,eAAeA,CAACC,QAAkB,EAAE;IAChC,IAAI,IAAI,CAACF,QAAQ,CAACG,MAAM,EAAE;MACtBD,QAAQ,CAACF,QAAQ,CAAC,IAAI,CAACD,SAAS,CAAC,CAACI,MAAM,GAAG,IAAI,CAACH,QAAQ,CAACG,MAAM;IACnE;IAEA,IAAI,IAAI,CAACH,QAAQ,CAACI,SAAS,EAAE;MACzB,KAAK,MAAM,CAACC,EAAE,EAAED,SAAS,CAAC,IAAIE,MAAM,CAACC,OAAO,CAAC,IAAI,CAACP,QAAQ,CAACI,SAAS,CAAC,EAAE;QACnE,IAAIA,SAAS,CAACD,MAAM,EAAE;UAClBP,GAAG,CACCM,QAAQ,CAACF,QAAQ,EACjB,GAAG,IAAI,CAACD,SAAS,cAAcM,EAAE,SAAS,EAC1CG,eAAe,CAAC,IAAI,CAACR,QAAQ,CAACI,SAAS,CAACC,EAAE,CAAC,CAACF,MAAM,CACtD,CAAC;QACL;MACJ;IACJ;EACJ;EAEAM,eAAeA,CAACT,QAAiC,EAAE;IAC/C,MAAMU,SAA2C,GAAG;MAAE,GAAG,IAAI,CAACV;IAAS,CAAC;IACxE,IAAIM,MAAM,CAACK,IAAI,CAACD,SAAS,CAACN,SAAS,IAAI,CAAC,CAAC,CAAC,CAACQ,MAAM,KAAK,CAAC,EAAE;MACrD,OAAOF,SAAS,CAACN,SAAS;IAC9B;IAEA,MAAMS,MAAM,GAAG,CAAC,SAAS,EAAE,mBAAmB,EAAE,WAAW,CAAC;IAE5D,OAAOlB,SAAS,CAACmB,OAAO,CAACd,QAAQ,EAAEU,SAAS,CAAC,CAACK,MAAM,CAACC,EAAE,IAAI;MACvD,OAAO,CAACH,MAAM,CAACI,IAAI,CAACC,MAAM,IAAIF,EAAE,CAACG,IAAI,CAACC,UAAU,CAACF,MAAM,CAAC,CAAC;IAC7D,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
package/Theme.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { WebsiteBuilderTheme, WebsiteBuilderThemeInput } from "./types/WebsiteBuilderTheme";
2
+ export declare class Theme {
3
+ static from(input: WebsiteBuilderThemeInput): WebsiteBuilderTheme;
4
+ }
package/Theme.js ADDED
@@ -0,0 +1,36 @@
1
+ import deepMerge from "deepmerge";
2
+ import { defaultBreakpoints } from "./defaultBreakpoints";
3
+ import { createLexicalTheme } from "./lexical/createLexicalTheme";
4
+ export class Theme {
5
+ static from(input) {
6
+ const {
7
+ custom = {},
8
+ ...builtInOverrides
9
+ } = input?.breakpoints ?? {};
10
+ const mergedBreakpoints = deepMerge.all([{}, defaultBreakpoints, builtInOverrides, custom]);
11
+ const breakpoints = [];
12
+ Object.entries(mergedBreakpoints ?? {}).forEach(([name, breakpoint]) => {
13
+ breakpoints.push({
14
+ name,
15
+ ...breakpoint
16
+ });
17
+ });
18
+ return {
19
+ css: input.css,
20
+ cssVariables: input.cssVariables,
21
+ fonts: input.fonts,
22
+ breakpoints: breakpoints.sort((a, b) => b.maxWidth - a.maxWidth),
23
+ lexical: createLexicalTheme(input?.lexical),
24
+ styles: {
25
+ colors: {
26
+ ...input?.styles?.colors
27
+ },
28
+ typography: {
29
+ ...input?.styles?.typography
30
+ }
31
+ }
32
+ };
33
+ }
34
+ }
35
+
36
+ //# sourceMappingURL=Theme.js.map
package/Theme.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["deepMerge","defaultBreakpoints","createLexicalTheme","Theme","from","input","custom","builtInOverrides","breakpoints","mergedBreakpoints","all","Object","entries","forEach","name","breakpoint","push","css","cssVariables","fonts","sort","a","b","maxWidth","lexical","styles","colors","typography"],"sources":["Theme.ts"],"sourcesContent":["import deepMerge from \"deepmerge\";\nimport type {\n Breakpoint,\n WebsiteBuilderTheme,\n WebsiteBuilderThemeInput\n} from \"~/types/WebsiteBuilderTheme\";\nimport { defaultBreakpoints } from \"~/defaultBreakpoints\";\nimport { createLexicalTheme } from \"~/lexical/createLexicalTheme\";\n\nexport class Theme {\n static from(input: WebsiteBuilderThemeInput): WebsiteBuilderTheme {\n const { custom = {}, ...builtInOverrides } = input?.breakpoints ?? {};\n\n const mergedBreakpoints = deepMerge.all([\n {},\n defaultBreakpoints,\n builtInOverrides,\n custom\n ]) as WebsiteBuilderThemeInput[\"breakpoints\"];\n\n const breakpoints: Breakpoint[] = [];\n Object.entries(mergedBreakpoints ?? {}).forEach(([name, breakpoint]) => {\n breakpoints.push({\n name,\n ...(breakpoint as Omit<Breakpoint, \"name\">)\n });\n });\n\n return {\n css: input.css,\n cssVariables: input.cssVariables,\n fonts: input.fonts,\n breakpoints: breakpoints.sort((a, b) => b.maxWidth - a.maxWidth),\n lexical: createLexicalTheme(input?.lexical),\n styles: {\n colors: {\n ...input?.styles?.colors\n },\n typography: {\n ...input?.styles?.typography\n }\n }\n };\n }\n}\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,WAAW;AAMjC,SAASC,kBAAkB;AAC3B,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,KAAK,CAAC;EACf,OAAOC,IAAIA,CAACC,KAA+B,EAAuB;IAC9D,MAAM;MAAEC,MAAM,GAAG,CAAC,CAAC;MAAE,GAAGC;IAAiB,CAAC,GAAGF,KAAK,EAAEG,WAAW,IAAI,CAAC,CAAC;IAErE,MAAMC,iBAAiB,GAAGT,SAAS,CAACU,GAAG,CAAC,CACpC,CAAC,CAAC,EACFT,kBAAkB,EAClBM,gBAAgB,EAChBD,MAAM,CACT,CAA4C;IAE7C,MAAME,WAAyB,GAAG,EAAE;IACpCG,MAAM,CAACC,OAAO,CAACH,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAACI,OAAO,CAAC,CAAC,CAACC,IAAI,EAAEC,UAAU,CAAC,KAAK;MACpEP,WAAW,CAACQ,IAAI,CAAC;QACbF,IAAI;QACJ,GAAIC;MACR,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,OAAO;MACHE,GAAG,EAAEZ,KAAK,CAACY,GAAG;MACdC,YAAY,EAAEb,KAAK,CAACa,YAAY;MAChCC,KAAK,EAAEd,KAAK,CAACc,KAAK;MAClBX,WAAW,EAAEA,WAAW,CAACY,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACC,QAAQ,GAAGF,CAAC,CAACE,QAAQ,CAAC;MAChEC,OAAO,EAAEtB,kBAAkB,CAACG,KAAK,EAAEmB,OAAO,CAAC;MAC3CC,MAAM,EAAE;QACJC,MAAM,EAAE;UACJ,GAAGrB,KAAK,EAAEoB,MAAM,EAAEC;QACtB,CAAC;QACDC,UAAU,EAAE;UACR,GAAGtB,KAAK,EAAEoB,MAAM,EAAEE;QACtB;MACJ;IACJ,CAAC;EACL;AACJ","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ import type { Breakpoint } from "./types";
2
+ export interface ViewportInfo {
3
+ width: number;
4
+ height: number;
5
+ scrollX: number;
6
+ scrollY: number;
7
+ breakpoint: string;
8
+ breakpoints: Breakpoint[];
9
+ }
10
+ export declare class ViewportManager {
11
+ private readonly changeTimeout;
12
+ private readonly changeStartSubscribers;
13
+ private readonly changeEndSubscribers;
14
+ private isChanging;
15
+ private changeTimer;
16
+ /**
17
+ * We need this fallback breakpoint for server environments.
18
+ */
19
+ private breakpoints;
20
+ constructor(timeout?: number);
21
+ setBreakpoints(breakpoints: Breakpoint[]): void;
22
+ onViewportChangeStart(callback: (info: ViewportInfo) => void): () => void;
23
+ onViewportChangeEnd(callback: (info: ViewportInfo) => void): () => void;
24
+ /**
25
+ * Get the current viewport information
26
+ */
27
+ getViewport(): ViewportInfo;
28
+ destroy(): void;
29
+ private handleResize;
30
+ private handleViewportChange;
31
+ private getViewportInfo;
32
+ private notifySubscribers;
33
+ }
34
+ export declare const viewportManager: ViewportManager;