@webiny/website-builder-sdk 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.eb81deee7e

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 (272) hide show
  1. package/BindingsApi.js +29 -36
  2. package/BindingsApi.js.map +1 -1
  3. package/BindingsProcessor.js +34 -43
  4. package/BindingsProcessor.js.map +1 -1
  5. package/BindingsProcessor.test.js +82 -78
  6. package/BindingsProcessor.test.js.map +1 -1
  7. package/BindingsResolver.d.ts +4 -1
  8. package/BindingsResolver.js +99 -119
  9. package/BindingsResolver.js.map +1 -1
  10. package/BindingsResolver.test.js +399 -363
  11. package/BindingsResolver.test.js.map +1 -1
  12. package/ComponentInputTraverser.js +32 -49
  13. package/ComponentInputTraverser.js.map +1 -1
  14. package/ComponentManifestToAstConverter.js +20 -21
  15. package/ComponentManifestToAstConverter.js.map +1 -1
  16. package/ComponentRegistry.d.ts +9 -0
  17. package/ComponentRegistry.js +30 -44
  18. package/ComponentRegistry.js.map +1 -1
  19. package/ComponentResolver.d.ts +3 -2
  20. package/ComponentResolver.js +39 -29
  21. package/ComponentResolver.js.map +1 -1
  22. package/ComponentResolver.test.d.ts +1 -0
  23. package/ComponentResolver.test.js +81 -0
  24. package/ComponentResolver.test.js.map +1 -0
  25. package/ConstraintEvaluator.js +246 -353
  26. package/ConstraintEvaluator.js.map +1 -1
  27. package/ConstraintEvaluator.test.js +1616 -1438
  28. package/ConstraintEvaluator.test.js.map +1 -1
  29. package/ContentSdk.d.ts +14 -0
  30. package/ContentSdk.js +113 -90
  31. package/ContentSdk.js.map +1 -1
  32. package/DocumentStore.js +47 -59
  33. package/DocumentStore.js.map +1 -1
  34. package/DocumentStoreManager.js +17 -16
  35. package/DocumentStoreManager.js.map +1 -1
  36. package/EditingSdk.js +92 -121
  37. package/EditingSdk.js.map +1 -1
  38. package/ElementFactory.js +164 -172
  39. package/ElementFactory.js.map +1 -1
  40. package/ElementFactory.objectListDefaults.test.d.ts +1 -0
  41. package/ElementFactory.objectListDefaults.test.js +423 -0
  42. package/ElementFactory.objectListDefaults.test.js.map +1 -0
  43. package/ElementFactory.test.js +335 -262
  44. package/ElementFactory.test.js.map +1 -1
  45. package/Environment.js +18 -19
  46. package/Environment.js.map +1 -1
  47. package/FunctionConverter.js +8 -7
  48. package/FunctionConverter.js.map +1 -1
  49. package/HashObject.js +11 -26
  50. package/HashObject.js.map +1 -1
  51. package/HotkeyManager.js +40 -47
  52. package/HotkeyManager.js.map +1 -1
  53. package/IBindingsUpdater.js +0 -3
  54. package/IRedirects.js +0 -3
  55. package/InheritanceProcessor.js +99 -139
  56. package/InheritanceProcessor.js.map +1 -1
  57. package/InheritanceProcessor.test.js +178 -179
  58. package/InheritanceProcessor.test.js.map +1 -1
  59. package/InheritedValueResolver.d.ts +18 -1
  60. package/InheritedValueResolver.js +18 -20
  61. package/InheritedValueResolver.js.map +1 -1
  62. package/InputBindingsProcessor.d.ts +23 -2
  63. package/InputBindingsProcessor.js +200 -307
  64. package/InputBindingsProcessor.js.map +1 -1
  65. package/InputBindingsProcessorTokens.test.d.ts +1 -0
  66. package/InputBindingsProcessorTokens.test.js +400 -0
  67. package/InputBindingsProcessorTokens.test.js.map +1 -0
  68. package/InputsBindingsProcessor.test.js +334 -315
  69. package/InputsBindingsProcessor.test.js.map +1 -1
  70. package/InputsUpdater.js +23 -26
  71. package/InputsUpdater.js.map +1 -1
  72. package/LiveSdk.js +12 -13
  73. package/LiveSdk.js.map +1 -1
  74. package/Logger.js +9 -8
  75. package/Logger.js.map +1 -1
  76. package/MouseTracker.js +77 -83
  77. package/MouseTracker.js.map +1 -1
  78. package/NullSdk.js +22 -21
  79. package/NullSdk.js.map +1 -1
  80. package/PreviewDocument.d.ts +1 -0
  81. package/PreviewDocument.js +30 -30
  82. package/PreviewDocument.js.map +1 -1
  83. package/PreviewSdk.d.ts +2 -1
  84. package/PreviewSdk.js +19 -17
  85. package/PreviewSdk.js.map +1 -1
  86. package/PreviewViewport.js +51 -63
  87. package/PreviewViewport.js.map +1 -1
  88. package/ResizeObserver.js +24 -31
  89. package/ResizeObserver.js.map +1 -1
  90. package/StylesBindingsProcessor.d.ts +12 -2
  91. package/StylesBindingsProcessor.js +62 -79
  92. package/StylesBindingsProcessor.js.map +1 -1
  93. package/StylesUpdater.js +20 -25
  94. package/StylesUpdater.js.map +1 -1
  95. package/Theme.js +30 -25
  96. package/Theme.js.map +1 -1
  97. package/ViewportManager.js +89 -101
  98. package/ViewportManager.js.map +1 -1
  99. package/assertBindingShapes.d.ts +31 -0
  100. package/assertBindingShapes.js +64 -0
  101. package/assertBindingShapes.js.map +1 -0
  102. package/assertBindingShapes.test.d.ts +1 -0
  103. package/assertBindingShapes.test.js +131 -0
  104. package/assertBindingShapes.test.js.map +1 -0
  105. package/asset/deliveryUrl.d.ts +41 -0
  106. package/asset/deliveryUrl.js +34 -0
  107. package/asset/deliveryUrl.js.map +1 -0
  108. package/asset/deliveryUrl.test.d.ts +1 -0
  109. package/asset/deliveryUrl.test.js +127 -0
  110. package/asset/deliveryUrl.test.js.map +1 -0
  111. package/asset/geometry.d.ts +7 -0
  112. package/asset/geometry.js +10 -0
  113. package/asset/geometry.js.map +1 -0
  114. package/asset/imageSrcSet.d.ts +63 -0
  115. package/asset/imageSrcSet.js +98 -0
  116. package/asset/imageSrcSet.js.map +1 -0
  117. package/asset/imageSrcSet.test.d.ts +1 -0
  118. package/asset/imageSrcSet.test.js +103 -0
  119. package/asset/imageSrcSet.test.js.map +1 -0
  120. package/asset/index.d.ts +5 -0
  121. package/asset/index.js +5 -0
  122. package/asset/normalize.d.ts +24 -0
  123. package/asset/normalize.js +106 -0
  124. package/asset/normalize.js.map +1 -0
  125. package/asset/normalize.test.d.ts +1 -0
  126. package/asset/normalize.test.js +263 -0
  127. package/asset/normalize.test.js.map +1 -0
  128. package/asset/types.d.ts +2 -0
  129. package/asset/types.js +0 -0
  130. package/constants.js +7 -6
  131. package/constants.js.map +1 -1
  132. package/contentEntry/ContentEntryBindingsResolver.d.ts +30 -0
  133. package/contentEntry/ContentEntryBindingsResolver.js +45 -0
  134. package/contentEntry/ContentEntryBindingsResolver.js.map +1 -0
  135. package/contentEntry/ContentEntryCache.d.ts +46 -0
  136. package/contentEntry/ContentEntryCache.js +50 -0
  137. package/contentEntry/ContentEntryCache.js.map +1 -0
  138. package/contentEntry/resolveContentEntry.d.ts +74 -0
  139. package/contentEntry/resolveContentEntry.js +53 -0
  140. package/contentEntry/resolveContentEntry.js.map +1 -0
  141. package/contentEntry/resolveContentEntry.test.d.ts +1 -0
  142. package/contentEntry/resolveContentEntry.test.js +213 -0
  143. package/contentEntry/resolveContentEntry.test.js.map +1 -0
  144. package/createComponent.d.ts +5 -0
  145. package/createComponent.js +32 -0
  146. package/createComponent.js.map +1 -0
  147. package/createElement.js +5 -6
  148. package/createElement.js.map +1 -1
  149. package/createInput.d.ts +10 -2
  150. package/createInput.js +92 -143
  151. package/createInput.js.map +1 -1
  152. package/createTheme.js +2 -3
  153. package/createTheme.js.map +1 -1
  154. package/dataProviders/ApiClient.d.ts +10 -5
  155. package/dataProviders/ApiClient.js +40 -49
  156. package/dataProviders/ApiClient.js.map +1 -1
  157. package/dataProviders/DefaultDataProvider.d.ts +4 -0
  158. package/dataProviders/DefaultDataProvider.js +91 -58
  159. package/dataProviders/DefaultDataProvider.js.map +1 -1
  160. package/dataProviders/GET_EXPERIMENT_PAUSED.d.ts +1 -0
  161. package/dataProviders/GET_EXPERIMENT_PAUSED.js +17 -0
  162. package/dataProviders/GET_EXPERIMENT_PAUSED.js.map +1 -0
  163. package/dataProviders/GET_PAGE_BY_ID.js +2 -1
  164. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  165. package/dataProviders/GET_PAGE_BY_PATH.js +2 -1
  166. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  167. package/dataProviders/GET_PAGE_EXPERIMENT.d.ts +1 -0
  168. package/dataProviders/GET_PAGE_EXPERIMENT.js +32 -0
  169. package/dataProviders/GET_PAGE_EXPERIMENT.js.map +1 -0
  170. package/dataProviders/GET_VARIANT_CONTENT.d.ts +1 -0
  171. package/dataProviders/GET_VARIANT_CONTENT.js +24 -0
  172. package/dataProviders/GET_VARIANT_CONTENT.js.map +1 -0
  173. package/dataProviders/LIST_PUBLISHED_PAGES.js +2 -1
  174. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  175. package/dataProviders/NullDataProvider.d.ts +4 -0
  176. package/dataProviders/NullDataProvider.js +30 -20
  177. package/dataProviders/NullDataProvider.js.map +1 -1
  178. package/dataProviders/RedirectsProvider.js +24 -27
  179. package/dataProviders/RedirectsProvider.js.map +1 -1
  180. package/defaultBreakpoints.js +43 -22
  181. package/defaultBreakpoints.js.map +1 -1
  182. package/documentOperations/$addElementReferenceToParent.js +29 -32
  183. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  184. package/documentOperations/AddElement.js +8 -7
  185. package/documentOperations/AddElement.js.map +1 -1
  186. package/documentOperations/AddToParent.js +14 -13
  187. package/documentOperations/AddToParent.js.map +1 -1
  188. package/documentOperations/IDocumentOperation.js +0 -3
  189. package/documentOperations/RemoveElement.js +9 -15
  190. package/documentOperations/RemoveElement.js.map +1 -1
  191. package/documentOperations/SetGlobalInputBinding.js +23 -22
  192. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  193. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  194. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  195. package/documentOperations/SetInputBindingOverride.js +30 -29
  196. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  197. package/documentOperations/SetStyleBindingOverride.js +30 -31
  198. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  199. package/documentOperations/index.js +9 -8
  200. package/documentOperations/index.js.map +1 -1
  201. package/experiments/PostHogAnalyticsProvider.d.ts +31 -0
  202. package/experiments/PostHogAnalyticsProvider.js +28 -0
  203. package/experiments/PostHogAnalyticsProvider.js.map +1 -0
  204. package/experiments/analyticsProvider.d.ts +4 -0
  205. package/experiments/analyticsProvider.js +11 -0
  206. package/experiments/analyticsProvider.js.map +1 -0
  207. package/experiments/bucketing.d.ts +27 -0
  208. package/experiments/bucketing.js +91 -0
  209. package/experiments/bucketing.js.map +1 -0
  210. package/experiments/bucketing.test.d.ts +1 -0
  211. package/experiments/bucketing.test.js +183 -0
  212. package/experiments/bucketing.test.js.map +1 -0
  213. package/experiments/index.d.ts +5 -0
  214. package/experiments/index.js +5 -0
  215. package/experiments/render.d.ts +79 -0
  216. package/experiments/render.js +149 -0
  217. package/experiments/render.js.map +1 -0
  218. package/experiments/types.d.ts +108 -0
  219. package/experiments/types.js +4 -0
  220. package/experiments/types.js.map +1 -0
  221. package/findMatchingAstNode.js +11 -13
  222. package/findMatchingAstNode.js.map +1 -1
  223. package/generateElementId.js +2 -1
  224. package/generateElementId.js.map +1 -1
  225. package/headersProvider.js +4 -3
  226. package/headersProvider.js.map +1 -1
  227. package/image/geometry.d.ts +54 -0
  228. package/image/geometry.js +112 -0
  229. package/image/geometry.js.map +1 -0
  230. package/image/geometry.test.d.ts +1 -0
  231. package/image/geometry.test.js +190 -0
  232. package/image/geometry.test.js.map +1 -0
  233. package/image/index.d.ts +3 -0
  234. package/image/index.js +3 -0
  235. package/image/presets.d.ts +6 -0
  236. package/image/presets.js +20 -0
  237. package/image/presets.js.map +1 -0
  238. package/image/types.d.ts +10 -0
  239. package/image/types.js +0 -0
  240. package/index.d.ts +10 -0
  241. package/index.js +10 -2
  242. package/jsonPatch.js +5 -9
  243. package/jsonPatch.js.map +1 -1
  244. package/messages.js +12 -11
  245. package/messages.js.map +1 -1
  246. package/messenger/MessageOrigin.js +12 -11
  247. package/messenger/MessageOrigin.js.map +1 -1
  248. package/messenger/Messenger.js +58 -69
  249. package/messenger/Messenger.js.map +1 -1
  250. package/messenger/index.js +0 -2
  251. package/package.json +12 -9
  252. package/registerComponentGroup.js +5 -6
  253. package/registerComponentGroup.js.map +1 -1
  254. package/tokenBinding.d.ts +26 -0
  255. package/tokenBinding.js +15 -0
  256. package/tokenBinding.js.map +1 -0
  257. package/tokenBinding.test.d.ts +1 -0
  258. package/tokenBinding.test.js +165 -0
  259. package/tokenBinding.test.js.map +1 -0
  260. package/types/ShorthandCssProperties.js +0 -3
  261. package/types/WebsiteBuilderTheme.d.ts +12 -0
  262. package/types/WebsiteBuilderTheme.js +0 -3
  263. package/types.d.ts +96 -1
  264. package/types.js +0 -3
  265. package/IBindingsUpdater.js.map +0 -1
  266. package/IRedirects.js.map +0 -1
  267. package/documentOperations/IDocumentOperation.js.map +0 -1
  268. package/index.js.map +0 -1
  269. package/messenger/index.js.map +0 -1
  270. package/types/ShorthandCssProperties.js.map +0 -1
  271. package/types/WebsiteBuilderTheme.js.map +0 -1
  272. package/types.js.map +0 -1
package/PreviewSdk.d.ts CHANGED
@@ -2,7 +2,8 @@ import type { IContentSdk, IDataProvider, ListPagesOptions, ListPagesResult, Pub
2
2
  export declare class PreviewSdk implements IContentSdk {
3
3
  private liveSdk;
4
4
  private dataProvider;
5
- constructor(dataProvider: IDataProvider, liveSdk: IContentSdk);
5
+ private previewParams;
6
+ constructor(dataProvider: IDataProvider, liveSdk: IContentSdk, previewParams?: string);
6
7
  getPage(path: string): Promise<PublicPage | null>;
7
8
  listPages(options?: ListPagesOptions): Promise<ListPagesResult>;
8
9
  }
package/PreviewSdk.js CHANGED
@@ -1,22 +1,24 @@
1
1
  import { PreviewDocument } from "./PreviewDocument.js";
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);
2
+ import { environment } from "./Environment.js";
3
+ class PreviewSdk {
4
+ constructor(dataProvider, liveSdk, previewParams){
5
+ this.liveSdk = liveSdk;
6
+ this.dataProvider = dataProvider;
7
+ this.previewParams = previewParams;
8
+ }
9
+ async getPage(path) {
10
+ let previewDocument;
11
+ previewDocument = this.previewParams ? PreviewDocument.createFromParams(this.previewParams) : environment.isClient() ? PreviewDocument.createFromWindow() : await PreviewDocument.createFromHeaders();
12
+ if (!previewDocument.matches({
13
+ type: "page",
14
+ path
15
+ })) return this.liveSdk.getPage(path);
16
+ return this.dataProvider.getPageById(previewDocument.getId());
17
+ }
18
+ async listPages(options) {
19
+ return this.liveSdk.listPages(options);
14
20
  }
15
- return this.dataProvider.getPageById(previewDocument.getId());
16
- }
17
- async listPages(options) {
18
- return this.liveSdk.listPages(options);
19
- }
20
21
  }
22
+ export { PreviewSdk };
21
23
 
22
24
  //# sourceMappingURL=PreviewSdk.js.map
package/PreviewSdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["PreviewDocument","PreviewSdk","constructor","dataProvider","liveSdk","getPage","path","previewDocument","createFromHeaders","matches","type","getPageById","getId","listPages","options"],"sources":["PreviewSdk.ts"],"sourcesContent":["import type {\n IContentSdk,\n IDataProvider,\n ListPagesOptions,\n ListPagesResult,\n PublicPage\n} from \"~/types.js\";\nimport { PreviewDocument } from \"~/PreviewDocument.js\";\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(options?: ListPagesOptions): Promise<ListPagesResult> {\n return this.liveSdk.listPages(options);\n }\n}\n"],"mappings":"AAOA,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,CAACC,OAA0B,EAA4B;IAClE,OAAO,IAAI,CAACV,OAAO,CAACS,SAAS,CAACC,OAAO,CAAC;EAC1C;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"PreviewSdk.js","sources":["../src/PreviewSdk.ts"],"sourcesContent":["import type {\n IContentSdk,\n IDataProvider,\n ListPagesOptions,\n ListPagesResult,\n PublicPage\n} from \"~/types.js\";\nimport { PreviewDocument } from \"~/PreviewDocument.js\";\nimport { environment } from \"./Environment.js\";\n\nexport class PreviewSdk implements IContentSdk {\n private liveSdk: IContentSdk;\n private dataProvider: IDataProvider;\n private previewParams: string | undefined;\n\n constructor(dataProvider: IDataProvider, liveSdk: IContentSdk, previewParams?: string) {\n this.liveSdk = liveSdk;\n this.dataProvider = dataProvider;\n this.previewParams = previewParams;\n }\n\n async getPage(path: string): Promise<PublicPage | null> {\n let previewDocument: PreviewDocument;\n\n if (this.previewParams) {\n // Params were passed directly via init config (server-side SSR path).\n previewDocument = PreviewDocument.createFromParams(this.previewParams);\n } else if (environment.isClient()) {\n previewDocument = PreviewDocument.createFromWindow();\n } else {\n previewDocument = await PreviewDocument.createFromHeaders();\n }\n\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(options?: ListPagesOptions): Promise<ListPagesResult> {\n return this.liveSdk.listPages(options);\n }\n}\n"],"names":["PreviewSdk","dataProvider","liveSdk","previewParams","path","previewDocument","PreviewDocument","environment","options"],"mappings":";;AAUO,MAAMA;IAKT,YAAYC,YAA2B,EAAEC,OAAoB,EAAEC,aAAsB,CAAE;QACnF,IAAI,CAAC,OAAO,GAAGD;QACf,IAAI,CAAC,YAAY,GAAGD;QACpB,IAAI,CAAC,aAAa,GAAGE;IACzB;IAEA,MAAM,QAAQC,IAAY,EAA8B;QACpD,IAAIC;QAIAA,kBAFA,IAAI,CAAC,aAAa,GAEAC,gBAAgB,gBAAgB,CAAC,IAAI,CAAC,aAAa,IAC9DC,YAAY,QAAQ,KACTD,gBAAgB,gBAAgB,KAEhC,MAAMA,gBAAgB,iBAAiB;QAG7D,IAAI,CAACD,gBAAgB,OAAO,CAAC;YAAE,MAAM;YAAQD;QAAK,IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAACA;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAACC,gBAAgB,KAAK;IAC9D;IAEA,MAAM,UAAUG,OAA0B,EAA4B;QAClE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAACA;IAClC;AACJ"}
@@ -1,68 +1,56 @@
1
1
  import { viewportManager } from "./ViewportManager.js";
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
2
+ class PreviewViewport {
3
+ getBoxes() {
4
+ const elementBoxes = {};
5
+ const elements = document.querySelectorAll("[data-element-id]");
6
+ elements.forEach((element)=>{
7
+ const id = element.getAttribute("data-element-id");
8
+ const depth = element.getAttribute("data-depth");
9
+ if (id) {
10
+ const rect = element.firstElementChild?.getBoundingClientRect();
11
+ if (!rect) return;
12
+ elementBoxes[id] = {
13
+ type: "element",
14
+ depth: parseInt(depth ?? "0"),
15
+ parentId: element.getAttribute("data-parent-id"),
16
+ parentSlot: element.getAttribute("data-parent-slot"),
17
+ parentIndex: parseInt(element.getAttribute("data-parent-index") ?? "0"),
18
+ top: rect.top,
19
+ left: rect.left,
20
+ width: rect.width,
21
+ height: rect.height
22
+ };
23
+ }
24
+ });
25
+ const slotBoxes = {};
26
+ const elementSlots = document.querySelectorAll("[data-role='element-slot']");
27
+ elementSlots.forEach((element)=>{
28
+ const parentId = element.getAttribute("data-parent-id");
29
+ const slot = element.getAttribute("data-parent-slot");
30
+ const depth = element.getAttribute("data-depth");
31
+ const rect = element.getBoundingClientRect();
32
+ slotBoxes[`${parentId}:${slot}`] = {
33
+ type: "element-slot",
34
+ depth: parseInt(depth ?? "0"),
35
+ parentId: element.getAttribute("data-parent-id"),
36
+ parentSlot: element.getAttribute("data-parent-slot"),
37
+ parentIndex: parseInt(element.getAttribute("data-parent-index") ?? "0"),
38
+ top: rect.top,
39
+ left: rect.left,
40
+ width: rect.width,
41
+ height: rect.height
42
+ };
43
+ });
44
+ return {
45
+ ...elementBoxes,
46
+ ...slotBoxes
29
47
  };
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
- destroy() {}
48
+ }
49
+ getViewport() {
50
+ return viewportManager.getViewport();
51
+ }
52
+ destroy() {}
66
53
  }
54
+ export { PreviewViewport };
67
55
 
68
56
  //# sourceMappingURL=PreviewViewport.js.map
@@ -1 +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","destroy"],"sources":["PreviewViewport.ts"],"sourcesContent":["import type { ElementBoxData, ElementSlotBoxData } from \"~/types.js\";\nimport { viewportManager } from \"./ViewportManager.js\";\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 destroy(): void {}\n}\n"],"mappings":"AACA,SAASA,eAAe;AAExB,OAAO,MAAMC,eAAe,CAAC;EACzBC,QAAQA,CAAA,EAAG;IACP,MAAMC,YAA4C,GAAG,CAAC,CAAC;;IAEvD;IACA,MAAMC,QAAQ,GAAGC,QAAQ,CAACC,gBAAgB,CAAC,mBAAmB,CAAC;IAE/DF,QAAQ,CAACG,OAAO,CAACC,OAAO,IAAI;MACxB,MAAMC,EAAE,GAAGD,OAAO,CAACE,YAAY,CAAC,iBAAiB,CAAC;MAClD,MAAMC,KAAK,GAAGH,OAAO,CAACE,YAAY,CAAC,YAAY,CAAC;MAChD,IAAID,EAAE,EAAE;QACJ;QACA,MAAMG,IAAI,GAAGJ,OAAO,CAACK,iBAAiB,EAAEC,qBAAqB,CAAC,CAAC;QAE/D,IAAI,CAACF,IAAI,EAAE;UACP;QACJ;;QAEA;QACAT,YAAY,CAACM,EAAE,CAAC,GAAG;UACfM,IAAI,EAAE,SAAS;UACfJ,KAAK,EAAEK,QAAQ,CAACL,KAAK,IAAI,GAAG,CAAC;UAC7BM,QAAQ,EAAET,OAAO,CAACE,YAAY,CAAC,gBAAgB,CAAE;UACjDQ,UAAU,EAAEV,OAAO,CAACE,YAAY,CAAC,kBAAkB,CAAE;UACrDS,WAAW,EAAEH,QAAQ,CAACR,OAAO,CAACE,YAAY,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC;UACvEU,GAAG,EAAER,IAAI,CAACQ,GAAG;UACbC,IAAI,EAAET,IAAI,CAACS,IAAI;UACfC,KAAK,EAAEV,IAAI,CAACU,KAAK;UACjBC,MAAM,EAAEX,IAAI,CAACW;QACjB,CAAC;MACL;IACJ,CAAC,CAAC;;IAEF;IACA,MAAMC,SAA6C,GAAG,CAAC,CAAC;IAExD,MAAMC,YAAY,GAAGpB,QAAQ,CAACC,gBAAgB,CAAC,4BAA4B,CAAC;IAE5EmB,YAAY,CAAClB,OAAO,CAACC,OAAO,IAAI;MAC5B,MAAMS,QAAQ,GAAGT,OAAO,CAACE,YAAY,CAAC,gBAAgB,CAAC;MACvD,MAAMgB,IAAI,GAAGlB,OAAO,CAACE,YAAY,CAAC,kBAAkB,CAAC;MACrD,MAAMC,KAAK,GAAGH,OAAO,CAACE,YAAY,CAAC,YAAY,CAAC;;MAEhD;MACA,MAAME,IAAI,GAAGJ,OAAO,CAACM,qBAAqB,CAAC,CAAC;;MAE5C;MACAU,SAAS,CAAC,GAAGP,QAAQ,IAAIS,IAAI,EAAE,CAAC,GAAG;QAC/BX,IAAI,EAAE,cAAc;QACpBJ,KAAK,EAAEK,QAAQ,CAACL,KAAK,IAAI,GAAG,CAAC;QAC7BM,QAAQ,EAAET,OAAO,CAACE,YAAY,CAAC,gBAAgB,CAAE;QACjDQ,UAAU,EAAEV,OAAO,CAACE,YAAY,CAAC,kBAAkB,CAAE;QACrDS,WAAW,EAAEH,QAAQ,CAACR,OAAO,CAACE,YAAY,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC;QACvEU,GAAG,EAAER,IAAI,CAACQ,GAAG;QACbC,IAAI,EAAET,IAAI,CAACS,IAAI;QACfC,KAAK,EAAEV,IAAI,CAACU,KAAK;QACjBC,MAAM,EAAEX,IAAI,CAACW;MACjB,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;MAAE,GAAGpB,YAAY;MAAE,GAAGqB;IAAU,CAAC;EAC5C;EAEAG,WAAWA,CAAA,EAAG;IACV,OAAO3B,eAAe,CAAC2B,WAAW,CAAC,CAAC;EACxC;EAEAC,OAAOA,CAAA,EAAS,CAAC;AACrB","ignoreList":[]}
1
+ {"version":3,"file":"PreviewViewport.js","sources":["../src/PreviewViewport.ts"],"sourcesContent":["import type { ElementBoxData, ElementSlotBoxData } from \"~/types.js\";\nimport { viewportManager } from \"./ViewportManager.js\";\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 destroy(): void {}\n}\n"],"names":["PreviewViewport","elementBoxes","elements","document","element","id","depth","rect","parseInt","slotBoxes","elementSlots","parentId","slot","viewportManager"],"mappings":";AAGO,MAAMA;IACT,WAAW;QACP,MAAMC,eAA+C,CAAC;QAGtD,MAAMC,WAAWC,SAAS,gBAAgB,CAAC;QAE3CD,SAAS,OAAO,CAACE,CAAAA;YACb,MAAMC,KAAKD,QAAQ,YAAY,CAAC;YAChC,MAAME,QAAQF,QAAQ,YAAY,CAAC;YACnC,IAAIC,IAAI;gBAEJ,MAAME,OAAOH,QAAQ,iBAAiB,EAAE;gBAExC,IAAI,CAACG,MACD;gBAIJN,YAAY,CAACI,GAAG,GAAG;oBACf,MAAM;oBACN,OAAOG,SAASF,SAAS;oBACzB,UAAUF,QAAQ,YAAY,CAAC;oBAC/B,YAAYA,QAAQ,YAAY,CAAC;oBACjC,aAAaI,SAASJ,QAAQ,YAAY,CAAC,wBAAwB;oBACnE,KAAKG,KAAK,GAAG;oBACb,MAAMA,KAAK,IAAI;oBACf,OAAOA,KAAK,KAAK;oBACjB,QAAQA,KAAK,MAAM;gBACvB;YACJ;QACJ;QAGA,MAAME,YAAgD,CAAC;QAEvD,MAAMC,eAAeP,SAAS,gBAAgB,CAAC;QAE/CO,aAAa,OAAO,CAACN,CAAAA;YACjB,MAAMO,WAAWP,QAAQ,YAAY,CAAC;YACtC,MAAMQ,OAAOR,QAAQ,YAAY,CAAC;YAClC,MAAME,QAAQF,QAAQ,YAAY,CAAC;YAGnC,MAAMG,OAAOH,QAAQ,qBAAqB;YAG1CK,SAAS,CAAC,GAAGE,SAAS,CAAC,EAAEC,MAAM,CAAC,GAAG;gBAC/B,MAAM;gBACN,OAAOJ,SAASF,SAAS;gBACzB,UAAUF,QAAQ,YAAY,CAAC;gBAC/B,YAAYA,QAAQ,YAAY,CAAC;gBACjC,aAAaI,SAASJ,QAAQ,YAAY,CAAC,wBAAwB;gBACnE,KAAKG,KAAK,GAAG;gBACb,MAAMA,KAAK,IAAI;gBACf,OAAOA,KAAK,KAAK;gBACjB,QAAQA,KAAK,MAAM;YACvB;QACJ;QAEA,OAAO;YAAE,GAAGN,YAAY;YAAE,GAAGQ,SAAS;QAAC;IAC3C;IAEA,cAAc;QACV,OAAOI,gBAAgB,WAAW;IACtC;IAEA,UAAgB,CAAC;AACrB"}
package/ResizeObserver.js CHANGED
@@ -1,41 +1,34 @@
1
1
  let resizeQueue = {};
2
2
  const onChangeListeners = [];
3
- const flushResizeQueue = () => {
4
- if (Object.entries(resizeQueue).length > 0) {
5
- onChangeListeners.forEach(entry => {
6
- entry();
3
+ const flushResizeQueue = ()=>{
4
+ if (Object.entries(resizeQueue).length > 0) onChangeListeners.forEach((entry)=>{
5
+ entry();
7
6
  });
8
- }
9
- resizeQueue = {};
7
+ resizeQueue = {};
10
8
  };
11
9
  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
- }
10
+ observer = "u" < typeof ResizeObserver ? {
11
+ observe: ()=>{},
12
+ unobserve: ()=>{}
13
+ } : new ResizeObserver((entries)=>{
14
+ for (const entry of entries){
15
+ const el = entry.target;
16
+ const id = el.getAttribute("data-element-id");
17
+ if (id) resizeQueue[id] = el.getBoundingClientRect();
25
18
  }
26
19
  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
- }
20
+ });
21
+ const resizeObserver = {
22
+ observe: (element)=>{
23
+ observer.observe(element);
24
+ },
25
+ unobserve: (element)=>{
26
+ observer.unobserve(element);
27
+ },
28
+ onChange: (cb)=>{
29
+ onChangeListeners.push(cb);
30
+ }
39
31
  };
32
+ export { resizeObserver };
40
33
 
41
34
  //# sourceMappingURL=ResizeObserver.js.map
@@ -1 +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":[]}
1
+ {"version":3,"file":"ResizeObserver.js","sources":["../src/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 ResizeObserver === \"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"],"names":["resizeQueue","onChangeListeners","flushResizeQueue","Object","entry","observer","ResizeObserver","entries","el","id","requestAnimationFrame","resizeObserver","element","cb"],"mappings":"AAAA,IAAIA,cAAuC,CAAC;AAC5C,MAAMC,oBAAuC,EAAE;AAE/C,MAAMC,mBAAmB;IACrB,IAAIC,OAAO,OAAO,CAACH,aAAa,MAAM,GAAG,GACrCC,kBAAkB,OAAO,CAACG,CAAAA;QACtBA;IACJ;IAEJJ,cAAc,CAAC;AACnB;AAEA,IAAIK;AAGAA,WADA,AAA0B,MAA1B,OAAOC,iBACI;IACP,SAAS,KAAO;IAChB,WAAW,KAAO;AACtB,IAEW,IAAIA,eAAeC,CAAAA;IAC1B,KAAK,MAAMH,SAASG,QAAS;QACzB,MAAMC,KAAKJ,MAAM,MAAM;QACvB,MAAMK,KAAKD,GAAG,YAAY,CAAC;QAC3B,IAAIC,IACAT,WAAW,CAACS,GAAG,GAAGD,GAAG,qBAAqB;IAElD;IACAE,sBAAsBR;AAC1B;AAGG,MAAMS,iBAAiB;IAC1B,SAAS,CAACC;QACNP,SAAS,OAAO,CAACO;IACrB;IACA,WAAW,CAACA;QACRP,SAAS,SAAS,CAACO;IACvB;IACA,UAAU,CAACC;QACPZ,kBAAkB,IAAI,CAACY;IAC3B;AACJ"}
@@ -1,4 +1,4 @@
1
- import type { DocumentElementBindings, DocumentElementStyleBindings } from "./types.js";
1
+ import type { DocumentElementBindings, DocumentElementStyleBindings, TokenReference } from "./types.js";
2
2
  import { StylesUpdater } from "./StylesUpdater.js";
3
3
  type DeepBindings = Record<string, any>;
4
4
  export type ElementStylesBindings = {
@@ -20,13 +20,23 @@ export declare class StylesBindingsProcessor {
20
20
  constructor(elementId: string, breakpoints: string[], rawBindings: DocumentElementBindings);
21
21
  /**
22
22
  * Converts flat style bindings into deep styles object (removes `.static`).
23
+ *
24
+ * A token reference yields its `var(--wby-…)` form, so the editor preview renders the themed
25
+ * value. Use {@link toTokenMap} alongside this when you need to know that a value came from a
26
+ * token rather than a literal — a picker has to show which token is selected.
23
27
  */
24
28
  toDeepStyles(styles?: DocumentElementBindings["styles"]): DeepBindings;
29
+ /** The token references among these bindings, keyed by CSS property. */
30
+ toTokenMap(styles?: DocumentElementBindings["styles"]): Record<string, TokenReference>;
25
31
  /**
26
32
  * Flattens deep styles object into flat bindings with `.static` wrappers.
27
33
  * Skips overrides where the value matches inherited parent breakpoint.
34
+ *
35
+ * @param tokens Properties in this map are written as token references instead of literals.
36
+ * A property absent from it is written as `static`, which is what clears a
37
+ * reference when someone picks a free value over a token.
28
38
  */
29
- createUpdate(styles: DeepBindings, currentBreakpoint: string): StylesUpdater;
39
+ createUpdate(styles: DeepBindings, currentBreakpoint: string, tokens?: Record<string, TokenReference>): StylesUpdater;
30
40
  private getBaseStyles;
31
41
  private isBaseBreakpoint;
32
42
  }
@@ -1,91 +1,74 @@
1
1
  import set from "lodash/set.js";
2
2
  import unset from "lodash/unset.js";
3
+ import { toJS } from "mobx";
3
4
  import { InheritedValueResolver } from "./InheritedValueResolver.js";
4
5
  import { StylesUpdater } from "./StylesUpdater.js";
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
- }
6
+ import { isTokenBinding, tokenToCssValue } from "./tokenBinding.js";
7
+ class StylesBindingsProcessor {
8
+ constructor(elementId, breakpoints, rawBindings){
9
+ this.elementId = elementId;
10
+ this.breakpoints = breakpoints;
11
+ this.rawBindings = rawBindings;
55
12
  }
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}`);
13
+ toDeepStyles(styles = {}) {
14
+ const result = {};
15
+ Object.keys(styles).forEach((key)=>{
16
+ const binding = styles[key];
17
+ result[key] = isTokenBinding(binding) ? tokenToCssValue(binding.token) : binding.static;
18
+ });
19
+ return result;
20
+ }
21
+ toTokenMap(styles = {}) {
22
+ const result = {};
23
+ Object.keys(styles).forEach((key)=>{
24
+ const binding = styles[key];
25
+ if (isTokenBinding(binding)) result[key] = binding.token;
26
+ });
27
+ return result;
28
+ }
29
+ createUpdate(styles, currentBreakpoint, tokens = {}) {
30
+ const rebuilt = this.getBaseStyles();
31
+ const valueResolver = new InheritedValueResolver(this.breakpoints, (breakpoint)=>{
32
+ if (this.isBaseBreakpoint(breakpoint)) return this.rawBindings.styles;
33
+ return this.rawBindings?.overrides?.[breakpoint]?.styles;
34
+ });
35
+ const originalStyles = this.isBaseBreakpoint(currentBreakpoint) ? this.rawBindings.styles || {} : this.rawBindings?.overrides?.[currentBreakpoint]?.styles || {};
36
+ const newKeys = new Set(Object.keys(styles));
37
+ const originalKeys = Object.keys(originalStyles);
38
+ for (const key of originalKeys)if (!newKeys.has(key)) this.isBaseBreakpoint(currentBreakpoint) ? unset(rebuilt, `styles.${key}`) : unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);
39
+ for (const [key, value] of Object.entries(styles)){
40
+ const token = tokens[key];
41
+ if (this.isBaseBreakpoint(currentBreakpoint)) if (token) {
42
+ unset(rebuilt, `styles.${key}`);
43
+ set(rebuilt, `styles.${key}.token`, token);
44
+ } else {
45
+ unset(rebuilt, `styles.${key}`);
46
+ set(rebuilt, `styles.${key}.static`, value);
47
+ }
48
+ else {
49
+ const inheritedValue = valueResolver.getInheritedValue(key, currentBreakpoint);
50
+ if (value !== inheritedValue) {
51
+ unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);
52
+ token ? set(rebuilt, `overrides.${currentBreakpoint}.styles.${key}.token`, token) : set(rebuilt, `overrides.${currentBreakpoint}.styles.${key}.static`, value);
53
+ } else unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);
54
+ }
65
55
  }
66
- }
56
+ return new StylesUpdater(this.elementId, rebuilt);
67
57
  }
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));
58
+ getBaseStyles() {
59
+ const baseStyles = {
60
+ styles: structuredClone(toJS(this.rawBindings.styles)) ?? {},
61
+ overrides: {}
62
+ };
63
+ if (this.rawBindings.overrides) {
64
+ for (const [bp, overrides] of Object.entries(this.rawBindings.overrides))if (overrides.styles) set(baseStyles, `overrides.${bp}.styles`, structuredClone(toJS(this.rawBindings.overrides[bp].styles)));
81
65
  }
82
- }
66
+ return baseStyles;
67
+ }
68
+ isBaseBreakpoint(name) {
69
+ return 0 === this.breakpoints.indexOf(name);
83
70
  }
84
- return baseStyles;
85
- }
86
- isBaseBreakpoint(name) {
87
- return this.breakpoints.indexOf(name) === 0;
88
- }
89
71
  }
72
+ export { StylesBindingsProcessor };
90
73
 
91
74
  //# sourceMappingURL=StylesBindingsProcessor.js.map
@@ -1 +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.js\";\nimport unset from \"lodash/unset.js\";\nimport type { DocumentElementBindings, DocumentElementStyleBindings } from \"~/types.js\";\nimport { InheritedValueResolver } from \"~/InheritedValueResolver.js\";\nimport { StylesUpdater } from \"./StylesUpdater.js\";\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":"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","ignoreList":[]}
1
+ {"version":3,"file":"StylesBindingsProcessor.js","sources":["../src/StylesBindingsProcessor.ts"],"sourcesContent":["import set from \"lodash/set.js\";\nimport unset from \"lodash/unset.js\";\nimport { toJS } from \"mobx\";\nimport type {\n DocumentElementBindings,\n DocumentElementStyleBindings,\n TokenReference\n} from \"~/types.js\";\nimport { InheritedValueResolver } from \"~/InheritedValueResolver.js\";\nimport { StylesUpdater } from \"./StylesUpdater.js\";\nimport { isTokenBinding, tokenToCssValue } from \"./tokenBinding.js\";\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 * A token reference yields its `var(--wby-…)` form, so the editor preview renders the themed\n * value. Use {@link toTokenMap} alongside this when you need to know that a value came from a\n * token rather than a literal — a picker has to show which token is selected.\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 const binding = styles[key];\n result[key] = isTokenBinding(binding) ? tokenToCssValue(binding.token) : binding.static;\n });\n return result;\n }\n\n /** The token references among these bindings, keyed by CSS property. */\n public toTokenMap(\n styles: DocumentElementBindings[\"styles\"] = {}\n ): Record<string, TokenReference> {\n const result: Record<string, TokenReference> = {};\n Object.keys(styles).forEach(key => {\n // @ts-expect-error Style keys cannot be indexed with a string.\n const binding = styles[key];\n if (isTokenBinding(binding)) {\n result[key] = binding.token;\n }\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 * @param tokens Properties in this map are written as token references instead of literals.\n * A property absent from it is written as `static`, which is what clears a\n * reference when someone picks a free value over a token.\n */\n public createUpdate(\n styles: DeepBindings,\n currentBreakpoint: string,\n tokens: Record<string, TokenReference> = {}\n ) {\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 const token = tokens[key];\n\n if (this.isBaseBreakpoint(currentBreakpoint)) {\n if (token) {\n // A binding holds either a reference or a literal, never both — leaving a stale\n // `static` behind would make the stored value ambiguous.\n unset(rebuilt, `styles.${key}`);\n set(rebuilt, `styles.${key}.token`, token);\n } else {\n unset(rebuilt, `styles.${key}`);\n set(rebuilt, `styles.${key}.static`, value);\n }\n } else {\n const inheritedValue = valueResolver.getInheritedValue(key, currentBreakpoint);\n\n if (value !== inheritedValue) {\n unset(rebuilt, `overrides.${currentBreakpoint}.styles.${key}`);\n if (token) {\n set(rebuilt, `overrides.${currentBreakpoint}.styles.${key}.token`, token);\n } else {\n set(rebuilt, `overrides.${currentBreakpoint}.styles.${key}.static`, value);\n }\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(toJS(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(toJS(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"],"names":["StylesBindingsProcessor","elementId","breakpoints","rawBindings","styles","result","Object","key","binding","isTokenBinding","tokenToCssValue","currentBreakpoint","tokens","rebuilt","valueResolver","InheritedValueResolver","breakpoint","originalStyles","newKeys","Set","originalKeys","unset","value","token","set","inheritedValue","StylesUpdater","baseStyles","structuredClone","toJS","bp","overrides","name"],"mappings":"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"}
package/StylesUpdater.js CHANGED
@@ -1,34 +1,29 @@
1
1
  import { jsonPatch } from "./jsonPatch.js";
2
2
  import set from "lodash/set.js";
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;
3
+ class StylesUpdater {
4
+ constructor(elementId, bindings){
5
+ this.elementId = elementId;
6
+ this.bindings = bindings;
11
7
  }
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));
8
+ applyToDocument(document) {
9
+ if (this.bindings.styles) document.bindings[this.elementId].styles = this.bindings.styles;
10
+ if (this.bindings.overrides) {
11
+ for (const [bp, overrides] of Object.entries(this.bindings.overrides))if (overrides.styles) set(document.bindings, `${this.elementId}.overrides.${bp}.styles`, structuredClone(this.bindings.overrides[bp].styles));
16
12
  }
17
- }
18
13
  }
19
- }
20
- createJsonPatch(bindings) {
21
- const toCompare = {
22
- ...this.bindings
23
- };
24
- if (Object.keys(toCompare.overrides ?? {}).length === 0) {
25
- delete toCompare.overrides;
14
+ createJsonPatch(bindings) {
15
+ const toCompare = {
16
+ ...this.bindings
17
+ };
18
+ if (0 === Object.keys(toCompare.overrides ?? {}).length) delete toCompare.overrides;
19
+ const ignore = [
20
+ "/inputs",
21
+ "/overrides/inputs",
22
+ "/metadata"
23
+ ];
24
+ return jsonPatch.compare(bindings, toCompare).filter((op)=>!ignore.some((prefix)=>op.path.startsWith(prefix)));
26
25
  }
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
26
  }
27
+ export { StylesUpdater };
33
28
 
34
29
  //# sourceMappingURL=StylesUpdater.js.map