@makeswift/runtime 0.25.4-canary.3 → 0.25.4

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 (655) 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/client.js +90 -0
  4. package/dist/cjs/api/client.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/builder/breakpoints/index.js +31 -0
  9. package/dist/cjs/builder/breakpoints/index.js.map +1 -0
  10. package/dist/cjs/builder/core/index.js +57 -0
  11. package/dist/cjs/builder/core/index.js.map +1 -0
  12. package/dist/cjs/builder/host-api.js +56 -0
  13. package/dist/cjs/builder/host-api.js.map +1 -0
  14. package/dist/cjs/builder/host-to-builder-actions.js +41 -0
  15. package/dist/cjs/builder/host-to-builder-actions.js.map +1 -0
  16. package/dist/cjs/builder/serialization.js +78 -0
  17. package/dist/cjs/builder/serialization.js.map +1 -0
  18. package/dist/cjs/components/builtin/Carousel/Carousel.js +2 -5
  19. package/dist/cjs/components/builtin/Carousel/Carousel.js.map +1 -1
  20. package/dist/cjs/controls/control.js +1 -3
  21. package/dist/cjs/controls/control.js.map +1 -1
  22. package/dist/cjs/controls/rich-text-v2/rich-text-v2.js +15 -2
  23. package/dist/cjs/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  24. package/dist/cjs/controls/rich-text-v2/translation.js +187 -0
  25. package/dist/cjs/controls/rich-text-v2/translation.js.map +1 -0
  26. package/dist/cjs/controls/serialization/base/index.js +78 -0
  27. package/dist/cjs/controls/serialization/base/index.js.map +1 -0
  28. package/dist/cjs/controls/serialization/base/visitor.js +59 -0
  29. package/dist/cjs/controls/serialization/base/visitor.js.map +1 -0
  30. package/dist/cjs/controls/serialization/index.js +55 -0
  31. package/dist/cjs/controls/serialization/index.js.map +1 -0
  32. package/dist/cjs/controls/serialization/message-port/function-serialization.js +79 -0
  33. package/dist/cjs/controls/serialization/message-port/function-serialization.js.map +1 -0
  34. package/dist/cjs/controls/serialization/message-port/index.js +25 -0
  35. package/dist/cjs/controls/serialization/message-port/index.js.map +1 -0
  36. package/dist/cjs/controls/serialization/message-port/visitor.js +48 -0
  37. package/dist/cjs/controls/serialization/message-port/visitor.js.map +1 -0
  38. package/dist/cjs/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.js +72 -0
  39. package/dist/cjs/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.js.map +1 -0
  40. package/dist/cjs/controls/visitors/message-port-serializer/function-serialization.js +79 -0
  41. package/dist/cjs/controls/visitors/message-port-serializer/function-serialization.js.map +1 -0
  42. package/dist/cjs/controls/visitors/message-port-serializer/index.js +36 -0
  43. package/dist/cjs/controls/visitors/message-port-serializer/index.js.map +1 -0
  44. package/dist/cjs/next/api-handler/config/pages-router.js +1 -1
  45. package/dist/cjs/next/api-handler/config/pages-router.js.map +1 -1
  46. package/dist/cjs/next/components/tests/makeswift-component/fixtures.js +101 -0
  47. package/dist/cjs/next/components/tests/makeswift-component/fixtures.js.map +1 -0
  48. package/dist/cjs/next/fetch.js +30 -0
  49. package/dist/cjs/next/fetch.js.map +1 -0
  50. package/dist/cjs/next/runtime.js +35 -0
  51. package/dist/cjs/next/runtime.js.map +1 -0
  52. package/dist/cjs/next/testing/react-runtime.js +29 -0
  53. package/dist/cjs/next/testing/react-runtime.js.map +1 -0
  54. package/dist/cjs/prop-controllers/serialization.js +355 -0
  55. package/dist/cjs/prop-controllers/serialization.js.map +1 -0
  56. package/dist/cjs/react/builtins/box.js +42 -0
  57. package/dist/cjs/react/builtins/box.js.map +1 -0
  58. package/dist/cjs/react/builtins/button.js +42 -0
  59. package/dist/cjs/react/builtins/button.js.map +1 -0
  60. package/dist/cjs/react/builtins/carousel.js +42 -0
  61. package/dist/cjs/react/builtins/carousel.js.map +1 -0
  62. package/dist/cjs/react/builtins/countdown.js +42 -0
  63. package/dist/cjs/react/builtins/countdown.js.map +1 -0
  64. package/dist/cjs/react/builtins/divider.js +42 -0
  65. package/dist/cjs/react/builtins/divider.js.map +1 -0
  66. package/dist/cjs/react/builtins/embed.js +42 -0
  67. package/dist/cjs/react/builtins/embed.js.map +1 -0
  68. package/dist/cjs/react/builtins/form.js +42 -0
  69. package/dist/cjs/react/builtins/form.js.map +1 -0
  70. package/dist/cjs/react/builtins/image.js +42 -0
  71. package/dist/cjs/react/builtins/image.js.map +1 -0
  72. package/dist/cjs/react/builtins/index.js +29 -0
  73. package/dist/cjs/react/builtins/index.js.map +1 -0
  74. package/dist/cjs/react/builtins/navigation.js +42 -0
  75. package/dist/cjs/react/builtins/navigation.js.map +1 -0
  76. package/dist/cjs/react/builtins/root.js +42 -0
  77. package/dist/cjs/react/builtins/root.js.map +1 -0
  78. package/dist/cjs/react/builtins/slot.js +42 -0
  79. package/dist/cjs/react/builtins/slot.js.map +1 -0
  80. package/dist/cjs/react/builtins/social-links.js +42 -0
  81. package/dist/cjs/react/builtins/social-links.js.map +1 -0
  82. package/dist/cjs/react/builtins/text.js +42 -0
  83. package/dist/cjs/react/builtins/text.js.map +1 -0
  84. package/dist/cjs/react/builtins/video.js +42 -0
  85. package/dist/cjs/react/builtins/video.js.map +1 -0
  86. package/dist/cjs/react/core/index.js +29 -0
  87. package/dist/cjs/react/core/index.js.map +1 -0
  88. package/dist/cjs/react/index.js +29 -0
  89. package/dist/cjs/react/index.js.map +1 -0
  90. package/dist/cjs/runtimes/react/components/GoogleFontLink.js +55 -0
  91. package/dist/cjs/runtimes/react/components/GoogleFontLink.js.map +1 -0
  92. package/dist/cjs/runtimes/react/components/MakeswiftFonts.js +33 -0
  93. package/dist/cjs/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  94. package/dist/cjs/runtimes/react/components/activity-with-fallback.js +54 -0
  95. package/dist/cjs/runtimes/react/components/activity-with-fallback.js.map +1 -0
  96. package/dist/cjs/runtimes/react/components/page/index.js +13 -3
  97. package/dist/cjs/runtimes/react/components/page/index.js.map +1 -1
  98. package/dist/cjs/runtimes/react/hooks/use-async-effect.js +55 -0
  99. package/dist/cjs/runtimes/react/hooks/use-async-effect.js.map +1 -0
  100. package/dist/cjs/runtimes/react/hooks/use-builtin-suspense.js +33 -0
  101. package/dist/cjs/runtimes/react/hooks/use-builtin-suspense.js.map +1 -0
  102. package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js +39 -0
  103. package/dist/cjs/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  104. package/dist/cjs/runtimes/react/hooks/use-is-read-only.js +33 -0
  105. package/dist/cjs/runtimes/react/hooks/use-is-read-only.js.map +1 -0
  106. package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js +59 -0
  107. package/dist/cjs/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
  108. package/dist/cjs/runtimes/react/react-runtime-core.js +72 -0
  109. package/dist/cjs/runtimes/react/react-runtime-core.js.map +1 -0
  110. package/dist/cjs/runtimes/react/resource-resolver.js +52 -0
  111. package/dist/cjs/runtimes/react/resource-resolver.js.map +1 -0
  112. package/dist/cjs/runtimes/react/testing/react-runtime.js +33 -0
  113. package/dist/cjs/runtimes/react/testing/react-runtime.js.map +1 -0
  114. package/dist/cjs/runtimes/react/utils/google-fonts-url.js +49 -0
  115. package/dist/cjs/runtimes/react/utils/google-fonts-url.js.map +1 -0
  116. package/dist/cjs/state/actions/index.js +42 -0
  117. package/dist/cjs/state/actions/index.js.map +1 -0
  118. package/dist/cjs/state/actions/internal/index.js +34 -0
  119. package/dist/cjs/state/actions/internal/index.js.map +1 -0
  120. package/dist/cjs/state/actions/internal/read-only-actions.js +195 -0
  121. package/dist/cjs/state/actions/internal/read-only-actions.js.map +1 -0
  122. package/dist/cjs/state/actions/internal/read-write-actions.js +76 -0
  123. package/dist/cjs/state/actions/internal/read-write-actions.js.map +1 -0
  124. package/dist/cjs/state/actions/internal.js +205 -0
  125. package/dist/cjs/state/actions/internal.js.map +1 -0
  126. package/dist/cjs/state/api-client/client-store.js +81 -0
  127. package/dist/cjs/state/api-client/client-store.js.map +1 -0
  128. package/dist/cjs/state/api-client/fetch-api-resource.js +125 -0
  129. package/dist/cjs/state/api-client/fetch-api-resource.js.map +1 -0
  130. package/dist/cjs/state/api-client/state.js +89 -0
  131. package/dist/cjs/state/api-client/state.js.map +1 -0
  132. package/dist/cjs/state/api-client/store.js +36 -0
  133. package/dist/cjs/state/api-client/store.js.map +1 -0
  134. package/dist/cjs/state/builder-api/actions.js +161 -0
  135. package/dist/cjs/state/builder-api/actions.js.map +1 -0
  136. package/dist/cjs/state/builder-api/api.js +17 -0
  137. package/dist/cjs/state/builder-api/api.js.map +1 -0
  138. package/dist/cjs/state/builder-api/message-channel.js +98 -0
  139. package/dist/cjs/state/builder-api/message-channel.js.map +1 -0
  140. package/dist/cjs/state/builder-api/navigation-listener.js +110 -0
  141. package/dist/cjs/state/builder-api/navigation-listener.js.map +1 -0
  142. package/dist/cjs/state/builder-api/proxy.js +72 -0
  143. package/dist/cjs/state/builder-api/proxy.js.map +1 -0
  144. package/dist/cjs/state/host-api.js +117 -0
  145. package/dist/cjs/state/host-api.js.map +1 -0
  146. package/dist/cjs/state/middleware/makeswift-api-client-sync.js +37 -0
  147. package/dist/cjs/state/middleware/makeswift-api-client-sync.js.map +1 -0
  148. package/dist/cjs/state/middleware/read-only-element-tree.js +52 -0
  149. package/dist/cjs/state/middleware/read-only-element-tree.js.map +1 -0
  150. package/dist/cjs/state/middleware/read-write/builder-api/element-size.js +40 -0
  151. package/dist/cjs/state/middleware/read-write/builder-api/element-size.js.map +1 -0
  152. package/dist/cjs/state/middleware/read-write/builder-api/index.js +85 -0
  153. package/dist/cjs/state/middleware/read-write/builder-api/index.js.map +1 -0
  154. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js +281 -0
  155. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -0
  156. package/dist/cjs/state/middleware/read-write/index.js +40 -0
  157. package/dist/cjs/state/middleware/read-write/index.js.map +1 -0
  158. package/dist/cjs/state/middleware/read-write/measure-box-models.js +71 -0
  159. package/dist/cjs/state/middleware/read-write/measure-box-models.js.map +1 -0
  160. package/dist/cjs/state/middleware/read-write/prop-controller-handles.js +114 -0
  161. package/dist/cjs/state/middleware/read-write/prop-controller-handles.js.map +1 -0
  162. package/dist/cjs/state/middleware/read-write/update-element-tree.js +59 -0
  163. package/dist/cjs/state/middleware/read-write/update-element-tree.js.map +1 -0
  164. package/dist/cjs/state/mixins/breakpoint-watch.js +72 -0
  165. package/dist/cjs/state/mixins/breakpoint-watch.js.map +1 -0
  166. package/dist/cjs/state/modules/is-read-only.js +50 -0
  167. package/dist/cjs/state/modules/is-read-only.js.map +1 -0
  168. package/dist/cjs/state/modules/locale.js +50 -0
  169. package/dist/cjs/state/modules/locale.js.map +1 -0
  170. package/dist/cjs/state/modules/read-write/box-models.js +144 -0
  171. package/dist/cjs/state/modules/read-write/box-models.js.map +1 -0
  172. package/dist/cjs/state/modules/read-write/element-imperative-handles.js +61 -0
  173. package/dist/cjs/state/modules/read-write/element-imperative-handles.js.map +1 -0
  174. package/dist/cjs/state/modules/read-write/pointer.js +48 -0
  175. package/dist/cjs/state/modules/read-write/pointer.js.map +1 -0
  176. package/dist/cjs/state/modules/read-write/read-write-documents.js +98 -0
  177. package/dist/cjs/state/modules/read-write/read-write-documents.js.map +1 -0
  178. package/dist/cjs/state/modules/site-version.js +47 -0
  179. package/dist/cjs/state/modules/site-version.js.map +1 -0
  180. package/dist/cjs/state/ops/copy-element-tree.js +67 -0
  181. package/dist/cjs/state/ops/copy-element-tree.js.map +1 -0
  182. package/dist/cjs/state/ops/merge-element.js +73 -0
  183. package/dist/cjs/state/ops/merge-element.js.map +1 -0
  184. package/dist/cjs/state/read-only-state.js +231 -0
  185. package/dist/cjs/state/read-only-state.js.map +1 -0
  186. package/dist/cjs/state/read-write-state.js +128 -0
  187. package/dist/cjs/state/read-write-state.js.map +1 -0
  188. package/dist/cjs/state/shared-api.js +63 -0
  189. package/dist/cjs/state/shared-api.js.map +1 -0
  190. package/dist/cjs/state/store.js +219 -0
  191. package/dist/cjs/state/store.js.map +1 -0
  192. package/dist/cjs/state/translations/get.js +61 -0
  193. package/dist/cjs/state/translations/get.js.map +1 -0
  194. package/dist/cjs/state/translations/merge.js +91 -0
  195. package/dist/cjs/state/translations/merge.js.map +1 -0
  196. package/dist/cjs/state/unified-state.js +17 -0
  197. package/dist/cjs/state/unified-state.js.map +1 -0
  198. package/dist/cjs/translations/index.js +32 -0
  199. package/dist/cjs/translations/index.js.map +1 -0
  200. package/dist/cjs/utils/deferred.js +39 -0
  201. package/dist/cjs/utils/deferred.js.map +1 -0
  202. package/dist/cjs/utils/ref-counted-map.js +120 -0
  203. package/dist/cjs/utils/ref-counted-map.js.map +1 -0
  204. package/dist/esm/api/api-resources-client.js +127 -0
  205. package/dist/esm/api/api-resources-client.js.map +1 -0
  206. package/dist/esm/api/client.js +67 -0
  207. package/dist/esm/api/client.js.map +1 -0
  208. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  209. package/dist/esm/api-handler/handlers/webhook/diff-projection.js +38 -0
  210. package/dist/esm/api-handler/handlers/webhook/diff-projection.js.map +1 -0
  211. package/dist/esm/builder/breakpoints/index.js +9 -0
  212. package/dist/esm/builder/breakpoints/index.js.map +1 -0
  213. package/dist/esm/builder/core/index.js +35 -0
  214. package/dist/esm/builder/core/index.js.map +1 -0
  215. package/dist/esm/builder/host-api.js +31 -0
  216. package/dist/esm/builder/host-api.js.map +1 -0
  217. package/dist/esm/builder/host-to-builder-actions.js +18 -0
  218. package/dist/esm/builder/host-to-builder-actions.js.map +1 -0
  219. package/dist/esm/builder/serialization.js +59 -0
  220. package/dist/esm/builder/serialization.js.map +1 -0
  221. package/dist/esm/components/builtin/Carousel/Carousel.js +1 -4
  222. package/dist/esm/components/builtin/Carousel/Carousel.js.map +1 -1
  223. package/dist/esm/controls/control.js +1 -3
  224. package/dist/esm/controls/control.js.map +1 -1
  225. package/dist/esm/controls/rich-text-v2/rich-text-v2.js +17 -1
  226. package/dist/esm/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  227. package/dist/esm/controls/rich-text-v2/translation.js +152 -0
  228. package/dist/esm/controls/rich-text-v2/translation.js.map +1 -0
  229. package/dist/esm/controls/serialization/base/index.js +78 -0
  230. package/dist/esm/controls/serialization/base/index.js.map +1 -0
  231. package/dist/esm/controls/serialization/base/visitor.js +39 -0
  232. package/dist/esm/controls/serialization/base/visitor.js.map +1 -0
  233. package/dist/esm/controls/serialization/index.js +30 -0
  234. package/dist/esm/controls/serialization/index.js.map +1 -0
  235. package/dist/esm/controls/serialization/message-port/function-serialization.js +52 -0
  236. package/dist/esm/controls/serialization/message-port/function-serialization.js.map +1 -0
  237. package/dist/esm/controls/serialization/message-port/index.js +3 -0
  238. package/dist/esm/controls/serialization/message-port/index.js.map +1 -0
  239. package/dist/esm/controls/serialization/message-port/visitor.js +24 -0
  240. package/dist/esm/controls/serialization/message-port/visitor.js.map +1 -0
  241. package/dist/esm/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.js +53 -0
  242. package/dist/esm/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.js.map +1 -0
  243. package/dist/esm/controls/visitors/message-port-serializer/function-serialization.js +52 -0
  244. package/dist/esm/controls/visitors/message-port-serializer/function-serialization.js.map +1 -0
  245. package/dist/esm/controls/visitors/message-port-serializer/index.js +13 -0
  246. package/dist/esm/controls/visitors/message-port-serializer/index.js.map +1 -0
  247. package/dist/esm/next/api-handler/config/pages-router.js +1 -1
  248. package/dist/esm/next/api-handler/config/pages-router.js.map +1 -1
  249. package/dist/esm/next/components/tests/makeswift-component/fixtures.js +60 -0
  250. package/dist/esm/next/components/tests/makeswift-component/fixtures.js.map +1 -0
  251. package/dist/esm/next/fetch.js +6 -0
  252. package/dist/esm/next/fetch.js.map +1 -0
  253. package/dist/esm/next/runtime.js +11 -0
  254. package/dist/esm/next/runtime.js.map +1 -0
  255. package/dist/esm/next/testing/react-runtime.js +5 -0
  256. package/dist/esm/next/testing/react-runtime.js.map +1 -0
  257. package/dist/esm/prop-controllers/serialization.js +338 -0
  258. package/dist/esm/prop-controllers/serialization.js.map +1 -0
  259. package/dist/esm/react/builtins/box.js +7 -0
  260. package/dist/esm/react/builtins/box.js.map +1 -0
  261. package/dist/esm/react/builtins/button.js +7 -0
  262. package/dist/esm/react/builtins/button.js.map +1 -0
  263. package/dist/esm/react/builtins/carousel.js +7 -0
  264. package/dist/esm/react/builtins/carousel.js.map +1 -0
  265. package/dist/esm/react/builtins/countdown.js +7 -0
  266. package/dist/esm/react/builtins/countdown.js.map +1 -0
  267. package/dist/esm/react/builtins/divider.js +7 -0
  268. package/dist/esm/react/builtins/divider.js.map +1 -0
  269. package/dist/esm/react/builtins/embed.js +7 -0
  270. package/dist/esm/react/builtins/embed.js.map +1 -0
  271. package/dist/esm/react/builtins/form.js +7 -0
  272. package/dist/esm/react/builtins/form.js.map +1 -0
  273. package/dist/esm/react/builtins/image.js +7 -0
  274. package/dist/esm/react/builtins/image.js.map +1 -0
  275. package/dist/esm/react/builtins/index.js +5 -0
  276. package/dist/esm/react/builtins/index.js.map +1 -0
  277. package/dist/esm/react/builtins/navigation.js +7 -0
  278. package/dist/esm/react/builtins/navigation.js.map +1 -0
  279. package/dist/esm/react/builtins/root.js +7 -0
  280. package/dist/esm/react/builtins/root.js.map +1 -0
  281. package/dist/esm/react/builtins/slot.js +7 -0
  282. package/dist/esm/react/builtins/slot.js.map +1 -0
  283. package/dist/esm/react/builtins/social-links.js +7 -0
  284. package/dist/esm/react/builtins/social-links.js.map +1 -0
  285. package/dist/esm/react/builtins/text.js +7 -0
  286. package/dist/esm/react/builtins/text.js.map +1 -0
  287. package/dist/esm/react/builtins/video.js +7 -0
  288. package/dist/esm/react/builtins/video.js.map +1 -0
  289. package/dist/esm/react/core/index.js +5 -0
  290. package/dist/esm/react/core/index.js.map +1 -0
  291. package/dist/esm/react/index.js +5 -0
  292. package/dist/esm/react/index.js.map +1 -0
  293. package/dist/esm/runtimes/react/components/GoogleFontLink.js +35 -0
  294. package/dist/esm/runtimes/react/components/GoogleFontLink.js.map +1 -0
  295. package/dist/esm/runtimes/react/components/MakeswiftFonts.js +9 -0
  296. package/dist/esm/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  297. package/dist/esm/runtimes/react/components/activity-with-fallback.js +19 -0
  298. package/dist/esm/runtimes/react/components/activity-with-fallback.js.map +1 -0
  299. package/dist/esm/runtimes/react/components/page/index.js +16 -4
  300. package/dist/esm/runtimes/react/components/page/index.js.map +1 -1
  301. package/dist/esm/runtimes/react/hooks/use-async-effect.js +31 -0
  302. package/dist/esm/runtimes/react/hooks/use-async-effect.js.map +1 -0
  303. package/dist/esm/runtimes/react/hooks/use-builtin-suspense.js +9 -0
  304. package/dist/esm/runtimes/react/hooks/use-builtin-suspense.js.map +1 -0
  305. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js +15 -0
  306. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  307. package/dist/esm/runtimes/react/hooks/use-is-read-only.js +9 -0
  308. package/dist/esm/runtimes/react/hooks/use-is-read-only.js.map +1 -0
  309. package/dist/esm/runtimes/react/lib/resolved-style-to-css.js +38 -0
  310. package/dist/esm/runtimes/react/lib/resolved-style-to-css.js.map +1 -0
  311. package/dist/esm/runtimes/react/react-runtime-core.js +51 -0
  312. package/dist/esm/runtimes/react/react-runtime-core.js.map +1 -0
  313. package/dist/esm/runtimes/react/resource-resolver.js +28 -0
  314. package/dist/esm/runtimes/react/resource-resolver.js.map +1 -0
  315. package/dist/esm/runtimes/react/testing/react-runtime.js +9 -0
  316. package/dist/esm/runtimes/react/testing/react-runtime.js.map +1 -0
  317. package/dist/esm/runtimes/react/utils/google-fonts-url.js +23 -0
  318. package/dist/esm/runtimes/react/utils/google-fonts-url.js.map +1 -0
  319. package/dist/esm/state/actions/index.js +17 -0
  320. package/dist/esm/state/actions/index.js.map +1 -0
  321. package/dist/esm/state/actions/internal/index.js +10 -0
  322. package/dist/esm/state/actions/internal/index.js.map +1 -0
  323. package/dist/esm/state/actions/internal/read-only-actions.js +153 -0
  324. package/dist/esm/state/actions/internal/read-only-actions.js.map +1 -0
  325. package/dist/esm/state/actions/internal/read-write-actions.js +46 -0
  326. package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -0
  327. package/dist/esm/state/actions/internal.js +162 -0
  328. package/dist/esm/state/actions/internal.js.map +1 -0
  329. package/dist/esm/state/api-client/client-store.js +49 -0
  330. package/dist/esm/state/api-client/client-store.js.map +1 -0
  331. package/dist/esm/state/api-client/fetch-api-resource.js +93 -0
  332. package/dist/esm/state/api-client/fetch-api-resource.js.map +1 -0
  333. package/dist/esm/state/api-client/state.js +52 -0
  334. package/dist/esm/state/api-client/state.js.map +1 -0
  335. package/dist/esm/state/api-client/store.js +12 -0
  336. package/dist/esm/state/api-client/store.js.map +1 -0
  337. package/dist/esm/state/builder-api/actions.js +119 -0
  338. package/dist/esm/state/builder-api/actions.js.map +1 -0
  339. package/dist/esm/state/builder-api/api.js +1 -0
  340. package/dist/esm/state/builder-api/api.js.map +1 -0
  341. package/dist/esm/state/builder-api/message-channel.js +74 -0
  342. package/dist/esm/state/builder-api/message-channel.js.map +1 -0
  343. package/dist/esm/state/builder-api/navigation-listener.js +86 -0
  344. package/dist/esm/state/builder-api/navigation-listener.js.map +1 -0
  345. package/dist/esm/state/builder-api/proxy.js +48 -0
  346. package/dist/esm/state/builder-api/proxy.js.map +1 -0
  347. package/dist/esm/state/host-api.js +81 -0
  348. package/dist/esm/state/host-api.js.map +1 -0
  349. package/dist/esm/state/middleware/makeswift-api-client-sync.js +13 -0
  350. package/dist/esm/state/middleware/makeswift-api-client-sync.js.map +1 -0
  351. package/dist/esm/state/middleware/read-only-element-tree.js +28 -0
  352. package/dist/esm/state/middleware/read-only-element-tree.js.map +1 -0
  353. package/dist/esm/state/middleware/read-write/builder-api/element-size.js +16 -0
  354. package/dist/esm/state/middleware/read-write/builder-api/element-size.js.map +1 -0
  355. package/dist/esm/state/middleware/read-write/builder-api/index.js +61 -0
  356. package/dist/esm/state/middleware/read-write/builder-api/index.js.map +1 -0
  357. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js +254 -0
  358. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -0
  359. package/dist/esm/state/middleware/read-write/index.js +16 -0
  360. package/dist/esm/state/middleware/read-write/index.js.map +1 -0
  361. package/dist/esm/state/middleware/read-write/measure-box-models.js +37 -0
  362. package/dist/esm/state/middleware/read-write/measure-box-models.js.map +1 -0
  363. package/dist/esm/state/middleware/read-write/prop-controller-handles.js +80 -0
  364. package/dist/esm/state/middleware/read-write/prop-controller-handles.js.map +1 -0
  365. package/dist/esm/state/middleware/read-write/update-element-tree.js +35 -0
  366. package/dist/esm/state/middleware/read-write/update-element-tree.js.map +1 -0
  367. package/dist/esm/state/mixins/breakpoint-watch.js +48 -0
  368. package/dist/esm/state/mixins/breakpoint-watch.js.map +1 -0
  369. package/dist/esm/state/modules/is-read-only.js +24 -0
  370. package/dist/esm/state/modules/is-read-only.js.map +1 -0
  371. package/dist/esm/state/modules/locale.js +24 -0
  372. package/dist/esm/state/modules/locale.js.map +1 -0
  373. package/dist/esm/state/modules/read-write/box-models.js +114 -0
  374. package/dist/esm/state/modules/read-write/box-models.js.map +1 -0
  375. package/dist/esm/state/modules/read-write/element-imperative-handles.js +36 -0
  376. package/dist/esm/state/modules/read-write/element-imperative-handles.js.map +1 -0
  377. package/dist/esm/state/modules/read-write/pointer.js +23 -0
  378. package/dist/esm/state/modules/read-write/pointer.js.map +1 -0
  379. package/dist/esm/state/modules/read-write/read-write-documents.js +60 -0
  380. package/dist/esm/state/modules/read-write/read-write-documents.js.map +1 -0
  381. package/dist/esm/state/modules/site-version.js +21 -0
  382. package/dist/esm/state/modules/site-version.js.map +1 -0
  383. package/dist/esm/state/ops/copy-element-tree.js +37 -0
  384. package/dist/esm/state/ops/copy-element-tree.js.map +1 -0
  385. package/dist/esm/state/ops/merge-element.js +39 -0
  386. package/dist/esm/state/ops/merge-element.js.map +1 -0
  387. package/dist/esm/state/read-only-state.js +176 -0
  388. package/dist/esm/state/read-only-state.js.map +1 -0
  389. package/dist/esm/state/read-write-state.js +82 -0
  390. package/dist/esm/state/read-write-state.js.map +1 -0
  391. package/dist/esm/state/shared-api.js +35 -0
  392. package/dist/esm/state/shared-api.js.map +1 -0
  393. package/dist/esm/state/store.js +188 -0
  394. package/dist/esm/state/store.js.map +1 -0
  395. package/dist/esm/state/translations/get.js +27 -0
  396. package/dist/esm/state/translations/get.js.map +1 -0
  397. package/dist/esm/state/translations/merge.js +59 -0
  398. package/dist/esm/state/translations/merge.js.map +1 -0
  399. package/dist/esm/state/unified-state.js +1 -0
  400. package/dist/esm/state/unified-state.js.map +1 -0
  401. package/dist/esm/translations/index.js +7 -0
  402. package/dist/esm/translations/index.js.map +1 -0
  403. package/dist/esm/utils/deferred.js +15 -0
  404. package/dist/esm/utils/deferred.js.map +1 -0
  405. package/dist/esm/utils/ref-counted-map.js +96 -0
  406. package/dist/esm/utils/ref-counted-map.js.map +1 -0
  407. package/dist/types/api/api-resources-client.d.ts +57 -0
  408. package/dist/types/api/api-resources-client.d.ts.map +1 -0
  409. package/dist/types/api/client.d.ts +49 -0
  410. package/dist/types/api/client.d.ts.map +1 -0
  411. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +201 -0
  412. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts.map +1 -0
  413. package/dist/types/builder/breakpoints/index.d.ts +2 -0
  414. package/dist/types/builder/breakpoints/index.d.ts.map +1 -0
  415. package/dist/types/builder/core/index.d.ts +2 -0
  416. package/dist/types/builder/core/index.d.ts.map +1 -0
  417. package/dist/types/builder/host-api.d.ts +3 -0
  418. package/dist/types/builder/host-api.d.ts.map +1 -0
  419. package/dist/types/builder/host-to-builder-actions.d.ts +28 -0
  420. package/dist/types/builder/host-to-builder-actions.d.ts.map +1 -0
  421. package/dist/types/builder/serialization.d.ts +23 -0
  422. package/dist/types/builder/serialization.d.ts.map +1 -0
  423. package/dist/types/builder/serialization.test.d.ts +2 -0
  424. package/dist/types/builder/serialization.test.d.ts.map +1 -0
  425. package/dist/types/client/index.d.ts +11 -11
  426. package/dist/types/client/tests/client.get-component-snapshots.test.d.ts +2 -0
  427. package/dist/types/client/tests/client.get-component-snapshots.test.d.ts.map +1 -0
  428. package/dist/types/client/tests/client.get-fonts.test.d.ts +2 -0
  429. package/dist/types/client/tests/client.get-fonts.test.d.ts.map +1 -0
  430. package/dist/types/client/tests/client.introspect-many.test.d.ts +2 -0
  431. package/dist/types/client/tests/client.introspect-many.test.d.ts.map +1 -0
  432. package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
  433. package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts +3 -0
  434. package/dist/types/components/hooks/__tests__/useMediaQuery.test.d.ts.map +1 -0
  435. package/dist/types/controls/control.d.ts.map +1 -1
  436. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts +12 -11
  437. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  438. package/dist/types/controls/rich-text-v2/translation.d.ts +6 -0
  439. package/dist/types/controls/rich-text-v2/translation.d.ts.map +1 -0
  440. package/dist/types/controls/serialization/base/index.d.ts +10 -0
  441. package/dist/types/controls/serialization/base/index.d.ts.map +1 -0
  442. package/dist/types/controls/serialization/base/visitor.d.ts +7 -0
  443. package/dist/types/controls/serialization/base/visitor.d.ts.map +1 -0
  444. package/dist/types/controls/serialization/index.d.ts +10 -0
  445. package/dist/types/controls/serialization/index.d.ts.map +1 -0
  446. package/dist/types/controls/serialization/message-port/function-serialization.d.ts +16 -0
  447. package/dist/types/controls/serialization/message-port/function-serialization.d.ts.map +1 -0
  448. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts +2 -0
  449. package/dist/types/controls/serialization/message-port/function-serialization.test.d.ts.map +1 -0
  450. package/dist/types/controls/serialization/message-port/index.d.ts +3 -0
  451. package/dist/types/controls/serialization/message-port/index.d.ts.map +1 -0
  452. package/dist/types/controls/serialization/message-port/visitor.d.ts +7 -0
  453. package/dist/types/controls/serialization/message-port/visitor.d.ts.map +1 -0
  454. package/dist/types/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.d.ts +9 -0
  455. package/dist/types/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.d.ts.map +1 -0
  456. package/dist/types/controls/visitors/message-port-serializer/function-serialization.d.ts +16 -0
  457. package/dist/types/controls/visitors/message-port-serializer/function-serialization.d.ts.map +1 -0
  458. package/dist/types/controls/visitors/message-port-serializer/function-serialization.test.d.ts +2 -0
  459. package/dist/types/controls/visitors/message-port-serializer/function-serialization.test.d.ts.map +1 -0
  460. package/dist/types/controls/visitors/message-port-serializer/index.d.ts +3 -0
  461. package/dist/types/controls/visitors/message-port-serializer/index.d.ts.map +1 -0
  462. package/dist/types/next/api-handler/config/pages-router.test.d.ts +2 -0
  463. package/dist/types/next/api-handler/config/pages-router.test.d.ts.map +1 -0
  464. package/dist/types/next/components/tests/controls/code-control.test.d.ts +2 -0
  465. package/dist/types/next/components/tests/controls/code-control.test.d.ts.map +1 -0
  466. package/dist/types/next/components/tests/makeswift-component/fixtures.d.ts +27 -0
  467. package/dist/types/next/components/tests/makeswift-component/fixtures.d.ts.map +1 -0
  468. package/dist/types/next/components/tests/makeswift-component/rendering.react18.test.d.ts +3 -0
  469. package/dist/types/next/components/tests/makeswift-component/rendering.react18.test.d.ts.map +1 -0
  470. package/dist/types/next/components/tests/makeswift-component/rendering.test.d.ts +3 -0
  471. package/dist/types/next/components/tests/makeswift-component/rendering.test.d.ts.map +1 -0
  472. package/dist/types/next/fetch.d.ts +3 -0
  473. package/dist/types/next/fetch.d.ts.map +1 -0
  474. package/dist/types/next/runtime.d.ts +10 -0
  475. package/dist/types/next/runtime.d.ts.map +1 -0
  476. package/dist/types/next/testing/react-runtime.d.ts +2 -0
  477. package/dist/types/next/testing/react-runtime.d.ts.map +1 -0
  478. package/dist/types/prop-controllers/serialization.d.ts +228 -0
  479. package/dist/types/prop-controllers/serialization.d.ts.map +1 -0
  480. package/dist/types/react/builtins/box.d.ts +3 -0
  481. package/dist/types/react/builtins/box.d.ts.map +1 -0
  482. package/dist/types/react/builtins/button.d.ts +3 -0
  483. package/dist/types/react/builtins/button.d.ts.map +1 -0
  484. package/dist/types/react/builtins/carousel.d.ts +3 -0
  485. package/dist/types/react/builtins/carousel.d.ts.map +1 -0
  486. package/dist/types/react/builtins/countdown.d.ts +3 -0
  487. package/dist/types/react/builtins/countdown.d.ts.map +1 -0
  488. package/dist/types/react/builtins/divider.d.ts +3 -0
  489. package/dist/types/react/builtins/divider.d.ts.map +1 -0
  490. package/dist/types/react/builtins/embed.d.ts +3 -0
  491. package/dist/types/react/builtins/embed.d.ts.map +1 -0
  492. package/dist/types/react/builtins/form.d.ts +3 -0
  493. package/dist/types/react/builtins/form.d.ts.map +1 -0
  494. package/dist/types/react/builtins/image.d.ts +3 -0
  495. package/dist/types/react/builtins/image.d.ts.map +1 -0
  496. package/dist/types/react/builtins/index.d.ts +2 -0
  497. package/dist/types/react/builtins/index.d.ts.map +1 -0
  498. package/dist/types/react/builtins/navigation.d.ts +3 -0
  499. package/dist/types/react/builtins/navigation.d.ts.map +1 -0
  500. package/dist/types/react/builtins/root.d.ts +3 -0
  501. package/dist/types/react/builtins/root.d.ts.map +1 -0
  502. package/dist/types/react/builtins/slot.d.ts +3 -0
  503. package/dist/types/react/builtins/slot.d.ts.map +1 -0
  504. package/dist/types/react/builtins/social-links.d.ts +3 -0
  505. package/dist/types/react/builtins/social-links.d.ts.map +1 -0
  506. package/dist/types/react/builtins/text.d.ts +3 -0
  507. package/dist/types/react/builtins/text.d.ts.map +1 -0
  508. package/dist/types/react/builtins/video.d.ts +3 -0
  509. package/dist/types/react/builtins/video.d.ts.map +1 -0
  510. package/dist/types/react/core/index.d.ts +2 -0
  511. package/dist/types/react/core/index.d.ts.map +1 -0
  512. package/dist/types/react/index.d.ts +2 -0
  513. package/dist/types/react/index.d.ts.map +1 -0
  514. package/dist/types/runtimes/react/components/GoogleFontLink.d.ts +14 -0
  515. package/dist/types/runtimes/react/components/GoogleFontLink.d.ts.map +1 -0
  516. package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts +7 -0
  517. package/dist/types/runtimes/react/components/MakeswiftFonts.d.ts.map +1 -0
  518. package/dist/types/runtimes/react/components/activity-with-fallback.d.ts +13 -0
  519. package/dist/types/runtimes/react/components/activity-with-fallback.d.ts.map +1 -0
  520. package/dist/types/runtimes/react/components/page/index.d.ts.map +1 -1
  521. package/dist/types/runtimes/react/hooks/__tests__/use-async-effect.test.d.ts +2 -0
  522. package/dist/types/runtimes/react/hooks/__tests__/use-async-effect.test.d.ts.map +1 -0
  523. package/dist/types/runtimes/react/hooks/use-async-effect.d.ts +3 -0
  524. package/dist/types/runtimes/react/hooks/use-async-effect.d.ts.map +1 -0
  525. package/dist/types/runtimes/react/hooks/use-builtin-suspense.d.ts +2 -0
  526. package/dist/types/runtimes/react/hooks/use-builtin-suspense.d.ts.map +1 -0
  527. package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts +3 -0
  528. package/dist/types/runtimes/react/hooks/use-current-breakpoint.d.ts.map +1 -0
  529. package/dist/types/runtimes/react/hooks/use-is-read-only.d.ts +2 -0
  530. package/dist/types/runtimes/react/hooks/use-is-read-only.d.ts.map +1 -0
  531. package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts +4 -0
  532. package/dist/types/runtimes/react/lib/resolved-style-to-css.d.ts.map +1 -0
  533. package/dist/types/runtimes/react/react-runtime-core.d.ts +24 -0
  534. package/dist/types/runtimes/react/react-runtime-core.d.ts.map +1 -0
  535. package/dist/types/runtimes/react/resource-resolver.d.ts +10 -0
  536. package/dist/types/runtimes/react/resource-resolver.d.ts.map +1 -0
  537. package/dist/types/runtimes/react/testing/react-runtime.d.ts +6 -0
  538. package/dist/types/runtimes/react/testing/react-runtime.d.ts.map +1 -0
  539. package/dist/types/runtimes/react/utils/google-fonts-url.d.ts +6 -0
  540. package/dist/types/runtimes/react/utils/google-fonts-url.d.ts.map +1 -0
  541. package/dist/types/slate/BlockPlugin/index.d.ts +13 -1
  542. package/dist/types/slate/BlockPlugin/index.d.ts.map +1 -1
  543. package/dist/types/slate/InlinePlugin/index.d.ts +13 -1
  544. package/dist/types/slate/InlinePlugin/index.d.ts.map +1 -1
  545. package/dist/types/slate/LinkPlugin/getValue.d.ts.map +1 -1
  546. package/dist/types/slate/LinkPlugin/index.d.ts.map +1 -1
  547. package/dist/types/slate/TextAlignPlugin/index.d.ts +13 -1
  548. package/dist/types/slate/TextAlignPlugin/index.d.ts.map +1 -1
  549. package/dist/types/slate/TypographyPlugin/getValue.d.ts.map +1 -1
  550. package/dist/types/slate/TypographyPlugin/index.d.ts.map +1 -1
  551. package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts +5 -0
  552. package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts.map +1 -0
  553. package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts +3 -0
  554. package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts.map +1 -0
  555. package/dist/types/state/__tests__/get-translatable-content.test.d.ts +2 -0
  556. package/dist/types/state/__tests__/get-translatable-content.test.d.ts.map +1 -0
  557. package/dist/types/state/__tests__/merge-element-tree-translated-data.test.d.ts +2 -0
  558. package/dist/types/state/__tests__/merge-element-tree-translated-data.test.d.ts.map +1 -0
  559. package/dist/types/state/__tests__/merge-element.test.d.ts +2 -0
  560. package/dist/types/state/__tests__/merge-element.test.d.ts.map +1 -0
  561. package/dist/types/state/__tests__/store.read-write-state.test.d.ts +2 -0
  562. package/dist/types/state/__tests__/store.read-write-state.test.d.ts.map +1 -0
  563. package/dist/types/state/__tests__/test-store.d.ts +31 -0
  564. package/dist/types/state/__tests__/test-store.d.ts.map +1 -0
  565. package/dist/types/state/actions/index.d.ts +61 -0
  566. package/dist/types/state/actions/index.d.ts.map +1 -0
  567. package/dist/types/state/actions/internal/index.d.ts +29 -0
  568. package/dist/types/state/actions/internal/index.d.ts.map +1 -0
  569. package/dist/types/state/actions/internal/read-only-actions.d.ts +171 -0
  570. package/dist/types/state/actions/internal/read-only-actions.d.ts.map +1 -0
  571. package/dist/types/state/actions/internal/read-write-actions.d.ts +53 -0
  572. package/dist/types/state/actions/internal/read-write-actions.d.ts.map +1 -0
  573. package/dist/types/state/actions/internal.d.ts +181 -0
  574. package/dist/types/state/actions/internal.d.ts.map +1 -0
  575. package/dist/types/state/api-client/client-store.d.ts +6 -0
  576. package/dist/types/state/api-client/client-store.d.ts.map +1 -0
  577. package/dist/types/state/api-client/fetch-api-resource.d.ts +11 -0
  578. package/dist/types/state/api-client/fetch-api-resource.d.ts.map +1 -0
  579. package/dist/types/state/api-client/state.d.ts +30 -0
  580. package/dist/types/state/api-client/state.d.ts.map +1 -0
  581. package/dist/types/state/api-client/store.d.ts +18 -0
  582. package/dist/types/state/api-client/store.d.ts.map +1 -0
  583. package/dist/types/state/builder-api/actions.d.ts +156 -0
  584. package/dist/types/state/builder-api/actions.d.ts.map +1 -0
  585. package/dist/types/state/builder-api/api.d.ts +9 -0
  586. package/dist/types/state/builder-api/api.d.ts.map +1 -0
  587. package/dist/types/state/builder-api/message-channel.d.ts +14 -0
  588. package/dist/types/state/builder-api/message-channel.d.ts.map +1 -0
  589. package/dist/types/state/builder-api/navigation-listener.d.ts +3 -0
  590. package/dist/types/state/builder-api/navigation-listener.d.ts.map +1 -0
  591. package/dist/types/state/builder-api/proxy.d.ts +16 -0
  592. package/dist/types/state/builder-api/proxy.d.ts.map +1 -0
  593. package/dist/types/state/host-api.d.ts +109 -0
  594. package/dist/types/state/host-api.d.ts.map +1 -0
  595. package/dist/types/state/middleware/makeswift-api-client-sync.d.ts +5 -0
  596. package/dist/types/state/middleware/makeswift-api-client-sync.d.ts.map +1 -0
  597. package/dist/types/state/middleware/read-only-element-tree.d.ts +4 -0
  598. package/dist/types/state/middleware/read-only-element-tree.d.ts.map +1 -0
  599. package/dist/types/state/middleware/read-write/builder-api/element-size.d.ts +12 -0
  600. package/dist/types/state/middleware/read-write/builder-api/element-size.d.ts.map +1 -0
  601. package/dist/types/state/middleware/read-write/builder-api/index.d.ts +5 -0
  602. package/dist/types/state/middleware/read-write/builder-api/index.d.ts.map +1 -0
  603. package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts +6 -0
  604. package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts.map +1 -0
  605. package/dist/types/state/middleware/read-write/index.d.ts +5 -0
  606. package/dist/types/state/middleware/read-write/index.d.ts.map +1 -0
  607. package/dist/types/state/middleware/read-write/measure-box-models.d.ts +4 -0
  608. package/dist/types/state/middleware/read-write/measure-box-models.d.ts.map +1 -0
  609. package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts +4 -0
  610. package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts.map +1 -0
  611. package/dist/types/state/middleware/read-write/update-element-tree.d.ts +4 -0
  612. package/dist/types/state/middleware/read-write/update-element-tree.d.ts.map +1 -0
  613. package/dist/types/state/mixins/breakpoint-watch.d.ts +11 -0
  614. package/dist/types/state/mixins/breakpoint-watch.d.ts.map +1 -0
  615. package/dist/types/state/modules/is-read-only.d.ts +6 -0
  616. package/dist/types/state/modules/is-read-only.d.ts.map +1 -0
  617. package/dist/types/state/modules/locale.d.ts +6 -0
  618. package/dist/types/state/modules/locale.d.ts.map +1 -0
  619. package/dist/types/state/modules/read-write/box-models.d.ts +26 -0
  620. package/dist/types/state/modules/read-write/box-models.d.ts.map +1 -0
  621. package/dist/types/state/modules/read-write/element-imperative-handles.d.ts +6 -0
  622. package/dist/types/state/modules/read-write/element-imperative-handles.d.ts.map +1 -0
  623. package/dist/types/state/modules/read-write/pointer.d.ts +11 -0
  624. package/dist/types/state/modules/read-write/pointer.d.ts.map +1 -0
  625. package/dist/types/state/modules/read-write/read-write-documents.d.ts +14 -0
  626. package/dist/types/state/modules/read-write/read-write-documents.d.ts.map +1 -0
  627. package/dist/types/state/modules/site-version.d.ts +7 -0
  628. package/dist/types/state/modules/site-version.d.ts.map +1 -0
  629. package/dist/types/state/ops/copy-element-tree.d.ts +37 -0
  630. package/dist/types/state/ops/copy-element-tree.d.ts.map +1 -0
  631. package/dist/types/state/ops/merge-element.d.ts +4 -0
  632. package/dist/types/state/ops/merge-element.d.ts.map +1 -0
  633. package/dist/types/state/read-only-state.d.ts +131 -0
  634. package/dist/types/state/read-only-state.d.ts.map +1 -0
  635. package/dist/types/state/read-write-state.d.ts +62 -0
  636. package/dist/types/state/read-write-state.d.ts.map +1 -0
  637. package/dist/types/state/shared-api.d.ts +50 -0
  638. package/dist/types/state/shared-api.d.ts.map +1 -0
  639. package/dist/types/state/store.d.ts +86 -0
  640. package/dist/types/state/store.d.ts.map +1 -0
  641. package/dist/types/state/translations/get.d.ts +4 -0
  642. package/dist/types/state/translations/get.d.ts.map +1 -0
  643. package/dist/types/state/translations/merge.d.ts +7 -0
  644. package/dist/types/state/translations/merge.d.ts.map +1 -0
  645. package/dist/types/state/unified-state.d.ts +9 -0
  646. package/dist/types/state/unified-state.d.ts.map +1 -0
  647. package/dist/types/translations/index.d.ts +6 -0
  648. package/dist/types/translations/index.d.ts.map +1 -0
  649. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts +2 -0
  650. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts.map +1 -0
  651. package/dist/types/utils/deferred.d.ts +7 -0
  652. package/dist/types/utils/deferred.d.ts.map +1 -0
  653. package/dist/types/utils/ref-counted-map.d.ts +32 -0
  654. package/dist/types/utils/ref-counted-map.d.ts.map +1 -0
  655. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/control.ts"],"sourcesContent":["import {\n copyRichTextData,\n type CopyContext,\n type Data,\n type MergeContext,\n type MergeTranslatableDataContext,\n} from '@makeswift/controls'\n\nimport {\n GridPropControllerData,\n Types as PropControllerTypes,\n mergeGridPropControllerTranslatedData,\n} from '@makeswift/prop-controllers'\n\nimport { Descriptor, isLegacyDescriptor } from '../prop-controllers/descriptors'\nimport { copy as propControllerCopy } from '../prop-controllers/copy'\nimport { DELETED_PROP_CONTROLLER_TYPES, PropControllerDescriptor } from '../prop-controllers'\nimport { ReactMergeTranslationsVisitor } from './visitors/merge-translations-visitor'\n\nexport function copy(definition: Descriptor, value: any, context: CopyContext) {\n if (!isLegacyDescriptor(definition)) {\n return definition.copyData(value, context)\n }\n\n switch (definition.type) {\n case PropControllerTypes.Backgrounds:\n case PropControllerTypes.Grid:\n case PropControllerTypes.NavigationLinks:\n case PropControllerTypes.Link:\n case PropControllerTypes.Shadows:\n case PropControllerTypes.Image:\n case PropControllerTypes.Images:\n case PropControllerTypes.ResponsiveColor:\n case PropControllerTypes.TableFormFields:\n case PropControllerTypes.Table:\n case PropControllerTypes.Border:\n case PropControllerTypes.ElementID:\n return propControllerCopy(definition, value, context)\n\n case DELETED_PROP_CONTROLLER_TYPES.RichText:\n return copyRichTextData(value, context)\n\n default:\n return value\n }\n}\n\nexport function merge(\n definition: PropControllerDescriptor,\n a: Data,\n b: Data = a,\n context: MergeContext,\n): Data {\n if (!isLegacyDescriptor(definition)) {\n return definition.mergeData(a, b, context)\n }\n\n switch (definition.type) {\n default:\n return b\n }\n}\n\nexport function getTranslatableData(definition: Descriptor, data: Data): Data {\n if (!isLegacyDescriptor(definition)) {\n return definition.getTranslatableData(data)\n }\n\n switch (definition.type) {\n case PropControllerTypes.TextInput:\n case PropControllerTypes.TextArea:\n return data\n\n default:\n return null\n }\n}\n\nexport function mergeTranslatedData(\n definition: PropControllerDescriptor,\n data: Data,\n translatedData: Data,\n context: MergeTranslatableDataContext,\n): Data {\n if (data == null) return data\n if (!isLegacyDescriptor(definition)) {\n const mergeTranslationsVisitor = new ReactMergeTranslationsVisitor(context)\n return definition.accept(mergeTranslationsVisitor, data, translatedData)\n }\n\n switch (definition.type) {\n case PropControllerTypes.TextInput:\n case PropControllerTypes.TextArea:\n if (translatedData == null) return data\n return translatedData\n\n case PropControllerTypes.Grid:\n return mergeGridPropControllerTranslatedData(data as GridPropControllerData, context)\n\n default:\n return data\n }\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAKK;AAEP;AAAA,EAEE,SAAS;AAAA,EACT;AAAA,OACK;AAEP,SAAqB,0BAA0B;AAC/C,SAAS,QAAQ,0BAA0B;AAC3C,SAAS,qCAA+D;AACxE,SAAS,qCAAqC;AAEvC,SAAS,KAAK,YAAwB,OAAY,SAAsB;AAC7E,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,SAAS,OAAO,OAAO;AAAA,EAC3C;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AACvB,aAAO,mBAAmB,YAAY,OAAO,OAAO;AAAA,IAEtD,KAAK,8BAA8B;AACjC,aAAO,iBAAiB,OAAO,OAAO;AAAA,IAExC;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,MACd,YACA,GACA,IAAU,GACV,SACM;AACN,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,UAAU,GAAG,GAAG,OAAO;AAAA,EAC3C;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,oBAAoB,YAAwB,MAAkB;AAC5E,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,oBAAoB,IAAI;AAAA,EAC5C;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AACvB,aAAO;AAAA,IAET;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,oBACd,YACA,MACA,gBACA,SACM;AACN,MAAI,QAAQ;AAAM,WAAO;AACzB,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,UAAM,2BAA2B,IAAI,8BAA8B,OAAO;AAC1E,WAAO,WAAW,OAAO,0BAA0B,MAAM,cAAc;AAAA,EACzE;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AACvB,UAAI,kBAAkB;AAAM,eAAO;AACnC,aAAO;AAAA,IAET,KAAK,oBAAoB;AACvB,aAAO,sCAAsC,MAAgC,OAAO;AAAA,IAEtF;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/controls/control.ts"],"sourcesContent":["import {\n copyRichTextData,\n type CopyContext,\n type Data,\n type MergeContext,\n type MergeTranslatableDataContext,\n} from '@makeswift/controls'\n\nimport {\n GridPropControllerData,\n Types as PropControllerTypes,\n mergeGridPropControllerTranslatedData,\n} from '@makeswift/prop-controllers'\n\nimport { Descriptor, isLegacyDescriptor } from '../prop-controllers/descriptors'\nimport { copy as propControllerCopy } from '../prop-controllers/copy'\nimport { DELETED_PROP_CONTROLLER_TYPES, PropControllerDescriptor } from '../prop-controllers'\n\nexport function copy(definition: Descriptor, value: any, context: CopyContext) {\n if (!isLegacyDescriptor(definition)) {\n return definition.copyData(value, context)\n }\n\n switch (definition.type) {\n case PropControllerTypes.Backgrounds:\n case PropControllerTypes.Grid:\n case PropControllerTypes.NavigationLinks:\n case PropControllerTypes.Link:\n case PropControllerTypes.Shadows:\n case PropControllerTypes.Image:\n case PropControllerTypes.Images:\n case PropControllerTypes.ResponsiveColor:\n case PropControllerTypes.TableFormFields:\n case PropControllerTypes.Table:\n case PropControllerTypes.Border:\n case PropControllerTypes.ElementID:\n return propControllerCopy(definition, value, context)\n\n case DELETED_PROP_CONTROLLER_TYPES.RichText:\n return copyRichTextData(value, context)\n\n default:\n return value\n }\n}\n\nexport function merge(\n definition: PropControllerDescriptor,\n a: Data,\n b: Data = a,\n context: MergeContext,\n): Data {\n if (!isLegacyDescriptor(definition)) {\n return definition.mergeData(a, b, context)\n }\n\n switch (definition.type) {\n default:\n return b\n }\n}\n\nexport function getTranslatableData(definition: Descriptor, data: Data): Data {\n if (!isLegacyDescriptor(definition)) {\n return definition.getTranslatableData(data)\n }\n\n switch (definition.type) {\n case PropControllerTypes.TextInput:\n case PropControllerTypes.TextArea:\n return data\n\n default:\n return null\n }\n}\n\nexport function mergeTranslatedData(\n definition: PropControllerDescriptor,\n data: Data,\n translatedData: Data,\n context: MergeTranslatableDataContext,\n): Data {\n if (data == null) return data\n if (!isLegacyDescriptor(definition)) {\n return definition.mergeTranslatedData(data, translatedData, context)\n }\n\n switch (definition.type) {\n case PropControllerTypes.TextInput:\n case PropControllerTypes.TextArea:\n if (translatedData == null) return data\n return translatedData\n\n case PropControllerTypes.Grid:\n return mergeGridPropControllerTranslatedData(data as GridPropControllerData, context)\n\n default:\n return data\n }\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,OAKK;AAEP;AAAA,EAEE,SAAS;AAAA,EACT;AAAA,OACK;AAEP,SAAqB,0BAA0B;AAC/C,SAAS,QAAQ,0BAA0B;AAC3C,SAAS,qCAA+D;AAEjE,SAAS,KAAK,YAAwB,OAAY,SAAsB;AAC7E,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,SAAS,OAAO,OAAO;AAAA,EAC3C;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AACvB,aAAO,mBAAmB,YAAY,OAAO,OAAO;AAAA,IAEtD,KAAK,8BAA8B;AACjC,aAAO,iBAAiB,OAAO,OAAO;AAAA,IAExC;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,MACd,YACA,GACA,IAAU,GACV,SACM;AACN,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,UAAU,GAAG,GAAG,OAAO;AAAA,EAC3C;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,oBAAoB,YAAwB,MAAkB;AAC5E,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,oBAAoB,IAAI;AAAA,EAC5C;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AACvB,aAAO;AAAA,IAET;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,oBACd,YACA,MACA,gBACA,SACM;AACN,MAAI,QAAQ;AAAM,WAAO;AACzB,MAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC,WAAO,WAAW,oBAAoB,MAAM,gBAAgB,OAAO;AAAA,EACrE;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,oBAAoB;AAAA,IACzB,KAAK,oBAAoB;AACvB,UAAI,kBAAkB;AAAM,eAAO;AACnC,aAAO;AAAA,IAET,KAAK,oBAAoB;AACvB,aAAO,sCAAsC,MAAgC,OAAO;AAAA,IAEtF;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -17,7 +17,10 @@ import { toText } from "../../slate/utils";
17
17
  import { renderRichTextV2 } from "../../runtimes/react/controls/rich-text-v2";
18
18
  import { Plugin } from "./plugin";
19
19
  import { RichTextV2Control } from "./control";
20
- import { getTranslatableData } from "./translations/get-translations";
20
+ import {
21
+ getTranslatableData,
22
+ mergeTranslatedNodes
23
+ } from "./translation";
21
24
  class Definition extends BaseRichTextDefinition {
22
25
  constructor({ mode, defaultValue }, plugins) {
23
26
  super({
@@ -86,6 +89,19 @@ class Definition extends BaseRichTextDefinition {
86
89
  return null;
87
90
  return getTranslatableData(Definition.dataToNodes(data), this.config.plugins);
88
91
  }
92
+ mergeTranslatedData(data, translatedData, _context) {
93
+ if (data == null || translatedData == null)
94
+ return data;
95
+ const { descendants, ...rest } = Definition.normalizeData(data);
96
+ return {
97
+ ...rest,
98
+ descendants: mergeTranslatedNodes(
99
+ descendants,
100
+ translatedData,
101
+ this.config.plugins
102
+ )
103
+ };
104
+ }
89
105
  serialize() {
90
106
  const { plugins, ...config } = this.config;
91
107
  const pluginDefs = plugins.map(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/controls/rich-text-v2/rich-text-v2.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport { z } from 'zod'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition as BaseRichTextDefinition,\n isNotNil,\n ControlDefinition,\n SerializationSchema,\n serialize,\n StableValue,\n type Data,\n type Resolvable,\n type SendMessage,\n type SerializedRecord,\n type DeserializedRecord,\n type SchemaType,\n type SchemaTypeAny,\n type RichTextPluginControl,\n type ResourceResolver,\n type Stylesheet,\n type RichTextMode,\n} from '@makeswift/controls'\n\nimport { LinkPlugin } from '../../slate/LinkPlugin'\nimport { InlinePlugin } from '../../slate/InlinePlugin'\nimport { TextAlignPlugin } from '../../slate/TextAlignPlugin'\nimport { BlockPlugin } from '../../slate/BlockPlugin'\nimport { TypographyPlugin } from '../../slate/TypographyPlugin'\nimport { InlineModePlugin } from '../../slate/InlineModePlugin'\nimport { toText } from '../../slate/utils'\n\nimport { renderRichTextV2 } from '../../runtimes/react/controls/rich-text-v2'\n\nimport { RichTextV2Plugin, Plugin } from './plugin'\nimport { RichTextV2Control } from './control'\nimport { getTranslatableData } from './translations/get-translations'\n\ntype DataType = z.infer<typeof Definition.schema.data>\ntype DataV2Type = z.infer<typeof Definition.schema.dataV2>\ntype InstanceType = RichTextV2Control\ntype UserConfig = z.infer<typeof Definition.schema.userConfig>\ntype Config = UserConfig & {\n defaultValue: string\n plugins: RichTextV2Plugin[]\n}\n\nclass Definition extends BaseRichTextDefinition<ReactNode, Config, InstanceType> {\n constructor({ mode, defaultValue }: UserConfig, plugins?: RichTextV2Plugin[]) {\n super({\n mode,\n defaultValue:\n defaultValue ??\n (mode === Definition.Mode.Inline ? 'Edit this text' : Definition.generateParagraph()),\n plugins:\n plugins ??\n (mode === Definition.Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n })\n }\n\n static generateParagraph(): string {\n return ipsum(3)\n }\n\n static deserialize(\n data: DeserializedRecord,\n deserializeCallback: (r: DeserializedRecord) => ControlDefinition,\n ): RichTextV2Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`)\n }\n\n const { config } = Definition.fullSchema({\n pluginDef: SerializationSchema.deserializedRecord,\n }).definition.parse(data)\n\n const { plugins, ...userConfig } = config\n\n return new RichTextV2Definition(\n userConfig,\n plugins.map(({ control }) =>\n control ? { control: { definition: deserializeCallback(control?.definition) } } : {},\n ),\n )\n }\n\n static fullSchema<S extends SchemaTypeAny>({ pluginDef }: { pluginDef: S }) {\n const baseSchema = super.schema\n const plugin = z.object({\n control: z\n .object({\n definition: pluginDef,\n })\n .optional(),\n })\n\n const config = baseSchema.userConfig.extend({\n defaultValue: z.string(),\n plugins: z.array(plugin),\n })\n\n return {\n ...baseSchema,\n config,\n definition: z.object({\n type: baseSchema.type,\n config,\n }),\n }\n }\n\n get configSchema(): SchemaType<Config> {\n return Definition.fullSchema({ pluginDef: z.any() as SchemaType<ControlDefinition> }).config\n }\n\n createInstance(sendMessage: SendMessage): InstanceType {\n return new RichTextV2Control(sendMessage, this)\n }\n\n resolveValue(\n data: DataType | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: InstanceType,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichTextV2(data, this, control ?? null),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n getTranslatableData(data: DataType | undefined): Data {\n if (data == null) return null\n return getTranslatableData(Definition.dataToNodes(data), this.config.plugins)\n }\n\n serialize(): [SerializedRecord, Transferable[]] {\n const { plugins, ...config } = this.config\n\n // serialize only the plugin control definition, if any\n const pluginDefs = plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n return serialize(\n { ...config, plugins: pluginDefs },\n {\n type: Definition.type,\n },\n )\n }\n\n get pluginControls(): RichTextPluginControl[] {\n return this.config.plugins.map(plugin => plugin.control).filter(isNotNil)\n }\n\n pluginControlAt(index: number): RichTextPluginControl | undefined {\n return this.pluginControls[index]\n }\n\n toText(data: DataType | undefined): string {\n if (data == null) return ''\n return toText(Definition.dataToNodes(data), this.config.mode ?? Definition.Mode.Block)\n }\n}\n\nexport class RichTextV2Definition extends Definition {}\n\nexport function RichText(config?: UserConfig): RichTextV2Definition {\n return new RichTextV2Definition(config ?? {})\n}\n\nRichText.Mode = Definition.Mode\nRichText.isV1Data = Definition.isV1Data\nRichText.dataToNodes = Definition.dataToNodes\nRichText.Plugin = Plugin\n\nexport { RichTextMode as RichTextV2Mode, type DataV2Type as RichTextDataV2, RichTextV2Control }\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/controls/rich-text-v2/rich-text-v2.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport { z } from 'zod'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition as BaseRichTextDefinition,\n isNotNil,\n ControlDefinition,\n SerializationSchema,\n serialize,\n StableValue,\n type Data,\n type Resolvable,\n type SendMessage,\n type SerializedRecord,\n type DeserializedRecord,\n type SchemaType,\n type SchemaTypeAny,\n type MergeTranslatableDataContext,\n type RichTextPluginControl,\n type ResourceResolver,\n type Stylesheet,\n type RichTextMode,\n} from '@makeswift/controls'\n\nimport { LinkPlugin } from '../../slate/LinkPlugin'\nimport { InlinePlugin } from '../../slate/InlinePlugin'\nimport { TextAlignPlugin } from '../../slate/TextAlignPlugin'\nimport { BlockPlugin } from '../../slate/BlockPlugin'\nimport { TypographyPlugin } from '../../slate/TypographyPlugin'\nimport { InlineModePlugin } from '../../slate/InlineModePlugin'\nimport { toText } from '../../slate/utils'\n\nimport { renderRichTextV2 } from '../../runtimes/react/controls/rich-text-v2'\n\nimport { RichTextV2Plugin, Plugin } from './plugin'\nimport { RichTextV2Control } from './control'\nimport {\n getTranslatableData,\n mergeTranslatedNodes,\n type RichTextTranslationDto,\n} from './translation'\n\ntype DataType = z.infer<typeof Definition.schema.data>\ntype DataV2Type = z.infer<typeof Definition.schema.dataV2>\ntype InstanceType = RichTextV2Control\ntype UserConfig = z.infer<typeof Definition.schema.userConfig>\ntype Config = UserConfig & {\n defaultValue: string\n plugins: RichTextV2Plugin[]\n}\n\nclass Definition extends BaseRichTextDefinition<ReactNode, Config, InstanceType> {\n constructor({ mode, defaultValue }: UserConfig, plugins?: RichTextV2Plugin[]) {\n super({\n mode,\n defaultValue:\n defaultValue ??\n (mode === Definition.Mode.Inline ? 'Edit this text' : Definition.generateParagraph()),\n plugins:\n plugins ??\n (mode === Definition.Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n })\n }\n\n static generateParagraph(): string {\n return ipsum(3)\n }\n\n static deserialize(\n data: DeserializedRecord,\n deserializeCallback: (r: DeserializedRecord) => ControlDefinition,\n ): RichTextV2Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`)\n }\n\n const { config } = Definition.fullSchema({\n pluginDef: SerializationSchema.deserializedRecord,\n }).definition.parse(data)\n\n const { plugins, ...userConfig } = config\n\n return new RichTextV2Definition(\n userConfig,\n plugins.map(({ control }) =>\n control ? { control: { definition: deserializeCallback(control?.definition) } } : {},\n ),\n )\n }\n\n static fullSchema<S extends SchemaTypeAny>({ pluginDef }: { pluginDef: S }) {\n const baseSchema = super.schema\n const plugin = z.object({\n control: z\n .object({\n definition: pluginDef,\n })\n .optional(),\n })\n\n const config = baseSchema.userConfig.extend({\n defaultValue: z.string(),\n plugins: z.array(plugin),\n })\n\n return {\n ...baseSchema,\n config,\n definition: z.object({\n type: baseSchema.type,\n config,\n }),\n }\n }\n\n get configSchema(): SchemaType<Config> {\n return Definition.fullSchema({ pluginDef: z.any() as SchemaType<ControlDefinition> }).config\n }\n\n createInstance(sendMessage: SendMessage): InstanceType {\n return new RichTextV2Control(sendMessage, this)\n }\n\n resolveValue(\n data: DataType | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: InstanceType,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichTextV2(data, this, control ?? null),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n getTranslatableData(data: DataType | undefined): Data {\n if (data == null) return null\n return getTranslatableData(Definition.dataToNodes(data), this.config.plugins)\n }\n\n mergeTranslatedData(\n data: DataType | undefined,\n translatedData: Data,\n _context: MergeTranslatableDataContext,\n ): Data {\n if (data == null || translatedData == null) return data as Data\n\n const { descendants, ...rest } = Definition.normalizeData(data)\n return {\n ...rest,\n descendants: mergeTranslatedNodes(\n descendants,\n translatedData as RichTextTranslationDto,\n this.config.plugins,\n ),\n }\n }\n\n serialize(): [SerializedRecord, Transferable[]] {\n const { plugins, ...config } = this.config\n\n // serialize only the plugin control definition, if any\n const pluginDefs = plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n return serialize(\n { ...config, plugins: pluginDefs },\n {\n type: Definition.type,\n },\n )\n }\n\n get pluginControls(): RichTextPluginControl[] {\n return this.config.plugins.map(plugin => plugin.control).filter(isNotNil)\n }\n\n pluginControlAt(index: number): RichTextPluginControl | undefined {\n return this.pluginControls[index]\n }\n\n toText(data: DataType | undefined): string {\n if (data == null) return ''\n return toText(Definition.dataToNodes(data), this.config.mode ?? Definition.Mode.Block)\n }\n}\n\nexport class RichTextV2Definition extends Definition {}\n\nexport function RichText(config?: UserConfig): RichTextV2Definition {\n return new RichTextV2Definition(config ?? {})\n}\n\nRichText.Mode = Definition.Mode\nRichText.isV1Data = Definition.isV1Data\nRichText.dataToNodes = Definition.dataToNodes\nRichText.Plugin = Plugin\n\nexport { RichTextMode as RichTextV2Mode, type DataV2Type as RichTextDataV2, RichTextV2Control }\n"],"mappings":"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","names":[]}
@@ -0,0 +1,152 @@
1
+ import escapeHtml from "escape-html";
2
+ import { Editor, Node, Text, Transforms, createEditor } from "slate";
3
+ import { jsx } from "slate-hyperscript";
4
+ import { parseFragment } from "parse5";
5
+ import { Slate } from "@makeswift/controls";
6
+ import { BlockType, InlineType } from "../../slate/types";
7
+ function createEditorWithPlugins(plugins) {
8
+ return plugins.reduceRight(
9
+ (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,
10
+ createEditor()
11
+ );
12
+ }
13
+ function pathToString(path) {
14
+ return path.join(":");
15
+ }
16
+ function stringToPath(s) {
17
+ return s.split(":").map((a) => parseInt(a));
18
+ }
19
+ function getDescendantTranslatableData(descendant, path) {
20
+ if (Text.isText(descendant)) {
21
+ return {};
22
+ }
23
+ if (Slate.isList(descendant) || Slate.isListItem(descendant)) {
24
+ return descendant.children.reduce(
25
+ (acc, d, j) => ({ ...acc, ...getDescendantTranslatableData(d, [...path, j]) }),
26
+ {}
27
+ );
28
+ }
29
+ const text = getInlineOrTextTranslatableData(descendant);
30
+ if (text == null)
31
+ return {};
32
+ return { [pathToString(path)]: text };
33
+ }
34
+ function getInlineOrTextTranslatableData(descendant, path = []) {
35
+ if (Text.isText(descendant)) {
36
+ let string = escapeHtml(descendant.text);
37
+ if (string === "")
38
+ return null;
39
+ if (descendant.typography === void 0)
40
+ return string;
41
+ return `<span key="${pathToString(path)}">${string}</span>`;
42
+ }
43
+ const children = descendant.children.map((child, i) => getInlineOrTextTranslatableData(child, [...path, i])).join("");
44
+ if (children === "")
45
+ return null;
46
+ switch (descendant.type) {
47
+ case InlineType.Link:
48
+ return `<a key="${pathToString(path)}">${children}</a>`;
49
+ case InlineType.SuperScript:
50
+ return `<sup key="${pathToString(path)}">${children}</sup>`;
51
+ case InlineType.SubScript:
52
+ return `<sub key="${pathToString(path)}">${children}</sub>`;
53
+ case InlineType.Code:
54
+ return `<code key="${pathToString(path)}">${children}</code>`;
55
+ default:
56
+ return children;
57
+ }
58
+ }
59
+ function getTranslatableData(nodes, plugins) {
60
+ const editor = createEditorWithPlugins(plugins);
61
+ editor.children = nodes;
62
+ editor.typographyNormalizationDirection = "up";
63
+ Editor.normalize(editor, { force: true });
64
+ return editor.children.reduce(
65
+ (acc, descendant, i) => ({
66
+ ...acc,
67
+ ...getDescendantTranslatableData(descendant, [i])
68
+ }),
69
+ {}
70
+ );
71
+ }
72
+ function deserializeTranslationHtmlString(el, translationKey) {
73
+ if (el.nodeName === "#document-fragment") {
74
+ const children = Array.from(el.childNodes).map((element) => deserializeTranslationHtmlString(element)).flat();
75
+ if (children.length === 0) {
76
+ children.push(jsx("text", {}, ""));
77
+ }
78
+ return children;
79
+ }
80
+ if (el.nodeName === "#text" && "value" in el) {
81
+ return [jsx("text", { translationKey: translationKey ?? void 0 }, el.value)];
82
+ }
83
+ if ("namespaceURI" in el) {
84
+ const translationKey2 = el.attrs.find((a) => a.name === "key")?.value ?? void 0;
85
+ const children = Array.from(el.childNodes).map((element) => deserializeTranslationHtmlString(element, translationKey2)).flat();
86
+ if (children.length === 0) {
87
+ children.push(jsx("text", {}, ""));
88
+ }
89
+ switch (el.nodeName) {
90
+ case "code":
91
+ return [jsx("element", { type: InlineType.Code, translationKey: translationKey2 }, children)];
92
+ case "sub":
93
+ return [jsx("element", { type: InlineType.SubScript, translationKey: translationKey2 }, children)];
94
+ case "sup":
95
+ return [jsx("element", { type: InlineType.SuperScript, translationKey: translationKey2 }, children)];
96
+ case "a":
97
+ return [jsx("element", { type: InlineType.Link, translationKey: translationKey2 }, children)];
98
+ default:
99
+ return children;
100
+ }
101
+ }
102
+ return [];
103
+ }
104
+ function mergeTranslatedNodes(nodes, translatedData, plugins) {
105
+ const sourceEditor = createEditorWithPlugins(plugins);
106
+ const targetEditor = createEditorWithPlugins(plugins);
107
+ sourceEditor.children = nodes;
108
+ sourceEditor.typographyNormalizationDirection = "up";
109
+ Editor.normalize(sourceEditor, { force: true });
110
+ Object.entries(translatedData).reverse().forEach(([blockStringPath, htmlString]) => {
111
+ const blockPath = stringToPath(blockStringPath);
112
+ if (blockPath.length === 0)
113
+ return;
114
+ const html = parseFragment(htmlString);
115
+ const inlineDescendants = deserializeTranslationHtmlString(html);
116
+ targetEditor.children = [{ type: BlockType.Default, children: inlineDescendants }];
117
+ targetEditor.typographyNormalizationDirection = "neutral";
118
+ Editor.normalize(targetEditor, { force: true });
119
+ for (const [descendant, absolutePathToTargetNode] of Node.descendants(targetEditor)) {
120
+ if (!Text.isText(descendant) && !Slate.isInline(descendant) || descendant.translationKey == null || descendant.translationKey === "") {
121
+ continue;
122
+ }
123
+ const relativePathToSourceNode = stringToPath(descendant.translationKey);
124
+ const absolutePathToSourceNode = [...blockPath, ...relativePathToSourceNode];
125
+ const [sourceNode] = Editor.node(sourceEditor, absolutePathToSourceNode);
126
+ if (Text.isText(sourceNode) && Text.isText(descendant)) {
127
+ const { translationKey, text, ...rest } = sourceNode;
128
+ Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode });
129
+ Transforms.unsetNodes(targetEditor, "translationKey", { at: absolutePathToTargetNode });
130
+ } else if (Slate.isInline(sourceNode) && Slate.isInline(descendant)) {
131
+ const { translationKey, children, ...rest } = sourceNode;
132
+ Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode });
133
+ Transforms.unsetNodes(targetEditor, "translationKey", { at: absolutePathToTargetNode });
134
+ }
135
+ }
136
+ const translatedChildren = targetEditor.children.at(0)?.children;
137
+ Editor.withoutNormalizing(sourceEditor, () => {
138
+ Array.from(Node.children(sourceEditor, blockPath)).reverse().forEach(([_, path]) => {
139
+ Transforms.removeNodes(sourceEditor, { at: path });
140
+ });
141
+ Transforms.insertNodes(sourceEditor, translatedChildren, { at: [...blockPath, 0] });
142
+ });
143
+ });
144
+ sourceEditor.typographyNormalizationDirection = "down";
145
+ Editor.normalize(sourceEditor, { force: true });
146
+ return sourceEditor.children;
147
+ }
148
+ export {
149
+ getTranslatableData,
150
+ mergeTranslatedNodes
151
+ };
152
+ //# sourceMappingURL=translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/controls/rich-text-v2/translation.ts"],"sourcesContent":["import escapeHtml from 'escape-html'\nimport { Descendant, Editor, Element, Node, Text, Transforms, createEditor } from 'slate'\nimport { jsx } from 'slate-hyperscript'\nimport { parseFragment } from 'parse5'\nimport { ChildNode, DocumentFragment } from 'parse5/dist/tree-adapters/default'\n\nimport { type TranslationDto, Slate } from '@makeswift/controls'\n\nimport { RichTextV2Plugin } from './plugin'\nimport { type MakeswiftEditor, BlockType, InlineType } from '../../slate/types'\n\nfunction createEditorWithPlugins(plugins: RichTextV2Plugin[]): MakeswiftEditor {\n return plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n createEditor(),\n )\n}\n\nfunction pathToString(path: number[]): string {\n return path.join(':')\n}\n\nfunction stringToPath(s: string): number[] {\n return s.split(':').map(a => parseInt(a))\n}\n\nfunction getDescendantTranslatableData(descendant: Descendant, path: number[]): TranslationDto {\n if (Text.isText(descendant)) {\n return {}\n }\n\n if (Slate.isList(descendant) || Slate.isListItem(descendant)) {\n return descendant.children.reduce(\n (acc, d, j) => ({ ...acc, ...getDescendantTranslatableData(d, [...path, j]) }),\n {},\n )\n }\n\n const text = getInlineOrTextTranslatableData(descendant)\n if (text == null) return {}\n\n return { [pathToString(path)]: text }\n}\n\nfunction getInlineOrTextTranslatableData(\n descendant: Descendant,\n path: number[] = [],\n): string | null {\n if (Text.isText(descendant)) {\n let string = escapeHtml(descendant.text)\n\n if (string === '') return null\n\n if (descendant.typography === undefined) return string\n\n return `<span key=\"${pathToString(path)}\">${string}</span>`\n }\n\n const children = descendant.children\n .map((child: Descendant, i: number) => getInlineOrTextTranslatableData(child, [...path, i]))\n .join('')\n\n if (children === '') return null\n\n switch (descendant.type) {\n case InlineType.Link:\n return `<a key=\"${pathToString(path)}\">${children}</a>`\n\n case InlineType.SuperScript:\n return `<sup key=\"${pathToString(path)}\">${children}</sup>`\n\n case InlineType.SubScript:\n return `<sub key=\"${pathToString(path)}\">${children}</sub>`\n\n case InlineType.Code:\n return `<code key=\"${pathToString(path)}\">${children}</code>`\n\n default:\n return children\n }\n}\n\nexport type RichTextTranslationDto = Record<string, string>\n\nexport function getTranslatableData(\n nodes: Slate.Descendant[],\n plugins: RichTextV2Plugin[],\n): RichTextTranslationDto {\n const editor = createEditorWithPlugins(plugins)\n\n editor.children = nodes\n editor.typographyNormalizationDirection = 'up'\n Editor.normalize(editor, { force: true })\n\n return editor.children.reduce(\n (acc, descendant: Descendant, i) => ({\n ...acc,\n ...getDescendantTranslatableData(descendant, [i]),\n }),\n {},\n )\n}\n\nfunction deserializeTranslationHtmlString(\n el: ChildNode | DocumentFragment,\n translationKey?: string,\n): Descendant[] {\n if (el.nodeName === '#document-fragment') {\n const children = Array.from(el.childNodes)\n .map(element => deserializeTranslationHtmlString(element))\n .flat()\n\n if (children.length === 0) {\n children.push(jsx('text', {}, ''))\n }\n\n return children\n }\n\n if (el.nodeName === '#text' && 'value' in el) {\n return [jsx('text', { translationKey: translationKey ?? undefined }, el.value)]\n }\n\n if ('namespaceURI' in el) {\n const translationKey = el.attrs.find(a => a.name === 'key')?.value ?? undefined\n const children = Array.from(el.childNodes)\n .map(element => deserializeTranslationHtmlString(element, translationKey))\n .flat()\n\n if (children.length === 0) {\n children.push(jsx('text', {}, ''))\n }\n\n switch (el.nodeName) {\n case 'code':\n return [jsx('element', { type: InlineType.Code, translationKey }, children)]\n\n case 'sub':\n return [jsx('element', { type: InlineType.SubScript, translationKey }, children)]\n\n case 'sup':\n return [jsx('element', { type: InlineType.SuperScript, translationKey }, children)]\n\n case 'a':\n return [jsx('element', { type: InlineType.Link, translationKey }, children)]\n\n default:\n return children\n }\n }\n\n return []\n}\n\nexport function mergeTranslatedNodes(\n nodes: Slate.Descendant[],\n translatedData: RichTextTranslationDto,\n plugins: RichTextV2Plugin[],\n): Slate.Descendant[] {\n const sourceEditor = createEditorWithPlugins(plugins)\n const targetEditor = createEditorWithPlugins(plugins)\n\n sourceEditor.children = nodes\n sourceEditor.typographyNormalizationDirection = 'up'\n Editor.normalize(sourceEditor, { force: true })\n\n Object.entries(translatedData)\n .reverse()\n .forEach(([blockStringPath, htmlString]) => {\n const blockPath = stringToPath(blockStringPath)\n if (blockPath.length === 0) return\n\n const html = parseFragment(htmlString)\n const inlineDescendants = deserializeTranslationHtmlString(html)\n\n targetEditor.children = [{ type: BlockType.Default, children: inlineDescendants }]\n\n targetEditor.typographyNormalizationDirection = 'neutral'\n Editor.normalize(targetEditor, { force: true })\n\n for (const [descendant, absolutePathToTargetNode] of Node.descendants(targetEditor)) {\n if (\n (!Text.isText(descendant) && !Slate.isInline(descendant)) ||\n descendant.translationKey == null ||\n descendant.translationKey === ''\n ) {\n continue\n }\n\n const relativePathToSourceNode = stringToPath(descendant.translationKey)\n\n const absolutePathToSourceNode = [...blockPath, ...relativePathToSourceNode]\n\n const [sourceNode] = Editor.node(sourceEditor, absolutePathToSourceNode)\n\n if (Text.isText(sourceNode) && Text.isText(descendant)) {\n const { translationKey, text, ...rest } = sourceNode\n Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode })\n Transforms.unsetNodes(targetEditor, 'translationKey', { at: absolutePathToTargetNode })\n } else if (Slate.isInline(sourceNode) && Slate.isInline(descendant)) {\n const { translationKey, children, ...rest } = sourceNode\n Transforms.setNodes(targetEditor, rest, { at: absolutePathToTargetNode })\n Transforms.unsetNodes(targetEditor, 'translationKey', { at: absolutePathToTargetNode })\n }\n }\n const translatedChildren = (targetEditor.children.at(0) as Element)?.children\n\n Editor.withoutNormalizing(sourceEditor, () => {\n Array.from(Node.children(sourceEditor, blockPath))\n .reverse()\n .forEach(([_, path]) => {\n Transforms.removeNodes(sourceEditor, { at: path })\n })\n\n Transforms.insertNodes(sourceEditor, translatedChildren, { at: [...blockPath, 0] })\n })\n })\n\n sourceEditor.typographyNormalizationDirection = 'down'\n Editor.normalize(sourceEditor, { force: true })\n\n return sourceEditor.children\n}\n"],"mappings":"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","names":["translationKey"]}
@@ -0,0 +1,78 @@
1
+ import {
2
+ ShapeV2Definition,
3
+ deserializeRecord
4
+ } from "@makeswift/controls";
5
+ import {
6
+ CheckboxDefinition,
7
+ CodeDefinition,
8
+ ColorDefinition,
9
+ ComboboxDefinition,
10
+ FontDefinition,
11
+ GroupDefinition,
12
+ IconRadioGroupDefinition,
13
+ ImageDefinition,
14
+ LinkDefinition,
15
+ ListDefinition,
16
+ NumberDefinition,
17
+ RichTextV1Definition,
18
+ RichTextV2Definition,
19
+ SelectDefinition,
20
+ ShapeDefinition,
21
+ SliderDefinition,
22
+ SlotDefinition,
23
+ StyleDefinition,
24
+ StyleV2Definition,
25
+ TextAreaDefinition,
26
+ TextInputDefinition,
27
+ unstable_TypographyDefinition
28
+ } from "../../index";
29
+ function serializeControls(controls, visitor) {
30
+ return Object.entries(controls).reduce(
31
+ (acc, [key, control]) => {
32
+ return { ...acc, [key]: control.accept(visitor) };
33
+ },
34
+ {}
35
+ );
36
+ }
37
+ function deserializeControl(serializedControl, options) {
38
+ const plugins = options?.plugins ?? [];
39
+ return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins));
40
+ }
41
+ function deserializeUnifiedControlDef(record) {
42
+ const deserializeMethod = {
43
+ [CheckboxDefinition.type]: CheckboxDefinition.deserialize,
44
+ [CodeDefinition.type]: CodeDefinition.deserialize,
45
+ [ColorDefinition.type]: ColorDefinition.deserialize,
46
+ [ComboboxDefinition.type]: ComboboxDefinition.deserialize,
47
+ [FontDefinition.type]: FontDefinition.deserialize,
48
+ [GroupDefinition.type]: (record2) => GroupDefinition.deserialize(record2, deserializeUnifiedControlDef),
49
+ [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,
50
+ [ImageDefinition.type]: ImageDefinition.deserialize,
51
+ [LinkDefinition.type]: LinkDefinition.deserialize,
52
+ [ListDefinition.type]: (record2) => ListDefinition.deserialize(record2, deserializeUnifiedControlDef),
53
+ [NumberDefinition.type]: NumberDefinition.deserialize,
54
+ [RichTextV1Definition.type]: RichTextV1Definition.deserialize,
55
+ [RichTextV2Definition.type]: (record2) => RichTextV2Definition.deserialize(record2, deserializeUnifiedControlDef),
56
+ [SelectDefinition.type]: SelectDefinition.deserialize,
57
+ [ShapeDefinition.type]: (record2) => ShapeDefinition.deserialize(record2, deserializeUnifiedControlDef),
58
+ [SliderDefinition.type]: SliderDefinition.deserialize,
59
+ [ShapeV2Definition.type]: (record2) => ShapeV2Definition.deserialize(record2, deserializeUnifiedControlDef),
60
+ [SlotDefinition.type]: SlotDefinition.deserialize,
61
+ [StyleDefinition.type]: StyleDefinition.deserialize,
62
+ [StyleV2Definition.type]: (record2) => StyleV2Definition.deserialize(record2, deserializeUnifiedControlDef),
63
+ [TextAreaDefinition.type]: TextAreaDefinition.deserialize,
64
+ [TextInputDefinition.type]: TextInputDefinition.deserialize,
65
+ [unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize
66
+ };
67
+ const deserialize = deserializeMethod[record.type] ?? null;
68
+ if (deserialize == null) {
69
+ throw new Error(`Unknown control type: ${record.type}`);
70
+ }
71
+ return deserialize(record);
72
+ }
73
+ export {
74
+ deserializeControl,
75
+ deserializeUnifiedControlDef,
76
+ serializeControls
77
+ };
78
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/base/index.ts"],"sourcesContent":["import {\n ControlDefinition,\n type SerializedRecord,\n type DeserializedRecord,\n ShapeV2Definition,\n DeserializationPlugin,\n deserializeRecord,\n} from '@makeswift/controls'\n\nimport {\n CheckboxDefinition,\n CodeDefinition,\n ColorDefinition,\n ComboboxDefinition,\n FontDefinition,\n GroupDefinition,\n IconRadioGroupDefinition,\n ImageDefinition,\n LinkDefinition,\n ListDefinition,\n NumberDefinition,\n RichTextV1Definition,\n RichTextV2Definition,\n SelectDefinition,\n ShapeDefinition,\n SliderDefinition,\n SlotDefinition,\n StyleDefinition,\n StyleV2Definition,\n TextAreaDefinition,\n TextInputDefinition,\n unstable_TypographyDefinition,\n} from '../../index'\n\nimport { BaseControlSerializationVisitor } from './visitor'\n\nexport { type SerializedRecord, type DeserializedRecord } from '@makeswift/controls'\n\nexport function serializeControls(\n controls: Record<string, ControlDefinition>,\n visitor: BaseControlSerializationVisitor,\n): Record<string, SerializedRecord> {\n return Object.entries(controls).reduce<Record<string, SerializedRecord>>(\n (acc, [key, control]) => {\n return { ...acc, [key]: control.accept(visitor) }\n },\n {},\n )\n}\n\nexport type DeserializeControlOptions = {\n plugins: DeserializationPlugin<any>[]\n}\n\nexport function deserializeControl(\n serializedControl: SerializedRecord,\n options: DeserializeControlOptions,\n): ControlDefinition {\n const plugins = options?.plugins ?? []\n\n return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins))\n}\n\nexport function deserializeUnifiedControlDef(record: DeserializedRecord): ControlDefinition {\n type DeserializeMethod = (data: DeserializedRecord) => ControlDefinition\n const deserializeMethod: Record<string, DeserializeMethod> = {\n [CheckboxDefinition.type]: CheckboxDefinition.deserialize,\n [CodeDefinition.type]: CodeDefinition.deserialize,\n [ColorDefinition.type]: ColorDefinition.deserialize,\n [ComboboxDefinition.type]: ComboboxDefinition.deserialize,\n [FontDefinition.type]: FontDefinition.deserialize,\n [GroupDefinition.type]: record =>\n GroupDefinition.deserialize(record, deserializeUnifiedControlDef),\n [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,\n [ImageDefinition.type]: ImageDefinition.deserialize,\n [LinkDefinition.type]: LinkDefinition.deserialize,\n [ListDefinition.type]: record =>\n ListDefinition.deserialize(record, deserializeUnifiedControlDef),\n [NumberDefinition.type]: NumberDefinition.deserialize,\n [RichTextV1Definition.type]: RichTextV1Definition.deserialize,\n [RichTextV2Definition.type]: record =>\n RichTextV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SelectDefinition.type]: SelectDefinition.deserialize,\n [ShapeDefinition.type]: record =>\n ShapeDefinition.deserialize(record, deserializeUnifiedControlDef),\n [SliderDefinition.type]: SliderDefinition.deserialize,\n [ShapeV2Definition.type]: record =>\n ShapeV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SlotDefinition.type]: SlotDefinition.deserialize,\n [StyleDefinition.type]: StyleDefinition.deserialize,\n [StyleV2Definition.type]: record =>\n StyleV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [TextAreaDefinition.type]: TextAreaDefinition.deserialize,\n [TextInputDefinition.type]: TextInputDefinition.deserialize,\n [unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize,\n } as const\n\n const deserialize = deserializeMethod[record.type] ?? null\n if (deserialize == null) {\n throw new Error(`Unknown control type: ${record.type}`)\n }\n\n return deserialize(record)\n}\n"],"mappings":"AAAA;AAAA,EAIE;AAAA,EAEA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,SAAS,kBACd,UACA,SACkC;AAClC,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,KAAK,OAAO,MAAM;AACvB,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAMO,SAAS,mBACd,mBACA,SACmB;AACnB,QAAM,UAAU,SAAS,WAAW,CAAC;AAErC,SAAO,6BAA6B,kBAAkB,mBAAmB,OAAO,CAAC;AACnF;AAEO,SAAS,6BAA6B,QAA+C;AAE1F,QAAM,oBAAuD;AAAA,IAC3D,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,yBAAyB,IAAI,GAAG,yBAAyB;AAAA,IAC1D,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,eAAe,IAAI,GAAG,CAAAA,YACrB,eAAe,YAAYA,SAAQ,4BAA4B;AAAA,IACjE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,qBAAqB,IAAI,GAAG,qBAAqB;AAAA,IAClD,CAAC,qBAAqB,IAAI,GAAG,CAAAA,YAC3B,qBAAqB,YAAYA,SAAQ,4BAA4B;AAAA,IACvE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,oBAAoB,IAAI,GAAG,oBAAoB;AAAA,IAChD,CAAC,8BAA8B,IAAI,GAAG,8BAA8B;AAAA,EACtE;AAEA,QAAM,cAAc,kBAAkB,OAAO,IAAI,KAAK;AACtD,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,yBAAyB,OAAO,IAAI,EAAE;AAAA,EACxD;AAEA,SAAO,YAAY,MAAM;AAC3B;","names":["record"]}
@@ -0,0 +1,39 @@
1
+ import {
2
+ ControlDefinition,
3
+ serializeObject,
4
+ ControlSerializationVisitor
5
+ } from "@makeswift/controls";
6
+ import { RichTextV2Definition } from "../../rich-text-v2";
7
+ class BaseControlSerializationVisitor extends ControlSerializationVisitor {
8
+ constructor(plugins) {
9
+ const serializeDefinitionPlugin = {
10
+ match: (val) => val instanceof ControlDefinition,
11
+ serialize: (val) => val.accept(this)
12
+ };
13
+ super([serializeDefinitionPlugin, ...plugins]);
14
+ }
15
+ visitRichTextV2(def) {
16
+ const { plugins, ...config } = def.config;
17
+ const pluginDefs = plugins.map(
18
+ ({ control }) => control ? {
19
+ control: {
20
+ definition: control.definition,
21
+ // FIXME: remove getValue/onChange stubs once we released a version of the builder
22
+ // built against the runtime where these can be optional
23
+ getValue: () => void 0,
24
+ onChange: () => {
25
+ }
26
+ }
27
+ } : {}
28
+ );
29
+ const serialized = serializeObject(
30
+ { config: { ...config, plugins: pluginDefs } },
31
+ this.serializationPlugins
32
+ );
33
+ return { ...serialized, type: RichTextV2Definition.type };
34
+ }
35
+ }
36
+ export {
37
+ BaseControlSerializationVisitor
38
+ };
39
+ //# sourceMappingURL=visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/base/visitor.ts"],"sourcesContent":["import {\n ControlDefinition,\n SerializedRecord,\n serializeObject,\n SerializationPlugin,\n ControlSerializationVisitor,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../../rich-text-v2'\n\nexport class BaseControlSerializationVisitor extends ControlSerializationVisitor {\n constructor(plugins: SerializationPlugin<any>[]) {\n const serializeDefinitionPlugin: SerializationPlugin<ControlDefinition> = {\n match: (val: unknown) => val instanceof ControlDefinition,\n serialize: (val: ControlDefinition) => val.accept(this),\n }\n\n super([serializeDefinitionPlugin, ...plugins])\n }\n\n visitRichTextV2(def: RichTextV2Definition): SerializedRecord {\n const { plugins, ...config } = def.config\n\n // serialize only the plugin control definition, if any\n const pluginDefs = plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n const serialized = serializeObject(\n { config: { ...config, plugins: pluginDefs } },\n this.serializationPlugins,\n ) as SerializedRecord\n\n return { ...serialized, type: RichTextV2Definition.type }\n }\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,EAEA;AAAA,OACK;AAEP,SAAS,4BAA4B;AAE9B,MAAM,wCAAwC,4BAA4B;AAAA,EAC/E,YAAY,SAAqC;AAC/C,UAAM,4BAAoE;AAAA,MACxE,OAAO,CAAC,QAAiB,eAAe;AAAA,MACxC,WAAW,CAAC,QAA2B,IAAI,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,CAAC,2BAA2B,GAAG,OAAO,CAAC;AAAA,EAC/C;AAAA,EAEA,gBAAgB,KAA6C;AAC3D,UAAM,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI;AAGnC,UAAM,aAAa,QAAQ;AAAA,MAAI,CAAC,EAAE,QAAQ,MACxC,UACI;AAAA,QACE,SAAS;AAAA,UACP,YAAY,QAAQ;AAAA;AAAA;AAAA,UAGpB,UAAU,MAAM;AAAA,UAChB,UAAU,MAAM;AAAA,UAAC;AAAA,QACnB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAEA,UAAM,aAAa;AAAA,MACjB,EAAE,QAAQ,EAAE,GAAG,QAAQ,SAAS,WAAW,EAAE;AAAA,MAC7C,KAAK;AAAA,IACP;AAEA,WAAO,EAAE,GAAG,YAAY,MAAM,qBAAqB,KAAK;AAAA,EAC1D;AACF;","names":[]}
@@ -0,0 +1,30 @@
1
+ function isSerializedRecord(r) {
2
+ return r != null && typeof r === "object" && "type" in r && typeof r.type === "string";
3
+ }
4
+ function deserializeControlRecords(serializedControls, deserialize, { onError, plugins } = {}) {
5
+ return Object.entries(serializedControls).reduce(
6
+ (deserializedControls, [key, serializedControl]) => {
7
+ try {
8
+ if (!isSerializedRecord(serializedControl)) {
9
+ throw new Error(
10
+ `Expected serialized control data, got ${JSON.stringify(serializedControl)}`
11
+ );
12
+ }
13
+ const deserializedControl = deserialize(serializedControl, { plugins });
14
+ return { ...deserializedControls, [key]: deserializedControl };
15
+ } catch (err) {
16
+ const error = err instanceof Error ? new Error(`Could not deserialize control for "${key}": ${err.message}`, {
17
+ cause: err
18
+ }) : new Error(`Could not deserialize control for "${key}", unknown error: ${err}`);
19
+ onError?.(error, { key, serializedControl });
20
+ return deserializedControls;
21
+ }
22
+ },
23
+ {}
24
+ );
25
+ }
26
+ export {
27
+ deserializeControlRecords,
28
+ isSerializedRecord
29
+ };
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/controls/serialization/index.ts"],"sourcesContent":["import { type SerializedRecord, type DeserializeControlOptions } from './base'\n\nexport function isSerializedRecord(r: unknown): r is SerializedRecord {\n return r != null && typeof r === 'object' && 'type' in r && typeof r.type === 'string'\n}\n\nexport type DeserializeControlRecordsOptions = {\n onError?: (err: Error, context: { key: string; serializedControl: unknown }) => void\n} & Partial<Pick<DeserializeControlOptions, 'plugins'>>\n\nexport function deserializeControlRecords<T>(\n serializedControls: Record<string, unknown>,\n deserialize: (\n serializedControl: SerializedRecord,\n options?: Partial<DeserializeControlOptions>,\n ) => T,\n { onError, plugins }: DeserializeControlRecordsOptions = {},\n): Record<string, T> {\n return Object.entries(serializedControls).reduce<Record<string, T>>(\n (deserializedControls, [key, serializedControl]) => {\n try {\n if (!isSerializedRecord(serializedControl)) {\n throw new Error(\n `Expected serialized control data, got ${JSON.stringify(serializedControl)}`,\n )\n }\n const deserializedControl = deserialize(serializedControl, { plugins })\n return { ...deserializedControls, [key]: deserializedControl }\n } catch (err: unknown) {\n const error =\n err instanceof Error\n ? new Error(`Could not deserialize control for \"${key}\": ${err.message}`, {\n cause: err,\n })\n : new Error(`Could not deserialize control for \"${key}\", unknown error: ${err}`)\n\n onError?.(error, { key, serializedControl })\n\n return deserializedControls\n }\n },\n {},\n )\n}\n"],"mappings":"AAEO,SAAS,mBAAmB,GAAmC;AACpE,SAAO,KAAK,QAAQ,OAAO,MAAM,YAAY,UAAU,KAAK,OAAO,EAAE,SAAS;AAChF;AAMO,SAAS,0BACd,oBACA,aAIA,EAAE,SAAS,QAAQ,IAAsC,CAAC,GACvC;AACnB,SAAO,OAAO,QAAQ,kBAAkB,EAAE;AAAA,IACxC,CAAC,sBAAsB,CAAC,KAAK,iBAAiB,MAAM;AAClD,UAAI;AACF,YAAI,CAAC,mBAAmB,iBAAiB,GAAG;AAC1C,gBAAM,IAAI;AAAA,YACR,yCAAyC,KAAK,UAAU,iBAAiB,CAAC;AAAA,UAC5E;AAAA,QACF;AACA,cAAM,sBAAsB,YAAY,mBAAmB,EAAE,QAAQ,CAAC;AACtE,eAAO,EAAE,GAAG,sBAAsB,CAAC,GAAG,GAAG,oBAAoB;AAAA,MAC/D,SAAS,KAAc;AACrB,cAAM,QACJ,eAAe,QACX,IAAI,MAAM,sCAAsC,GAAG,MAAM,IAAI,OAAO,IAAI;AAAA,UACtE,OAAO;AAAA,QACT,CAAC,IACD,IAAI,MAAM,sCAAsC,GAAG,qBAAqB,GAAG,EAAE;AAEnF,kBAAU,OAAO,EAAE,KAAK,kBAAkB,CAAC;AAE3C,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,52 @@
1
+ function isSerializedFunction(value) {
2
+ return value instanceof MessagePort;
3
+ }
4
+ function serializeFunction(func) {
5
+ const messageChannel = new MessageChannel();
6
+ messageChannel.port1.onmessage = ({ data: [callId, args] }) => {
7
+ Promise.resolve().then(() => func.apply(null, args)).then((result) => messageChannel.port1.postMessage([callId, result]));
8
+ };
9
+ return messageChannel.port2;
10
+ }
11
+ function onmessageHandler() {
12
+ let nextCallId = 0;
13
+ const calls = /* @__PURE__ */ new Map();
14
+ const result = ({ data: [callId, result2] }) => {
15
+ calls.get(callId)?.(result2);
16
+ calls.delete(callId);
17
+ };
18
+ result.newCall = (resolve) => {
19
+ const callId = nextCallId++;
20
+ calls.set(callId, resolve);
21
+ return callId;
22
+ };
23
+ return result;
24
+ }
25
+ function deserializeFunction(serializedFunction) {
26
+ if (serializedFunction.onmessage == null) {
27
+ serializedFunction.onmessage = onmessageHandler();
28
+ }
29
+ return function deserializedFunction(...args) {
30
+ return new Promise((resolve) => {
31
+ const { newCall } = serializedFunction.onmessage;
32
+ if (newCall == null) {
33
+ throw new Error(
34
+ `Deserialized function call failed: 'onmessage' handler is missing 'newCall' method`
35
+ );
36
+ }
37
+ const callId = newCall(resolve);
38
+ serializedFunction.postMessage([callId, args]);
39
+ });
40
+ };
41
+ }
42
+ const functionDeserializationPlugin = {
43
+ match: isSerializedFunction,
44
+ deserialize: (value) => deserializeFunction(value)
45
+ };
46
+ export {
47
+ deserializeFunction,
48
+ functionDeserializationPlugin,
49
+ isSerializedFunction,
50
+ serializeFunction
51
+ };
52
+ //# sourceMappingURL=function-serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/message-port/function-serialization.ts"],"sourcesContent":["import {\n DeserializationPlugin,\n type AnyFunction,\n type SerializedFunctionReturnType,\n type DeserializedFunction,\n} from '@makeswift/controls'\n\nexport { type DeserializedFunction } from '@makeswift/controls'\n\ndeclare const SerializedFunctionTag: unique symbol\n\ntype ResolveCallPromise<T extends AnyFunction> = (value: SerializedFunctionReturnType<T>) => void\n\ntype OnMessageHandler<T extends AnyFunction> = MessagePort['onmessage'] & {\n newCall?(resolve: ResolveCallPromise<T>): number\n}\n\nexport type SerializedFunction<T extends AnyFunction> = MessagePort & {\n onmessage: OnMessageHandler<T>\n readonly [SerializedFunctionTag]: T\n}\n\nexport function isSerializedFunction(value: any): value is SerializedFunction<AnyFunction> {\n return value instanceof MessagePort\n}\n\ntype CallID = number\n\nexport function serializeFunction<T extends AnyFunction>(func: T): SerializedFunction<T> {\n type CallMessageEvent = MessageEvent<[CallID, Parameters<T>]>\n\n const messageChannel = new MessageChannel()\n\n messageChannel.port1.onmessage = ({ data: [callId, args] }: CallMessageEvent) => {\n Promise.resolve()\n .then(() => func.apply(null, args))\n .then(result => messageChannel.port1.postMessage([callId, result]))\n }\n\n return messageChannel.port2 as SerializedFunction<T>\n}\n\nfunction onmessageHandler<T extends AnyFunction>(): OnMessageHandler<T> {\n type ResultMessageEvent = MessageEvent<[CallID, SerializedFunctionReturnType<T>]>\n let nextCallId = 0\n const calls = new Map<CallID, ResolveCallPromise<T>>()\n\n const result: OnMessageHandler<T> = ({ data: [callId, result] }: ResultMessageEvent) => {\n calls.get(callId)?.(result)\n calls.delete(callId)\n }\n\n result.newCall = (resolve: ResolveCallPromise<T>) => {\n const callId = nextCallId++\n calls.set(callId, resolve)\n return callId\n }\n\n return result\n}\n\nexport function deserializeFunction<T extends AnyFunction>(\n serializedFunction: SerializedFunction<T>,\n): DeserializedFunction<T> {\n if (serializedFunction.onmessage == null) {\n serializedFunction.onmessage = onmessageHandler<T>()\n }\n\n return function deserializedFunction(...args) {\n return new Promise(resolve => {\n const { newCall } = serializedFunction.onmessage\n if (newCall == null) {\n throw new Error(\n `Deserialized function call failed: 'onmessage' handler is missing 'newCall' method`,\n )\n }\n\n const callId = newCall(resolve)\n serializedFunction.postMessage([callId, args])\n })\n }\n}\n\nexport const functionDeserializationPlugin: DeserializationPlugin<\n SerializedFunction<AnyFunction>,\n DeserializedFunction<AnyFunction>\n> = {\n match: isSerializedFunction,\n deserialize: value => deserializeFunction(value),\n}\n"],"mappings":"AAsBO,SAAS,qBAAqB,OAAsD;AACzF,SAAO,iBAAiB;AAC1B;AAIO,SAAS,kBAAyC,MAAgC;AAGvF,QAAM,iBAAiB,IAAI,eAAe;AAE1C,iBAAe,MAAM,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,MAAwB;AAC/E,YAAQ,QAAQ,EACb,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,EACjC,KAAK,YAAU,eAAe,MAAM,YAAY,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EACtE;AAEA,SAAO,eAAe;AACxB;AAEA,SAAS,mBAA+D;AAEtE,MAAI,aAAa;AACjB,QAAM,QAAQ,oBAAI,IAAmC;AAErD,QAAM,SAA8B,CAAC,EAAE,MAAM,CAAC,QAAQA,OAAM,EAAE,MAA0B;AACtF,UAAM,IAAI,MAAM,IAAIA,OAAM;AAC1B,UAAM,OAAO,MAAM;AAAA,EACrB;AAEA,SAAO,UAAU,CAAC,YAAmC;AACnD,UAAM,SAAS;AACf,UAAM,IAAI,QAAQ,OAAO;AACzB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,oBACd,oBACyB;AACzB,MAAI,mBAAmB,aAAa,MAAM;AACxC,uBAAmB,YAAY,iBAAoB;AAAA,EACrD;AAEA,SAAO,SAAS,wBAAwB,MAAM;AAC5C,WAAO,IAAI,QAAQ,aAAW;AAC5B,YAAM,EAAE,QAAQ,IAAI,mBAAmB;AACvC,UAAI,WAAW,MAAM;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,SAAS,QAAQ,OAAO;AAC9B,yBAAmB,YAAY,CAAC,QAAQ,IAAI,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AACF;AAEO,MAAM,gCAGT;AAAA,EACF,OAAO;AAAA,EACP,aAAa,WAAS,oBAAoB,KAAK;AACjD;","names":["result"]}
@@ -0,0 +1,3 @@
1
+ export * from "./function-serialization";
2
+ export * from "./visitor";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/message-port/index.ts"],"sourcesContent":["export * from './function-serialization'\nexport * from './visitor'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,24 @@
1
+ import { isFunction } from "@makeswift/controls";
2
+ import { BaseControlSerializationVisitor } from "../base/visitor";
3
+ import { serializeFunction } from "./function-serialization";
4
+ class ClientMessagePortSerializationVisitor extends BaseControlSerializationVisitor {
5
+ transferables = [];
6
+ constructor() {
7
+ const serializeFunctionPlugin = {
8
+ match: isFunction,
9
+ serialize: (val) => {
10
+ const r = serializeFunction(val);
11
+ this.transferables.push(r);
12
+ return r;
13
+ }
14
+ };
15
+ super([serializeFunctionPlugin]);
16
+ }
17
+ getTransferables() {
18
+ return [...this.transferables];
19
+ }
20
+ }
21
+ export {
22
+ ClientMessagePortSerializationVisitor
23
+ };
24
+ //# sourceMappingURL=visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/message-port/visitor.ts"],"sourcesContent":["import { AnyFunction, SerializationPlugin, isFunction } from '@makeswift/controls'\n\nimport { BaseControlSerializationVisitor } from '../base/visitor'\nimport { serializeFunction } from './function-serialization'\n\nexport class ClientMessagePortSerializationVisitor extends BaseControlSerializationVisitor {\n private transferables: Transferable[] = []\n\n constructor() {\n const serializeFunctionPlugin: SerializationPlugin<AnyFunction> = {\n match: isFunction,\n serialize: (val: AnyFunction) => {\n const r = serializeFunction(val)\n this.transferables.push(r)\n return r\n },\n }\n\n super([serializeFunctionPlugin])\n }\n\n getTransferables(): Transferable[] {\n return [...this.transferables]\n }\n}\n"],"mappings":"AAAA,SAA2C,kBAAkB;AAE7D,SAAS,uCAAuC;AAChD,SAAS,yBAAyB;AAE3B,MAAM,8CAA8C,gCAAgC;AAAA,EACjF,gBAAgC,CAAC;AAAA,EAEzC,cAAc;AACZ,UAAM,0BAA4D;AAAA,MAChE,OAAO;AAAA,MACP,WAAW,CAAC,QAAqB;AAC/B,cAAM,IAAI,kBAAkB,GAAG;AAC/B,aAAK,cAAc,KAAK,CAAC;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,CAAC,uBAAuB,CAAC;AAAA,EACjC;AAAA,EAEA,mBAAmC;AACjC,WAAO,CAAC,GAAG,KAAK,aAAa;AAAA,EAC/B;AACF;","names":[]}
@@ -0,0 +1,53 @@
1
+ import {
2
+ ControlDefinition,
3
+ serializeObject,
4
+ ControlSerializationVisitor,
5
+ isFunction
6
+ } from "@makeswift/controls";
7
+ import { RichTextV2Definition } from "../../rich-text-v2";
8
+ import { serializeFunction } from "./function-serialization";
9
+ class ClientMessagePortSerializationVisitor extends ControlSerializationVisitor {
10
+ transferables = [];
11
+ constructor() {
12
+ const serializeFunctionPlugin = {
13
+ match: isFunction,
14
+ serialize: (val) => {
15
+ const r = serializeFunction(val);
16
+ this.transferables.push(r);
17
+ return r;
18
+ }
19
+ };
20
+ const serializeDefinitionPlugin = {
21
+ match: (val) => val instanceof ControlDefinition,
22
+ serialize: (val) => val.accept(this)
23
+ };
24
+ super([serializeFunctionPlugin, serializeDefinitionPlugin]);
25
+ }
26
+ getTransferables() {
27
+ return [...this.transferables];
28
+ }
29
+ visitRichTextV2(def) {
30
+ const { plugins, ...config } = def.config;
31
+ const pluginDefs = plugins.map(
32
+ ({ control }) => control ? {
33
+ control: {
34
+ definition: control.definition,
35
+ // FIXME: remove getValue/onChange stubs once we released a version of the builder
36
+ // built against the runtime where these can be optional
37
+ getValue: () => void 0,
38
+ onChange: () => {
39
+ }
40
+ }
41
+ } : {}
42
+ );
43
+ const serialized = serializeObject(
44
+ { config: { ...config, plugins: pluginDefs } },
45
+ this.serializationPlugins
46
+ );
47
+ return { ...serialized, type: RichTextV2Definition.type };
48
+ }
49
+ }
50
+ export {
51
+ ClientMessagePortSerializationVisitor
52
+ };
53
+ //# sourceMappingURL=client-message-port-serialization-visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/visitors/message-port-serializer/client-message-port-serialization-visitor.ts"],"sourcesContent":["import {\n AnyFunction,\n ControlDefinition,\n SerializedRecord,\n serializeObject,\n SerializationPlugin,\n ControlSerializationVisitor,\n isFunction,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from '../../rich-text-v2'\n\nimport { serializeFunction } from './function-serialization'\n\nexport class ClientMessagePortSerializationVisitor extends ControlSerializationVisitor {\n private transferables: Transferable[] = []\n\n constructor() {\n const serializeFunctionPlugin: SerializationPlugin<AnyFunction> = {\n match: isFunction,\n serialize: (val: AnyFunction) => {\n const r = serializeFunction(val)\n this.transferables.push(r)\n return r\n },\n }\n\n const serializeDefinitionPlugin: SerializationPlugin<ControlDefinition> = {\n match: (val: unknown) => val instanceof ControlDefinition,\n serialize: (val: ControlDefinition) => val.accept(this),\n }\n\n super([serializeFunctionPlugin, serializeDefinitionPlugin])\n }\n\n getTransferables(): Transferable[] {\n return [...this.transferables]\n }\n\n visitRichTextV2(def: RichTextV2Definition): SerializedRecord {\n const { plugins, ...config } = def.config\n\n // serialize only the plugin control definition, if any\n const pluginDefs = plugins.map(({ control }) =>\n control\n ? {\n control: {\n definition: control.definition,\n // FIXME: remove getValue/onChange stubs once we released a version of the builder\n // built against the runtime where these can be optional\n getValue: () => undefined,\n onChange: () => {},\n },\n }\n : {},\n )\n\n const serialized = serializeObject(\n { config: { ...config, plugins: pluginDefs } },\n this.serializationPlugins,\n ) as SerializedRecord\n\n return { ...serialized, type: RichTextV2Definition.type }\n }\n}\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,4BAA4B;AAErC,SAAS,yBAAyB;AAE3B,MAAM,8CAA8C,4BAA4B;AAAA,EAC7E,gBAAgC,CAAC;AAAA,EAEzC,cAAc;AACZ,UAAM,0BAA4D;AAAA,MAChE,OAAO;AAAA,MACP,WAAW,CAAC,QAAqB;AAC/B,cAAM,IAAI,kBAAkB,GAAG;AAC/B,aAAK,cAAc,KAAK,CAAC;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,4BAAoE;AAAA,MACxE,OAAO,CAAC,QAAiB,eAAe;AAAA,MACxC,WAAW,CAAC,QAA2B,IAAI,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,CAAC,yBAAyB,yBAAyB,CAAC;AAAA,EAC5D;AAAA,EAEA,mBAAmC;AACjC,WAAO,CAAC,GAAG,KAAK,aAAa;AAAA,EAC/B;AAAA,EAEA,gBAAgB,KAA6C;AAC3D,UAAM,EAAE,SAAS,GAAG,OAAO,IAAI,IAAI;AAGnC,UAAM,aAAa,QAAQ;AAAA,MAAI,CAAC,EAAE,QAAQ,MACxC,UACI;AAAA,QACE,SAAS;AAAA,UACP,YAAY,QAAQ;AAAA;AAAA;AAAA,UAGpB,UAAU,MAAM;AAAA,UAChB,UAAU,MAAM;AAAA,UAAC;AAAA,QACnB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAEA,UAAM,aAAa;AAAA,MACjB,EAAE,QAAQ,EAAE,GAAG,QAAQ,SAAS,WAAW,EAAE;AAAA,MAC7C,KAAK;AAAA,IACP;AAEA,WAAO,EAAE,GAAG,YAAY,MAAM,qBAAqB,KAAK;AAAA,EAC1D;AACF;","names":[]}