@makeswift/runtime 0.28.3-canary.3 → 0.28.3-canary.5

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 (157) hide show
  1. package/dist/cjs/api/client.js +2 -4
  2. package/dist/cjs/api/client.js.map +1 -1
  3. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  4. package/dist/cjs/builder/core/index.js.map +1 -1
  5. package/dist/cjs/client/index.js +15 -18
  6. package/dist/cjs/client/index.js.map +1 -1
  7. package/dist/cjs/components/builtin/Box/Box.js +2 -1
  8. package/dist/cjs/components/builtin/Box/Box.js.map +1 -1
  9. package/dist/cjs/controls/rich-text/control.js.map +1 -1
  10. package/dist/cjs/controls/rich-text-v2/control.js.map +1 -1
  11. package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js +1 -1
  12. package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js.map +1 -1
  13. package/dist/cjs/prop-controllers/instances.js.map +1 -1
  14. package/dist/cjs/runtimes/react/components/RuntimeProvider.js +11 -7
  15. package/dist/cjs/runtimes/react/components/RuntimeProvider.js.map +1 -1
  16. package/dist/cjs/runtimes/react/element-imperative-handle.js.map +1 -1
  17. package/dist/cjs/runtimes/react/hooks/use-store.js +9 -2
  18. package/dist/cjs/runtimes/react/hooks/use-store.js.map +1 -1
  19. package/dist/cjs/runtimes/react/hooks/use-stylesheet-factory.js.map +1 -1
  20. package/dist/cjs/runtimes/react/host-api-client.js +2 -2
  21. package/dist/cjs/runtimes/react/host-api-client.js.map +1 -1
  22. package/dist/cjs/runtimes/react/poll-box-model.js.map +1 -1
  23. package/dist/cjs/runtimes/react/react-runtime-core.js +2 -2
  24. package/dist/cjs/runtimes/react/react-runtime-core.js.map +1 -1
  25. package/dist/cjs/runtimes/react/react-runtime.js.map +1 -1
  26. package/dist/cjs/runtimes/react/runtime-core.js +62 -26
  27. package/dist/cjs/runtimes/react/runtime-core.js.map +1 -1
  28. package/dist/cjs/state/actions/internal/read-only-actions.js +1 -15
  29. package/dist/cjs/state/actions/internal/read-only-actions.js.map +1 -1
  30. package/dist/cjs/state/builder-api/actions.js.map +1 -1
  31. package/dist/cjs/state/makeswift-api-client.js +3 -27
  32. package/dist/cjs/state/makeswift-api-client.js.map +1 -1
  33. package/dist/cjs/state/middleware/read-write/builder-api/index.js +8 -2
  34. package/dist/cjs/state/middleware/read-write/builder-api/index.js.map +1 -1
  35. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js +6 -8
  36. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -1
  37. package/dist/cjs/state/modules/locale.js +0 -3
  38. package/dist/cjs/state/modules/locale.js.map +1 -1
  39. package/dist/cjs/state/modules/read-write/box-models.js +17 -2
  40. package/dist/cjs/state/modules/read-write/box-models.js.map +1 -1
  41. package/dist/cjs/state/modules/site-version.js +0 -3
  42. package/dist/cjs/state/modules/site-version.js.map +1 -1
  43. package/dist/cjs/state/read-only-state.js +8 -1
  44. package/dist/cjs/state/read-only-state.js.map +1 -1
  45. package/dist/cjs/state/read-write-state.js.map +1 -1
  46. package/dist/cjs/state/store.js +75 -48
  47. package/dist/cjs/state/store.js.map +1 -1
  48. package/dist/cjs/unstable-framework-support/index.js.map +1 -1
  49. package/dist/cjs/utils/ref-counted-map.js +111 -0
  50. package/dist/cjs/utils/ref-counted-map.js.map +1 -0
  51. package/dist/esm/api/client.js +2 -4
  52. package/dist/esm/api/client.js.map +1 -1
  53. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  54. package/dist/esm/builder/core/index.js.map +1 -1
  55. package/dist/esm/client/index.js +15 -18
  56. package/dist/esm/client/index.js.map +1 -1
  57. package/dist/esm/components/builtin/Box/Box.js +7 -2
  58. package/dist/esm/components/builtin/Box/Box.js.map +1 -1
  59. package/dist/esm/controls/rich-text/control.js.map +1 -1
  60. package/dist/esm/controls/rich-text-v2/control.js.map +1 -1
  61. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js +1 -1
  62. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js.map +1 -1
  63. package/dist/esm/prop-controllers/instances.js.map +1 -1
  64. package/dist/esm/runtimes/react/components/RuntimeProvider.js +12 -8
  65. package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -1
  66. package/dist/esm/runtimes/react/element-imperative-handle.js.map +1 -1
  67. package/dist/esm/runtimes/react/hooks/use-store.js +8 -2
  68. package/dist/esm/runtimes/react/hooks/use-store.js.map +1 -1
  69. package/dist/esm/runtimes/react/hooks/use-stylesheet-factory.js.map +1 -1
  70. package/dist/esm/runtimes/react/host-api-client.js +2 -2
  71. package/dist/esm/runtimes/react/host-api-client.js.map +1 -1
  72. package/dist/esm/runtimes/react/poll-box-model.js.map +1 -1
  73. package/dist/esm/runtimes/react/react-runtime-core.js +2 -2
  74. package/dist/esm/runtimes/react/react-runtime-core.js.map +1 -1
  75. package/dist/esm/runtimes/react/react-runtime.js.map +1 -1
  76. package/dist/esm/runtimes/react/runtime-core.js +65 -30
  77. package/dist/esm/runtimes/react/runtime-core.js.map +1 -1
  78. package/dist/esm/state/actions/internal/read-only-actions.js +1 -13
  79. package/dist/esm/state/actions/internal/read-only-actions.js.map +1 -1
  80. package/dist/esm/state/builder-api/actions.js.map +1 -1
  81. package/dist/esm/state/makeswift-api-client.js +4 -28
  82. package/dist/esm/state/makeswift-api-client.js.map +1 -1
  83. package/dist/esm/state/middleware/read-write/builder-api/index.js +8 -2
  84. package/dist/esm/state/middleware/read-write/builder-api/index.js.map +1 -1
  85. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js +6 -8
  86. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -1
  87. package/dist/esm/state/modules/locale.js +0 -3
  88. package/dist/esm/state/modules/locale.js.map +1 -1
  89. package/dist/esm/state/modules/read-write/box-models.js +16 -2
  90. package/dist/esm/state/modules/read-write/box-models.js.map +1 -1
  91. package/dist/esm/state/modules/site-version.js +0 -3
  92. package/dist/esm/state/modules/site-version.js.map +1 -1
  93. package/dist/esm/state/read-only-state.js +7 -1
  94. package/dist/esm/state/read-only-state.js.map +1 -1
  95. package/dist/esm/state/read-write-state.js.map +1 -1
  96. package/dist/esm/state/store.js +74 -47
  97. package/dist/esm/state/store.js.map +1 -1
  98. package/dist/esm/unstable-framework-support/index.js.map +1 -1
  99. package/dist/esm/utils/ref-counted-map.js +87 -0
  100. package/dist/esm/utils/ref-counted-map.js.map +1 -0
  101. package/dist/types/api/client.d.ts +2 -2
  102. package/dist/types/api/client.d.ts.map +1 -1
  103. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +6 -6
  104. package/dist/types/api-handler/handlers/webhook/types.d.ts +20 -20
  105. package/dist/types/builder/core/index.d.ts +1 -1
  106. package/dist/types/builder/core/index.d.ts.map +1 -1
  107. package/dist/types/client/index.d.ts +1 -0
  108. package/dist/types/client/index.d.ts.map +1 -1
  109. package/dist/types/components/builtin/Box/Box.d.ts.map +1 -1
  110. package/dist/types/controls/rich-text/control.d.ts +3 -3
  111. package/dist/types/controls/rich-text/control.d.ts.map +1 -1
  112. package/dist/types/controls/rich-text-v2/control.d.ts +3 -3
  113. package/dist/types/controls/rich-text-v2/control.d.ts.map +1 -1
  114. package/dist/types/prop-controllers/instances.d.ts +5 -6
  115. package/dist/types/prop-controllers/instances.d.ts.map +1 -1
  116. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts.map +1 -1
  117. package/dist/types/runtimes/react/element-imperative-handle.d.ts +2 -3
  118. package/dist/types/runtimes/react/element-imperative-handle.d.ts.map +1 -1
  119. package/dist/types/runtimes/react/hooks/use-store.d.ts +29 -0
  120. package/dist/types/runtimes/react/hooks/use-store.d.ts.map +1 -1
  121. package/dist/types/runtimes/react/poll-box-model.d.ts +2 -2
  122. package/dist/types/runtimes/react/poll-box-model.d.ts.map +1 -1
  123. package/dist/types/runtimes/react/react-runtime.d.ts +1 -0
  124. package/dist/types/runtimes/react/react-runtime.d.ts.map +1 -1
  125. package/dist/types/runtimes/react/runtime-core.d.ts +15 -13
  126. package/dist/types/runtimes/react/runtime-core.d.ts.map +1 -1
  127. package/dist/types/state/__tests__/test-store.d.ts +4 -2
  128. package/dist/types/state/__tests__/test-store.d.ts.map +1 -1
  129. package/dist/types/state/actions/index.d.ts +0 -2
  130. package/dist/types/state/actions/index.d.ts.map +1 -1
  131. package/dist/types/state/actions/internal/index.d.ts +0 -2
  132. package/dist/types/state/actions/internal/index.d.ts.map +1 -1
  133. package/dist/types/state/actions/internal/read-only-actions.d.ts +1 -13
  134. package/dist/types/state/actions/internal/read-only-actions.d.ts.map +1 -1
  135. package/dist/types/state/builder-api/actions.d.ts +3 -3
  136. package/dist/types/state/builder-api/actions.d.ts.map +1 -1
  137. package/dist/types/state/makeswift-api-client.d.ts +2 -2
  138. package/dist/types/state/makeswift-api-client.d.ts.map +1 -1
  139. package/dist/types/state/middleware/read-write/builder-api/index.d.ts.map +1 -1
  140. package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts.map +1 -1
  141. package/dist/types/state/modules/locale.d.ts.map +1 -1
  142. package/dist/types/state/modules/read-write/box-models.d.ts +12 -9
  143. package/dist/types/state/modules/read-write/box-models.d.ts.map +1 -1
  144. package/dist/types/state/modules/site-version.d.ts.map +1 -1
  145. package/dist/types/state/read-only-state.d.ts +6 -2
  146. package/dist/types/state/read-only-state.d.ts.map +1 -1
  147. package/dist/types/state/read-write-state.d.ts +6 -4
  148. package/dist/types/state/read-write-state.d.ts.map +1 -1
  149. package/dist/types/state/store.d.ts +47 -14
  150. package/dist/types/state/store.d.ts.map +1 -1
  151. package/dist/types/unstable-framework-support/index.d.ts +1 -1
  152. package/dist/types/unstable-framework-support/index.d.ts.map +1 -1
  153. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts +2 -0
  154. package/dist/types/utils/__tests__/ref-counted-map.test.d.ts.map +1 -0
  155. package/dist/types/utils/ref-counted-map.d.ts +26 -0
  156. package/dist/types/utils/ref-counted-map.d.ts.map +1 -0
  157. package/package.json +3 -3
@@ -70,18 +70,13 @@ function startMeasuringElements() {
70
70
  }
71
71
  };
72
72
  }
73
- function setDocumentScroll() {
73
+ function lockDocumentScroll() {
74
74
  return (dispatch) => {
75
75
  const lastDocumentOverflow = window.document.documentElement.style.overflow;
76
76
  window.document.documentElement.style.overflow = "hidden";
77
- const styleTag = window.document.createElement("style");
78
- styleTag.setAttribute("data-makeswift-scroll-override", "");
79
- styleTag.textContent = "html, body { scroll-behavior: auto !important; }";
80
- window.document.head.appendChild(styleTag);
81
77
  window.document.documentElement.addEventListener("wheel", handleWheelEvent);
82
78
  return () => {
83
79
  window.document.documentElement.style.overflow = lastDocumentOverflow;
84
- styleTag.remove();
85
80
  window.document.documentElement.removeEventListener("wheel", handleWheelEvent);
86
81
  };
87
82
  function handleWheelEvent({ deltaX, deltaY }) {
@@ -229,12 +224,15 @@ function initializeBuilderConnection(builderProxy) {
229
224
  const stopMeasuringElements = dispatch(startMeasuringElements());
230
225
  const stopMeasuringDocumentElement = dispatch(startMeasuringDocumentElement());
231
226
  const stopHandlingFocusEvent = dispatch(startHandlingFocusEvents());
232
- const unsetDocumentScroll = dispatch(setDocumentScroll());
227
+ const unlockDocumentScroll = dispatch(lockDocumentScroll());
233
228
  const stopHandlingPointerMoveEvent = dispatch(startHandlingPointerMoveEvent());
234
229
  const stopPollingElementFromPoint = dispatch(startPollingElementFromPoint());
235
230
  const unregisterBuilderComponents = dispatch(registerBuilderComponents());
236
231
  const breakpoints = ReadOnlyState.getBreakpoints(getState());
237
232
  dispatch(Builder.setBreakpoints(breakpoints));
233
+ const locale = ReadOnlyState.getLocale(getState());
234
+ if (locale != null)
235
+ dispatch(Builder.setLocale(new Intl.Locale(locale)));
238
236
  dispatch(ReadOnly.setIsInBuilder(true));
239
237
  builderProxy.dispatchBuffered();
240
238
  return () => {
@@ -242,7 +240,7 @@ function initializeBuilderConnection(builderProxy) {
242
240
  stopMeasuringElements();
243
241
  stopMeasuringDocumentElement();
244
242
  stopHandlingFocusEvent();
245
- unsetDocumentScroll();
243
+ unlockDocumentScroll();
246
244
  stopHandlingPointerMoveEvent();
247
245
  stopPollingElementFromPoint();
248
246
  unregisterBuilderComponents();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/state/middleware/read-write/builder-api/initialize-connection.ts"],"sourcesContent":["import { type ThunkAction } from '@reduxjs/toolkit'\n\nimport deepEqual from '../../../../utils/deepEqual'\n\nimport * as BoxModels from '../../../modules/read-write/box-models'\nimport * as BuilderEditMode from '../../../modules/builder-edit-mode'\n\nimport { type Action } from '../../../actions'\n\nimport * as ReadOnly from '../../../actions/internal/read-only-actions'\nimport * as Builder from '../../../builder-api/actions'\n\nimport { serializeControls } from '../../../../builder'\nimport { type BuilderAPIProxy } from '../../../builder-api/proxy'\n\nimport * as ReadOnlyState from '../../../read-only-state'\nimport {\n type State,\n getDocuments,\n getMeasurables,\n getBoxModels,\n getBoxModel,\n getElementImperativeHandlesContainingElement,\n getPointer,\n} from '../../../read-write-state'\n\nimport { type ElementSize, getElementSize } from './element-size'\n\nfunction measureElements(): ThunkAction<void, State, unknown, Action> {\n return (dispatch, getState) => {\n const measurables = getMeasurables(getState())\n const currentBoxModels = getBoxModels(getState())\n const measuredBoxModels = new Map<string, Map<string, BoxModels.BoxModel>>()\n\n measurables.forEach((documentMeasurables, documentKey) => {\n const measuredDocumentBoxModels = new Map<string, BoxModels.BoxModel>()\n\n documentMeasurables.forEach((measurable, elementKey) => {\n const boxModel = BoxModels.measure(measurable)\n\n if (boxModel != null) measuredDocumentBoxModels.set(elementKey, boxModel)\n })\n\n if (measuredDocumentBoxModels.size > 0) {\n measuredBoxModels.set(documentKey, measuredDocumentBoxModels)\n }\n })\n\n const changedBoxModels = new Map<string, Map<string, BoxModels.BoxModel | null>>()\n\n currentBoxModels.forEach((currentDocumentBoxModels, documentKey) => {\n const changedDocumentBoxModels = new Map<string, BoxModels.BoxModel | null>()\n\n currentDocumentBoxModels.forEach((_boxModel, elementKey) => {\n if (!measuredBoxModels.get(documentKey)?.has(elementKey)) {\n changedDocumentBoxModels.set(elementKey, null)\n }\n\n if (changedDocumentBoxModels.size > 0) {\n changedBoxModels.set(documentKey, changedDocumentBoxModels)\n }\n })\n })\n\n measuredBoxModels.forEach((measuredDocumentBoxModels, documentKey) => {\n const changedDocumentBoxModels = new Map<string, BoxModels.BoxModel | null>()\n\n measuredDocumentBoxModels.forEach((measuredBoxModel, elementKey) => {\n const currentBoxModel = getBoxModel(getState(), documentKey, elementKey)\n\n if (currentBoxModel == null || !deepEqual(currentBoxModel, measuredBoxModel)) {\n changedDocumentBoxModels.set(elementKey, measuredBoxModel)\n }\n })\n\n if (changedDocumentBoxModels.size > 0) {\n changedBoxModels.set(documentKey, changedDocumentBoxModels)\n }\n })\n\n if (changedBoxModels.size > 0) dispatch(Builder.changeElementBoxModels(changedBoxModels))\n }\n}\n\nfunction startMeasuringElements(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n\n return () => {\n cancelAnimationFrame(animationFrameHandle)\n }\n\n function handleAnimationFrameRequest() {\n dispatch(measureElements())\n\n animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction setDocumentScroll(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n const lastDocumentOverflow = window.document.documentElement.style.overflow\n window.document.documentElement.style.overflow = 'hidden'\n\n // Override scroll behavior to prevent scroll jank/lag when in the builder.\n const styleTag = window.document.createElement('style')\n styleTag.setAttribute('data-makeswift-scroll-override', '')\n styleTag.textContent = 'html, body { scroll-behavior: auto !important; }'\n window.document.head.appendChild(styleTag)\n\n window.document.documentElement.addEventListener('wheel', handleWheelEvent)\n\n return () => {\n window.document.documentElement.style.overflow = lastDocumentOverflow\n styleTag.remove()\n window.document.documentElement.removeEventListener('wheel', handleWheelEvent)\n }\n\n function handleWheelEvent({ deltaX, deltaY }: WheelEvent) {\n dispatch(Builder.handleWheel({ deltaX, deltaY }))\n }\n }\n}\n\nfunction startHandlingPointerMoveEvent(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n window.document.documentElement.addEventListener('pointermove', handlePointerMoveEvent)\n\n return () => {\n window.document.documentElement.removeEventListener('pointermove', handlePointerMoveEvent)\n }\n\n function handlePointerMoveEvent({ clientX, clientY }: PointerEvent) {\n dispatch(Builder.handlePointerMove({ clientX, clientY }))\n }\n }\n}\n\nfunction startHandlingFocusEvents(): ThunkAction<() => void, State, unknown, Action> {\n return (_dispatch, getState) => {\n window.addEventListener('focusin', handleFocusIn)\n window.addEventListener('focusout', handleFocusOut)\n\n return () => {\n window.removeEventListener('focusin', handleFocusIn)\n window.removeEventListener('focusout', handleFocusOut)\n }\n\n function handleFocusIn(event: FocusEvent) {\n if (\n ReadOnlyState.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT\n ) {\n return\n }\n\n if (!(event.target instanceof window.HTMLElement) || !event.target.isContentEditable) {\n window.parent.focus()\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (\n ReadOnlyState.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT\n ) {\n return\n }\n\n if (\n !(event.relatedTarget instanceof window.HTMLElement) ||\n !event.relatedTarget.isContentEditable\n ) {\n window.parent.focus()\n }\n }\n }\n}\n\nfunction startMeasuringDocumentElement(): ThunkAction<() => void, unknown, unknown, Action> {\n return dispatch => {\n let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n let lastSize: ElementSize\n\n return () => {\n cancelAnimationFrame(animationFrameHandle)\n }\n\n function handleAnimationFrameRequest() {\n const nextSize = getElementSize(window.document.documentElement)\n\n if (!deepEqual(lastSize, nextSize)) {\n lastSize = nextSize\n\n dispatch(Builder.changeDocumentElementSize(nextSize))\n }\n\n animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction elementKeysFromElementFromPoint(\n elementFromPoint: Element | null,\n): ThunkAction<{ documentKey: string; elementKey: string } | null, State, unknown, Action> {\n return (_dispatch, getState) => {\n if (elementFromPoint == null) return null\n\n const elementImperativeHandles = getElementImperativeHandlesContainingElement(\n getState(),\n elementFromPoint,\n )\n const ascendingDepthDocumentKeys = ReadOnlyState.getDocumentKeysSortedByDepth(getState())\n const descendingDepthDocumentKeys = ascendingDepthDocumentKeys.slice().reverse()\n\n let currentElement: Element | null = elementFromPoint\n let keys = null\n\n while (currentElement != null) {\n for (const documentKey of descendingDepthDocumentKeys) {\n const byElementKey = elementImperativeHandles.get(documentKey)\n\n if (byElementKey == null) continue\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n if (elementImperativeHandle.getDomNode() === currentElement) {\n return { documentKey, elementKey }\n }\n }\n }\n\n currentElement = currentElement.parentElement\n }\n\n return keys\n }\n}\n\nfunction startPollingElementFromPoint(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n let lastElementFromPoint: Element | null = null\n let animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest)\n\n return () => {\n cancelAnimationFrame(animationFrameRequestId)\n }\n\n function handleAnimationFrameRequest() {\n const pointer = getPointer(getState())\n const elementFromPoint =\n pointer == null ? null : document.elementFromPoint(pointer.x, pointer.y)\n\n if (elementFromPoint !== lastElementFromPoint) {\n lastElementFromPoint = elementFromPoint\n\n const keys = dispatch(elementKeysFromElementFromPoint(elementFromPoint))\n\n dispatch(Builder.elementFromPointChange(keys))\n }\n\n animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction registerBuilderComponents(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const state = getState()\n const componentsMeta = ReadOnlyState.getComponentsMeta(state)\n\n componentsMeta.forEach((meta, type) => {\n const descriptors = ReadOnlyState.getComponentPropControllerDescriptors(state, type)\n if (descriptors != null) {\n const [serializedControls, transferables] = serializeControls(descriptors)\n dispatch(\n Builder.registerBuilderComponent({ type, meta, serializedControls }, transferables),\n )\n }\n })\n\n return () => {\n componentsMeta.forEach((_, type) => {\n dispatch(Builder.unregisterBuilderComponent({ type }))\n })\n }\n }\n}\n\nfunction registerBuilderDocuments(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const documents = getDocuments(getState())\n\n documents.forEach(document => {\n dispatch(Builder.registerBuilderDocument(document))\n })\n\n return () => {\n documents.forEach((_document, documentKey) => {\n dispatch(Builder.unregisterBuilderDocument(documentKey))\n })\n }\n }\n}\n\nexport function initializeBuilderConnection(\n builderProxy: BuilderAPIProxy,\n): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const unregisterBuilderDocuments = dispatch(registerBuilderDocuments())\n const stopMeasuringElements = dispatch(startMeasuringElements())\n const stopMeasuringDocumentElement = dispatch(startMeasuringDocumentElement())\n const stopHandlingFocusEvent = dispatch(startHandlingFocusEvents())\n const unsetDocumentScroll = dispatch(setDocumentScroll())\n const stopHandlingPointerMoveEvent = dispatch(startHandlingPointerMoveEvent())\n const stopPollingElementFromPoint = dispatch(startPollingElementFromPoint())\n const unregisterBuilderComponents = dispatch(registerBuilderComponents())\n\n const breakpoints = ReadOnlyState.getBreakpoints(getState())\n dispatch(Builder.setBreakpoints(breakpoints))\n dispatch(ReadOnly.setIsInBuilder(true))\n builderProxy.dispatchBuffered()\n\n return () => {\n unregisterBuilderDocuments()\n stopMeasuringElements()\n stopMeasuringDocumentElement()\n stopHandlingFocusEvent()\n unsetDocumentScroll()\n stopHandlingPointerMoveEvent()\n stopPollingElementFromPoint()\n unregisterBuilderComponents()\n dispatch(ReadOnly.setIsInBuilder(false))\n }\n }\n}\n"],"mappings":"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","names":["document"]}
1
+ {"version":3,"sources":["../../../../../../src/state/middleware/read-write/builder-api/initialize-connection.ts"],"sourcesContent":["import { type ThunkAction } from '@reduxjs/toolkit'\n\nimport deepEqual from '../../../../utils/deepEqual'\n\nimport * as BoxModels from '../../../modules/read-write/box-models'\nimport * as BuilderEditMode from '../../../modules/builder-edit-mode'\n\nimport { type Action } from '../../../actions'\n\nimport * as ReadOnly from '../../../actions/internal/read-only-actions'\nimport * as Builder from '../../../builder-api/actions'\n\nimport { serializeControls } from '../../../../builder'\nimport { type BuilderAPIProxy } from '../../../builder-api/proxy'\n\nimport * as ReadOnlyState from '../../../read-only-state'\nimport {\n type State,\n getDocuments,\n getMeasurables,\n getBoxModels,\n getBoxModel,\n getElementImperativeHandlesContainingElement,\n getPointer,\n} from '../../../read-write-state'\n\nimport { type ElementSize, getElementSize } from './element-size'\n\nfunction measureElements(): ThunkAction<void, State, unknown, Action> {\n return (dispatch, getState) => {\n const measurables = getMeasurables(getState())\n const currentBoxModels = getBoxModels(getState())\n const measuredBoxModels = new Map<string, Map<string, BoxModels.BoxDisplayModel>>()\n\n measurables.forEach((documentMeasurables, documentKey) => {\n const measuredDocumentBoxModels = new Map<string, BoxModels.BoxDisplayModel>()\n\n documentMeasurables.forEach((measurable, elementKey) => {\n const boxModel = BoxModels.measure(measurable)\n\n if (boxModel != null) measuredDocumentBoxModels.set(elementKey, boxModel)\n })\n\n if (measuredDocumentBoxModels.size > 0) {\n measuredBoxModels.set(documentKey, measuredDocumentBoxModels)\n }\n })\n\n const changedBoxModels = new Map<string, Map<string, BoxModels.BoxDisplayModel | null>>()\n\n currentBoxModels.forEach((currentDocumentBoxModels, documentKey) => {\n const changedDocumentBoxModels = new Map<string, BoxModels.BoxDisplayModel | null>()\n\n currentDocumentBoxModels.forEach((_boxModel, elementKey) => {\n if (!measuredBoxModels.get(documentKey)?.has(elementKey)) {\n changedDocumentBoxModels.set(elementKey, null)\n }\n\n if (changedDocumentBoxModels.size > 0) {\n changedBoxModels.set(documentKey, changedDocumentBoxModels)\n }\n })\n })\n\n measuredBoxModels.forEach((measuredDocumentBoxModels, documentKey) => {\n const changedDocumentBoxModels = new Map<string, BoxModels.BoxDisplayModel | null>()\n\n measuredDocumentBoxModels.forEach((measuredBoxModel, elementKey) => {\n const currentBoxModel = getBoxModel(getState(), documentKey, elementKey)\n\n if (currentBoxModel == null || !deepEqual(currentBoxModel, measuredBoxModel)) {\n changedDocumentBoxModels.set(elementKey, measuredBoxModel)\n }\n })\n\n if (changedDocumentBoxModels.size > 0) {\n changedBoxModels.set(documentKey, changedDocumentBoxModels)\n }\n })\n\n if (changedBoxModels.size > 0) dispatch(Builder.changeElementBoxModels(changedBoxModels))\n }\n}\n\nfunction startMeasuringElements(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n\n return () => {\n cancelAnimationFrame(animationFrameHandle)\n }\n\n function handleAnimationFrameRequest() {\n dispatch(measureElements())\n\n animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction lockDocumentScroll(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n const lastDocumentOverflow = window.document.documentElement.style.overflow\n window.document.documentElement.style.overflow = 'hidden'\n\n window.document.documentElement.addEventListener('wheel', handleWheelEvent)\n\n return () => {\n window.document.documentElement.style.overflow = lastDocumentOverflow\n window.document.documentElement.removeEventListener('wheel', handleWheelEvent)\n }\n\n function handleWheelEvent({ deltaX, deltaY }: WheelEvent) {\n dispatch(Builder.handleWheel({ deltaX, deltaY }))\n }\n }\n}\n\nfunction startHandlingPointerMoveEvent(): ThunkAction<() => void, State, unknown, Action> {\n return dispatch => {\n window.document.documentElement.addEventListener('pointermove', handlePointerMoveEvent)\n\n return () => {\n window.document.documentElement.removeEventListener('pointermove', handlePointerMoveEvent)\n }\n\n function handlePointerMoveEvent({ clientX, clientY }: PointerEvent) {\n dispatch(Builder.handlePointerMove({ clientX, clientY }))\n }\n }\n}\n\nfunction startHandlingFocusEvents(): ThunkAction<() => void, State, unknown, Action> {\n return (_dispatch, getState) => {\n window.addEventListener('focusin', handleFocusIn)\n window.addEventListener('focusout', handleFocusOut)\n\n return () => {\n window.removeEventListener('focusin', handleFocusIn)\n window.removeEventListener('focusout', handleFocusOut)\n }\n\n function handleFocusIn(event: FocusEvent) {\n if (\n ReadOnlyState.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT\n ) {\n return\n }\n\n if (!(event.target instanceof window.HTMLElement) || !event.target.isContentEditable) {\n window.parent.focus()\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (\n ReadOnlyState.getBuilderEditMode(getState()) === BuilderEditMode.BuilderEditMode.INTERACT\n ) {\n return\n }\n\n if (\n !(event.relatedTarget instanceof window.HTMLElement) ||\n !event.relatedTarget.isContentEditable\n ) {\n window.parent.focus()\n }\n }\n }\n}\n\nfunction startMeasuringDocumentElement(): ThunkAction<() => void, unknown, unknown, Action> {\n return dispatch => {\n let animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n let lastSize: ElementSize\n\n return () => {\n cancelAnimationFrame(animationFrameHandle)\n }\n\n function handleAnimationFrameRequest() {\n const nextSize = getElementSize(window.document.documentElement)\n\n if (!deepEqual(lastSize, nextSize)) {\n lastSize = nextSize\n\n dispatch(Builder.changeDocumentElementSize(nextSize))\n }\n\n animationFrameHandle = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction elementKeysFromElementFromPoint(\n elementFromPoint: Element | null,\n): ThunkAction<{ documentKey: string; elementKey: string } | null, State, unknown, Action> {\n return (_dispatch, getState) => {\n if (elementFromPoint == null) return null\n\n const elementImperativeHandles = getElementImperativeHandlesContainingElement(\n getState(),\n elementFromPoint,\n )\n const ascendingDepthDocumentKeys = ReadOnlyState.getDocumentKeysSortedByDepth(getState())\n const descendingDepthDocumentKeys = ascendingDepthDocumentKeys.slice().reverse()\n\n let currentElement: Element | null = elementFromPoint\n let keys = null\n\n while (currentElement != null) {\n for (const documentKey of descendingDepthDocumentKeys) {\n const byElementKey = elementImperativeHandles.get(documentKey)\n\n if (byElementKey == null) continue\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n if (elementImperativeHandle.getDomNode() === currentElement) {\n return { documentKey, elementKey }\n }\n }\n }\n\n currentElement = currentElement.parentElement\n }\n\n return keys\n }\n}\n\nfunction startPollingElementFromPoint(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n let lastElementFromPoint: Element | null = null\n let animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest)\n\n return () => {\n cancelAnimationFrame(animationFrameRequestId)\n }\n\n function handleAnimationFrameRequest() {\n const pointer = getPointer(getState())\n const elementFromPoint =\n pointer == null ? null : document.elementFromPoint(pointer.x, pointer.y)\n\n if (elementFromPoint !== lastElementFromPoint) {\n lastElementFromPoint = elementFromPoint\n\n const keys = dispatch(elementKeysFromElementFromPoint(elementFromPoint))\n\n dispatch(Builder.elementFromPointChange(keys))\n }\n\n animationFrameRequestId = requestAnimationFrame(handleAnimationFrameRequest)\n }\n }\n}\n\nfunction registerBuilderComponents(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const state = getState()\n const componentsMeta = ReadOnlyState.getComponentsMeta(state)\n\n componentsMeta.forEach((meta, type) => {\n const descriptors = ReadOnlyState.getComponentPropControllerDescriptors(state, type)\n if (descriptors != null) {\n const [serializedControls, transferables] = serializeControls(descriptors)\n dispatch(\n Builder.registerBuilderComponent({ type, meta, serializedControls }, transferables),\n )\n }\n })\n\n return () => {\n componentsMeta.forEach((_, type) => {\n dispatch(Builder.unregisterBuilderComponent({ type }))\n })\n }\n }\n}\n\nfunction registerBuilderDocuments(): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const documents = getDocuments(getState())\n\n documents.forEach(document => {\n dispatch(Builder.registerBuilderDocument(document))\n })\n\n return () => {\n documents.forEach((_document, documentKey) => {\n dispatch(Builder.unregisterBuilderDocument(documentKey))\n })\n }\n }\n}\n\nexport function initializeBuilderConnection(\n builderProxy: BuilderAPIProxy,\n): ThunkAction<() => void, State, unknown, Action> {\n return (dispatch, getState) => {\n const unregisterBuilderDocuments = dispatch(registerBuilderDocuments())\n const stopMeasuringElements = dispatch(startMeasuringElements())\n const stopMeasuringDocumentElement = dispatch(startMeasuringDocumentElement())\n const stopHandlingFocusEvent = dispatch(startHandlingFocusEvents())\n const unlockDocumentScroll = dispatch(lockDocumentScroll())\n const stopHandlingPointerMoveEvent = dispatch(startHandlingPointerMoveEvent())\n const stopPollingElementFromPoint = dispatch(startPollingElementFromPoint())\n const unregisterBuilderComponents = dispatch(registerBuilderComponents())\n\n const breakpoints = ReadOnlyState.getBreakpoints(getState())\n dispatch(Builder.setBreakpoints(breakpoints))\n\n const locale = ReadOnlyState.getLocale(getState())\n if (locale != null) dispatch(Builder.setLocale(new Intl.Locale(locale)))\n\n dispatch(ReadOnly.setIsInBuilder(true))\n builderProxy.dispatchBuffered()\n\n return () => {\n unregisterBuilderDocuments()\n stopMeasuringElements()\n stopMeasuringDocumentElement()\n stopHandlingFocusEvent()\n unlockDocumentScroll()\n stopHandlingPointerMoveEvent()\n stopPollingElementFromPoint()\n unregisterBuilderComponents()\n dispatch(ReadOnly.setIsInBuilder(false))\n }\n }\n}\n"],"mappings":"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","names":["document"]}
@@ -1,6 +1,5 @@
1
1
  import { isKnownAction } from "../actions";
2
2
  import { SharedActionTypes } from "../shared-api";
3
- import { ReadOnlyActionTypes } from "../actions/internal/read-only-actions";
4
3
  function getInitialState(locale = null) {
5
4
  return locale;
6
5
  }
@@ -13,8 +12,6 @@ function reducer(state = getInitialState(), action) {
13
12
  switch (action.type) {
14
13
  case SharedActionTypes.SET_LOCALE:
15
14
  return action.payload.locale;
16
- case ReadOnlyActionTypes.RESET_LOCALE_STATE:
17
- return getInitialState();
18
15
  default:
19
16
  return state;
20
17
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/modules/locale.ts"],"sourcesContent":["import { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { SharedActionTypes } from '../shared-api'\nimport { ReadOnlyActionTypes } from '../actions/internal/read-only-actions'\n\nexport type State = string | null\n\nexport function getInitialState(locale: string | null = null): State {\n return locale\n}\n\nexport function getLocale(state: State): string | null {\n return state\n}\n\nexport function reducer(state = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case SharedActionTypes.SET_LOCALE:\n return action.payload.locale\n\n case ReadOnlyActionTypes.RESET_LOCALE_STATE:\n return getInitialState()\n\n default:\n return state\n }\n}\n"],"mappings":"AAAA,SAA0C,qBAAqB;AAC/D,SAAS,yBAAyB;AAClC,SAAS,2BAA2B;AAI7B,SAAS,gBAAgB,SAAwB,MAAa;AACnE,SAAO;AACT;AAEO,SAAS,UAAU,OAA6B;AACrD,SAAO;AACT;AAEO,SAAS,QAAQ,QAAQ,gBAAgB,GAAG,QAAuC;AACxF,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,kBAAkB;AACrB,aAAO,OAAO,QAAQ;AAAA,IAExB,KAAK,oBAAoB;AACvB,aAAO,gBAAgB;AAAA,IAEzB;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/state/modules/locale.ts"],"sourcesContent":["import { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { SharedActionTypes } from '../shared-api'\n\nexport type State = string | null\n\nexport function getInitialState(locale: string | null = null): State {\n return locale\n}\n\nexport function getLocale(state: State): string | null {\n return state\n}\n\nexport function reducer(state = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case SharedActionTypes.SET_LOCALE:\n return action.payload.locale\n\n default:\n return state\n }\n}\n"],"mappings":"AAAA,SAA0C,qBAAqB;AAC/D,SAAS,yBAAyB;AAI3B,SAAS,gBAAgB,SAAwB,MAAa;AACnE,SAAO;AACT;AAEO,SAAS,UAAU,OAA6B;AACrD,SAAO;AACT;AAEO,SAAS,QAAQ,QAAQ,gBAAgB,GAAG,QAAuC;AACxF,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,kBAAkB;AACrB,aAAO,OAAO,QAAQ;AAAA,IAExB;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -11,10 +11,23 @@ function parse(rawString) {
11
11
  return Number.isFinite(value) ? value : 0;
12
12
  }
13
13
  function createBox(boxArgs) {
14
- return withScroll(createBoxWithoutScroll(boxArgs));
14
+ const box = withScroll(createBoxWithoutScroll(boxArgs));
15
+ return { ...box, visible: boxArgs.visible };
16
+ }
17
+ function isElementVisible(element) {
18
+ if (element.checkVisibility == null) {
19
+ return true;
20
+ }
21
+ return element.checkVisibility({
22
+ visibilityProperty: true,
23
+ contentVisibilityAuto: true,
24
+ opacityProperty: true
25
+ });
15
26
  }
16
27
  function getBox(element) {
17
- return withScroll(getBoxWithoutScroll(element));
28
+ const visible = isElementVisible(element);
29
+ const boxModel = withScroll(getBoxWithoutScroll(element));
30
+ return { ...boxModel, visible };
18
31
  }
19
32
  function isMeasurable(value) {
20
33
  if (value instanceof Element)
@@ -92,6 +105,7 @@ export {
92
105
  getBoxModels,
93
106
  getInitialState,
94
107
  getMeasurables,
108
+ isElementVisible,
95
109
  isMeasurable,
96
110
  measure,
97
111
  parse,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/state/modules/read-write/box-models.ts"],"sourcesContent":["import { type BoxModel } from '@makeswift/controls'\nimport {\n createBox as createBoxWithoutScroll,\n CreateBoxArgs,\n getBox as getBoxWithoutScroll,\n withScroll,\n} from 'css-box-model'\n\nimport { type Action, type UnknownAction, isKnownAction } from '../../actions'\nimport { ReadWriteActionTypes } from '../../actions/internal/read-write-actions'\nimport { BuilderActionTypes } from '../../builder-api/actions'\n\nexport type { BoxModel }\n\nexport function parse(rawString: string): number {\n const value = Number(rawString.replace(/px$/, ''))\n\n return Number.isFinite(value) ? value : 0\n}\n\nexport function createBox(boxArgs: CreateBoxArgs): BoxModel {\n return withScroll(createBoxWithoutScroll(boxArgs))\n}\n\nexport function getBox(element: Element): BoxModel {\n return withScroll(getBoxWithoutScroll(element))\n}\n\nexport interface BoxModelHandle {\n getBoxModel(): BoxModel | null\n}\n\nexport type Measurable = Element | BoxModelHandle\n\nexport function isMeasurable(value: unknown): value is Measurable {\n if (value instanceof Element) return true\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'getBoxModel' in value &&\n typeof (value as { getBoxModel: unknown }).getBoxModel === 'function'\n ) {\n return true\n }\n\n return false\n}\n\nexport function measure(measurable: Measurable): BoxModel | null {\n if (measurable instanceof Element) return getBox(measurable)\n\n return measurable.getBoxModel()\n}\n\nexport type State = {\n measurables: Map<string, Map<string, Measurable>>\n boxModels: Map<string, Map<string, BoxModel>>\n}\n\nexport function getInitialState(): State {\n return { measurables: new Map(), boxModels: new Map() }\n}\n\nexport function getMeasurables(state: State): Map<string, Map<string, Measurable>> {\n return state.measurables\n}\n\nexport function getBoxModels(state: State): Map<string, Map<string, BoxModel>> {\n return state.boxModels\n}\n\nexport function getBoxModel(\n state: State,\n documentKey: string,\n elementKey: string,\n): BoxModel | null {\n return getBoxModels(state).get(documentKey)?.get(elementKey) ?? null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction) {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadWriteActionTypes.REGISTER_MEASURABLE: {\n const { documentKey, elementKey, measurable } = action.payload\n\n return {\n ...state,\n measurables: new Map(state.measurables).set(\n documentKey,\n new Map(state.measurables.get(documentKey) ?? []).set(elementKey, measurable),\n ),\n }\n }\n\n case ReadWriteActionTypes.UNREGISTER_MEASURABLE: {\n const { documentKey, elementKey } = action.payload\n const nextMeasurables = new Map(state.measurables.get(documentKey) ?? [])\n\n const deleted = nextMeasurables.delete(elementKey)\n\n return deleted\n ? { ...state, measurables: new Map(state.measurables).set(documentKey, nextMeasurables) }\n : state\n }\n\n case BuilderActionTypes.CHANGE_ELEMENT_BOX_MODELS: {\n const { changedElementBoxModels } = action.payload\n\n if (changedElementBoxModels.size === 0) return state\n\n const nextBoxModels = new Map(state.boxModels)\n\n changedElementBoxModels.forEach((changedBoxModels, documentKey) => {\n const nextDocumentBoxModels = new Map(nextBoxModels.get(documentKey) ?? [])\n\n changedBoxModels.forEach((changedBoxModel, elementKey) => {\n if (changedBoxModel == null) nextDocumentBoxModels.delete(elementKey)\n else nextDocumentBoxModels.set(elementKey, changedBoxModel)\n })\n\n if (nextDocumentBoxModels.size > 0) nextBoxModels.set(documentKey, nextDocumentBoxModels)\n else nextBoxModels.delete(documentKey)\n })\n\n return { ...state, boxModels: nextBoxModels }\n }\n\n default:\n return state\n }\n}\n"],"mappings":"AACA;AAAA,EACE,aAAa;AAAA,EAEb,UAAU;AAAA,EACV;AAAA,OACK;AAEP,SAA0C,qBAAqB;AAC/D,SAAS,4BAA4B;AACrC,SAAS,0BAA0B;AAI5B,SAAS,MAAM,WAA2B;AAC/C,QAAM,QAAQ,OAAO,UAAU,QAAQ,OAAO,EAAE,CAAC;AAEjD,SAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAEO,SAAS,UAAU,SAAkC;AAC1D,SAAO,WAAW,uBAAuB,OAAO,CAAC;AACnD;AAEO,SAAS,OAAO,SAA4B;AACjD,SAAO,WAAW,oBAAoB,OAAO,CAAC;AAChD;AAQO,SAAS,aAAa,OAAqC;AAChE,MAAI,iBAAiB;AAAS,WAAO;AAErC,MACE,OAAO,UAAU,YACjB,UAAU,QACV,iBAAiB,SACjB,OAAQ,MAAmC,gBAAgB,YAC3D;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,QAAQ,YAAyC;AAC/D,MAAI,sBAAsB;AAAS,WAAO,OAAO,UAAU;AAE3D,SAAO,WAAW,YAAY;AAChC;AAOO,SAAS,kBAAyB;AACvC,SAAO,EAAE,aAAa,oBAAI,IAAI,GAAG,WAAW,oBAAI,IAAI,EAAE;AACxD;AAEO,SAAS,eAAe,OAAoD;AACjF,SAAO,MAAM;AACf;AAEO,SAAS,aAAa,OAAkD;AAC7E,SAAO,MAAM;AACf;AAEO,SAAS,YACd,OACA,aACA,YACiB;AACjB,SAAO,aAAa,KAAK,EAAE,IAAI,WAAW,GAAG,IAAI,UAAU,KAAK;AAClE;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAgC;AACxF,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,qBAAqB,qBAAqB;AAC7C,YAAM,EAAE,aAAa,YAAY,WAAW,IAAI,OAAO;AAEvD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,aAAa,IAAI,IAAI,MAAM,WAAW,EAAE;AAAA,UACtC;AAAA,UACA,IAAI,IAAI,MAAM,YAAY,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,IAAI,YAAY,UAAU;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,IAEA,KAAK,qBAAqB,uBAAuB;AAC/C,YAAM,EAAE,aAAa,WAAW,IAAI,OAAO;AAC3C,YAAM,kBAAkB,IAAI,IAAI,MAAM,YAAY,IAAI,WAAW,KAAK,CAAC,CAAC;AAExE,YAAM,UAAU,gBAAgB,OAAO,UAAU;AAEjD,aAAO,UACH,EAAE,GAAG,OAAO,aAAa,IAAI,IAAI,MAAM,WAAW,EAAE,IAAI,aAAa,eAAe,EAAE,IACtF;AAAA,IACN;AAAA,IAEA,KAAK,mBAAmB,2BAA2B;AACjD,YAAM,EAAE,wBAAwB,IAAI,OAAO;AAE3C,UAAI,wBAAwB,SAAS;AAAG,eAAO;AAE/C,YAAM,gBAAgB,IAAI,IAAI,MAAM,SAAS;AAE7C,8BAAwB,QAAQ,CAAC,kBAAkB,gBAAgB;AACjE,cAAM,wBAAwB,IAAI,IAAI,cAAc,IAAI,WAAW,KAAK,CAAC,CAAC;AAE1E,yBAAiB,QAAQ,CAAC,iBAAiB,eAAe;AACxD,cAAI,mBAAmB;AAAM,kCAAsB,OAAO,UAAU;AAAA;AAC/D,kCAAsB,IAAI,YAAY,eAAe;AAAA,QAC5D,CAAC;AAED,YAAI,sBAAsB,OAAO;AAAG,wBAAc,IAAI,aAAa,qBAAqB;AAAA;AACnF,wBAAc,OAAO,WAAW;AAAA,MACvC,CAAC;AAED,aAAO,EAAE,GAAG,OAAO,WAAW,cAAc;AAAA,IAC9C;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/state/modules/read-write/box-models.ts"],"sourcesContent":["import { type BoxDisplayModel } from '@makeswift/controls'\nimport {\n createBox as createBoxWithoutScroll,\n CreateBoxArgs,\n getBox as getBoxWithoutScroll,\n withScroll,\n} from 'css-box-model'\n\nimport { type Action, type UnknownAction, isKnownAction } from '../../actions'\nimport { ReadWriteActionTypes } from '../../actions/internal/read-write-actions'\nimport { BuilderActionTypes } from '../../builder-api/actions'\n\nexport type { BoxDisplayModel }\n\nexport function parse(rawString: string): number {\n const value = Number(rawString.replace(/px$/, ''))\n\n return Number.isFinite(value) ? value : 0\n}\n\nexport function createBox(boxArgs: CreateBoxArgs & { visible?: boolean }): BoxDisplayModel {\n const box = withScroll(createBoxWithoutScroll(boxArgs))\n return { ...box, visible: boxArgs.visible }\n}\n\nexport function isElementVisible(element: Element): boolean {\n // checkVisibility is widely supported as of March 2024, but we're adding this\n // check as a precaution for browsers where it may not be available.\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility\n if (element.checkVisibility == null) {\n return true\n }\n\n return element.checkVisibility({\n visibilityProperty: true,\n contentVisibilityAuto: true,\n opacityProperty: true,\n })\n}\n\nexport function getBox(element: Element): BoxDisplayModel {\n const visible = isElementVisible(element)\n const boxModel = withScroll(getBoxWithoutScroll(element))\n\n return { ...boxModel, visible }\n}\n\nexport interface BoxModelHandle {\n getBoxModel(): BoxDisplayModel | null\n}\n\nexport type Measurable = Element | BoxModelHandle\n\nexport function isMeasurable(value: unknown): value is Measurable {\n if (value instanceof Element) return true\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'getBoxModel' in value &&\n typeof (value as { getBoxModel: unknown }).getBoxModel === 'function'\n ) {\n return true\n }\n\n return false\n}\n\nexport function measure(measurable: Measurable): BoxDisplayModel | null {\n if (measurable instanceof Element) return getBox(measurable)\n\n return measurable.getBoxModel()\n}\n\nexport type State = {\n measurables: Map<string, Map<string, Measurable>>\n boxModels: Map<string, Map<string, BoxDisplayModel>>\n}\n\nexport function getInitialState(): State {\n return { measurables: new Map(), boxModels: new Map() }\n}\n\nexport function getMeasurables(state: State): Map<string, Map<string, Measurable>> {\n return state.measurables\n}\n\nexport function getBoxModels(state: State): Map<string, Map<string, BoxDisplayModel>> {\n return state.boxModels\n}\n\nexport function getBoxModel(\n state: State,\n documentKey: string,\n elementKey: string,\n): BoxDisplayModel | null {\n return getBoxModels(state).get(documentKey)?.get(elementKey) ?? null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction) {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadWriteActionTypes.REGISTER_MEASURABLE: {\n const { documentKey, elementKey, measurable } = action.payload\n\n return {\n ...state,\n measurables: new Map(state.measurables).set(\n documentKey,\n new Map(state.measurables.get(documentKey) ?? []).set(elementKey, measurable),\n ),\n }\n }\n\n case ReadWriteActionTypes.UNREGISTER_MEASURABLE: {\n const { documentKey, elementKey } = action.payload\n const nextMeasurables = new Map(state.measurables.get(documentKey) ?? [])\n\n const deleted = nextMeasurables.delete(elementKey)\n\n return deleted\n ? { ...state, measurables: new Map(state.measurables).set(documentKey, nextMeasurables) }\n : state\n }\n\n case BuilderActionTypes.CHANGE_ELEMENT_BOX_MODELS: {\n const { changedElementBoxModels } = action.payload\n\n if (changedElementBoxModels.size === 0) return state\n\n const nextBoxModels = new Map(state.boxModels)\n\n changedElementBoxModels.forEach((changedBoxModels, documentKey) => {\n const nextDocumentBoxModels = new Map(nextBoxModels.get(documentKey) ?? [])\n\n changedBoxModels.forEach((changedBoxModel, elementKey) => {\n if (changedBoxModel == null) nextDocumentBoxModels.delete(elementKey)\n else nextDocumentBoxModels.set(elementKey, changedBoxModel)\n })\n\n if (nextDocumentBoxModels.size > 0) nextBoxModels.set(documentKey, nextDocumentBoxModels)\n else nextBoxModels.delete(documentKey)\n })\n\n return { ...state, boxModels: nextBoxModels }\n }\n\n default:\n return state\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,5 +1,4 @@
1
1
  import { isKnownAction } from "../actions";
2
- import { ReadOnlyActionTypes } from "../actions/internal/read-only-actions";
3
2
  function getInitialState(siteVersion = null) {
4
3
  return siteVersion;
5
4
  }
@@ -10,8 +9,6 @@ function reducer(state = getInitialState(), action) {
10
9
  if (!isKnownAction(action))
11
10
  return state;
12
11
  switch (action.type) {
13
- case ReadOnlyActionTypes.SET_SITE_VERSION:
14
- return action.payload;
15
12
  default:
16
13
  return state;
17
14
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/modules/site-version.ts"],"sourcesContent":["import { type SiteVersion } from '../../api/site-version'\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadOnlyActionTypes } from '../actions/internal/read-only-actions'\n\nexport type State = SiteVersion | null\n\nexport function getInitialState(siteVersion: SiteVersion | null = null): State {\n return siteVersion\n}\n\nexport function getSiteVersion(state: State): SiteVersion | null {\n return state\n}\n\nexport function reducer(state = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadOnlyActionTypes.SET_SITE_VERSION:\n return action.payload\n\n default:\n return state\n }\n}\n"],"mappings":"AACA,SAA0C,qBAAqB;AAC/D,SAAS,2BAA2B;AAI7B,SAAS,gBAAgB,cAAkC,MAAa;AAC7E,SAAO;AACT;AAEO,SAAS,eAAe,OAAkC;AAC/D,SAAO;AACT;AAEO,SAAS,QAAQ,QAAQ,gBAAgB,GAAG,QAAuC;AACxF,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,oBAAoB;AACvB,aAAO,OAAO;AAAA,IAEhB;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/state/modules/site-version.ts"],"sourcesContent":["import { type SiteVersion } from '../../api/site-version'\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\n\nexport type State = SiteVersion | null\n\nexport function getInitialState(siteVersion: SiteVersion | null = null): State {\n return siteVersion\n}\n\nexport function getSiteVersion(state: State): SiteVersion | null {\n return state\n}\n\nexport function reducer(state = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n default:\n return state\n }\n}\n"],"mappings":"AACA,SAA0C,qBAAqB;AAIxD,SAAS,gBAAgB,cAAkC,MAAa;AAC7E,SAAO;AACT;AAEO,SAAS,eAAe,OAAkC;AAC/D,SAAO;AACT;AAEO,SAAS,QAAQ,QAAQ,gBAAgB,GAAG,QAAuC;AACxF,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB;AACE,aAAO;AAAA,EACX;AACF;","names":[]}
@@ -1,5 +1,6 @@
1
1
  import { createSelector } from "reselect";
2
2
  import * as SiteVersion from "./modules/site-version";
3
+ import * as Locale from "./modules/locale";
3
4
  import * as Documents from "./modules/read-only-documents";
4
5
  import * as ElementTrees from "./modules/element-trees";
5
6
  import * as ReactComponents from "./modules/react-components";
@@ -17,8 +18,9 @@ import {
17
18
  isElementReference
18
19
  } from "./modules/read-only-documents";
19
20
  const reducers = {
20
- isReadOnly: IsReadOnly.reducer,
21
21
  siteVersion: SiteVersion.reducer,
22
+ isReadOnly: IsReadOnly.reducer,
23
+ locale: Locale.reducer,
22
24
  documents: Documents.reducer,
23
25
  elementTrees: ElementTrees.reducer,
24
26
  reactComponents: ReactComponents.reducer,
@@ -130,6 +132,9 @@ function getBuilderEditMode(state) {
130
132
  function getBreakpoints(state) {
131
133
  return state.breakpoints;
132
134
  }
135
+ function getLocale(state) {
136
+ return state.locale;
137
+ }
133
138
  export {
134
139
  createBaseDocument,
135
140
  createDocumentReference,
@@ -147,6 +152,7 @@ export {
147
152
  getElements,
148
153
  getIsInBuilder,
149
154
  getIsReadOnly,
155
+ getLocale,
150
156
  getPropController,
151
157
  getPropControllerDescriptors,
152
158
  getPropControllers,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/state/read-only-state.ts"],"sourcesContent":["import { type ThunkDispatch } from '@reduxjs/toolkit'\n\nimport { createSelector } from 'reselect'\n\nimport * as SiteVersion from './modules/site-version'\nimport * as Documents from './modules/read-only-documents'\nimport * as ElementTrees from './modules/element-trees'\nimport * as ReactComponents from './modules/react-components'\nimport * as ComponentsMeta from './modules/components-meta'\nimport * as PropControllers from './modules/prop-controllers'\nimport * as PropControllerHandles from './modules/prop-controller-handles'\nimport * as IsInBuilder from './modules/is-in-builder'\nimport * as IsReadOnly from './modules/is-read-only'\nimport * as BuilderEditMode from './modules/builder-edit-mode'\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { type Action } from './actions'\n\nexport type {\n Data,\n Document,\n DocumentReference,\n Element,\n ElementData,\n ElementReference,\n} from './modules/read-only-documents'\n\nexport {\n createBaseDocument,\n createDocumentReference,\n getRootElement,\n isElementReference,\n} from './modules/read-only-documents'\n\nexport type { ComponentType } from './modules/react-components'\nexport type { ComponentMeta } from './modules/components-meta'\n\nexport const reducers = {\n isReadOnly: IsReadOnly.reducer,\n siteVersion: SiteVersion.reducer,\n documents: Documents.reducer,\n elementTrees: ElementTrees.reducer,\n reactComponents: ReactComponents.reducer,\n componentsMeta: ComponentsMeta.reducer,\n propControllers: PropControllers.reducer,\n propControllerHandles: PropControllerHandles.reducer,\n isInBuilder: IsInBuilder.reducer,\n builderEditMode: BuilderEditMode.reducer,\n breakpoints: Breakpoints.reducer,\n}\n\nexport type State = {\n isReadOnly: IsReadOnly.State\n siteVersion: SiteVersion.State\n documents: Documents.State\n elementTrees: ElementTrees.State\n reactComponents: ReactComponents.State\n componentsMeta: ComponentsMeta.State\n propControllers: PropControllers.State\n propControllerHandles: PropControllerHandles.State\n isInBuilder: IsInBuilder.State\n builderEditMode: BuilderEditMode.State\n breakpoints: Breakpoints.State\n}\n\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getElementTreesSlice(state: State): ElementTrees.State {\n return state.elementTrees\n}\n\nexport function getElements(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elements'] {\n return ElementTrees.getElements(getElementTreesSlice(state), documentKey)\n}\n\nexport function getElementIds(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elementIds'] {\n return ElementTrees.getElementIds(getElementTreesSlice(state), documentKey)\n}\n\nfunction getReactComponentsStateSlice(state: State): ReactComponents.State {\n return state.reactComponents\n}\n\nexport function getReactComponent(\n state: State,\n type: string,\n): ReactComponents.ComponentType | null {\n return ReactComponents.getReactComponent(getReactComponentsStateSlice(state), type)\n}\n\nfunction getComponentsMetaStateSlice(state: State): ComponentsMeta.State {\n return state.componentsMeta\n}\n\nexport function getComponentsMeta(state: State): Map<string, ComponentsMeta.ComponentMeta> {\n return ComponentsMeta.getComponentsMeta(getComponentsMetaStateSlice(state))\n}\n\nexport function getComponentMeta(state: State, type: string): ComponentsMeta.ComponentMeta | null {\n return ComponentsMeta.getComponentMeta(getComponentsMetaStateSlice(state), type)\n}\n\nfunction getPropControllersStateSlice(state: State): PropControllers.State {\n return state.propControllers\n}\n\nexport function getPropControllerDescriptors(state: State): PropControllers.State {\n return PropControllers.getPropControllerDescriptors(getPropControllersStateSlice(state))\n}\n\nexport function getComponentPropControllerDescriptors(\n state: State,\n componentType: string,\n): PropControllers.DescriptorsByProp | null {\n return PropControllers.getComponentPropControllerDescriptors(\n getPropControllersStateSlice(state),\n componentType,\n )\n}\n\nfunction getPropControllerHandlesStateSlice(state: State): PropControllerHandles.State {\n return state.propControllerHandles\n}\n\nexport function getPropControllers(\n state: State,\n { documentKey, elementKey }: { documentKey: string; elementKey: string },\n) {\n return PropControllerHandles.getPropControllers(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n )\n}\n\nexport function getPropControllersHandle(\n state: State,\n { documentKey, elementKey }: { documentKey: string; elementKey: string },\n) {\n return PropControllerHandles.getPropControllersHandle(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n )\n}\n\nexport function getPropController(\n state: State,\n {\n documentKey,\n elementKey,\n propName,\n }: { documentKey: string; elementKey: string; propName: string },\n) {\n return PropControllerHandles.getPropController(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n propName,\n )\n}\n\n/**\n * Returns all document keys sorted by depth, i.e., parent documents come before child documents.\n */\nexport const getDocumentKeysSortedByDepth: (state: State) => string[] = createSelector(\n [getDocumentsStateSlice, getElementTreesSlice],\n (documents, elementTrees) => {\n return [...documents.keys()].sort((a, b) => (elementTrees.get(a)?.elements.has(b) ? -1 : 1))\n },\n)\n\nexport function getElement(\n state: State,\n documentKey: string,\n elementKey: string,\n): Documents.Element | null {\n return ElementTrees.getElement(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementId(state: State, documentKey: string, elementKey: string): string | null {\n return ElementTrees.getElementId(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementPropControllerDescriptors(\n state: State,\n documentKey: string,\n elementKey: string,\n): Record<string, PropControllers.PropControllerDescriptor> | null {\n const element = getElement(state, documentKey, elementKey)\n\n if (element == null || Documents.isElementReference(element)) return null\n\n return getComponentPropControllerDescriptors(state, element.type)\n}\n\nexport function getIsInBuilder(state: State): boolean {\n return state.isInBuilder\n}\n\nexport function getIsReadOnly(state: State): boolean {\n return state.isReadOnly\n}\n\nexport function getBuilderEditMode(state: State): BuilderEditMode.State {\n return state.builderEditMode\n}\n\nexport function getBreakpoints(state: State): Breakpoints.State {\n return state.breakpoints\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/state/read-only-state.ts"],"sourcesContent":["import { type ThunkDispatch } from '@reduxjs/toolkit'\n\nimport { createSelector } from 'reselect'\n\nimport * as SiteVersion from './modules/site-version'\nimport * as Locale from './modules/locale'\nimport * as Documents from './modules/read-only-documents'\nimport * as ElementTrees from './modules/element-trees'\nimport * as ReactComponents from './modules/react-components'\nimport * as ComponentsMeta from './modules/components-meta'\nimport * as PropControllers from './modules/prop-controllers'\nimport * as PropControllerHandles from './modules/prop-controller-handles'\nimport * as IsInBuilder from './modules/is-in-builder'\nimport * as IsReadOnly from './modules/is-read-only'\nimport * as BuilderEditMode from './modules/builder-edit-mode'\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { type Action } from './actions'\n\nexport type {\n Data,\n Document,\n DocumentReference,\n Element,\n ElementData,\n ElementReference,\n} from './modules/read-only-documents'\n\nexport {\n createBaseDocument,\n createDocumentReference,\n getRootElement,\n isElementReference,\n} from './modules/read-only-documents'\n\nexport type { ComponentType } from './modules/react-components'\nexport type { ComponentMeta } from './modules/components-meta'\n\nexport const reducers = {\n siteVersion: SiteVersion.reducer,\n isReadOnly: IsReadOnly.reducer,\n locale: Locale.reducer,\n documents: Documents.reducer,\n elementTrees: ElementTrees.reducer,\n reactComponents: ReactComponents.reducer,\n componentsMeta: ComponentsMeta.reducer,\n propControllers: PropControllers.reducer,\n propControllerHandles: PropControllerHandles.reducer,\n isInBuilder: IsInBuilder.reducer,\n builderEditMode: BuilderEditMode.reducer,\n breakpoints: Breakpoints.reducer,\n}\n\nexport type State = {\n siteVersion: SiteVersion.State\n isReadOnly: IsReadOnly.State\n locale: Locale.State\n documents: Documents.State\n elementTrees: ElementTrees.State\n reactComponents: ReactComponents.State\n componentsMeta: ComponentsMeta.State\n propControllers: PropControllers.State\n propControllerHandles: PropControllerHandles.State\n isInBuilder: IsInBuilder.State\n builderEditMode: BuilderEditMode.State\n breakpoints: Breakpoints.State\n}\n\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getElementTreesSlice(state: State): ElementTrees.State {\n return state.elementTrees\n}\n\nexport function getElements(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elements'] {\n return ElementTrees.getElements(getElementTreesSlice(state), documentKey)\n}\n\nexport function getElementIds(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elementIds'] {\n return ElementTrees.getElementIds(getElementTreesSlice(state), documentKey)\n}\n\nfunction getReactComponentsStateSlice(state: State): ReactComponents.State {\n return state.reactComponents\n}\n\nexport function getReactComponent(\n state: State,\n type: string,\n): ReactComponents.ComponentType | null {\n return ReactComponents.getReactComponent(getReactComponentsStateSlice(state), type)\n}\n\nfunction getComponentsMetaStateSlice(state: State): ComponentsMeta.State {\n return state.componentsMeta\n}\n\nexport function getComponentsMeta(state: State): Map<string, ComponentsMeta.ComponentMeta> {\n return ComponentsMeta.getComponentsMeta(getComponentsMetaStateSlice(state))\n}\n\nexport function getComponentMeta(state: State, type: string): ComponentsMeta.ComponentMeta | null {\n return ComponentsMeta.getComponentMeta(getComponentsMetaStateSlice(state), type)\n}\n\nfunction getPropControllersStateSlice(state: State): PropControllers.State {\n return state.propControllers\n}\n\nexport function getPropControllerDescriptors(state: State): PropControllers.State {\n return PropControllers.getPropControllerDescriptors(getPropControllersStateSlice(state))\n}\n\nexport function getComponentPropControllerDescriptors(\n state: State,\n componentType: string,\n): PropControllers.DescriptorsByProp | null {\n return PropControllers.getComponentPropControllerDescriptors(\n getPropControllersStateSlice(state),\n componentType,\n )\n}\n\nfunction getPropControllerHandlesStateSlice(state: State): PropControllerHandles.State {\n return state.propControllerHandles\n}\n\nexport function getPropControllers(\n state: State,\n { documentKey, elementKey }: { documentKey: string; elementKey: string },\n) {\n return PropControllerHandles.getPropControllers(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n )\n}\n\nexport function getPropControllersHandle(\n state: State,\n { documentKey, elementKey }: { documentKey: string; elementKey: string },\n) {\n return PropControllerHandles.getPropControllersHandle(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n )\n}\n\nexport function getPropController(\n state: State,\n {\n documentKey,\n elementKey,\n propName,\n }: { documentKey: string; elementKey: string; propName: string },\n) {\n return PropControllerHandles.getPropController(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n propName,\n )\n}\n\n/**\n * Returns all document keys sorted by depth, i.e., parent documents come before child documents.\n */\nexport const getDocumentKeysSortedByDepth: (state: State) => string[] = createSelector(\n [getDocumentsStateSlice, getElementTreesSlice],\n (documents, elementTrees) => {\n return [...documents.keys()].sort((a, b) => (elementTrees.get(a)?.elements.has(b) ? -1 : 1))\n },\n)\n\nexport function getElement(\n state: State,\n documentKey: string,\n elementKey: string,\n): Documents.Element | null {\n return ElementTrees.getElement(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementId(state: State, documentKey: string, elementKey: string): string | null {\n return ElementTrees.getElementId(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementPropControllerDescriptors(\n state: State,\n documentKey: string,\n elementKey: string,\n): Record<string, PropControllers.PropControllerDescriptor> | null {\n const element = getElement(state, documentKey, elementKey)\n\n if (element == null || Documents.isElementReference(element)) return null\n\n return getComponentPropControllerDescriptors(state, element.type)\n}\n\nexport function getIsInBuilder(state: State): boolean {\n return state.isInBuilder\n}\n\nexport function getIsReadOnly(state: State): boolean {\n return state.isReadOnly\n}\n\nexport function getBuilderEditMode(state: State): BuilderEditMode.State {\n return state.builderEditMode\n}\n\nexport function getBreakpoints(state: State): Breakpoints.State {\n return state.breakpoints\n}\n\nexport function getLocale(state: State): string | null {\n return state.locale\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/state/read-write-state.ts"],"sourcesContent":["import { combineReducers, type ThunkAction, type ThunkDispatch } from '@reduxjs/toolkit'\n\nimport * as Documents from './modules/read-write/read-write-documents'\nimport * as BoxModels from './modules/read-write/box-models'\nimport * as Pointer from './modules/read-write/pointer'\nimport * as ElementImperativeHandles from './modules/read-write/element-imperative-handles'\n\nimport { type Action } from './actions'\n\nimport { ElementImperativeHandle } from '../runtimes/react/element-imperative-handle'\n\nimport { BuilderAPIProxy } from './builder-api/proxy'\nimport * as ReadOnlyState from './read-only-state'\n\nexport type { Operation } from './modules/read-write/read-write-documents'\nexport type { BoxModelHandle } from './modules/read-write/box-models'\nexport { createBox, getBox, parse } from './modules/read-write/box-models'\n\nconst reducers = {\n ...ReadOnlyState.reducers,\n documents: Documents.reducer,\n boxModels: BoxModels.reducer,\n pointer: Pointer.reducer,\n elementImperativeHandles: ElementImperativeHandles.reducer,\n}\n\nexport function createRootReducer() {\n return combineReducers(reducers)\n}\n\nexport type State = Omit<ReadOnlyState.State, 'documents'> & {\n documents: Documents.State\n boxModels: BoxModels.State\n pointer: Pointer.State\n elementImperativeHandles: ElementImperativeHandles.State\n}\n\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocuments(state: State): Documents.State {\n return Documents.getDocuments(getDocumentsStateSlice(state))\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getBoxModelsStateSlice(state: State): BoxModels.State {\n return state.boxModels\n}\n\nexport function getMeasurables(state: State): Map<string, Map<string, BoxModels.Measurable>> {\n return BoxModels.getMeasurables(getBoxModelsStateSlice(state))\n}\n\nexport function getBoxModels(state: State): Map<string, Map<string, BoxModels.BoxModel>> {\n return BoxModels.getBoxModels(getBoxModelsStateSlice(state))\n}\n\nexport function getBoxModel(\n state: State,\n documentKey: string,\n elementKey: string,\n): BoxModels.BoxModel | null {\n return BoxModels.getBoxModel(getBoxModelsStateSlice(state), documentKey, elementKey)\n}\n\nexport function getPointer(state: State): Pointer.Point | null {\n return Pointer.getPointer(state.pointer)\n}\n\nexport function getElementImperativeHandles(\n state: State,\n): Map<string, Map<string, ElementImperativeHandle>> {\n return ElementImperativeHandles.getElementImperativeHandles(state.elementImperativeHandles)\n}\n\nexport function getElementImperativeHandlesContainingElement(\n state: State,\n element: Element,\n): Map<string, Map<string, ElementImperativeHandle>> {\n const elementImperativeHandles = getElementImperativeHandles(state)\n const filteredElementImperativeHandles = new Map<string, Map<string, ElementImperativeHandle>>()\n\n for (const [documentKey, byElementKey] of elementImperativeHandles) {\n const filteredByElementKey = new Map<string, ElementImperativeHandle>()\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n const handleElement = elementImperativeHandle.getDomNode()\n\n if (handleElement?.contains(element)) {\n filteredByElementKey.set(elementKey, elementImperativeHandle)\n }\n }\n\n if (filteredByElementKey.size > 0) {\n filteredElementImperativeHandles.set(documentKey, filteredByElementKey)\n }\n }\n\n return filteredElementImperativeHandles\n}\n\nexport function setupBuilderProxy(\n builderProxy: BuilderAPIProxy,\n): ThunkAction<VoidFunction, State, unknown, Action> {\n return dispatch => {\n return builderProxy.setup({ onHostAction: action => dispatch(action) })\n }\n}\n"],"mappings":"AAAA,SAAS,uBAA6D;AAEtE,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,aAAa;AACzB,YAAY,8BAA8B;AAO1C,YAAY,mBAAmB;AAI/B,SAAS,WAAW,QAAQ,aAAa;AAEzC,MAAM,WAAW;AAAA,EACf,GAAG,cAAc;AAAA,EACjB,WAAW,UAAU;AAAA,EACrB,WAAW,UAAU;AAAA,EACrB,SAAS,QAAQ;AAAA,EACjB,0BAA0B,yBAAyB;AACrD;AAEO,SAAS,oBAAoB;AAClC,SAAO,gBAAgB,QAAQ;AACjC;AAWA,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,aAAa,OAA+B;AAC1D,SAAO,UAAU,aAAa,uBAAuB,KAAK,CAAC;AAC7D;AAEO,SAAS,YAAY,OAAc,aAAgD;AACxF,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,WAAW;AACzE;AAEA,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,eAAe,OAA8D;AAC3F,SAAO,UAAU,eAAe,uBAAuB,KAAK,CAAC;AAC/D;AAEO,SAAS,aAAa,OAA4D;AACvF,SAAO,UAAU,aAAa,uBAAuB,KAAK,CAAC;AAC7D;AAEO,SAAS,YACd,OACA,aACA,YAC2B;AAC3B,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,aAAa,UAAU;AACrF;AAEO,SAAS,WAAW,OAAoC;AAC7D,SAAO,QAAQ,WAAW,MAAM,OAAO;AACzC;AAEO,SAAS,4BACd,OACmD;AACnD,SAAO,yBAAyB,4BAA4B,MAAM,wBAAwB;AAC5F;AAEO,SAAS,6CACd,OACA,SACmD;AACnD,QAAM,2BAA2B,4BAA4B,KAAK;AAClE,QAAM,mCAAmC,oBAAI,IAAkD;AAE/F,aAAW,CAAC,aAAa,YAAY,KAAK,0BAA0B;AAClE,UAAM,uBAAuB,oBAAI,IAAqC;AAEtE,eAAW,CAAC,YAAY,uBAAuB,KAAK,cAAc;AAChE,YAAM,gBAAgB,wBAAwB,WAAW;AAEzD,UAAI,eAAe,SAAS,OAAO,GAAG;AACpC,6BAAqB,IAAI,YAAY,uBAAuB;AAAA,MAC9D;AAAA,IACF;AAEA,QAAI,qBAAqB,OAAO,GAAG;AACjC,uCAAiC,IAAI,aAAa,oBAAoB;AAAA,IACxE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,cACmD;AACnD,SAAO,cAAY;AACjB,WAAO,aAAa,MAAM,EAAE,cAAc,YAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EACxE;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/state/read-write-state.ts"],"sourcesContent":["import { combineReducers, type ThunkAction, type ThunkDispatch } from '@reduxjs/toolkit'\n\nimport * as Documents from './modules/read-write/read-write-documents'\nimport * as BoxModels from './modules/read-write/box-models'\nimport * as Pointer from './modules/read-write/pointer'\nimport * as ElementImperativeHandles from './modules/read-write/element-imperative-handles'\n\nimport { type Action } from './actions'\n\nimport { ElementImperativeHandle } from '../runtimes/react/element-imperative-handle'\n\nimport { BuilderAPIProxy } from './builder-api/proxy'\nimport * as ReadOnlyState from './read-only-state'\n\nexport type { Operation } from './modules/read-write/read-write-documents'\nexport type { BoxModelHandle } from './modules/read-write/box-models'\nexport { createBox, getBox, parse } from './modules/read-write/box-models'\n\nconst reducers = {\n ...ReadOnlyState.reducers,\n documents: Documents.reducer,\n boxModels: BoxModels.reducer,\n pointer: Pointer.reducer,\n elementImperativeHandles: ElementImperativeHandles.reducer,\n}\n\nexport function createRootReducer() {\n return combineReducers(reducers)\n}\n\nexport type State = Omit<ReadOnlyState.State, 'documents'> & {\n documents: Documents.State\n boxModels: BoxModels.State\n pointer: Pointer.State\n elementImperativeHandles: ElementImperativeHandles.State\n}\n\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocuments(state: State): Documents.State {\n return Documents.getDocuments(getDocumentsStateSlice(state))\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getBoxModelsStateSlice(state: State): BoxModels.State {\n return state.boxModels\n}\n\nexport function getMeasurables(state: State): Map<string, Map<string, BoxModels.Measurable>> {\n return BoxModels.getMeasurables(getBoxModelsStateSlice(state))\n}\n\nexport function getBoxModels(state: State): Map<string, Map<string, BoxModels.BoxDisplayModel>> {\n return BoxModels.getBoxModels(getBoxModelsStateSlice(state))\n}\n\nexport function getBoxModel(\n state: State,\n documentKey: string,\n elementKey: string,\n): BoxModels.BoxDisplayModel | null {\n return BoxModels.getBoxModel(getBoxModelsStateSlice(state), documentKey, elementKey)\n}\n\nexport function getPointer(state: State): Pointer.Point | null {\n return Pointer.getPointer(state.pointer)\n}\n\nexport function getElementImperativeHandles(\n state: State,\n): Map<string, Map<string, ElementImperativeHandle>> {\n return ElementImperativeHandles.getElementImperativeHandles(state.elementImperativeHandles)\n}\n\nexport function getElementImperativeHandlesContainingElement(\n state: State,\n element: Element,\n): Map<string, Map<string, ElementImperativeHandle>> {\n const elementImperativeHandles = getElementImperativeHandles(state)\n const filteredElementImperativeHandles = new Map<string, Map<string, ElementImperativeHandle>>()\n\n for (const [documentKey, byElementKey] of elementImperativeHandles) {\n const filteredByElementKey = new Map<string, ElementImperativeHandle>()\n\n for (const [elementKey, elementImperativeHandle] of byElementKey) {\n const handleElement = elementImperativeHandle.getDomNode()\n\n if (handleElement?.contains(element)) {\n filteredByElementKey.set(elementKey, elementImperativeHandle)\n }\n }\n\n if (filteredByElementKey.size > 0) {\n filteredElementImperativeHandles.set(documentKey, filteredByElementKey)\n }\n }\n\n return filteredElementImperativeHandles\n}\n\nexport function setupBuilderProxy(\n builderProxy: BuilderAPIProxy,\n): ThunkAction<VoidFunction, State, unknown, Action> {\n return dispatch => {\n return builderProxy.setup({ onHostAction: action => dispatch(action) })\n }\n}\n"],"mappings":"AAAA,SAAS,uBAA6D;AAEtE,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,aAAa;AACzB,YAAY,8BAA8B;AAO1C,YAAY,mBAAmB;AAI/B,SAAS,WAAW,QAAQ,aAAa;AAEzC,MAAM,WAAW;AAAA,EACf,GAAG,cAAc;AAAA,EACjB,WAAW,UAAU;AAAA,EACrB,WAAW,UAAU;AAAA,EACrB,SAAS,QAAQ;AAAA,EACjB,0BAA0B,yBAAyB;AACrD;AAEO,SAAS,oBAAoB;AAClC,SAAO,gBAAgB,QAAQ;AACjC;AAWA,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,aAAa,OAA+B;AAC1D,SAAO,UAAU,aAAa,uBAAuB,KAAK,CAAC;AAC7D;AAEO,SAAS,YAAY,OAAc,aAAgD;AACxF,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,WAAW;AACzE;AAEA,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,eAAe,OAA8D;AAC3F,SAAO,UAAU,eAAe,uBAAuB,KAAK,CAAC;AAC/D;AAEO,SAAS,aAAa,OAAmE;AAC9F,SAAO,UAAU,aAAa,uBAAuB,KAAK,CAAC;AAC7D;AAEO,SAAS,YACd,OACA,aACA,YACkC;AAClC,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,aAAa,UAAU;AACrF;AAEO,SAAS,WAAW,OAAoC;AAC7D,SAAO,QAAQ,WAAW,MAAM,OAAO;AACzC;AAEO,SAAS,4BACd,OACmD;AACnD,SAAO,yBAAyB,4BAA4B,MAAM,wBAAwB;AAC5F;AAEO,SAAS,6CACd,OACA,SACmD;AACnD,QAAM,2BAA2B,4BAA4B,KAAK;AAClE,QAAM,mCAAmC,oBAAI,IAAkD;AAE/F,aAAW,CAAC,aAAa,YAAY,KAAK,0BAA0B;AAClE,UAAM,uBAAuB,oBAAI,IAAqC;AAEtE,eAAW,CAAC,YAAY,uBAAuB,KAAK,cAAc;AAChE,YAAM,gBAAgB,wBAAwB,WAAW;AAEzD,UAAI,eAAe,SAAS,OAAO,GAAG;AACpC,6BAAqB,IAAI,YAAY,uBAAuB;AAAA,MAC9D;AAAA,IACF;AAEA,QAAI,qBAAqB,OAAO,GAAG;AACjC,uCAAiC,IAAI,aAAa,oBAAoB;AAAA,IACxE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,kBACd,cACmD;AACnD,SAAO,cAAY;AACjB,WAAO,aAAa,MAAM,EAAE,cAAc,YAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EACxE;AACF;","names":[]}
@@ -1,4 +1,5 @@
1
1
  import {
2
+ Tuple,
2
3
  configureStore as configureReduxStore,
3
4
  combineReducers,
4
5
  compose
@@ -8,8 +9,45 @@ import { BuilderActionTypes } from "./builder-api/actions";
8
9
  import { HostActionTypes } from "./host-api";
9
10
  import * as Breakpoints from "./modules/breakpoints";
10
11
  import { readOnlyElementTreeMiddleware } from "./middleware/read-only-element-tree";
11
- import * as ReadOnlyState from "./read-only-state";
12
12
  import { makeswiftApiClientSyncMiddleware } from "./middleware/makeswift-api-client-sync";
13
+ import * as ReadOnlyState from "./read-only-state";
14
+ const configureStore = ({
15
+ name,
16
+ preloadedState,
17
+ enhancers,
18
+ middleware
19
+ }) => {
20
+ const store = configureReduxStore({
21
+ reducer: combineReducers(ReadOnlyState.reducers),
22
+ preloadedState,
23
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat([
24
+ readOnlyElementTreeMiddleware(),
25
+ ...middleware ? middleware() : []
26
+ ]),
27
+ enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(enhancers()),
28
+ devTools: devToolsConfig({
29
+ name: `${name} (${(/* @__PURE__ */ new Date()).toISOString()})`,
30
+ actionsDenylist: [
31
+ HostActionTypes.BUILDER_POINTER_MOVE,
32
+ BuilderActionTypes.HANDLE_POINTER_MOVE,
33
+ BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE
34
+ ]
35
+ })
36
+ });
37
+ return store;
38
+ };
39
+ function configureProtoStore({
40
+ name,
41
+ breakpoints
42
+ }) {
43
+ return configureStore({
44
+ name,
45
+ preloadedState: {
46
+ breakpoints: Breakpoints.getInitialState(breakpoints)
47
+ },
48
+ enhancers: () => new Tuple()
49
+ });
50
+ }
13
51
  function conditionalReadWriteMiddleware(middlewareRef) {
14
52
  let readWriteActionBuffer = [];
15
53
  let middlewares = null;
@@ -46,18 +84,17 @@ function conditionalReadWriteMiddleware(middlewareRef) {
46
84
  };
47
85
  });
48
86
  }
49
- function withReadWriteState(loadReadWriteState) {
87
+ function withMixin(mixin) {
50
88
  return (next) => (reducer, preloadedState) => ({
51
89
  ...next(reducer, preloadedState),
52
- loadReadWriteState
90
+ ...mixin
53
91
  });
54
92
  }
55
- function configureStore({
93
+ function configureReadWriteStore({
56
94
  name,
57
95
  appOrigin,
58
96
  hostApiClient,
59
- preloadedState,
60
- breakpoints
97
+ preloadedState
61
98
  }) {
62
99
  const readWriteMiddlewareRef = {
63
100
  current: null
@@ -96,58 +133,48 @@ function configureStore({
96
133
  readWriteSetupPromise = null;
97
134
  }
98
135
  };
99
- const store = configureReduxStore({
100
- reducer: combineReducers(ReadOnlyState.reducers),
101
- preloadedState: {
102
- ...preloadedState,
103
- breakpoints: Breakpoints.getInitialState(breakpoints ?? preloadedState?.breakpoints)
104
- },
105
- middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat([
106
- readOnlyElementTreeMiddleware(),
136
+ const store = configureStore({
137
+ name,
138
+ preloadedState,
139
+ middleware: () => [
107
140
  makeswiftApiClientSyncMiddleware(hostApiClient),
108
141
  conditionalReadWriteMiddleware(readWriteMiddlewareRef)
109
- ]),
110
- enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(
111
- withReadWriteState(async ({ isReadOnly }) => {
112
- if (isReadOnly) {
113
- if (refCount > 0) {
114
- console.error("Read-write state mismatch", {
115
- isReadOnly,
116
- refCount
117
- });
142
+ ],
143
+ enhancers: () => new Tuple(
144
+ withMixin({
145
+ hostApiClient,
146
+ loadReadWriteStateIfNeeded: async () => {
147
+ const { isReadOnly } = store.getState();
148
+ if (isReadOnly) {
149
+ if (refCount > 0) {
150
+ console.error("Read-write state mismatch", { isReadOnly, refCount });
151
+ }
152
+ return () => {
153
+ };
118
154
  }
155
+ await loadReadWriteState();
156
+ refCount += 1;
157
+ let didCleanup = false;
119
158
  return () => {
159
+ if (didCleanup) {
160
+ return;
161
+ }
162
+ didCleanup = true;
163
+ refCount -= 1;
164
+ if (refCount === 0 && readWriteCleanup != null) {
165
+ readWriteCleanup();
166
+ readWriteCleanup = null;
167
+ }
120
168
  };
121
169
  }
122
- await loadReadWriteState();
123
- refCount += 1;
124
- let didCleanup = false;
125
- return () => {
126
- if (didCleanup) {
127
- return;
128
- }
129
- didCleanup = true;
130
- refCount -= 1;
131
- if (refCount === 0 && readWriteCleanup != null) {
132
- readWriteCleanup();
133
- readWriteCleanup = null;
134
- }
135
- };
136
170
  })
137
- ),
138
- devTools: devToolsConfig({
139
- name: `${name} (${(/* @__PURE__ */ new Date()).toISOString()})`,
140
- actionsDenylist: [
141
- HostActionTypes.BUILDER_POINTER_MOVE,
142
- BuilderActionTypes.HANDLE_POINTER_MOVE,
143
- BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE
144
- ]
145
- })
171
+ )
146
172
  });
147
173
  return store;
148
174
  }
149
175
  export {
150
176
  conditionalReadWriteMiddleware,
151
- configureStore
177
+ configureProtoStore,
178
+ configureReadWriteStore
152
179
  };
153
180
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/state/store.ts"],"sourcesContent":["import {\n type Middleware,\n type StoreEnhancer,\n type MiddlewareAPI,\n configureStore as configureReduxStore,\n combineReducers,\n compose,\n} from '@reduxjs/toolkit'\n\nimport { MakeswiftHostApiClient } from '../api/client'\n\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\nimport { BuilderActionTypes } from './builder-api/actions'\nimport { HostActionTypes } from './host-api'\n\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { readOnlyElementTreeMiddleware } from './middleware/read-only-element-tree'\n\nimport { type Action } from './actions'\nimport { type State as ReadWriteState } from './read-write-state'\nimport * as ReadOnlyState from './read-only-state'\n\nimport {\n type State,\n type Dispatch,\n type ReadOnlyReducer,\n type ReadWriteDispatch,\n} from './unified-state'\nimport { makeswiftApiClientSyncMiddleware } from './middleware/makeswift-api-client-sync'\n\ntype ReadWriteMiddleware = ReturnType<\n typeof import('./middleware/read-write').createReadWriteMiddleware\n>\n\ntype ReadWriteMiddlewareRef = {\n current: ReadWriteMiddleware | null\n}\n\nexport function conditionalReadWriteMiddleware(\n middlewareRef: ReadWriteMiddlewareRef,\n): Middleware<Dispatch, State, Dispatch> {\n let readWriteActionBuffer: Action[] = []\n let middlewares: ReadWriteMiddleware | null = null\n let enhancedDispatch: Dispatch | null = null\n\n return actionMiddleware(({ dispatch, getState }) => next => {\n return (action: Action) => {\n const state = getState()\n\n if (middlewareRef.current == null) {\n if (!state.isReadOnly) {\n // because switching to the read-write state is an asynchronous operation,\n // we need to buffer all actions dispatched after the isReadOnly state is\n // set to false but before the read-write middleware is installed\n readWriteActionBuffer.push(action)\n }\n\n return next(action)\n }\n\n if (state.isReadOnly) {\n console.error('Read-write state mismatch', {\n isReadOnly: state.isReadOnly,\n middlewareRef: middlewareRef.current,\n siteVersion: state.siteVersion,\n })\n }\n\n // build and cache the enhanced dispatch chain when read-write middleware is installed\n if (enhancedDispatch == null || middlewares !== middlewareRef.current) {\n middlewares = middlewareRef.current\n\n const middlewareApi = { dispatch, getState } as MiddlewareAPI<\n ReadWriteDispatch,\n ReadWriteState\n >\n\n enhancedDispatch = compose<Dispatch>(...middlewares.map(mw => mw(middlewareApi)))(next)\n }\n\n // dispatch buffered actions, if any\n if (readWriteActionBuffer.length > 0) {\n const readWriteActions = [...readWriteActionBuffer]\n readWriteActionBuffer = []\n\n // Note that we're rerunning the actions through the entire middleware chain,\n // including the read-only middleware and the reducers, some of which have\n // already processed these actions once. This is safe to do because actions that\n // are run as part of page initialization are idempotent.\n for (const bufferedAction of readWriteActions) {\n enhancedDispatch(bufferedAction)\n }\n }\n\n return enhancedDispatch(action)\n }\n })\n}\n\ninterface ReadWriteStateMixin {\n loadReadWriteState: ({ isReadOnly }: { isReadOnly: boolean }) => Promise<() => void>\n}\n\nfunction withReadWriteState(\n loadReadWriteState: ReadWriteStateMixin['loadReadWriteState'],\n): StoreEnhancer<ReadWriteStateMixin> {\n return next => (reducer, preloadedState?) => ({\n ...next(reducer, preloadedState),\n loadReadWriteState,\n })\n}\n\nexport function configureStore({\n name,\n appOrigin,\n hostApiClient,\n preloadedState,\n breakpoints,\n}: {\n name: string\n appOrigin: string\n hostApiClient: MakeswiftHostApiClient\n preloadedState: Partial<State> | null\n breakpoints?: Breakpoints.State\n}) {\n const readWriteMiddlewareRef: ReadWriteMiddlewareRef = {\n current: null,\n }\n\n let refCount = 0\n let readWriteCleanup: (() => void) | null = null\n let readWriteSetupPromise: Promise<void> | null = null\n\n const loadReadWriteState = async (): Promise<void> => {\n if (readWriteCleanup != null) {\n return\n }\n\n if (readWriteSetupPromise != null) {\n await readWriteSetupPromise\n return\n }\n\n readWriteSetupPromise = (async () => {\n // import all the modules needed for read-write mode before proceeding with\n // the setup to avoid race conditions when `setup` is called concurrently\n // in two different page regions\n const { BuilderAPIProxy } = await import('./builder-api/proxy')\n const { createRootReducer, setupBuilderProxy } = await import('./read-write-state')\n const { createReadWriteMiddleware } = await import('./middleware/read-write')\n\n // IMPORTANT: only synchronous code after this point\n\n // with all modules imported, check if another concurrent setup already\n // initialized the read-write middleware\n if (readWriteMiddlewareRef.current != null) {\n return\n }\n\n store.replaceReducer(createRootReducer() as ReadOnlyReducer)\n\n const builderProxy = new BuilderAPIProxy({ appOrigin })\n readWriteMiddlewareRef.current = createReadWriteMiddleware({ builderProxy })\n\n const dispatch = store.dispatch as ReadWriteDispatch\n const builderProxyCleanup = dispatch(setupBuilderProxy(builderProxy))\n\n readWriteCleanup = () => {\n readWriteMiddlewareRef.current = null\n builderProxyCleanup()\n }\n })()\n\n try {\n await readWriteSetupPromise\n } finally {\n readWriteSetupPromise = null\n }\n }\n\n const store = configureReduxStore({\n reducer: combineReducers(ReadOnlyState.reducers),\n\n preloadedState: {\n ...preloadedState,\n breakpoints: Breakpoints.getInitialState(breakpoints ?? preloadedState?.breakpoints),\n },\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat([\n readOnlyElementTreeMiddleware(),\n makeswiftApiClientSyncMiddleware(hostApiClient),\n conditionalReadWriteMiddleware(readWriteMiddlewareRef),\n ]),\n\n enhancers: getDefaultEnhancers =>\n getDefaultEnhancers().concat(\n withReadWriteState(async ({ isReadOnly }) => {\n if (isReadOnly) {\n if (refCount > 0) {\n console.error('Read-write state mismatch', {\n isReadOnly,\n refCount,\n })\n }\n\n return () => {}\n }\n\n await loadReadWriteState()\n refCount += 1\n\n let didCleanup = false\n return () => {\n if (didCleanup) {\n return\n }\n\n didCleanup = true\n refCount -= 1\n if (refCount === 0 && readWriteCleanup != null) {\n readWriteCleanup()\n readWriteCleanup = null\n }\n }\n }),\n ),\n\n devTools: devToolsConfig({\n name: `${name} (${new Date().toISOString()})`,\n actionsDenylist: [\n HostActionTypes.BUILDER_POINTER_MOVE,\n BuilderActionTypes.HANDLE_POINTER_MOVE,\n BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE,\n ],\n }),\n })\n\n return store\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/state/store.ts"],"sourcesContent":["import {\n type Middleware,\n type StoreEnhancer,\n type MiddlewareAPI,\n Tuple,\n configureStore as configureReduxStore,\n combineReducers,\n compose,\n} from '@reduxjs/toolkit'\n\nimport { MakeswiftHostApiClient } from '../api/client'\n\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\nimport { BuilderActionTypes } from './builder-api/actions'\nimport { HostActionTypes } from './host-api'\n\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { readOnlyElementTreeMiddleware } from './middleware/read-only-element-tree'\nimport { makeswiftApiClientSyncMiddleware } from './middleware/makeswift-api-client-sync'\n\nimport { type Action } from './actions'\n\nimport { type State as ReadWriteState } from './read-write-state'\nimport * as ReadOnlyState from './read-only-state'\nimport {\n type State,\n type Dispatch,\n type ReadOnlyReducer,\n type ReadWriteDispatch,\n} from './unified-state'\n\nexport { type State } from './unified-state'\n\nconst configureStore = <Items extends readonly StoreEnhancer[] = []>({\n name,\n preloadedState,\n enhancers,\n middleware,\n}: {\n name: string\n preloadedState: Partial<State>\n enhancers: () => Tuple<Items>\n middleware?: () => Middleware[]\n}) => {\n const store = configureReduxStore({\n reducer: combineReducers(ReadOnlyState.reducers),\n preloadedState,\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat([\n readOnlyElementTreeMiddleware(),\n ...(middleware ? middleware() : []),\n ]),\n\n enhancers: getDefaultEnhancers => getDefaultEnhancers().concat(enhancers()),\n\n devTools: devToolsConfig({\n name: `${name} (${new Date().toISOString()})`,\n actionsDenylist: [\n HostActionTypes.BUILDER_POINTER_MOVE,\n BuilderActionTypes.HANDLE_POINTER_MOVE,\n BuilderActionTypes.ELEMENT_FROM_POINT_CHANGE,\n ],\n }),\n })\n\n return store\n}\n\nexport function configureProtoStore({\n name,\n breakpoints,\n}: {\n name: string\n breakpoints: Breakpoints.State | undefined\n}) {\n return configureStore({\n name,\n preloadedState: {\n breakpoints: Breakpoints.getInitialState(breakpoints),\n },\n enhancers: () => new Tuple(),\n })\n}\n\nexport type ProtoStore = ReturnType<typeof configureProtoStore>\n\ntype ReadWriteMiddleware = ReturnType<\n typeof import('./middleware/read-write').createReadWriteMiddleware\n>\n\ntype ReadWriteMiddlewareRef = {\n current: ReadWriteMiddleware | null\n}\n\nexport function conditionalReadWriteMiddleware(\n middlewareRef: ReadWriteMiddlewareRef,\n): Middleware<Dispatch, State, Dispatch> {\n let readWriteActionBuffer: Action[] = []\n let middlewares: ReadWriteMiddleware | null = null\n let enhancedDispatch: Dispatch | null = null\n\n return actionMiddleware(({ dispatch, getState }) => next => {\n return (action: Action) => {\n const state = getState()\n\n if (middlewareRef.current == null) {\n if (!state.isReadOnly) {\n // because switching to the read-write state is an asynchronous operation,\n // we need to buffer all actions dispatched after the isReadOnly state is\n // set to false but before the read-write middleware is installed\n readWriteActionBuffer.push(action)\n }\n\n return next(action)\n }\n\n if (state.isReadOnly) {\n console.error('Read-write state mismatch', {\n isReadOnly: state.isReadOnly,\n middlewareRef: middlewareRef.current,\n siteVersion: state.siteVersion,\n })\n }\n\n // build and cache the enhanced dispatch chain when read-write middleware is installed\n if (enhancedDispatch == null || middlewares !== middlewareRef.current) {\n middlewares = middlewareRef.current\n\n const middlewareApi = { dispatch, getState } as MiddlewareAPI<\n ReadWriteDispatch,\n ReadWriteState\n >\n\n enhancedDispatch = compose<Dispatch>(...middlewares.map(mw => mw(middlewareApi)))(next)\n }\n\n // dispatch buffered actions, if any\n if (readWriteActionBuffer.length > 0) {\n const readWriteActions = [...readWriteActionBuffer]\n readWriteActionBuffer = []\n\n // Note that we're rerunning the actions through the entire middleware chain,\n // including the read-only middleware and the reducers, some of which have\n // already processed these actions once. This is safe to do because actions that\n // are run as part of page initialization are idempotent.\n for (const bufferedAction of readWriteActions) {\n enhancedDispatch(bufferedAction)\n }\n }\n\n return enhancedDispatch(action)\n }\n })\n}\n\nexport interface ReadWriteStateMixin {\n readonly hostApiClient: MakeswiftHostApiClient\n\n loadReadWriteStateIfNeeded(): Promise<() => void>\n}\n\nfunction withMixin<M extends {}>(mixin: M): StoreEnhancer<M> {\n return next => (reducer, preloadedState?) => ({\n ...next(reducer, preloadedState),\n ...mixin,\n })\n}\n\nexport function configureReadWriteStore({\n name,\n appOrigin,\n hostApiClient,\n preloadedState,\n}: {\n name: string\n appOrigin: string\n hostApiClient: MakeswiftHostApiClient\n preloadedState: Partial<State>\n}) {\n const readWriteMiddlewareRef: ReadWriteMiddlewareRef = {\n current: null,\n }\n\n let refCount = 0\n let readWriteCleanup: (() => void) | null = null\n let readWriteSetupPromise: Promise<void> | null = null\n\n const loadReadWriteState = async (): Promise<void> => {\n if (readWriteCleanup != null) {\n return\n }\n\n if (readWriteSetupPromise != null) {\n await readWriteSetupPromise\n return\n }\n\n readWriteSetupPromise = (async () => {\n // import all the modules needed for read-write mode before proceeding with\n // the setup to avoid race conditions when `setup` is called concurrently\n // in two different page regions\n const { BuilderAPIProxy } = await import('./builder-api/proxy')\n const { createRootReducer, setupBuilderProxy } = await import('./read-write-state')\n const { createReadWriteMiddleware } = await import('./middleware/read-write')\n\n // IMPORTANT: only synchronous code after this point\n\n // with all modules imported, check if another concurrent setup already\n // initialized the read-write middleware\n if (readWriteMiddlewareRef.current != null) {\n return\n }\n\n store.replaceReducer(createRootReducer() as ReadOnlyReducer)\n\n const builderProxy = new BuilderAPIProxy({ appOrigin })\n readWriteMiddlewareRef.current = createReadWriteMiddleware({ builderProxy })\n\n const dispatch = store.dispatch as ReadWriteDispatch\n const builderProxyCleanup = dispatch(setupBuilderProxy(builderProxy))\n\n readWriteCleanup = () => {\n readWriteMiddlewareRef.current = null\n builderProxyCleanup()\n }\n })()\n\n try {\n await readWriteSetupPromise\n } finally {\n readWriteSetupPromise = null\n }\n }\n\n const store = configureStore({\n name,\n preloadedState,\n\n middleware: () => [\n makeswiftApiClientSyncMiddleware(hostApiClient),\n conditionalReadWriteMiddleware(readWriteMiddlewareRef),\n ],\n\n enhancers: () =>\n new Tuple(\n withMixin<ReadWriteStateMixin>({\n hostApiClient,\n loadReadWriteStateIfNeeded: async () => {\n const { isReadOnly } = store.getState()\n\n if (isReadOnly) {\n if (refCount > 0) {\n console.error('Read-write state mismatch', { isReadOnly, refCount })\n }\n\n return () => {}\n }\n\n await loadReadWriteState()\n refCount += 1\n\n let didCleanup = false\n return () => {\n if (didCleanup) {\n return\n }\n\n didCleanup = true\n refCount -= 1\n if (refCount === 0 && readWriteCleanup != null) {\n readWriteCleanup()\n readWriteCleanup = null\n }\n }\n },\n }),\n ),\n })\n\n return store\n}\n\nexport type Store = ReturnType<typeof configureReadWriteStore>\n"],"mappings":"AAAA;AAAA,EAIE;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,OACK;AAIP,SAAS,kBAAkB,mBAAmB,sBAAsB;AACpE,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,YAAY,iBAAiB;AAE7B,SAAS,qCAAqC;AAC9C,SAAS,wCAAwC;AAKjD,YAAY,mBAAmB;AAU/B,MAAM,iBAAiB,CAA8C;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,QAAQ,oBAAoB;AAAA,IAChC,SAAS,gBAAgB,cAAc,QAAQ;AAAA,IAC/C;AAAA,IAEA,YAAY,0BACV,qBAAqB,iBAAiB,EAAE,OAAO;AAAA,MAC7C,8BAA8B;AAAA,MAC9B,GAAI,aAAa,WAAW,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,IAEH,WAAW,yBAAuB,oBAAoB,EAAE,OAAO,UAAU,CAAC;AAAA,IAE1E,UAAU,eAAe;AAAA,MACvB,MAAM,GAAG,IAAI,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,MAC1C,iBAAiB;AAAA,QACf,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAGG;AACD,SAAO,eAAe;AAAA,IACpB;AAAA,IACA,gBAAgB;AAAA,MACd,aAAa,YAAY,gBAAgB,WAAW;AAAA,IACtD;AAAA,IACA,WAAW,MAAM,IAAI,MAAM;AAAA,EAC7B,CAAC;AACH;AAYO,SAAS,+BACd,eACuC;AACvC,MAAI,wBAAkC,CAAC;AACvC,MAAI,cAA0C;AAC9C,MAAI,mBAAoC;AAExC,SAAO,iBAAiB,CAAC,EAAE,UAAU,SAAS,MAAM,UAAQ;AAC1D,WAAO,CAAC,WAAmB;AACzB,YAAM,QAAQ,SAAS;AAEvB,UAAI,cAAc,WAAW,MAAM;AACjC,YAAI,CAAC,MAAM,YAAY;AAIrB,gCAAsB,KAAK,MAAM;AAAA,QACnC;AAEA,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,UAAI,MAAM,YAAY;AACpB,gBAAQ,MAAM,6BAA6B;AAAA,UACzC,YAAY,MAAM;AAAA,UAClB,eAAe,cAAc;AAAA,UAC7B,aAAa,MAAM;AAAA,QACrB,CAAC;AAAA,MACH;AAGA,UAAI,oBAAoB,QAAQ,gBAAgB,cAAc,SAAS;AACrE,sBAAc,cAAc;AAE5B,cAAM,gBAAgB,EAAE,UAAU,SAAS;AAK3C,2BAAmB,QAAkB,GAAG,YAAY,IAAI,QAAM,GAAG,aAAa,CAAC,CAAC,EAAE,IAAI;AAAA,MACxF;AAGA,UAAI,sBAAsB,SAAS,GAAG;AACpC,cAAM,mBAAmB,CAAC,GAAG,qBAAqB;AAClD,gCAAwB,CAAC;AAMzB,mBAAW,kBAAkB,kBAAkB;AAC7C,2BAAiB,cAAc;AAAA,QACjC;AAAA,MACF;AAEA,aAAO,iBAAiB,MAAM;AAAA,IAChC;AAAA,EACF,CAAC;AACH;AAQA,SAAS,UAAwB,OAA4B;AAC3D,SAAO,UAAQ,CAAC,SAAS,oBAAqB;AAAA,IAC5C,GAAG,KAAK,SAAS,cAAc;AAAA,IAC/B,GAAG;AAAA,EACL;AACF;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,yBAAiD;AAAA,IACrD,SAAS;AAAA,EACX;AAEA,MAAI,WAAW;AACf,MAAI,mBAAwC;AAC5C,MAAI,wBAA8C;AAElD,QAAM,qBAAqB,YAA2B;AACpD,QAAI,oBAAoB,MAAM;AAC5B;AAAA,IACF;AAEA,QAAI,yBAAyB,MAAM;AACjC,YAAM;AACN;AAAA,IACF;AAEA,6BAAyB,YAAY;AAInC,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,qBAAqB;AAC9D,YAAM,EAAE,mBAAmB,kBAAkB,IAAI,MAAM,OAAO,oBAAoB;AAClF,YAAM,EAAE,0BAA0B,IAAI,MAAM,OAAO,yBAAyB;AAM5E,UAAI,uBAAuB,WAAW,MAAM;AAC1C;AAAA,MACF;AAEA,YAAM,eAAe,kBAAkB,CAAoB;AAE3D,YAAM,eAAe,IAAI,gBAAgB,EAAE,UAAU,CAAC;AACtD,6BAAuB,UAAU,0BAA0B,EAAE,aAAa,CAAC;AAE3E,YAAM,WAAW,MAAM;AACvB,YAAM,sBAAsB,SAAS,kBAAkB,YAAY,CAAC;AAEpE,yBAAmB,MAAM;AACvB,+BAAuB,UAAU;AACjC,4BAAoB;AAAA,MACtB;AAAA,IACF,GAAG;AAEH,QAAI;AACF,YAAM;AAAA,IACR,UAAE;AACA,8BAAwB;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,QAAQ,eAAe;AAAA,IAC3B;AAAA,IACA;AAAA,IAEA,YAAY,MAAM;AAAA,MAChB,iCAAiC,aAAa;AAAA,MAC9C,+BAA+B,sBAAsB;AAAA,IACvD;AAAA,IAEA,WAAW,MACT,IAAI;AAAA,MACF,UAA+B;AAAA,QAC7B;AAAA,QACA,4BAA4B,YAAY;AACtC,gBAAM,EAAE,WAAW,IAAI,MAAM,SAAS;AAEtC,cAAI,YAAY;AACd,gBAAI,WAAW,GAAG;AAChB,sBAAQ,MAAM,6BAA6B,EAAE,YAAY,SAAS,CAAC;AAAA,YACrE;AAEA,mBAAO,MAAM;AAAA,YAAC;AAAA,UAChB;AAEA,gBAAM,mBAAmB;AACzB,sBAAY;AAEZ,cAAI,aAAa;AACjB,iBAAO,MAAM;AACX,gBAAI,YAAY;AACd;AAAA,YACF;AAEA,yBAAa;AACb,wBAAY;AACZ,gBAAI,aAAa,KAAK,oBAAoB,MAAM;AAC9C,+BAAiB;AACjB,iCAAmB;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACJ,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/unstable-framework-support/index.ts"],"sourcesContent":["export {\n type SiteVersion,\n serializeSiteVersion,\n deserializeSiteVersion,\n secondsUntilSiteVersionExpiration,\n} from '../api/site-version'\n\nexport {\n type ApiHandlerUserConfig,\n createApiHandler,\n type SitePublishedWebhookPayloadData,\n} from '../api-handler'\nexport { SET_COOKIE_HEADER, cookieSettingOptions } from '../api-handler/cookies'\nexport { REDIRECT_SEARCH_PARAM, redirectLiveHandler } from '../api-handler/handlers/redirect-live'\nexport { toApiRequest, pipeResponseTo } from '../api-handler/node-request-response'\nexport { MAKESWIFT_SITE_VERSION_COOKIE, SearchParams } from '../api-handler/preview'\n\nexport { MakeswiftClient } from '../client'\n\nexport { type BreakpointsInput as Breakpoints } from '../state/modules/breakpoints'\n\nexport {\n FrameworkContext,\n DefaultHead,\n DefaultHeadSnippet,\n DefaultImage,\n} from '../runtimes/react/components/framework-context'\n\nexport { MakeswiftComponent } from '../runtimes/react/components/MakeswiftComponent'\nexport { Page } from '../runtimes/react/components/page'\nexport { RuntimeProvider } from '../runtimes/react/components/RuntimeProvider'\nexport { Slot } from '../runtimes/react/components/Slot'\n\nexport { GoogleFontLink } from '../runtimes/react/components/GoogleFontLink'\nexport { MakeswiftFonts } from '../runtimes/react/components/MakeswiftFonts'\n\nexport {\n createRootStyleCache,\n RootStyleRegistry,\n styleTagHtml,\n StyleTagSSR,\n type RootStyleProps,\n} from '../runtimes/react/root-style-registry'\n\nexport { ReactRuntime } from '../runtimes/react/react-runtime'\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EAEE;AAAA,OAEK;AACP,SAAS,mBAAmB,4BAA4B;AACxD,SAAS,uBAAuB,2BAA2B;AAC3D,SAAS,cAAc,sBAAsB;AAC7C,SAAS,+BAA+B,oBAAoB;AAE5D,SAAS,uBAAuB;AAIhC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,SAAS,uBAAuB;AAChC,SAAS,YAAY;AAErB,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,oBAAoB;","names":[]}
1
+ {"version":3,"sources":["../../../src/unstable-framework-support/index.ts"],"sourcesContent":["export {\n type SiteVersion,\n serializeSiteVersion,\n deserializeSiteVersion,\n secondsUntilSiteVersionExpiration,\n} from '../api/site-version'\n\nexport {\n type ApiHandlerUserConfig,\n createApiHandler,\n type SitePublishedWebhookPayloadData,\n} from '../api-handler'\nexport { SET_COOKIE_HEADER, cookieSettingOptions } from '../api-handler/cookies'\nexport { REDIRECT_SEARCH_PARAM, redirectLiveHandler } from '../api-handler/handlers/redirect-live'\nexport { toApiRequest, pipeResponseTo } from '../api-handler/node-request-response'\nexport { MAKESWIFT_SITE_VERSION_COOKIE, SearchParams } from '../api-handler/preview'\n\nexport { MakeswiftClient } from '../client'\n\nexport { type BreakpointsInput as Breakpoints } from '../state/modules/breakpoints'\n\nexport {\n FrameworkContext,\n DefaultHead,\n DefaultHeadSnippet,\n DefaultImage,\n} from '../runtimes/react/components/framework-context'\n\nexport { MakeswiftComponent } from '../runtimes/react/components/MakeswiftComponent'\nexport { Page } from '../runtimes/react/components/page'\nexport { RuntimeProvider } from '../runtimes/react/components/RuntimeProvider'\nexport { Slot } from '../runtimes/react/components/Slot'\n\nexport { GoogleFontLink } from '../runtimes/react/components/GoogleFontLink'\nexport { MakeswiftFonts } from '../runtimes/react/components/MakeswiftFonts'\n\nexport {\n createRootStyleCache,\n RootStyleRegistry,\n styleTagHtml,\n StyleTagSSR,\n type RootStyleProps,\n} from '../runtimes/react/root-style-registry'\n\nexport { ReactRuntime, type StoreKey } from '../runtimes/react/react-runtime'\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EAEE;AAAA,OAEK;AACP,SAAS,mBAAmB,4BAA4B;AACxD,SAAS,uBAAuB,2BAA2B;AAC3D,SAAS,cAAc,sBAAsB;AAC7C,SAAS,+BAA+B,oBAAoB;AAE5D,SAAS,uBAAuB;AAIhC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,0BAA0B;AACnC,SAAS,YAAY;AACrB,SAAS,uBAAuB;AAChC,SAAS,YAAY;AAErB,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,oBAAmC;","names":[]}