@makeswift/runtime 0.27.1 → 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 (304) 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/react.js +256 -0
  4. package/dist/cjs/api/react.js.map +1 -0
  5. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  6. package/dist/cjs/api-handler/handlers/webhook/diff-projection.js +62 -0
  7. package/dist/cjs/api-handler/handlers/webhook/diff-projection.js.map +1 -0
  8. package/dist/cjs/box-model.js +33 -0
  9. package/dist/cjs/box-model.js.map +1 -0
  10. package/dist/cjs/builder/serialization.js +78 -0
  11. package/dist/cjs/builder/serialization.js.map +1 -0
  12. package/dist/cjs/client/index.js +3 -3
  13. package/dist/cjs/components/builtin/index.js +84 -0
  14. package/dist/cjs/components/builtin/index.js.map +1 -0
  15. package/dist/cjs/components/index.js +25 -0
  16. package/dist/cjs/components/index.js.map +1 -0
  17. package/dist/cjs/controls/rich-text-v2/translation.js +187 -0
  18. package/dist/cjs/controls/rich-text-v2/translation.js.map +1 -0
  19. package/dist/cjs/controls/serialization/base/index.js +78 -0
  20. package/dist/cjs/controls/serialization/base/index.js.map +1 -0
  21. package/dist/cjs/controls/serialization/base/visitor.js +59 -0
  22. package/dist/cjs/controls/serialization/base/visitor.js.map +1 -0
  23. package/dist/cjs/controls/serialization/index.js +55 -0
  24. package/dist/cjs/controls/serialization/index.js.map +1 -0
  25. package/dist/cjs/controls/serialization/message-port/function-serialization.js +79 -0
  26. package/dist/cjs/controls/serialization/message-port/function-serialization.js.map +1 -0
  27. package/dist/cjs/controls/serialization/message-port/index.js +25 -0
  28. package/dist/cjs/controls/serialization/message-port/index.js.map +1 -0
  29. package/dist/cjs/controls/serialization/message-port/visitor.js +48 -0
  30. package/dist/cjs/controls/serialization/message-port/visitor.js.map +1 -0
  31. package/dist/cjs/core/index.js +57 -0
  32. package/dist/cjs/core/index.js.map +1 -0
  33. package/dist/cjs/next/api-handler/config/app-router.js +10 -1
  34. package/dist/cjs/next/api-handler/config/app-router.js.map +1 -1
  35. package/dist/cjs/next/api-handler/config/pages-router.js +1 -1
  36. package/dist/cjs/next/api-handler/config/pages-router.js.map +1 -1
  37. package/dist/cjs/next/fetch.js +30 -0
  38. package/dist/cjs/next/fetch.js.map +1 -0
  39. package/dist/cjs/prop-controllers/index.js +48 -0
  40. package/dist/cjs/prop-controllers/index.js.map +1 -0
  41. package/dist/cjs/prop-controllers/serialization.js +355 -0
  42. package/dist/cjs/prop-controllers/serialization.js.map +1 -0
  43. package/dist/cjs/react.js +40 -0
  44. package/dist/cjs/react.js.map +1 -0
  45. package/dist/cjs/runtimes/react/components/LiveProvider.js +50 -0
  46. package/dist/cjs/runtimes/react/components/LiveProvider.js.map +1 -0
  47. package/dist/cjs/runtimes/react/components/MakeswiftFonts.js +33 -0
  48. package/dist/cjs/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  49. package/dist/cjs/runtimes/react/components/PreviewProvider.js +57 -0
  50. package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -0
  51. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js +67 -0
  52. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js.map +1 -0
  53. package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js +39 -0
  54. package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  55. package/dist/cjs/runtimes/react/hooks/use-is-preview.js +33 -0
  56. package/dist/cjs/runtimes/react/hooks/use-is-preview.js.map +1 -0
  57. package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js +59 -0
  58. package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
  59. package/dist/cjs/runtimes/react/resource-resolver.js +52 -0
  60. package/dist/cjs/runtimes/react/resource-resolver.js.map +1 -0
  61. package/dist/cjs/state/actions/internal.js +205 -0
  62. package/dist/cjs/state/actions/internal.js.map +1 -0
  63. package/dist/cjs/state/actions.js +423 -0
  64. package/dist/cjs/state/actions.js.map +1 -0
  65. package/dist/cjs/state/api-client/client-store.js +81 -0
  66. package/dist/cjs/state/api-client/client-store.js.map +1 -0
  67. package/dist/cjs/state/api-client/fetch-api-resource.js +125 -0
  68. package/dist/cjs/state/api-client/fetch-api-resource.js.map +1 -0
  69. package/dist/cjs/state/api-client/state.js +89 -0
  70. package/dist/cjs/state/api-client/state.js.map +1 -0
  71. package/dist/cjs/state/api-client/store.js +36 -0
  72. package/dist/cjs/state/api-client/store.js.map +1 -0
  73. package/dist/cjs/state/builder-api/api.js +17 -0
  74. package/dist/cjs/state/builder-api/api.js.map +1 -0
  75. package/dist/cjs/state/builder-api/navigation-listener.js +110 -0
  76. package/dist/cjs/state/builder-api/navigation-listener.js.map +1 -0
  77. package/dist/cjs/state/mixins/breakpoint-watch.js +72 -0
  78. package/dist/cjs/state/mixins/breakpoint-watch.js.map +1 -0
  79. package/dist/cjs/state/mixins/setup-teardown.js +35 -0
  80. package/dist/cjs/state/mixins/setup-teardown.js.map +1 -0
  81. package/dist/cjs/state/modules/box-models.js +127 -0
  82. package/dist/cjs/state/modules/box-models.js.map +1 -0
  83. package/dist/cjs/state/modules/element-imperative-handles.js +60 -0
  84. package/dist/cjs/state/modules/element-imperative-handles.js.map +1 -0
  85. package/dist/cjs/state/modules/is-preview.js +47 -0
  86. package/dist/cjs/state/modules/is-preview.js.map +1 -0
  87. package/dist/cjs/state/modules/pointer.js +47 -0
  88. package/dist/cjs/state/modules/pointer.js.map +1 -0
  89. package/dist/cjs/state/modules/read-write-documents.js +98 -0
  90. package/dist/cjs/state/modules/read-write-documents.js.map +1 -0
  91. package/dist/cjs/state/react-builder-preview.js +610 -0
  92. package/dist/cjs/state/react-builder-preview.js.map +1 -0
  93. package/dist/cjs/state/react-page.js +355 -0
  94. package/dist/cjs/state/react-page.js.map +1 -0
  95. package/dist/cjs/utils/ref-counted-map.js +120 -0
  96. package/dist/cjs/utils/ref-counted-map.js.map +1 -0
  97. package/dist/esm/api/api-resources-client.js +127 -0
  98. package/dist/esm/api/api-resources-client.js.map +1 -0
  99. package/dist/esm/api/react.js +223 -0
  100. package/dist/esm/api/react.js.map +1 -0
  101. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  102. package/dist/esm/api-handler/handlers/webhook/diff-projection.js +38 -0
  103. package/dist/esm/api-handler/handlers/webhook/diff-projection.js.map +1 -0
  104. package/dist/esm/box-model.js +7 -0
  105. package/dist/esm/box-model.js.map +1 -0
  106. package/dist/esm/builder/serialization.js +59 -0
  107. package/dist/esm/builder/serialization.js.map +1 -0
  108. package/dist/esm/client/index.js +3 -3
  109. package/dist/esm/components/builtin/index.js +34 -0
  110. package/dist/esm/components/builtin/index.js.map +1 -0
  111. package/dist/esm/components/index.js +3 -0
  112. package/dist/esm/components/index.js.map +1 -0
  113. package/dist/esm/controls/rich-text-v2/translation.js +152 -0
  114. package/dist/esm/controls/rich-text-v2/translation.js.map +1 -0
  115. package/dist/esm/controls/serialization/base/index.js +78 -0
  116. package/dist/esm/controls/serialization/base/index.js.map +1 -0
  117. package/dist/esm/controls/serialization/base/visitor.js +39 -0
  118. package/dist/esm/controls/serialization/base/visitor.js.map +1 -0
  119. package/dist/esm/controls/serialization/index.js +30 -0
  120. package/dist/esm/controls/serialization/index.js.map +1 -0
  121. package/dist/esm/controls/serialization/message-port/function-serialization.js +52 -0
  122. package/dist/esm/controls/serialization/message-port/function-serialization.js.map +1 -0
  123. package/dist/esm/controls/serialization/message-port/index.js +3 -0
  124. package/dist/esm/controls/serialization/message-port/index.js.map +1 -0
  125. package/dist/esm/controls/serialization/message-port/visitor.js +24 -0
  126. package/dist/esm/controls/serialization/message-port/visitor.js.map +1 -0
  127. package/dist/esm/core/index.js +35 -0
  128. package/dist/esm/core/index.js.map +1 -0
  129. package/dist/esm/next/api-handler/config/app-router.js +10 -1
  130. package/dist/esm/next/api-handler/config/app-router.js.map +1 -1
  131. package/dist/esm/next/api-handler/config/pages-router.js +1 -1
  132. package/dist/esm/next/api-handler/config/pages-router.js.map +1 -1
  133. package/dist/esm/next/fetch.js +6 -0
  134. package/dist/esm/next/fetch.js.map +1 -0
  135. package/dist/esm/prop-controllers/index.js +11 -0
  136. package/dist/esm/prop-controllers/index.js.map +1 -0
  137. package/dist/esm/prop-controllers/serialization.js +338 -0
  138. package/dist/esm/prop-controllers/serialization.js.map +1 -0
  139. package/dist/esm/react.js +11 -0
  140. package/dist/esm/react.js.map +1 -0
  141. package/dist/esm/runtimes/react/components/LiveProvider.js +20 -0
  142. package/dist/esm/runtimes/react/components/LiveProvider.js.map +1 -0
  143. package/dist/esm/runtimes/react/components/MakeswiftFonts.js +9 -0
  144. package/dist/esm/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  145. package/dist/esm/runtimes/react/components/PreviewProvider.js +27 -0
  146. package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -0
  147. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js +43 -0
  148. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js.map +1 -0
  149. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js +15 -0
  150. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  151. package/dist/esm/runtimes/react/hooks/use-is-preview.js +9 -0
  152. package/dist/esm/runtimes/react/hooks/use-is-preview.js.map +1 -0
  153. package/dist/esm/runtimes/react/lib/resolved-style-to-css.js +38 -0
  154. package/dist/esm/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
  155. package/dist/esm/runtimes/react/resource-resolver.js +28 -0
  156. package/dist/esm/runtimes/react/resource-resolver.js.map +1 -0
  157. package/dist/esm/state/actions/internal.js +162 -0
  158. package/dist/esm/state/actions/internal.js.map +1 -0
  159. package/dist/esm/state/actions.js +349 -0
  160. package/dist/esm/state/actions.js.map +1 -0
  161. package/dist/esm/state/api-client/client-store.js +49 -0
  162. package/dist/esm/state/api-client/client-store.js.map +1 -0
  163. package/dist/esm/state/api-client/fetch-api-resource.js +93 -0
  164. package/dist/esm/state/api-client/fetch-api-resource.js.map +1 -0
  165. package/dist/esm/state/api-client/state.js +52 -0
  166. package/dist/esm/state/api-client/state.js.map +1 -0
  167. package/dist/esm/state/api-client/store.js +12 -0
  168. package/dist/esm/state/api-client/store.js.map +1 -0
  169. package/dist/esm/state/builder-api/api.js +1 -0
  170. package/dist/esm/state/builder-api/api.js.map +1 -0
  171. package/dist/esm/state/builder-api/navigation-listener.js +86 -0
  172. package/dist/esm/state/builder-api/navigation-listener.js.map +1 -0
  173. package/dist/esm/state/mixins/breakpoint-watch.js +48 -0
  174. package/dist/esm/state/mixins/breakpoint-watch.js.map +1 -0
  175. package/dist/esm/state/mixins/setup-teardown.js +11 -0
  176. package/dist/esm/state/mixins/setup-teardown.js.map +1 -0
  177. package/dist/esm/state/modules/box-models.js +98 -0
  178. package/dist/esm/state/modules/box-models.js.map +1 -0
  179. package/dist/esm/state/modules/element-imperative-handles.js +35 -0
  180. package/dist/esm/state/modules/element-imperative-handles.js.map +1 -0
  181. package/dist/esm/state/modules/is-preview.js +21 -0
  182. package/dist/esm/state/modules/is-preview.js.map +1 -0
  183. package/dist/esm/state/modules/pointer.js +22 -0
  184. package/dist/esm/state/modules/pointer.js.map +1 -0
  185. package/dist/esm/state/modules/read-write-documents.js +60 -0
  186. package/dist/esm/state/modules/read-write-documents.js.map +1 -0
  187. package/dist/esm/state/react-builder-preview.js +590 -0
  188. package/dist/esm/state/react-builder-preview.js.map +1 -0
  189. package/dist/esm/state/react-page.js +319 -0
  190. package/dist/esm/state/react-page.js.map +1 -0
  191. package/dist/esm/utils/ref-counted-map.js +96 -0
  192. package/dist/esm/utils/ref-counted-map.js.map +1 -0
  193. package/dist/types/api/api-resources-client.d.ts +57 -0
  194. package/dist/types/api/api-resources-client.d.ts.map +1 -0
  195. package/dist/types/api/react.d.ts +82 -0
  196. package/dist/types/api/react.d.ts.map +1 -0
  197. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +201 -0
  198. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts.map +1 -0
  199. package/dist/types/box-model.d.ts +3 -0
  200. package/dist/types/box-model.d.ts.map +1 -0
  201. package/dist/types/builder/serialization.d.ts +23 -0
  202. package/dist/types/builder/serialization.d.ts.map +1 -0
  203. package/dist/types/builder/serialization.test.d.ts +2 -0
  204. package/dist/types/builder/serialization.test.d.ts.map +1 -0
  205. package/dist/types/client/tests/client.get-component-snapshots.test.d.ts +2 -0
  206. package/dist/types/client/tests/client.get-component-snapshots.test.d.ts.map +1 -0
  207. package/dist/types/client/tests/client.introspect-many.test.d.ts +2 -0
  208. package/dist/types/client/tests/client.introspect-many.test.d.ts.map +1 -0
  209. package/dist/types/components/builtin/index.d.ts +17 -0
  210. package/dist/types/components/builtin/index.d.ts.map +1 -0
  211. package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts +3 -0
  212. package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts.map +1 -0
  213. package/dist/types/components/index.d.ts +3 -0
  214. package/dist/types/components/index.d.ts.map +1 -0
  215. package/dist/types/controls/rich-text-v2/translation.d.ts +6 -0
  216. package/dist/types/controls/rich-text-v2/translation.d.ts.map +1 -0
  217. package/dist/types/controls/serialization/base/index.d.ts +10 -0
  218. package/dist/types/controls/serialization/base/index.d.ts.map +1 -0
  219. package/dist/types/controls/serialization/base/visitor.d.ts +7 -0
  220. package/dist/types/controls/serialization/base/visitor.d.ts.map +1 -0
  221. package/dist/types/controls/serialization/index.d.ts +10 -0
  222. package/dist/types/controls/serialization/index.d.ts.map +1 -0
  223. package/dist/types/controls/serialization/message-port/function-serialization.d.ts +16 -0
  224. package/dist/types/controls/serialization/message-port/function-serialization.d.ts.map +1 -0
  225. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts +2 -0
  226. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts.map +1 -0
  227. package/dist/types/controls/serialization/message-port/index.d.ts +3 -0
  228. package/dist/types/controls/serialization/message-port/index.d.ts.map +1 -0
  229. package/dist/types/controls/serialization/message-port/visitor.d.ts +7 -0
  230. package/dist/types/controls/serialization/message-port/visitor.d.ts.map +1 -0
  231. package/dist/types/core/index.d.ts +2 -0
  232. package/dist/types/core/index.d.ts.map +1 -0
  233. package/dist/types/next/api-handler/config/app-router.d.ts.map +1 -1
  234. package/dist/types/next/api-handler/config/pages-router.test.d.ts +2 -0
  235. package/dist/types/next/api-handler/config/pages-router.test.d.ts.map +1 -0
  236. package/dist/types/next/components/tests/controls/code-control.test.d.ts +2 -0
  237. package/dist/types/next/components/tests/controls/code-control.test.d.ts.map +1 -0
  238. package/dist/types/next/components/tests/makeswift-component-rendering.test.d.ts +3 -0
  239. package/dist/types/next/components/tests/makeswift-component-rendering.test.d.ts.map +1 -0
  240. package/dist/types/next/fetch.d.ts +3 -0
  241. package/dist/types/next/fetch.d.ts.map +1 -0
  242. package/dist/types/prop-controllers/index.d.ts +8 -0
  243. package/dist/types/prop-controllers/index.d.ts.map +1 -0
  244. package/dist/types/prop-controllers/serialization.d.ts +228 -0
  245. package/dist/types/prop-controllers/serialization.d.ts.map +1 -0
  246. package/dist/types/react.d.ts +4 -0
  247. package/dist/types/react.d.ts.map +1 -0
  248. package/dist/types/runtimes/react/components/LiveProvider.d.ts +3 -0
  249. package/dist/types/runtimes/react/components/LiveProvider.d.ts.map +1 -0
  250. package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts +7 -0
  251. package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts.map +1 -0
  252. package/dist/types/runtimes/react/components/PreviewProvider.d.ts +3 -0
  253. package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -0
  254. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts +4 -0
  255. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts.map +1 -0
  256. package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts +3 -0
  257. package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts.map +1 -0
  258. package/dist/types/runtimes/react/hooks/use-is-preview.d.ts +2 -0
  259. package/dist/types/runtimes/react/hooks/use-is-preview.d.ts.map +1 -0
  260. package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts +4 -0
  261. package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts.map +1 -0
  262. package/dist/types/runtimes/react/resource-resolver.d.ts +10 -0
  263. package/dist/types/runtimes/react/resource-resolver.d.ts.map +1 -0
  264. package/dist/types/state/__tests__/react-page.test.d.ts +2 -0
  265. package/dist/types/state/__tests__/react-page.test.d.ts.map +1 -0
  266. package/dist/types/state/actions/internal.d.ts +181 -0
  267. package/dist/types/state/actions/internal.d.ts.map +1 -0
  268. package/dist/types/state/actions.d.ts +461 -0
  269. package/dist/types/state/actions.d.ts.map +1 -0
  270. package/dist/types/state/api-client/client-store.d.ts +6 -0
  271. package/dist/types/state/api-client/client-store.d.ts.map +1 -0
  272. package/dist/types/state/api-client/fetch-api-resource.d.ts +11 -0
  273. package/dist/types/state/api-client/fetch-api-resource.d.ts.map +1 -0
  274. package/dist/types/state/api-client/state.d.ts +30 -0
  275. package/dist/types/state/api-client/state.d.ts.map +1 -0
  276. package/dist/types/state/api-client/store.d.ts +18 -0
  277. package/dist/types/state/api-client/store.d.ts.map +1 -0
  278. package/dist/types/state/builder-api/api.d.ts +9 -0
  279. package/dist/types/state/builder-api/api.d.ts.map +1 -0
  280. package/dist/types/state/builder-api/navigation-listener.d.ts +3 -0
  281. package/dist/types/state/builder-api/navigation-listener.d.ts.map +1 -0
  282. package/dist/types/state/mixins/breakpoint-watch.d.ts +11 -0
  283. package/dist/types/state/mixins/breakpoint-watch.d.ts.map +1 -0
  284. package/dist/types/state/mixins/setup-teardown.d.ts +7 -0
  285. package/dist/types/state/mixins/setup-teardown.d.ts.map +1 -0
  286. package/dist/types/state/modules/box-models.d.ts +23 -0
  287. package/dist/types/state/modules/box-models.d.ts.map +1 -0
  288. package/dist/types/state/modules/element-imperative-handles.d.ts +7 -0
  289. package/dist/types/state/modules/element-imperative-handles.d.ts.map +1 -0
  290. package/dist/types/state/modules/is-preview.d.ts +6 -0
  291. package/dist/types/state/modules/is-preview.d.ts.map +1 -0
  292. package/dist/types/state/modules/pointer.d.ts +12 -0
  293. package/dist/types/state/modules/pointer.d.ts.map +1 -0
  294. package/dist/types/state/modules/read-write-documents.d.ts +14 -0
  295. package/dist/types/state/modules/read-write-documents.d.ts.map +1 -0
  296. package/dist/types/state/react-builder-preview.d.ts +110 -0
  297. package/dist/types/state/react-builder-preview.d.ts.map +1 -0
  298. package/dist/types/state/react-page.d.ts +149 -0
  299. package/dist/types/state/react-page.d.ts.map +1 -0
  300. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts +2 -0
  301. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts.map +1 -0
  302. package/dist/types/utils/ref-counted-map.d.ts +32 -0
  303. package/dist/types/utils/ref-counted-map.d.ts.map +1 -0
  304. package/package.json +1 -1
@@ -0,0 +1,60 @@
1
+ import { removeIn, setIn } from "immutable";
2
+ import * as ReadOnlyDocuments from "./read-only-documents";
3
+ import { ActionTypes, isKnownAction } from "../actions";
4
+ import { isElementReference } from "./read-only-documents";
5
+ function apply(data, operation) {
6
+ let applied = data;
7
+ operation.forEach((component) => {
8
+ if (component.ld != null)
9
+ applied = removeIn(applied, component.p);
10
+ if (component.od != null)
11
+ applied = removeIn(applied, component.p);
12
+ if (component.li != null)
13
+ applied = setIn(applied, component.p, component.li);
14
+ if (component.oi != null)
15
+ applied = setIn(applied, component.p, component.oi);
16
+ });
17
+ return applied;
18
+ }
19
+ function getInitialState({
20
+ documents = []
21
+ } = {}) {
22
+ return ReadOnlyDocuments.getInitialState({ documents });
23
+ }
24
+ function getReadOnlyDocumentsStateSlice(state) {
25
+ return state;
26
+ }
27
+ function getDocument(state, documentKey) {
28
+ return ReadOnlyDocuments.getDocument(getReadOnlyDocumentsStateSlice(state), documentKey);
29
+ }
30
+ function getDocuments(state) {
31
+ return ReadOnlyDocuments.getDocuments(getReadOnlyDocumentsStateSlice(state));
32
+ }
33
+ function reducer(state = getInitialState(), action) {
34
+ const nextState = ReadOnlyDocuments.reducer(state, action);
35
+ if (!isKnownAction(action))
36
+ return state;
37
+ switch (action.type) {
38
+ case ActionTypes.CHANGE_DOCUMENT: {
39
+ const document = getDocument(nextState, action.payload.documentKey);
40
+ if (document == null)
41
+ return nextState;
42
+ const currentRootElement = ReadOnlyDocuments.getRootElement(document);
43
+ const nextRootElement = apply(currentRootElement, action.payload.operation);
44
+ return currentRootElement === nextRootElement ? nextState : new Map(nextState).set(action.payload.documentKey, {
45
+ ...document,
46
+ rootElement: nextRootElement
47
+ });
48
+ }
49
+ default:
50
+ return nextState;
51
+ }
52
+ }
53
+ export {
54
+ getDocument,
55
+ getDocuments,
56
+ getInitialState,
57
+ isElementReference,
58
+ reducer
59
+ };
60
+ //# sourceMappingURL=read-write-documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/state/modules/read-write-documents.ts"],"sourcesContent":["import { type Operation } from 'ot-json0'\nimport { removeIn, setIn } from 'immutable'\n\nimport * as ReadOnlyDocuments from './read-only-documents'\nimport { type Action, type UnknownAction, ActionTypes, isKnownAction } from '../actions'\n\nexport type { Document, Element, ElementData, ElementReference } from './read-only-documents'\nexport { isElementReference } from './read-only-documents'\nexport type { Operation }\n\nfunction apply(data: ReadOnlyDocuments.Element, operation: Operation): ReadOnlyDocuments.Element {\n let applied = data\n\n operation.forEach(component => {\n // @ts-expect-error: `ld` isn't in all possible values of `component`\n if (component.ld != null) applied = removeIn(applied, component.p)\n\n // @ts-expect-error: `od` isn't in all possible values of `component`\n if (component.od != null) applied = removeIn(applied, component.p)\n\n // @ts-expect-error: `li` isn't in all possible values of `component`\n if (component.li != null) applied = setIn(applied, component.p, component.li)\n\n // @ts-expect-error: `oi` isn't in all possible values of `component`\n if (component.oi != null) applied = setIn(applied, component.p, component.oi)\n })\n\n return applied\n}\n\nexport type State = ReadOnlyDocuments.State\n\nexport function getInitialState({\n documents = [],\n}: { documents?: ReadOnlyDocuments.Document[] } = {}): State {\n return ReadOnlyDocuments.getInitialState({ documents })\n}\n\nfunction getReadOnlyDocumentsStateSlice(state: State): ReadOnlyDocuments.State {\n return state\n}\n\nexport function getDocument(state: State, documentKey: string): ReadOnlyDocuments.Document | null {\n return ReadOnlyDocuments.getDocument(getReadOnlyDocumentsStateSlice(state), documentKey)\n}\n\nexport function getDocuments(state: State): ReadOnlyDocuments.State {\n return ReadOnlyDocuments.getDocuments(getReadOnlyDocumentsStateSlice(state))\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n const nextState = ReadOnlyDocuments.reducer(state, action)\n\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ActionTypes.CHANGE_DOCUMENT: {\n const document = getDocument(nextState, action.payload.documentKey)\n if (document == null) return nextState\n\n const currentRootElement = ReadOnlyDocuments.getRootElement(document)\n\n const nextRootElement = apply(currentRootElement, action.payload.operation)\n\n return currentRootElement === nextRootElement\n ? nextState\n : new Map(nextState).set(action.payload.documentKey, {\n ...document,\n rootElement: nextRootElement,\n })\n }\n\n default:\n return nextState\n }\n}\n"],"mappings":"AACA,SAAS,UAAU,aAAa;AAEhC,YAAY,uBAAuB;AACnC,SAA0C,aAAa,qBAAqB;AAG5E,SAAS,0BAA0B;AAGnC,SAAS,MAAM,MAAiC,WAAiD;AAC/F,MAAI,UAAU;AAEd,YAAU,QAAQ,eAAa;AAE7B,QAAI,UAAU,MAAM;AAAM,gBAAU,SAAS,SAAS,UAAU,CAAC;AAGjE,QAAI,UAAU,MAAM;AAAM,gBAAU,SAAS,SAAS,UAAU,CAAC;AAGjE,QAAI,UAAU,MAAM;AAAM,gBAAU,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE;AAG5E,QAAI,UAAU,MAAM;AAAM,gBAAU,MAAM,SAAS,UAAU,GAAG,UAAU,EAAE;AAAA,EAC9E,CAAC;AAED,SAAO;AACT;AAIO,SAAS,gBAAgB;AAAA,EAC9B,YAAY,CAAC;AACf,IAAkD,CAAC,GAAU;AAC3D,SAAO,kBAAkB,gBAAgB,EAAE,UAAU,CAAC;AACxD;AAEA,SAAS,+BAA+B,OAAuC;AAC7E,SAAO;AACT;AAEO,SAAS,YAAY,OAAc,aAAwD;AAChG,SAAO,kBAAkB,YAAY,+BAA+B,KAAK,GAAG,WAAW;AACzF;AAEO,SAAS,aAAa,OAAuC;AAClE,SAAO,kBAAkB,aAAa,+BAA+B,KAAK,CAAC;AAC7E;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAuC;AAC/F,QAAM,YAAY,kBAAkB,QAAQ,OAAO,MAAM;AAEzD,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,YAAY,iBAAiB;AAChC,YAAM,WAAW,YAAY,WAAW,OAAO,QAAQ,WAAW;AAClE,UAAI,YAAY;AAAM,eAAO;AAE7B,YAAM,qBAAqB,kBAAkB,eAAe,QAAQ;AAEpE,YAAM,kBAAkB,MAAM,oBAAoB,OAAO,QAAQ,SAAS;AAE1E,aAAO,uBAAuB,kBAC1B,YACA,IAAI,IAAI,SAAS,EAAE,IAAI,OAAO,QAAQ,aAAa;AAAA,QACjD,GAAG;AAAA,QACH,aAAa;AAAA,MACf,CAAC;AAAA,IACP;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -0,0 +1,590 @@
1
+ import {
2
+ configureStore as configureReduxStore,
3
+ combineReducers
4
+ } from "@reduxjs/toolkit";
5
+ import deepEqual from "../utils/deepEqual";
6
+ import * as Documents from "./modules/read-write-documents";
7
+ import * as ElementTrees from "./modules/element-trees";
8
+ import * as ReactComponents from "./modules/react-components";
9
+ import * as BoxModels from "./modules/box-models";
10
+ import * as ComponentsMeta from "./modules/components-meta";
11
+ import * as PropControllers from "./modules/prop-controllers";
12
+ import * as PropControllerHandles from "./modules/prop-controller-handles";
13
+ import * as IsInBuilder from "./modules/is-in-builder";
14
+ import * as IsPreview from "./modules/is-preview";
15
+ import * as BuilderEditMode from "./modules/builder-edit-mode";
16
+ import * as Pointer from "./modules/pointer";
17
+ import * as ElementImperativeHandles from "./modules/element-imperative-handles";
18
+ import * as Breakpoints from "./modules/breakpoints";
19
+ import { withSetupTeardown } from "./mixins/setup-teardown";
20
+ import * as ReactPage from "./react-page";
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";
41
+ import { actionMiddleware, middlewareOptions, devToolsConfig } from "./toolkit";
42
+ import { createPropController } from "../prop-controllers/instances";
43
+ import { serializeControls } from "../builder";
44
+ import { createBox, getBox, parse } from "./modules/box-models";
45
+ const reducer = combineReducers({
46
+ documents: Documents.reducer,
47
+ elementTrees: ElementTrees.reducer,
48
+ reactComponents: ReactComponents.reducer,
49
+ boxModels: BoxModels.reducer,
50
+ componentsMeta: ComponentsMeta.reducer,
51
+ propControllers: PropControllers.reducer,
52
+ propControllerHandles: PropControllerHandles.reducer,
53
+ isInBuilder: IsInBuilder.reducer,
54
+ isPreview: IsPreview.reducer,
55
+ builderEditMode: BuilderEditMode.reducer,
56
+ pointer: Pointer.reducer,
57
+ elementImperativeHandles: ElementImperativeHandles.reducer,
58
+ breakpoints: Breakpoints.reducer
59
+ });
60
+ function getDocumentsStateSlice(state) {
61
+ return state.documents;
62
+ }
63
+ function getBoxModelsStateSlice(state) {
64
+ return state.boxModels;
65
+ }
66
+ function getMeasurables(state) {
67
+ return BoxModels.getMeasurables(getBoxModelsStateSlice(state));
68
+ }
69
+ function getBoxModels(state) {
70
+ return BoxModels.getBoxModels(getBoxModelsStateSlice(state));
71
+ }
72
+ function getBoxModel(state, documentKey, elementKey) {
73
+ return BoxModels.getBoxModel(getBoxModelsStateSlice(state), documentKey, elementKey);
74
+ }
75
+ function getComponentsMetaStateSlice(state) {
76
+ return state.componentsMeta;
77
+ }
78
+ function getComponentsMeta(state) {
79
+ return ComponentsMeta.getComponentsMeta(getComponentsMetaStateSlice(state));
80
+ }
81
+ function getPropControllersStateSlice(state) {
82
+ return state.propControllers;
83
+ }
84
+ function getComponentPropControllerDescriptors(state, componentType) {
85
+ return PropControllers.getComponentPropControllerDescriptors(
86
+ getPropControllersStateSlice(state),
87
+ componentType
88
+ );
89
+ }
90
+ function getPropControllerHandlesStateSlice(state) {
91
+ return state.propControllerHandles;
92
+ }
93
+ function getPointer(state) {
94
+ return Pointer.getPointer(state.pointer);
95
+ }
96
+ function getElementImperativeHandles(state) {
97
+ return ElementImperativeHandles.getElementImperativeHandles(state.elementImperativeHandles);
98
+ }
99
+ function getElementImperativeHandlesContainingElement(state, element) {
100
+ const elementImperativeHandles = getElementImperativeHandles(state);
101
+ const filteredElementImperativeHandles = /* @__PURE__ */ new Map();
102
+ for (const [documentKey, byElementKey] of elementImperativeHandles) {
103
+ const filteredByElementKey = /* @__PURE__ */ new Map();
104
+ for (const [elementKey, elementImperativeHandle] of byElementKey) {
105
+ const handleElement = elementImperativeHandle.getDomNode();
106
+ if (handleElement?.contains(element)) {
107
+ filteredByElementKey.set(elementKey, elementImperativeHandle);
108
+ }
109
+ }
110
+ if (filteredByElementKey.size > 0) {
111
+ filteredElementImperativeHandles.set(documentKey, filteredByElementKey);
112
+ }
113
+ }
114
+ return filteredElementImperativeHandles;
115
+ }
116
+ function measureElements() {
117
+ return (dispatch, getState) => {
118
+ const measurables = getMeasurables(getState());
119
+ const currentBoxModels = getBoxModels(getState());
120
+ const measuredBoxModels = /* @__PURE__ */ new Map();
121
+ measurables.forEach((documentMeasurables, documentKey) => {
122
+ const measuredDocumentBoxModels = /* @__PURE__ */ new Map();
123
+ documentMeasurables.forEach((measurable, elementKey) => {
124
+ const boxModel = BoxModels.measure(measurable);
125
+ if (boxModel != null)
126
+ measuredDocumentBoxModels.set(elementKey, boxModel);
127
+ });
128
+ if (measuredDocumentBoxModels.size > 0) {
129
+ measuredBoxModels.set(documentKey, measuredDocumentBoxModels);
130
+ }
131
+ });
132
+ const changedBoxModels = /* @__PURE__ */ new Map();
133
+ currentBoxModels.forEach((currentDocumentBoxModels, documentKey) => {
134
+ const changedDocumentBoxModels = /* @__PURE__ */ new Map();
135
+ currentDocumentBoxModels.forEach((_boxModel, elementKey) => {
136
+ if (!measuredBoxModels.get(documentKey)?.has(elementKey)) {
137
+ changedDocumentBoxModels.set(elementKey, null);
138
+ }
139
+ if (changedDocumentBoxModels.size > 0) {
140
+ changedBoxModels.set(documentKey, changedDocumentBoxModels);
141
+ }
142
+ });
143
+ });
144
+ measuredBoxModels.forEach((measuredDocumentBoxModels, documentKey) => {
145
+ const changedDocumentBoxModels = /* @__PURE__ */ new Map();
146
+ measuredDocumentBoxModels.forEach((measuredBoxModel, elementKey) => {
147
+ const currentBoxModel = getBoxModel(getState(), documentKey, elementKey);
148
+ if (currentBoxModel == null || !deepEqual(currentBoxModel, measuredBoxModel)) {
149
+ changedDocumentBoxModels.set(elementKey, measuredBoxModel);
150
+ }
151
+ });
152
+ if (changedDocumentBoxModels.size > 0) {
153
+ changedBoxModels.set(documentKey, changedDocumentBoxModels);
154
+ }
155
+ });
156
+ if (changedBoxModels.size > 0)
157
+ dispatch(changeElementBoxModels(changedBoxModels));
158
+ };
159
+ }
160
+ function startMeasuringElements() {
161
+ return (dispatch) => {
162
+ let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest);
163
+ return () => {
164
+ cancelAnimationFrame(animationFrameHandle);
165
+ };
166
+ function handleAnimationFrameRequest() {
167
+ dispatch(measureElements());
168
+ animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest);
169
+ }
170
+ };
171
+ }
172
+ function getElementSize(element) {
173
+ return {
174
+ offsetWidth: element.offsetWidth,
175
+ offsetHeight: element.offsetHeight,
176
+ clientWidth: element.clientWidth,
177
+ clientHeight: element.clientHeight,
178
+ scrollWidth: element.scrollWidth,
179
+ scrollHeight: element.scrollHeight,
180
+ scrollTop: element.scrollTop,
181
+ scrollLeft: element.scrollLeft
182
+ };
183
+ }
184
+ function lockDocumentScroll() {
185
+ return (dispatch) => {
186
+ const lastDocumentOverflow = window.document.documentElement.style.overflow;
187
+ window.document.documentElement.style.overflow = "hidden";
188
+ window.document.documentElement.addEventListener("wheel", handleWheelEvent);
189
+ return () => {
190
+ window.document.documentElement.style.overflow = lastDocumentOverflow;
191
+ window.document.documentElement.removeEventListener("wheel", handleWheelEvent);
192
+ };
193
+ function handleWheelEvent({ deltaX, deltaY }) {
194
+ dispatch(handleWheel({ deltaX, deltaY }));
195
+ }
196
+ };
197
+ }
198
+ function startHandlingPointerMoveEvent() {
199
+ return (dispatch) => {
200
+ window.document.documentElement.addEventListener("pointermove", handlePointerMoveEvent);
201
+ return () => {
202
+ window.document.documentElement.removeEventListener("pointermove", handlePointerMoveEvent);
203
+ };
204
+ function handlePointerMoveEvent({ clientX, clientY }) {
205
+ dispatch(handlePointerMove({ clientX, clientY }));
206
+ }
207
+ };
208
+ }
209
+ function startHandlingFocusEvents() {
210
+ return (_dispatch, getState) => {
211
+ window.addEventListener("focusin", handleFocusIn);
212
+ window.addEventListener("focusout", handleFocusOut);
213
+ return () => {
214
+ window.removeEventListener("focusin", handleFocusIn);
215
+ window.removeEventListener("focusout", handleFocusOut);
216
+ };
217
+ function handleFocusIn(event) {
218
+ if (ReactPage.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT) {
219
+ return;
220
+ }
221
+ if (!(event.target instanceof window.HTMLElement) || !event.target.isContentEditable) {
222
+ window.parent.focus();
223
+ }
224
+ }
225
+ function handleFocusOut(event) {
226
+ if (ReactPage.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT) {
227
+ return;
228
+ }
229
+ if (!(event.relatedTarget instanceof window.HTMLElement) || !event.relatedTarget.isContentEditable) {
230
+ window.parent.focus();
231
+ }
232
+ }
233
+ };
234
+ }
235
+ function startMeasuringDocumentElement() {
236
+ return (dispatch) => {
237
+ let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest);
238
+ let lastSize;
239
+ return () => {
240
+ cancelAnimationFrame(animationFrameHandle);
241
+ };
242
+ function handleAnimationFrameRequest() {
243
+ const nextSize = getElementSize(window.document.documentElement);
244
+ if (!deepEqual(lastSize, nextSize)) {
245
+ lastSize = nextSize;
246
+ dispatch(changeDocumentElementSize(nextSize));
247
+ }
248
+ animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest);
249
+ }
250
+ };
251
+ }
252
+ function elementKeysFromElementFromPoint(elementFromPoint) {
253
+ return (_dispatch, getState) => {
254
+ if (elementFromPoint == null)
255
+ return null;
256
+ const elementImperativeHandles = getElementImperativeHandlesContainingElement(
257
+ getState(),
258
+ elementFromPoint
259
+ );
260
+ const ascendingDepthDocumentKeys = ReactPage.getDocumentKeysSortedByDepth(getState());
261
+ const descendingDepthDocumentKeys = ascendingDepthDocumentKeys.slice().reverse();
262
+ let currentElement = elementFromPoint;
263
+ let keys = null;
264
+ while (currentElement != null) {
265
+ for (const documentKey of descendingDepthDocumentKeys) {
266
+ const byElementKey = elementImperativeHandles.get(documentKey);
267
+ if (byElementKey == null)
268
+ continue;
269
+ for (const [elementKey, elementImperativeHandle] of byElementKey) {
270
+ if (elementImperativeHandle.getDomNode() === currentElement) {
271
+ return { documentKey, elementKey };
272
+ }
273
+ }
274
+ }
275
+ currentElement = currentElement.parentElement;
276
+ }
277
+ return keys;
278
+ };
279
+ }
280
+ function startPollingElementFromPoint() {
281
+ return (dispatch, getState) => {
282
+ let lastElementFromPoint = null;
283
+ let animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest);
284
+ return () => {
285
+ cancelAnimationFrame(animationFrameRequestId);
286
+ };
287
+ function handleAnimationFrameRequest() {
288
+ const pointer = getPointer(getState());
289
+ const elementFromPoint = pointer == null ? null : document.elementFromPoint(pointer.x, pointer.y);
290
+ if (elementFromPoint !== lastElementFromPoint) {
291
+ lastElementFromPoint = elementFromPoint;
292
+ const keys = dispatch(elementKeysFromElementFromPoint(elementFromPoint));
293
+ dispatch(elementFromPointChange(keys));
294
+ }
295
+ animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest);
296
+ }
297
+ };
298
+ }
299
+ function registerBuilderComponents() {
300
+ return (dispatch, getState) => {
301
+ const state = getState();
302
+ const componentsMeta = getComponentsMeta(state);
303
+ componentsMeta.forEach((meta, type) => {
304
+ const descriptors = getComponentPropControllerDescriptors(state, type);
305
+ if (descriptors != null) {
306
+ const [serializedControls, transferables] = serializeControls(descriptors);
307
+ dispatch(registerBuilderComponent({ type, meta, serializedControls }, transferables));
308
+ }
309
+ });
310
+ return () => {
311
+ componentsMeta.forEach((_, type) => {
312
+ dispatch(unregisterBuilderComponent({ type }));
313
+ });
314
+ };
315
+ };
316
+ }
317
+ function registerBuilderDocuments() {
318
+ return (dispatch, getState) => {
319
+ const documents = Documents.getDocuments(getDocumentsStateSlice(getState()));
320
+ documents.forEach((document2) => {
321
+ dispatch(registerBuilderDocument(document2));
322
+ });
323
+ return () => {
324
+ documents.forEach((_document, documentKey) => {
325
+ dispatch(unregisterBuilderDocument(documentKey));
326
+ });
327
+ };
328
+ };
329
+ }
330
+ function initialize(channel) {
331
+ return (dispatch, getState) => {
332
+ const unregisterBuilderDocuments = dispatch(registerBuilderDocuments());
333
+ const stopMeasuringElements = dispatch(startMeasuringElements());
334
+ const stopMeasuringDocumentElement = dispatch(startMeasuringDocumentElement());
335
+ const stopHandlingFocusEvent = dispatch(startHandlingFocusEvents());
336
+ const unlockDocumentScroll = dispatch(lockDocumentScroll());
337
+ const stopHandlingPointerMoveEvent = dispatch(startHandlingPointerMoveEvent());
338
+ const stopPollingElementFromPoint = dispatch(startPollingElementFromPoint());
339
+ const unregisterBuilderComponents = dispatch(registerBuilderComponents());
340
+ const breakpoints = ReactPage.getBreakpoints(getState());
341
+ dispatch(setBreakpoints(breakpoints));
342
+ dispatch(setIsInBuilder(true));
343
+ channel.dispatchBuffered();
344
+ return () => {
345
+ unregisterBuilderDocuments();
346
+ stopMeasuringElements();
347
+ stopMeasuringDocumentElement();
348
+ stopHandlingFocusEvent();
349
+ unlockDocumentScroll();
350
+ stopHandlingPointerMoveEvent();
351
+ stopPollingElementFromPoint();
352
+ unregisterBuilderComponents();
353
+ dispatch(setIsInBuilder(false));
354
+ };
355
+ };
356
+ }
357
+ function measureBoxModelsMiddleware() {
358
+ return actionMiddleware(({ dispatch }) => (next) => {
359
+ return (action) => {
360
+ switch (action.type) {
361
+ case ActionTypes.REGISTER_COMPONENT_HANDLE: {
362
+ if (BoxModels.isMeasurable(action.payload.componentHandle)) {
363
+ dispatch(
364
+ registerMeasurable(
365
+ action.payload.documentKey,
366
+ action.payload.elementKey,
367
+ action.payload.componentHandle
368
+ )
369
+ );
370
+ }
371
+ break;
372
+ }
373
+ case ActionTypes.UNREGISTER_COMPONENT_HANDLE:
374
+ dispatch(unregisterMeasurable(action.payload.documentKey, action.payload.elementKey));
375
+ break;
376
+ }
377
+ return next(action);
378
+ };
379
+ });
380
+ }
381
+ function messageChannelMiddleware(channel) {
382
+ return actionMiddleware(({ dispatch }) => (next) => {
383
+ if (typeof window === "undefined")
384
+ return (action) => next(action);
385
+ let cleanUp = () => {
386
+ };
387
+ return (action) => {
388
+ switch (action.type) {
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);
406
+ break;
407
+ }
408
+ case ActionTypes.UNREGISTER_BUILDER_COMPONENT:
409
+ channel.postMessage(action);
410
+ break;
411
+ case ActionTypes.CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP:
412
+ window.document.documentElement.scrollTop = action.payload.scrollTop;
413
+ break;
414
+ case ActionTypes.SCROLL_DOCUMENT_ELEMENT:
415
+ window.document.documentElement.scrollTop += action.payload.scrollTopDelta;
416
+ break;
417
+ case ActionTypes.SET_BUILDER_EDIT_MODE:
418
+ channel.postMessage(action);
419
+ window.getSelection()?.removeAllRanges();
420
+ break;
421
+ case ActionTypes.INIT:
422
+ cleanUp = dispatch(initialize(channel));
423
+ break;
424
+ case ActionTypes.CLEAN_UP:
425
+ cleanUp();
426
+ break;
427
+ }
428
+ return next(action);
429
+ };
430
+ });
431
+ }
432
+ function createAndRegisterPropControllers(documentKey, elementKey) {
433
+ return (dispatch, getState) => {
434
+ const descriptors = ReactPage.getElementPropControllerDescriptors(
435
+ getState(),
436
+ documentKey,
437
+ elementKey
438
+ );
439
+ if (descriptors == null)
440
+ return null;
441
+ const propControllers = Object.entries(descriptors).reduce(
442
+ (acc, [propName, descriptor]) => {
443
+ const propController = createPropController(
444
+ descriptor,
445
+ (message) => dispatch(messageBuilderPropController(documentKey, elementKey, propName, message))
446
+ );
447
+ return { ...acc, [propName]: propController };
448
+ },
449
+ {}
450
+ );
451
+ dispatch(registerPropControllers(documentKey, elementKey, propControllers));
452
+ return propControllers;
453
+ };
454
+ }
455
+ function propControllerHandlesMiddleware() {
456
+ return actionMiddleware(({ dispatch, getState }) => (next) => {
457
+ return (action) => {
458
+ switch (action.type) {
459
+ case ActionTypes.REGISTER_COMPONENT_HANDLE: {
460
+ const { documentKey, elementKey, componentHandle } = action.payload;
461
+ const element = ReactPage.getElement(getState(), documentKey, elementKey);
462
+ const propControllers = dispatch(
463
+ createAndRegisterPropControllers(documentKey, elementKey)
464
+ );
465
+ if (element != null && !ReactPage.isElementReference(element) && PropControllerHandles.isPropControllersHandle(componentHandle)) {
466
+ dispatch(registerPropControllersHandle(documentKey, elementKey, componentHandle));
467
+ componentHandle.setPropControllers(propControllers);
468
+ }
469
+ break;
470
+ }
471
+ case ActionTypes.UNREGISTER_COMPONENT_HANDLE: {
472
+ const { documentKey, elementKey } = action.payload;
473
+ const handle = PropControllerHandles.getPropControllersHandle(
474
+ getPropControllerHandlesStateSlice(getState()),
475
+ documentKey,
476
+ elementKey
477
+ );
478
+ handle?.setPropControllers(null);
479
+ dispatch(unregisterPropControllers(documentKey, elementKey));
480
+ break;
481
+ }
482
+ case ActionTypes.MESSAGE_HOST_PROP_CONTROLLER: {
483
+ const propController = PropControllerHandles.getPropController(
484
+ getPropControllerHandlesStateSlice(getState()),
485
+ action.payload.documentKey,
486
+ action.payload.elementKey,
487
+ action.payload.propName
488
+ );
489
+ if (propController)
490
+ propController.recv(action.payload.message);
491
+ }
492
+ }
493
+ return next(action);
494
+ };
495
+ });
496
+ }
497
+ function makeswiftApiClientSyncMiddleware(client) {
498
+ return actionMiddleware(() => (next) => {
499
+ return (action) => {
500
+ client.makeswiftApiClient.dispatch(action);
501
+ return next(action);
502
+ };
503
+ });
504
+ }
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) {
536
+ return (dispatch) => {
537
+ channel.setup((event) => dispatch(event.data));
538
+ };
539
+ }
540
+ function configureStore({
541
+ preloadedState,
542
+ client
543
+ }) {
544
+ const initialState = {
545
+ ...preloadedState,
546
+ isPreview: IsPreview.getInitialState(true)
547
+ };
548
+ const channel = new MessageChannel();
549
+ const store = configureReduxStore({
550
+ reducer,
551
+ preloadedState: initialState,
552
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat(
553
+ ReactPage.elementTreeMiddleware(),
554
+ measureBoxModelsMiddleware(),
555
+ messageChannelMiddleware(channel),
556
+ propControllerHandlesMiddleware(),
557
+ makeswiftApiClientSyncMiddleware(client)
558
+ ),
559
+ enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(
560
+ withSetupTeardown(
561
+ () => {
562
+ const dispatch = store.dispatch;
563
+ dispatch(setupMessageChannel(channel));
564
+ },
565
+ () => channel.teardown()
566
+ )
567
+ ),
568
+ devTools: devToolsConfig({
569
+ name: `Host store (${(/* @__PURE__ */ new Date()).toISOString()})`,
570
+ actionsDenylist: [
571
+ ActionTypes.BUILDER_POINTER_MOVE,
572
+ ActionTypes.HANDLE_POINTER_MOVE,
573
+ ActionTypes.ELEMENT_FROM_POINT_CHANGE
574
+ ]
575
+ })
576
+ });
577
+ return store;
578
+ }
579
+ export {
580
+ configureStore,
581
+ createBox,
582
+ getBox,
583
+ initialize,
584
+ messageChannelMiddleware,
585
+ parse,
586
+ propControllerHandlesMiddleware,
587
+ reducer,
588
+ startMeasuringElements
589
+ };
590
+ //# sourceMappingURL=react-builder-preview.js.map