@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 @@
1
+ {"version":3,"sources":["../../../src/state/react-builder-preview.ts"],"sourcesContent":["import {\n configureStore as configureReduxStore,\n combineReducers,\n type Middleware,\n type ThunkAction,\n type ThunkDispatch,\n} from '@reduxjs/toolkit'\n\nimport { ControlInstance } from '@makeswift/controls'\n\nimport deepEqual from '../utils/deepEqual'\n\nimport * as Documents from './modules/read-write-documents'\nimport * as ElementTrees from './modules/element-trees'\nimport * as ReactComponents from './modules/react-components'\nimport * as BoxModels from './modules/box-models'\nimport * as ComponentsMeta from './modules/components-meta'\nimport * as PropControllers from './modules/prop-controllers'\nimport * as PropControllerHandles from './modules/prop-controller-handles'\nimport * as IsInBuilder from './modules/is-in-builder'\nimport * as IsPreview from './modules/is-preview'\nimport * as BuilderEditMode from './modules/builder-edit-mode'\nimport * as Pointer from './modules/pointer'\nimport * as ElementImperativeHandles from './modules/element-imperative-handles'\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { withSetupTeardown } from './mixins/setup-teardown'\n\nimport * as ReactPage from './react-page'\nimport {\n type Action,\n ActionTypes,\n changeDocumentElementSize,\n changeElementBoxModels,\n elementFromPointChange,\n handleWheel,\n handlePointerMove,\n messageBuilderPropController,\n registerBuilderComponent,\n registerMeasurable,\n registerPropControllers,\n registerPropControllersHandle,\n setBreakpoints,\n setIsInBuilder,\n unregisterBuilderComponent,\n unregisterBuilderDocument,\n unregisterMeasurable,\n unregisterPropControllers,\n registerBuilderDocument,\n} from './actions'\n\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\n\nimport { createPropController } from '../prop-controllers/instances'\nimport { serializeControls } from '../builder'\nimport { MakeswiftHostApiClient } from '../api/react'\nimport { ElementImperativeHandle } from '../runtimes/react/element-imperative-handle'\n\nexport type { Operation } from './modules/read-write-documents'\nexport type { BoxModelHandle } from './modules/box-models'\nexport { createBox, getBox, parse } from './modules/box-models'\n\nexport const reducer = combineReducers({\n documents: Documents.reducer,\n elementTrees: ElementTrees.reducer,\n reactComponents: ReactComponents.reducer,\n boxModels: BoxModels.reducer,\n componentsMeta: ComponentsMeta.reducer,\n propControllers: PropControllers.reducer,\n propControllerHandles: PropControllerHandles.reducer,\n isInBuilder: IsInBuilder.reducer,\n isPreview: IsPreview.reducer,\n builderEditMode: BuilderEditMode.reducer,\n pointer: Pointer.reducer,\n elementImperativeHandles: ElementImperativeHandles.reducer,\n breakpoints: Breakpoints.reducer,\n})\n\nexport type State = ReturnType<typeof reducer>\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nfunction getBoxModelsStateSlice(state: State): BoxModels.State {\n return state.boxModels\n}\n\nfunction getMeasurables(state: State): Map<string, Map<string, BoxModels.Measurable>> {\n return BoxModels.getMeasurables(getBoxModelsStateSlice(state))\n}\n\nfunction getBoxModels(state: State): Map<string, Map<string, BoxModels.BoxModel>> {\n return BoxModels.getBoxModels(getBoxModelsStateSlice(state))\n}\n\nfunction getBoxModel(\n state: State,\n documentKey: string,\n elementKey: string,\n): BoxModels.BoxModel | null {\n return BoxModels.getBoxModel(getBoxModelsStateSlice(state), documentKey, elementKey)\n}\n\nfunction getComponentsMetaStateSlice(state: State): ComponentsMeta.State {\n return state.componentsMeta\n}\n\nfunction getComponentsMeta(state: State): Map<string, ComponentsMeta.ComponentMeta> {\n return ComponentsMeta.getComponentsMeta(getComponentsMetaStateSlice(state))\n}\n\nfunction getPropControllersStateSlice(state: State): PropControllers.State {\n return state.propControllers\n}\n\nfunction getComponentPropControllerDescriptors(\n state: State,\n componentType: string,\n): Record<string, PropControllers.PropControllerDescriptor> | null {\n return PropControllers.getComponentPropControllerDescriptors(\n getPropControllersStateSlice(state),\n componentType,\n )\n}\n\nfunction getPropControllerHandlesStateSlice(state: State): PropControllerHandles.State {\n return state.propControllerHandles\n}\n\nfunction getPointer(state: State): Pointer.Point | null {\n return Pointer.getPointer(state.pointer)\n}\n\nfunction getElementImperativeHandles(\n state: State,\n): Map<string, Map<string, ElementImperativeHandle>> {\n return ElementImperativeHandles.getElementImperativeHandles(state.elementImperativeHandles)\n}\n\nfunction getElementImperativeHandlesContainingElement(\n state: State,\n element: Element,\n): Map<string, Map<string, ElementImperativeHandle>> {\n const elementImperativeHandles = getElementImperativeHandles(state)\n const filteredElementImperativeHandles = new Map<string, Map<string, ElementImperativeHandle>>()\n\n for (const [documentKey, byElementKey] of elementImperativeHandles) {\n const filteredByElementKey = new Map<string, ElementImperativeHandle>()\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n const handleElement = elementImperativeHandle.getDomNode()\n\n if (handleElement?.contains(element)) {\n filteredByElementKey.set(elementKey, elementImperativeHandle)\n }\n }\n\n if (filteredByElementKey.size > 0) {\n filteredElementImperativeHandles.set(documentKey, filteredByElementKey)\n }\n }\n\n return filteredElementImperativeHandles\n}\n\nfunction measureElements(): ThunkAction<void, State, unknown, Action> {\n return (dispatch, getState) => {\n const measurables = getMeasurables(getState())\n const currentBoxModels = getBoxModels(getState())\n const measuredBoxModels = new Map<string, Map<string, BoxModels.BoxModel>>()\n\n measurables.forEach((documentMeasurables, documentKey) => {\n const measuredDocumentBoxModels = new Map<string, BoxModels.BoxModel>()\n\n documentMeasurables.forEach((measurable, elementKey) => {\n const boxModel = BoxModels.measure(measurable)\n\n if (boxModel != null) measuredDocumentBoxModels.set(elementKey, boxModel)\n })\n\n if (measuredDocumentBoxModels.size > 0) {\n measuredBoxModels.set(documentKey, measuredDocumentBoxModels)\n }\n })\n\n const changedBoxModels = new Map<string, Map<string, BoxModels.BoxModel | null>>()\n\n currentBoxModels.forEach((currentDocumentBoxModels, documentKey) => {\n const changedDocumentBoxModels = new Map<string, BoxModels.BoxModel | null>()\n\n currentDocumentBoxModels.forEach((_boxModel, elementKey) => {\n if (!measuredBoxModels.get(documentKey)?.has(elementKey)) {\n changedDocumentBoxModels.set(elementKey, null)\n }\n\n if (changedDocumentBoxModels.size > 0) {\n changedBoxModels.set(documentKey, changedDocumentBoxModels)\n }\n })\n })\n\n measuredBoxModels.forEach((measuredDocumentBoxModels, documentKey) => {\n const changedDocumentBoxModels = new Map<string, BoxModels.BoxModel | null>()\n\n measuredDocumentBoxModels.forEach((measuredBoxModel, elementKey) => {\n const currentBoxModel = getBoxModel(getState(), documentKey, elementKey)\n\n if (currentBoxModel == null || !deepEqual(currentBoxModel, measuredBoxModel)) {\n changedDocumentBoxModels.set(elementKey, measuredBoxModel)\n }\n })\n\n if (changedDocumentBoxModels.size > 0) {\n changedBoxModels.set(documentKey, changedDocumentBoxModels)\n }\n })\n\n if (changedBoxModels.size > 0) dispatch(changeElementBoxModels(changedBoxModels))\n }\n}\n\nexport function startMeasuringElements(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n\n return () => {\n cancelAnimationFrame(animationFrameHandle)\n }\n\n function handleAnimationFrameRequest() {\n dispatch(measureElements())\n\n animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nexport type Size = {\n offsetWidth: number\n offsetHeight: number\n clientWidth: number\n clientHeight: number\n scrollWidth: number\n scrollHeight: number\n scrollTop: number\n scrollLeft: number\n}\n\nfunction getElementSize(element: HTMLElement): Size {\n return {\n offsetWidth: element.offsetWidth,\n offsetHeight: element.offsetHeight,\n clientWidth: element.clientWidth,\n clientHeight: element.clientHeight,\n scrollWidth: element.scrollWidth,\n scrollHeight: element.scrollHeight,\n scrollTop: element.scrollTop,\n scrollLeft: element.scrollLeft,\n }\n}\n\nfunction lockDocumentScroll(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n const lastDocumentOverflow = window.document.documentElement.style.overflow\n window.document.documentElement.style.overflow = 'hidden'\n\n window.document.documentElement.addEventListener('wheel', handleWheelEvent)\n\n return () => {\n window.document.documentElement.style.overflow = lastDocumentOverflow\n window.document.documentElement.removeEventListener('wheel', handleWheelEvent)\n }\n\n function handleWheelEvent({ deltaX, deltaY }: WheelEvent) {\n dispatch(handleWheel({ deltaX, deltaY }))\n }\n }\n}\n\nfunction startHandlingPointerMoveEvent(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n window.document.documentElement.addEventListener('pointermove', handlePointerMoveEvent)\n\n return () => {\n window.document.documentElement.removeEventListener('pointermove', handlePointerMoveEvent)\n }\n\n function handlePointerMoveEvent({ clientX, clientY }: PointerEvent) {\n dispatch(handlePointerMove({ clientX, clientY }))\n }\n }\n}\n\nfunction startHandlingFocusEvents(): ThunkAction<() => void, State, unknown, Action> {\n return (_dispatch, getState) => {\n window.addEventListener('focusin', handleFocusIn)\n window.addEventListener('focusout', handleFocusOut)\n\n return () => {\n window.removeEventListener('focusin', handleFocusIn)\n window.removeEventListener('focusout', handleFocusOut)\n }\n\n function handleFocusIn(event: FocusEvent) {\n if (ReactPage.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT) {\n return\n }\n\n if (!(event.target instanceof window.HTMLElement) || !event.target.isContentEditable) {\n window.parent.focus()\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (ReactPage.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT) {\n return\n }\n\n if (\n !(event.relatedTarget instanceof window.HTMLElement) ||\n !event.relatedTarget.isContentEditable\n ) {\n window.parent.focus()\n }\n }\n }\n}\n\nfunction startMeasuringDocumentElement(): ThunkAction<() => void, unknown, unknown, Action> {\n return dispatch => {\n let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n let lastSize: Size\n\n return () => {\n cancelAnimationFrame(animationFrameHandle)\n }\n\n function handleAnimationFrameRequest() {\n const nextSize = getElementSize(window.document.documentElement)\n\n if (!deepEqual(lastSize, nextSize)) {\n lastSize = nextSize\n\n dispatch(changeDocumentElementSize(nextSize))\n }\n\n animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction elementKeysFromElementFromPoint(\n elementFromPoint: Element | null,\n): ThunkAction<{ documentKey: string; elementKey: string } | null, State, unknown, Action> {\n return (_dispatch, getState) => {\n if (elementFromPoint == null) return null\n\n const elementImperativeHandles = getElementImperativeHandlesContainingElement(\n getState(),\n elementFromPoint,\n )\n const ascendingDepthDocumentKeys = ReactPage.getDocumentKeysSortedByDepth(getState())\n const descendingDepthDocumentKeys = ascendingDepthDocumentKeys.slice().reverse()\n\n let currentElement: Element | null = elementFromPoint\n let keys = null\n\n while (currentElement != null) {\n for (const documentKey of descendingDepthDocumentKeys) {\n const byElementKey = elementImperativeHandles.get(documentKey)\n\n if (byElementKey == null) continue\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n if (elementImperativeHandle.getDomNode() === currentElement) {\n return { documentKey, elementKey }\n }\n }\n }\n\n currentElement = currentElement.parentElement\n }\n\n return keys\n }\n}\n\nfunction startPollingElementFromPoint(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n let lastElementFromPoint: Element | null = null\n let animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest)\n\n return () => {\n cancelAnimationFrame(animationFrameRequestId)\n }\n\n function handleAnimationFrameRequest() {\n const pointer = getPointer(getState())\n const elementFromPoint =\n pointer == null ? null : document.elementFromPoint(pointer.x, pointer.y)\n\n if (elementFromPoint !== lastElementFromPoint) {\n lastElementFromPoint = elementFromPoint\n\n const keys = dispatch(elementKeysFromElementFromPoint(elementFromPoint))\n\n dispatch(elementFromPointChange(keys))\n }\n\n animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction registerBuilderComponents(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const state = getState()\n const componentsMeta = getComponentsMeta(state)\n\n componentsMeta.forEach((meta, type) => {\n const descriptors = getComponentPropControllerDescriptors(state, type)\n if (descriptors != null) {\n const [serializedControls, transferables] = serializeControls(descriptors)\n dispatch(registerBuilderComponent({ type, meta, serializedControls }, transferables))\n }\n })\n\n return () => {\n componentsMeta.forEach((_, type) => {\n dispatch(unregisterBuilderComponent({ type }))\n })\n }\n }\n}\n\nfunction registerBuilderDocuments(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const documents = Documents.getDocuments(getDocumentsStateSlice(getState()))\n\n documents.forEach(document => {\n dispatch(registerBuilderDocument(document))\n })\n\n return () => {\n documents.forEach((_document, documentKey) => {\n dispatch(unregisterBuilderDocument(documentKey))\n })\n }\n }\n}\n\nexport interface IMessageChannel {\n postMessage(message: any, transferables?: Transferable[]): void\n dispatchBuffered(): void\n}\n\nexport function initialize(\n channel: IMessageChannel,\n): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const unregisterBuilderDocuments = dispatch(registerBuilderDocuments())\n const stopMeasuringElements = dispatch(startMeasuringElements())\n const stopMeasuringDocumentElement = dispatch(startMeasuringDocumentElement())\n const stopHandlingFocusEvent = dispatch(startHandlingFocusEvents())\n const unlockDocumentScroll = dispatch(lockDocumentScroll())\n const stopHandlingPointerMoveEvent = dispatch(startHandlingPointerMoveEvent())\n const stopPollingElementFromPoint = dispatch(startPollingElementFromPoint())\n const unregisterBuilderComponents = dispatch(registerBuilderComponents())\n\n const breakpoints = ReactPage.getBreakpoints(getState())\n dispatch(setBreakpoints(breakpoints))\n dispatch(setIsInBuilder(true))\n channel.dispatchBuffered()\n\n return () => {\n unregisterBuilderDocuments()\n stopMeasuringElements()\n stopMeasuringDocumentElement()\n stopHandlingFocusEvent()\n unlockDocumentScroll()\n stopHandlingPointerMoveEvent()\n stopPollingElementFromPoint()\n unregisterBuilderComponents()\n dispatch(setIsInBuilder(false))\n }\n }\n}\n\nfunction measureBoxModelsMiddleware(): Middleware<Dispatch, State, Dispatch> {\n return actionMiddleware(({ dispatch }) => next => {\n return (action: Action) => {\n switch (action.type) {\n case ActionTypes.REGISTER_COMPONENT_HANDLE: {\n if (BoxModels.isMeasurable(action.payload.componentHandle)) {\n dispatch(\n registerMeasurable(\n action.payload.documentKey,\n action.payload.elementKey,\n action.payload.componentHandle,\n ),\n )\n }\n\n break\n }\n\n case ActionTypes.UNREGISTER_COMPONENT_HANDLE:\n dispatch(unregisterMeasurable(action.payload.documentKey, action.payload.elementKey))\n break\n }\n\n return next(action)\n }\n })\n}\n\nexport function messageChannelMiddleware(\n channel: IMessageChannel,\n): Middleware<Dispatch, State, Dispatch> {\n return actionMiddleware(({ dispatch }) => next => {\n if (typeof window === 'undefined') return (action: Action) => next(action)\n\n let cleanUp = () => {}\n return (action: Action) => {\n switch (action.type) {\n case ActionTypes.CHANGE_ELEMENT_BOX_MODELS:\n case ActionTypes.MOUNT_COMPONENT:\n case ActionTypes.UNMOUNT_COMPONENT:\n case ActionTypes.CHANGE_DOCUMENT_ELEMENT_SIZE:\n case ActionTypes.MESSAGE_BUILDER_PROP_CONTROLLER:\n case ActionTypes.HANDLE_WHEEL:\n case ActionTypes.HANDLE_POINTER_MOVE:\n case ActionTypes.ELEMENT_FROM_POINT_CHANGE:\n case ActionTypes.SET_LOCALE:\n case ActionTypes.SET_BREAKPOINTS:\n case ActionTypes.REGISTER_BUILDER_DOCUMENT:\n case ActionTypes.UNREGISTER_BUILDER_DOCUMENT:\n channel.postMessage(action)\n break\n\n case ActionTypes.REGISTER_BUILDER_COMPONENT: {\n const { transferables, ...forwardedAction } = action\n channel.postMessage(forwardedAction, transferables)\n break\n }\n\n case ActionTypes.UNREGISTER_BUILDER_COMPONENT:\n channel.postMessage(action)\n break\n\n case ActionTypes.CHANGE_DOCUMENT_ELEMENT_SCROLL_TOP:\n window.document.documentElement.scrollTop = action.payload.scrollTop\n break\n\n case ActionTypes.SCROLL_DOCUMENT_ELEMENT:\n window.document.documentElement.scrollTop += action.payload.scrollTopDelta\n break\n\n case ActionTypes.SET_BUILDER_EDIT_MODE:\n channel.postMessage(action)\n window.getSelection()?.removeAllRanges()\n break\n\n case ActionTypes.INIT:\n // dispatched by the parent window after establishing the connection\n cleanUp = dispatch(initialize(channel))\n break\n\n case ActionTypes.CLEAN_UP:\n // dispatched by the parent window on disconnect\n cleanUp()\n break\n }\n\n return next(action)\n }\n })\n}\n\nfunction createAndRegisterPropControllers(\n documentKey: string,\n elementKey: string,\n): ThunkAction<Record<string, ControlInstance> | null, State, unknown, Action> {\n return (dispatch, getState) => {\n const descriptors = ReactPage.getElementPropControllerDescriptors(\n getState(),\n documentKey,\n elementKey,\n )\n\n if (descriptors == null) return null\n\n const propControllers = Object.entries(descriptors).reduce(\n (acc, [propName, descriptor]) => {\n const propController = createPropController(descriptor, message =>\n dispatch(messageBuilderPropController(documentKey, elementKey, propName, message)),\n ) as ControlInstance\n\n return { ...acc, [propName]: propController }\n },\n {} as Record<string, ControlInstance>,\n )\n\n dispatch(registerPropControllers(documentKey, elementKey, propControllers))\n\n return propControllers\n }\n}\n\nexport function propControllerHandlesMiddleware(): Middleware<Dispatch, State, Dispatch> {\n return actionMiddleware(({ dispatch, getState }) => next => {\n return (action: Action) => {\n switch (action.type) {\n case ActionTypes.REGISTER_COMPONENT_HANDLE: {\n const { documentKey, elementKey, componentHandle } = action.payload\n const element = ReactPage.getElement(getState(), documentKey, elementKey)\n const propControllers = dispatch(\n createAndRegisterPropControllers(documentKey, elementKey),\n )\n\n if (\n element != null &&\n !ReactPage.isElementReference(element) &&\n PropControllerHandles.isPropControllersHandle(componentHandle)\n ) {\n dispatch(registerPropControllersHandle(documentKey, elementKey, componentHandle))\n componentHandle.setPropControllers(propControllers)\n }\n\n break\n }\n\n case ActionTypes.UNREGISTER_COMPONENT_HANDLE: {\n const { documentKey, elementKey } = action.payload\n const handle = PropControllerHandles.getPropControllersHandle(\n getPropControllerHandlesStateSlice(getState()),\n documentKey,\n elementKey,\n )\n\n handle?.setPropControllers(null)\n\n dispatch(unregisterPropControllers(documentKey, elementKey))\n\n break\n }\n\n case ActionTypes.MESSAGE_HOST_PROP_CONTROLLER: {\n const propController = PropControllerHandles.getPropController(\n getPropControllerHandlesStateSlice(getState()),\n action.payload.documentKey,\n action.payload.elementKey,\n action.payload.propName,\n )\n\n if (propController) propController.recv(action.payload.message)\n }\n }\n\n return next(action)\n }\n })\n}\n\nfunction makeswiftApiClientSyncMiddleware(\n client: MakeswiftHostApiClient,\n): Middleware<Dispatch, State, Dispatch> {\n return actionMiddleware(() => next => {\n return (action: Action) => {\n client.makeswiftApiClient.dispatch(action)\n\n return next(action)\n }\n })\n}\n\nclass MessageChannel {\n private channel: MessagePort | null = null\n private bufferedMessages: [Action, Transferable[]?][] = []\n\n public postMessage(message: any, transferables?: Transferable[]) {\n if (this.channel) {\n this.channel.postMessage(message, transferables ?? [])\n } else {\n this.bufferedMessages.push([message, transferables])\n }\n }\n\n public setup(onMessage: (event: MessageEvent<Action>) => void) {\n const channel = new window.MessageChannel()\n channel.port1.onmessage = onMessage\n\n // connect channel to the parent window, see\n // https://developer.mozilla.org/en-US/docs/Web/API/Channel_Messaging_API\n window.parent.postMessage(channel.port2, '*', [channel.port2])\n\n this.channel = channel.port1\n }\n\n public dispatchBuffered() {\n console.assert(this.channel != null, 'channel is not setup')\n\n this.bufferedMessages.forEach(([message, transferables]) => {\n this.channel?.postMessage(message, transferables ?? [])\n })\n\n this.bufferedMessages = []\n }\n\n public teardown() {\n if (this.channel) {\n this.channel.onmessage = null\n this.channel.close()\n }\n }\n}\n\nfunction setupMessageChannel(channel: MessageChannel): ThunkAction<void, State, unknown, Action> {\n return dispatch => {\n channel.setup((event: MessageEvent<Action>) => dispatch(event.data))\n }\n}\n\nexport function configureStore({\n preloadedState,\n client,\n}: {\n preloadedState: Partial<State>\n client: MakeswiftHostApiClient\n}) {\n const initialState: Partial<State> = {\n ...preloadedState,\n isPreview: IsPreview.getInitialState(true),\n }\n\n const channel = new MessageChannel()\n const store = configureReduxStore({\n reducer,\n preloadedState: initialState,\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat(\n ReactPage.elementTreeMiddleware(),\n measureBoxModelsMiddleware(),\n messageChannelMiddleware(channel),\n propControllerHandlesMiddleware(),\n makeswiftApiClientSyncMiddleware(client),\n ),\n\n enhancers: getDefaultEnhancers =>\n getDefaultEnhancers().concat(\n withSetupTeardown(\n () => {\n const dispatch = store.dispatch as Dispatch\n dispatch(setupMessageChannel(channel))\n },\n () => channel.teardown(),\n ),\n ),\n\n devTools: devToolsConfig({\n name: `Host store (${new Date().toISOString()})`,\n actionsDenylist: [\n ActionTypes.BUILDER_POINTER_MOVE,\n ActionTypes.HANDLE_POINTER_MOVE,\n ActionTypes.ELEMENT_FROM_POINT_CHANGE,\n ],\n }),\n })\n\n return store\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":"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","names":["import_toolkit","deepEqual","document","configureReduxStore"]}
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var react_page_exports = {};
30
+ __export(react_page_exports, {
31
+ configureStore: () => configureStore,
32
+ copyElementTree: () => copyElementTree,
33
+ createBaseDocument: () => import_read_only_documents.createBaseDocument,
34
+ createDocumentReference: () => import_read_only_documents.createDocumentReference,
35
+ elementTreeMiddleware: () => elementTreeMiddleware,
36
+ getBreakpoints: () => getBreakpoints,
37
+ getBuilderEditMode: () => getBuilderEditMode,
38
+ getComponentPropControllerDescriptors: () => getComponentPropControllerDescriptors,
39
+ getDocument: () => getDocument,
40
+ getDocumentKeysSortedByDepth: () => getDocumentKeysSortedByDepth,
41
+ getElement: () => getElement,
42
+ getElementId: () => getElementId,
43
+ getElementIds: () => getElementIds,
44
+ getElementPropControllerDescriptors: () => getElementPropControllerDescriptors,
45
+ getElementTreeTranslatableData: () => getElementTreeTranslatableData,
46
+ getElements: () => getElements,
47
+ getIsInBuilder: () => getIsInBuilder,
48
+ getIsPreview: () => getIsPreview,
49
+ getPropControllerDescriptors: () => getPropControllerDescriptors,
50
+ getPropControllers: () => getPropControllers,
51
+ getReactComponent: () => getReactComponent,
52
+ getRootElement: () => import_read_only_documents.getRootElement,
53
+ isElementReference: () => import_read_only_documents.isElementReference,
54
+ mergeElement: () => mergeElement,
55
+ mergeElementTreeTranslatedData: () => mergeElementTreeTranslatedData
56
+ });
57
+ module.exports = __toCommonJS(react_page_exports);
58
+ var import_toolkit = require("@reduxjs/toolkit");
59
+ var import_reselect = require("reselect");
60
+ var import_controls = require("@makeswift/controls");
61
+ var Documents = __toESM(require("./modules/read-only-documents"));
62
+ var ElementTrees = __toESM(require("./modules/element-trees"));
63
+ var ReactComponents = __toESM(require("./modules/react-components"));
64
+ var ComponentsMeta = __toESM(require("./modules/components-meta"));
65
+ var PropControllers = __toESM(require("./modules/prop-controllers"));
66
+ var PropControllerHandles = __toESM(require("./modules/prop-controller-handles"));
67
+ var IsInBuilder = __toESM(require("./modules/is-in-builder"));
68
+ var IsPreview = __toESM(require("./modules/is-preview"));
69
+ var BuilderEditMode = __toESM(require("./modules/builder-edit-mode"));
70
+ var Breakpoints = __toESM(require("./modules/breakpoints"));
71
+ var import_actions = require("./actions");
72
+ var import_control = require("../controls/control");
73
+ var import_toolkit2 = require("./toolkit");
74
+ var import_setup_teardown = require("./mixins/setup-teardown");
75
+ var import_read_only_documents = require("./modules/read-only-documents");
76
+ const reducer = (0, import_toolkit.combineReducers)({
77
+ documents: Documents.reducer,
78
+ elementTrees: ElementTrees.reducer,
79
+ reactComponents: ReactComponents.reducer,
80
+ componentsMeta: ComponentsMeta.reducer,
81
+ propControllers: PropControllers.reducer,
82
+ propControllerHandles: PropControllerHandles.reducer,
83
+ isInBuilder: IsInBuilder.reducer,
84
+ isPreview: IsPreview.reducer,
85
+ builderEditMode: BuilderEditMode.reducer,
86
+ breakpoints: Breakpoints.reducer
87
+ });
88
+ function getDocumentsStateSlice(state) {
89
+ return state.documents;
90
+ }
91
+ function getDocument(state, documentKey) {
92
+ return Documents.getDocument(getDocumentsStateSlice(state), documentKey);
93
+ }
94
+ function getElementTreesSlice(state) {
95
+ return state.elementTrees;
96
+ }
97
+ function getElements(state, documentKey) {
98
+ return ElementTrees.getElements(getElementTreesSlice(state), documentKey);
99
+ }
100
+ function getElementIds(state, documentKey) {
101
+ return ElementTrees.getElementIds(getElementTreesSlice(state), documentKey);
102
+ }
103
+ function getReactComponentsStateSlice(state) {
104
+ return state.reactComponents;
105
+ }
106
+ function getReactComponent(state, type) {
107
+ return ReactComponents.getReactComponent(getReactComponentsStateSlice(state), type);
108
+ }
109
+ function getPropControllersStateSlice(state) {
110
+ return state.propControllers;
111
+ }
112
+ function getPropControllerDescriptors(state) {
113
+ return PropControllers.getPropControllerDescriptors(getPropControllersStateSlice(state));
114
+ }
115
+ function getComponentPropControllerDescriptors(state, componentType) {
116
+ return PropControllers.getComponentPropControllerDescriptors(
117
+ getPropControllersStateSlice(state),
118
+ componentType
119
+ );
120
+ }
121
+ function getPropControllerHandlesStateSlice(state) {
122
+ return state.propControllerHandles;
123
+ }
124
+ function getPropControllers(state, documentKey, elementKey) {
125
+ return PropControllerHandles.getPropControllers(
126
+ getPropControllerHandlesStateSlice(state),
127
+ documentKey,
128
+ elementKey
129
+ );
130
+ }
131
+ const getDocumentKeysSortedByDepth = (0, import_reselect.createSelector)(
132
+ [getDocumentsStateSlice, getElementTreesSlice],
133
+ (documents, elementTrees) => {
134
+ return [...documents.keys()].sort((a, b) => elementTrees.get(a)?.elements.has(b) ? -1 : 1);
135
+ }
136
+ );
137
+ function getElement(state, documentKey, elementKey) {
138
+ return ElementTrees.getElement(getElementTreesSlice(state), documentKey, elementKey);
139
+ }
140
+ function getElementId(state, documentKey, elementKey) {
141
+ return ElementTrees.getElementId(getElementTreesSlice(state), documentKey, elementKey);
142
+ }
143
+ function getElementPropControllerDescriptors(state, documentKey, elementKey) {
144
+ const element = getElement(state, documentKey, elementKey);
145
+ if (element == null || Documents.isElementReference(element))
146
+ return null;
147
+ return getComponentPropControllerDescriptors(state, element.type);
148
+ }
149
+ function copyElementTree(state, elementTree, replacementContext) {
150
+ function copyElementTreeNode(state2, replacementContext2) {
151
+ return function(node) {
152
+ const context = {
153
+ replacementContext: replacementContext2,
154
+ copyElement: copyElementTreeNode(state2, replacementContext2)
155
+ };
156
+ if (Documents.isElementReference(node)) {
157
+ return {
158
+ ...node,
159
+ value: (0, import_controls.replaceResourceIfNeeded)(import_controls.ContextResource.GlobalElement, node.value, context)
160
+ };
161
+ }
162
+ const descriptors = getComponentPropControllerDescriptors(state2, node.type);
163
+ if (descriptors == null)
164
+ return node;
165
+ for (const [propKey, descriptor] of Object.entries(descriptors)) {
166
+ node.props[propKey] = (0, import_control.copy)(descriptor, node.props[propKey], context);
167
+ }
168
+ return node;
169
+ };
170
+ }
171
+ const copy = JSON.parse(JSON.stringify(elementTree));
172
+ return copyElementTreeNode(state, (0, import_controls.createReplacementContext)(replacementContext))(copy);
173
+ }
174
+ function getElementTreeTranslatableData(state, elementTree) {
175
+ const translatableData = {};
176
+ const descriptors = getPropControllerDescriptors(state);
177
+ for (const element of ElementTrees.traverseElementTree(elementTree, descriptors)) {
178
+ if (Documents.isElementReference(element))
179
+ continue;
180
+ const elementPescriptors = descriptors.get(element.type);
181
+ if (elementPescriptors == null)
182
+ continue;
183
+ Object.entries(elementPescriptors).forEach(([propName, descriptor]) => {
184
+ const translatablePropData = (0, import_control.getTranslatableData)(descriptor, element.props[propName]);
185
+ if (translatablePropData != null) {
186
+ translatableData[`${element.key}:${propName}`] = translatablePropData;
187
+ }
188
+ });
189
+ }
190
+ return translatableData;
191
+ }
192
+ function mergeElementTreeTranslatedData(state, elementTree, translatedData) {
193
+ function merge2(state2, translatedData2) {
194
+ return function(node) {
195
+ if (Documents.isElementReference(node))
196
+ return node;
197
+ const elementDescriptors = getPropControllerDescriptors(state2);
198
+ const descriptors = elementDescriptors.get(node.type);
199
+ if (descriptors == null) {
200
+ throw new Error(`Can't merge element of type "${node.type}" because it has no descriptors`);
201
+ }
202
+ const context = {
203
+ translatedData: translatedData2,
204
+ mergeTranslatedData: merge2(state2, translatedData2)
205
+ };
206
+ const props = {};
207
+ for (const propName of Object.keys(descriptors)) {
208
+ const descriptor = descriptors[propName];
209
+ props[propName] = (0, import_control.mergeTranslatedData)(
210
+ descriptor,
211
+ node.props[propName],
212
+ translatedData2[`${node.key}:${propName}`],
213
+ context
214
+ );
215
+ }
216
+ return { ...node, props };
217
+ };
218
+ }
219
+ return merge2(state, translatedData)(elementTree);
220
+ }
221
+ function mergeElement(state, baseElement, overrideElement) {
222
+ if (baseElement.type !== overrideElement.type || baseElement.key !== overrideElement.key) {
223
+ throw new Error(`Can't merge elements of different types or keys`);
224
+ }
225
+ if (Documents.isElementReference(overrideElement))
226
+ return overrideElement;
227
+ if (Documents.isElementReference(baseElement))
228
+ return baseElement;
229
+ const elementDescriptors = getPropControllerDescriptors(state);
230
+ const descriptors = elementDescriptors.get(baseElement.type);
231
+ if (descriptors == null) {
232
+ throw new Error(
233
+ `Can't merge element of type "${baseElement.type}" because it has no descriptors`
234
+ );
235
+ }
236
+ const mergedProps = {};
237
+ for (const propName of Object.keys(descriptors)) {
238
+ const descriptor = descriptors[propName];
239
+ const context = {
240
+ mergeElement(base, override) {
241
+ return mergeElement(state, base, override);
242
+ }
243
+ };
244
+ mergedProps[propName] = (0, import_control.merge)(
245
+ descriptor,
246
+ baseElement.props[propName],
247
+ overrideElement.props[propName],
248
+ context
249
+ );
250
+ }
251
+ return { ...baseElement, props: mergedProps };
252
+ }
253
+ function getIsInBuilder(state) {
254
+ return state.isInBuilder;
255
+ }
256
+ function getIsPreview(state) {
257
+ return IsPreview.getIsPreview(state.isPreview);
258
+ }
259
+ function getBuilderEditMode(state) {
260
+ return state.builderEditMode;
261
+ }
262
+ function getBreakpoints(state) {
263
+ return state.breakpoints;
264
+ }
265
+ function elementTreeMiddleware() {
266
+ return (0, import_toolkit2.actionMiddleware)(({ dispatch, getState }) => (next) => {
267
+ return (action) => {
268
+ switch (action.type) {
269
+ case import_actions.ActionTypes.REGISTER_DOCUMENT:
270
+ dispatch(
271
+ (0, import_actions.createElementTree)({
272
+ document: action.payload.document,
273
+ descriptors: getPropControllerDescriptors(getState())
274
+ })
275
+ );
276
+ break;
277
+ case import_actions.ActionTypes.CHANGE_DOCUMENT: {
278
+ const { documentKey, operation } = action.payload;
279
+ const oldDocument = getDocument(getState(), documentKey);
280
+ const result = next(action);
281
+ const newDocument = getDocument(getState(), documentKey);
282
+ if (oldDocument != null && newDocument != null && newDocument !== oldDocument) {
283
+ dispatch(
284
+ (0, import_actions.changeElementTree)({
285
+ oldDocument,
286
+ newDocument,
287
+ descriptors: getPropControllerDescriptors(getState()),
288
+ operation
289
+ })
290
+ );
291
+ }
292
+ return result;
293
+ }
294
+ case import_actions.ActionTypes.UNREGISTER_DOCUMENT:
295
+ dispatch((0, import_actions.deleteElementTree)(action.payload));
296
+ break;
297
+ }
298
+ return next(action);
299
+ };
300
+ });
301
+ }
302
+ function configureStore({
303
+ name,
304
+ preloadedState,
305
+ breakpoints
306
+ }) {
307
+ return (0, import_toolkit.configureStore)({
308
+ reducer,
309
+ preloadedState: {
310
+ ...preloadedState,
311
+ breakpoints: Breakpoints.getInitialState(breakpoints ?? preloadedState?.breakpoints)
312
+ },
313
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware(import_toolkit2.middlewareOptions).concat(elementTreeMiddleware()),
314
+ enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(
315
+ (0, import_setup_teardown.withSetupTeardown)(
316
+ () => {
317
+ },
318
+ () => {
319
+ }
320
+ )
321
+ ),
322
+ devTools: (0, import_toolkit2.devToolsConfig)({
323
+ name: `${name} (${(/* @__PURE__ */ new Date()).toISOString()})`
324
+ })
325
+ });
326
+ }
327
+ // Annotate the CommonJS export names for ESM import in node:
328
+ 0 && (module.exports = {
329
+ configureStore,
330
+ copyElementTree,
331
+ createBaseDocument,
332
+ createDocumentReference,
333
+ elementTreeMiddleware,
334
+ getBreakpoints,
335
+ getBuilderEditMode,
336
+ getComponentPropControllerDescriptors,
337
+ getDocument,
338
+ getDocumentKeysSortedByDepth,
339
+ getElement,
340
+ getElementId,
341
+ getElementIds,
342
+ getElementPropControllerDescriptors,
343
+ getElementTreeTranslatableData,
344
+ getElements,
345
+ getIsInBuilder,
346
+ getIsPreview,
347
+ getPropControllerDescriptors,
348
+ getPropControllers,
349
+ getReactComponent,
350
+ getRootElement,
351
+ isElementReference,
352
+ mergeElement,
353
+ mergeElementTreeTranslatedData
354
+ });
355
+ //# sourceMappingURL=react-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/state/react-page.ts"],"sourcesContent":["import {\n configureStore as configureReduxStore,\n combineReducers,\n type ThunkDispatch,\n type Middleware,\n} from '@reduxjs/toolkit'\n\nimport { createSelector } from 'reselect'\n\nimport {\n createReplacementContext,\n type SerializableReplacementContext,\n type ReplacementContext,\n type TranslationDto,\n type MergeTranslatableDataContext,\n type MergeContext,\n CopyContext,\n replaceResourceIfNeeded,\n ContextResource,\n} from '@makeswift/controls'\n\nimport * as Documents from './modules/read-only-documents'\nimport * as ElementTrees from './modules/element-trees'\nimport * as ReactComponents from './modules/react-components'\nimport * as ComponentsMeta from './modules/components-meta'\nimport * as PropControllers from './modules/prop-controllers'\nimport * as PropControllerHandles from './modules/prop-controller-handles'\nimport * as IsInBuilder from './modules/is-in-builder'\nimport * as IsPreview from './modules/is-preview'\nimport * as BuilderEditMode from './modules/builder-edit-mode'\nimport * as Breakpoints from './modules/breakpoints'\nimport {\n type Action,\n ActionTypes,\n changeElementTree,\n createElementTree,\n deleteElementTree,\n} from './actions'\nimport {\n copy as copyFromControl,\n getTranslatableData,\n merge,\n mergeTranslatedData,\n} from '../controls/control'\n\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\n\nimport { withSetupTeardown } from './mixins/setup-teardown'\n\nexport type {\n Data,\n Document,\n DocumentReference,\n Element,\n ElementData,\n ElementReference,\n} from './modules/read-only-documents'\n\nexport {\n createBaseDocument,\n createDocumentReference,\n getRootElement,\n isElementReference,\n} from './modules/read-only-documents'\n\nexport type { ComponentType } from './modules/react-components'\n\nconst reducer = combineReducers({\n documents: Documents.reducer,\n elementTrees: ElementTrees.reducer,\n reactComponents: ReactComponents.reducer,\n componentsMeta: ComponentsMeta.reducer,\n propControllers: PropControllers.reducer,\n propControllerHandles: PropControllerHandles.reducer,\n isInBuilder: IsInBuilder.reducer,\n isPreview: IsPreview.reducer,\n builderEditMode: BuilderEditMode.reducer,\n breakpoints: Breakpoints.reducer,\n})\n\nexport type State = ReturnType<typeof reducer>\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getElementTreesSlice(state: State): ElementTrees.State {\n return state.elementTrees\n}\n\nexport function getElements(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elements'] {\n return ElementTrees.getElements(getElementTreesSlice(state), documentKey)\n}\n\nexport function getElementIds(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elementIds'] {\n return ElementTrees.getElementIds(getElementTreesSlice(state), documentKey)\n}\n\nfunction getReactComponentsStateSlice(state: State): ReactComponents.State {\n return state.reactComponents\n}\n\nexport function getReactComponent(\n state: State,\n type: string,\n): ReactComponents.ComponentType | null {\n return ReactComponents.getReactComponent(getReactComponentsStateSlice(state), type)\n}\n\nfunction getPropControllersStateSlice(state: State): PropControllers.State {\n return state.propControllers\n}\n\nexport function getPropControllerDescriptors(state: State): PropControllers.State {\n return PropControllers.getPropControllerDescriptors(getPropControllersStateSlice(state))\n}\n\nexport function getComponentPropControllerDescriptors(\n state: State,\n componentType: string,\n): PropControllers.DescriptorsByProp | null {\n return PropControllers.getComponentPropControllerDescriptors(\n getPropControllersStateSlice(state),\n componentType,\n )\n}\n\nfunction getPropControllerHandlesStateSlice(state: State): PropControllerHandles.State {\n return state.propControllerHandles\n}\n\nexport function getPropControllers(state: State, documentKey: string, elementKey: string) {\n return PropControllerHandles.getPropControllers(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n )\n}\n\n/**\n * Returns all document keys sorted by depth, i.e., parent documents come before child documents.\n */\nexport const getDocumentKeysSortedByDepth: (state: State) => string[] = createSelector(\n [getDocumentsStateSlice, getElementTreesSlice],\n (documents, elementTrees) => {\n return [...documents.keys()].sort((a, b) => (elementTrees.get(a)?.elements.has(b) ? -1 : 1))\n },\n)\n\nexport function getElement(\n state: State,\n documentKey: string,\n elementKey: string,\n): Documents.Element | null {\n return ElementTrees.getElement(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementId(state: State, documentKey: string, elementKey: string): string | null {\n return ElementTrees.getElementId(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementPropControllerDescriptors(\n state: State,\n documentKey: string,\n elementKey: string,\n): Record<string, PropControllers.PropControllerDescriptor> | null {\n const element = getElement(state, documentKey, elementKey)\n\n if (element == null || Documents.isElementReference(element)) return null\n\n return getComponentPropControllerDescriptors(state, element.type)\n}\n\nexport function copyElementTree(\n state: State,\n elementTree: Documents.ElementData,\n replacementContext: SerializableReplacementContext,\n) {\n /*\n * This is structured a bit weird.\n *\n * This is done so that we can pass a callable function into some of the copy functions\n * themselves, to enable mutual recursion.\n *\n * Consider the slot control. It has to iterate through its elements, and for each of them,\n * call some version of the below function.\n *\n * That is how the recursing through the tree happens.\n */\n function copyElementTreeNode(state: State, replacementContext: ReplacementContext) {\n return function (node: Documents.Element) {\n const context: CopyContext = {\n replacementContext,\n copyElement: copyElementTreeNode(state, replacementContext),\n }\n\n if (Documents.isElementReference(node)) {\n return {\n ...node,\n value: replaceResourceIfNeeded(ContextResource.GlobalElement, node.value, context),\n }\n }\n\n const descriptors = getComponentPropControllerDescriptors(state, node.type)\n\n if (descriptors == null) return node\n\n for (const [propKey, descriptor] of Object.entries(descriptors)) {\n node.props[propKey] = copyFromControl(descriptor, node.props[propKey], context)\n }\n\n return node\n }\n }\n\n const copy = JSON.parse(JSON.stringify(elementTree)) as Documents.ElementData\n\n return copyElementTreeNode(state, createReplacementContext(replacementContext))(copy)\n}\n\nexport function getElementTreeTranslatableData(\n state: State,\n elementTree: Documents.ElementData,\n): Record<string, Documents.Data> {\n const translatableData: Record<string, Documents.Data> = {}\n const descriptors = getPropControllerDescriptors(state)\n\n for (const element of ElementTrees.traverseElementTree(elementTree, descriptors)) {\n if (Documents.isElementReference(element)) continue\n\n const elementPescriptors = descriptors.get(element.type)\n if (elementPescriptors == null) continue\n\n Object.entries(elementPescriptors).forEach(([propName, descriptor]) => {\n const translatablePropData = getTranslatableData(descriptor, element.props[propName])\n\n if (translatablePropData != null) {\n translatableData[`${element.key}:${propName}`] = translatablePropData\n }\n })\n }\n\n return translatableData\n}\n\nexport function mergeElementTreeTranslatedData(\n state: State,\n elementTree: Documents.ElementData,\n translatedData: TranslationDto,\n): Documents.Element {\n function merge(state: State, translatedData: TranslationDto) {\n return function (node: Documents.Element): Documents.Element {\n if (Documents.isElementReference(node)) return node\n\n const elementDescriptors = getPropControllerDescriptors(state)\n const descriptors = elementDescriptors.get(node.type)\n\n if (descriptors == null) {\n throw new Error(`Can't merge element of type \"${node.type}\" because it has no descriptors`)\n }\n\n const context: MergeTranslatableDataContext = {\n translatedData,\n mergeTranslatedData: merge(state, translatedData),\n }\n const props = {} as Record<string, Documents.Data>\n\n for (const propName of Object.keys(descriptors)) {\n const descriptor = descriptors[propName]\n\n props[propName] = mergeTranslatedData(\n descriptor,\n node.props[propName],\n translatedData[`${node.key}:${propName}`],\n context,\n )\n }\n\n return { ...node, props }\n }\n }\n return merge(state, translatedData)(elementTree)\n}\n\nexport function mergeElement(\n state: State,\n baseElement: Documents.Element,\n overrideElement: Documents.Element,\n): Documents.Element {\n if (baseElement.type !== overrideElement.type || baseElement.key !== overrideElement.key) {\n throw new Error(`Can't merge elements of different types or keys`)\n }\n\n if (Documents.isElementReference(overrideElement)) return overrideElement\n\n if (Documents.isElementReference(baseElement)) return baseElement\n\n const elementDescriptors = getPropControllerDescriptors(state)\n const descriptors = elementDescriptors.get(baseElement.type)\n\n if (descriptors == null) {\n throw new Error(\n `Can't merge element of type \"${baseElement.type}\" because it has no descriptors`,\n )\n }\n\n const mergedProps = {} as Record<string, Documents.Data>\n\n for (const propName of Object.keys(descriptors)) {\n const descriptor = descriptors[propName]\n const context: MergeContext = {\n mergeElement(base, override) {\n return mergeElement(state, base, override)\n },\n }\n\n mergedProps[propName] = merge(\n descriptor,\n baseElement.props[propName],\n overrideElement.props[propName],\n context,\n )\n }\n\n return { ...baseElement, props: mergedProps }\n}\n\nexport function getIsInBuilder(state: State): boolean {\n return state.isInBuilder\n}\n\nexport function getIsPreview(state: State): boolean {\n return IsPreview.getIsPreview(state.isPreview)\n}\n\nexport function getBuilderEditMode(state: State): BuilderEditMode.State {\n return state.builderEditMode\n}\n\nexport function getBreakpoints(state: State): Breakpoints.State {\n return state.breakpoints\n}\n\nexport function elementTreeMiddleware(): Middleware<Dispatch, State, Dispatch> {\n return actionMiddleware(({ dispatch, getState }) => next => {\n return action => {\n switch (action.type) {\n case ActionTypes.REGISTER_DOCUMENT:\n dispatch(\n createElementTree({\n document: action.payload.document,\n descriptors: getPropControllerDescriptors(getState()),\n }),\n )\n break\n\n case ActionTypes.CHANGE_DOCUMENT: {\n const { documentKey, operation } = action.payload\n\n const oldDocument = getDocument(getState(), documentKey)\n const result = next(action)\n const newDocument = getDocument(getState(), documentKey)\n\n if (oldDocument != null && newDocument != null && newDocument !== oldDocument) {\n dispatch(\n changeElementTree({\n oldDocument,\n newDocument,\n descriptors: getPropControllerDescriptors(getState()),\n operation,\n }),\n )\n }\n\n return result\n }\n\n case ActionTypes.UNREGISTER_DOCUMENT:\n dispatch(deleteElementTree(action.payload))\n break\n }\n\n return next(action)\n }\n })\n}\n\nexport function configureStore({\n name,\n preloadedState,\n breakpoints,\n}: {\n name: string\n preloadedState: Partial<State> | null\n breakpoints?: Breakpoints.State\n}) {\n return configureReduxStore({\n reducer,\n preloadedState: {\n ...preloadedState,\n breakpoints: Breakpoints.getInitialState(breakpoints ?? preloadedState?.breakpoints),\n },\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat(elementTreeMiddleware()),\n\n enhancers: getDefaultEnhancers =>\n getDefaultEnhancers().concat(\n withSetupTeardown(\n () => {},\n () => {},\n ),\n ),\n\n devTools: devToolsConfig({\n name: `${name} (${new Date().toISOString()})`,\n }),\n })\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":"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","names":["import_toolkit","state","replacementContext","copyFromControl","merge","translatedData","configureReduxStore"]}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ref_counted_map_exports = {};
20
+ __export(ref_counted_map_exports, {
21
+ RefCountedMap: () => RefCountedMap
22
+ });
23
+ module.exports = __toCommonJS(ref_counted_map_exports);
24
+ const TTLCheck = {
25
+ ON_GET: 1 << 0,
26
+ ON_RETAIN: 1 << 1,
27
+ ON_RELEASE: 1 << 2
28
+ };
29
+ class RefCountedMap {
30
+ map = /* @__PURE__ */ new Map();
31
+ unownedEntryTtlMs;
32
+ ttlCheck;
33
+ static TTLCheck = TTLCheck;
34
+ constructor({
35
+ unownedEntryTtlMs,
36
+ ttlCheck = TTLCheck.ON_GET | TTLCheck.ON_RETAIN | TTLCheck.ON_RELEASE
37
+ }) {
38
+ this.unownedEntryTtlMs = unownedEntryTtlMs;
39
+ this.ttlCheck = ttlCheck;
40
+ }
41
+ get size() {
42
+ return this.map.size;
43
+ }
44
+ get(key) {
45
+ return this.map.get(key)?.value;
46
+ }
47
+ getOrCreate(key, init) {
48
+ try {
49
+ const existing = this.map.get(key);
50
+ if (existing) {
51
+ if (isUnowned(existing))
52
+ existing.accessedAt = Date.now();
53
+ return existing.value;
54
+ }
55
+ const value = init();
56
+ this.map.set(key, { value, count: void 0, accessedAt: Date.now() });
57
+ return value;
58
+ } finally {
59
+ if (this.ttlCheck & TTLCheck.ON_GET)
60
+ this.removeExpired();
61
+ }
62
+ }
63
+ /**
64
+ * Returns true on transition from unowned to owned
65
+ */
66
+ retain(key, value) {
67
+ try {
68
+ const existing = this.map.get(key);
69
+ if (existing == null) {
70
+ this.map.set(key, { value, count: 1 });
71
+ return true;
72
+ }
73
+ if (existing.value === value) {
74
+ existing.count = (existing.count ?? 0) + 1;
75
+ return existing.count === 1;
76
+ }
77
+ return false;
78
+ } finally {
79
+ if (this.ttlCheck & TTLCheck.ON_RETAIN)
80
+ this.removeExpired();
81
+ }
82
+ }
83
+ /**
84
+ * Returns true on transition from owned to unowned
85
+ */
86
+ release(key, value) {
87
+ try {
88
+ const existing = this.map.get(key);
89
+ if (existing == null)
90
+ return false;
91
+ if (isUnowned(existing))
92
+ return false;
93
+ if (existing.value !== value)
94
+ return false;
95
+ if (existing.count === 1) {
96
+ this.map.delete(key);
97
+ return true;
98
+ }
99
+ existing.count -= 1;
100
+ return false;
101
+ } finally {
102
+ if (this.ttlCheck & TTLCheck.ON_RELEASE)
103
+ this.removeExpired();
104
+ }
105
+ }
106
+ removeExpired() {
107
+ const now = Date.now();
108
+ const isExpired = (entry) => isUnowned(entry) && now - entry.accessedAt > this.unownedEntryTtlMs;
109
+ this.map.forEach((entry, key) => {
110
+ if (isExpired(entry))
111
+ this.map.delete(key);
112
+ });
113
+ }
114
+ }
115
+ const isUnowned = (entry) => entry.count === void 0;
116
+ // Annotate the CommonJS export names for ESM import in node:
117
+ 0 && (module.exports = {
118
+ RefCountedMap
119
+ });
120
+ //# sourceMappingURL=ref-counted-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/ref-counted-map.ts"],"sourcesContent":["type RefCountedMapEntry<V> = {\n value: V\n count: number\n}\n\ntype UnownedMapEntry<V> = {\n value: V\n count: undefined\n accessedAt: number\n}\n\ntype MapEntry<V> = RefCountedMapEntry<V> | UnownedMapEntry<V>\n\nconst TTLCheck = {\n ON_GET: 1 << 0,\n ON_RETAIN: 1 << 1,\n ON_RELEASE: 1 << 2,\n} as const\n\n/**\n * Ref-counted map with explicit retention semantics. Entries are unowned by default and may be evicted after their\n * TTL unless explicitly retained. This provides TTL-based caching for unowned entries, while allowing consumers to\n * opt into stronger lifetime control via explicit retention.\n */\nexport class RefCountedMap<K, V> {\n private readonly map = new Map<K, MapEntry<V>>()\n private readonly unownedEntryTtlMs: number\n private readonly ttlCheck: number\n\n static readonly TTLCheck = TTLCheck\n\n constructor({\n unownedEntryTtlMs,\n ttlCheck = TTLCheck.ON_GET | TTLCheck.ON_RETAIN | TTLCheck.ON_RELEASE,\n }: {\n unownedEntryTtlMs: number\n ttlCheck?: number\n }) {\n this.unownedEntryTtlMs = unownedEntryTtlMs\n this.ttlCheck = ttlCheck\n }\n\n get size(): number {\n return this.map.size\n }\n\n get(key: K): V | undefined {\n return this.map.get(key)?.value\n }\n\n getOrCreate(key: K, init: () => V): V {\n try {\n const existing = this.map.get(key)\n\n if (existing) {\n if (isUnowned(existing)) existing.accessedAt = Date.now()\n return existing.value\n }\n\n const value = init()\n this.map.set(key, { value, count: undefined, accessedAt: Date.now() })\n return value\n } finally {\n if (this.ttlCheck & TTLCheck.ON_GET) this.removeExpired()\n }\n }\n\n /**\n * Returns true on transition from unowned to owned\n */\n retain(key: K, value: V): boolean {\n try {\n const existing = this.map.get(key)\n\n if (existing == null) {\n this.map.set(key, { value, count: 1 })\n return true\n }\n\n // `retain` might be called on a unowned entry that has already been evicted from the map due to TTL expiration\n // *and* possibly replaced by a new unowned entry with the same key; handle this gracefully\n if (existing.value === value) {\n existing.count = (existing.count ?? 0) + 1\n return existing.count === 1\n }\n\n return false\n } finally {\n if (this.ttlCheck & TTLCheck.ON_RETAIN) this.removeExpired()\n }\n }\n\n /**\n * Returns true on transition from owned to unowned\n */\n release(key: K, value: V): boolean {\n try {\n const existing = this.map.get(key)\n\n // `release` might be called on an entry that remained unowned due being superseded by a new entry with the same\n // key after TTL expiration of the original entry; handle this gracefully\n if (existing == null) return false\n if (isUnowned(existing)) return false\n if (existing.value !== value) return false\n\n if (existing.count === 1) {\n this.map.delete(key)\n return true\n }\n\n existing.count -= 1\n return false\n } finally {\n if (this.ttlCheck & TTLCheck.ON_RELEASE) this.removeExpired()\n }\n }\n\n private removeExpired(): void {\n const now = Date.now()\n const isExpired = (entry: MapEntry<V>): boolean =>\n isUnowned(entry) && now - entry.accessedAt > this.unownedEntryTtlMs\n\n this.map.forEach((entry, key) => {\n if (isExpired(entry)) this.map.delete(key)\n })\n }\n}\n\nconst isUnowned = <V>(entry: MapEntry<V>): entry is UnownedMapEntry<V> => entry.count === undefined\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,MAAM,WAAW;AAAA,EACf,QAAQ,KAAK;AAAA,EACb,WAAW,KAAK;AAAA,EAChB,YAAY,KAAK;AACnB;AAOO,MAAM,cAAoB;AAAA,EACd,MAAM,oBAAI,IAAoB;AAAA,EAC9B;AAAA,EACA;AAAA,EAEjB,OAAgB,WAAW;AAAA,EAE3B,YAAY;AAAA,IACV;AAAA,IACA,WAAW,SAAS,SAAS,SAAS,YAAY,SAAS;AAAA,EAC7D,GAGG;AACD,SAAK,oBAAoB;AACzB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,IAAI,KAAuB;AACzB,WAAO,KAAK,IAAI,IAAI,GAAG,GAAG;AAAA,EAC5B;AAAA,EAEA,YAAY,KAAQ,MAAkB;AACpC,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,IAAI,GAAG;AAEjC,UAAI,UAAU;AACZ,YAAI,UAAU,QAAQ;AAAG,mBAAS,aAAa,KAAK,IAAI;AACxD,eAAO,SAAS;AAAA,MAClB;AAEA,YAAM,QAAQ,KAAK;AACnB,WAAK,IAAI,IAAI,KAAK,EAAE,OAAO,OAAO,QAAW,YAAY,KAAK,IAAI,EAAE,CAAC;AACrE,aAAO;AAAA,IACT,UAAE;AACA,UAAI,KAAK,WAAW,SAAS;AAAQ,aAAK,cAAc;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAQ,OAAmB;AAChC,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,IAAI,GAAG;AAEjC,UAAI,YAAY,MAAM;AACpB,aAAK,IAAI,IAAI,KAAK,EAAE,OAAO,OAAO,EAAE,CAAC;AACrC,eAAO;AAAA,MACT;AAIA,UAAI,SAAS,UAAU,OAAO;AAC5B,iBAAS,SAAS,SAAS,SAAS,KAAK;AACzC,eAAO,SAAS,UAAU;AAAA,MAC5B;AAEA,aAAO;AAAA,IACT,UAAE;AACA,UAAI,KAAK,WAAW,SAAS;AAAW,aAAK,cAAc;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,KAAQ,OAAmB;AACjC,QAAI;AACF,YAAM,WAAW,KAAK,IAAI,IAAI,GAAG;AAIjC,UAAI,YAAY;AAAM,eAAO;AAC7B,UAAI,UAAU,QAAQ;AAAG,eAAO;AAChC,UAAI,SAAS,UAAU;AAAO,eAAO;AAErC,UAAI,SAAS,UAAU,GAAG;AACxB,aAAK,IAAI,OAAO,GAAG;AACnB,eAAO;AAAA,MACT;AAEA,eAAS,SAAS;AAClB,aAAO;AAAA,IACT,UAAE;AACA,UAAI,KAAK,WAAW,SAAS;AAAY,aAAK,cAAc;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,YAAY,CAAC,UACjB,UAAU,KAAK,KAAK,MAAM,MAAM,aAAa,KAAK;AAEpD,SAAK,IAAI,QAAQ,CAAC,OAAO,QAAQ;AAC/B,UAAI,UAAU,KAAK;AAAG,aAAK,IAAI,OAAO,GAAG;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAEA,MAAM,YAAY,CAAI,UAAoD,MAAM,UAAU;","names":[]}