@makeswift/runtime 0.27.1-canary.0 → 0.27.2

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 (175) hide show
  1. package/dist/cjs/api/react.js +256 -0
  2. package/dist/cjs/api/react.js.map +1 -0
  3. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  4. package/dist/cjs/builder/serialization/control-serialization.js +10 -7
  5. package/dist/cjs/builder/serialization/control-serialization.js.map +1 -1
  6. package/dist/cjs/client/index.js +35 -6
  7. package/dist/cjs/client/index.js.map +1 -1
  8. package/dist/cjs/controls/visitors/message-port-serializer/function-serialization.js.map +1 -1
  9. package/dist/cjs/next/api-handler/config/app-router.js +10 -1
  10. package/dist/cjs/next/api-handler/config/app-router.js.map +1 -1
  11. package/dist/cjs/runtimes/react/components/GoogleFontLink.js +56 -0
  12. package/dist/cjs/runtimes/react/components/GoogleFontLink.js.map +1 -0
  13. package/dist/cjs/runtimes/react/components/LiveProvider.js +50 -0
  14. package/dist/cjs/runtimes/react/components/LiveProvider.js.map +1 -0
  15. package/dist/cjs/runtimes/react/components/PreviewProvider.js +63 -0
  16. package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -0
  17. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js +62 -0
  18. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js.map +1 -0
  19. package/dist/cjs/runtimes/react/hooks/use-is-preview.js +33 -0
  20. package/dist/cjs/runtimes/react/hooks/use-is-preview.js.map +1 -0
  21. package/dist/cjs/runtimes/react/utils/google-fonts-url.js +49 -0
  22. package/dist/cjs/runtimes/react/utils/google-fonts-url.js.map +1 -0
  23. package/dist/cjs/state/actions/internal.js +205 -0
  24. package/dist/cjs/state/actions/internal.js.map +1 -0
  25. package/dist/cjs/state/builder-api/message-channel.js +33 -28
  26. package/dist/cjs/state/builder-api/message-channel.js.map +1 -1
  27. package/dist/cjs/state/builder-api/proxy.js +11 -9
  28. package/dist/cjs/state/builder-api/proxy.js.map +1 -1
  29. package/dist/cjs/state/mixins/setup-teardown.js +35 -0
  30. package/dist/cjs/state/mixins/setup-teardown.js.map +1 -0
  31. package/dist/cjs/state/modules/box-models.js +127 -0
  32. package/dist/cjs/state/modules/box-models.js.map +1 -0
  33. package/dist/cjs/state/modules/element-imperative-handles.js +60 -0
  34. package/dist/cjs/state/modules/element-imperative-handles.js.map +1 -0
  35. package/dist/cjs/state/modules/is-preview.js +47 -0
  36. package/dist/cjs/state/modules/is-preview.js.map +1 -0
  37. package/dist/cjs/state/modules/pointer.js +47 -0
  38. package/dist/cjs/state/modules/pointer.js.map +1 -0
  39. package/dist/cjs/state/modules/read-write-documents.js +98 -0
  40. package/dist/cjs/state/modules/read-write-documents.js.map +1 -0
  41. package/dist/cjs/state/react-builder-preview.js +586 -0
  42. package/dist/cjs/state/react-builder-preview.js.map +1 -0
  43. package/dist/cjs/state/react-page.js +313 -0
  44. package/dist/cjs/state/react-page.js.map +1 -0
  45. package/dist/cjs/state/read-write-state.js +1 -1
  46. package/dist/cjs/state/read-write-state.js.map +1 -1
  47. package/dist/cjs/state/store.js +2 -2
  48. package/dist/cjs/state/store.js.map +1 -1
  49. package/dist/cjs/state/translations/get.js +10 -9
  50. package/dist/cjs/state/translations/get.js.map +1 -1
  51. package/dist/cjs/state/translations/merge.js +10 -12
  52. package/dist/cjs/state/translations/merge.js.map +1 -1
  53. package/dist/cjs/translations/index.js +32 -0
  54. package/dist/cjs/translations/index.js.map +1 -0
  55. package/dist/cjs/unstable-framework-support/index.js +3 -0
  56. package/dist/cjs/unstable-framework-support/index.js.map +1 -1
  57. package/dist/esm/api/react.js +223 -0
  58. package/dist/esm/api/react.js.map +1 -0
  59. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  60. package/dist/esm/builder/serialization/control-serialization.js +12 -8
  61. package/dist/esm/builder/serialization/control-serialization.js.map +1 -1
  62. package/dist/esm/client/index.js +37 -8
  63. package/dist/esm/client/index.js.map +1 -1
  64. package/dist/esm/controls/visitors/message-port-serializer/function-serialization.js.map +1 -1
  65. package/dist/esm/next/api-handler/config/app-router.js +10 -1
  66. package/dist/esm/next/api-handler/config/app-router.js.map +1 -1
  67. package/dist/esm/runtimes/react/components/GoogleFontLink.js +36 -0
  68. package/dist/esm/runtimes/react/components/GoogleFontLink.js.map +1 -0
  69. package/dist/esm/runtimes/react/components/LiveProvider.js +20 -0
  70. package/dist/esm/runtimes/react/components/LiveProvider.js.map +1 -0
  71. package/dist/esm/runtimes/react/components/PreviewProvider.js +33 -0
  72. package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -0
  73. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js +38 -0
  74. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js.map +1 -0
  75. package/dist/esm/runtimes/react/hooks/use-is-preview.js +9 -0
  76. package/dist/esm/runtimes/react/hooks/use-is-preview.js.map +1 -0
  77. package/dist/esm/runtimes/react/utils/google-fonts-url.js +23 -0
  78. package/dist/esm/runtimes/react/utils/google-fonts-url.js.map +1 -0
  79. package/dist/esm/state/actions/internal.js +162 -0
  80. package/dist/esm/state/actions/internal.js.map +1 -0
  81. package/dist/esm/state/builder-api/message-channel.js +33 -28
  82. package/dist/esm/state/builder-api/message-channel.js.map +1 -1
  83. package/dist/esm/state/builder-api/proxy.js +11 -9
  84. package/dist/esm/state/builder-api/proxy.js.map +1 -1
  85. package/dist/esm/state/mixins/setup-teardown.js +11 -0
  86. package/dist/esm/state/mixins/setup-teardown.js.map +1 -0
  87. package/dist/esm/state/modules/box-models.js +98 -0
  88. package/dist/esm/state/modules/box-models.js.map +1 -0
  89. package/dist/esm/state/modules/element-imperative-handles.js +35 -0
  90. package/dist/esm/state/modules/element-imperative-handles.js.map +1 -0
  91. package/dist/esm/state/modules/is-preview.js +21 -0
  92. package/dist/esm/state/modules/is-preview.js.map +1 -0
  93. package/dist/esm/state/modules/pointer.js +22 -0
  94. package/dist/esm/state/modules/pointer.js.map +1 -0
  95. package/dist/esm/state/modules/read-write-documents.js +60 -0
  96. package/dist/esm/state/modules/read-write-documents.js.map +1 -0
  97. package/dist/esm/state/react-builder-preview.js +547 -0
  98. package/dist/esm/state/react-builder-preview.js.map +1 -0
  99. package/dist/esm/state/react-page.js +268 -0
  100. package/dist/esm/state/react-page.js.map +1 -0
  101. package/dist/esm/state/read-write-state.js +1 -1
  102. package/dist/esm/state/read-write-state.js.map +1 -1
  103. package/dist/esm/state/store.js +2 -2
  104. package/dist/esm/state/store.js.map +1 -1
  105. package/dist/esm/state/translations/get.js +9 -8
  106. package/dist/esm/state/translations/get.js.map +1 -1
  107. package/dist/esm/state/translations/merge.js +9 -11
  108. package/dist/esm/state/translations/merge.js.map +1 -1
  109. package/dist/esm/translations/index.js +7 -0
  110. package/dist/esm/translations/index.js.map +1 -0
  111. package/dist/esm/unstable-framework-support/index.js +2 -0
  112. package/dist/esm/unstable-framework-support/index.js.map +1 -1
  113. package/dist/types/api/react.d.ts +82 -0
  114. package/dist/types/api/react.d.ts.map +1 -0
  115. package/dist/types/builder/serialization/control-serialization.d.ts +10 -6
  116. package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
  117. package/dist/types/client/index.d.ts +25 -1
  118. package/dist/types/client/index.d.ts.map +1 -1
  119. package/dist/types/client/tests/client.get-fonts.test.d.ts +2 -0
  120. package/dist/types/client/tests/client.get-fonts.test.d.ts.map +1 -0
  121. package/dist/types/next/api-handler/config/app-router.d.ts.map +1 -1
  122. package/dist/types/runtimes/react/components/GoogleFontLink.d.ts +14 -0
  123. package/dist/types/runtimes/react/components/GoogleFontLink.d.ts.map +1 -0
  124. package/dist/types/runtimes/react/components/LiveProvider.d.ts +3 -0
  125. package/dist/types/runtimes/react/components/LiveProvider.d.ts.map +1 -0
  126. package/dist/types/runtimes/react/components/PreviewProvider.d.ts +5 -0
  127. package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -0
  128. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts +4 -0
  129. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts.map +1 -0
  130. package/dist/types/runtimes/react/hooks/use-is-preview.d.ts +2 -0
  131. package/dist/types/runtimes/react/hooks/use-is-preview.d.ts.map +1 -0
  132. package/dist/types/runtimes/react/utils/google-fonts-url.d.ts +6 -0
  133. package/dist/types/runtimes/react/utils/google-fonts-url.d.ts.map +1 -0
  134. package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts +5 -0
  135. package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts.map +1 -0
  136. package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts +3 -0
  137. package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts.map +1 -0
  138. package/dist/types/state/__tests__/get-translatable-content.test.d.ts +2 -0
  139. package/dist/types/state/__tests__/get-translatable-content.test.d.ts.map +1 -0
  140. package/dist/types/state/__tests__/react-page.test.d.ts +2 -0
  141. package/dist/types/state/__tests__/react-page.test.d.ts.map +1 -0
  142. package/dist/types/state/actions/internal.d.ts +181 -0
  143. package/dist/types/state/actions/internal.d.ts.map +1 -0
  144. package/dist/types/state/builder-api/message-channel.d.ts +3 -6
  145. package/dist/types/state/builder-api/message-channel.d.ts.map +1 -1
  146. package/dist/types/state/builder-api/proxy.d.ts +1 -2
  147. package/dist/types/state/builder-api/proxy.d.ts.map +1 -1
  148. package/dist/types/state/mixins/setup-teardown.d.ts +7 -0
  149. package/dist/types/state/mixins/setup-teardown.d.ts.map +1 -0
  150. package/dist/types/state/modules/box-models.d.ts +23 -0
  151. package/dist/types/state/modules/box-models.d.ts.map +1 -0
  152. package/dist/types/state/modules/element-imperative-handles.d.ts +7 -0
  153. package/dist/types/state/modules/element-imperative-handles.d.ts.map +1 -0
  154. package/dist/types/state/modules/is-preview.d.ts +6 -0
  155. package/dist/types/state/modules/is-preview.d.ts.map +1 -0
  156. package/dist/types/state/modules/pointer.d.ts +12 -0
  157. package/dist/types/state/modules/pointer.d.ts.map +1 -0
  158. package/dist/types/state/modules/read-write-documents.d.ts +14 -0
  159. package/dist/types/state/modules/read-write-documents.d.ts.map +1 -0
  160. package/dist/types/state/react-builder-preview.d.ts +108 -0
  161. package/dist/types/state/react-builder-preview.d.ts.map +1 -0
  162. package/dist/types/state/react-page.d.ts +149 -0
  163. package/dist/types/state/react-page.d.ts.map +1 -0
  164. package/dist/types/state/read-write-state.d.ts +1 -1
  165. package/dist/types/state/read-write-state.d.ts.map +1 -1
  166. package/dist/types/state/translations/get.d.ts +2 -2
  167. package/dist/types/state/translations/get.d.ts.map +1 -1
  168. package/dist/types/state/translations/merge.d.ts +2 -2
  169. package/dist/types/state/translations/merge.d.ts.map +1 -1
  170. package/dist/types/translations/index.d.ts +6 -0
  171. package/dist/types/translations/index.d.ts.map +1 -0
  172. package/dist/types/unstable-framework-support/index.d.ts +1 -0
  173. package/dist/types/unstable-framework-support/index.d.ts.map +1 -1
  174. package/package.json +9 -3
  175. package/translations/package.json +5 -0
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var react_page_exports = {};
30
+ __export(react_page_exports, {
31
+ configureStore: () => configureStore,
32
+ copyElementTree: () => copyElementTree,
33
+ createBaseDocument: () => import_read_only_documents.createBaseDocument,
34
+ createDocumentReference: () => import_read_only_documents.createDocumentReference,
35
+ elementTreeMiddleware: () => elementTreeMiddleware,
36
+ getBreakpoints: () => getBreakpoints,
37
+ getBuilderEditMode: () => getBuilderEditMode,
38
+ getComponentMeta: () => getComponentMeta,
39
+ getComponentPropControllerDescriptors: () => getComponentPropControllerDescriptors,
40
+ getDocument: () => getDocument,
41
+ getDocumentKeysSortedByDepth: () => getDocumentKeysSortedByDepth,
42
+ getElement: () => getElement,
43
+ getElementId: () => getElementId,
44
+ getElementIds: () => getElementIds,
45
+ getElementPropControllerDescriptors: () => getElementPropControllerDescriptors,
46
+ getElements: () => getElements,
47
+ getIsInBuilder: () => getIsInBuilder,
48
+ getIsPreview: () => getIsPreview,
49
+ getPropControllerDescriptors: () => getPropControllerDescriptors,
50
+ getPropControllers: () => getPropControllers,
51
+ getReactComponent: () => getReactComponent,
52
+ getRootElement: () => import_read_only_documents.getRootElement,
53
+ isElementReference: () => import_read_only_documents.isElementReference,
54
+ mergeElement: () => mergeElement
55
+ });
56
+ module.exports = __toCommonJS(react_page_exports);
57
+ var import_toolkit = require("@reduxjs/toolkit");
58
+ var import_reselect = require("reselect");
59
+ var import_controls = require("@makeswift/controls");
60
+ var import_control = require("../controls/control");
61
+ var Documents = __toESM(require("./modules/read-only-documents"));
62
+ var ElementTrees = __toESM(require("./modules/element-trees"));
63
+ var ReactComponents = __toESM(require("./modules/react-components"));
64
+ var ComponentsMeta = __toESM(require("./modules/components-meta"));
65
+ var PropControllers = __toESM(require("./modules/prop-controllers"));
66
+ var PropControllerHandles = __toESM(require("./modules/prop-controller-handles"));
67
+ var IsInBuilder = __toESM(require("./modules/is-in-builder"));
68
+ var IsPreview = __toESM(require("./modules/is-preview"));
69
+ var BuilderEditMode = __toESM(require("./modules/builder-edit-mode"));
70
+ var Breakpoints = __toESM(require("./modules/breakpoints"));
71
+ var import_actions = require("./actions");
72
+ var import_internal = require("./actions/internal");
73
+ var import_toolkit2 = require("./toolkit");
74
+ var import_setup_teardown = require("./mixins/setup-teardown");
75
+ var import_read_only_documents = require("./modules/read-only-documents");
76
+ const reducer = (0, import_toolkit.combineReducers)({
77
+ documents: Documents.reducer,
78
+ elementTrees: ElementTrees.reducer,
79
+ reactComponents: ReactComponents.reducer,
80
+ componentsMeta: ComponentsMeta.reducer,
81
+ propControllers: PropControllers.reducer,
82
+ propControllerHandles: PropControllerHandles.reducer,
83
+ isInBuilder: IsInBuilder.reducer,
84
+ isPreview: IsPreview.reducer,
85
+ builderEditMode: BuilderEditMode.reducer,
86
+ breakpoints: Breakpoints.reducer
87
+ });
88
+ function getDocumentsStateSlice(state) {
89
+ return state.documents;
90
+ }
91
+ function getDocument(state, documentKey) {
92
+ return Documents.getDocument(getDocumentsStateSlice(state), documentKey);
93
+ }
94
+ function getElementTreesSlice(state) {
95
+ return state.elementTrees;
96
+ }
97
+ function getElements(state, documentKey) {
98
+ return ElementTrees.getElements(getElementTreesSlice(state), documentKey);
99
+ }
100
+ function getElementIds(state, documentKey) {
101
+ return ElementTrees.getElementIds(getElementTreesSlice(state), documentKey);
102
+ }
103
+ function getReactComponentsStateSlice(state) {
104
+ return state.reactComponents;
105
+ }
106
+ function getReactComponent(state, type) {
107
+ return ReactComponents.getReactComponent(getReactComponentsStateSlice(state), type);
108
+ }
109
+ function getComponentsMetaStateSlice(state) {
110
+ return state.componentsMeta;
111
+ }
112
+ function getComponentMeta(state, type) {
113
+ return ComponentsMeta.getComponentMeta(getComponentsMetaStateSlice(state), type);
114
+ }
115
+ function getPropControllersStateSlice(state) {
116
+ return state.propControllers;
117
+ }
118
+ function getPropControllerDescriptors(state) {
119
+ return PropControllers.getPropControllerDescriptors(getPropControllersStateSlice(state));
120
+ }
121
+ function getComponentPropControllerDescriptors(state, componentType) {
122
+ return PropControllers.getComponentPropControllerDescriptors(
123
+ getPropControllersStateSlice(state),
124
+ componentType
125
+ );
126
+ }
127
+ function getPropControllerHandlesStateSlice(state) {
128
+ return state.propControllerHandles;
129
+ }
130
+ function getPropControllers(state, documentKey, elementKey) {
131
+ return PropControllerHandles.getPropControllers(
132
+ getPropControllerHandlesStateSlice(state),
133
+ documentKey,
134
+ elementKey
135
+ );
136
+ }
137
+ const getDocumentKeysSortedByDepth = (0, import_reselect.createSelector)(
138
+ [getDocumentsStateSlice, getElementTreesSlice],
139
+ (documents, elementTrees) => {
140
+ return [...documents.keys()].sort((a, b) => elementTrees.get(a)?.elements.has(b) ? -1 : 1);
141
+ }
142
+ );
143
+ function getElement(state, documentKey, elementKey) {
144
+ return ElementTrees.getElement(getElementTreesSlice(state), documentKey, elementKey);
145
+ }
146
+ function getElementId(state, documentKey, elementKey) {
147
+ return ElementTrees.getElementId(getElementTreesSlice(state), documentKey, elementKey);
148
+ }
149
+ function getElementPropControllerDescriptors(state, documentKey, elementKey) {
150
+ const element = getElement(state, documentKey, elementKey);
151
+ if (element == null || Documents.isElementReference(element))
152
+ return null;
153
+ return getComponentPropControllerDescriptors(state, element.type);
154
+ }
155
+ function copyElementTree(state, elementTree, replacementContext) {
156
+ function copyElementTreeNode(state2, replacementContext2) {
157
+ return function(node) {
158
+ const context = {
159
+ replacementContext: replacementContext2,
160
+ copyElement: copyElementTreeNode(state2, replacementContext2)
161
+ };
162
+ if (Documents.isElementReference(node)) {
163
+ return {
164
+ ...node,
165
+ value: (0, import_controls.replaceResourceIfNeeded)(import_controls.ContextResource.GlobalElement, node.value, context)
166
+ };
167
+ }
168
+ const descriptors = getComponentPropControllerDescriptors(state2, node.type);
169
+ if (descriptors == null)
170
+ return node;
171
+ for (const [propKey, descriptor] of Object.entries(descriptors)) {
172
+ node.props[propKey] = (0, import_control.copy)(descriptor, node.props[propKey], context);
173
+ }
174
+ return node;
175
+ };
176
+ }
177
+ const copy = JSON.parse(JSON.stringify(elementTree));
178
+ return copyElementTreeNode(state, (0, import_controls.createReplacementContext)(replacementContext))(copy);
179
+ }
180
+ function mergeElement(state, baseElement, overrideElement) {
181
+ if (baseElement.type !== overrideElement.type || baseElement.key !== overrideElement.key) {
182
+ throw new Error(`Can't merge elements of different types or keys`);
183
+ }
184
+ if (Documents.isElementReference(overrideElement))
185
+ return overrideElement;
186
+ if (Documents.isElementReference(baseElement))
187
+ return baseElement;
188
+ const elementDescriptors = getPropControllerDescriptors(state);
189
+ const descriptors = elementDescriptors.get(baseElement.type);
190
+ if (descriptors == null) {
191
+ throw new Error(
192
+ `Can't merge element of type "${baseElement.type}" because it has no descriptors`
193
+ );
194
+ }
195
+ const mergedProps = {};
196
+ for (const propName of Object.keys(descriptors)) {
197
+ const descriptor = descriptors[propName];
198
+ const context = {
199
+ mergeElement(base, override) {
200
+ return mergeElement(state, base, override);
201
+ }
202
+ };
203
+ mergedProps[propName] = (0, import_control.merge)(
204
+ descriptor,
205
+ baseElement.props[propName],
206
+ overrideElement.props[propName],
207
+ context
208
+ );
209
+ }
210
+ return { ...baseElement, props: mergedProps };
211
+ }
212
+ function getIsInBuilder(state) {
213
+ return state.isInBuilder;
214
+ }
215
+ function getIsPreview(state) {
216
+ return IsPreview.getIsPreview(state.isPreview);
217
+ }
218
+ function getBuilderEditMode(state) {
219
+ return state.builderEditMode;
220
+ }
221
+ function getBreakpoints(state) {
222
+ return state.breakpoints;
223
+ }
224
+ function elementTreeMiddleware() {
225
+ return (0, import_toolkit2.actionMiddleware)(({ dispatch, getState }) => (next) => {
226
+ return (action) => {
227
+ switch (action.type) {
228
+ case import_actions.ActionTypes.REGISTER_DOCUMENT:
229
+ dispatch(
230
+ (0, import_internal.createElementTree)({
231
+ document: action.payload.document,
232
+ descriptors: getPropControllerDescriptors(getState())
233
+ })
234
+ );
235
+ break;
236
+ case import_actions.ActionTypes.CHANGE_DOCUMENT: {
237
+ const { documentKey, operation } = action.payload;
238
+ const oldDocument = getDocument(getState(), documentKey);
239
+ const result = next(action);
240
+ const newDocument = getDocument(getState(), documentKey);
241
+ if (oldDocument != null && newDocument != null && newDocument !== oldDocument) {
242
+ dispatch(
243
+ (0, import_internal.changeElementTree)({
244
+ oldDocument,
245
+ newDocument,
246
+ descriptors: getPropControllerDescriptors(getState()),
247
+ operation
248
+ })
249
+ );
250
+ }
251
+ return result;
252
+ }
253
+ case import_actions.ActionTypes.UNREGISTER_DOCUMENT:
254
+ dispatch((0, import_internal.deleteElementTree)(action.payload));
255
+ break;
256
+ }
257
+ return next(action);
258
+ };
259
+ });
260
+ }
261
+ function configureStore({
262
+ name,
263
+ preloadedState,
264
+ breakpoints
265
+ }) {
266
+ return (0, import_toolkit.configureStore)({
267
+ reducer,
268
+ preloadedState: {
269
+ ...preloadedState,
270
+ breakpoints: Breakpoints.getInitialState(breakpoints ?? preloadedState?.breakpoints)
271
+ },
272
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware(import_toolkit2.middlewareOptions).concat(elementTreeMiddleware()),
273
+ enhancers: (getDefaultEnhancers) => getDefaultEnhancers().concat(
274
+ (0, import_setup_teardown.withSetupTeardown)(
275
+ () => {
276
+ },
277
+ () => {
278
+ }
279
+ )
280
+ ),
281
+ devTools: (0, import_toolkit2.devToolsConfig)({
282
+ name: `${name} (${(/* @__PURE__ */ new Date()).toISOString()})`
283
+ })
284
+ });
285
+ }
286
+ // Annotate the CommonJS export names for ESM import in node:
287
+ 0 && (module.exports = {
288
+ configureStore,
289
+ copyElementTree,
290
+ createBaseDocument,
291
+ createDocumentReference,
292
+ elementTreeMiddleware,
293
+ getBreakpoints,
294
+ getBuilderEditMode,
295
+ getComponentMeta,
296
+ getComponentPropControllerDescriptors,
297
+ getDocument,
298
+ getDocumentKeysSortedByDepth,
299
+ getElement,
300
+ getElementId,
301
+ getElementIds,
302
+ getElementPropControllerDescriptors,
303
+ getElements,
304
+ getIsInBuilder,
305
+ getIsPreview,
306
+ getPropControllerDescriptors,
307
+ getPropControllers,
308
+ getReactComponent,
309
+ getRootElement,
310
+ isElementReference,
311
+ mergeElement
312
+ });
313
+ //# sourceMappingURL=react-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/state/react-page.ts"],"sourcesContent":["import {\n configureStore as configureReduxStore,\n combineReducers,\n type ThunkDispatch,\n type Middleware,\n} from '@reduxjs/toolkit'\n\nimport { createSelector } from 'reselect'\n\nimport {\n createReplacementContext,\n type SerializableReplacementContext,\n type ReplacementContext,\n type MergeContext,\n CopyContext,\n replaceResourceIfNeeded,\n ContextResource,\n} from '@makeswift/controls'\n\nimport { copy as copyFromControl, merge } from '../controls/control'\n\nimport * as Documents from './modules/read-only-documents'\nimport * as ElementTrees from './modules/element-trees'\nimport * as ReactComponents from './modules/react-components'\nimport * as ComponentsMeta from './modules/components-meta'\nimport * as PropControllers from './modules/prop-controllers'\nimport * as PropControllerHandles from './modules/prop-controller-handles'\nimport * as IsInBuilder from './modules/is-in-builder'\nimport * as IsPreview from './modules/is-preview'\nimport * as BuilderEditMode from './modules/builder-edit-mode'\nimport * as Breakpoints from './modules/breakpoints'\n\nimport { type Action, ActionTypes } from './actions'\nimport { changeElementTree, createElementTree, deleteElementTree } from './actions/internal'\n\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\n\nimport { withSetupTeardown } from './mixins/setup-teardown'\n\nexport type {\n Data,\n Document,\n DocumentReference,\n Element,\n ElementData,\n ElementReference,\n} from './modules/read-only-documents'\n\nexport {\n createBaseDocument,\n createDocumentReference,\n getRootElement,\n isElementReference,\n} from './modules/read-only-documents'\n\nexport type { ComponentType } from './modules/react-components'\nexport type { ComponentMeta } from './modules/components-meta'\n\nconst reducer = combineReducers({\n documents: Documents.reducer,\n elementTrees: ElementTrees.reducer,\n reactComponents: ReactComponents.reducer,\n componentsMeta: ComponentsMeta.reducer,\n propControllers: PropControllers.reducer,\n propControllerHandles: PropControllerHandles.reducer,\n isInBuilder: IsInBuilder.reducer,\n isPreview: IsPreview.reducer,\n builderEditMode: BuilderEditMode.reducer,\n breakpoints: Breakpoints.reducer,\n})\n\nexport type State = ReturnType<typeof reducer>\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nfunction getDocumentsStateSlice(state: State): Documents.State {\n return state.documents\n}\n\nexport function getDocument(state: State, documentKey: string): Documents.Document | null {\n return Documents.getDocument(getDocumentsStateSlice(state), documentKey)\n}\n\nfunction getElementTreesSlice(state: State): ElementTrees.State {\n return state.elementTrees\n}\n\nexport function getElements(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elements'] {\n return ElementTrees.getElements(getElementTreesSlice(state), documentKey)\n}\n\nexport function getElementIds(\n state: State,\n documentKey: string,\n): ElementTrees.ElementTree['elementIds'] {\n return ElementTrees.getElementIds(getElementTreesSlice(state), documentKey)\n}\n\nfunction getReactComponentsStateSlice(state: State): ReactComponents.State {\n return state.reactComponents\n}\n\nexport function getReactComponent(\n state: State,\n type: string,\n): ReactComponents.ComponentType | null {\n return ReactComponents.getReactComponent(getReactComponentsStateSlice(state), type)\n}\n\nfunction getComponentsMetaStateSlice(state: State): ComponentsMeta.State {\n return state.componentsMeta\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(state: State, documentKey: string, elementKey: string) {\n return PropControllerHandles.getPropControllers(\n getPropControllerHandlesStateSlice(state),\n documentKey,\n elementKey,\n )\n}\n\n/**\n * Returns all document keys sorted by depth, i.e., parent documents come before child documents.\n */\nexport const getDocumentKeysSortedByDepth: (state: State) => string[] = createSelector(\n [getDocumentsStateSlice, getElementTreesSlice],\n (documents, elementTrees) => {\n return [...documents.keys()].sort((a, b) => (elementTrees.get(a)?.elements.has(b) ? -1 : 1))\n },\n)\n\nexport function getElement(\n state: State,\n documentKey: string,\n elementKey: string,\n): Documents.Element | null {\n return ElementTrees.getElement(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementId(state: State, documentKey: string, elementKey: string): string | null {\n return ElementTrees.getElementId(getElementTreesSlice(state), documentKey, elementKey)\n}\n\nexport function getElementPropControllerDescriptors(\n state: State,\n documentKey: string,\n elementKey: string,\n): Record<string, PropControllers.PropControllerDescriptor> | null {\n const element = getElement(state, documentKey, elementKey)\n\n if (element == null || Documents.isElementReference(element)) return null\n\n return getComponentPropControllerDescriptors(state, element.type)\n}\n\nexport function copyElementTree(\n state: State,\n elementTree: Documents.ElementData,\n replacementContext: SerializableReplacementContext,\n) {\n /*\n * This is structured a bit weird.\n *\n * This is done so that we can pass a callable function into some of the copy functions\n * themselves, to enable mutual recursion.\n *\n * Consider the slot control. It has to iterate through its elements, and for each of them,\n * call some version of the below function.\n *\n * That is how the recursing through the tree happens.\n */\n function copyElementTreeNode(state: State, replacementContext: ReplacementContext) {\n return function (node: Documents.Element) {\n const context: CopyContext = {\n replacementContext,\n copyElement: copyElementTreeNode(state, replacementContext),\n }\n\n if (Documents.isElementReference(node)) {\n return {\n ...node,\n value: replaceResourceIfNeeded(ContextResource.GlobalElement, node.value, context),\n }\n }\n\n const descriptors = getComponentPropControllerDescriptors(state, node.type)\n\n if (descriptors == null) return node\n\n for (const [propKey, descriptor] of Object.entries(descriptors)) {\n node.props[propKey] = copyFromControl(descriptor, node.props[propKey], context)\n }\n\n return node\n }\n }\n\n const copy = JSON.parse(JSON.stringify(elementTree)) as Documents.ElementData\n\n return copyElementTreeNode(state, createReplacementContext(replacementContext))(copy)\n}\n\nexport function mergeElement(\n state: State,\n baseElement: Documents.Element,\n overrideElement: Documents.Element,\n): Documents.Element {\n if (baseElement.type !== overrideElement.type || baseElement.key !== overrideElement.key) {\n throw new Error(`Can't merge elements of different types or keys`)\n }\n\n if (Documents.isElementReference(overrideElement)) return overrideElement\n\n if (Documents.isElementReference(baseElement)) return baseElement\n\n const elementDescriptors = getPropControllerDescriptors(state)\n const descriptors = elementDescriptors.get(baseElement.type)\n\n if (descriptors == null) {\n throw new Error(\n `Can't merge element of type \"${baseElement.type}\" because it has no descriptors`,\n )\n }\n\n const mergedProps = {} as Record<string, Documents.Data>\n\n for (const propName of Object.keys(descriptors)) {\n const descriptor = descriptors[propName]\n const context: MergeContext = {\n mergeElement(base, override) {\n return mergeElement(state, base, override)\n },\n }\n\n mergedProps[propName] = merge(\n descriptor,\n baseElement.props[propName],\n overrideElement.props[propName],\n context,\n )\n }\n\n return { ...baseElement, props: mergedProps }\n}\n\nexport function getIsInBuilder(state: State): boolean {\n return state.isInBuilder\n}\n\nexport function getIsPreview(state: State): boolean {\n return IsPreview.getIsPreview(state.isPreview)\n}\n\nexport function getBuilderEditMode(state: State): BuilderEditMode.State {\n return state.builderEditMode\n}\n\nexport function getBreakpoints(state: State): Breakpoints.State {\n return state.breakpoints\n}\n\nexport function elementTreeMiddleware(): Middleware<Dispatch, State, Dispatch> {\n return actionMiddleware(({ dispatch, getState }) => next => {\n return action => {\n switch (action.type) {\n case ActionTypes.REGISTER_DOCUMENT:\n dispatch(\n createElementTree({\n document: action.payload.document,\n descriptors: getPropControllerDescriptors(getState()),\n }),\n )\n break\n\n case ActionTypes.CHANGE_DOCUMENT: {\n const { documentKey, operation } = action.payload\n\n const oldDocument = getDocument(getState(), documentKey)\n const result = next(action)\n const newDocument = getDocument(getState(), documentKey)\n\n if (oldDocument != null && newDocument != null && newDocument !== oldDocument) {\n dispatch(\n changeElementTree({\n oldDocument,\n newDocument,\n descriptors: getPropControllerDescriptors(getState()),\n operation,\n }),\n )\n }\n\n return result\n }\n\n case ActionTypes.UNREGISTER_DOCUMENT:\n dispatch(deleteElementTree(action.payload))\n break\n }\n\n return next(action)\n }\n })\n}\n\nexport function configureStore({\n name,\n preloadedState,\n breakpoints,\n}: {\n name: string\n preloadedState: Partial<State> | null\n breakpoints?: Breakpoints.State\n}) {\n return configureReduxStore({\n reducer,\n preloadedState: {\n ...preloadedState,\n breakpoints: Breakpoints.getInitialState(breakpoints ?? preloadedState?.breakpoints),\n },\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat(elementTreeMiddleware()),\n\n enhancers: getDefaultEnhancers =>\n getDefaultEnhancers().concat(\n withSetupTeardown(\n () => {},\n () => {},\n ),\n ),\n\n devTools: devToolsConfig({\n name: `${name} (${new Date().toISOString()})`,\n }),\n })\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKO;AAEP,sBAA+B;AAE/B,sBAQO;AAEP,qBAA+C;AAE/C,gBAA2B;AAC3B,mBAA8B;AAC9B,sBAAiC;AACjC,qBAAgC;AAChC,sBAAiC;AACjC,4BAAuC;AACvC,kBAA6B;AAC7B,gBAA2B;AAC3B,sBAAiC;AACjC,kBAA6B;AAE7B,qBAAyC;AACzC,sBAAwE;AAExE,IAAAA,kBAAoE;AAEpE,4BAAkC;AAWlC,iCAKO;AAKP,MAAM,cAAU,gCAAgB;AAAA,EAC9B,WAAW,UAAU;AAAA,EACrB,cAAc,aAAa;AAAA,EAC3B,iBAAiB,gBAAgB;AAAA,EACjC,gBAAgB,eAAe;AAAA,EAC/B,iBAAiB,gBAAgB;AAAA,EACjC,uBAAuB,sBAAsB;AAAA,EAC7C,aAAa,YAAY;AAAA,EACzB,WAAW,UAAU;AAAA,EACrB,iBAAiB,gBAAgB;AAAA,EACjC,aAAa,YAAY;AAC3B,CAAC;AAKD,SAAS,uBAAuB,OAA+B;AAC7D,SAAO,MAAM;AACf;AAEO,SAAS,YAAY,OAAc,aAAgD;AACxF,SAAO,UAAU,YAAY,uBAAuB,KAAK,GAAG,WAAW;AACzE;AAEA,SAAS,qBAAqB,OAAkC;AAC9D,SAAO,MAAM;AACf;AAEO,SAAS,YACd,OACA,aACsC;AACtC,SAAO,aAAa,YAAY,qBAAqB,KAAK,GAAG,WAAW;AAC1E;AAEO,SAAS,cACd,OACA,aACwC;AACxC,SAAO,aAAa,cAAc,qBAAqB,KAAK,GAAG,WAAW;AAC5E;AAEA,SAAS,6BAA6B,OAAqC;AACzE,SAAO,MAAM;AACf;AAEO,SAAS,kBACd,OACA,MACsC;AACtC,SAAO,gBAAgB,kBAAkB,6BAA6B,KAAK,GAAG,IAAI;AACpF;AAEA,SAAS,4BAA4B,OAAoC;AACvE,SAAO,MAAM;AACf;AAEO,SAAS,iBAAiB,OAAc,MAAmD;AAChG,SAAO,eAAe,iBAAiB,4BAA4B,KAAK,GAAG,IAAI;AACjF;AAEA,SAAS,6BAA6B,OAAqC;AACzE,SAAO,MAAM;AACf;AAEO,SAAS,6BAA6B,OAAqC;AAChF,SAAO,gBAAgB,6BAA6B,6BAA6B,KAAK,CAAC;AACzF;AAEO,SAAS,sCACd,OACA,eAC0C;AAC1C,SAAO,gBAAgB;AAAA,IACrB,6BAA6B,KAAK;AAAA,IAClC;AAAA,EACF;AACF;AAEA,SAAS,mCAAmC,OAA2C;AACrF,SAAO,MAAM;AACf;AAEO,SAAS,mBAAmB,OAAc,aAAqB,YAAoB;AACxF,SAAO,sBAAsB;AAAA,IAC3B,mCAAmC,KAAK;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACF;AAKO,MAAM,mCAA2D;AAAA,EACtE,CAAC,wBAAwB,oBAAoB;AAAA,EAC7C,CAAC,WAAW,iBAAiB;AAC3B,WAAO,CAAC,GAAG,UAAU,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAO,aAAa,IAAI,CAAC,GAAG,SAAS,IAAI,CAAC,IAAI,KAAK,CAAE;AAAA,EAC7F;AACF;AAEO,SAAS,WACd,OACA,aACA,YAC0B;AAC1B,SAAO,aAAa,WAAW,qBAAqB,KAAK,GAAG,aAAa,UAAU;AACrF;AAEO,SAAS,aAAa,OAAc,aAAqB,YAAmC;AACjG,SAAO,aAAa,aAAa,qBAAqB,KAAK,GAAG,aAAa,UAAU;AACvF;AAEO,SAAS,oCACd,OACA,aACA,YACiE;AACjE,QAAM,UAAU,WAAW,OAAO,aAAa,UAAU;AAEzD,MAAI,WAAW,QAAQ,UAAU,mBAAmB,OAAO;AAAG,WAAO;AAErE,SAAO,sCAAsC,OAAO,QAAQ,IAAI;AAClE;AAEO,SAAS,gBACd,OACA,aACA,oBACA;AAYA,WAAS,oBAAoBC,QAAcC,qBAAwC;AACjF,WAAO,SAAU,MAAyB;AACxC,YAAM,UAAuB;AAAA,QAC3B,oBAAAA;AAAA,QACA,aAAa,oBAAoBD,QAAOC,mBAAkB;AAAA,MAC5D;AAEA,UAAI,UAAU,mBAAmB,IAAI,GAAG;AACtC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,WAAO,yCAAwB,gCAAgB,eAAe,KAAK,OAAO,OAAO;AAAA,QACnF;AAAA,MACF;AAEA,YAAM,cAAc,sCAAsCD,QAAO,KAAK,IAAI;AAE1E,UAAI,eAAe;AAAM,eAAO;AAEhC,iBAAW,CAAC,SAAS,UAAU,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC/D,aAAK,MAAM,OAAO,QAAI,eAAAE,MAAgB,YAAY,KAAK,MAAM,OAAO,GAAG,OAAO;AAAA,MAChF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,OAAO,KAAK,MAAM,KAAK,UAAU,WAAW,CAAC;AAEnD,SAAO,oBAAoB,WAAO,0CAAyB,kBAAkB,CAAC,EAAE,IAAI;AACtF;AAEO,SAAS,aACd,OACA,aACA,iBACmB;AACnB,MAAI,YAAY,SAAS,gBAAgB,QAAQ,YAAY,QAAQ,gBAAgB,KAAK;AACxF,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAEA,MAAI,UAAU,mBAAmB,eAAe;AAAG,WAAO;AAE1D,MAAI,UAAU,mBAAmB,WAAW;AAAG,WAAO;AAEtD,QAAM,qBAAqB,6BAA6B,KAAK;AAC7D,QAAM,cAAc,mBAAmB,IAAI,YAAY,IAAI;AAE3D,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI;AAAA,MACR,gCAAgC,YAAY,IAAI;AAAA,IAClD;AAAA,EACF;AAEA,QAAM,cAAc,CAAC;AAErB,aAAW,YAAY,OAAO,KAAK,WAAW,GAAG;AAC/C,UAAM,aAAa,YAAY,QAAQ;AACvC,UAAM,UAAwB;AAAA,MAC5B,aAAa,MAAM,UAAU;AAC3B,eAAO,aAAa,OAAO,MAAM,QAAQ;AAAA,MAC3C;AAAA,IACF;AAEA,gBAAY,QAAQ,QAAI;AAAA,MACtB;AAAA,MACA,YAAY,MAAM,QAAQ;AAAA,MAC1B,gBAAgB,MAAM,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,aAAa,OAAO,YAAY;AAC9C;AAEO,SAAS,eAAe,OAAuB;AACpD,SAAO,MAAM;AACf;AAEO,SAAS,aAAa,OAAuB;AAClD,SAAO,UAAU,aAAa,MAAM,SAAS;AAC/C;AAEO,SAAS,mBAAmB,OAAqC;AACtE,SAAO,MAAM;AACf;AAEO,SAAS,eAAe,OAAiC;AAC9D,SAAO,MAAM;AACf;AAEO,SAAS,wBAA+D;AAC7E,aAAO,kCAAiB,CAAC,EAAE,UAAU,SAAS,MAAM,UAAQ;AAC1D,WAAO,YAAU;AACf,cAAQ,OAAO,MAAM;AAAA,QACnB,KAAK,2BAAY;AACf;AAAA,gBACE,mCAAkB;AAAA,cAChB,UAAU,OAAO,QAAQ;AAAA,cACzB,aAAa,6BAA6B,SAAS,CAAC;AAAA,YACtD,CAAC;AAAA,UACH;AACA;AAAA,QAEF,KAAK,2BAAY,iBAAiB;AAChC,gBAAM,EAAE,aAAa,UAAU,IAAI,OAAO;AAE1C,gBAAM,cAAc,YAAY,SAAS,GAAG,WAAW;AACvD,gBAAM,SAAS,KAAK,MAAM;AAC1B,gBAAM,cAAc,YAAY,SAAS,GAAG,WAAW;AAEvD,cAAI,eAAe,QAAQ,eAAe,QAAQ,gBAAgB,aAAa;AAC7E;AAAA,kBACE,mCAAkB;AAAA,gBAChB;AAAA,gBACA;AAAA,gBACA,aAAa,6BAA6B,SAAS,CAAC;AAAA,gBACpD;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAAA,QAEA,KAAK,2BAAY;AACf,uBAAS,mCAAkB,OAAO,OAAO,CAAC;AAC1C;AAAA,MACJ;AAEA,aAAO,KAAK,MAAM;AAAA,IACpB;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,aAAO,eAAAC,gBAAoB;AAAA,IACzB;AAAA,IACA,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,aAAa,YAAY,gBAAgB,eAAe,gBAAgB,WAAW;AAAA,IACrF;AAAA,IAEA,YAAY,0BACV,qBAAqB,iCAAiB,EAAE,OAAO,sBAAsB,CAAC;AAAA,IAExE,WAAW,yBACT,oBAAoB,EAAE;AAAA,UACpB;AAAA,QACE,MAAM;AAAA,QAAC;AAAA,QACP,MAAM;AAAA,QAAC;AAAA,MACT;AAAA,IACF;AAAA,IAEF,cAAU,gCAAe;AAAA,MACvB,MAAM,GAAG,IAAI,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,IAC5C,CAAC;AAAA,EACH,CAAC;AACH;","names":["import_toolkit","state","replacementContext","copyFromControl","configureReduxStore"]}
@@ -106,7 +106,7 @@ function getElementImperativeHandlesContainingElement(state, element) {
106
106
  }
107
107
  function setupBuilderProxy(builderProxy) {
108
108
  return (dispatch) => {
109
- builderProxy.setup({ onHostAction: (action) => dispatch(action) });
109
+ return builderProxy.setup({ onHostAction: (action) => dispatch(action) });
110
110
  };
111
111
  }
112
112
  // Annotate the CommonJS export names for ESM import in node:
@@ -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<void, State, unknown, Action> {\n return dispatch => {\n builderProxy.setup({ onHostAction: action => dispatch(action) })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAsE;AAEtE,gBAA2B;AAC3B,gBAA2B;AAC3B,cAAyB;AACzB,+BAA0C;AAO1C,oBAA+B;AAI/B,wBAAyC;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,aAAO,gCAAgB,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,cAC2C;AAC3C,SAAO,cAAY;AACjB,iBAAa,MAAM,EAAE,cAAc,YAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EACjE;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.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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAsE;AAEtE,gBAA2B;AAC3B,gBAA2B;AAC3B,cAAyB;AACzB,+BAA0C;AAO1C,oBAA+B;AAI/B,wBAAyC;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,aAAO,gCAAgB,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":[]}
@@ -114,10 +114,10 @@ function configureStore({
114
114
  const builderProxy = new BuilderAPIProxy({ appOrigin });
115
115
  readWriteMiddlewareRef.current = createReadWriteMiddleware({ builderProxy });
116
116
  const dispatch = store.dispatch;
117
- dispatch(setupBuilderProxy(builderProxy));
117
+ const builderProxyCleanup = dispatch(setupBuilderProxy(builderProxy));
118
118
  readWriteCleanup = () => {
119
119
  readWriteMiddlewareRef.current = null;
120
- builderProxy.teardown();
120
+ builderProxyCleanup();
121
121
  };
122
122
  })();
123
123
  try {
@@ -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 dispatch(setupBuilderProxy(builderProxy))\n\n readWriteCleanup = () => {\n readWriteMiddlewareRef.current = null\n builderProxy.teardown()\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":["import_toolkit","configureReduxStore"]}
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":["import_toolkit","configureReduxStore"]}
@@ -28,23 +28,24 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var get_exports = {};
30
30
  __export(get_exports, {
31
- getElementTreeTranslatableData: () => getElementTreeTranslatableData
31
+ getTranslatableContent: () => getTranslatableContent
32
32
  });
33
33
  module.exports = __toCommonJS(get_exports);
34
- var import_read_only_state = require("../read-only-state");
35
34
  var Documents = __toESM(require("../modules/read-only-documents"));
36
35
  var ElementTrees = __toESM(require("../modules/element-trees"));
37
36
  var import_control = require("../../controls/control");
38
- function getElementTreeTranslatableData(state, elementTree) {
37
+ function getTranslatableContent(descriptors, elementTree) {
39
38
  const translatableData = {};
40
- const descriptors = (0, import_read_only_state.getPropControllerDescriptors)(state);
41
- for (const element of ElementTrees.traverseElementTree(elementTree, descriptors)) {
39
+ for (const element of ElementTrees.traverseElementTree(
40
+ elementTree,
41
+ descriptors
42
+ )) {
42
43
  if (Documents.isElementReference(element))
43
44
  continue;
44
- const elementPescriptors = descriptors.get(element.type);
45
- if (elementPescriptors == null)
45
+ const elementDescriptors = descriptors.get(element.type);
46
+ if (elementDescriptors == null)
46
47
  continue;
47
- Object.entries(elementPescriptors).forEach(([propName, descriptor]) => {
48
+ Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {
48
49
  const translatablePropData = (0, import_control.getTranslatableData)(descriptor, element.props[propName]);
49
50
  if (translatablePropData != null) {
50
51
  translatableData[`${element.key}:${propName}`] = translatablePropData;
@@ -55,6 +56,6 @@ function getElementTreeTranslatableData(state, elementTree) {
55
56
  }
56
57
  // Annotate the CommonJS export names for ESM import in node:
57
58
  0 && (module.exports = {
58
- getElementTreeTranslatableData
59
+ getTranslatableContent
59
60
  });
60
61
  //# sourceMappingURL=get.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/translations/get.ts"],"sourcesContent":["import { getPropControllerDescriptors, type State } from '../read-only-state'\nimport * as Documents from '../modules/read-only-documents'\nimport * as ElementTrees from '../modules/element-trees'\nimport { getTranslatableData } from '../../controls/control'\n\nexport function getElementTreeTranslatableData(\n state: State,\n elementTree: Documents.ElementData,\n): Record<string, Documents.Data> {\n const translatableData: Record<string, Documents.Data> = {}\n const descriptors = getPropControllerDescriptors(state)\n\n for (const element of ElementTrees.traverseElementTree(elementTree, descriptors)) {\n if (Documents.isElementReference(element)) continue\n\n const elementPescriptors = descriptors.get(element.type)\n if (elementPescriptors == null) continue\n\n Object.entries(elementPescriptors).forEach(([propName, descriptor]) => {\n const translatablePropData = getTranslatableData(descriptor, element.props[propName])\n\n if (translatablePropData != null) {\n translatableData[`${element.key}:${propName}`] = translatablePropData\n }\n })\n }\n\n return translatableData\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAyD;AACzD,gBAA2B;AAC3B,mBAA8B;AAC9B,qBAAoC;AAE7B,SAAS,+BACd,OACA,aACgC;AAChC,QAAM,mBAAmD,CAAC;AAC1D,QAAM,kBAAc,qDAA6B,KAAK;AAEtD,aAAW,WAAW,aAAa,oBAAoB,aAAa,WAAW,GAAG;AAChF,QAAI,UAAU,mBAAmB,OAAO;AAAG;AAE3C,UAAM,qBAAqB,YAAY,IAAI,QAAQ,IAAI;AACvD,QAAI,sBAAsB;AAAM;AAEhC,WAAO,QAAQ,kBAAkB,EAAE,QAAQ,CAAC,CAAC,UAAU,UAAU,MAAM;AACrE,YAAM,2BAAuB,oCAAoB,YAAY,QAAQ,MAAM,QAAQ,CAAC;AAEpF,UAAI,wBAAwB,MAAM;AAChC,yBAAiB,GAAG,QAAQ,GAAG,IAAI,QAAQ,EAAE,IAAI;AAAA,MACnD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../src/state/translations/get.ts"],"sourcesContent":["import * as Documents from '../modules/read-only-documents'\nimport * as ElementTrees from '../modules/element-trees'\nimport { getTranslatableData } from '../../controls/control'\nimport type {DescriptorsByComponentType} from '../modules/prop-controllers'\n\nexport function getTranslatableContent(\n descriptors: DescriptorsByComponentType,\n elementTree: Documents.ElementData,\n): Record<string, Documents.Data> {\n const translatableData: Record<string, Documents.Data> = {}\n\n for (const element of ElementTrees.traverseElementTree(\n elementTree,\n descriptors,\n )) {\n if (Documents.isElementReference(element)) continue\n\n const elementDescriptors = descriptors.get(element.type)\n if (elementDescriptors == null) continue\n\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n const translatablePropData = getTranslatableData(descriptor, element.props[propName])\n\n if (translatablePropData != null) {\n translatableData[`${element.key}:${propName}`] = translatablePropData\n }\n })\n }\n\n return translatableData\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AAC3B,mBAA8B;AAC9B,qBAAoC;AAG7B,SAAS,uBACd,aACA,aACgC;AAChC,QAAM,mBAAmD,CAAC;AAE1D,aAAW,WAAW,aAAa;AAAA,IACjC;AAAA,IACA;AAAA,EACF,GAAG;AACD,QAAI,UAAU,mBAAmB,OAAO;AAAG;AAE3C,UAAM,qBAAqB,YAAY,IAAI,QAAQ,IAAI;AACvD,QAAI,sBAAsB;AAAM;AAEhC,WAAO,QAAQ,kBAAkB,EAAE,QAAQ,CAAC,CAAC,UAAU,UAAU,MAAM;AACrE,YAAM,2BAAuB,oCAAoB,YAAY,QAAQ,MAAM,QAAQ,CAAC;AAEpF,UAAI,wBAAwB,MAAM;AAChC,yBAAiB,GAAG,QAAQ,GAAG,IAAI,QAAQ,EAAE,IAAI;AAAA,MACnD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
@@ -28,32 +28,30 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var merge_exports = {};
30
30
  __export(merge_exports, {
31
- mergeElementTreeTranslatedData: () => mergeElementTreeTranslatedData,
31
+ mergeTranslatedContent: () => mergeTranslatedContent,
32
32
  mergeTranslatedData: () => mergeTranslatedData
33
33
  });
34
34
  module.exports = __toCommonJS(merge_exports);
35
- var import_read_only_state = require("../read-only-state");
36
35
  var Documents = __toESM(require("../modules/read-only-documents"));
37
36
  var import_prop_controllers = require("@makeswift/prop-controllers");
38
37
  var import_merge_translations_visitor = require("../../controls/visitors/merge-translations-visitor");
39
38
  var import_descriptors = require("../../prop-controllers/descriptors");
40
- function mergeElementTreeTranslatedData(state, elementTree, translatedData) {
41
- function merge(state2, translatedData2) {
39
+ function mergeTranslatedContent(descriptors, elementTree, translatedData) {
40
+ function merge(descriptorsByType, translatedData2) {
42
41
  return function(node) {
43
42
  if (Documents.isElementReference(node))
44
43
  return node;
45
- const elementDescriptors = (0, import_read_only_state.getPropControllerDescriptors)(state2);
46
- const descriptors = elementDescriptors.get(node.type);
47
- if (descriptors == null) {
44
+ const elementDescriptors = descriptorsByType.get(node.type);
45
+ if (elementDescriptors == null) {
48
46
  throw new Error(`Can't merge element of type "${node.type}" because it has no descriptors`);
49
47
  }
50
48
  const context = {
51
49
  translatedData: translatedData2,
52
- mergeTranslatedData: merge(state2, translatedData2)
50
+ mergeTranslatedData: merge(descriptorsByType, translatedData2)
53
51
  };
54
52
  const props = {};
55
- for (const propName of Object.keys(descriptors)) {
56
- const descriptor = descriptors[propName];
53
+ for (const propName of Object.keys(elementDescriptors)) {
54
+ const descriptor = elementDescriptors[propName];
57
55
  props[propName] = mergeTranslatedData(
58
56
  descriptor,
59
57
  node.props[propName],
@@ -64,7 +62,7 @@ function mergeElementTreeTranslatedData(state, elementTree, translatedData) {
64
62
  return { ...node, props };
65
63
  };
66
64
  }
67
- return merge(state, translatedData)(elementTree);
65
+ return merge(descriptors, translatedData)(elementTree);
68
66
  }
69
67
  function mergeTranslatedData(definition, data, translatedData, context) {
70
68
  if (data == null)
@@ -87,7 +85,7 @@ function mergeTranslatedData(definition, data, translatedData, context) {
87
85
  }
88
86
  // Annotate the CommonJS export names for ESM import in node:
89
87
  0 && (module.exports = {
90
- mergeElementTreeTranslatedData,
88
+ mergeTranslatedContent,
91
89
  mergeTranslatedData
92
90
  });
93
91
  //# sourceMappingURL=merge.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/translations/merge.ts"],"sourcesContent":["import { MergeTranslatableDataContext, type TranslationDto, type Data } from '@makeswift/controls'\nimport { getPropControllerDescriptors, type State } from '../read-only-state'\nimport * as Documents from '../modules/read-only-documents'\nimport {\n GridPropControllerData,\n mergeGridPropControllerTranslatedData,\n Types as PropControllerTypes,\n} from '@makeswift/prop-controllers'\nimport { ReactMergeTranslationsVisitor } from '../../controls/visitors/merge-translations-visitor'\nimport { isLegacyDescriptor } from '../../prop-controllers/descriptors'\nimport { Descriptor as PropControllerDescriptor } from '../../prop-controllers/descriptors'\n\nexport function mergeElementTreeTranslatedData(\n state: State,\n elementTree: Documents.ElementData,\n translatedData: TranslationDto,\n): Documents.Element {\n function merge(state: State, translatedData: TranslationDto) {\n return function (node: Documents.Element): Documents.Element {\n if (Documents.isElementReference(node)) return node\n\n const elementDescriptors = getPropControllerDescriptors(state)\n const descriptors = elementDescriptors.get(node.type)\n\n if (descriptors == null) {\n throw new Error(`Can't merge element of type \"${node.type}\" because it has no descriptors`)\n }\n\n const context: MergeTranslatableDataContext = {\n translatedData,\n mergeTranslatedData: merge(state, translatedData),\n }\n const props = {} as Record<string, Documents.Data>\n\n for (const propName of Object.keys(descriptors)) {\n const descriptor = descriptors[propName]\n\n props[propName] = mergeTranslatedData(\n descriptor,\n node.props[propName],\n translatedData[`${node.key}:${propName}`],\n context,\n )\n }\n\n return { ...node, props }\n }\n }\n return merge(state, translatedData)(elementTree)\n}\n\nexport function mergeTranslatedData(\n definition: PropControllerDescriptor,\n data: Data,\n translatedData: Data,\n context: MergeTranslatableDataContext,\n): Data {\n if (data == null) return data\n if (!isLegacyDescriptor(definition)) {\n const mergeTranslationsVisitor = new ReactMergeTranslationsVisitor(context)\n return definition.accept(mergeTranslationsVisitor, data, translatedData)\n }\n\n switch (definition.type) {\n case PropControllerTypes.TextInput:\n case PropControllerTypes.TextArea:\n if (translatedData == null) return data\n return translatedData\n\n case PropControllerTypes.Grid:\n return mergeGridPropControllerTranslatedData(data as GridPropControllerData, context)\n\n default:\n return data\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAyD;AACzD,gBAA2B;AAC3B,8BAIO;AACP,wCAA8C;AAC9C,yBAAmC;AAG5B,SAAS,+BACd,OACA,aACA,gBACmB;AACnB,WAAS,MAAMA,QAAcC,iBAAgC;AAC3D,WAAO,SAAU,MAA4C;AAC3D,UAAI,UAAU,mBAAmB,IAAI;AAAG,eAAO;AAE/C,YAAM,yBAAqB,qDAA6BD,MAAK;AAC7D,YAAM,cAAc,mBAAmB,IAAI,KAAK,IAAI;AAEpD,UAAI,eAAe,MAAM;AACvB,cAAM,IAAI,MAAM,gCAAgC,KAAK,IAAI,iCAAiC;AAAA,MAC5F;AAEA,YAAM,UAAwC;AAAA,QAC5C,gBAAAC;AAAA,QACA,qBAAqB,MAAMD,QAAOC,eAAc;AAAA,MAClD;AACA,YAAM,QAAQ,CAAC;AAEf,iBAAW,YAAY,OAAO,KAAK,WAAW,GAAG;AAC/C,cAAM,aAAa,YAAY,QAAQ;AAEvC,cAAM,QAAQ,IAAI;AAAA,UAChB;AAAA,UACA,KAAK,MAAM,QAAQ;AAAA,UACnBA,gBAAe,GAAG,KAAK,GAAG,IAAI,QAAQ,EAAE;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAEA,aAAO,EAAE,GAAG,MAAM,MAAM;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,MAAM,OAAO,cAAc,EAAE,WAAW;AACjD;AAEO,SAAS,oBACd,YACA,MACA,gBACA,SACM;AACN,MAAI,QAAQ;AAAM,WAAO;AACzB,MAAI,KAAC,uCAAmB,UAAU,GAAG;AACnC,UAAM,2BAA2B,IAAI,gEAA8B,OAAO;AAC1E,WAAO,WAAW,OAAO,0BAA0B,MAAM,cAAc;AAAA,EACzE;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,wBAAAC,MAAoB;AAAA,IACzB,KAAK,wBAAAA,MAAoB;AACvB,UAAI,kBAAkB;AAAM,eAAO;AACnC,aAAO;AAAA,IAET,KAAK,wBAAAA,MAAoB;AACvB,iBAAO,+DAAsC,MAAgC,OAAO;AAAA,IAEtF;AACE,aAAO;AAAA,EACX;AACF;","names":["state","translatedData","PropControllerTypes"]}
1
+ {"version":3,"sources":["../../../../src/state/translations/merge.ts"],"sourcesContent":["import { MergeTranslatableDataContext, type TranslationDto, type Data } from '@makeswift/controls'\nimport * as Documents from '../modules/read-only-documents'\nimport {\n GridPropControllerData,\n mergeGridPropControllerTranslatedData,\n Types as PropControllerTypes,\n} from '@makeswift/prop-controllers'\nimport { ReactMergeTranslationsVisitor } from '../../controls/visitors/merge-translations-visitor'\nimport { isLegacyDescriptor } from '../../prop-controllers/descriptors'\nimport { Descriptor as PropControllerDescriptor } from '../../prop-controllers/descriptors'\nimport type { DescriptorsByComponentType } from '../modules/prop-controllers'\n\nexport function mergeTranslatedContent(\n descriptors: DescriptorsByComponentType,\n elementTree: Documents.ElementData,\n translatedData: TranslationDto,\n): Documents.Element {\n function merge(descriptorsByType: DescriptorsByComponentType, translatedData: TranslationDto) {\n return function (node: Documents.Element): Documents.Element {\n if (Documents.isElementReference(node)) return node\n\n const elementDescriptors = descriptorsByType.get(node.type)\n\n if (elementDescriptors == null) {\n throw new Error(`Can't merge element of type \"${node.type}\" because it has no descriptors`)\n }\n\n const context: MergeTranslatableDataContext = {\n translatedData: translatedData,\n mergeTranslatedData: merge(descriptorsByType, translatedData),\n }\n const props = {} as Record<string, Documents.Data>\n\n for (const propName of Object.keys(elementDescriptors)) {\n const descriptor = elementDescriptors[propName]\n\n props[propName] = mergeTranslatedData(\n descriptor,\n node.props[propName],\n translatedData[`${node.key}:${propName}`],\n context,\n )\n }\n\n return { ...node, props }\n }\n }\n return merge(descriptors, translatedData)(elementTree)\n}\n\nexport function mergeTranslatedData(\n definition: PropControllerDescriptor,\n data: Data,\n translatedData: Data,\n context: MergeTranslatableDataContext,\n): Data {\n if (data == null) return data\n if (!isLegacyDescriptor(definition)) {\n const mergeTranslationsVisitor = new ReactMergeTranslationsVisitor(context)\n return definition.accept(mergeTranslationsVisitor, data, translatedData)\n }\n\n switch (definition.type) {\n case PropControllerTypes.TextInput:\n case PropControllerTypes.TextArea:\n if (translatedData == null) return data\n return translatedData\n\n case PropControllerTypes.Grid:\n return mergeGridPropControllerTranslatedData(data as GridPropControllerData, context)\n\n default:\n return data\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAA2B;AAC3B,8BAIO;AACP,wCAA8C;AAC9C,yBAAmC;AAI5B,SAAS,uBACd,aACA,aACA,gBACmB;AACnB,WAAS,MAAM,mBAA+CA,iBAAgC;AAC5F,WAAO,SAAU,MAA4C;AAC3D,UAAI,UAAU,mBAAmB,IAAI;AAAG,eAAO;AAE/C,YAAM,qBAAqB,kBAAkB,IAAI,KAAK,IAAI;AAE1D,UAAI,sBAAsB,MAAM;AAC9B,cAAM,IAAI,MAAM,gCAAgC,KAAK,IAAI,iCAAiC;AAAA,MAC5F;AAEA,YAAM,UAAwC;AAAA,QAC5C,gBAAgBA;AAAA,QAChB,qBAAqB,MAAM,mBAAmBA,eAAc;AAAA,MAC9D;AACA,YAAM,QAAQ,CAAC;AAEf,iBAAW,YAAY,OAAO,KAAK,kBAAkB,GAAG;AACtD,cAAM,aAAa,mBAAmB,QAAQ;AAE9C,cAAM,QAAQ,IAAI;AAAA,UAChB;AAAA,UACA,KAAK,MAAM,QAAQ;AAAA,UACnBA,gBAAe,GAAG,KAAK,GAAG,IAAI,QAAQ,EAAE;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAEA,aAAO,EAAE,GAAG,MAAM,MAAM;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,MAAM,aAAa,cAAc,EAAE,WAAW;AACvD;AAEO,SAAS,oBACd,YACA,MACA,gBACA,SACM;AACN,MAAI,QAAQ;AAAM,WAAO;AACzB,MAAI,KAAC,uCAAmB,UAAU,GAAG;AACnC,UAAM,2BAA2B,IAAI,gEAA8B,OAAO;AAC1E,WAAO,WAAW,OAAO,0BAA0B,MAAM,cAAc;AAAA,EACzE;AAEA,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK,wBAAAC,MAAoB;AAAA,IACzB,KAAK,wBAAAA,MAAoB;AACvB,UAAI,kBAAkB;AAAM,eAAO;AACnC,aAAO;AAAA,IAET,KAAK,wBAAAA,MAAoB;AACvB,iBAAO,+DAAsC,MAAgC,OAAO;AAAA,IAEtF;AACE,aAAO;AAAA,EACX;AACF;","names":["translatedData","PropControllerTypes"]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var translations_exports = {};
20
+ __export(translations_exports, {
21
+ getTranslatableContent: () => import_get.getTranslatableContent,
22
+ mergeTranslatedContent: () => import_merge.mergeTranslatedContent
23
+ });
24
+ module.exports = __toCommonJS(translations_exports);
25
+ var import_get = require("../state/translations/get");
26
+ var import_merge = require("../state/translations/merge");
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ getTranslatableContent,
30
+ mergeTranslatedContent
31
+ });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/translations/index.ts"],"sourcesContent":["export { getTranslatableContent } from '../state/translations/get'\nexport { mergeTranslatedContent } from '../state/translations/merge'\nexport type { DescriptorsByComponentType, DescriptorsByProp } from '../state/modules/prop-controllers'\nexport type { ElementData, Data, Element } from '../state/read-only-state'\nexport type { TranslationDto } from '@makeswift/controls'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAuC;AACvC,mBAAuC;","names":[]}