@makeswift/runtime 0.28.6-canary.6 → 0.28.6

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 (261) hide show
  1. package/dist/cjs/api/client.js.map +1 -0
  2. package/dist/cjs/api/fragments.js.map +1 -0
  3. package/dist/cjs/api/graphql/client.js.map +1 -0
  4. package/dist/cjs/api/graphql/documents/index.js.map +1 -0
  5. package/dist/cjs/api/index.js.map +1 -0
  6. package/dist/cjs/api/site-version/index.js.map +1 -0
  7. package/dist/cjs/api-handler/cookies.js.map +1 -0
  8. package/dist/cjs/api-handler/cors.js.map +1 -0
  9. package/dist/cjs/api-handler/handlers/element-tree.js.map +1 -0
  10. package/dist/cjs/api-handler/handlers/fonts.js.map +1 -0
  11. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  12. package/dist/cjs/api-handler/handlers/webhook/index.js.map +1 -0
  13. package/dist/cjs/api-handler/index.js.map +1 -0
  14. package/dist/cjs/builder/breakpoints/index.js.map +1 -0
  15. package/dist/cjs/builder/core/index.js.map +1 -0
  16. package/dist/cjs/builder/host-api.js.map +1 -0
  17. package/dist/cjs/builder/host-to-builder-actions.js.map +1 -0
  18. package/dist/cjs/builder/index.js.map +1 -0
  19. package/dist/cjs/builder/unstructured-introspection/__fixtures__/index.js.map +1 -0
  20. package/dist/cjs/builder/unstructured-introspection/index.js.map +1 -0
  21. package/dist/cjs/client/index.js +3 -3
  22. package/dist/cjs/client/index.js.map +1 -0
  23. package/dist/cjs/components/builtin/Box/index.js.map +1 -0
  24. package/dist/cjs/components/builtin/Button/index.js.map +1 -0
  25. package/dist/cjs/components/builtin/Carousel/index.js.map +1 -0
  26. package/dist/cjs/components/builtin/Countdown/index.js.map +1 -0
  27. package/dist/cjs/components/builtin/Divider/index.js.map +1 -0
  28. package/dist/cjs/components/builtin/Embed/index.js.map +1 -0
  29. package/dist/cjs/components/builtin/Form/index.js.map +1 -0
  30. package/dist/cjs/components/builtin/Image/Image.js.map +1 -0
  31. package/dist/cjs/components/builtin/Image/index.js.map +1 -0
  32. package/dist/cjs/components/builtin/Navigation/index.js.map +1 -0
  33. package/dist/cjs/components/builtin/Root/index.js.map +1 -0
  34. package/dist/cjs/components/builtin/Slot/index.js.map +1 -0
  35. package/dist/cjs/components/builtin/SocialLinks/index.js.map +1 -0
  36. package/dist/cjs/components/builtin/Text/index.js.map +1 -0
  37. package/dist/cjs/components/builtin/Video/index.js.map +1 -0
  38. package/dist/cjs/components/builtin/constants.js.map +1 -0
  39. package/dist/cjs/components/hooks/index.js.map +1 -0
  40. package/dist/cjs/components/shared/BackgroundsContainer/index.js.map +1 -0
  41. package/dist/cjs/components/shared/ErrorBoundary.js.map +1 -0
  42. package/dist/cjs/components/shared/FallbackComponent/index.js.map +1 -0
  43. package/dist/cjs/components/shared/GutterContainer/index.js.map +1 -0
  44. package/dist/cjs/components/shared/Link/index.js.map +1 -0
  45. package/dist/cjs/components/shared/grid-item.js.map +1 -0
  46. package/dist/cjs/components/utils/drop-first.js.map +1 -0
  47. package/dist/cjs/controls/control.js.map +1 -0
  48. package/dist/cjs/controls/index.js.map +1 -0
  49. package/dist/cjs/controls/rich-text/index.js.map +1 -0
  50. package/dist/cjs/controls/rich-text-v2/index.js.map +1 -0
  51. package/dist/cjs/controls/serialization/base/index.js.map +1 -0
  52. package/dist/cjs/controls/serialization/index.js.map +1 -0
  53. package/dist/cjs/controls/serialization/message-port/index.js.map +1 -0
  54. package/dist/cjs/controls/style-v2/index.js.map +1 -0
  55. package/dist/cjs/global.d.js.map +1 -0
  56. package/dist/cjs/index.js.map +1 -0
  57. package/dist/cjs/next/api-handler/index.js.map +1 -0
  58. package/dist/cjs/next/client.js.map +1 -0
  59. package/dist/cjs/next/components/framework-provider/app-router/index.js.map +1 -0
  60. package/dist/cjs/next/components/framework-provider/index.js.map +1 -0
  61. package/dist/cjs/next/components/framework-provider/pages-router/index.js.map +1 -0
  62. package/dist/cjs/next/document.js.map +1 -0
  63. package/dist/cjs/next/fetch.js.map +1 -0
  64. package/dist/cjs/next/index.js.map +1 -0
  65. package/dist/cjs/next/middleware/index.js.map +1 -0
  66. package/dist/cjs/next/testing/element-data.js.map +1 -0
  67. package/dist/cjs/next/testing/index.js.map +1 -0
  68. package/dist/cjs/prop-controllers/copy.js.map +1 -0
  69. package/dist/cjs/prop-controllers/deleted.js.map +1 -0
  70. package/dist/cjs/prop-controllers/descriptors.js.map +1 -0
  71. package/dist/cjs/react/builtins/countdown.js.map +1 -0
  72. package/dist/cjs/react/builtins/divider.js.map +1 -0
  73. package/dist/cjs/react/builtins/embed.js.map +1 -0
  74. package/dist/cjs/react/builtins/form.js.map +1 -0
  75. package/dist/cjs/react/builtins/image.js.map +1 -0
  76. package/dist/cjs/react/builtins/index.js.map +1 -0
  77. package/dist/cjs/react/core/index.js.map +1 -0
  78. package/dist/cjs/react/index.js.map +1 -0
  79. package/dist/cjs/runtimes/react/components/index.js.map +1 -0
  80. package/dist/cjs/runtimes/react/components/page/index.js.map +1 -0
  81. package/dist/cjs/runtimes/react/controls/rich-text/components/Element/inline.js.map +1 -0
  82. package/dist/cjs/runtimes/react/controls/rich-text/components/Leaf/leaf.js.map +1 -0
  83. package/dist/cjs/runtimes/react/element-imperative-handle.js.map +1 -0
  84. package/dist/cjs/runtimes/react/find-dom-node.js.map +1 -0
  85. package/dist/cjs/runtimes/react/host-api-client.js.map +1 -0
  86. package/dist/cjs/runtimes/react/index.js.map +1 -0
  87. package/dist/cjs/runtimes/react/legacy-controls.js.map +1 -0
  88. package/dist/cjs/slate/BlockPlugin/indent.js.map +1 -0
  89. package/dist/cjs/slate/BlockPlugin/index.js.map +1 -0
  90. package/dist/cjs/slate/BuilderPlugin/index.js.map +1 -0
  91. package/dist/cjs/slate/InlineModePlugin/index.js.map +1 -0
  92. package/dist/cjs/slate/InlinePlugin/getValue.js.map +1 -0
  93. package/dist/cjs/slate/InlinePlugin/index.js.map +1 -0
  94. package/dist/cjs/slate/LinkPlugin/getValue.js.map +1 -0
  95. package/dist/cjs/slate/LinkPlugin/index.js.map +1 -0
  96. package/dist/cjs/slate/LocalChangesPlugin/index.js.map +1 -0
  97. package/dist/cjs/slate/TextAlignPlugin/getValue.js.map +1 -0
  98. package/dist/cjs/slate/TextAlignPlugin/index.js.map +1 -0
  99. package/dist/cjs/slate/TypographyPlugin/getValue.js.map +1 -0
  100. package/dist/cjs/slate/TypographyPlugin/index.js.map +1 -0
  101. package/dist/cjs/slate/index.js.map +1 -0
  102. package/dist/cjs/slate/utils/editor.js.map +1 -0
  103. package/dist/cjs/slate/utils/element.js.map +1 -0
  104. package/dist/cjs/slate/utils/filterForSubtreeRoots.js.map +1 -0
  105. package/dist/cjs/slate/utils/index.js.map +1 -0
  106. package/dist/cjs/state/actions/index.js.map +1 -0
  107. package/dist/cjs/state/actions/internal/index.js.map +1 -0
  108. package/dist/cjs/state/host-api.js.map +1 -0
  109. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -0
  110. package/dist/cjs/state/middleware/read-write/index.js.map +1 -0
  111. package/dist/cjs/state/modules/element-trees.js.map +1 -0
  112. package/dist/cjs/state/modules/is-in-builder.js.map +1 -0
  113. package/dist/cjs/state/modules/is-read-only.js.map +1 -0
  114. package/dist/cjs/testing/fixtures.js.map +1 -0
  115. package/dist/cjs/translations/index.js.map +1 -0
  116. package/dist/cjs/unstable-framework-support/index.js.map +1 -0
  117. package/dist/cjs/utils/deepEqual.js.map +1 -0
  118. package/dist/cjs/utils/deferred.js.map +1 -0
  119. package/dist/cjs/utils/deterministic-uuid.js.map +1 -0
  120. package/dist/cjs/utils/esm-compat.js.map +1 -0
  121. package/dist/cjs/utils/is-server.js.map +1 -0
  122. package/dist/cjs/utils/isNonNullable.js.map +1 -0
  123. package/dist/esm/api/graphql/documents/queries.js.map +1 -0
  124. package/dist/esm/api/graphql/generated/types.js.map +1 -0
  125. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  126. package/dist/esm/api-handler/handlers/webhook/site-published.js.map +1 -0
  127. package/dist/esm/api-handler/handlers/webhook/types.js.map +1 -0
  128. package/dist/esm/client/index.js +3 -3
  129. package/dist/esm/components/builtin/Box/register.js.map +1 -0
  130. package/dist/esm/components/builtin/Button/register.js.map +1 -0
  131. package/dist/esm/components/builtin/Carousel/register.js.map +1 -0
  132. package/dist/esm/components/builtin/Countdown/register.js.map +1 -0
  133. package/dist/esm/components/builtin/Divider/register.js.map +1 -0
  134. package/dist/esm/components/builtin/Embed/register.js.map +1 -0
  135. package/dist/esm/components/builtin/Form/components/Field/services/responsiveField.js.map +1 -0
  136. package/dist/esm/components/builtin/Form/register.js.map +1 -0
  137. package/dist/esm/components/builtin/Form/types.js.map +1 -0
  138. package/dist/esm/components/builtin/Image/register.js.map +1 -0
  139. package/dist/esm/components/builtin/Navigation/register.js.map +1 -0
  140. package/dist/esm/components/builtin/Root/Root.js.map +1 -0
  141. package/dist/esm/components/builtin/Root/register.js.map +1 -0
  142. package/dist/esm/components/builtin/Slot/Slot.js.map +1 -0
  143. package/dist/esm/components/builtin/Slot/register.js.map +1 -0
  144. package/dist/esm/components/builtin/SocialLinks/SocialLinks.js.map +1 -0
  145. package/dist/esm/components/builtin/SocialLinks/options.js.map +1 -0
  146. package/dist/esm/components/builtin/SocialLinks/register.js.map +1 -0
  147. package/dist/esm/components/builtin/Text/Text.js.map +1 -0
  148. package/dist/esm/components/builtin/Text/register.js.map +1 -0
  149. package/dist/esm/components/builtin/Video/Video.js +49 -0
  150. package/dist/esm/components/builtin/Video/Video.js.map +1 -0
  151. package/dist/esm/components/builtin/Video/register.js.map +1 -0
  152. package/dist/esm/components/hooks/useTableFormFieldsPropControllerData.js +10 -0
  153. package/dist/esm/components/hooks/useTablePropControllerData.js +12 -0
  154. package/dist/esm/components/hooks/useTextAreaPropControllerData.js +12 -0
  155. package/dist/esm/components/hooks/useTextInputPropControllerData.js +10 -0
  156. package/dist/esm/components/hooks/useTextStylePropControllerData.js +12 -0
  157. package/dist/esm/components/hooks/useVideoPropControllerData.js +12 -0
  158. package/dist/esm/components/icons/Warning20.js +15 -0
  159. package/dist/esm/controls/rich-text-v2/translations/merge-translations.js.map +1 -0
  160. package/dist/esm/controls/rich-text-v2/translations/translations-core.js.map +1 -0
  161. package/dist/esm/controls/serialization/base/visitor.js +39 -0
  162. package/dist/esm/controls/serialization/base/visitor.js.map +1 -0
  163. package/dist/esm/controls/serialization/message-port/visitor.js +24 -0
  164. package/dist/esm/controls/serialization/message-port/visitor.js.map +1 -0
  165. package/dist/esm/next/api-handler/config/pages-router.js.map +1 -0
  166. package/dist/esm/next/api-handler/handlers/pages-router-redirect-preview.js.map +1 -0
  167. package/dist/esm/next/components/tests/__fixtures__/page-document.js.map +1 -0
  168. package/dist/esm/next/components/tests/__fixtures__/resources/page-pathname-slices.js.map +1 -0
  169. package/dist/esm/next/components/tests/__fixtures__/resources/swatches.js.map +1 -0
  170. package/dist/esm/next/components/tests/controls/fixtures/rich-text-v2.js.map +1 -0
  171. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js.map +1 -0
  172. package/dist/esm/next/components/tests/prop-controllers/page-prop-controller.js.map +1 -0
  173. package/dist/esm/next/hooks/use-router-locale-sync.js.map +1 -0
  174. package/dist/esm/next/tests/__fixtures__/resources.js.map +1 -0
  175. package/dist/esm/next/tests/__fixtures__/translated-data.js.map +1 -0
  176. package/dist/esm/react/builtins/video.js +7 -0
  177. package/dist/esm/react/builtins/video.js.map +1 -0
  178. package/dist/esm/runtimes/react/components/MakeswiftComponent.js.map +1 -0
  179. package/dist/esm/runtimes/react/components/MakeswiftFonts.js.map +1 -0
  180. package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -0
  181. package/dist/esm/runtimes/react/components/Slot.js.map +1 -0
  182. package/dist/esm/runtimes/react/components/SlotProvider.js.map +1 -0
  183. package/dist/esm/runtimes/react/components/hooks/use-framework-context.js.map +1 -0
  184. package/dist/esm/runtimes/react/components/hooks/use-page-snippets.js.map +1 -0
  185. package/dist/esm/runtimes/react/components/page/Page.js.map +1 -0
  186. package/dist/esm/runtimes/react/components/page/PageHead.js.map +1 -0
  187. package/dist/esm/runtimes/react/components/page/page-seo-settings.js.map +1 -0
  188. package/dist/esm/runtimes/react/components/preview-switcher/preview-switcher.js.map +1 -0
  189. package/dist/esm/runtimes/react/components/preview-switcher/preview-toolbar.js.map +1 -0
  190. package/dist/esm/runtimes/react/components/render-hook.js.map +1 -0
  191. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncDOMSelection.js +39 -0
  192. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncDOMSelection.js.map +1 -0
  193. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js +35 -0
  194. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js.map +1 -0
  195. package/dist/esm/runtimes/react/controls/rich-text/ReadOnlyText.js.map +1 -0
  196. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js.map +1 -0
  197. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.js.map +1 -0
  198. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.js.map +1 -0
  199. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.js.map +1 -0
  200. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/useRemoteChanges.js.map +1 -0
  201. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/useSyncDOMSelection.js +39 -0
  202. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/useSyncDOMSelection.js.map +1 -0
  203. package/dist/esm/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.js.map +1 -0
  204. package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -0
  205. package/dist/esm/runtimes/react/controls/slot.js.map +1 -0
  206. package/dist/esm/runtimes/react/controls/style.js.map +1 -0
  207. package/dist/esm/runtimes/react/controls/typography.js.map +1 -0
  208. package/dist/esm/runtimes/react/hooks/makeswift-api.js.map +1 -0
  209. package/dist/esm/runtimes/react/hooks/use-async-effect.js.map +1 -0
  210. package/dist/esm/runtimes/react/hooks/use-breakpoints.js.map +1 -0
  211. package/dist/esm/runtimes/react/hooks/use-builtin-suspense.js.map +1 -0
  212. package/dist/esm/runtimes/react/hooks/use-cache-data.js.map +1 -0
  213. package/dist/esm/runtimes/react/hooks/use-component.js.map +1 -0
  214. package/dist/esm/runtimes/react/hooks/use-css-id.js.map +1 -0
  215. package/dist/esm/runtimes/react/hooks/use-current-breakpoint.js.map +1 -0
  216. package/dist/esm/runtimes/react/hooks/use-disable-register-element.js.map +1 -0
  217. package/dist/esm/runtimes/react/hooks/use-dispatch.js.map +1 -0
  218. package/dist/esm/runtimes/react/hooks/use-document-context.js.map +1 -0
  219. package/dist/esm/runtimes/react/hooks/use-document-cycles.js.map +1 -0
  220. package/dist/esm/runtimes/react/hooks/use-document.js.map +1 -0
  221. package/dist/esm/runtimes/react/hooks/use-element-id.js.map +1 -0
  222. package/dist/esm/runtimes/react/hooks/use-is-in-builder.js.map +1 -0
  223. package/dist/esm/runtimes/react/hooks/use-is-read-only.js.map +1 -0
  224. package/dist/esm/runtimes/react/hooks/use-react-runtime.js.map +1 -0
  225. package/dist/esm/runtimes/react/hooks/use-register-document.js.map +1 -0
  226. package/dist/esm/runtimes/react/hooks/use-resolvable-record.js.map +1 -0
  227. package/dist/esm/runtimes/react/hooks/use-resolved-props.js.map +1 -0
  228. package/dist/esm/runtimes/react/hooks/use-resolved-value.js.map +1 -0
  229. package/dist/esm/runtimes/react/hooks/use-resource-resolver.js.map +1 -0
  230. package/dist/esm/runtimes/react/hooks/use-selector.js.map +1 -0
  231. package/dist/esm/runtimes/react/hooks/use-store.js.map +1 -0
  232. package/dist/esm/runtimes/react/hooks/use-stylesheet-factory.js.map +1 -0
  233. package/dist/esm/runtimes/react/hooks/use-universal-dispatch.js.map +1 -0
  234. package/dist/esm/runtimes/react/lib/react-dom.js.map +1 -0
  235. package/dist/esm/runtimes/react/testing/react-runtime.js.map +1 -0
  236. package/dist/esm/runtimes/react/use-global-style.js.map +1 -0
  237. package/dist/esm/runtimes/react/use-style.js.map +1 -0
  238. package/dist/esm/runtimes/react/utils/prop-error-handling-proxy.js.map +1 -0
  239. package/dist/esm/runtimes/react/utils/suppress-ref-warning.js.map +1 -0
  240. package/dist/esm/slate/BlockPlugin/utils/location.js.map +1 -0
  241. package/dist/esm/slate/BlockPlugin/wrapInline.js +12 -0
  242. package/dist/esm/slate/BlockPlugin/wrapInline.js.map +1 -0
  243. package/dist/esm/slate/BlockPlugin/wrapList.js +44 -0
  244. package/dist/esm/slate/BlockPlugin/wrapList.js.map +1 -0
  245. package/dist/esm/slate/utils/responsive.js.map +1 -0
  246. package/dist/esm/slate/utils/toText.js.map +1 -0
  247. package/dist/esm/slate/utils/unhangRange.js.map +1 -0
  248. package/dist/esm/state/actions/internal/read-only-actions.js.map +1 -0
  249. package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -0
  250. package/dist/esm/state/builder-api/proxy.js.map +1 -0
  251. package/dist/esm/state/middleware/read-only-element-tree.js.map +1 -0
  252. package/dist/esm/state/middleware/read-write/measure-box-models.js.map +1 -0
  253. package/dist/esm/state/middleware/read-write/prop-controller-handles.js.map +1 -0
  254. package/dist/esm/state/middleware/read-write/update-element-tree.js.map +1 -0
  255. package/dist/esm/state/modules/prop-controllers.js.map +1 -0
  256. package/dist/esm/state/modules/react-components.js.map +1 -0
  257. package/dist/esm/state/modules/read-only-documents.js.map +1 -0
  258. package/dist/esm/state/modules/read-write/pointer.js.map +1 -0
  259. package/dist/esm/state/modules/read-write/read-write-documents.js.map +1 -0
  260. package/dist/esm/state/modules/site-version.js.map +1 -0
  261. package/package.json +3 -3
@@ -0,0 +1,12 @@
1
+ import {
2
+ getTextAreaPropControllerDataString
3
+ } from "@makeswift/prop-controllers";
4
+ function useTextAreaPropControllerData(data) {
5
+ if (data == null)
6
+ return data;
7
+ return getTextAreaPropControllerDataString(data);
8
+ }
9
+ export {
10
+ useTextAreaPropControllerData
11
+ };
12
+ //# sourceMappingURL=useTextAreaPropControllerData.js.map
@@ -0,0 +1,10 @@
1
+ import {
2
+ getTextInputPropControllerDataString
3
+ } from "@makeswift/prop-controllers";
4
+ function useTextInputPropControllerData(data) {
5
+ return getTextInputPropControllerDataString(data);
6
+ }
7
+ export {
8
+ useTextInputPropControllerData
9
+ };
10
+ //# sourceMappingURL=useTextInputPropControllerData.js.map
@@ -0,0 +1,12 @@
1
+ import {
2
+ getTextStylePropControllerDataResponsiveTextStyleData
3
+ } from "@makeswift/prop-controllers";
4
+ function useTextStylePropControllerData(data) {
5
+ if (data == null)
6
+ return data;
7
+ return getTextStylePropControllerDataResponsiveTextStyleData(data);
8
+ }
9
+ export {
10
+ useTextStylePropControllerData
11
+ };
12
+ //# sourceMappingURL=useTextStylePropControllerData.js.map
@@ -0,0 +1,12 @@
1
+ import {
2
+ getVideoPropControllerDataVideoData
3
+ } from "@makeswift/prop-controllers";
4
+ function useVideoPropControllerData(data) {
5
+ if (data == null)
6
+ return data;
7
+ return getVideoPropControllerDataVideoData(data);
8
+ }
9
+ export {
10
+ useVideoPropControllerData
11
+ };
12
+ //# sourceMappingURL=useVideoPropControllerData.js.map
@@ -0,0 +1,15 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ function Warning20(props) {
3
+ return /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: 20, height: 20, ...props, children: /* @__PURE__ */ jsx(
4
+ "path",
5
+ {
6
+ fillRule: "evenodd",
7
+ d: "M2.899 18H17.1a1.75 1.75 0 0 0 1.549-2.565L11.549 1.942c-.656-1.246-2.442-1.246-3.098 0L1.35 15.435A1.75 1.75 0 0 0 2.899 18M9 6a1 1 0 1 1 2 0v5a1 1 0 1 1-2 0zm2.25 8.75a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0",
8
+ clipRule: "evenodd"
9
+ }
10
+ ) });
11
+ }
12
+ export {
13
+ Warning20
14
+ };
15
+ //# sourceMappingURL=Warning20.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/controls/rich-text-v2/translations/merge-translations.ts"],"sourcesContent":["import { Descendant, Editor, Element, Node, Text, Transforms } from 'slate'\nimport { jsx } from 'slate-hyperscript'\nimport { parseFragment, DefaultTreeAdapterTypes } from 'parse5'\n\nimport { Slate } from '@makeswift/controls'\n\nimport { RichTextV2Plugin } from '../plugin'\nimport { BlockType, InlineType } from '../../../slate/types'\nimport { createEditorWithPlugins, RichTextTranslationDto, stringToPath } from './translations-core'\n\nfunction deserializeTranslationHtmlString(\n el: DefaultTreeAdapterTypes.ChildNode | DefaultTreeAdapterTypes.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 @@
1
+ {"version":3,"sources":["../../../../../src/controls/rich-text-v2/translations/translations-core.ts"],"sourcesContent":["import { createEditor } from 'slate'\nimport { MakeswiftEditor } from '../../../slate'\nimport { RichTextV2Plugin } from '../plugin'\n\nexport function createEditorWithPlugins(plugins: RichTextV2Plugin[]): MakeswiftEditor {\n return plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n createEditor(),\n )\n}\n\nexport function pathToString(path: number[]): string {\n return path.join(':')\n}\n\nexport function stringToPath(s: string): number[] {\n return s.split(':').map(a => parseInt(a))\n}\n\nexport type RichTextTranslationDto = Record<string, string>\n"],"mappings":"AAAA,SAAS,oBAAoB;AAItB,SAAS,wBAAwB,SAA8C;AACpF,SAAO,QAAQ;AAAA,IACb,CAAC,QAAQ,WAAW,QAAQ,aAAa,MAAM,KAAK;AAAA,IACpD,aAAa;AAAA,EACf;AACF;AAEO,SAAS,aAAa,MAAwB;AACnD,SAAO,KAAK,KAAK,GAAG;AACtB;AAEO,SAAS,aAAa,GAAqB;AAChD,SAAO,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK,SAAS,CAAC,CAAC;AAC1C;","names":[]}
@@ -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,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 @@
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/config/pages-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { NextApiRequest, NextApiResponse } from 'next'\n\nimport { type ApiResponse } from '../../../api-handler/request-response'\nimport { toApiRequest, pipeResponseTo } from '../../../api-handler/node-request-response'\n\nimport { pagesRouterRedirectPreviewHandler } from '../handlers/pages-router-redirect-preview'\nimport { PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE } from '../preview'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\nimport { MakeswiftClient } from '../../../client'\n\nexport type ApiHandlerArgs = [NextApiRequest, NextApiResponse]\nexport const argsPattern = [P.any, P.any] as const\n\nexport async function config({\n req,\n res,\n client,\n}: {\n req: NextApiRequest\n res: NextApiResponse\n client: MakeswiftClient\n}): Promise<ApiHandlerConfig> {\n return {\n req: toApiRequest(req),\n route: validateApiRoute(await apiRequestParams(req)),\n previewCookieNames: [PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE],\n\n sendResponse: (apiResponse: ApiResponse): Promise<Response | void> =>\n pipeResponseTo(apiResponse, res),\n\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n res.revalidate(path)\n } else {\n // No-op, Pages Router does not support tag-based revalidation\n }\n },\n\n customRoutes: async (route: string) => {\n if (route === '/redirect-preview') {\n return { res: await pagesRouterRedirectPreviewHandler(req, res, client) }\n }\n\n return null\n },\n }\n}\n\nfunction apiRequestParams(request: NextApiRequest): Promise<NextApiRequest['query']> {\n // `NextApiRequest.query` prop became async in Next.js 15, but it's not reflected in the type definition;\n // force-casting it to a `Promise` manually\n return Promise.resolve(request.query)\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAIlB,SAAS,cAAc,sBAAsB;AAE7C,SAAS,yCAAyC;AAClD,SAAS,yBAAyB,2BAA2B;AAE7D,SAAS,wBAA+C;AAIjD,MAAM,cAAc,CAAC,EAAE,KAAK,EAAE,GAAG;AAExC,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAI8B;AAC5B,SAAO;AAAA,IACL,KAAK,aAAa,GAAG;AAAA,IACrB,OAAO,iBAAiB,MAAM,iBAAiB,GAAG,CAAC;AAAA,IACnD,oBAAoB,CAAC,yBAAyB,mBAAmB;AAAA,IAEjE,cAAc,CAAC,gBACb,eAAe,aAAa,GAAG;AAAA,IAEjC,qBAAqB,OAAO,SAAiC;AAC3D,UAAI,QAAQ,MAAM;AAChB,YAAI,WAAW,IAAI;AAAA,MACrB,OAAO;AAAA,MAEP;AAAA,IACF;AAAA,IAEA,cAAc,OAAO,UAAkB;AACrC,UAAI,UAAU,qBAAqB;AACjC,eAAO,EAAE,KAAK,MAAM,kCAAkC,KAAK,KAAK,MAAM,EAAE;AAAA,MAC1E;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAA2D;AAGnF,SAAO,QAAQ,QAAQ,QAAQ,KAAK;AACtC;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/pages-router-redirect-preview.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\n\nimport { parse as parseSetCookie } from 'set-cookie-parser'\nimport { serialize as serializeCookie } from 'cookie'\n\nimport { cookieSettingOptions, SET_COOKIE_HEADER } from '../../../api-handler/cookies'\n\nimport {\n PRERENDER_BYPASS_COOKIE,\n PREVIEW_DATA_COOKIE,\n RewriteRuleMatches,\n SearchParams,\n} from '../preview'\nimport { MakeswiftClient } from '../../../client'\nimport {\n secondsUntilSiteVersionExpiration,\n serializeSiteVersion,\n type SiteVersion,\n} from '../../../api/site-version'\n\nexport async function pagesRouterRedirectPreviewHandler(\n req: NextApiRequest,\n res: NextApiResponse,\n client: MakeswiftClient,\n): Promise<void> {\n // Next.js automatically strips the locale prefix from rewritten request's URL, even when the\n // rewrite's `locale` option is set to `false`: https://github.com/vercel/next.js/discussions/21798.\n // At the same time, it also maps rewrite's URL segments (e.g. `:path`) to query parameters\n // on the rewritten request, so we use the `query` to recover the original request path.\n const pathname = req.query[RewriteRuleMatches.OriginalPath] as string | undefined\n\n if (pathname == null) {\n return res\n .status(400)\n .send('Bad request: incoming request does not have an associated pathname')\n }\n\n const previewToken = req.query[SearchParams.PreviewToken] as string | undefined\n\n if (previewToken == null) {\n return res.status(400).send('Bad request: no preview token provided')\n }\n\n const verificationResult = await client.readPreviewToken(previewToken)\n\n if (verificationResult == null) {\n return res.status(401).send('Failed to verify preview token')\n }\n\n const { payload } = verificationResult\n\n const siteVersion: SiteVersion = { version: payload.version, token: previewToken }\n const secondsUntilExpiration = secondsUntilSiteVersionExpiration(siteVersion)\n const serializedSiteVersion = serializeSiteVersion(siteVersion)\n\n const setCookie = res\n .setPreviewData({ siteVersion: serializedSiteVersion })\n .getHeader(SET_COOKIE_HEADER)\n\n res.removeHeader(SET_COOKIE_HEADER)\n\n const parsedCookies = parseSetCookie(Array.isArray(setCookie) ? setCookie : '')\n\n const prerenderBypassCookie = parsedCookies.find(c => c.name === PRERENDER_BYPASS_COOKIE)\n const previewDataCookie = parsedCookies.find(c => c.name === PREVIEW_DATA_COOKIE)\n\n if (prerenderBypassCookie?.value == null || previewDataCookie?.value == null) {\n return res.status(500).send('Could not retrieve preview mode cookies')\n }\n\n const patchedCookies = [prerenderBypassCookie, previewDataCookie].map(({ name, value }) => {\n return serializeCookie(name, value, { ...cookieSettingOptions, maxAge: secondsUntilExpiration })\n })\n res.setHeader(SET_COOKIE_HEADER, patchedCookies)\n\n const destinationUrl = new URL(pathname, 'http://test.com')\n destinationUrl.searchParams.delete(SearchParams.PreviewToken)\n destinationUrl.searchParams.delete(RewriteRuleMatches.PreviewToken)\n destinationUrl.searchParams.delete(RewriteRuleMatches.OriginalPath)\n\n res.redirect(`${destinationUrl.pathname}?${destinationUrl.searchParams.toString()}`)\n}\n"],"mappings":"AAEA,SAAS,SAAS,sBAAsB;AACxC,SAAS,aAAa,uBAAuB;AAE7C,SAAS,sBAAsB,yBAAyB;AAExD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAEP,eAAsB,kCACpB,KACA,KACA,QACe;AAKf,QAAM,WAAW,IAAI,MAAM,mBAAmB,YAAY;AAE1D,MAAI,YAAY,MAAM;AACpB,WAAO,IACJ,OAAO,GAAG,EACV,KAAK,oEAAoE;AAAA,EAC9E;AAEA,QAAM,eAAe,IAAI,MAAM,aAAa,YAAY;AAExD,MAAI,gBAAgB,MAAM;AACxB,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,wCAAwC;AAAA,EACtE;AAEA,QAAM,qBAAqB,MAAM,OAAO,iBAAiB,YAAY;AAErE,MAAI,sBAAsB,MAAM;AAC9B,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,gCAAgC;AAAA,EAC9D;AAEA,QAAM,EAAE,QAAQ,IAAI;AAEpB,QAAM,cAA2B,EAAE,SAAS,QAAQ,SAAS,OAAO,aAAa;AACjF,QAAM,yBAAyB,kCAAkC,WAAW;AAC5E,QAAM,wBAAwB,qBAAqB,WAAW;AAE9D,QAAM,YAAY,IACf,eAAe,EAAE,aAAa,sBAAsB,CAAC,EACrD,UAAU,iBAAiB;AAE9B,MAAI,aAAa,iBAAiB;AAElC,QAAM,gBAAgB,eAAe,MAAM,QAAQ,SAAS,IAAI,YAAY,EAAE;AAE9E,QAAM,wBAAwB,cAAc,KAAK,OAAK,EAAE,SAAS,uBAAuB;AACxF,QAAM,oBAAoB,cAAc,KAAK,OAAK,EAAE,SAAS,mBAAmB;AAEhF,MAAI,uBAAuB,SAAS,QAAQ,mBAAmB,SAAS,MAAM;AAC5E,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,yCAAyC;AAAA,EACvE;AAEA,QAAM,iBAAiB,CAAC,uBAAuB,iBAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM;AACzF,WAAO,gBAAgB,MAAM,OAAO,EAAE,GAAG,sBAAsB,QAAQ,uBAAuB,CAAC;AAAA,EACjG,CAAC;AACD,MAAI,UAAU,mBAAmB,cAAc;AAE/C,QAAM,iBAAiB,IAAI,IAAI,UAAU,iBAAiB;AAC1D,iBAAe,aAAa,OAAO,aAAa,YAAY;AAC5D,iBAAe,aAAa,OAAO,mBAAmB,YAAY;AAClE,iBAAe,aAAa,OAAO,mBAAmB,YAAY;AAElE,MAAI,SAAS,GAAG,eAAe,QAAQ,IAAI,eAAe,aAAa,SAAS,CAAC,EAAE;AACrF;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/next/components/tests/__fixtures__/page-document.ts"],"sourcesContent":["import { type MakeswiftPageDocument } from '../../../../client'\nimport { MakeswiftComponentType } from '../../../../components/builtin/constants'\n\nexport const pageDocument: MakeswiftPageDocument = {\n id: '2222-2222-2222-2222',\n site: {\n id: '1111-1111-1111-1111',\n },\n data: {\n type: MakeswiftComponentType.Root,\n key: '0000-0000-0000-0000',\n props: {},\n },\n snippets: [],\n fonts: [],\n localizedPages: [],\n locale: null,\n meta: {},\n seo: {},\n}\n"],"mappings":"AACA,SAAS,8BAA8B;AAEhC,MAAM,eAAsC;AAAA,EACjD,IAAI;AAAA,EACJ,MAAM;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,uBAAuB;AAAA,IAC7B,KAAK;AAAA,IACL,OAAO,CAAC;AAAA,EACV;AAAA,EACA,UAAU,CAAC;AAAA,EACX,OAAO,CAAC;AAAA,EACR,gBAAgB,CAAC;AAAA,EACjB,QAAQ;AAAA,EACR,MAAM,CAAC;AAAA,EACP,KAAK,CAAC;AACR;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/next/components/tests/__fixtures__/resources/page-pathname-slices.ts"],"sourcesContent":["import { type PagePathnameSlice } from '../../../../../api'\n\nexport const pagePathnameSlice1: PagePathnameSlice = {\n __typename: 'PagePathnameSlice',\n id: 'UGFnZTozOWZkNDcyZS03N2QxLTRjZDItOGE3Yi02ZTQ2MDU3ODgxNzM=',\n pathname: 'about',\n}\n"],"mappings":"AAEO,MAAM,qBAAwC;AAAA,EACnD,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,UAAU;AACZ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/next/components/tests/__fixtures__/resources/swatches.ts"],"sourcesContent":["import { type Swatch } from '../../../../../api'\n\nexport const swatch1: Swatch = {\n __typename: 'Swatch',\n id: 'U3dhdGNoOmUyNmQyMGY3LWNlNmEtNDcwMS04N2U2LWU2ZTM2NzlmMDY4Zg==',\n hue: 360,\n saturation: 97.873924,\n lightness: 52.965,\n}\n"],"mappings":"AAEO,MAAM,UAAkB;AAAA,EAC7B,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,WAAW;AACb;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/next/components/tests/controls/fixtures/rich-text-v2.ts"],"sourcesContent":["import { type RichTextDataV2 } from '../../../../../controls/rich-text-v2'\n\nexport const data = {\n type: 'makeswift::controls::rich-text-v2',\n version: 2,\n descendants: [\n {\n children: [\n { text: '' },\n {\n children: [\n {\n text: 'Adyen',\n typography: {\n id: 'VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc=',\n style: [\n {\n deviceId: 'desktop',\n value: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA==',\n },\n },\n },\n ],\n },\n },\n ],\n link: {\n payload: { openInNewTab: true, url: 'https://www.bigcommerce.com/adyen' },\n type: 'OPEN_URL',\n },\n type: 'link',\n },\n { text: '' },\n ],\n type: 'paragraph',\n },\n {\n children: [\n { text: '' },\n {\n children: [\n {\n text: 'Authorize.net',\n typography: {\n id: 'VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc=',\n style: [\n {\n deviceId: 'desktop',\n value: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA==',\n },\n },\n },\n ],\n },\n },\n ],\n link: {\n payload: { openInNewTab: true, url: 'http://www.authorize.net/' },\n type: 'OPEN_URL',\n },\n type: 'link',\n },\n { text: '' },\n ],\n type: 'paragraph',\n },\n {\n children: [\n { text: '' },\n {\n children: [\n {\n text: 'BlueSnap',\n typography: {\n id: 'VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc=',\n style: [\n {\n deviceId: 'desktop',\n value: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA==',\n },\n },\n },\n ],\n },\n },\n ],\n link: {\n payload: { openInNewTab: true, url: 'https://www.bigcommerce.com/bluesnap/' },\n type: 'OPEN_URL',\n },\n type: 'link',\n },\n { text: '' },\n ],\n type: 'paragraph',\n },\n {\n children: [\n { text: '' },\n {\n children: [\n {\n text: 'Checkout.com',\n typography: {\n id: 'VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc=',\n style: [\n {\n deviceId: 'desktop',\n value: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA==',\n },\n },\n },\n ],\n },\n },\n ],\n link: {\n payload: {\n openInNewTab: true,\n url: 'https://support.bigcommerce.com/s/article/Connecting-with-Checkoutcom/',\n },\n type: 'OPEN_URL',\n },\n type: 'link',\n },\n { text: '' },\n ],\n type: 'paragraph',\n },\n {\n children: [\n { text: '' },\n {\n children: [\n {\n text: 'CyberSource Direct',\n typography: {\n id: 'VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc=',\n style: [\n {\n deviceId: 'desktop',\n value: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA==',\n },\n },\n },\n ],\n },\n },\n ],\n link: {\n payload: { openInNewTab: true, url: 'http://www.cybersource.com/' },\n type: 'OPEN_URL',\n },\n type: 'link',\n },\n { text: '' },\n ],\n type: 'paragraph',\n },\n ],\n key: 'c438a1d3-fee2-4eb4-b49b-f1856c12de42',\n} satisfies RichTextDataV2\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/next/components/tests/controls/page-control-prop-rendering.tsx"],"sourcesContent":["import { type ReactNode, Fragment, forwardRef, useRef, isValidElement, act } from 'react'\nimport { renderToReadableStream } from 'react-dom/server'\nimport { JSDOM } from 'jsdom'\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\nimport { ServerInsertedHTMLContext } from 'next/navigation'\n\nimport { type Data, type ValueType, type DataType, ControlDefinition } from '@makeswift/controls'\n\nimport { type CacheData } from '../../../../api/client'\nimport { ElementData } from '../../../../state/read-only-state'\nimport { setIsInBuilder } from '../../../../state/actions/internal/read-only-actions'\nimport { ReactRuntime } from '../../../../runtimes/react/react-runtime'\nimport { MakeswiftComponent } from '../../../../runtimes/react/components/MakeswiftComponent'\nimport { Page } from '../../page'\nimport { isServer } from '../../../../utils/is-server'\nimport * as Testing from '../../../testing'\n\nconst ROOT_ID = '00000000-0000-0000-0000-000000000000'\nconst ELEMENT_ID = '11111111-1111-1111-1111-111111111111'\n\nconst renderProp = (prop: any) =>\n prop === undefined ? 'undefined' : isValidElement(prop) ? prop : JSON.stringify(prop)\n\nconst propSnapshot = (prop: HTMLElement | null) =>\n prop?.childElementCount ? prop.childNodes : parseStringifiedProp(prop?.textContent ?? '')\n\nconst parseStringifiedProp = (prop: string) => (prop === 'undefined' ? undefined : JSON.parse(prop))\n\nasync function streamToString(stream: ReadableStream) {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n let result = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n result += decoder.decode(value, { stream: true })\n }\n\n return result\n}\n\nasync function renderToString(element: ReactNode) {\n return await streamToString(await renderToReadableStream(element))\n}\n\nasync function serverSideRender(children: ReactNode) {\n // wrap the children in a context provider to capture server-inserted HTML, see\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/server-inserted-html.tsx\n const serverInsertedCallbacks: (() => React.ReactNode)[] = []\n\n const elementTree = (\n <ServerInsertedHTMLContext.Provider value={handler => serverInsertedCallbacks.push(handler)}>\n {children}\n </ServerInsertedHTMLContext.Provider>\n )\n\n const elementsHTML = await renderToString(elementTree)\n\n const serverInsertedNodes = serverInsertedCallbacks.map((callback, index) => (\n <Fragment key={'__next_server_inserted__' + index}>{callback()}</Fragment>\n ))\n\n const headHTML = await renderToString(serverInsertedNodes)\n\n const dom = new JSDOM(\n `<!DOCTYPE html><head>${headHTML}</head><body><div id=\"root\">${elementsHTML}</div></body></div>`,\n {\n runScripts: 'dangerously',\n },\n )\n\n return dom.window.document\n}\n\nexport async function testPageControlPropRendering<D extends ControlDefinition>(\n controlDefinition: D,\n {\n toData,\n value,\n locale,\n cacheData,\n expectedRenders,\n registerComponents,\n action,\n rootElements = [],\n isInBuilder = false,\n }: {\n toData?: (value: ValueType<D>) => DataType<D>\n value: ValueType<D> | undefined\n locale?: string | null\n cacheData?: Partial<CacheData>\n expectedRenders?: number\n registerComponents?: (runtime: ReactRuntime) => void\n action?: (element: HTMLElement) => Promise<void>\n rootElements?: ElementData[]\n isInBuilder?: boolean\n },\n) {\n // Arrange\n const controlData: DataType<D> | Data =\n value !== undefined ? (toData ? toData(value) : controlDefinition.toData(value)) : undefined\n\n const testComponentMeta = {\n type: 'TestComponent',\n label: 'Test Component',\n }\n\n const testId = 'test-id'\n const renderCountTestId = 'render-count-test-id'\n const elementData: ElementData = {\n key: ELEMENT_ID,\n type: testComponentMeta.type,\n props: {\n propKey: controlData,\n },\n }\n\n const runtime = Testing.createReactRuntime()\n runtime.protoStore.dispatch(setIsInBuilder(isInBuilder))\n registerComponents?.(runtime)\n\n // Act\n runtime.registerComponent(\n forwardRef<HTMLDivElement, { propKey?: any }>(({ propKey }, ref) => {\n const renderCount = useRef(0)\n ++renderCount.current\n\n return (\n <div ref={ref}>\n <div data-testid={renderCountTestId}>{renderCount.current}</div>\n <div data-testid={testId}>{renderProp(propKey)}</div>\n </div>\n )\n }),\n {\n ...testComponentMeta,\n props: {\n propKey: controlDefinition as any,\n },\n },\n )\n\n const testElementTree = (component: ReactNode) => (\n <Testing.ReactProvider runtime={runtime}>{component}</Testing.ReactProvider>\n )\n\n if (!isServer()) {\n const rootElementData: ElementData = Testing.createRootComponent(\n [elementData, ...rootElements],\n ROOT_ID,\n )\n\n const snapshot = Testing.createMakeswiftPageSnapshot(rootElementData, { locale, cacheData })\n\n // Assert\n await act(async () => render(testElementTree(<Page snapshot={snapshot} />)))\n\n if (action) {\n await act(async () => {\n await action(screen.getByTestId(testId))\n })\n }\n\n expect(snapshot).toMatchSnapshot('snapshot')\n expect(propSnapshot(screen.getByTestId(testId))).toMatchSnapshot('resolvedValue')\n\n if (expectedRenders != null) {\n expect(Number(screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders)\n }\n } else {\n // test server-side rendering using a component snapshot\n console.assert(action == null)\n console.assert(rootElements.length === 0)\n\n const snapshot = Testing.createMakeswiftComponentSnapshot(elementData, { locale, cacheData })\n const elementTree = testElementTree(\n <MakeswiftComponent snapshot={snapshot} {...testComponentMeta} />,\n )\n\n const document = await serverSideRender(elementTree)\n const getByTestId = (id: string): HTMLElement | null =>\n document.querySelector(`[data-testid=\"${id}\"]`)\n\n expect(propSnapshot(getByTestId(testId))).toMatchSnapshot('resolvedValue')\n expect([...document.querySelectorAll('style')].map(n => n.textContent)).toMatchSnapshot(\n 'component styles',\n )\n expect(Number(getByTestId(renderCountTestId)?.textContent)).toBe(1)\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/next/components/tests/prop-controllers/page-prop-controller.tsx"],"sourcesContent":["/** @jest-environment jsdom */\n\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport {\n type OptionsType,\n Types,\n type Descriptor,\n type PropDef,\n type Value,\n} from '@makeswift/prop-controllers'\n\nimport { type ElementData, type ComponentType } from '../../../../state/read-only-state'\nimport { randomUUID } from 'crypto'\n\nimport { Page } from '../../page'\nimport { act } from 'react'\nimport * as Testing from '../../../testing'\n\nexport const pagePropControllerTest = <\n P extends PropDef & ((options?: any) => any),\n C extends ComponentType<{ propKey: Value<P> | undefined }>,\n>(\n propDef: P,\n value: Value<typeof propDef>,\n component: (testId: string) => C,\n assert: (element: HTMLElement) => void,\n options?: OptionsType<P>,\n) =>\n describe('Page', () => {\n test(`can render ${propDef.type} v0 data`, async () => {\n // Arrange\n const descriptorV0: Descriptor<typeof propDef> = {\n type: propDef.type,\n options,\n }\n\n const TestComponentType = 'TestComponent'\n const testId = 'test-id'\n\n const elementData: ElementData = Testing.createRootComponent([\n {\n key: randomUUID(),\n type: TestComponentType,\n props: {\n propKey: propDef.toPropData(value, descriptorV0),\n },\n },\n ])\n const snapshot = Testing.createMakeswiftPageSnapshot(elementData)\n const runtime = Testing.createReactRuntime()\n\n runtime.registerComponent(component(testId), {\n type: TestComponentType,\n label: 'TestComponent',\n props: {\n propKey: propDef(options),\n },\n })\n\n await act(async () =>\n render(\n <Testing.ReactProvider runtime={runtime}>\n <Page snapshot={snapshot} />\n </Testing.ReactProvider>,\n ),\n )\n\n assert(screen.getByTestId(testId))\n })\n\n test(`can render ${propDef.type} v1 data`, async () => {\n // Arrange\n const gapXDefinitionV1: Descriptor<typeof propDef> = {\n type: Types.GapX,\n version: 1,\n options: {},\n }\n\n const TestComponentType = 'TestComponent'\n const testId = 'test-id'\n const elementData: ElementData = Testing.createRootComponent([\n {\n key: randomUUID(),\n type: TestComponentType,\n props: {\n propKey: propDef.toPropData(value, gapXDefinitionV1),\n },\n },\n ])\n const snapshot = Testing.createMakeswiftPageSnapshot(elementData)\n const runtime = Testing.createReactRuntime()\n\n runtime.registerComponent(component(testId), {\n type: TestComponentType,\n label: 'TestComponent',\n props: {\n propKey: propDef(options),\n },\n })\n\n await act(async () =>\n render(\n <Testing.ReactProvider runtime={runtime}>\n <Page snapshot={snapshot} />\n </Testing.ReactProvider>,\n ),\n )\n\n assert(screen.getByTestId(testId))\n })\n })\n"],"mappings":"AAgEY;AA9DZ,SAAS,QAAQ,cAAc;AAC/B,OAAO;AAEP;AAAA,EAEE;AAAA,OAIK;AAGP,SAAS,kBAAkB;AAE3B,SAAS,YAAY;AACrB,SAAS,WAAW;AACpB,YAAY,aAAa;AAElB,MAAM,yBAAyB,CAIpC,SACA,OACA,WACA,QACA,YAEA,SAAS,QAAQ,MAAM;AACrB,OAAK,cAAc,QAAQ,IAAI,YAAY,YAAY;AAErD,UAAM,eAA2C;AAAA,MAC/C,MAAM,QAAQ;AAAA,MACd;AAAA,IACF;AAEA,UAAM,oBAAoB;AAC1B,UAAM,SAAS;AAEf,UAAM,cAA2B,QAAQ,oBAAoB;AAAA,MAC3D;AAAA,QACE,KAAK,WAAW;AAAA,QAChB,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,QAAQ,WAAW,OAAO,YAAY;AAAA,QACjD;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,WAAW,QAAQ,4BAA4B,WAAW;AAChE,UAAM,UAAU,QAAQ,mBAAmB;AAE3C,YAAQ,kBAAkB,UAAU,MAAM,GAAG;AAAA,MAC3C,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,QACL,SAAS,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM;AAAA,MAAI,YACR;AAAA,QACE,oBAAC,QAAQ,eAAR,EAAsB,SACrB,8BAAC,QAAK,UAAoB,GAC5B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO,YAAY,MAAM,CAAC;AAAA,EACnC,CAAC;AAED,OAAK,cAAc,QAAQ,IAAI,YAAY,YAAY;AAErD,UAAM,mBAA+C;AAAA,MACnD,MAAM,MAAM;AAAA,MACZ,SAAS;AAAA,MACT,SAAS,CAAC;AAAA,IACZ;AAEA,UAAM,oBAAoB;AAC1B,UAAM,SAAS;AACf,UAAM,cAA2B,QAAQ,oBAAoB;AAAA,MAC3D;AAAA,QACE,KAAK,WAAW;AAAA,QAChB,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS,QAAQ,WAAW,OAAO,gBAAgB;AAAA,QACrD;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,WAAW,QAAQ,4BAA4B,WAAW;AAChE,UAAM,UAAU,QAAQ,mBAAmB;AAE3C,YAAQ,kBAAkB,UAAU,MAAM,GAAG;AAAA,MAC3C,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,QACL,SAAS,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM;AAAA,MAAI,YACR;AAAA,QACE,oBAAC,QAAQ,eAAR,EAAsB,SACrB,8BAAC,QAAK,UAAoB,GAC5B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO,YAAY,MAAM,CAAC;AAAA,EACnC,CAAC;AACH,CAAC;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/next/hooks/use-router-locale-sync.ts"],"sourcesContent":["import { useRouter as usePagesRouter } from 'next/router'\nimport { P, match } from 'ts-pattern'\nimport { useEffect } from 'react'\n\nimport { setLocale } from '../../state/builder-api/actions'\nimport { useDispatch } from '../../runtimes/react/hooks/use-dispatch'\n\nfunction useRouter() {\n try {\n const router = usePagesRouter()\n\n return router\n } catch (e) {\n return\n }\n}\n\nexport const useRouterLocaleSync = () => {\n const router = useRouter()\n const dispatch = useDispatch()\n\n useEffect(() => {\n match(router)\n .with({ locale: P.string }, ({ locale }) => dispatch(setLocale(new Intl.Locale(locale))))\n .otherwise(() => {})\n }, [router])\n}\n"],"mappings":"AAAA,SAAS,aAAa,sBAAsB;AAC5C,SAAS,GAAG,aAAa;AACzB,SAAS,iBAAiB;AAE1B,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAE5B,SAAS,YAAY;AACnB,MAAI;AACF,UAAM,SAAS,eAAe;AAE9B,WAAO;AAAA,EACT,SAAS,GAAG;AACV;AAAA,EACF;AACF;AAEO,MAAM,sBAAsB,MAAM;AACvC,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,YAAY;AAE7B,YAAU,MAAM;AACd,UAAM,MAAM,EACT,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,MAAM,SAAS,UAAU,IAAI,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,EACvF,UAAU,MAAM;AAAA,IAAC,CAAC;AAAA,EACvB,GAAG,CAAC,MAAM,CAAC;AACb;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/tests/__fixtures__/resources.ts"],"sourcesContent":["import {\n type Swatch,\n type File,\n type Typography,\n type GlobalElement,\n type LocalizedGlobalElement,\n type PagePathnameSlice,\n type Table,\n} from '../../../api'\n\nexport const swatch: Swatch = {\n __typename: 'Swatch',\n id: '[swatch-id]',\n hue: 123,\n saturation: 45,\n lightness: 67,\n}\n\nexport const file: File = {\n __typename: 'File',\n id: '[file-id]',\n name: 'cat.png',\n extension: 'png',\n publicUrl: 'https://example.com/cat.png',\n dimensions: { width: 100, height: 100 },\n}\n\nexport const typography: Typography = {\n __typename: 'Typography',\n id: '[typography-id]',\n name: 'Title',\n style: [\n {\n deviceId: 'desktop',\n value: {\n fontFamily: 'Inter',\n lineHeight: 1.2,\n letterSpacing: null,\n fontWeight: 700,\n textAlign: null,\n uppercase: null,\n underline: null,\n strikethrough: null,\n italic: null,\n fontSize: { value: 72, unit: 'px' },\n color: null,\n },\n },\n ],\n}\n\nexport const globalElement: GlobalElement = {\n __typename: 'GlobalElement',\n id: '[global-element-id]',\n data: { key: 'value' },\n}\n\nexport const localizedGlobalElement: LocalizedGlobalElement = {\n __typename: 'LocalizedGlobalElement',\n id: '[localized-global-element-id]',\n data: { key: 'localized-value' },\n}\n\nexport const pagePathnameSlice: PagePathnameSlice = {\n __typename: 'PagePathnameSlice',\n id: '[page-pathname-slice-id]',\n pathname: '/example-page',\n}\n\nexport const table: Table = {\n __typename: 'Table',\n id: '[table-id]',\n name: 'Example Table',\n columns: [],\n}\n"],"mappings":"AAUO,MAAM,SAAiB;AAAA,EAC5B,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,WAAW;AACb;AAEO,MAAM,OAAa;AAAA,EACxB,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY,EAAE,OAAO,KAAK,QAAQ,IAAI;AACxC;AAEO,MAAM,aAAyB;AAAA,EACpC,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,IACL;AAAA,MACE,UAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,UAAU,EAAE,OAAO,IAAI,MAAM,KAAK;AAAA,QAClC,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,gBAA+B;AAAA,EAC1C,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM,EAAE,KAAK,QAAQ;AACvB;AAEO,MAAM,yBAAiD;AAAA,EAC5D,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM,EAAE,KAAK,kBAAkB;AACjC;AAEO,MAAM,oBAAuC;AAAA,EAClD,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,UAAU;AACZ;AAEO,MAAM,QAAe;AAAA,EAC1B,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS,CAAC;AACZ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/tests/__fixtures__/translated-data.ts"],"sourcesContent":["export const translatedData = {\n '270019c4-4a80-483a-b701-757d4f7956a2:children': {\n '@@makeswift/type': 'prop-controllers::text-input::v1',\n value: 'Comprar ahora',\n },\n '2d5509fc-ef28-44c2-a52d-11278d893e45:text': {\n '0': 'StyleMatch',\n },\n '4e25b048-88c4-4e2a-b74f-2161f2567ac3:text': {\n '0': '¿Por qué comprar con nosotros?',\n },\n '5350c1a7-0cfb-48ba-94b3-43014b3a01f9:text': {\n '0': 'Acceso anticipado DropAlert',\n },\n '6b191363-f9c8-4988-9739-f74ca9cf7cee:text': {\n '0': 'GRAN Oferta de Verano',\n },\n '7581e32e-b699-4d95-80c5-af532cbeef1d:text': {\n '0': 'En nuestra tienda, la moda se encuentra con la innovación para crear una experiencia de compra como ninguna otra. Desde nuestro Estudio de Prueba Virtual que te permite previsualizar outfits con precisión, hasta StyleMatch que cura looks personalizados solo para ti, hacemos que encontrar tu ajuste perfecto sea fácil y divertido. Nuestra Garantía de Ajuste+ asegura que cada pieza se sienta como si hubiera sido hecha para ti, mientras que la App Compañero de Closet te ayuda a construir y estilizar un guardarropa que amarás. Además, con nuestro Filtro EcoEdit, puedes comprar de manera sostenible sin comprometer el estilo. Y con el Acceso Anticipado DropAlert, siempre estarás un paso adelante de las tendencias. No es solo comprar—es estilizar de manera inteligente.',\n },\n '89ad1aad-73f7-4e99-962f-ebf7e05a6810:text': {\n '0': 'Construye tu guardarropa de ensueño digitalmente. Nuestra App Compañero de Closet mantiene registro de lo que posees, te ayuda a estilizar nuevos outfits, y sugiere qué comprar después para completar tu look.',\n },\n '988e445b-cc28-46e0-b43d-eab4ed868f1a:text': {\n '0': 'Sé el primero en la fila para los lanzamientos más populares. Con DropAlert™, obtienes acceso exclusivo anticipado a colecciones limitadas, alertas de restock, y estilos solo para VIP—antes que nadie más.',\n },\n '9a55c845-b91b-4e65-a9bf-7647dff14836:text': {\n '0': 'App Compañero de Closet',\n },\n 'a80a02b2-0b2a-4719-8aff-7674f894e182:text': {\n '0': 'Estudio de Prueba Virtual',\n },\n 'aa3bb52a-350b-4bc3-9e80-aa6046f23472:altText': {\n '@@makeswift/type': 'prop-controllers::text-input::v1',\n value: 'Cielo nocturno',\n },\n 'bd59d14c-7d98-463f-8d8d-46ef53a765b5:text': {\n '0': 'La moda se encuentra con la sostenibilidad. Compra sin culpa filtrando nuestra colección por piezas hechas éticamente, recicladas, o de bajo impacto—porque lucir bien también debería sentirse bien.',\n },\n 'c712307f-4605-4204-9c30-f325c5861170:text': {\n '0': 'Descubre tu look perfecto en segundos. StyleMatch recomienda piezas basadas en tu gusto, compras pasadas, e incluso tu estado de ánimo. Es como tener un estilista personal en tu bolsillo.',\n },\n 'cec3c603-3401-4b1b-8e2f-00d984f4ba71:text': {\n '0': 'Nunca te preocupes por la talla incorrecta otra vez. Garantía de Ajuste+ usa tallaje basado en datos más intercambios gratuitos para asegurar que cada pieza te quede perfectamente—o lo arreglaremos, sin preguntas.',\n },\n 'dc706501-3b06-403c-929d-34048393d8f9:text': {\n '0': 'Filtro EcoEdit',\n },\n 'e4c44cbd-8e06-4281-9a5a-a9c67998df1a:text': {\n '0': 'Míralo. Estilízalo. Ámalo. Nuestro Estudio de Prueba Virtual te permite previsualizar outfits en un modelo 3D que coincide con tu tipo de cuerpo—para que puedas comprar con confianza y saltarte el drama del probador.',\n },\n 'ef06e719-b526-4fd7-95f7-324a0393df43:text': {\n '0': 'Garantía de Ajuste+',\n },\n}\n"],"mappings":"AAAO,MAAM,iBAAiB;AAAA,EAC5B,iDAAiD;AAAA,IAC/C,oBAAoB;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,gDAAgD;AAAA,IAC9C,oBAAoB;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AAAA,EACA,6CAA6C;AAAA,IAC3C,KAAK;AAAA,EACP;AACF;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { registerComponent } from "../../components/builtin/Video/register";
2
+ import { default as default2 } from "../../components/builtin/Video/Video";
3
+ export {
4
+ default2 as Video,
5
+ registerComponent as registerVideoComponent
6
+ };
7
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/react/builtins/video.ts"],"sourcesContent":["export { registerComponent as registerVideoComponent } from '../../components/builtin/Video/register'\nexport { default as Video } from '../../components/builtin/Video/Video'\n"],"mappings":"AAAA,SAA8B,yBAA8B;AAC5D,SAAoB,WAAXA,gBAAwB;","names":["default"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/MakeswiftComponent.tsx"],"sourcesContent":["'use client'\n\nimport { memo, useMemo } from 'react'\n\nimport {\n componentDocumentToRootEmbeddedDocument,\n MakeswiftComponentSnapshot,\n} from '../../../client'\nimport { getRootElement } from '../../../state/read-only-state'\n\nimport { useCacheData } from '../hooks/use-cache-data'\nimport { useRegisterDocument } from '../hooks/use-register-document'\nimport { useBuiltinSuspense } from '../hooks/use-builtin-suspense'\nimport { ActivityOrFallback } from './activity-with-fallback'\n\nimport { DocumentRoot } from './DocumentRoot'\n\ntype Props = {\n snapshot: MakeswiftComponentSnapshot\n label: string\n type: string\n description?: string\n}\n\nexport const MakeswiftComponent = memo(({ snapshot, label, type, description }: Props) => {\n useCacheData(snapshot.cacheData)\n\n const rootDocument = useMemo(\n () =>\n componentDocumentToRootEmbeddedDocument({\n document: snapshot.document,\n documentKey: snapshot.key,\n name: label,\n type,\n description,\n meta: snapshot.meta,\n }),\n [snapshot, label, type, description],\n )\n\n useRegisterDocument(rootDocument)\n\n const builtinSuspense = useBuiltinSuspense(getRootElement(rootDocument).type)\n\n return (\n <ActivityOrFallback suspenseFallback={builtinSuspense}>\n <DocumentRoot rootDocument={rootDocument} />\n </ActivityOrFallback>\n )\n})\n"],"mappings":";AA8CM;AA5CN,SAAS,MAAM,eAAe;AAE9B;AAAA,EACE;AAAA,OAEK;AACP,SAAS,sBAAsB;AAE/B,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AACnC,SAAS,0BAA0B;AAEnC,SAAS,oBAAoB;AAStB,MAAM,qBAAqB,KAAK,CAAC,EAAE,UAAU,OAAO,MAAM,YAAY,MAAa;AACxF,eAAa,SAAS,SAAS;AAE/B,QAAM,eAAe;AAAA,IACnB,MACE,wCAAwC;AAAA,MACtC,UAAU,SAAS;AAAA,MACnB,aAAa,SAAS;AAAA,MACtB,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM,SAAS;AAAA,IACjB,CAAC;AAAA,IACH,CAAC,UAAU,OAAO,MAAM,WAAW;AAAA,EACrC;AAEA,sBAAoB,YAAY;AAEhC,QAAM,kBAAkB,mBAAmB,eAAe,YAAY,EAAE,IAAI;AAE5E,SACE,oBAAC,sBAAmB,kBAAkB,iBACpC,8BAAC,gBAAa,cAA4B,GAC5C;AAEJ,CAAC;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/MakeswiftFonts.tsx"],"sourcesContent":["import { type GetFontsAPI } from '../../../client'\nimport { GoogleFontLink } from './GoogleFontLink'\n\ntype Props = {\n fonts: GetFontsAPI\n}\n\nexport function MakeswiftFonts({ fonts }: Props) {\n return <GoogleFontLink fonts={fonts.googleFonts} siteId={fonts.siteId} />\n}\n"],"mappings":"AAQS;AAPT,SAAS,sBAAsB;AAMxB,SAAS,eAAe,EAAE,MAAM,GAAU;AAC/C,SAAO,oBAAC,kBAAe,OAAO,MAAM,aAAa,QAAQ,MAAM,QAAQ;AACzE;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/RuntimeProvider.tsx"],"sourcesContent":["'use client'\n\nimport { ReactNode, useEffect, useMemo } from 'react'\n\nimport { type SiteVersion } from '../../../api/site-version'\n\nimport { ReactRuntimeContext } from '../hooks/use-react-runtime'\nimport { useAsyncEffect } from '../hooks/use-async-effect'\nimport { StoreContext } from '../hooks/use-store'\nimport { type ReactRuntimeCore } from '../react-runtime-core'\n\nimport { PreviewSwitcher } from './preview-switcher/preview-switcher'\n\nexport function RuntimeProvider({\n children,\n runtime,\n siteVersion: siteVersionProp,\n locale = undefined,\n}: {\n children: ReactNode\n runtime: ReactRuntimeCore\n siteVersion: SiteVersion | null | undefined\n locale?: string\n}) {\n const siteVersion = siteVersionProp ?? null\n const isPreview = siteVersion != null\n\n // see `getOrCreateStore` for the description of the stores' lifecycle\n const store = useMemo(\n () => runtime.getOrCreateStore({ siteVersion, locale }),\n [runtime, siteVersion, locale],\n )\n\n useEffect(() => {\n runtime.retainStore({ siteVersion, locale }, store)\n return () => runtime.releaseStore({ siteVersion, locale }, store)\n }, [runtime, siteVersion, locale, store])\n\n // if we're in the read-write mode, the reducers & middleware required for builder\n // interactions are loaded only on client side, lazily and asynchronously\n useAsyncEffect(() => store.loadReadWriteStateIfNeeded(), [store])\n\n return (\n <ReactRuntimeContext.Provider value={runtime}>\n <StoreContext.Provider value={store}>\n {children}\n <PreviewSwitcher isPreview={isPreview} />\n </StoreContext.Provider>\n </ReactRuntimeContext.Provider>\n )\n}\n"],"mappings":";AA4CM,SAEE,KAFF;AA1CN,SAAoB,WAAW,eAAe;AAI9C,SAAS,2BAA2B;AACpC,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAG7B,SAAS,uBAAuB;AAEzB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,SAAS;AACX,GAKG;AACD,QAAM,cAAc,mBAAmB;AACvC,QAAM,YAAY,eAAe;AAGjC,QAAM,QAAQ;AAAA,IACZ,MAAM,QAAQ,iBAAiB,EAAE,aAAa,OAAO,CAAC;AAAA,IACtD,CAAC,SAAS,aAAa,MAAM;AAAA,EAC/B;AAEA,YAAU,MAAM;AACd,YAAQ,YAAY,EAAE,aAAa,OAAO,GAAG,KAAK;AAClD,WAAO,MAAM,QAAQ,aAAa,EAAE,aAAa,OAAO,GAAG,KAAK;AAAA,EAClE,GAAG,CAAC,SAAS,aAAa,QAAQ,KAAK,CAAC;AAIxC,iBAAe,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,CAAC;AAEhE,SACE,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,SACnC,+BAAC,aAAa,UAAb,EAAsB,OAAO,OAC3B;AAAA;AAAA,IACD,oBAAC,mBAAgB,WAAsB;AAAA,KACzC,GACF;AAEJ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/Slot.tsx"],"sourcesContent":["'use client'\n\nimport { ReactNode, useMemo } from 'react'\nimport { MakeswiftComponentSnapshot } from '../../../client'\nimport { MakeswiftComponentType } from '../../../components/builtin/constants'\n\nimport { MakeswiftComponent } from './MakeswiftComponent'\nimport { SlotProvider } from './SlotProvider'\n\ntype Props = {\n label: string\n snapshot: MakeswiftComponentSnapshot\n fallback?: ReactNode\n}\n\nexport const Slot = ({ label, snapshot, fallback }: Props) => {\n const contextValue = useMemo(() => ({ fallback }), [fallback])\n\n return (\n <SlotProvider value={contextValue}>\n <MakeswiftComponent snapshot={snapshot} label={label} type={MakeswiftComponentType.Slot} />\n </SlotProvider>\n )\n}\n"],"mappings":";AAoBM;AAlBN,SAAoB,eAAe;AAEnC,SAAS,8BAA8B;AAEvC,SAAS,0BAA0B;AACnC,SAAS,oBAAoB;AAQtB,MAAM,OAAO,CAAC,EAAE,OAAO,UAAU,SAAS,MAAa;AAC5D,QAAM,eAAe,QAAQ,OAAO,EAAE,SAAS,IAAI,CAAC,QAAQ,CAAC;AAE7D,SACE,oBAAC,gBAAa,OAAO,cACnB,8BAAC,sBAAmB,UAAoB,OAAc,MAAM,uBAAuB,MAAM,GAC3F;AAEJ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/SlotProvider.tsx"],"sourcesContent":["import { createContext, ReactNode } from 'react'\n\nexport const PropsContext = createContext<{\n fallback: ReactNode\n}>({\n fallback: null,\n})\n\nexport function SlotProvider({\n value,\n children,\n}: {\n value: { fallback: ReactNode }\n children: ReactNode\n}) {\n return <PropsContext.Provider value={value}>{children}</PropsContext.Provider>\n}\n"],"mappings":"AAeS;AAfT,SAAS,qBAAgC;AAElC,MAAM,eAAe,cAEzB;AAAA,EACD,UAAU;AACZ,CAAC;AAEM,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGG;AACD,SAAO,oBAAC,aAAa,UAAb,EAAsB,OAAe,UAAS;AACxD;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/hooks/use-framework-context.tsx"],"sourcesContent":["import { useContext } from 'react'\n\nimport { FrameworkContext } from '../framework-context'\n\nexport function useFrameworkContext() {\n return useContext(FrameworkContext)\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAE3B,SAAS,wBAAwB;AAE1B,SAAS,sBAAsB;AACpC,SAAO,WAAW,gBAAgB;AACpC;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/hooks/use-page-snippets.ts"],"sourcesContent":["import { useEffect, useMemo, useState, useSyncExternalStore } from 'react'\n\nimport { type MakeswiftPageDocument, type Snippet, SnippetLocation } from '../../../../client'\nimport { type Page as PageType } from '../../../../api'\n\nimport deepEqual from '../../../../utils/deepEqual'\n\nimport { useIsInBuilder } from '../../hooks/use-is-in-builder'\nimport { useMakeswiftHostApiClient } from '../../host-api-client'\n\nconst filterUsedSnippetProperties = ({\n code,\n builderEnabled,\n liveEnabled,\n location,\n cleanup,\n}: Snippet) => ({\n code,\n builderEnabled,\n liveEnabled,\n location,\n cleanup,\n})\n\nexport function usePageSnippets({ page }: { page: MakeswiftPageDocument }) {\n const isInBuilder = useIsInBuilder()\n const [snippets, setSnippets] = useState(page.snippets)\n\n // We're using cached results here for page snippets so that anytime the user\n // changes the snippets or fonts on the builder, the change would be reflected\n // here. See this PR for discussions and things we can do to improve it in the\n // future: https://github.com/makeswift/makeswift/pull/77\n const cachedPage = useCachedPage(isInBuilder ? page.id : null)\n useEffect(() => {\n if (cachedPage == null) return\n\n const oldSnippets = snippets.map(filterUsedSnippetProperties)\n const newSnippets = cachedPage.snippets.map(filterUsedSnippetProperties)\n\n if (deepEqual(newSnippets, oldSnippets)) return\n\n setSnippets(cachedPage.snippets)\n }, [cachedPage])\n\n const filteredSnippets = useMemo(\n () => snippets.filter(snippet => (isInBuilder ? snippet.builderEnabled : snippet.liveEnabled)),\n [snippets, isInBuilder],\n )\n\n const headSnippets = useMemo(\n () => filteredSnippets.filter(snippet => snippet.location === SnippetLocation.Head),\n [filteredSnippets],\n )\n\n const bodySnippets = useMemo(\n () => filteredSnippets.filter(snippet => snippet.location === SnippetLocation.Body),\n [filteredSnippets],\n )\n\n return { headSnippets, bodySnippets }\n}\n\nfunction useCachedPage(pageId: string | null): PageType | null {\n const client = useMakeswiftHostApiClient()\n const getSnapshot = () => (pageId == null ? null : client.readPage(pageId))\n\n const page = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return page\n}\n"],"mappings":"AAAA,SAAS,WAAW,SAAS,UAAU,4BAA4B;AAEnE,SAAmD,uBAAuB;AAG1E,OAAO,eAAe;AAEtB,SAAS,sBAAsB;AAC/B,SAAS,iCAAiC;AAE1C,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,OAAgB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,gBAAgB,EAAE,KAAK,GAAoC;AACzE,QAAM,cAAc,eAAe;AACnC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK,QAAQ;AAMtD,QAAM,aAAa,cAAc,cAAc,KAAK,KAAK,IAAI;AAC7D,YAAU,MAAM;AACd,QAAI,cAAc;AAAM;AAExB,UAAM,cAAc,SAAS,IAAI,2BAA2B;AAC5D,UAAM,cAAc,WAAW,SAAS,IAAI,2BAA2B;AAEvE,QAAI,UAAU,aAAa,WAAW;AAAG;AAEzC,gBAAY,WAAW,QAAQ;AAAA,EACjC,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,mBAAmB;AAAA,IACvB,MAAM,SAAS,OAAO,aAAY,cAAc,QAAQ,iBAAiB,QAAQ,WAAY;AAAA,IAC7F,CAAC,UAAU,WAAW;AAAA,EACxB;AAEA,QAAM,eAAe;AAAA,IACnB,MAAM,iBAAiB,OAAO,aAAW,QAAQ,aAAa,gBAAgB,IAAI;AAAA,IAClF,CAAC,gBAAgB;AAAA,EACnB;AAEA,QAAM,eAAe;AAAA,IACnB,MAAM,iBAAiB,OAAO,aAAW,QAAQ,aAAa,gBAAgB,IAAI;AAAA,IAClF,CAAC,gBAAgB;AAAA,EACnB;AAEA,SAAO,EAAE,cAAc,aAAa;AACtC;AAEA,SAAS,cAAc,QAAwC;AAC7D,QAAM,SAAS,0BAA0B;AACzC,QAAM,cAAc,MAAO,UAAU,OAAO,OAAO,OAAO,SAAS,MAAM;AAEzE,QAAM,OAAO,qBAAqB,OAAO,WAAW,aAAa,WAAW;AAE5E,SAAO;AACT;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/Page.tsx"],"sourcesContent":["import { useMemo, ReactNode } from 'react'\n\nimport { DocumentRoot } from '../DocumentRoot'\nimport { type Document } from '../../../../state/read-only-state'\nimport { MakeswiftPageDocument } from '../../../../client'\nimport { usePageSnippets } from '../hooks/use-page-snippets'\n\nimport { BodySnippet } from './BodySnippet'\nimport { PageHead } from './PageHead'\nimport { flattenMetadataSettings, type PageMetadataSettings } from './page-seo-settings'\n\ntype Props = {\n page: MakeswiftPageDocument\n rootDocument: Document\n metadata?: boolean | PageMetadataSettings\n}\n\nexport function Page({ page, rootDocument, metadata = true }: Props): ReactNode {\n const { bodySnippets } = usePageSnippets({ page })\n const pageMetadataSettings = useMemo(() => flattenMetadataSettings(metadata), [metadata])\n\n return (\n <>\n <PageHead document={page} metadata={pageMetadataSettings} />\n\n <DocumentRoot rootDocument={rootDocument} />\n\n {bodySnippets.map(snippet => (\n <BodySnippet key={snippet.id} code={snippet.code} cleanup={snippet.cleanup} />\n ))}\n </>\n )\n}\n"],"mappings":"AAsBI,mBACE,KADF;AAtBJ,SAAS,eAA0B;AAEnC,SAAS,oBAAoB;AAG7B,SAAS,uBAAuB;AAEhC,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,+BAA0D;AAQ5D,SAAS,KAAK,EAAE,MAAM,cAAc,WAAW,KAAK,GAAqB;AAC9E,QAAM,EAAE,aAAa,IAAI,gBAAgB,EAAE,KAAK,CAAC;AACjD,QAAM,uBAAuB,QAAQ,MAAM,wBAAwB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAExF,SACE,iCACE;AAAA,wBAAC,YAAS,UAAU,MAAM,UAAU,sBAAsB;AAAA,IAE1D,oBAAC,gBAAa,cAA4B;AAAA,IAEzC,aAAa,IAAI,aAChB,oBAAC,eAA6B,MAAM,QAAQ,MAAM,SAAS,QAAQ,WAAjD,QAAQ,EAAkD,CAC7E;AAAA,KACH;AAEJ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/PageHead.tsx"],"sourcesContent":["import { useMemo, useSyncExternalStore, ReactNode } from 'react'\n\nimport { type MakeswiftPageDocument } from '../../../../client'\nimport { type Site } from '../../../../api'\n\nimport { useMakeswiftHostApiClient } from '../../host-api-client'\n\nimport { useFrameworkContext } from '../hooks/use-framework-context'\nimport { useIsInBuilder } from '../../hooks/use-is-in-builder'\nimport { usePageSnippets } from '../hooks/use-page-snippets'\n\nimport { PageTitle, PageMeta, PageLink, PageStyle } from './head-tags'\nimport { type PageMetadataSettings } from './page-seo-settings'\n\nconst defaultFavicon = {\n id: 'default-favicon',\n mimetype: 'image/png',\n publicUrl:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC',\n}\n\ntype Props = {\n document: MakeswiftPageDocument\n metadata?: PageMetadataSettings\n}\n\nexport function PageHead({ document: page, metadata = {} }: Props): ReactNode {\n const {\n title: useTitle = false,\n favicon: useFavicon = false,\n canonicalUrl: useCanonicalUrl = false,\n indexingBlocked: useIndexingBlocked = false,\n description: useDescription = false,\n keywords: useKeywords = false,\n socialImage: useSocialImage = false,\n } = metadata\n\n const { headSnippets } = usePageSnippets({ page })\n const { HeadSnippet } = useFrameworkContext()\n\n const isInBuilder = useIsInBuilder()\n\n const site = useCachedSite(isInBuilder ? page.site.id : null)\n const baseLocalizedPage = page.localizedPages.find(({ parentId }) => parentId == null)\n\n const favicon = page.meta.favicon ?? defaultFavicon\n const title = baseLocalizedPage?.meta.title ?? page.meta.title\n const description = baseLocalizedPage?.meta.description ?? page.meta.description\n const keywords = baseLocalizedPage?.meta.keywords ?? page.meta.keywords\n const socialImage = baseLocalizedPage?.meta.socialImage ?? page.meta.socialImage\n const canonicalUrl = baseLocalizedPage?.seo.canonicalUrl ?? page.seo.canonicalUrl\n const isIndexingBlocked = baseLocalizedPage?.seo.isIndexingBlocked ?? page.seo.isIndexingBlocked\n\n const fontFamilyParamValue = useMemo(() => {\n if (site == null) {\n return page.fonts\n .map(({ family, variants }) => {\n return `${family.replace(/ /g, '+')}:${variants.join()}`\n })\n .join('|')\n }\n\n return site.googleFonts.edges\n .filter((edge): edge is NonNullable<typeof edge> => edge != null)\n .map(({ activeVariants, node: { family, variants } }) => {\n const activeVariantSpecifiers = variants\n .filter(variant =>\n activeVariants.some(activeVariant => activeVariant.specifier === variant.specifier),\n )\n .map(variant => variant.specifier)\n .join()\n\n return `${family.replace(/ /g, '+')}:${activeVariantSpecifiers}`\n })\n .join('|')\n }, [site, page])\n\n return (\n <>\n <PageStyle precedence=\"high\" href=\"makeswift-base-styles\">\n {`\n html {\n font-family: sans-serif;\n }\n div#__next {\n overflow: hidden;\n }\n `}\n </PageStyle>\n {useTitle && title && (\n <>\n <PageTitle>{title}</PageTitle>\n <PageMeta property=\"og:title\" content={title} />\n <PageMeta name=\"twitter:title\" content={title} />\n </>\n )}\n {useFavicon && favicon && (\n <PageLink rel=\"icon\" type={favicon.mimetype} href={favicon.publicUrl} />\n )}\n {useCanonicalUrl && canonicalUrl && <PageLink rel=\"canonical\" href={canonicalUrl} />}\n {useIndexingBlocked && isIndexingBlocked && <PageMeta name=\"robots\" content=\"noindex\" />}\n {useDescription && description && (\n <>\n <PageMeta name=\"description\" content={description} />\n <PageMeta property=\"og:description\" content={description} />\n <PageMeta name=\"twitter:description\" content={description} />\n </>\n )}\n {useKeywords && keywords && <PageMeta name=\"keywords\" content={keywords} />}\n {useSocialImage && socialImage && (\n <>\n <PageMeta property=\"og:image\" content={socialImage.publicUrl} />\n <PageMeta property=\"og:image:type\" content={socialImage.mimetype} />\n <PageMeta name=\"twitter:image\" content={socialImage.publicUrl} />\n <PageMeta name=\"twitter:card\" content=\"summary_large_image\" />\n </>\n )}\n {fontFamilyParamValue !== '' && (\n <PageLink\n precedence=\"medium\"\n rel=\"stylesheet\"\n href={`https://fonts.googleapis.com/css?family=${fontFamilyParamValue}&display=swap`}\n />\n )}\n {headSnippets.map(snippet => (\n <HeadSnippet key={snippet.id} snippet={snippet} />\n ))}\n </>\n )\n}\n\nfunction useCachedSite(siteId: string | null): Site | null {\n const client = useMakeswiftHostApiClient()\n const getSnapshot = () => (siteId == null ? null : client.readSite(siteId))\n\n const site = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n return site\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/page-seo-settings.ts"],"sourcesContent":["export type PageMetadataSettings = {\n title?: boolean\n description?: boolean\n keywords?: boolean\n socialImage?: boolean\n canonicalUrl?: boolean\n indexingBlocked?: boolean\n favicon?: boolean\n}\n\nexport function flattenMetadataSettings(\n settings?: boolean | PageMetadataSettings,\n): PageMetadataSettings {\n if (typeof settings === 'boolean')\n return {\n title: settings,\n description: settings,\n keywords: settings,\n socialImage: settings,\n canonicalUrl: settings,\n indexingBlocked: settings,\n favicon: settings,\n }\n if (settings == null) return {}\n return settings\n}\n"],"mappings":"AAUO,SAAS,wBACd,UACsB;AACtB,MAAI,OAAO,aAAa;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,SAAS;AAAA,IACX;AACF,MAAI,YAAY;AAAM,WAAO,CAAC;AAC9B,SAAO;AACT;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/preview-switcher/preview-switcher.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PageMeta } from '../page/head-tags'\nimport { useIsInBuilder } from '../../hooks/use-is-in-builder'\nimport { PreviewToolbar } from './preview-toolbar'\n\nexport function PreviewSwitcher({ isPreview }: { isPreview: boolean }) {\n const isInBuilder = useIsInBuilder()\n const showToolbar = !isInBuilder && isPreview\n return (\n <>\n {showToolbar && <PreviewToolbarSingleton id=\"makeswift-preview-switcher\" />}\n {/* Insert preview mode information into the DOM to make it easier to debug preview mode-related\n issues on production sites */}\n <PageMeta\n name=\"makeswift-preview-info\"\n content={JSON.stringify({ isPreview: isPreview, inBuilder: isInBuilder })}\n />\n </>\n )\n}\n\nfunction PreviewToolbarSingleton({ id }: { id: string }) {\n const [shadowRoot, setShadowRoot] = useState<ShadowRoot | null>(null)\n const containerRef = useRef<HTMLSpanElement | null>(null)\n\n useEffect(() => {\n if (document.getElementById(id) != null) {\n return\n }\n\n const container = document.createElement('span')\n container.id = id\n document.body.appendChild(container)\n\n containerRef.current = container\n setShadowRoot(container.shadowRoot ?? container.attachShadow({ mode: 'open' }))\n\n return () => {\n containerRef.current?.remove()\n containerRef.current = null\n }\n }, [id])\n\n return shadowRoot != null ? createPortal(<PreviewToolbar />, shadowRoot) : null\n}\n"],"mappings":"AAWI,mBACkB,KADlB;AAXJ,SAAS,WAAW,QAAQ,gBAAgB;AAC5C,SAAS,oBAAoB;AAE7B,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAExB,SAAS,gBAAgB,EAAE,UAAU,GAA2B;AACrE,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,CAAC,eAAe;AACpC,SACE,iCACG;AAAA,mBAAe,oBAAC,2BAAwB,IAAG,8BAA6B;AAAA,IAGzE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,KAAK,UAAU,EAAE,WAAsB,WAAW,YAAY,CAAC;AAAA;AAAA,IAC1E;AAAA,KACF;AAEJ;AAEA,SAAS,wBAAwB,EAAE,GAAG,GAAmB;AACvD,QAAM,CAAC,YAAY,aAAa,IAAI,SAA4B,IAAI;AACpE,QAAM,eAAe,OAA+B,IAAI;AAExD,YAAU,MAAM;AACd,QAAI,SAAS,eAAe,EAAE,KAAK,MAAM;AACvC;AAAA,IACF;AAEA,UAAM,YAAY,SAAS,cAAc,MAAM;AAC/C,cAAU,KAAK;AACf,aAAS,KAAK,YAAY,SAAS;AAEnC,iBAAa,UAAU;AACvB,kBAAc,UAAU,cAAc,UAAU,aAAa,EAAE,MAAM,OAAO,CAAC,CAAC;AAE9E,WAAO,MAAM;AACX,mBAAa,SAAS,OAAO;AAC7B,mBAAa,UAAU;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,EAAE,CAAC;AAEP,SAAO,cAAc,OAAO,aAAa,oBAAC,kBAAe,GAAI,UAAU,IAAI;AAC7E;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/preview-switcher/preview-toolbar.tsx"],"sourcesContent":["import { useMemo } from 'react'\n\nconst makeswiftIcon =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAABcRAAAXEQHKJvM/AAABjElEQVRYhc2XzU3EMBCFB8TddAAXn6EE6GCpgNABZ1/IXnymBOgAOmA7YM8+ABVsXEHQQFaKQryeN3Yk3ilKJtEnv/nLUd/3pFG0riGi88yrnQn+UfJ5FUi0riWiB2H4nQn+KRd0DFP8agXEfkqCYJBoHdtxIQxfm+DfFgEhoith3NYE30o/qgGR2BJB+xY7kdYEL8oNFUi0jiFMJuxVWrJqEMFxsyUNCsE6AeNztvBp7aJ143vXksoRnwhYtmNdSoIQa6RlO9YXEWW7KgoCleOgxgTf1QZBT+RZ2lXFING6UxCCq+ceeUE8fYdknY599v9sJvzGBP+yCEgC7GPmETc0OJ+0awAlkhe2pAbIXAeFZ8xe2g2Nk3c3ub0xwWt6zY9qbmiqGVMbZK21ZC/YmhlbeBMTzZNDQqcvDb1kM1x32iqZSt1HaqukfKvq34BAOTLsrH+ETNmUkKHHA+428RgeclPVWozeSyAI2EdWB34jtqXNTAySOY3i/KgFIlqOa4GkFmBegorzg4joG07he/M7zl6jAAAAAElFTkSuQmCC'\n\nconst styles = `\n.exit-preview-container {\n position: fixed;\n bottom: 16px;\n right: 16px;\n z-index: 2147483647;\n}\n\n.exit-preview-button {\n background: #2e2e2e;\n padding: 10px 18px 10px 14px;\n border: 0px;\n border-radius: 32px;\n color: #efefef;\n box-shadow:\n 0 11px 40px 0 rgba(0, 0, 0, 0.25),\n 0 2px 10px 0 rgba(0, 0, 0, 0.12);\n transition: 150ms;\n text-decoration: none;\n\n font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji',\n 'Segoe UI Emoji';\n font-size: 14px;\n cursor: pointer;\n\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.exit-preview-button > .label {\n transform: translateY(-1px);\n}\n\n.exit-preview-container:hover > .exit-preview-button {\n transform: translateY(-2px);\n box-shadow:\n 0 15px 40px 0 rgba(0, 0, 0, 0.3),\n 0 6px 10px 0 rgba(0, 0, 0, 0.15);\n}\n`\n\nexport function PreviewToolbar() {\n const redirectLiveUrl = useMemo(() => {\n const currentUrl = new URL(window.location.href)\n const destination = `${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`\n currentUrl.searchParams.set('makeswift-redirect-live', encodeURIComponent(destination))\n return currentUrl.toString()\n }, [])\n\n return (\n <>\n <style dangerouslySetInnerHTML={{ __html: styles }} />\n <div className=\"exit-preview-container\">\n <a className=\"exit-preview-button\" href={redirectLiveUrl}>\n <img src={makeswiftIcon} alt=\"Makeswift Logo\" width={18} height={18} />\n <span className=\"label\">Exit preview</span>\n </a>\n </div>\n </>\n )\n}\n"],"mappings":"AAwDI,mBACE,KAEE,YAHJ;AAxDJ,SAAS,eAAe;AAExB,MAAM,gBACJ;AAEF,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CR,SAAS,iBAAiB;AAC/B,QAAM,kBAAkB,QAAQ,MAAM;AACpC,UAAM,aAAa,IAAI,IAAI,OAAO,SAAS,IAAI;AAC/C,UAAM,cAAc,GAAG,WAAW,QAAQ,GAAG,WAAW,MAAM,GAAG,WAAW,IAAI;AAChF,eAAW,aAAa,IAAI,2BAA2B,mBAAmB,WAAW,CAAC;AACtF,WAAO,WAAW,SAAS;AAAA,EAC7B,GAAG,CAAC,CAAC;AAEL,SACE,iCACE;AAAA,wBAAC,WAAM,yBAAyB,EAAE,QAAQ,OAAO,GAAG;AAAA,IACpD,oBAAC,SAAI,WAAU,0BACb,+BAAC,OAAE,WAAU,uBAAsB,MAAM,iBACvC;AAAA,0BAAC,SAAI,KAAK,eAAe,KAAI,kBAAiB,OAAO,IAAI,QAAQ,IAAI;AAAA,MACrE,oBAAC,UAAK,WAAU,SAAQ,0BAAY;AAAA,OACtC,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/components/render-hook.ts"],"sourcesContent":["import { ReactNode } from 'react'\n\ntype Props<H extends (...args: any[]) => any> = {\n /**\n * `<RenderHook>` requires key that changes whenever the `hook` prop changes to ensure the rules of\n * hooks are followed.\n */\n key: string\n\n hook: H\n parameters: Parameters<H>\n children(result: ReturnType<H>): ReactNode\n}\n\nexport function RenderHook<H extends (...args: any[]) => any>({\n hook: useHook,\n parameters,\n children,\n}: Props<H>) {\n return children(useHook(...parameters))\n}\n"],"mappings":"AAcO,SAAS,WAA8C;AAAA,EAC5D,MAAM;AAAA,EACN;AAAA,EACA;AACF,GAAa;AACX,SAAO,SAAS,QAAQ,GAAG,UAAU,CAAC;AACxC;","names":[]}
@@ -0,0 +1,39 @@
1
+ import { ReactEditor } from "slate-react";
2
+ import { Range as SlateRange } from "slate";
3
+ import { useIsomorphicLayoutEffect } from "../../../../../components/hooks/useIsomorphicLayoutEffect";
4
+ function useSyncDOMSelection(editor, isEnabled) {
5
+ useIsomorphicLayoutEffect(() => {
6
+ if (!isEnabled || editor.selection == null || ReactEditor.isFocused(editor))
7
+ return;
8
+ try {
9
+ const root = ReactEditor.findDocumentOrShadowRoot(editor);
10
+ const domSelection = root.getSelection();
11
+ const newDomRange = ReactEditor.toDOMRange(editor, editor.selection);
12
+ if (newDomRange) {
13
+ if (SlateRange.isBackward(editor.selection)) {
14
+ domSelection?.setBaseAndExtent(
15
+ newDomRange.endContainer,
16
+ newDomRange.endOffset,
17
+ newDomRange.startContainer,
18
+ newDomRange.startOffset
19
+ );
20
+ } else {
21
+ domSelection?.setBaseAndExtent(
22
+ newDomRange.startContainer,
23
+ newDomRange.startOffset,
24
+ newDomRange.endContainer,
25
+ newDomRange.endOffset
26
+ );
27
+ }
28
+ } else {
29
+ domSelection?.removeAllRanges();
30
+ }
31
+ } catch (e) {
32
+ console.error(e);
33
+ }
34
+ });
35
+ }
36
+ export {
37
+ useSyncDOMSelection
38
+ };
39
+ //# sourceMappingURL=useSyncDOMSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text/EditableText/useSyncDOMSelection.tsx"],"sourcesContent":["import { ReactEditor } from 'slate-react'\nimport { Editor, Range as SlateRange } from 'slate'\nimport { useIsomorphicLayoutEffect } from '../../../../../components/hooks/useIsomorphicLayoutEffect'\n\n/**\n * Clicking outside of the host blurs our `<Editable />`.\n * `<Editable />` only updates the DOM's selection to match slate when it is focused.\n * In the case of a panel being clicked this hook updates the DOM selection to match slate.\n */\nexport function useSyncDOMSelection(editor: Editor, isEnabled: boolean) {\n useIsomorphicLayoutEffect(() => {\n if (!isEnabled || editor.selection == null || ReactEditor.isFocused(editor)) return\n try {\n const root = ReactEditor.findDocumentOrShadowRoot(editor) as Document\n const domSelection = root.getSelection()\n const newDomRange: Range | null = ReactEditor.toDOMRange(editor, editor.selection)\n\n if (newDomRange) {\n if (SlateRange.isBackward(editor.selection!)) {\n domSelection?.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset,\n )\n } else {\n domSelection?.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset,\n )\n }\n } else {\n domSelection?.removeAllRanges()\n }\n } catch (e) {\n console.error(e)\n }\n })\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAiB,SAAS,kBAAkB;AAC5C,SAAS,iCAAiC;AAOnC,SAAS,oBAAoB,QAAgB,WAAoB;AACtE,4BAA0B,MAAM;AAC9B,QAAI,CAAC,aAAa,OAAO,aAAa,QAAQ,YAAY,UAAU,MAAM;AAAG;AAC7E,QAAI;AACF,YAAM,OAAO,YAAY,yBAAyB,MAAM;AACxD,YAAM,eAAe,KAAK,aAAa;AACvC,YAAM,cAA4B,YAAY,WAAW,QAAQ,OAAO,SAAS;AAEjF,UAAI,aAAa;AACf,YAAI,WAAW,WAAW,OAAO,SAAU,GAAG;AAC5C,wBAAc;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,UACd;AAAA,QACF,OAAO;AACL,wBAAc;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF,OAAO;AACL,sBAAc,gBAAgB;AAAA,MAChC;AAAA,IACF,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AAAA,IACjB;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,35 @@
1
+ import { useState, useEffect, useCallback } from "react";
2
+ import { richTextDTOtoDAO, richTextDTOtoSelection } from "@makeswift/controls";
3
+ import { useIsInBuilder } from "../../../hooks/use-is-in-builder";
4
+ import deepEqual from "../../../../../utils/deepEqual";
5
+ const COMMIT_DEBOUNCE_DELAY = 500;
6
+ function useSyncWithBuilder(editor, text) {
7
+ const [shouldCommit, setShouldCommit] = useState(true);
8
+ const isInBuilder = useIsInBuilder();
9
+ useEffect(() => {
10
+ if (shouldCommit && text && isInBuilder) {
11
+ const nextValue = richTextDTOtoDAO(text);
12
+ const nextSelection = richTextDTOtoSelection(text);
13
+ if (!deepEqual(editor.children, nextValue) || !deepEqual(editor.selection, nextSelection)) {
14
+ editor.children = nextValue;
15
+ editor.selection = nextSelection;
16
+ editor.onChange();
17
+ }
18
+ }
19
+ }, [editor, shouldCommit, text]);
20
+ useEffect(() => {
21
+ if (shouldCommit)
22
+ return;
23
+ const timeoutId = window.setTimeout(() => {
24
+ setShouldCommit(true);
25
+ }, COMMIT_DEBOUNCE_DELAY);
26
+ return () => {
27
+ window.clearTimeout(timeoutId);
28
+ };
29
+ }, [shouldCommit]);
30
+ return useCallback(() => setShouldCommit(false), []);
31
+ }
32
+ export {
33
+ useSyncWithBuilder
34
+ };
35
+ //# sourceMappingURL=useSyncWithBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react'\nimport { Editor } from 'slate'\nimport { type RichTextDTO, richTextDTOtoDAO, richTextDTOtoSelection } from '@makeswift/controls'\n\nimport { useIsInBuilder } from '../../../hooks/use-is-in-builder'\nimport deepEqual from '../../../../../utils/deepEqual'\n\nconst COMMIT_DEBOUNCE_DELAY = 500\n\n/**\n * Compare new prop value with current editor and update editor\n * if the values are not equal.\n */\nexport function useSyncWithBuilder(editor: Editor, text?: RichTextDTO) {\n const [shouldCommit, setShouldCommit] = useState(true)\n const isInBuilder = useIsInBuilder()\n\n useEffect(() => {\n if (shouldCommit && text && isInBuilder) {\n const nextValue = richTextDTOtoDAO(text)\n const nextSelection = richTextDTOtoSelection(text)\n if (!deepEqual(editor.children, nextValue) || !deepEqual(editor.selection, nextSelection)) {\n editor.children = nextValue\n editor.selection = nextSelection\n editor.onChange()\n }\n }\n }, [editor, shouldCommit, text])\n\n useEffect(() => {\n if (shouldCommit) return\n\n const timeoutId = window.setTimeout(() => {\n setShouldCommit(true)\n }, COMMIT_DEBOUNCE_DELAY)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [shouldCommit])\n\n return useCallback(() => setShouldCommit(false), [])\n}\n"],"mappings":"AAAA,SAAS,UAAU,WAAW,mBAAmB;AAEjD,SAA2B,kBAAkB,8BAA8B;AAE3E,SAAS,sBAAsB;AAC/B,OAAO,eAAe;AAEtB,MAAM,wBAAwB;AAMvB,SAAS,mBAAmB,QAAgB,MAAoB;AACrE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,IAAI;AACrD,QAAM,cAAc,eAAe;AAEnC,YAAU,MAAM;AACd,QAAI,gBAAgB,QAAQ,aAAa;AACvC,YAAM,YAAY,iBAAiB,IAAI;AACvC,YAAM,gBAAgB,uBAAuB,IAAI;AACjD,UAAI,CAAC,UAAU,OAAO,UAAU,SAAS,KAAK,CAAC,UAAU,OAAO,WAAW,aAAa,GAAG;AACzF,eAAO,WAAW;AAClB,eAAO,YAAY;AACnB,eAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,cAAc,IAAI,CAAC;AAE/B,YAAU,MAAM;AACd,QAAI;AAAc;AAElB,UAAM,YAAY,OAAO,WAAW,MAAM;AACxC,sBAAgB,IAAI;AAAA,IACtB,GAAG,qBAAqB;AAExB,WAAO,MAAM;AACX,aAAO,aAAa,SAAS;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAO,YAAY,MAAM,gBAAgB,KAAK,GAAG,CAAC,CAAC;AACrD;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text/ReadOnlyText.tsx"],"sourcesContent":["import { cx } from '@emotion/css'\nimport { ForwardedRef, forwardRef } from 'react'\nimport { Descendant, Text } from 'slate'\n\nimport { Slate, RichTextValue, richTextDTOtoDAO } from '@makeswift/controls'\n\nimport { useResponsiveStyle } from '../../../../components/utils/responsive-style'\nimport { InlineType, BlockType } from '../../../../slate/types'\nimport { useStyle } from '../../use-style'\nimport useEnhancedTypography, { useTypographyClassName } from '../typography'\nimport { Link } from '../../../../components/shared/Link'\n\ntype Props = {\n id?: string\n text?: RichTextValue\n width?: string\n margin?: string\n}\n\nconst ReadOnlyText = forwardRef(function ReadOnlyText(\n { id, text, width, margin }: Props,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const descendants = text == null ? [] : richTextDTOtoDAO(text)\n const descendantsAsString = getText(descendants)\n\n return (\n <div\n ref={ref}\n id={id}\n style={{\n /**\n * These are the default styles that Slate uses for its editable div.\n * https://github.com/ianstormtaylor/slate/blob/4bd15ed3950e3a0871f5d0ecb391bb637c05e59d/packages/slate-react/src/components/editable.tsx\n * Search for `disableDefaultStyles`\n */\n position: 'relative',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n }}\n className={cx(width, margin)}\n >\n {descendantsAsString === '' ? <Placeholder /> : <Descendants descendants={descendants} />}\n </div>\n )\n})\n\nexport default ReadOnlyText\n\nfunction Placeholder({ text = 'Write some text...' }: { text?: string }) {\n return (\n <span\n className={useStyle({\n display: 'inline-block',\n width: 0,\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: 0.333,\n verticalAlign: 'text-top',\n })}\n >\n {text}\n </span>\n )\n}\n\nexport interface TextProps {\n descendant: Text\n}\n\nexport function TextElement({ descendant }: TextProps) {\n const enhancedTypography = useEnhancedTypography(descendant.typography)\n const typographyClassName = useTypographyClassName(enhancedTypography)\n\n return (\n <span className={typographyClassName}>\n {descendant.text === '' ? '\\uFEFF' : descendant.text}\n </span>\n )\n}\n\nexport interface InlineProps {\n descendant: Slate.Inline\n}\n\nfunction InlineElement({ descendant }: InlineProps) {\n const linkClassName = useStyle({ textDecoration: 'none' })\n\n switch (descendant.type) {\n case InlineType.Code:\n return (\n <code>\n <Descendants descendants={descendant.children} />\n </code>\n )\n\n case InlineType.SuperScript:\n return (\n <sup>\n <Descendants descendants={descendant.children} />\n </sup>\n )\n\n case InlineType.SubScript:\n return (\n <sub>\n <Descendants descendants={descendant.children} />\n </sub>\n )\n\n case InlineType.Link:\n return (\n <Link className={linkClassName} link={descendant.link ?? undefined}>\n <Descendants descendants={descendant.children} />\n </Link>\n )\n }\n}\n\nexport interface BlockProps {\n descendant: Slate.Block\n}\n\nexport function BlockElement({ descendant }: BlockProps) {\n const blockStyles = [\n useStyle({ margin: 0 }),\n useStyle(useResponsiveStyle([descendant.textAlign], ([textAlign = 'left']) => ({ textAlign }))),\n ]\n const quoteStyle = useStyle({\n padding: '0.5em 10px',\n fontSize: '1.25em',\n fontWeight: '300',\n borderLeft: '5px solid rgba(0, 0, 0, 0.1)',\n })\n\n switch (descendant.type) {\n case BlockType.Default:\n case BlockType.Paragraph:\n return (\n <p className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </p>\n )\n case BlockType.Heading1:\n return (\n <h1 className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </h1>\n )\n case BlockType.Heading2:\n return (\n <h2 className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </h2>\n )\n case BlockType.Heading3:\n return (\n <h3 className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </h3>\n )\n case BlockType.Heading4:\n return (\n <h4 className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </h4>\n )\n case BlockType.Heading5:\n return (\n <h5 className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </h5>\n )\n case BlockType.Heading6:\n return (\n <h6 className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </h6>\n )\n case BlockType.BlockQuote:\n return (\n <blockquote className={cx(...blockStyles, quoteStyle)}>\n <Descendants descendants={descendant.children} />\n </blockquote>\n )\n case BlockType.OrderedList:\n return (\n <ol className={cx(...blockStyles)} style={{ listStylePosition: 'inside' }}>\n <Descendants descendants={descendant.children} />\n </ol>\n )\n case BlockType.UnorderedList:\n return (\n <ul className={cx(...blockStyles)} style={{ listStylePosition: 'inside' }}>\n <Descendants descendants={descendant.children} />\n </ul>\n )\n case BlockType.ListItem:\n return (\n <li className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </li>\n )\n case BlockType.ListItemChild:\n return (\n <span className={cx(...blockStyles)}>\n <Descendants descendants={descendant.children} />\n </span>\n )\n default:\n return null\n }\n}\n\nfunction Descendants({ descendants }: { descendants: Descendant[] }) {\n return (\n <>\n {descendants.map((descendant, index) => {\n if (Slate.isText(descendant)) {\n return <TextElement key={index} descendant={descendant} />\n }\n\n switch (descendant.type) {\n case InlineType.Link:\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return <InlineElement key={index} descendant={descendant} />\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.Heading4:\n case BlockType.Heading5:\n case BlockType.Heading6:\n case BlockType.BlockQuote:\n case BlockType.Paragraph:\n case BlockType.Default:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return <BlockElement key={index} descendant={descendant} />\n default:\n return null\n }\n })}\n </>\n )\n}\n\nfunction isBlock(descendant: Descendant): descendant is Slate.Block {\n if ('text' in descendant) return false\n\n switch (descendant.type) {\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.Heading4:\n case BlockType.Heading5:\n case BlockType.Heading6:\n case BlockType.BlockQuote:\n case BlockType.Paragraph:\n case BlockType.Default:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return true\n\n default:\n return false\n }\n}\n\nfunction getTextByDescendant(descendant: Descendant): string {\n if ('text' in descendant) {\n return descendant.text ?? ''\n }\n\n switch (descendant.type) {\n case InlineType.Link:\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return descendant.children.map(descendant => getTextByDescendant(descendant)).join('') ?? ''\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.Heading4:\n case BlockType.Heading5:\n case BlockType.Heading6:\n case BlockType.BlockQuote:\n case BlockType.Paragraph:\n case BlockType.Default:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return (\n descendant.children\n .map(descendant => getTextByDescendant(descendant))\n .join(descendant.children.every(isBlock) ? '\\n' : '') ?? ''\n )\n default:\n return ''\n }\n}\n\nfunction getText(descendant: Descendant[]): string {\n return descendant.map(getTextByDescendant).join('\\n')\n}\n"],"mappings":"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","names":["ReadOnlyText","descendant"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/controls/rich-text/rich-text.tsx"],"sourcesContent":["import { ReactNode, lazy, useCallback } from 'react'\n\nimport { type DataType } from '@makeswift/controls'\nimport { RichTextV1Control, RichTextV1Definition } from '../../../../controls/rich-text'\n\nimport {\n isPropControllersHandle,\n PropControllersHandle,\n} from '../../../../state/modules/prop-controller-handles'\n\nimport { useIsReadOnly } from '../../hooks/use-is-read-only'\n\nconst EditableText = lazy(() => import('./EditableText'))\nconst ReadOnlyText = lazy(() => import('./ReadOnlyText'))\n\nexport type RichTextControlValue = ReactNode\n\nexport type Descriptors = { text?: RichTextV1Definition }\n\nexport function renderRichText(\n data: DataType<RichTextV1Definition> | undefined,\n control: RichTextV1Control | null,\n) {\n return <RichText data={data} control={control} />\n}\n\nfunction RichText({\n data,\n control,\n}: {\n data: DataType<RichTextV1Definition> | undefined\n control: RichTextV1Control | null\n}) {\n const textCallbackRef = useCallback(\n (handle: PropControllersHandle<Descriptors> | HTMLDivElement | null) => {\n if (isPropControllersHandle(handle))\n handle?.setPropControllers?.(control == null ? null : { text: control })\n },\n [control],\n )\n\n return useIsReadOnly() ? (\n <ReadOnlyText text={data} ref={textCallbackRef} />\n ) : (\n <EditableText text={data} ref={textCallbackRef} />\n )\n}\n"],"mappings":"AAuBS;AAvBT,SAAoB,MAAM,mBAAmB;AAK7C;AAAA,EACE;AAAA,OAEK;AAEP,SAAS,qBAAqB;AAE9B,MAAM,eAAe,KAAK,MAAM,OAAO,gBAAgB,CAAC;AACxD,MAAM,eAAe,KAAK,MAAM,OAAO,gBAAgB,CAAC;AAMjD,SAAS,eACd,MACA,SACA;AACA,SAAO,oBAAC,YAAS,MAAY,SAAkB;AACjD;AAEA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA;AACF,GAGG;AACD,QAAM,kBAAkB;AAAA,IACtB,CAAC,WAAuE;AACtE,UAAI,wBAAwB,MAAM;AAChC,gBAAQ,qBAAqB,WAAW,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC;AAAA,IAC3E;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,SAAO,cAAc,IACnB,oBAAC,gBAAa,MAAM,MAAM,KAAK,iBAAiB,IAEhD,oBAAC,gBAAa,MAAM,MAAM,KAAK,iBAAiB;AAEpD;","names":[]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.tsx"],"sourcesContent":["import { RenderElementProps } from 'slate-react'\n\nimport { RichTextV2Definition } from '../../../../../controls/rich-text-v2'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\nimport { ControlValue } from '../../control'\n\ntype RichTextV2ElementProps = RenderElementProps & {\n definition: RichTextV2Definition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Element({ definition, plugins, ...props }: RichTextV2ElementProps) {\n function initialRenderElement(props: RenderElementProps) {\n return props.children\n }\n\n const renderElement = plugins.reduce(\n (renderFn, plugin) => (props: RenderElementProps) => {\n const { control, renderElement } = plugin\n\n if (renderElement == null) return renderFn(props)\n\n if (control == null || control.getElementValue == null)\n return renderElement(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getElementValue(props.element)}>\n {value => renderElement(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderElement,\n )\n\n return renderElement(props)\n}\n"],"mappings":"AA2BQ;AAtBR,SAAS,oBAAoB;AAOtB,SAAS,kBAAkB,EAAE,YAAY,SAAS,GAAG,MAAM,GAA2B;AAC3F,WAAS,qBAAqBA,QAA2B;AACvD,WAAOA,OAAM;AAAA,EACf;AAEA,QAAM,gBAAgB,QAAQ;AAAA,IAC5B,CAAC,UAAU,WAAW,CAACA,WAA8B;AACnD,YAAM,EAAE,SAAS,eAAAC,eAAc,IAAI;AAEnC,UAAIA,kBAAiB;AAAM,eAAO,SAASD,MAAK;AAEhD,UAAI,WAAW,QAAQ,QAAQ,mBAAmB;AAChD,eAAOC,eAAc,UAAU,MAAS,EAAED,MAAK;AAEjD,aACE,oBAAC,gBAAa,YAAY,QAAQ,YAAY,MAAM,QAAQ,gBAAgBA,OAAM,OAAO,GACtF,qBAASC,eAAc,UAAU,KAAK,EAAED,MAAK,GAChD;AAAA,IAEJ;AAAA,IACA;AAAA,EACF;AAEA,SAAO,cAAc,KAAK;AAC5B;","names":["props","renderElement"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.tsx"],"sourcesContent":["import { ReactNode } from 'react'\nimport { RenderLeafProps } from 'slate-react'\nimport { RichTextV2Definition } from '../../../../../controls/rich-text-v2'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\nimport { ControlValue } from '../../control'\n\ntype RichTextV2LeafProps = RenderLeafProps & {\n definition: RichTextV2Definition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Leaf({ definition, plugins, ...props }: RichTextV2LeafProps) {\n function initialRenderLeaf({ attributes, children, leaf }: RenderLeafProps): ReactNode {\n return (\n <span className={leaf.className} {...attributes}>\n {children}\n </span>\n )\n }\n\n const renderLeaf = plugins.reduce(\n (renderFn, plugin) => (props: RenderLeafProps) => {\n const { control, renderLeaf } = plugin\n\n if (control?.definition == null || renderLeaf == null) return renderFn(props)\n\n if (control.getLeafValue == null) return renderLeaf(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getLeafValue(props.leaf)}>\n {value => renderLeaf(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderLeaf,\n )\n\n return renderLeaf(props)\n}\n"],"mappings":"AAcM;AAVN,SAAS,oBAAoB;AAOtB,SAAS,eAAe,EAAE,YAAY,SAAS,GAAG,MAAM,GAAwB;AACrF,WAAS,kBAAkB,EAAE,YAAY,UAAU,KAAK,GAA+B;AACrF,WACE,oBAAC,UAAK,WAAW,KAAK,WAAY,GAAG,YAClC,UACH;AAAA,EAEJ;AAEA,QAAM,aAAa,QAAQ;AAAA,IACzB,CAAC,UAAU,WAAW,CAACA,WAA2B;AAChD,YAAM,EAAE,SAAS,YAAAC,YAAW,IAAI;AAEhC,UAAI,SAAS,cAAc,QAAQA,eAAc;AAAM,eAAO,SAASD,MAAK;AAE5E,UAAI,QAAQ,gBAAgB;AAAM,eAAOC,YAAW,UAAU,MAAS,EAAED,MAAK;AAE9E,aACE,oBAAC,gBAAa,YAAY,QAAQ,YAAY,MAAM,QAAQ,aAAaA,OAAM,IAAI,GAChF,qBAASC,YAAW,UAAU,KAAK,EAAED,MAAK,GAC7C;AAAA,IAEJ;AAAA,IACA;AAAA,EACF;AAEA,SAAO,WAAW,KAAK;AACzB;","names":["props","renderLeaf"]}