@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
@@ -0,0 +1 @@
1
+ {"version":3,"names":["logger","BindingsResolver","ComponentManifestToAstConverter","ComponentResolver","constructor","registry","components","resolve","element","elementBindings","onResolved","state","componentName","component","name","blueprint","get","warn","bindingsResolver","instances","resolveElement","inputAst","convert","manifest","inputs","map","instance","styles"],"sources":["ComponentResolver.ts"],"sourcesContent":["import type { ComponentRegistry } from \"~/ComponentRegistry.js\";\nimport type {\n DocumentElement,\n DocumentElementBindings,\n DocumentState,\n ResolvedComponent\n} from \"~/types\";\nimport { logger } from \"./Logger\";\nimport type { OnResolved } from \"./BindingsResolver\";\nimport { BindingsResolver } from \"./BindingsResolver\";\nimport { ComponentManifestToAstConverter } from \"~/ComponentManifestToAstConverter\";\n\nexport type ResolveElementParams = {\n element: DocumentElement;\n elementBindings: DocumentElementBindings;\n state: DocumentState;\n onResolved?: OnResolved;\n};\n\nexport class ComponentResolver {\n private components: ComponentRegistry;\n\n constructor(registry: ComponentRegistry) {\n this.components = registry;\n }\n\n resolve({\n element,\n elementBindings = {},\n onResolved,\n state\n }: ResolveElementParams): ResolvedComponent[] | null {\n const componentName = element.component.name;\n const blueprint = this.components.get(componentName);\n\n if (!blueprint) {\n logger.warn(`Unknown component: ${componentName}`);\n return null;\n }\n\n const bindingsResolver = new BindingsResolver(state);\n const instances = bindingsResolver.resolveElement({\n element,\n elementBindings,\n inputAst: ComponentManifestToAstConverter.convert(blueprint.manifest.inputs ?? []),\n onResolved\n });\n\n return instances.map(instance => ({\n component: blueprint.component,\n manifest: blueprint.manifest!,\n styles: instance.styles,\n inputs: instance.inputs\n }));\n }\n}\n"],"mappings":"AAOA,SAASA,MAAM;AAEf,SAASC,gBAAgB;AACzB,SAASC,+BAA+B;AASxC,OAAO,MAAMC,iBAAiB,CAAC;EAG3BC,WAAWA,CAACC,QAA2B,EAAE;IACrC,IAAI,CAACC,UAAU,GAAGD,QAAQ;EAC9B;EAEAE,OAAOA,CAAC;IACJC,OAAO;IACPC,eAAe,GAAG,CAAC,CAAC;IACpBC,UAAU;IACVC;EACkB,CAAC,EAA8B;IACjD,MAAMC,aAAa,GAAGJ,OAAO,CAACK,SAAS,CAACC,IAAI;IAC5C,MAAMC,SAAS,GAAG,IAAI,CAACT,UAAU,CAACU,GAAG,CAACJ,aAAa,CAAC;IAEpD,IAAI,CAACG,SAAS,EAAE;MACZf,MAAM,CAACiB,IAAI,CAAC,sBAAsBL,aAAa,EAAE,CAAC;MAClD,OAAO,IAAI;IACf;IAEA,MAAMM,gBAAgB,GAAG,IAAIjB,gBAAgB,CAACU,KAAK,CAAC;IACpD,MAAMQ,SAAS,GAAGD,gBAAgB,CAACE,cAAc,CAAC;MAC9CZ,OAAO;MACPC,eAAe;MACfY,QAAQ,EAAEnB,+BAA+B,CAACoB,OAAO,CAACP,SAAS,CAACQ,QAAQ,CAACC,MAAM,IAAI,EAAE,CAAC;MAClFd;IACJ,CAAC,CAAC;IAEF,OAAOS,SAAS,CAACM,GAAG,CAACC,QAAQ,KAAK;MAC9Bb,SAAS,EAAEE,SAAS,CAACF,SAAS;MAC9BU,QAAQ,EAAER,SAAS,CAACQ,QAAS;MAC7BI,MAAM,EAAED,QAAQ,CAACC,MAAM;MACvBH,MAAM,EAAEE,QAAQ,CAACF;IACrB,CAAC,CAAC,CAAC;EACP;AACJ","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ import type { Component, IContentSdk, PublicPage, PublicRedirect, ResolvedComponent } from "./types";
2
+ import { LiveSdk } from "./LiveSdk.js";
3
+ import { EditingSdk } from "./EditingSdk.js";
4
+ import { type ResolveElementParams } from "./ComponentResolver";
5
+ import type { WebsiteBuilderThemeInput } from "./types/WebsiteBuilderTheme.js";
6
+ import type { IRedirects } from "./IRedirects";
7
+ export type ApiConfig = {
8
+ apiKey: string;
9
+ apiHost: string;
10
+ apiTenant: string;
11
+ };
12
+ export type ContentSDKConfig = ApiConfig & {
13
+ preview?: boolean;
14
+ theme?: WebsiteBuilderThemeInput;
15
+ };
16
+ declare class InternalContentSdk implements IContentSdk, IRedirects {
17
+ private activeSdk;
18
+ private editingSdk;
19
+ private redirectsProvider;
20
+ constructor(redirectsProvider: IRedirects, liveSdk: LiveSdk, editingSdk?: EditingSdk);
21
+ getEditingSdk(): EditingSdk | undefined;
22
+ getPage(path: string): Promise<PublicPage | null>;
23
+ listPages(): Promise<PublicPage[]>;
24
+ getAllRedirects(): Promise<Map<string, PublicRedirect>>;
25
+ getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;
26
+ }
27
+ export declare class ContentSdk implements IContentSdk, IRedirects {
28
+ protected sdk?: InternalContentSdk;
29
+ private isPreview;
30
+ private lastConfig;
31
+ init(config: ContentSDKConfig, afterInit?: () => void): void;
32
+ getEditingSdk(): EditingSdk | undefined;
33
+ getPage(path: string): Promise<PublicPage | null>;
34
+ listPages(): Promise<PublicPage[]>;
35
+ getAllRedirects(): Promise<Map<string, PublicRedirect>>;
36
+ getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;
37
+ registerComponent(blueprint: Component): void;
38
+ resolveElement(params: ResolveElementParams): ResolvedComponent[] | null;
39
+ isEditing(): boolean;
40
+ isPreviewing(): boolean;
41
+ private assertInitialized;
42
+ }
43
+ export declare const contentSdk: ContentSdk;
44
+ export {};
package/ContentSdk.js ADDED
@@ -0,0 +1,106 @@
1
+ import { environment } from "./Environment.js";
2
+ import { LiveSdk } from "./LiveSdk.js";
3
+ import { EditingSdk } from "./EditingSdk.js";
4
+ import { ComponentResolver } from "./ComponentResolver";
5
+ import { PreviewSdk } from "./PreviewSdk.js";
6
+ import { componentRegistry } from "./ComponentRegistry";
7
+ import { ApiClient } from "./dataProviders/ApiClient";
8
+ import { DefaultDataProvider } from "./dataProviders/DefaultDataProvider";
9
+ import { Theme } from "./Theme.js";
10
+ import { viewportManager } from "./ViewportManager.js";
11
+ import { RedirectsProvider } from "./dataProviders/RedirectsProvider";
12
+ class InternalContentSdk {
13
+ constructor(redirectsProvider, liveSdk, editingSdk) {
14
+ this.redirectsProvider = redirectsProvider;
15
+ this.activeSdk = editingSdk ?? liveSdk;
16
+ this.editingSdk = editingSdk;
17
+ }
18
+ getEditingSdk() {
19
+ return this.editingSdk;
20
+ }
21
+ async getPage(path) {
22
+ return this.activeSdk.getPage(path);
23
+ }
24
+ listPages() {
25
+ return this.activeSdk.listPages();
26
+ }
27
+ getAllRedirects() {
28
+ return this.redirectsProvider.getAllRedirects();
29
+ }
30
+ getRedirectByPath(path) {
31
+ return this.redirectsProvider.getRedirectByPath(path);
32
+ }
33
+ }
34
+ export class ContentSdk {
35
+ isPreview = false;
36
+ init(config, afterInit) {
37
+ const configHash = JSON.stringify(config);
38
+ if (this.lastConfig && this.lastConfig === configHash) {
39
+ return;
40
+ }
41
+ this.lastConfig = configHash;
42
+ const apiClient = new ApiClient(config.apiHost, config.apiKey, config.apiTenant);
43
+ const dataProvider = new DefaultDataProvider({
44
+ apiClient
45
+ });
46
+ let liveSdk = new LiveSdk(dataProvider);
47
+ if (config.preview && !environment.isEditing()) {
48
+ this.isPreview = true;
49
+ liveSdk = new PreviewSdk(dataProvider, liveSdk);
50
+ }
51
+ const theme = Theme.from(config.theme ?? {});
52
+ if (environment.isClient()) {
53
+ viewportManager.setBreakpoints(theme.breakpoints);
54
+ }
55
+ let editingSdk;
56
+ if (environment.isEditing()) {
57
+ editingSdk = new EditingSdk(liveSdk, theme);
58
+ }
59
+ this.sdk = new InternalContentSdk(new RedirectsProvider(apiClient), liveSdk, editingSdk);
60
+ if (typeof afterInit === "function") {
61
+ afterInit();
62
+ }
63
+ }
64
+ getEditingSdk() {
65
+ this.assertInitialized();
66
+ return this.sdk.getEditingSdk();
67
+ }
68
+ getPage(path) {
69
+ this.assertInitialized();
70
+ return this.sdk.getPage(path);
71
+ }
72
+ listPages() {
73
+ this.assertInitialized();
74
+ return this.sdk.listPages();
75
+ }
76
+ async getAllRedirects() {
77
+ this.assertInitialized();
78
+ return this.sdk.getAllRedirects();
79
+ }
80
+ getRedirectByPath(path) {
81
+ this.assertInitialized();
82
+ return this.sdk.getRedirectByPath(path);
83
+ }
84
+ registerComponent(blueprint) {
85
+ this.assertInitialized();
86
+ componentRegistry.register(blueprint);
87
+ }
88
+ resolveElement(params) {
89
+ this.assertInitialized();
90
+ return new ComponentResolver(componentRegistry).resolve(params);
91
+ }
92
+ isEditing() {
93
+ return environment.isEditing();
94
+ }
95
+ isPreviewing() {
96
+ return this.isPreview;
97
+ }
98
+ assertInitialized() {
99
+ if (!this.sdk) {
100
+ throw new Error(`ContentSdk has not been initialized!`);
101
+ }
102
+ }
103
+ }
104
+ export const contentSdk = new ContentSdk();
105
+
106
+ //# sourceMappingURL=ContentSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["environment","LiveSdk","EditingSdk","ComponentResolver","PreviewSdk","componentRegistry","ApiClient","DefaultDataProvider","Theme","viewportManager","RedirectsProvider","InternalContentSdk","constructor","redirectsProvider","liveSdk","editingSdk","activeSdk","getEditingSdk","getPage","path","listPages","getAllRedirects","getRedirectByPath","ContentSdk","isPreview","init","config","afterInit","configHash","JSON","stringify","lastConfig","apiClient","apiHost","apiKey","apiTenant","dataProvider","preview","isEditing","theme","from","isClient","setBreakpoints","breakpoints","sdk","assertInitialized","registerComponent","blueprint","register","resolveElement","params","resolve","isPreviewing","Error","contentSdk"],"sources":["ContentSdk.ts"],"sourcesContent":["import type {\n Component,\n IContentSdk,\n PublicPage,\n PublicRedirect,\n ResolvedComponent\n} from \"~/types\";\nimport { environment } from \"./Environment.js\";\nimport { LiveSdk } from \"./LiveSdk.js\";\nimport { EditingSdk } from \"./EditingSdk.js\";\nimport { ComponentResolver, type ResolveElementParams } from \"~/ComponentResolver\";\nimport { PreviewSdk } from \"./PreviewSdk.js\";\nimport { componentRegistry } from \"~/ComponentRegistry\";\nimport { ApiClient } from \"~/dataProviders/ApiClient\";\nimport { DefaultDataProvider } from \"~/dataProviders/DefaultDataProvider\";\nimport type { WebsiteBuilderThemeInput } from \"./types/WebsiteBuilderTheme.js\";\nimport { Theme } from \"./Theme.js\";\nimport { viewportManager } from \"./ViewportManager.js\";\nimport type { IRedirects } from \"~/IRedirects\";\nimport { RedirectsProvider } from \"~/dataProviders/RedirectsProvider\";\n\nexport type ApiConfig = {\n apiKey: string;\n apiHost: string;\n apiTenant: string;\n};\n\nexport type ContentSDKConfig = ApiConfig & {\n preview?: boolean;\n theme?: WebsiteBuilderThemeInput;\n};\n\nclass InternalContentSdk implements IContentSdk, IRedirects {\n private activeSdk: IContentSdk;\n private editingSdk: EditingSdk | undefined;\n private redirectsProvider: IRedirects;\n\n constructor(redirectsProvider: IRedirects, liveSdk: LiveSdk, editingSdk?: EditingSdk) {\n this.redirectsProvider = redirectsProvider;\n this.activeSdk = editingSdk ?? liveSdk;\n this.editingSdk = editingSdk;\n }\n\n getEditingSdk() {\n return this.editingSdk;\n }\n\n async getPage(path: string): Promise<PublicPage | null> {\n return this.activeSdk.getPage(path);\n }\n\n listPages(): Promise<PublicPage[]> {\n return this.activeSdk.listPages();\n }\n\n getAllRedirects(): Promise<Map<string, PublicRedirect>> {\n return this.redirectsProvider.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n return this.redirectsProvider.getRedirectByPath(path);\n }\n}\n\nexport class ContentSdk implements IContentSdk, IRedirects {\n protected sdk?: InternalContentSdk;\n private isPreview = false;\n private lastConfig: any;\n\n public init(config: ContentSDKConfig, afterInit?: () => void): void {\n const configHash = JSON.stringify(config);\n if (this.lastConfig && this.lastConfig === configHash) {\n return;\n }\n\n this.lastConfig = configHash;\n const apiClient = new ApiClient(config.apiHost, config.apiKey, config.apiTenant);\n\n const dataProvider = new DefaultDataProvider({ apiClient });\n\n let liveSdk: IContentSdk = new LiveSdk(dataProvider);\n\n if (config.preview && !environment.isEditing()) {\n this.isPreview = true;\n liveSdk = new PreviewSdk(dataProvider, liveSdk);\n }\n\n const theme = Theme.from(config.theme ?? {});\n\n if (environment.isClient()) {\n viewportManager.setBreakpoints(theme.breakpoints);\n }\n\n let editingSdk;\n if (environment.isEditing()) {\n editingSdk = new EditingSdk(liveSdk, theme);\n }\n\n this.sdk = new InternalContentSdk(\n new RedirectsProvider(apiClient),\n liveSdk as LiveSdk,\n editingSdk\n );\n\n if (typeof afterInit === \"function\") {\n afterInit();\n }\n }\n\n public getEditingSdk() {\n this.assertInitialized();\n return this.sdk.getEditingSdk();\n }\n\n public getPage(path: string) {\n this.assertInitialized();\n return this.sdk.getPage(path);\n }\n\n public listPages() {\n this.assertInitialized();\n return this.sdk.listPages();\n }\n\n public async getAllRedirects() {\n this.assertInitialized();\n return this.sdk.getAllRedirects();\n }\n\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined> {\n this.assertInitialized();\n return this.sdk.getRedirectByPath(path);\n }\n\n registerComponent(blueprint: Component): void {\n this.assertInitialized();\n componentRegistry.register(blueprint);\n }\n\n resolveElement(params: ResolveElementParams): ResolvedComponent[] | null {\n this.assertInitialized();\n return new ComponentResolver(componentRegistry).resolve(params);\n }\n\n isEditing() {\n return environment.isEditing();\n }\n\n isPreviewing() {\n return this.isPreview;\n }\n\n private assertInitialized(): asserts this is this & {\n sdk: IContentSdk;\n } {\n if (!this.sdk) {\n throw new Error(`ContentSdk has not been initialized!`);\n }\n }\n}\n\nexport const contentSdk = new ContentSdk();\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { type JsonPatchOperation } from "./jsonPatch";
2
+ import type { Document } from "./types";
3
+ export declare class DocumentStore<TDocument extends Document = Document> {
4
+ private document;
5
+ private documentReady;
6
+ private readyResolvers;
7
+ constructor();
8
+ setDocument(doc: TDocument): void;
9
+ updateDocument(cb: (document: TDocument) => void): void;
10
+ getDocument(): TDocument | null;
11
+ getElement(id: string): import("./types").DocumentElement | null;
12
+ updateElement(id: string, patch: Partial<any>): void;
13
+ applyPatch(patch: JsonPatchOperation[]): void;
14
+ waitForDocument(): Promise<TDocument>;
15
+ }
@@ -0,0 +1,67 @@
1
+ import { jsonPatch } from "./jsonPatch";
2
+ import { makeAutoObservable, runInAction, observable } from "mobx";
3
+ export class DocumentStore {
4
+ document = null;
5
+ documentReady = false;
6
+ readyResolvers = [];
7
+ constructor() {
8
+ makeAutoObservable(this);
9
+ }
10
+ setDocument(doc) {
11
+ runInAction(() => {
12
+ if (this.document) {
13
+ Object.assign(this.document, doc);
14
+ } else {
15
+ this.document = observable(doc);
16
+ }
17
+ this.documentReady = true;
18
+ this.readyResolvers.forEach(fn => fn());
19
+ this.readyResolvers = [];
20
+ });
21
+ }
22
+ updateDocument(cb) {
23
+ runInAction(() => {
24
+ if (this.document) {
25
+ cb(this.document);
26
+ }
27
+ });
28
+ }
29
+ getDocument() {
30
+ return this.document;
31
+ }
32
+ getElement(id) {
33
+ if (!this.document) {
34
+ return null;
35
+ }
36
+ return this.document.elements[id];
37
+ }
38
+ updateElement(id, patch) {
39
+ if (!this.document) {
40
+ return;
41
+ }
42
+ const current = this.document.elements[id];
43
+ if (current) {
44
+ this.document.elements[id] = {
45
+ ...current,
46
+ ...patch
47
+ };
48
+ }
49
+ }
50
+ applyPatch(patch) {
51
+ runInAction(() => {
52
+ jsonPatch.applyPatch(this.document, patch, false, true);
53
+ });
54
+ }
55
+ async waitForDocument() {
56
+ if (this.documentReady) {
57
+ return this.document;
58
+ }
59
+ return new Promise(resolve => {
60
+ this.readyResolvers.push(() => {
61
+ resolve(this.document);
62
+ });
63
+ });
64
+ }
65
+ }
66
+
67
+ //# sourceMappingURL=DocumentStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsonPatch","makeAutoObservable","runInAction","observable","DocumentStore","document","documentReady","readyResolvers","constructor","setDocument","doc","Object","assign","forEach","fn","updateDocument","cb","getDocument","getElement","id","elements","updateElement","patch","current","applyPatch","waitForDocument","Promise","resolve","push"],"sources":["DocumentStore.ts"],"sourcesContent":["import { jsonPatch, type JsonPatchOperation } from \"~/jsonPatch\";\nimport type { Document } from \"~/types\";\nimport { makeAutoObservable, runInAction, observable } from \"mobx\";\n\nexport class DocumentStore<TDocument extends Document = Document> {\n private document: TDocument | null = null;\n private documentReady = false;\n private readyResolvers: (() => void)[] = [];\n\n constructor() {\n makeAutoObservable(this);\n }\n\n setDocument(doc: TDocument) {\n runInAction(() => {\n if (this.document) {\n Object.assign(this.document, doc);\n } else {\n this.document = observable(doc);\n }\n this.documentReady = true;\n this.readyResolvers.forEach(fn => fn());\n this.readyResolvers = [];\n });\n }\n\n updateDocument(cb: (document: TDocument) => void) {\n runInAction(() => {\n if (this.document) {\n cb(this.document);\n }\n });\n }\n\n getDocument() {\n return this.document;\n }\n\n getElement(id: string) {\n if (!this.document) {\n return null;\n }\n\n return this.document.elements[id];\n }\n\n updateElement(id: string, patch: Partial<any>) {\n if (!this.document) {\n return;\n }\n\n const current = this.document.elements[id];\n if (current) {\n this.document.elements[id] = { ...current, ...patch };\n }\n }\n\n applyPatch(patch: JsonPatchOperation[]) {\n runInAction(() => {\n jsonPatch.applyPatch(this.document!, patch, false, true);\n });\n }\n\n async waitForDocument(): Promise<TDocument> {\n if (this.documentReady) {\n return this.document as TDocument;\n }\n\n return new Promise(resolve => {\n this.readyResolvers.push(() => {\n resolve(this.document as TDocument);\n });\n });\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB,EAAEC,WAAW,EAAEC,UAAU,QAAQ,MAAM;AAElE,OAAO,MAAMC,aAAa,CAAwC;EACtDC,QAAQ,GAAqB,IAAI;EACjCC,aAAa,GAAG,KAAK;EACrBC,cAAc,GAAmB,EAAE;EAE3CC,WAAWA,CAAA,EAAG;IACVP,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEAQ,WAAWA,CAACC,GAAc,EAAE;IACxBR,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfM,MAAM,CAACC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAEK,GAAG,CAAC;MACrC,CAAC,MAAM;QACH,IAAI,CAACL,QAAQ,GAAGF,UAAU,CAACO,GAAG,CAAC;MACnC;MACA,IAAI,CAACJ,aAAa,GAAG,IAAI;MACzB,IAAI,CAACC,cAAc,CAACM,OAAO,CAACC,EAAE,IAAIA,EAAE,CAAC,CAAC,CAAC;MACvC,IAAI,CAACP,cAAc,GAAG,EAAE;IAC5B,CAAC,CAAC;EACN;EAEAQ,cAAcA,CAACC,EAAiC,EAAE;IAC9Cd,WAAW,CAAC,MAAM;MACd,IAAI,IAAI,CAACG,QAAQ,EAAE;QACfW,EAAE,CAAC,IAAI,CAACX,QAAQ,CAAC;MACrB;IACJ,CAAC,CAAC;EACN;EAEAY,WAAWA,CAAA,EAAG;IACV,OAAO,IAAI,CAACZ,QAAQ;EACxB;EAEAa,UAAUA,CAACC,EAAU,EAAE;IACnB,IAAI,CAAC,IAAI,CAACd,QAAQ,EAAE;MAChB,OAAO,IAAI;IACf;IAEA,OAAO,IAAI,CAACA,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;EACrC;EAEAE,aAAaA,CAACF,EAAU,EAAEG,KAAmB,EAAE;IAC3C,IAAI,CAAC,IAAI,CAACjB,QAAQ,EAAE;MAChB;IACJ;IAEA,MAAMkB,OAAO,GAAG,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC;IAC1C,IAAII,OAAO,EAAE;MACT,IAAI,CAAClB,QAAQ,CAACe,QAAQ,CAACD,EAAE,CAAC,GAAG;QAAE,GAAGI,OAAO;QAAE,GAAGD;MAAM,CAAC;IACzD;EACJ;EAEAE,UAAUA,CAACF,KAA2B,EAAE;IACpCpB,WAAW,CAAC,MAAM;MACdF,SAAS,CAACwB,UAAU,CAAC,IAAI,CAACnB,QAAQ,EAAGiB,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC5D,CAAC,CAAC;EACN;EAEA,MAAMG,eAAeA,CAAA,EAAuB;IACxC,IAAI,IAAI,CAACnB,aAAa,EAAE;MACpB,OAAO,IAAI,CAACD,QAAQ;IACxB;IAEA,OAAO,IAAIqB,OAAO,CAACC,OAAO,IAAI;MAC1B,IAAI,CAACpB,cAAc,CAACqB,IAAI,CAAC,MAAM;QAC3BD,OAAO,CAAC,IAAI,CAACtB,QAAqB,CAAC;MACvC,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ import type { Document } from "./types";
2
+ import { DocumentStore } from "./DocumentStore";
3
+ declare class DocumentStoreManager {
4
+ private stores;
5
+ getStores(): Map<string, DocumentStore<Document>>;
6
+ getStore<TDocument extends Document>(id: string): DocumentStore<TDocument>;
7
+ removeStore(id: string): void;
8
+ hasStore(id: string): boolean;
9
+ }
10
+ export declare const documentStoreManager: DocumentStoreManager;
11
+ export {};
@@ -0,0 +1,22 @@
1
+ import { DocumentStore } from "./DocumentStore";
2
+ class DocumentStoreManager {
3
+ stores = new Map();
4
+ getStores() {
5
+ return this.stores;
6
+ }
7
+ getStore(id) {
8
+ if (!this.stores.has(id)) {
9
+ this.stores.set(id, new DocumentStore());
10
+ }
11
+ return this.stores.get(id);
12
+ }
13
+ removeStore(id) {
14
+ this.stores.delete(id);
15
+ }
16
+ hasStore(id) {
17
+ return this.stores.has(id);
18
+ }
19
+ }
20
+ export const documentStoreManager = new DocumentStoreManager();
21
+
22
+ //# sourceMappingURL=DocumentStoreManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DocumentStore","DocumentStoreManager","stores","Map","getStores","getStore","id","has","set","get","removeStore","delete","hasStore","documentStoreManager"],"sources":["DocumentStoreManager.ts"],"sourcesContent":["import type { Document } from \"./types\";\nimport { DocumentStore } from \"./DocumentStore\";\n\nclass DocumentStoreManager {\n private stores = new Map<string, DocumentStore>();\n\n getStores() {\n return this.stores;\n }\n\n getStore<TDocument extends Document>(id: string): DocumentStore<TDocument> {\n if (!this.stores.has(id)) {\n this.stores.set(id, new DocumentStore<TDocument>());\n }\n return this.stores.get(id)! as DocumentStore<TDocument>;\n }\n\n removeStore(id: string) {\n this.stores.delete(id);\n }\n\n hasStore(id: string): boolean {\n return this.stores.has(id);\n }\n}\n\nexport const documentStoreManager = new DocumentStoreManager();\n"],"mappings":"AACA,SAASA,aAAa;AAEtB,MAAMC,oBAAoB,CAAC;EACfC,MAAM,GAAG,IAAIC,GAAG,CAAwB,CAAC;EAEjDC,SAASA,CAAA,EAAG;IACR,OAAO,IAAI,CAACF,MAAM;EACtB;EAEAG,QAAQA,CAA6BC,EAAU,EAA4B;IACvE,IAAI,CAAC,IAAI,CAACJ,MAAM,CAACK,GAAG,CAACD,EAAE,CAAC,EAAE;MACtB,IAAI,CAACJ,MAAM,CAACM,GAAG,CAACF,EAAE,EAAE,IAAIN,aAAa,CAAY,CAAC,CAAC;IACvD;IACA,OAAO,IAAI,CAACE,MAAM,CAACO,GAAG,CAACH,EAAE,CAAC;EAC9B;EAEAI,WAAWA,CAACJ,EAAU,EAAE;IACpB,IAAI,CAACJ,MAAM,CAACS,MAAM,CAACL,EAAE,CAAC;EAC1B;EAEAM,QAAQA,CAACN,EAAU,EAAW;IAC1B,OAAO,IAAI,CAACJ,MAAM,CAACK,GAAG,CAACD,EAAE,CAAC;EAC9B;AACJ;AAEA,OAAO,MAAMO,oBAAoB,GAAG,IAAIZ,oBAAoB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ import type { ComponentGroup, IContentSdk, PublicPage } from "./types.js";
2
+ import { Messenger } from "./messenger";
3
+ import type { WebsiteBuilderTheme } from "./types/WebsiteBuilderTheme";
4
+ export declare class EditingSdk implements IContentSdk {
5
+ readonly messenger: Messenger;
6
+ private positionReportingEnabled;
7
+ private previewViewport;
8
+ private liveSdk;
9
+ private documentStore;
10
+ private previewDocument;
11
+ private lastBoxesHash;
12
+ constructor(liveSdk: IContentSdk, theme: WebsiteBuilderTheme);
13
+ getPage(path: string): Promise<PublicPage | null>;
14
+ listPages(): Promise<PublicPage[]>;
15
+ registerComponentGroup(group: ComponentGroup): void;
16
+ private getReferrerOrigin;
17
+ private setupListeners;
18
+ private initPositionReporting;
19
+ private reportBoxes;
20
+ private disableLinks;
21
+ }
package/EditingSdk.js ADDED
@@ -0,0 +1,143 @@
1
+ "use client";
2
+
3
+ import { Messenger, MessageOrigin } from "./messenger";
4
+ import { logger } from "./Logger";
5
+ import { PreviewViewport } from "./PreviewViewport";
6
+ import { viewportManager } from "./ViewportManager";
7
+ import { componentRegistry } from "./ComponentRegistry";
8
+ import { functionConverter } from "./FunctionConverter";
9
+ import { documentStoreManager } from "./DocumentStoreManager";
10
+ import { PreviewDocument } from "./PreviewDocument.js";
11
+ import { hashObject } from "./HashObject";
12
+ export class EditingSdk {
13
+ positionReportingEnabled = false;
14
+ previewViewport = null;
15
+ lastBoxesHash = 0;
16
+ constructor(liveSdk, theme) {
17
+ this.liveSdk = liveSdk;
18
+ const source = new MessageOrigin(() => window, window.location.origin);
19
+ const target = new MessageOrigin(() => window.parent, this.getReferrerOrigin());
20
+ this.previewDocument = PreviewDocument.createFromWindow();
21
+ this.documentStore = documentStoreManager.getStore(this.previewDocument.getId());
22
+ this.messenger = new Messenger(source, target, "wb.editor.*");
23
+ componentRegistry.onRegister(reg => {
24
+ this.messenger.send("preview.component.register", reg.component.manifest);
25
+ });
26
+ this.setupListeners();
27
+ this.messenger.send("preview.ready", true);
28
+ if (theme) {
29
+ this.messenger.send("preview.theme", {
30
+ theme
31
+ });
32
+ }
33
+ this.disableLinks();
34
+ }
35
+ async getPage(path) {
36
+ if (!this.previewDocument.matches({
37
+ type: "page",
38
+ path
39
+ })) {
40
+ return this.liveSdk.getPage(path);
41
+ }
42
+ await this.documentStore.waitForDocument();
43
+ return this.documentStore.getDocument();
44
+ }
45
+ async listPages() {
46
+ return this.liveSdk.listPages();
47
+ }
48
+ registerComponentGroup(group) {
49
+ this.messenger.send("preview.componentGroup.register", {
50
+ ...group,
51
+ filter: group.filter ? functionConverter.serialize(group.filter) : undefined
52
+ });
53
+ }
54
+ getReferrerOrigin() {
55
+ try {
56
+ const searchParams = new URLSearchParams(window.location.search);
57
+ return searchParams.get("wb.referrer");
58
+ } catch {
59
+ return "";
60
+ }
61
+ }
62
+ setupListeners() {
63
+ if (!this.messenger) {
64
+ return;
65
+ }
66
+ this.messenger.on("document.set", data => {
67
+ this.documentStore.setDocument(data);
68
+ if (!this.positionReportingEnabled) {
69
+ // Initialize position reporting
70
+ this.initPositionReporting();
71
+ }
72
+ });
73
+ this.messenger.on("element.set", data => {
74
+ this.documentStore.updateElement(data.id, data.patch);
75
+ });
76
+ this.messenger.on("document.patch", patch => {
77
+ this.documentStore.applyPatch(patch);
78
+ });
79
+ this.messenger.on("preview.scroll", data => {
80
+ window.scrollBy(data.deltaX, data.deltaY);
81
+ });
82
+ }
83
+ initPositionReporting() {
84
+ if (this.positionReportingEnabled) {
85
+ return;
86
+ }
87
+
88
+ // Initialize element positions tracker
89
+ this.previewViewport = new PreviewViewport();
90
+
91
+ // Add event listeners
92
+ viewportManager.onViewportChangeStart(() => {
93
+ if (this.messenger) {
94
+ this.messenger.send("preview.viewport.change.start");
95
+ }
96
+ });
97
+ viewportManager.onViewportChangeEnd(() => {
98
+ if (this.messenger) {
99
+ this.messenger.send("preview.viewport.change.end");
100
+ }
101
+ });
102
+
103
+ // Enable position reporting by default
104
+ this.positionReportingEnabled = true;
105
+
106
+ // Report positions periodically
107
+ setInterval(() => this.reportBoxes(), 300);
108
+ }
109
+ reportBoxes() {
110
+ if (!this.messenger || !this.previewViewport) {
111
+ logger.warn("No messenger or preview viewport. Skipping position reporting.");
112
+ return;
113
+ }
114
+ const newBoxes = this.previewViewport.getVisibleBoxes();
115
+ const hash = hashObject.hash(newBoxes);
116
+ if (hash === this.lastBoxesHash) {
117
+ return;
118
+ }
119
+ this.lastBoxesHash = hash;
120
+ // Send positions to the editor
121
+ this.messenger.send("preview.viewport", {
122
+ boxes: this.previewViewport.getVisibleBoxes(),
123
+ viewport: this.previewViewport.getViewport()
124
+ });
125
+ }
126
+ disableLinks() {
127
+ // Intercept link clicks when we're in the editing mode (loaded via iframe from the editor).
128
+ document.addEventListener("click", event => {
129
+ const target = event.target;
130
+
131
+ // Check if the clicked element or any of its ancestors is a link
132
+ const anchor = target.closest("a");
133
+ if (anchor && anchor.href) {
134
+ event.preventDefault();
135
+ event.stopPropagation();
136
+ }
137
+ },
138
+ // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#usecapture
139
+ true);
140
+ }
141
+ }
142
+
143
+ //# sourceMappingURL=EditingSdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Messenger","MessageOrigin","logger","PreviewViewport","viewportManager","componentRegistry","functionConverter","documentStoreManager","PreviewDocument","hashObject","EditingSdk","positionReportingEnabled","previewViewport","lastBoxesHash","constructor","liveSdk","theme","source","window","location","origin","target","parent","getReferrerOrigin","previewDocument","createFromWindow","documentStore","getStore","getId","messenger","onRegister","reg","send","component","manifest","setupListeners","disableLinks","getPage","path","matches","type","waitForDocument","getDocument","listPages","registerComponentGroup","group","filter","serialize","undefined","searchParams","URLSearchParams","search","get","on","data","setDocument","initPositionReporting","updateElement","id","patch","applyPatch","scrollBy","deltaX","deltaY","onViewportChangeStart","onViewportChangeEnd","setInterval","reportBoxes","warn","newBoxes","getVisibleBoxes","hash","boxes","viewport","getViewport","document","addEventListener","event","anchor","closest","href","preventDefault","stopPropagation"],"sources":["EditingSdk.ts"],"sourcesContent":["\"use client\";\nimport type { ComponentGroup, IContentSdk, PublicPage } from \"./types.js\";\nimport { Messenger, MessageOrigin } from \"./messenger\";\nimport { logger } from \"./Logger\";\nimport { PreviewViewport } from \"./PreviewViewport\";\nimport { viewportManager } from \"./ViewportManager\";\nimport { componentRegistry } from \"./ComponentRegistry\";\nimport { functionConverter } from \"./FunctionConverter\";\nimport { documentStoreManager } from \"~/DocumentStoreManager\";\nimport type { DocumentStore } from \"~/DocumentStore\";\nimport { PreviewDocument } from \"./PreviewDocument.js\";\nimport { hashObject } from \"~/HashObject\";\nimport type { WebsiteBuilderTheme } from \"~/types/WebsiteBuilderTheme\";\n\nexport class EditingSdk implements IContentSdk {\n public readonly messenger: Messenger;\n private positionReportingEnabled = false;\n private previewViewport: PreviewViewport | null = null;\n private liveSdk: IContentSdk;\n private documentStore: DocumentStore<PublicPage>;\n private previewDocument: PreviewDocument;\n private lastBoxesHash = 0;\n\n constructor(liveSdk: IContentSdk, theme: WebsiteBuilderTheme) {\n this.liveSdk = liveSdk;\n\n const source = new MessageOrigin(() => window, window.location.origin);\n const target = new MessageOrigin(() => window.parent, this.getReferrerOrigin());\n\n this.previewDocument = PreviewDocument.createFromWindow();\n\n this.documentStore = documentStoreManager.getStore<PublicPage>(\n this.previewDocument.getId()\n );\n\n this.messenger = new Messenger(source, target, \"wb.editor.*\");\n\n componentRegistry.onRegister(reg => {\n this.messenger.send(\"preview.component.register\", reg.component.manifest);\n });\n\n this.setupListeners();\n\n this.messenger.send(\"preview.ready\", true);\n\n if (theme) {\n this.messenger.send(\"preview.theme\", { theme });\n }\n\n this.disableLinks();\n }\n\n public async getPage(path: string): Promise<PublicPage | null> {\n if (!this.previewDocument.matches({ type: \"page\", path })) {\n return this.liveSdk.getPage(path);\n }\n\n await this.documentStore.waitForDocument();\n return this.documentStore.getDocument();\n }\n\n public async listPages(): Promise<PublicPage[]> {\n return this.liveSdk.listPages();\n }\n\n registerComponentGroup(group: ComponentGroup) {\n this.messenger.send(\"preview.componentGroup.register\", {\n ...group,\n filter: group.filter ? functionConverter.serialize(group.filter) : undefined\n });\n }\n\n private getReferrerOrigin(): string {\n try {\n const searchParams = new URLSearchParams(window.location.search);\n return searchParams.get(\"wb.referrer\")!;\n } catch {\n return \"\";\n }\n }\n\n private setupListeners() {\n if (!this.messenger) {\n return;\n }\n\n this.messenger.on(\"document.set\", data => {\n this.documentStore.setDocument(data);\n\n if (!this.positionReportingEnabled) {\n // Initialize position reporting\n this.initPositionReporting();\n }\n });\n\n this.messenger.on(\"element.set\", data => {\n this.documentStore.updateElement(data.id, data.patch);\n });\n\n this.messenger.on(\"document.patch\", patch => {\n this.documentStore.applyPatch(patch);\n });\n\n this.messenger.on(\"preview.scroll\", data => {\n window.scrollBy(data.deltaX, data.deltaY);\n });\n }\n\n private initPositionReporting(): void {\n if (this.positionReportingEnabled) {\n return;\n }\n\n // Initialize element positions tracker\n this.previewViewport = new PreviewViewport();\n\n // Add event listeners\n viewportManager.onViewportChangeStart(() => {\n if (this.messenger) {\n this.messenger.send(\"preview.viewport.change.start\");\n }\n });\n\n viewportManager.onViewportChangeEnd(() => {\n if (this.messenger) {\n this.messenger.send(\"preview.viewport.change.end\");\n }\n });\n\n // Enable position reporting by default\n this.positionReportingEnabled = true;\n\n // Report positions periodically\n setInterval(() => this.reportBoxes(), 300);\n }\n\n private reportBoxes(): void {\n if (!this.messenger || !this.previewViewport) {\n logger.warn(\"No messenger or preview viewport. Skipping position reporting.\");\n return;\n }\n\n const newBoxes = this.previewViewport.getVisibleBoxes();\n const hash = hashObject.hash(newBoxes);\n if (hash === this.lastBoxesHash) {\n return;\n }\n\n this.lastBoxesHash = hash;\n // Send positions to the editor\n this.messenger.send(\"preview.viewport\", {\n boxes: this.previewViewport.getVisibleBoxes(),\n viewport: this.previewViewport.getViewport()\n });\n }\n\n private disableLinks() {\n // Intercept link clicks when we're in the editing mode (loaded via iframe from the editor).\n document.addEventListener(\n \"click\",\n event => {\n const target = event.target as HTMLElement;\n\n // Check if the clicked element or any of its ancestors is a link\n const anchor = target.closest(\"a\");\n\n if (anchor && anchor.href) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#usecapture\n true\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ import type { DocumentElement, ComponentManifest, InputValueBinding, StyleValueBinding } from "./types";
2
+ import { type IDocumentOperation } from "./documentOperations";
3
+ import { type InputAstNode } from "./ComponentManifestToAstConverter";
4
+ export interface ElementFactoryCreateElementParams {
5
+ componentName: string;
6
+ parentId: string;
7
+ slot: string;
8
+ index: number;
9
+ bindings?: {
10
+ inputs?: Record<string, any>;
11
+ styles?: Record<string, any>;
12
+ overrides?: {
13
+ [breakpoint: string]: {
14
+ inputs?: Record<string, any>;
15
+ styles?: Record<string, any>;
16
+ };
17
+ };
18
+ };
19
+ }
20
+ interface GenerateOperationsParams {
21
+ element: DocumentElement;
22
+ inputsAst: InputAstNode[];
23
+ operations: ElementFactoryOperations;
24
+ bindings: {
25
+ inputs: Record<string, any>;
26
+ styles: Record<string, any>;
27
+ overrides: {
28
+ [breakpoint: string]: {
29
+ inputs?: Record<string, any>;
30
+ styles?: Record<string, any>;
31
+ };
32
+ };
33
+ };
34
+ }
35
+ type ElementFactoryOperations = {
36
+ addElement: (element: DocumentElement) => IDocumentOperation;
37
+ addToParent: (element: DocumentElement, index: number) => IDocumentOperation;
38
+ setInputBinding: (elementId: string, bindingPath: string, binding: InputValueBinding) => IDocumentOperation;
39
+ setStyleBinding: (elementId: string, bindingPath: string, binding: StyleValueBinding) => IDocumentOperation;
40
+ };
41
+ export declare class ElementFactory {
42
+ private components;
43
+ constructor(components: Record<string, ComponentManifest>);
44
+ createElementFromComponent({ componentName, parentId, slot, index, bindings }: ElementFactoryCreateElementParams): {
45
+ element: DocumentElement;
46
+ operations: IDocumentOperation[];
47
+ };
48
+ generateOperations({ element, inputsAst, bindings, operations }: GenerateOperationsParams): IDocumentOperation[];
49
+ private generateOperationsFromBindings;
50
+ private getComponentManifest;
51
+ private extractIndex;
52
+ private createElement;
53
+ }
54
+ export {};