@makeswift/runtime 0.27.2 → 0.27.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/dist/cjs/api/api-resources-client.js +160 -0
  2. package/dist/cjs/api/api-resources-client.js.map +1 -0
  3. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  4. package/dist/cjs/api-handler/handlers/webhook/diff-projection.js +62 -0
  5. package/dist/cjs/api-handler/handlers/webhook/diff-projection.js.map +1 -0
  6. package/dist/cjs/box-model.js +33 -0
  7. package/dist/cjs/box-model.js.map +1 -0
  8. package/dist/cjs/builder/serialization.js +78 -0
  9. package/dist/cjs/builder/serialization.js.map +1 -0
  10. package/dist/cjs/client/index.js +3 -3
  11. package/dist/cjs/components/builtin/index.js +84 -0
  12. package/dist/cjs/components/builtin/index.js.map +1 -0
  13. package/dist/cjs/components/index.js +25 -0
  14. package/dist/cjs/components/index.js.map +1 -0
  15. package/dist/cjs/controls/rich-text-v2/translation.js +187 -0
  16. package/dist/cjs/controls/rich-text-v2/translation.js.map +1 -0
  17. package/dist/cjs/controls/serialization/base/index.js +78 -0
  18. package/dist/cjs/controls/serialization/base/index.js.map +1 -0
  19. package/dist/cjs/controls/serialization/base/visitor.js +59 -0
  20. package/dist/cjs/controls/serialization/base/visitor.js.map +1 -0
  21. package/dist/cjs/controls/serialization/index.js +55 -0
  22. package/dist/cjs/controls/serialization/index.js.map +1 -0
  23. package/dist/cjs/controls/serialization/message-port/function-serialization.js +79 -0
  24. package/dist/cjs/controls/serialization/message-port/function-serialization.js.map +1 -0
  25. package/dist/cjs/controls/serialization/message-port/index.js +25 -0
  26. package/dist/cjs/controls/serialization/message-port/index.js.map +1 -0
  27. package/dist/cjs/controls/serialization/message-port/visitor.js +48 -0
  28. package/dist/cjs/controls/serialization/message-port/visitor.js.map +1 -0
  29. package/dist/cjs/core/index.js +57 -0
  30. package/dist/cjs/core/index.js.map +1 -0
  31. package/dist/cjs/next/api-handler/config/pages-router.js +1 -1
  32. package/dist/cjs/next/api-handler/config/pages-router.js.map +1 -1
  33. package/dist/cjs/next/fetch.js +30 -0
  34. package/dist/cjs/next/fetch.js.map +1 -0
  35. package/dist/cjs/prop-controllers/index.js +48 -0
  36. package/dist/cjs/prop-controllers/index.js.map +1 -0
  37. package/dist/cjs/prop-controllers/serialization.js +355 -0
  38. package/dist/cjs/prop-controllers/serialization.js.map +1 -0
  39. package/dist/cjs/react.js +40 -0
  40. package/dist/cjs/react.js.map +1 -0
  41. package/dist/cjs/runtimes/react/components/LiveProvider.js.map +1 -1
  42. package/dist/cjs/runtimes/react/components/MakeswiftFonts.js +33 -0
  43. package/dist/cjs/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  44. package/dist/cjs/runtimes/react/components/PreviewProvider.js +3 -9
  45. package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -1
  46. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js +10 -5
  47. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js.map +1 -1
  48. package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js +39 -0
  49. package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  50. package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js +59 -0
  51. package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
  52. package/dist/cjs/runtimes/react/resource-resolver.js +52 -0
  53. package/dist/cjs/runtimes/react/resource-resolver.js.map +1 -0
  54. package/dist/cjs/state/actions.js +423 -0
  55. package/dist/cjs/state/actions.js.map +1 -0
  56. package/dist/cjs/state/api-client/client-store.js +81 -0
  57. package/dist/cjs/state/api-client/client-store.js.map +1 -0
  58. package/dist/cjs/state/api-client/fetch-api-resource.js +125 -0
  59. package/dist/cjs/state/api-client/fetch-api-resource.js.map +1 -0
  60. package/dist/cjs/state/api-client/state.js +89 -0
  61. package/dist/cjs/state/api-client/state.js.map +1 -0
  62. package/dist/cjs/state/api-client/store.js +36 -0
  63. package/dist/cjs/state/api-client/store.js.map +1 -0
  64. package/dist/cjs/state/builder-api/api.js +17 -0
  65. package/dist/cjs/state/builder-api/api.js.map +1 -0
  66. package/dist/cjs/state/builder-api/navigation-listener.js +110 -0
  67. package/dist/cjs/state/builder-api/navigation-listener.js.map +1 -0
  68. package/dist/cjs/state/mixins/breakpoint-watch.js +72 -0
  69. package/dist/cjs/state/mixins/breakpoint-watch.js.map +1 -0
  70. package/dist/cjs/state/react-builder-preview.js +97 -73
  71. package/dist/cjs/state/react-builder-preview.js.map +1 -1
  72. package/dist/cjs/state/react-page.js +57 -15
  73. package/dist/cjs/state/react-page.js.map +1 -1
  74. package/dist/cjs/utils/ref-counted-map.js +120 -0
  75. package/dist/cjs/utils/ref-counted-map.js.map +1 -0
  76. package/dist/esm/api/api-resources-client.js +127 -0
  77. package/dist/esm/api/api-resources-client.js.map +1 -0
  78. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  79. package/dist/esm/api-handler/handlers/webhook/diff-projection.js +38 -0
  80. package/dist/esm/api-handler/handlers/webhook/diff-projection.js.map +1 -0
  81. package/dist/esm/box-model.js +7 -0
  82. package/dist/esm/box-model.js.map +1 -0
  83. package/dist/esm/builder/serialization.js +59 -0
  84. package/dist/esm/builder/serialization.js.map +1 -0
  85. package/dist/esm/client/index.js +3 -3
  86. package/dist/esm/components/builtin/index.js +34 -0
  87. package/dist/esm/components/builtin/index.js.map +1 -0
  88. package/dist/esm/components/index.js +3 -0
  89. package/dist/esm/components/index.js.map +1 -0
  90. package/dist/esm/controls/rich-text-v2/translation.js +152 -0
  91. package/dist/esm/controls/rich-text-v2/translation.js.map +1 -0
  92. package/dist/esm/controls/serialization/base/index.js +78 -0
  93. package/dist/esm/controls/serialization/base/index.js.map +1 -0
  94. package/dist/esm/controls/serialization/base/visitor.js +39 -0
  95. package/dist/esm/controls/serialization/base/visitor.js.map +1 -0
  96. package/dist/esm/controls/serialization/index.js +30 -0
  97. package/dist/esm/controls/serialization/index.js.map +1 -0
  98. package/dist/esm/controls/serialization/message-port/function-serialization.js +52 -0
  99. package/dist/esm/controls/serialization/message-port/function-serialization.js.map +1 -0
  100. package/dist/esm/controls/serialization/message-port/index.js +3 -0
  101. package/dist/esm/controls/serialization/message-port/index.js.map +1 -0
  102. package/dist/esm/controls/serialization/message-port/visitor.js +24 -0
  103. package/dist/esm/controls/serialization/message-port/visitor.js.map +1 -0
  104. package/dist/esm/core/index.js +35 -0
  105. package/dist/esm/core/index.js.map +1 -0
  106. package/dist/esm/next/api-handler/config/pages-router.js +1 -1
  107. package/dist/esm/next/api-handler/config/pages-router.js.map +1 -1
  108. package/dist/esm/next/fetch.js +6 -0
  109. package/dist/esm/next/fetch.js.map +1 -0
  110. package/dist/esm/prop-controllers/index.js +11 -0
  111. package/dist/esm/prop-controllers/index.js.map +1 -0
  112. package/dist/esm/prop-controllers/serialization.js +338 -0
  113. package/dist/esm/prop-controllers/serialization.js.map +1 -0
  114. package/dist/esm/react.js +11 -0
  115. package/dist/esm/react.js.map +1 -0
  116. package/dist/esm/runtimes/react/components/LiveProvider.js.map +1 -1
  117. package/dist/esm/runtimes/react/components/MakeswiftFonts.js +9 -0
  118. package/dist/esm/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  119. package/dist/esm/runtimes/react/components/PreviewProvider.js +3 -9
  120. package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -1
  121. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js +10 -5
  122. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js.map +1 -1
  123. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js +15 -0
  124. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  125. package/dist/esm/runtimes/react/lib/resolved-style-to-css.js +38 -0
  126. package/dist/esm/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
  127. package/dist/esm/runtimes/react/resource-resolver.js +28 -0
  128. package/dist/esm/runtimes/react/resource-resolver.js.map +1 -0
  129. package/dist/esm/state/actions.js +349 -0
  130. package/dist/esm/state/actions.js.map +1 -0
  131. package/dist/esm/state/api-client/client-store.js +49 -0
  132. package/dist/esm/state/api-client/client-store.js.map +1 -0
  133. package/dist/esm/state/api-client/fetch-api-resource.js +93 -0
  134. package/dist/esm/state/api-client/fetch-api-resource.js.map +1 -0
  135. package/dist/esm/state/api-client/state.js +52 -0
  136. package/dist/esm/state/api-client/state.js.map +1 -0
  137. package/dist/esm/state/api-client/store.js +12 -0
  138. package/dist/esm/state/api-client/store.js.map +1 -0
  139. package/dist/esm/state/builder-api/api.js +1 -0
  140. package/dist/esm/state/builder-api/api.js.map +1 -0
  141. package/dist/esm/state/builder-api/navigation-listener.js +86 -0
  142. package/dist/esm/state/builder-api/navigation-listener.js.map +1 -0
  143. package/dist/esm/state/mixins/breakpoint-watch.js +48 -0
  144. package/dist/esm/state/mixins/breakpoint-watch.js.map +1 -0
  145. package/dist/esm/state/react-builder-preview.js +115 -72
  146. package/dist/esm/state/react-builder-preview.js.map +1 -1
  147. package/dist/esm/state/react-page.js +62 -11
  148. package/dist/esm/state/react-page.js.map +1 -1
  149. package/dist/esm/utils/ref-counted-map.js +96 -0
  150. package/dist/esm/utils/ref-counted-map.js.map +1 -0
  151. package/dist/types/api/api-resources-client.d.ts +57 -0
  152. package/dist/types/api/api-resources-client.d.ts.map +1 -0
  153. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +201 -0
  154. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts.map +1 -0
  155. package/dist/types/box-model.d.ts +3 -0
  156. package/dist/types/box-model.d.ts.map +1 -0
  157. package/dist/types/builder/serialization.d.ts +23 -0
  158. package/dist/types/builder/serialization.d.ts.map +1 -0
  159. package/dist/types/builder/serialization.test.d.ts +2 -0
  160. package/dist/types/builder/serialization.test.d.ts.map +1 -0
  161. package/dist/types/client/tests/client.get-component-snapshots.test.d.ts +2 -0
  162. package/dist/types/client/tests/client.get-component-snapshots.test.d.ts.map +1 -0
  163. package/dist/types/client/tests/client.introspect-many.test.d.ts +2 -0
  164. package/dist/types/client/tests/client.introspect-many.test.d.ts.map +1 -0
  165. package/dist/types/components/builtin/index.d.ts +17 -0
  166. package/dist/types/components/builtin/index.d.ts.map +1 -0
  167. package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts +3 -0
  168. package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts.map +1 -0
  169. package/dist/types/components/index.d.ts +3 -0
  170. package/dist/types/components/index.d.ts.map +1 -0
  171. package/dist/types/controls/rich-text-v2/translation.d.ts +6 -0
  172. package/dist/types/controls/rich-text-v2/translation.d.ts.map +1 -0
  173. package/dist/types/controls/serialization/base/index.d.ts +10 -0
  174. package/dist/types/controls/serialization/base/index.d.ts.map +1 -0
  175. package/dist/types/controls/serialization/base/visitor.d.ts +7 -0
  176. package/dist/types/controls/serialization/base/visitor.d.ts.map +1 -0
  177. package/dist/types/controls/serialization/index.d.ts +10 -0
  178. package/dist/types/controls/serialization/index.d.ts.map +1 -0
  179. package/dist/types/controls/serialization/message-port/function-serialization.d.ts +16 -0
  180. package/dist/types/controls/serialization/message-port/function-serialization.d.ts.map +1 -0
  181. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts +2 -0
  182. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts.map +1 -0
  183. package/dist/types/controls/serialization/message-port/index.d.ts +3 -0
  184. package/dist/types/controls/serialization/message-port/index.d.ts.map +1 -0
  185. package/dist/types/controls/serialization/message-port/visitor.d.ts +7 -0
  186. package/dist/types/controls/serialization/message-port/visitor.d.ts.map +1 -0
  187. package/dist/types/core/index.d.ts +2 -0
  188. package/dist/types/core/index.d.ts.map +1 -0
  189. package/dist/types/next/api-handler/config/pages-router.test.d.ts +2 -0
  190. package/dist/types/next/api-handler/config/pages-router.test.d.ts.map +1 -0
  191. package/dist/types/next/components/tests/controls/code-control.test.d.ts +2 -0
  192. package/dist/types/next/components/tests/controls/code-control.test.d.ts.map +1 -0
  193. package/dist/types/next/components/tests/makeswift-component-rendering.test.d.ts +3 -0
  194. package/dist/types/next/components/tests/makeswift-component-rendering.test.d.ts.map +1 -0
  195. package/dist/types/next/fetch.d.ts +3 -0
  196. package/dist/types/next/fetch.d.ts.map +1 -0
  197. package/dist/types/prop-controllers/index.d.ts +8 -0
  198. package/dist/types/prop-controllers/index.d.ts.map +1 -0
  199. package/dist/types/prop-controllers/serialization.d.ts +228 -0
  200. package/dist/types/prop-controllers/serialization.d.ts.map +1 -0
  201. package/dist/types/react.d.ts +4 -0
  202. package/dist/types/react.d.ts.map +1 -0
  203. package/dist/types/runtimes/react/components/LiveProvider.d.ts +2 -2
  204. package/dist/types/runtimes/react/components/LiveProvider.d.ts.map +1 -1
  205. package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts +7 -0
  206. package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts.map +1 -0
  207. package/dist/types/runtimes/react/components/PreviewProvider.d.ts +2 -4
  208. package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -1
  209. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts.map +1 -1
  210. package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts +3 -0
  211. package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts.map +1 -0
  212. package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts +4 -0
  213. package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts.map +1 -0
  214. package/dist/types/runtimes/react/resource-resolver.d.ts +10 -0
  215. package/dist/types/runtimes/react/resource-resolver.d.ts.map +1 -0
  216. package/dist/types/state/actions.d.ts +461 -0
  217. package/dist/types/state/actions.d.ts.map +1 -0
  218. package/dist/types/state/api-client/client-store.d.ts +6 -0
  219. package/dist/types/state/api-client/client-store.d.ts.map +1 -0
  220. package/dist/types/state/api-client/fetch-api-resource.d.ts +11 -0
  221. package/dist/types/state/api-client/fetch-api-resource.d.ts.map +1 -0
  222. package/dist/types/state/api-client/state.d.ts +30 -0
  223. package/dist/types/state/api-client/state.d.ts.map +1 -0
  224. package/dist/types/state/api-client/store.d.ts +18 -0
  225. package/dist/types/state/api-client/store.d.ts.map +1 -0
  226. package/dist/types/state/builder-api/api.d.ts +9 -0
  227. package/dist/types/state/builder-api/api.d.ts.map +1 -0
  228. package/dist/types/state/builder-api/navigation-listener.d.ts +3 -0
  229. package/dist/types/state/builder-api/navigation-listener.d.ts.map +1 -0
  230. package/dist/types/state/mixins/breakpoint-watch.d.ts +11 -0
  231. package/dist/types/state/mixins/breakpoint-watch.d.ts.map +1 -0
  232. package/dist/types/state/react-builder-preview.d.ts +7 -5
  233. package/dist/types/state/react-builder-preview.d.ts.map +1 -1
  234. package/dist/types/state/react-page.d.ts +3 -3
  235. package/dist/types/state/react-page.d.ts.map +1 -1
  236. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts +2 -0
  237. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts.map +1 -0
  238. package/dist/types/utils/ref-counted-map.d.ts +32 -0
  239. package/dist/types/utils/ref-counted-map.d.ts.map +1 -0
  240. package/package.json +3 -3
@@ -0,0 +1,52 @@
1
+ import { combineReducers } from "@reduxjs/toolkit";
2
+ import * as SiteVersionState from "../modules/site-version";
3
+ import * as LocaleState from "../modules/locale";
4
+ import * as APIResources from "../modules/api-resources";
5
+ import * as LocalizedResourcesMap from "../modules/localized-resources-map";
6
+ import { APIResourceType } from "../../api";
7
+ const reducer = combineReducers({
8
+ siteVersion: SiteVersionState.reducer,
9
+ locale: LocaleState.reducer,
10
+ apiResources: APIResources.reducer,
11
+ localizedResourcesMap: LocalizedResourcesMap.reducer
12
+ });
13
+ function getLocalizedResourceId(state, locale, resourceId) {
14
+ return LocalizedResourcesMap.getLocalizedResourceId(
15
+ state.localizedResourcesMap,
16
+ locale,
17
+ resourceId
18
+ );
19
+ }
20
+ function getHasAPIResource(state, resourceType, resourceId, locale) {
21
+ switch (resourceType) {
22
+ case APIResourceType.LocalizedGlobalElement:
23
+ if (locale == null) {
24
+ console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`);
25
+ return false;
26
+ }
27
+ const localizedId = getLocalizedResourceId(state, locale, resourceId);
28
+ return localizedId != null && APIResources.getHasAPIResource(state.apiResources, resourceType, localizedId, locale);
29
+ default:
30
+ return APIResources.getHasAPIResource(state.apiResources, resourceType, resourceId, locale);
31
+ }
32
+ }
33
+ function getAPIResource(state, resourceType, resourceId, locale) {
34
+ switch (resourceType) {
35
+ case APIResourceType.LocalizedGlobalElement:
36
+ if (locale == null) {
37
+ console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`);
38
+ return null;
39
+ }
40
+ const localizedId = getLocalizedResourceId(state, locale, resourceId);
41
+ return localizedId != null ? APIResources.getAPIResource(state.apiResources, resourceType, localizedId, locale) : null;
42
+ default:
43
+ return APIResources.getAPIResource(state.apiResources, resourceType, resourceId, locale);
44
+ }
45
+ }
46
+ export {
47
+ getAPIResource,
48
+ getHasAPIResource,
49
+ getLocalizedResourceId,
50
+ reducer
51
+ };
52
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/state/api-client/state.ts"],"sourcesContent":["import { combineReducers, type ThunkDispatch } from '@reduxjs/toolkit'\n\nimport * as SiteVersionState from '../modules/site-version'\nimport * as LocaleState from '../modules/locale'\nimport * as APIResources from '../modules/api-resources'\nimport * as LocalizedResourcesMap from '../modules/localized-resources-map'\n\nimport { type Action } from '../actions'\n\nimport { APIResourceType, type APIResource, type APIResourceLocale } from '../../api'\n\nexport const reducer = combineReducers({\n siteVersion: SiteVersionState.reducer,\n locale: LocaleState.reducer,\n apiResources: APIResources.reducer,\n localizedResourcesMap: LocalizedResourcesMap.reducer,\n})\n\nexport type State = ReturnType<typeof reducer>\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nexport type SerializedState = {\n apiResources: APIResources.SerializedState\n localizedResourcesMap: LocalizedResourcesMap.SerializedState\n}\n\nexport function getLocalizedResourceId(\n state: State,\n locale: string,\n resourceId: string,\n): string | undefined | null {\n return LocalizedResourcesMap.getLocalizedResourceId(\n state.localizedResourcesMap,\n locale,\n resourceId,\n )\n}\n\nexport function getHasAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: APIResourceType,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): boolean {\n switch (resourceType) {\n case APIResourceType.LocalizedGlobalElement:\n if (locale == null) {\n console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`)\n return false\n }\n\n const localizedId = getLocalizedResourceId(state, locale, resourceId)\n return (\n localizedId != null &&\n APIResources.getHasAPIResource(state.apiResources, resourceType, localizedId, locale)\n )\n\n default:\n return APIResources.getHasAPIResource(state.apiResources, resourceType, resourceId, locale)\n }\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): Extract<APIResource, { __typename: T }> | null {\n switch (resourceType) {\n case APIResourceType.LocalizedGlobalElement:\n if (locale == null) {\n console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`)\n return null\n }\n\n const localizedId = getLocalizedResourceId(state, locale, resourceId)\n return localizedId != null\n ? APIResources.getAPIResource(state.apiResources, resourceType, localizedId, locale)\n : null\n\n default:\n return APIResources.getAPIResource(state.apiResources, resourceType, resourceId, locale)\n }\n}\n"],"mappings":"AAAA,SAAS,uBAA2C;AAEpD,YAAY,sBAAsB;AAClC,YAAY,iBAAiB;AAC7B,YAAY,kBAAkB;AAC9B,YAAY,2BAA2B;AAIvC,SAAS,uBAAiE;AAEnE,MAAM,UAAU,gBAAgB;AAAA,EACrC,aAAa,iBAAiB;AAAA,EAC9B,QAAQ,YAAY;AAAA,EACpB,cAAc,aAAa;AAAA,EAC3B,uBAAuB,sBAAsB;AAC/C,CAAC;AAUM,SAAS,uBACd,OACA,QACA,YAC2B;AAC3B,SAAO,sBAAsB;AAAA,IAC3B,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,kBACd,OACA,cACA,YACA,QACS;AACT,UAAQ,cAAc;AAAA,IACpB,KAAK,gBAAgB;AACnB,UAAI,UAAU,MAAM;AAClB,gBAAQ,MAAM,qBAAqB,YAAY,IAAI,UAAU,mBAAmB;AAChF,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,uBAAuB,OAAO,QAAQ,UAAU;AACpE,aACE,eAAe,QACf,aAAa,kBAAkB,MAAM,cAAc,cAAc,aAAa,MAAM;AAAA,IAGxF;AACE,aAAO,aAAa,kBAAkB,MAAM,cAAc,cAAc,YAAY,MAAM;AAAA,EAC9F;AACF;AAEO,SAAS,eACd,OACA,cACA,YACA,QACgD;AAChD,UAAQ,cAAc;AAAA,IACpB,KAAK,gBAAgB;AACnB,UAAI,UAAU,MAAM;AAClB,gBAAQ,MAAM,qBAAqB,YAAY,IAAI,UAAU,mBAAmB;AAChF,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,uBAAuB,OAAO,QAAQ,UAAU;AACpE,aAAO,eAAe,OAClB,aAAa,eAAe,MAAM,cAAc,cAAc,aAAa,MAAM,IACjF;AAAA,IAEN;AACE,aAAO,aAAa,eAAe,MAAM,cAAc,cAAc,YAAY,MAAM;AAAA,EAC3F;AACF;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { configureStore as configureReduxStore } from "@reduxjs/toolkit";
2
+ import { reducer } from "./state";
3
+ function configureStore({ preloadedState }) {
4
+ return configureReduxStore({
5
+ reducer,
6
+ preloadedState
7
+ });
8
+ }
9
+ export {
10
+ configureStore
11
+ };
12
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/state/api-client/store.ts"],"sourcesContent":["import { configureStore as configureReduxStore } from '@reduxjs/toolkit'\n\nimport { type State, reducer } from './state'\n\nexport function configureStore({ preloadedState }: { preloadedState: Partial<State> }) {\n return configureReduxStore({\n reducer,\n preloadedState,\n })\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":"AAAA,SAAS,kBAAkB,2BAA2B;AAEtD,SAAqB,eAAe;AAE7B,SAAS,eAAe,EAAE,eAAe,GAAuC;AACrF,SAAO,oBAAoB;AAAA,IACzB;AAAA,IACA;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,86 @@
1
+ const CLICK_NAVIGATION_THRESHOLD_MS = 100;
2
+ const CLICK_NAVIGATION_CHECK_INTERVAL_MS = 200;
3
+ const CLICK_NAVIGATION_MAX_CHECKS = 20;
4
+ function setupNavigationListener(callback) {
5
+ let previousLocation = null;
6
+ const handleNavigate = (event) => {
7
+ if (!event.navigationCompleted && event.url === previousLocation)
8
+ return;
9
+ callback(event);
10
+ previousLocation = event.url;
11
+ };
12
+ handleNavigate({ url: windowLocation(), navigationCompleted: "initial-page-load" });
13
+ if (typeof window === "undefined") {
14
+ return () => {
15
+ };
16
+ }
17
+ const unsubscribes = [];
18
+ if ("navigation" in window && window.navigation) {
19
+ const navigation = window.navigation;
20
+ const navigateHandler = ({ destination }) => handleNavigate({ url: destination.url });
21
+ const navigateSuccessHandler = () => {
22
+ handleNavigate({
23
+ url: navigation.currentEntry.url,
24
+ navigationCompleted: "client-side-navigation"
25
+ });
26
+ };
27
+ navigation.addEventListener("navigate", navigateHandler);
28
+ navigation.addEventListener("navigatesuccess", navigateSuccessHandler);
29
+ unsubscribes.push(() => navigation.removeEventListener("navigate", navigateHandler));
30
+ unsubscribes.push(
31
+ () => navigation.removeEventListener("navigatesuccess", navigateSuccessHandler)
32
+ );
33
+ return () => {
34
+ unsubscribes.forEach((u) => u());
35
+ };
36
+ }
37
+ let lastClickEvent = null;
38
+ const clickHandler = (e) => {
39
+ const a = e.composedPath?.()?.find((n) => n instanceof HTMLAnchorElement) ?? (e.target instanceof Element && e.target.closest?.("a"));
40
+ if (!a)
41
+ return;
42
+ lastClickEvent = { href: a.href, timestamp: Date.now() };
43
+ const pageUrlBeforeClick = windowLocation();
44
+ let navigationCheckCounter = 0;
45
+ const checkIfNavigationOccurred = () => {
46
+ const url = windowLocation();
47
+ if (url !== pageUrlBeforeClick) {
48
+ handleNavigate({ url, polyfilled: true });
49
+ return;
50
+ }
51
+ if (++navigationCheckCounter < CLICK_NAVIGATION_MAX_CHECKS) {
52
+ window.setTimeout(checkIfNavigationOccurred, CLICK_NAVIGATION_CHECK_INTERVAL_MS);
53
+ }
54
+ };
55
+ window.setTimeout(checkIfNavigationOccurred, CLICK_NAVIGATION_CHECK_INTERVAL_MS);
56
+ };
57
+ window.document.addEventListener(
58
+ "click",
59
+ clickHandler,
60
+ { capture: true }
61
+ // run before bubbling to fortify against `stopPropagation()` calls
62
+ );
63
+ unsubscribes.push(
64
+ () => window.document.removeEventListener("click", clickHandler, { capture: true })
65
+ );
66
+ const unloadHandler = () => {
67
+ if (!lastClickEvent)
68
+ return;
69
+ const msSinceLastClick = Date.now() - lastClickEvent.timestamp;
70
+ handleNavigate({
71
+ url: msSinceLastClick < CLICK_NAVIGATION_THRESHOLD_MS ? lastClickEvent.href ?? null : null,
72
+ polyfilled: true
73
+ });
74
+ lastClickEvent = null;
75
+ };
76
+ window.addEventListener("beforeunload", unloadHandler);
77
+ unsubscribes.push(() => window.removeEventListener("beforeunload", unloadHandler));
78
+ return () => {
79
+ unsubscribes.forEach((u) => u());
80
+ };
81
+ }
82
+ const windowLocation = () => typeof window !== "undefined" ? window.location.href : null;
83
+ export {
84
+ setupNavigationListener
85
+ };
86
+ //# sourceMappingURL=navigation-listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/state/builder-api/navigation-listener.ts"],"sourcesContent":["import { type HostNavigationEvent } from './api'\n\ntype ClickEvent = {\n href: string\n timestamp: number\n}\n\nconst CLICK_NAVIGATION_THRESHOLD_MS = 100\nconst CLICK_NAVIGATION_CHECK_INTERVAL_MS = 200\nconst CLICK_NAVIGATION_MAX_CHECKS = 20\n\nexport function setupNavigationListener(\n callback: (args: HostNavigationEvent) => void,\n): VoidFunction {\n let previousLocation: string | null = null\n\n const handleNavigate = (event: HostNavigationEvent) => {\n if (!event.navigationCompleted && event.url === previousLocation) return\n\n callback(event)\n previousLocation = event.url\n }\n\n // trigger navigation callback on initial page load\n handleNavigate({ url: windowLocation(), navigationCompleted: 'initial-page-load' })\n\n if (typeof window === 'undefined') {\n return () => {}\n }\n\n const unsubscribes: (() => void)[] = []\n\n // check for availability of the Navigation API (baseline feature since January 2026),\n // see https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API\n if ('navigation' in window && window.navigation) {\n const navigation = window.navigation\n\n const navigateHandler = ({ destination }: NavigateEvent) =>\n handleNavigate({ url: destination.url })\n\n const navigateSuccessHandler = () => {\n handleNavigate({\n url: navigation.currentEntry.url,\n navigationCompleted: 'client-side-navigation',\n })\n }\n\n // note that in order to capture destination URLs that might not be Makeswift-enabled,\n // we send a `SiteNavigationEvent` at the start of navigation, but do not track whether\n // the navigation was successful or not (possible future improvement)\n navigation.addEventListener('navigate', navigateHandler)\n navigation.addEventListener('navigatesuccess', navigateSuccessHandler)\n unsubscribes.push(() => navigation.removeEventListener('navigate', navigateHandler))\n unsubscribes.push(() =>\n navigation.removeEventListener('navigatesuccess', navigateSuccessHandler),\n )\n\n return () => {\n unsubscribes.forEach(u => u())\n }\n }\n\n // for browsers lacking Navigation API support, we manually track:\n // - link clicks to capture destination URLs\n // - page unload events to detect cross-page navigation\n //\n // this works well enough to keep this polyfill in place for now, but not nearly as\n // reliably as the Navigation API\n let lastClickEvent: ClickEvent | null = null\n\n const clickHandler = (e: MouseEvent) => {\n const a =\n e.composedPath?.()?.find(n => n instanceof HTMLAnchorElement) ??\n (e.target instanceof Element && e.target.closest?.('a'))\n\n if (!a) return\n\n lastClickEvent = { href: a.href, timestamp: Date.now() }\n\n const pageUrlBeforeClick = windowLocation()\n let navigationCheckCounter = 0\n\n // handle navigation between pages in the host; note that we intentionally are\n // not cancelling the timer on cleanup to ensure we report the navigation\n const checkIfNavigationOccurred = () => {\n const url = windowLocation()\n\n if (url !== pageUrlBeforeClick) {\n // the host navigated to a different page, report the new URL to the builder\n handleNavigate({ url, polyfilled: true })\n return\n }\n\n // we're still on the same page, recheck until the max number of checks is reached\n if (++navigationCheckCounter < CLICK_NAVIGATION_MAX_CHECKS) {\n window.setTimeout(checkIfNavigationOccurred, CLICK_NAVIGATION_CHECK_INTERVAL_MS)\n }\n }\n\n window.setTimeout(checkIfNavigationOccurred, CLICK_NAVIGATION_CHECK_INTERVAL_MS)\n }\n\n window.document.addEventListener(\n 'click',\n clickHandler,\n { capture: true }, // run before bubbling to fortify against `stopPropagation()` calls\n )\n\n unsubscribes.push(() =>\n window.document.removeEventListener('click', clickHandler, { capture: true }),\n )\n\n // handle external navigation\n const unloadHandler = () => {\n if (!lastClickEvent) return\n\n const msSinceLastClick = Date.now() - lastClickEvent.timestamp\n handleNavigate({\n url: msSinceLastClick < CLICK_NAVIGATION_THRESHOLD_MS ? (lastClickEvent.href ?? null) : null,\n polyfilled: true,\n })\n\n lastClickEvent = null\n }\n\n window.addEventListener('beforeunload', unloadHandler)\n unsubscribes.push(() => window.removeEventListener('beforeunload', unloadHandler))\n\n return () => {\n unsubscribes.forEach(u => u())\n }\n}\n\nconst windowLocation = (): string | null =>\n typeof window !== 'undefined' ? window.location.href : null\n"],"mappings":"AAOA,MAAM,gCAAgC;AACtC,MAAM,qCAAqC;AAC3C,MAAM,8BAA8B;AAE7B,SAAS,wBACd,UACc;AACd,MAAI,mBAAkC;AAEtC,QAAM,iBAAiB,CAAC,UAA+B;AACrD,QAAI,CAAC,MAAM,uBAAuB,MAAM,QAAQ;AAAkB;AAElE,aAAS,KAAK;AACd,uBAAmB,MAAM;AAAA,EAC3B;AAGA,iBAAe,EAAE,KAAK,eAAe,GAAG,qBAAqB,oBAAoB,CAAC;AAElF,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,MAAM;AAAA,IAAC;AAAA,EAChB;AAEA,QAAM,eAA+B,CAAC;AAItC,MAAI,gBAAgB,UAAU,OAAO,YAAY;AAC/C,UAAM,aAAa,OAAO;AAE1B,UAAM,kBAAkB,CAAC,EAAE,YAAY,MACrC,eAAe,EAAE,KAAK,YAAY,IAAI,CAAC;AAEzC,UAAM,yBAAyB,MAAM;AACnC,qBAAe;AAAA,QACb,KAAK,WAAW,aAAa;AAAA,QAC7B,qBAAqB;AAAA,MACvB,CAAC;AAAA,IACH;AAKA,eAAW,iBAAiB,YAAY,eAAe;AACvD,eAAW,iBAAiB,mBAAmB,sBAAsB;AACrE,iBAAa,KAAK,MAAM,WAAW,oBAAoB,YAAY,eAAe,CAAC;AACnF,iBAAa;AAAA,MAAK,MAChB,WAAW,oBAAoB,mBAAmB,sBAAsB;AAAA,IAC1E;AAEA,WAAO,MAAM;AACX,mBAAa,QAAQ,OAAK,EAAE,CAAC;AAAA,IAC/B;AAAA,EACF;AAQA,MAAI,iBAAoC;AAExC,QAAM,eAAe,CAAC,MAAkB;AACtC,UAAM,IACJ,EAAE,eAAe,GAAG,KAAK,OAAK,aAAa,iBAAiB,MAC3D,EAAE,kBAAkB,WAAW,EAAE,OAAO,UAAU,GAAG;AAExD,QAAI,CAAC;AAAG;AAER,qBAAiB,EAAE,MAAM,EAAE,MAAM,WAAW,KAAK,IAAI,EAAE;AAEvD,UAAM,qBAAqB,eAAe;AAC1C,QAAI,yBAAyB;AAI7B,UAAM,4BAA4B,MAAM;AACtC,YAAM,MAAM,eAAe;AAE3B,UAAI,QAAQ,oBAAoB;AAE9B,uBAAe,EAAE,KAAK,YAAY,KAAK,CAAC;AACxC;AAAA,MACF;AAGA,UAAI,EAAE,yBAAyB,6BAA6B;AAC1D,eAAO,WAAW,2BAA2B,kCAAkC;AAAA,MACjF;AAAA,IACF;AAEA,WAAO,WAAW,2BAA2B,kCAAkC;AAAA,EACjF;AAEA,SAAO,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,SAAS,KAAK;AAAA;AAAA,EAClB;AAEA,eAAa;AAAA,IAAK,MAChB,OAAO,SAAS,oBAAoB,SAAS,cAAc,EAAE,SAAS,KAAK,CAAC;AAAA,EAC9E;AAGA,QAAM,gBAAgB,MAAM;AAC1B,QAAI,CAAC;AAAgB;AAErB,UAAM,mBAAmB,KAAK,IAAI,IAAI,eAAe;AACrD,mBAAe;AAAA,MACb,KAAK,mBAAmB,gCAAiC,eAAe,QAAQ,OAAQ;AAAA,MACxF,YAAY;AAAA,IACd,CAAC;AAED,qBAAiB;AAAA,EACnB;AAEA,SAAO,iBAAiB,gBAAgB,aAAa;AACrD,eAAa,KAAK,MAAM,OAAO,oBAAoB,gBAAgB,aAAa,CAAC;AAEjF,SAAO,MAAM;AACX,iBAAa,QAAQ,OAAK,EAAE,CAAC;AAAA,EAC/B;AACF;AAEA,MAAM,iBAAiB,MACrB,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;","names":[]}
@@ -0,0 +1,48 @@
1
+ import { updateClientBreakpoint } from "../actions/internal/read-only-actions";
2
+ import { getDeviceQueries } from "../modules/breakpoints";
3
+ import { getBreakpoints } from "../read-only-state";
4
+ function breakpointWatchMixin({
5
+ dispatch,
6
+ getState,
7
+ subscribe: storeSubscribe
8
+ }) {
9
+ let mediaQueryUnsubscribes = [];
10
+ let storeUnsubscribe = null;
11
+ let watchedBreakpoints = [];
12
+ const startWatch = (breakpoints) => {
13
+ mediaQueryUnsubscribes.forEach((fn) => fn());
14
+ const updateState = () => dispatch(updateClientBreakpoint());
15
+ mediaQueryUnsubscribes = getDeviceQueries(breakpoints).map((q) => {
16
+ const mediaQueryList = window.matchMedia(q.query);
17
+ mediaQueryList.addEventListener("change", updateState);
18
+ return () => mediaQueryList.removeEventListener("change", updateState);
19
+ });
20
+ watchedBreakpoints = breakpoints;
21
+ updateState();
22
+ };
23
+ return {
24
+ startBreakpointWatch: () => {
25
+ if (storeUnsubscribe !== null) {
26
+ console.warn("Unexpected `BreakpointWatch.startBreakpointWatch` call, already watching");
27
+ return;
28
+ }
29
+ startWatch(getBreakpoints(getState()));
30
+ storeUnsubscribe = storeSubscribe(() => {
31
+ const breakpoints = getBreakpoints(getState());
32
+ if (breakpoints !== watchedBreakpoints) {
33
+ startWatch(breakpoints);
34
+ }
35
+ });
36
+ },
37
+ stopBreakpointWatch: () => {
38
+ mediaQueryUnsubscribes.forEach((fn) => fn());
39
+ mediaQueryUnsubscribes = [];
40
+ storeUnsubscribe?.();
41
+ storeUnsubscribe = null;
42
+ }
43
+ };
44
+ }
45
+ export {
46
+ breakpointWatchMixin
47
+ };
48
+ //# sourceMappingURL=breakpoint-watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/state/mixins/breakpoint-watch.ts"],"sourcesContent":["import { updateClientBreakpoint } from '../actions/internal/read-only-actions'\nimport { Breakpoints, getDeviceQueries } from '../modules/breakpoints'\n\nimport { type State, type Dispatch } from '../unified-state'\nimport { getBreakpoints } from '../read-only-state'\n\nexport interface BreakpointWatch {\n startBreakpointWatch(): void\n stopBreakpointWatch(): void\n}\n\nexport function breakpointWatchMixin({\n dispatch,\n getState,\n subscribe: storeSubscribe,\n}: {\n dispatch: Dispatch\n getState: () => State\n subscribe: (listener: VoidFunction) => VoidFunction\n}): BreakpointWatch {\n let mediaQueryUnsubscribes: VoidFunction[] = []\n let storeUnsubscribe: VoidFunction | null = null\n let watchedBreakpoints: Breakpoints = []\n\n // client-side breakpoint watch\n const startWatch = (breakpoints: Breakpoints) => {\n mediaQueryUnsubscribes.forEach(fn => fn())\n\n const updateState = () => dispatch(updateClientBreakpoint())\n\n mediaQueryUnsubscribes = getDeviceQueries(breakpoints).map(q => {\n const mediaQueryList = window.matchMedia(q.query)\n mediaQueryList.addEventListener('change', updateState)\n return () => mediaQueryList.removeEventListener('change', updateState)\n })\n\n watchedBreakpoints = breakpoints\n\n // reconcile the store with the current client breakpoint after subscribing;\n // this heals any stale breakpoint state from changes that happened\n // after the store was created or updated but before the listeners were attached\n updateState()\n }\n\n return {\n startBreakpointWatch: () => {\n if (storeUnsubscribe !== null) {\n console.warn('Unexpected `BreakpointWatch.startBreakpointWatch` call, already watching')\n return\n }\n\n startWatch(getBreakpoints(getState()))\n\n storeUnsubscribe = storeSubscribe(() => {\n const breakpoints = getBreakpoints(getState())\n if (breakpoints !== watchedBreakpoints) {\n startWatch(breakpoints)\n }\n })\n },\n\n stopBreakpointWatch: () => {\n mediaQueryUnsubscribes.forEach(fn => fn())\n mediaQueryUnsubscribes = []\n\n storeUnsubscribe?.()\n storeUnsubscribe = null\n },\n }\n}\n"],"mappings":"AAAA,SAAS,8BAA8B;AACvC,SAAsB,wBAAwB;AAG9C,SAAS,sBAAsB;AAOxB,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAIoB;AAClB,MAAI,yBAAyC,CAAC;AAC9C,MAAI,mBAAwC;AAC5C,MAAI,qBAAkC,CAAC;AAGvC,QAAM,aAAa,CAAC,gBAA6B;AAC/C,2BAAuB,QAAQ,QAAM,GAAG,CAAC;AAEzC,UAAM,cAAc,MAAM,SAAS,uBAAuB,CAAC;AAE3D,6BAAyB,iBAAiB,WAAW,EAAE,IAAI,OAAK;AAC9D,YAAM,iBAAiB,OAAO,WAAW,EAAE,KAAK;AAChD,qBAAe,iBAAiB,UAAU,WAAW;AACrD,aAAO,MAAM,eAAe,oBAAoB,UAAU,WAAW;AAAA,IACvE,CAAC;AAED,yBAAqB;AAKrB,gBAAY;AAAA,EACd;AAEA,SAAO;AAAA,IACL,sBAAsB,MAAM;AAC1B,UAAI,qBAAqB,MAAM;AAC7B,gBAAQ,KAAK,0EAA0E;AACvF;AAAA,MACF;AAEA,iBAAW,eAAe,SAAS,CAAC,CAAC;AAErC,yBAAmB,eAAe,MAAM;AACtC,cAAM,cAAc,eAAe,SAAS,CAAC;AAC7C,YAAI,gBAAgB,oBAAoB;AACtC,qBAAW,WAAW;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,qBAAqB,MAAM;AACzB,6BAAuB,QAAQ,QAAM,GAAG,CAAC;AACzC,+BAAyB,CAAC;AAE1B,yBAAmB;AACnB,yBAAmB;AAAA,IACrB;AAAA,EACF;AACF;","names":[]}
@@ -18,15 +18,29 @@ import * as ElementImperativeHandles from "./modules/element-imperative-handles"
18
18
  import * as Breakpoints from "./modules/breakpoints";
19
19
  import { withSetupTeardown } from "./mixins/setup-teardown";
20
20
  import * as ReactPage from "./react-page";
21
- import * as Shared from "./shared-api";
22
- import { BuilderActionTypes } from "./builder-api/actions";
23
- import * as Builder from "./builder-api/actions";
24
- import { InternalActionTypes } from "./actions/internal";
25
- import * as Internal from "./actions/internal";
21
+ import {
22
+ ActionTypes,
23
+ changeDocumentElementSize,
24
+ changeElementBoxModels,
25
+ elementFromPointChange,
26
+ handleWheel,
27
+ handlePointerMove,
28
+ messageBuilderPropController,
29
+ registerBuilderComponent,
30
+ registerMeasurable,
31
+ registerPropControllers,
32
+ registerPropControllersHandle,
33
+ setBreakpoints,
34
+ setIsInBuilder,
35
+ unregisterBuilderComponent,
36
+ unregisterBuilderDocument,
37
+ unregisterMeasurable,
38
+ unregisterPropControllers,
39
+ registerBuilderDocument
40
+ } from "./actions";
26
41
  import { actionMiddleware, middlewareOptions, devToolsConfig } from "./toolkit";
27
42
  import { createPropController } from "../prop-controllers/instances";
28
43
  import { serializeControls } from "../builder";
29
- import { HostActionTypes } from "./host-api";
30
44
  import { createBox, getBox, parse } from "./modules/box-models";
31
45
  const reducer = combineReducers({
32
46
  documents: Documents.reducer,
@@ -140,7 +154,7 @@ function measureElements() {
140
154
  }
141
155
  });
142
156
  if (changedBoxModels.size > 0)
143
- dispatch(Builder.changeElementBoxModels(changedBoxModels));
157
+ dispatch(changeElementBoxModels(changedBoxModels));
144
158
  };
145
159
  }
146
160
  function startMeasuringElements() {
@@ -177,7 +191,7 @@ function lockDocumentScroll() {
177
191
  window.document.documentElement.removeEventListener("wheel", handleWheelEvent);
178
192
  };
179
193
  function handleWheelEvent({ deltaX, deltaY }) {
180
- dispatch(Builder.handleWheel({ deltaX, deltaY }));
194
+ dispatch(handleWheel({ deltaX, deltaY }));
181
195
  }
182
196
  };
183
197
  }
@@ -188,7 +202,7 @@ function startHandlingPointerMoveEvent() {
188
202
  window.document.documentElement.removeEventListener("pointermove", handlePointerMoveEvent);
189
203
  };
190
204
  function handlePointerMoveEvent({ clientX, clientY }) {
191
- dispatch(Builder.handlePointerMove({ clientX, clientY }));
205
+ dispatch(handlePointerMove({ clientX, clientY }));
192
206
  }
193
207
  };
194
208
  }
@@ -229,7 +243,7 @@ function startMeasuringDocumentElement() {
229
243
  const nextSize = getElementSize(window.document.documentElement);
230
244
  if (!deepEqual(lastSize, nextSize)) {
231
245
  lastSize = nextSize;
232
- dispatch(Builder.changeDocumentElementSize(nextSize));
246
+ dispatch(changeDocumentElementSize(nextSize));
233
247
  }
234
248
  animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest);
235
249
  }
@@ -276,7 +290,7 @@ function startPollingElementFromPoint() {
276
290
  if (elementFromPoint !== lastElementFromPoint) {
277
291
  lastElementFromPoint = elementFromPoint;
278
292
  const keys = dispatch(elementKeysFromElementFromPoint(elementFromPoint));
279
- dispatch(Builder.elementFromPointChange(keys));
293
+ dispatch(elementFromPointChange(keys));
280
294
  }
281
295
  animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest);
282
296
  }
@@ -290,14 +304,12 @@ function registerBuilderComponents() {
290
304
  const descriptors = getComponentPropControllerDescriptors(state, type);
291
305
  if (descriptors != null) {
292
306
  const [serializedControls, transferables] = serializeControls(descriptors);
293
- dispatch(
294
- Builder.registerBuilderComponent({ type, meta, serializedControls }, transferables)
295
- );
307
+ dispatch(registerBuilderComponent({ type, meta, serializedControls }, transferables));
296
308
  }
297
309
  });
298
310
  return () => {
299
311
  componentsMeta.forEach((_, type) => {
300
- dispatch(Builder.unregisterBuilderComponent({ type }));
312
+ dispatch(unregisterBuilderComponent({ type }));
301
313
  });
302
314
  };
303
315
  };
@@ -306,16 +318,16 @@ function registerBuilderDocuments() {
306
318
  return (dispatch, getState) => {
307
319
  const documents = Documents.getDocuments(getDocumentsStateSlice(getState()));
308
320
  documents.forEach((document2) => {
309
- dispatch(Builder.registerBuilderDocument(document2));
321
+ dispatch(registerBuilderDocument(document2));
310
322
  });
311
323
  return () => {
312
324
  documents.forEach((_document, documentKey) => {
313
- dispatch(Builder.unregisterBuilderDocument(documentKey));
325
+ dispatch(unregisterBuilderDocument(documentKey));
314
326
  });
315
327
  };
316
328
  };
317
329
  }
318
- function initialize(builderProxy) {
330
+ function initialize(channel) {
319
331
  return (dispatch, getState) => {
320
332
  const unregisterBuilderDocuments = dispatch(registerBuilderDocuments());
321
333
  const stopMeasuringElements = dispatch(startMeasuringElements());
@@ -326,9 +338,9 @@ function initialize(builderProxy) {
326
338
  const stopPollingElementFromPoint = dispatch(startPollingElementFromPoint());
327
339
  const unregisterBuilderComponents = dispatch(registerBuilderComponents());
328
340
  const breakpoints = ReactPage.getBreakpoints(getState());
329
- dispatch(Shared.setBreakpoints(breakpoints));
330
- dispatch(Internal.setIsInBuilder(true));
331
- builderProxy.dispatchBuffered();
341
+ dispatch(setBreakpoints(breakpoints));
342
+ dispatch(setIsInBuilder(true));
343
+ channel.dispatchBuffered();
332
344
  return () => {
333
345
  unregisterBuilderDocuments();
334
346
  stopMeasuringElements();
@@ -338,7 +350,7 @@ function initialize(builderProxy) {
338
350
  stopHandlingPointerMoveEvent();
339
351
  stopPollingElementFromPoint();
340
352
  unregisterBuilderComponents();
341
- dispatch(Internal.setIsInBuilder(false));
353
+ dispatch(setIsInBuilder(false));
342
354
  };
343
355
  };
344
356
  }
@@ -346,10 +358,10 @@ function measureBoxModelsMiddleware() {
346
358
  return actionMiddleware(({ dispatch }) => (next) => {
347
359
  return (action) => {
348
360
  switch (action.type) {
349
- case InternalActionTypes.REGISTER_COMPONENT_HANDLE: {
361
+ case ActionTypes.REGISTER_COMPONENT_HANDLE: {
350
362
  if (BoxModels.isMeasurable(action.payload.componentHandle)) {
351
363
  dispatch(
352
- Internal.registerMeasurable(
364
+ registerMeasurable(
353
365
  action.payload.documentKey,
354
366
  action.payload.elementKey,
355
367
  action.payload.componentHandle
@@ -358,17 +370,15 @@ function measureBoxModelsMiddleware() {
358
370
  }
359
371
  break;
360
372
  }
361
- case InternalActionTypes.UNREGISTER_COMPONENT_HANDLE:
362
- dispatch(
363
- Internal.unregisterMeasurable(action.payload.documentKey, action.payload.elementKey)
364
- );
373
+ case ActionTypes.UNREGISTER_COMPONENT_HANDLE:
374
+ dispatch(unregisterMeasurable(action.payload.documentKey, action.payload.elementKey));
365
375
  break;
366
376
  }
367
377
  return next(action);
368
378
  };
369
379
  });
370
380
  }
371
- function builderAPIMiddleware(builderProxy) {
381
+ function messageChannelMiddleware(channel) {
372
382
  return actionMiddleware(({ dispatch }) => (next) => {
373
383
  if (typeof window === "undefined")
374
384
  return (action) => next(action);
@@ -376,35 +386,42 @@ function builderAPIMiddleware(builderProxy) {
376
386
  };
377
387
  return (action) => {
378
388
  switch (action.type) {
379
- case BuilderActionTypes.CHANGE_ELEMENT_BOX_MODELS:
380
- case BuilderActionTypes.MOUNT_COMPONENT:
381
- case BuilderActionTypes.UNMOUNT_COMPONENT:
382
- case BuilderActionTypes.CHANGE_DOCUMENT_ELEMENT_SIZE:
383
- case BuilderActionTypes.MESSAGE_BUILDER_PROP_CONTROLLER:
384
- case BuilderActionTypes.HANDLE_WHEEL:
385
- case BuilderActionTypes.HANDLE_POINTER_MOVE:
386
- case BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE:
387
- case BuilderActionTypes.SET_LOCALE:
388
- case BuilderActionTypes.SET_BREAKPOINTS:
389
- case BuilderActionTypes.REGISTER_BUILDER_DOCUMENT:
390
- case BuilderActionTypes.UNREGISTER_BUILDER_DOCUMENT:
391
- case BuilderActionTypes.REGISTER_BUILDER_COMPONENT:
392
- case BuilderActionTypes.UNREGISTER_BUILDER_COMPONENT:
393
- builderProxy.execute(action);
389
+ case ActionTypes.CHANGE_ELEMENT_BOX_MODELS:
390
+ case ActionTypes.MOUNT_COMPONENT:
391
+ case ActionTypes.UNMOUNT_COMPONENT:
392
+ case ActionTypes.CHANGE_DOCUMENT_ELEMENT_SIZE:
393
+ case ActionTypes.MESSAGE_BUILDER_PROP_CONTROLLER:
394
+ case ActionTypes.HANDLE_WHEEL:
395
+ case ActionTypes.HANDLE_POINTER_MOVE:
396
+ case ActionTypes.ELEMENT_FROM_POINT_CHANGE:
397
+ case ActionTypes.SET_LOCALE:
398
+ case ActionTypes.SET_BREAKPOINTS:
399
+ case ActionTypes.REGISTER_BUILDER_DOCUMENT:
400
+ case ActionTypes.UNREGISTER_BUILDER_DOCUMENT:
401
+ channel.postMessage(action);
402
+ break;
403
+ case ActionTypes.REGISTER_BUILDER_COMPONENT: {
404
+ const { transferables, ...forwardedAction } = action;
405
+ channel.postMessage(forwardedAction, transferables);
394
406
  break;
395
- case HostActionTypes.CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP:
407
+ }
408
+ case ActionTypes.UNREGISTER_BUILDER_COMPONENT:
409
+ channel.postMessage(action);
410
+ break;
411
+ case ActionTypes.CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP:
396
412
  window.document.documentElement.scrollTop = action.payload.scrollTop;
397
413
  break;
398
- case HostActionTypes.SCROLL_DOCUMENT_ELEMENT:
414
+ case ActionTypes.SCROLL_DOCUMENT_ELEMENT:
399
415
  window.document.documentElement.scrollTop += action.payload.scrollTopDelta;
400
416
  break;
401
- case HostActionTypes.SET_BUILDER_EDIT_MODE:
417
+ case ActionTypes.SET_BUILDER_EDIT_MODE:
418
+ channel.postMessage(action);
402
419
  window.getSelection()?.removeAllRanges();
403
420
  break;
404
- case HostActionTypes.INIT:
405
- cleanUp = dispatch(initialize(builderProxy));
421
+ case ActionTypes.INIT:
422
+ cleanUp = dispatch(initialize(channel));
406
423
  break;
407
- case HostActionTypes.CLEAN_UP:
424
+ case ActionTypes.CLEAN_UP:
408
425
  cleanUp();
409
426
  break;
410
427
  }
@@ -425,15 +442,13 @@ function createAndRegisterPropControllers(documentKey, elementKey) {
425
442
  (acc, [propName, descriptor]) => {
426
443
  const propController = createPropController(
427
444
  descriptor,
428
- (message) => dispatch(
429
- Builder.messageBuilderPropController(documentKey, elementKey, propName, message)
430
- )
445
+ (message) => dispatch(messageBuilderPropController(documentKey, elementKey, propName, message))
431
446
  );
432
447
  return { ...acc, [propName]: propController };
433
448
  },
434
449
  {}
435
450
  );
436
- dispatch(Internal.registerPropControllers(documentKey, elementKey, propControllers));
451
+ dispatch(registerPropControllers(documentKey, elementKey, propControllers));
437
452
  return propControllers;
438
453
  };
439
454
  }
@@ -441,21 +456,19 @@ function propControllerHandlesMiddleware() {
441
456
  return actionMiddleware(({ dispatch, getState }) => (next) => {
442
457
  return (action) => {
443
458
  switch (action.type) {
444
- case InternalActionTypes.REGISTER_COMPONENT_HANDLE: {
459
+ case ActionTypes.REGISTER_COMPONENT_HANDLE: {
445
460
  const { documentKey, elementKey, componentHandle } = action.payload;
446
461
  const element = ReactPage.getElement(getState(), documentKey, elementKey);
447
462
  const propControllers = dispatch(
448
463
  createAndRegisterPropControllers(documentKey, elementKey)
449
464
  );
450
465
  if (element != null && !ReactPage.isElementReference(element) && PropControllerHandles.isPropControllersHandle(componentHandle)) {
451
- dispatch(
452
- Internal.registerPropControllersHandle(documentKey, elementKey, componentHandle)
453
- );
466
+ dispatch(registerPropControllersHandle(documentKey, elementKey, componentHandle));
454
467
  componentHandle.setPropControllers(propControllers);
455
468
  }
456
469
  break;
457
470
  }
458
- case InternalActionTypes.UNREGISTER_COMPONENT_HANDLE: {
471
+ case ActionTypes.UNREGISTER_COMPONENT_HANDLE: {
459
472
  const { documentKey, elementKey } = action.payload;
460
473
  const handle = PropControllerHandles.getPropControllersHandle(
461
474
  getPropControllerHandlesStateSlice(getState()),
@@ -463,10 +476,10 @@ function propControllerHandlesMiddleware() {
463
476
  elementKey
464
477
  );
465
478
  handle?.setPropControllers(null);
466
- dispatch(Internal.unregisterPropControllers(documentKey, elementKey));
479
+ dispatch(unregisterPropControllers(documentKey, elementKey));
467
480
  break;
468
481
  }
469
- case HostActionTypes.MESSAGE_HOST_PROP_CONTROLLER: {
482
+ case ActionTypes.MESSAGE_HOST_PROP_CONTROLLER: {
470
483
  const propController = PropControllerHandles.getPropController(
471
484
  getPropControllerHandlesStateSlice(getState()),
472
485
  action.payload.documentKey,
@@ -489,27 +502,57 @@ function makeswiftApiClientSyncMiddleware(client) {
489
502
  };
490
503
  });
491
504
  }
492
- function setupBuilderProxy(builderProxy) {
505
+ class MessageChannel {
506
+ channel = null;
507
+ bufferedMessages = [];
508
+ postMessage(message, transferables) {
509
+ if (this.channel) {
510
+ this.channel.postMessage(message, transferables ?? []);
511
+ } else {
512
+ this.bufferedMessages.push([message, transferables]);
513
+ }
514
+ }
515
+ setup(onMessage) {
516
+ const channel = new window.MessageChannel();
517
+ channel.port1.onmessage = onMessage;
518
+ window.parent.postMessage(channel.port2, "*", [channel.port2]);
519
+ this.channel = channel.port1;
520
+ }
521
+ dispatchBuffered() {
522
+ console.assert(this.channel != null, "channel is not setup");
523
+ this.bufferedMessages.forEach(([message, transferables]) => {
524
+ this.channel?.postMessage(message, transferables ?? []);
525
+ });
526
+ this.bufferedMessages = [];
527
+ }
528
+ teardown() {
529
+ if (this.channel) {
530
+ this.channel.onmessage = null;
531
+ this.channel.close();
532
+ }
533
+ }
534
+ }
535
+ function setupMessageChannel(channel) {
493
536
  return (dispatch) => {
494
- builderProxy.setup({ onHostAction: (action) => dispatch(action) });
537
+ channel.setup((event) => dispatch(event.data));
495
538
  };
496
539
  }
497
540
  function configureStore({
498
541
  preloadedState,
499
- client,
500
- builderProxy
542
+ client
501
543
  }) {
502
544
  const initialState = {
503
545
  ...preloadedState,
504
546
  isPreview: IsPreview.getInitialState(true)
505
547
  };
548
+ const channel = new MessageChannel();
506
549
  const store = configureReduxStore({
507
550
  reducer,
508
551
  preloadedState: initialState,
509
552
  middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat(
510
553
  ReactPage.elementTreeMiddleware(),
511
554
  measureBoxModelsMiddleware(),
512
- builderAPIMiddleware(builderProxy),
555
+ messageChannelMiddleware(channel),
513
556
  propControllerHandlesMiddleware(),
514
557
  makeswiftApiClientSyncMiddleware(client)
515
558
  ),
@@ -517,28 +560,28 @@ function configureStore({
517
560
  withSetupTeardown(
518
561
  () => {
519
562
  const dispatch = store.dispatch;
520
- dispatch(setupBuilderProxy(builderProxy));
563
+ dispatch(setupMessageChannel(channel));
521
564
  },
522
- () => builderProxy.teardown()
565
+ () => channel.teardown()
523
566
  )
524
567
  ),
525
568
  devTools: devToolsConfig({
526
569
  name: `Host store (${(/* @__PURE__ */ new Date()).toISOString()})`,
527
570
  actionsDenylist: [
528
- HostActionTypes.BUILDER_POINTER_MOVE,
529
- BuilderActionTypes.HANDLE_POINTER_MOVE,
530
- BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE
571
+ ActionTypes.BUILDER_POINTER_MOVE,
572
+ ActionTypes.HANDLE_POINTER_MOVE,
573
+ ActionTypes.ELEMENT_FROM_POINT_CHANGE
531
574
  ]
532
575
  })
533
576
  });
534
577
  return store;
535
578
  }
536
579
  export {
537
- builderAPIMiddleware,
538
580
  configureStore,
539
581
  createBox,
540
582
  getBox,
541
583
  initialize,
584
+ messageChannelMiddleware,
542
585
  parse,
543
586
  propControllerHandlesMiddleware,
544
587
  reducer,