@makeswift/runtime 0.10.2 → 0.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/dist/Box.cjs.js +1 -3
  2. package/dist/Box.cjs.js.map +1 -1
  3. package/dist/Box.es.js +2 -4
  4. package/dist/Box.es.js.map +1 -1
  5. package/dist/Button.cjs.js +5 -5
  6. package/dist/Button.es.js +6 -6
  7. package/dist/Carousel.cjs.js +4 -4
  8. package/dist/Carousel.es.js +5 -5
  9. package/dist/Countdown.cjs.js +3 -5
  10. package/dist/Countdown.cjs.js.map +1 -1
  11. package/dist/Countdown.es.js +4 -6
  12. package/dist/Countdown.es.js.map +1 -1
  13. package/dist/Divider.cjs.js +2 -4
  14. package/dist/Divider.cjs.js.map +1 -1
  15. package/dist/Divider.es.js +3 -5
  16. package/dist/Divider.es.js.map +1 -1
  17. package/dist/Embed.cjs.js +3 -1
  18. package/dist/Embed.cjs.js.map +1 -1
  19. package/dist/Embed.es.js +4 -2
  20. package/dist/Embed.es.js.map +1 -1
  21. package/dist/Form.cjs.js +15 -15
  22. package/dist/Form.cjs.js.map +1 -1
  23. package/dist/Form.es.js +7 -7
  24. package/dist/Image.cjs.js +13 -13
  25. package/dist/Image.cjs.js.map +1 -1
  26. package/dist/Image.es.js +13 -13
  27. package/dist/LiveProvider.cjs.js +2 -4
  28. package/dist/LiveProvider.cjs.js.map +1 -1
  29. package/dist/LiveProvider.es.js +4 -6
  30. package/dist/LiveProvider.es.js.map +1 -1
  31. package/dist/Navigation.cjs.js +13 -13
  32. package/dist/Navigation.cjs.js.map +1 -1
  33. package/dist/Navigation.es.js +13 -13
  34. package/dist/PreviewProvider.cjs.js +2 -4
  35. package/dist/PreviewProvider.cjs.js.map +1 -1
  36. package/dist/PreviewProvider.es.js +4 -6
  37. package/dist/PreviewProvider.es.js.map +1 -1
  38. package/dist/ReadOnlyText.cjs.js +8 -7
  39. package/dist/ReadOnlyText.cjs.js.map +1 -1
  40. package/dist/ReadOnlyText.es.js +5 -4
  41. package/dist/ReadOnlyText.es.js.map +1 -1
  42. package/dist/ReadOnlyTextV2.cjs.js +8 -61
  43. package/dist/ReadOnlyTextV2.cjs.js.map +1 -1
  44. package/dist/ReadOnlyTextV2.es.js +10 -63
  45. package/dist/ReadOnlyTextV2.es.js.map +1 -1
  46. package/dist/Root.cjs.js +2 -4
  47. package/dist/Root.cjs.js.map +1 -1
  48. package/dist/Root.es.js +3 -5
  49. package/dist/Root.es.js.map +1 -1
  50. package/dist/SocialLinks.cjs.js +7 -7
  51. package/dist/SocialLinks.cjs.js.map +1 -1
  52. package/dist/SocialLinks.es.js +8 -8
  53. package/dist/Video.cjs.js +3 -1
  54. package/dist/Video.cjs.js.map +1 -1
  55. package/dist/Video.es.js +4 -2
  56. package/dist/Video.es.js.map +1 -1
  57. package/dist/builder.cjs.js +3 -1
  58. package/dist/builder.cjs.js.map +1 -1
  59. package/dist/builder.es.js +3 -1
  60. package/dist/builder.es.js.map +1 -1
  61. package/dist/components.cjs.js +4 -4
  62. package/dist/components.es.js +4 -4
  63. package/dist/control-serialization.cjs.js +1 -0
  64. package/dist/control-serialization.cjs.js.map +1 -1
  65. package/dist/control-serialization.es.js +2 -1
  66. package/dist/control-serialization.es.js.map +1 -1
  67. package/dist/controls.cjs.js +5 -1
  68. package/dist/controls.cjs.js.map +1 -1
  69. package/dist/controls.es.js +4 -2
  70. package/dist/controls.es.js.map +1 -1
  71. package/dist/index.cjs.js +121 -257
  72. package/dist/index.cjs.js.map +1 -1
  73. package/dist/index.cjs2.js +1 -0
  74. package/dist/index.cjs2.js.map +1 -1
  75. package/dist/index.cjs3.js +107 -21
  76. package/dist/index.cjs3.js.map +1 -1
  77. package/dist/index.cjs4.js +57 -16
  78. package/dist/index.cjs4.js.map +1 -1
  79. package/dist/index.cjs5.js +42 -81
  80. package/dist/index.cjs5.js.map +1 -1
  81. package/dist/index.cjs6.js +82 -17
  82. package/dist/index.cjs6.js.map +1 -1
  83. package/dist/index.cjs7.js +18 -377
  84. package/dist/index.cjs7.js.map +1 -1
  85. package/dist/index.cjs8.js +258 -181
  86. package/dist/index.cjs8.js.map +1 -1
  87. package/dist/index.cjs9.js +343 -0
  88. package/dist/index.cjs9.js.map +1 -0
  89. package/dist/index.es.js +126 -261
  90. package/dist/index.es.js.map +1 -1
  91. package/dist/index.es2.js +2 -1
  92. package/dist/index.es2.js.map +1 -1
  93. package/dist/index.es3.js +103 -22
  94. package/dist/index.es3.js.map +1 -1
  95. package/dist/index.es4.js +57 -16
  96. package/dist/index.es4.js.map +1 -1
  97. package/dist/index.es5.js +42 -80
  98. package/dist/index.es5.js.map +1 -1
  99. package/dist/index.es6.js +81 -17
  100. package/dist/index.es6.js.map +1 -1
  101. package/dist/index.es7.js +18 -371
  102. package/dist/index.es7.js.map +1 -1
  103. package/dist/index.es8.js +259 -182
  104. package/dist/index.es8.js.map +1 -1
  105. package/dist/index.es9.js +336 -0
  106. package/dist/index.es9.js.map +1 -0
  107. package/dist/main.cjs.js +3 -1
  108. package/dist/main.cjs.js.map +1 -1
  109. package/dist/main.es.js +3 -1
  110. package/dist/main.es.js.map +1 -1
  111. package/dist/next.cjs.js +3 -5
  112. package/dist/next.cjs.js.map +1 -1
  113. package/dist/next.es.js +4 -6
  114. package/dist/next.es.js.map +1 -1
  115. package/dist/prop-controllers.cjs.js +3 -1
  116. package/dist/prop-controllers.cjs.js.map +1 -1
  117. package/dist/prop-controllers.es.js +3 -1
  118. package/dist/prop-controllers.es.js.map +1 -1
  119. package/dist/react-page.cjs.js +499 -314
  120. package/dist/react-page.cjs.js.map +1 -1
  121. package/dist/react-page.es.js +498 -315
  122. package/dist/react-page.es.js.map +1 -1
  123. package/dist/react.cjs.js +3 -5
  124. package/dist/react.cjs.js.map +1 -1
  125. package/dist/react.es.js +3 -5
  126. package/dist/react.es.js.map +1 -1
  127. package/dist/slate.cjs.js +11 -8
  128. package/dist/slate.cjs.js.map +1 -1
  129. package/dist/slate.es.js +11 -9
  130. package/dist/slate.es.js.map +1 -1
  131. package/dist/toText.cjs.js +67 -0
  132. package/dist/toText.cjs.js.map +1 -0
  133. package/dist/toText.es.js +66 -0
  134. package/dist/toText.es.js.map +1 -0
  135. package/dist/types/src/components/builtin/Text/register.d.ts.map +1 -1
  136. package/dist/types/src/controls/control.d.ts +1 -1
  137. package/dist/types/src/controls/control.d.ts.map +1 -1
  138. package/dist/types/src/controls/rich-text/__test__/copy.test.d.ts +2 -0
  139. package/dist/types/src/controls/rich-text/__test__/copy.test.d.ts.map +1 -0
  140. package/dist/types/src/controls/rich-text/__test__/introspection.test.d.ts.map +1 -0
  141. package/dist/types/src/controls/rich-text/__test__/translation.test.d.ts.map +1 -0
  142. package/dist/types/src/controls/rich-text/copy.d.ts +4 -0
  143. package/dist/types/src/controls/rich-text/copy.d.ts.map +1 -0
  144. package/dist/types/src/controls/rich-text/index.d.ts +1 -0
  145. package/dist/types/src/controls/rich-text/index.d.ts.map +1 -1
  146. package/dist/types/src/controls/rich-text-v2/__test__/copy.test.d.ts +2 -0
  147. package/dist/types/src/controls/rich-text-v2/__test__/copy.test.d.ts.map +1 -0
  148. package/dist/types/src/controls/rich-text-v2/__test__/introspection.test.d.ts.map +1 -0
  149. package/dist/types/src/controls/rich-text-v2/copy.d.ts +4 -0
  150. package/dist/types/src/controls/rich-text-v2/copy.d.ts.map +1 -0
  151. package/dist/types/src/controls/rich-text-v2/index.d.ts +1 -0
  152. package/dist/types/src/controls/rich-text-v2/index.d.ts.map +1 -1
  153. package/dist/types/src/controls/rich-text-v2/rich-text-v2.d.ts +2 -4
  154. package/dist/types/src/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  155. package/dist/types/src/controls/rich-text-v2/translation.d.ts +1 -1
  156. package/dist/types/src/controls/rich-text-v2/translation.d.ts.map +1 -1
  157. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.d.ts.map +1 -1
  158. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.d.ts.map +1 -1
  159. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.d.ts +10 -0
  160. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.d.ts.map +1 -0
  161. package/dist/types/src/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.d.ts.map +1 -1
  162. package/dist/types/src/slate/BuilderPlugin/index.d.ts +2 -1
  163. package/dist/types/src/slate/BuilderPlugin/index.d.ts.map +1 -1
  164. package/dist/types/src/slate/InlineModePlugin/index.d.ts.map +1 -1
  165. package/dist/types/src/slate/InlinePlugin/index.d.ts +2 -2
  166. package/dist/types/src/slate/TextAlignPlugin/index.d.ts +3 -3
  167. package/dist/types/src/slate/TypographyPlugin/index.d.ts +3 -3
  168. package/dist/types/src/slate/index.d.ts +1 -0
  169. package/dist/types/src/slate/index.d.ts.map +1 -1
  170. package/dist/types/src/slate/utils/index.d.ts +2 -0
  171. package/dist/types/src/slate/utils/index.d.ts.map +1 -0
  172. package/dist/types/src/slate/utils/toText.d.ts +4 -0
  173. package/dist/types/src/slate/utils/toText.d.ts.map +1 -0
  174. package/package.json +1 -1
  175. package/dist/types/src/controls/rich-text/introspection.test.d.ts.map +0 -1
  176. package/dist/types/src/controls/rich-text/translation.test.d.ts.map +0 -1
  177. package/dist/types/src/controls/rich-text-v2/introspection.test.d.ts.map +0 -1
  178. /package/dist/types/src/controls/rich-text/{introspection.test.d.ts → __test__/introspection.test.d.ts} +0 -0
  179. /package/dist/types/src/controls/rich-text/{translation.test.d.ts → __test__/translation.test.d.ts} +0 -0
  180. /package/dist/types/src/controls/rich-text-v2/{introspection.test.d.ts → __test__/introspection.test.d.ts} +0 -0
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
34
+ var React = require("react");
35
+ var slate = require("slate");
36
+ var isHotkey = require("is-hotkey");
37
+ var slateReact = require("slate-react");
38
+ var reactPage = require("./react-page.cjs.js");
39
+ var next = require("./index.cjs.js");
40
+ var index$2 = require("./index.cjs5.js");
41
+ var index = require("./index.cjs6.js");
42
+ var index$1 = require("./index.cjs7.js");
43
+ var useIsomorphicLayoutEffect = require("./useIsomorphicLayoutEffect.cjs.js");
44
+ var jsxRuntime = require("react/jsx-runtime");
45
+ require("./actions.cjs.js");
46
+ var state_breakpoints = require("./state/breakpoints.cjs.js");
47
+ require("uuid");
48
+ require("./index.cjs3.js");
49
+ require("@emotion/css");
50
+ require("redux");
51
+ require("redux-thunk");
52
+ require("corporate-ipsum");
53
+ require("@emotion/serialize");
54
+ require("@emotion/utils");
55
+ require("use-sync-external-store/shim/with-selector");
56
+ require("next/dynamic");
57
+ require("./text-input.cjs.js");
58
+ require("./combobox.cjs.js");
59
+ require("use-sync-external-store/shim");
60
+ require("./types.cjs.js");
61
+ require("./box-models.cjs.js");
62
+ require("css-box-model");
63
+ require("color");
64
+ require("scroll-into-view-if-needed");
65
+ require("react-dom");
66
+ require("html-react-parser");
67
+ require("next/head");
68
+ require("zod");
69
+ require("@emotion/server/create-instance");
70
+ require("next/document");
71
+ require("cors");
72
+ require("path-to-regexp");
73
+ require("cookie");
74
+ require("http-proxy");
75
+ require("set-cookie-parser");
76
+ require("./constants.cjs.js");
77
+ require("next/link");
78
+ function _interopDefaultLegacy(e) {
79
+ return e && typeof e === "object" && "default" in e ? e : { "default": e };
80
+ }
81
+ var isHotkey__default = /* @__PURE__ */ _interopDefaultLegacy(isHotkey);
82
+ function useSyncDOMSelection(editor, isEnabled) {
83
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
84
+ if (!isEnabled.current || editor.selection == null || slateReact.ReactEditor.isFocused(editor))
85
+ return;
86
+ try {
87
+ const root = slateReact.ReactEditor.findDocumentOrShadowRoot(editor);
88
+ const domSelection = root.getSelection();
89
+ const newDomRange = slateReact.ReactEditor.toDOMRange(editor, editor.selection);
90
+ if (newDomRange) {
91
+ if (slate.Range.isBackward(editor.selection)) {
92
+ domSelection == null ? void 0 : domSelection.setBaseAndExtent(newDomRange.endContainer, newDomRange.endOffset, newDomRange.startContainer, newDomRange.startOffset);
93
+ } else {
94
+ domSelection == null ? void 0 : domSelection.setBaseAndExtent(newDomRange.startContainer, newDomRange.startOffset, newDomRange.endContainer, newDomRange.endOffset);
95
+ }
96
+ } else {
97
+ domSelection == null ? void 0 : domSelection.removeAllRanges();
98
+ }
99
+ } catch (e) {
100
+ console.error(e);
101
+ }
102
+ });
103
+ }
104
+ function RichTextV2Element(_a) {
105
+ var _b = _a, {
106
+ definition,
107
+ plugins
108
+ } = _b, props = __objRest(_b, [
109
+ "definition",
110
+ "plugins"
111
+ ]);
112
+ function initialRenderElement(props2) {
113
+ return props2.children;
114
+ }
115
+ const renderElement = plugins.reduce((renderFn, plugin) => (props2) => {
116
+ const {
117
+ control,
118
+ renderElement: renderElement2
119
+ } = plugin;
120
+ if (renderElement2 == null)
121
+ return renderFn(props2);
122
+ if (control == null || control.getElementValue == null)
123
+ return renderElement2(renderFn, void 0)(props2);
124
+ return /* @__PURE__ */ jsxRuntime.jsx(next.ControlValue, {
125
+ definition: control.definition,
126
+ data: control.getElementValue(props2.element),
127
+ children: (value) => renderElement2(renderFn, value)(props2)
128
+ });
129
+ }, initialRenderElement);
130
+ return renderElement(props);
131
+ }
132
+ function RichTextV2Leaf(_c) {
133
+ var _d = _c, {
134
+ definition,
135
+ plugins
136
+ } = _d, props = __objRest(_d, [
137
+ "definition",
138
+ "plugins"
139
+ ]);
140
+ function initialRenderLeaf({
141
+ attributes,
142
+ children,
143
+ leaf
144
+ }) {
145
+ return /* @__PURE__ */ jsxRuntime.jsx("span", __spreadProps(__spreadValues({
146
+ className: leaf.className
147
+ }, attributes), {
148
+ children
149
+ }));
150
+ }
151
+ const renderLeaf = plugins.reduce((renderFn, plugin) => (props2) => {
152
+ const {
153
+ control,
154
+ renderLeaf: renderLeaf2
155
+ } = plugin;
156
+ if ((control == null ? void 0 : control.definition) == null || renderLeaf2 == null)
157
+ return renderFn(props2);
158
+ if (control.getLeafValue == null)
159
+ return renderLeaf2(renderFn, void 0)(props2);
160
+ return /* @__PURE__ */ jsxRuntime.jsx(next.ControlValue, {
161
+ definition: control.definition,
162
+ data: control.getLeafValue(props2.leaf),
163
+ children: (value) => renderLeaf2(renderFn, value)(props2)
164
+ });
165
+ }, initialRenderLeaf);
166
+ return renderLeaf(props);
167
+ }
168
+ function isChangeWithinPreviousSec(change) {
169
+ var _a;
170
+ return performance.now() - ((_a = change == null ? void 0 : change.time) != null ? _a : 0) < 1e3;
171
+ }
172
+ function useSyncRemoteChanges(editor, data) {
173
+ const isInBuilder = next.useIsInBuilder();
174
+ React.useEffect(() => {
175
+ var _a, _b, _c;
176
+ if (!isChangeWithinPreviousSec(editor.localChanges.get((_a = data == null ? void 0 : data.key) != null ? _a : "")) && data && isInBuilder) {
177
+ editor.children = reactPage.richTextV2DataToDescendents(data);
178
+ editor.selection = (_c = (_b = editor == null ? void 0 : editor.localChanges.get(data.key)) == null ? void 0 : _b.selection) != null ? _c : null;
179
+ editor.onChange();
180
+ }
181
+ }, [editor, data]);
182
+ }
183
+ function usePresetValue(definition) {
184
+ const breakpoints = next.useBreakpoints();
185
+ return React.useMemo(() => {
186
+ var _a;
187
+ return [{
188
+ type: reactPage.BlockType.Default,
189
+ children: [__spreadValues({
190
+ text: (_a = definition.config.defaultValue) != null ? _a : ""
191
+ }, definition.config.mode === reactPage.RichTextV2Mode.Inline ? {} : {
192
+ typography: {
193
+ style: [{
194
+ deviceId: state_breakpoints.getBaseBreakpoint(breakpoints).id,
195
+ value: {
196
+ fontWeight: 400,
197
+ fontSize: {
198
+ value: 18,
199
+ unit: "px"
200
+ },
201
+ lineHeight: 1.5
202
+ }
203
+ }, ...breakpoints.some(({
204
+ id
205
+ }) => id === state_breakpoints.DefaultBreakpointID.Mobile) ? [{
206
+ deviceId: state_breakpoints.DefaultBreakpointID.Mobile,
207
+ value: {
208
+ fontSize: {
209
+ value: 16,
210
+ unit: "px"
211
+ }
212
+ }
213
+ }] : []]
214
+ }
215
+ })]
216
+ }];
217
+ }, [definition.config.mode, definition.config.defaultValue, breakpoints]);
218
+ }
219
+ const defaultValue = [{
220
+ type: reactPage.BlockType.Default,
221
+ children: [{
222
+ text: ""
223
+ }]
224
+ }];
225
+ function EditableTextV2({
226
+ text,
227
+ definition,
228
+ control
229
+ }) {
230
+ const plugins = React.useMemo(() => {
231
+ var _a;
232
+ const plugins2 = [
233
+ ...((_a = definition == null ? void 0 : definition.config) == null ? void 0 : _a.mode) === reactPage.RichTextV2Mode.Inline ? [reactPage.InlineModePlugin()] : [reactPage.BlockPlugin(), reactPage.TypographyPlugin(), reactPage.TextAlignPlugin(), reactPage.InlinePlugin(), index.LinkPlugin()]
234
+ ];
235
+ return plugins2;
236
+ }, [definition]);
237
+ const [editor] = React.useState(() => plugins.reduceRight((editor2, plugin) => {
238
+ var _a, _b;
239
+ return (_b = (_a = plugin == null ? void 0 : plugin.withPlugin) == null ? void 0 : _a.call(plugin, editor2)) != null ? _b : editor2;
240
+ }, index$1.withLocalChanges(index$2.withBuilder(slateReact.withReact(slate.createEditor())))));
241
+ React.useEffect(() => {
242
+ if (control == null)
243
+ return;
244
+ const element = slateReact.ReactEditor.toDOMNode(editor, editor);
245
+ return next.pollBoxModel({
246
+ element,
247
+ onBoxModelChange: (boxModel) => control.changeBoxModel(boxModel)
248
+ });
249
+ }, [editor, control]);
250
+ const isPreservingFocus = React.useRef(false);
251
+ useSyncDOMSelection(editor, isPreservingFocus);
252
+ const editMode = next.useBuilderEditMode();
253
+ React.useEffect(() => {
254
+ if (editMode !== reactPage.BuilderEditMode.CONTENT) {
255
+ isPreservingFocus.current = false;
256
+ slateReact.ReactEditor.deselect(editor);
257
+ }
258
+ }, [editMode]);
259
+ useSyncRemoteChanges(editor, text);
260
+ const presetValue = usePresetValue(definition);
261
+ const initialValue = React.useMemo(() => {
262
+ var _a;
263
+ return (_a = text && reactPage.richTextV2DataToDescendents(text)) != null ? _a : presetValue;
264
+ }, [text, presetValue]);
265
+ React.useEffect(() => {
266
+ control == null ? void 0 : control.setEditor(editor);
267
+ control == null ? void 0 : control.setDefaultValue(defaultValue);
268
+ }, [control, editor]);
269
+ React.useEffect(() => {
270
+ if (initialValue === presetValue) {
271
+ control == null ? void 0 : control.onLocalUserChange();
272
+ }
273
+ }, [control, initialValue, presetValue]);
274
+ const renderElement = React.useCallback((props) => {
275
+ return /* @__PURE__ */ jsxRuntime.jsx(RichTextV2Element, __spreadProps(__spreadValues({}, props), {
276
+ definition,
277
+ plugins
278
+ }));
279
+ }, [plugins, definition]);
280
+ const renderLeaf = React.useCallback((props) => {
281
+ return /* @__PURE__ */ jsxRuntime.jsx(RichTextV2Leaf, __spreadProps(__spreadValues({}, props), {
282
+ definition,
283
+ plugins
284
+ }));
285
+ }, [plugins, definition]);
286
+ const handleFocus = React.useCallback(() => {
287
+ isPreservingFocus.current = true;
288
+ control == null ? void 0 : control.select();
289
+ }, [control]);
290
+ const handleKeyDown = React.useCallback((e) => {
291
+ if (isHotkey__default["default"]("mod+shift+z", e))
292
+ return control == null ? void 0 : control.redo();
293
+ if (isHotkey__default["default"]("mod+z", e))
294
+ return control == null ? void 0 : control.undo();
295
+ if (isHotkey__default["default"]("escape")(e)) {
296
+ isPreservingFocus.current = false;
297
+ slateReact.ReactEditor.blur(editor);
298
+ control == null ? void 0 : control.switchToBuildMode();
299
+ }
300
+ if (editMode === reactPage.BuilderEditMode.CONTENT) {
301
+ e.stopPropagation();
302
+ }
303
+ plugins.forEach((plugin) => {
304
+ var _a;
305
+ return (_a = plugin == null ? void 0 : plugin.onKeyDown) == null ? void 0 : _a.call(plugin, e, editor);
306
+ });
307
+ }, [control, plugins, editor, editMode]);
308
+ const handleKeyUp = React.useCallback((e) => {
309
+ if (editMode === reactPage.BuilderEditMode.CONTENT) {
310
+ e.stopPropagation();
311
+ e.preventDefault();
312
+ }
313
+ }, [control, editor, editMode]);
314
+ const handleClick = React.useCallback((e) => {
315
+ if (editMode === reactPage.BuilderEditMode.CONTENT)
316
+ e.stopPropagation();
317
+ }, [editMode]);
318
+ const handleBlur = React.useCallback((e) => {
319
+ var _a;
320
+ if (e.relatedTarget == null)
321
+ return;
322
+ if (((_a = e.relatedTarget) == null ? void 0 : _a.getAttribute("contenteditable")) === "true")
323
+ isPreservingFocus.current = false;
324
+ }, []);
325
+ return /* @__PURE__ */ jsxRuntime.jsx(slateReact.Slate, {
326
+ editor,
327
+ value: initialValue,
328
+ children: /* @__PURE__ */ jsxRuntime.jsx(slateReact.Editable, {
329
+ renderLeaf,
330
+ renderElement,
331
+ onFocus: handleFocus,
332
+ onKeyDown: handleKeyDown,
333
+ onKeyUp: handleKeyUp,
334
+ onClick: handleClick,
335
+ onBlur: handleBlur,
336
+ readOnly: editMode !== reactPage.BuilderEditMode.CONTENT,
337
+ placeholder: "Write some text..."
338
+ })
339
+ });
340
+ }
341
+ exports.EditableTextV2 = EditableTextV2;
342
+ exports["default"] = EditableTextV2;
343
+ //# sourceMappingURL=index.cjs9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs9.js","sources":["../src/runtimes/react/controls/rich-text-v2/EditableTextV2/useSyncDOMSelection.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/useRemoteChanges.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.tsx"],"sourcesContent":["import { Editor, Range as SlateRange } from 'slate'\nimport { useIsomorphicLayoutEffect } from '../../../../../components/hooks/useIsomorphicLayoutEffect'\nimport { MutableRefObject } from 'react'\nimport { ReactEditor } from 'slate-react'\n\n/**\n * Clicking outside of the host blurs our `<Editable />`.\n * `<Editable />` only updates the DOM's selection to match slate when it is focused.\n * In the case of a panel being clicked this hook updates the DOM selection to match slate.\n */\nexport function useSyncDOMSelection(editor: Editor, isEnabled: MutableRefObject<boolean>) {\n useIsomorphicLayoutEffect(() => {\n if (!isEnabled.current || editor.selection == null || ReactEditor.isFocused(editor)) return\n try {\n const root = ReactEditor.findDocumentOrShadowRoot(editor) as Document\n const domSelection = root.getSelection()\n const newDomRange: Range | null = ReactEditor.toDOMRange(editor, editor.selection)\n\n if (newDomRange) {\n if (SlateRange.isBackward(editor.selection!)) {\n domSelection?.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset,\n )\n } else {\n domSelection?.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset,\n )\n }\n } else {\n domSelection?.removeAllRanges()\n }\n } catch (e) {\n console.error(e)\n }\n })\n}\n","import { RenderElementProps } from 'slate-react'\nimport { RichTextV2ControlDefinition } from '../../../../../controls'\nimport { ControlValue } from '../../control'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\ntype RichTextV2ElementProps = RenderElementProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Element({ definition, plugins, ...props }: RichTextV2ElementProps) {\n function initialRenderElement(props: RenderElementProps) {\n return props.children\n }\n\n const renderElement = plugins.reduce(\n (renderFn, plugin) => (props: RenderElementProps) => {\n const { control, renderElement } = plugin\n\n if (renderElement == null) return renderFn(props)\n\n if (control == null || control.getElementValue == null)\n return renderElement(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getElementValue(props.element)}>\n {value => renderElement(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderElement,\n )\n\n return renderElement(props)\n}\n","import { RenderLeafProps } from 'slate-react'\nimport { RichTextV2ControlDefinition } from '../../../../../controls'\nimport { ControlValue } from '../../control'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\ntype RichTextV2LeafProps = RenderLeafProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Leaf({ definition, plugins, ...props }: RichTextV2LeafProps) {\n function initialRenderLeaf({ attributes, children, leaf }: RenderLeafProps) {\n return (\n <span className={leaf.className} {...attributes}>\n {children}\n </span>\n )\n }\n\n const renderLeaf = plugins.reduce(\n (renderFn, plugin) => (props: RenderLeafProps) => {\n const { control, renderLeaf } = plugin\n\n if (control?.definition == null || renderLeaf == null) return renderFn(props)\n\n if (control.getLeafValue == null) return renderLeaf(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getLeafValue(props.leaf)}>\n {value => renderLeaf(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderLeaf,\n )\n\n return renderLeaf(props)\n}\n","import { useEffect } from 'react'\nimport { Editor } from 'slate'\nimport { RichTextV2ControlData, richTextV2DataToDescendents } from '../../../../../controls'\nimport { LocalChange } from '../../../../../slate'\nimport { useIsInBuilder } from '../../..'\n\n// From the component point of view we can't know if the change came from an action or a undo/redo\n// So we diff the time and force updates on actions that occured over a second ago.\nfunction isChangeWithinPreviousSec(change?: LocalChange) {\n return performance.now() - (change?.time ?? 0) < 1000\n}\n\nexport function useSyncRemoteChanges(editor: Editor, data?: RichTextV2ControlData) {\n const isInBuilder = useIsInBuilder()\n\n useEffect(() => {\n if (\n !isChangeWithinPreviousSec(editor.localChanges.get(data?.key ?? '')) &&\n data &&\n isInBuilder\n ) {\n editor.children = richTextV2DataToDescendents(data)\n editor.selection = editor?.localChanges.get(data.key)?.selection ?? null\n editor.onChange()\n }\n }, [editor, data])\n}\n","import { Descendant } from 'slate'\nimport { BlockType } from '../../../../../slate'\nimport { getBaseBreakpoint, DefaultBreakpointID } from '../../../../../state/modules/breakpoints'\nimport { useBreakpoints } from '../../..'\nimport { useMemo } from 'react'\nimport { RichTextV2ControlDefinition, RichTextV2Mode } from '../../../../../controls'\n\nexport function usePresetValue(definition: RichTextV2ControlDefinition): Descendant[] {\n const breakpoints = useBreakpoints()\n return useMemo(\n () => [\n {\n type: BlockType.Default,\n children: [\n {\n text: definition.config.defaultValue ?? '',\n ...(definition.config.mode === RichTextV2Mode.Inline\n ? {}\n : {\n typography: {\n style: [\n {\n deviceId: getBaseBreakpoint(breakpoints).id,\n value: {\n fontWeight: 400,\n fontSize: { value: 18, unit: 'px' },\n lineHeight: 1.5,\n },\n },\n ...(breakpoints.some(({ id }) => id === DefaultBreakpointID.Mobile)\n ? [\n {\n deviceId: DefaultBreakpointID.Mobile,\n value: { fontSize: { value: 16, unit: 'px' } },\n },\n ]\n : []),\n ],\n },\n }),\n },\n ],\n },\n ],\n [definition.config.mode, definition.config.defaultValue, breakpoints],\n )\n}\n\nexport const defaultValue = [\n {\n type: BlockType.Default,\n children: [\n {\n text: '',\n },\n ],\n },\n]\n","import {\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createEditor } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport {\n withReact,\n ReactEditor,\n RenderElementProps,\n RenderLeafProps,\n Slate,\n Editable,\n} from 'slate-react'\n\nimport {\n RichTextV2Control,\n RichTextV2ControlData,\n RichTextV2ControlDefinition,\n RichTextV2Mode,\n} from '../../../../../controls'\nimport { useBuilderEditMode } from '../../..'\nimport { BuilderEditMode } from '../../../../../state/modules/builder-edit-mode'\nimport { pollBoxModel } from '../../../poll-box-model'\nimport {\n BlockPlugin,\n InlineModePlugin,\n InlinePlugin,\n LinkPlugin,\n TextAlignPlugin,\n TypographyPlugin,\n withBuilder,\n withLocalChanges,\n} from '../../../../../slate'\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { RichTextV2Element } from './render-element'\nimport { RichTextV2Leaf } from './render-leaf'\nimport { richTextV2DataToDescendents } from '../../../../../controls/rich-text-v2/translation'\nimport { useSyncRemoteChanges } from './useRemoteChanges'\nimport { defaultValue, usePresetValue } from './usePresetValue'\n\nexport type RichTextV2ControlValue = ReactNode\n\nexport type Descriptors = { text?: RichTextV2ControlDefinition }\n\ntype Props = {\n text?: RichTextV2ControlData\n definition: RichTextV2ControlDefinition\n control: RichTextV2Control | null\n}\n\nexport function EditableTextV2({ text, definition, control }: Props) {\n const plugins = useMemo(() => {\n const plugins = [\n /**\n * TODO: we are manually referencing our default plugins for each mode here because\n * Referencing the real LinkPlugin causes a circular dependency.\n * When circular dependencies calm down we should update the plugin definition to use real plugins,\n * and just use the plugins that are defined by our config.\n */\n // ...(definition?.config?.plugins ?? []),\n ...(definition?.config?.mode === RichTextV2Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n ]\n return plugins\n }, [definition])\n\n const [editor] = useState(() =>\n plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n withLocalChanges(withBuilder(withReact(createEditor()))),\n ),\n )\n\n useEffect(() => {\n if (control == null) return\n\n const element = ReactEditor.toDOMNode(editor, editor)\n return pollBoxModel({\n element,\n onBoxModelChange: boxModel => control.changeBoxModel(boxModel),\n })\n }, [editor, control])\n\n // ------ Preserving selection ------\n\n const isPreservingFocus = useRef(false)\n useSyncDOMSelection(editor, isPreservingFocus)\n const editMode = useBuilderEditMode()\n\n useEffect(() => {\n /**\n * This is required because clicking on the overlay has `relatedTarget` null just like the sidebar, but\n * - in the case of the overlay we switch to BUILD mode\n * - in the case of the sidebar we preserve the selection\n */\n if (editMode !== BuilderEditMode.CONTENT) {\n isPreservingFocus.current = false\n ReactEditor.deselect(editor)\n }\n }, [editMode])\n\n // ------ Syncing remote changes ------\n\n useSyncRemoteChanges(editor, text)\n\n // ------ Default value ------\n\n const presetValue = usePresetValue(definition)\n\n const initialValue = useMemo(\n () => (text && richTextV2DataToDescendents(text)) ?? presetValue,\n [text, presetValue],\n )\n\n useEffect(() => {\n control?.setEditor(editor)\n control?.setDefaultValue(defaultValue)\n }, [control, editor])\n\n /**\n * When initialValue is set to the default value we need to trigger an local change so that the sidebar updates and so the data is saved\n */\n useEffect(() => {\n if (initialValue === presetValue) {\n control?.onLocalUserChange()\n }\n }, [control, initialValue, presetValue])\n\n // ------ Rendering ------\n\n const renderElement = useCallback(\n (props: RenderElementProps) => {\n return <RichTextV2Element {...props} definition={definition} plugins={plugins} />\n },\n [plugins, definition],\n )\n\n const renderLeaf = useCallback(\n (props: RenderLeafProps) => {\n return <RichTextV2Leaf {...props} definition={definition} plugins={plugins} />\n },\n [plugins, definition],\n )\n\n // ------ Event handlers ------\n\n const handleFocus = useCallback(() => {\n isPreservingFocus.current = true\n control?.select()\n }, [control])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return control?.redo()\n if (isHotkey('mod+z', e)) return control?.undo()\n if (isHotkey('escape')(e)) {\n isPreservingFocus.current = false\n ReactEditor.blur(editor)\n control?.switchToBuildMode()\n }\n\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n }\n\n plugins.forEach(plugin => plugin?.onKeyDown?.(e, editor))\n },\n [control, plugins, editor, editMode],\n )\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n e.preventDefault()\n }\n },\n [control, editor, editMode],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n if (editMode === BuilderEditMode.CONTENT) e.stopPropagation()\n },\n [editMode],\n )\n\n const handleBlur = useCallback((e: FocusEvent) => {\n // outside of iframe (overlay, sidebar, etc)\n if (e.relatedTarget == null) return\n // another text\n if (e.relatedTarget?.getAttribute('contenteditable') === 'true')\n isPreservingFocus.current = false\n }, [])\n\n return (\n <Slate editor={editor} value={initialValue}>\n <Editable\n renderLeaf={renderLeaf}\n renderElement={renderElement}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onClick={handleClick}\n onBlur={handleBlur}\n readOnly={editMode !== BuilderEditMode.CONTENT}\n placeholder=\"Write some text...\"\n />\n </Slate>\n )\n}\n\nexport default EditableTextV2\n"],"names":["editor","isEnabled","useIsomorphicLayoutEffect","current","selection","ReactEditor","isFocused","root","findDocumentOrShadowRoot","domSelection","getSelection","newDomRange","toDOMRange","SlateRange","isBackward","setBaseAndExtent","endContainer","endOffset","startContainer","startOffset","removeAllRanges","e","console","error","definition","plugins","props","children","renderElement","reduce","renderFn","plugin","control","getElementValue","undefined","ControlValue","element","value","initialRenderElement","attributes","leaf","className","renderLeaf","getLeafValue","initialRenderLeaf","change","performance","now","time","data","isInBuilder","useIsInBuilder","useEffect","isChangeWithinPreviousSec","localChanges","get","key","richTextV2DataToDescendents","onChange","breakpoints","useBreakpoints","useMemo","type","BlockType","Default","text","config","defaultValue","mode","RichTextV2Mode","Inline","typography","style","deviceId","getBaseBreakpoint","id","fontWeight","fontSize","unit","lineHeight","some","DefaultBreakpointID","Mobile","InlineModePlugin","BlockPlugin","TypographyPlugin","TextAlignPlugin","InlinePlugin","LinkPlugin","useState","reduceRight","withPlugin","withLocalChanges","withBuilder","withReact","createEditor","toDOMNode","pollBoxModel","onBoxModelChange","boxModel","changeBoxModel","isPreservingFocus","useRef","useSyncDOMSelection","editMode","useBuilderEditMode","BuilderEditMode","CONTENT","deselect","useSyncRemoteChanges","presetValue","usePresetValue","initialValue","setEditor","setDefaultValue","onLocalUserChange","useCallback","handleFocus","select","handleKeyDown","isHotkey","redo","undo","blur","switchToBuildMode","stopPropagation","forEach","onKeyDown","handleKeyUp","preventDefault","handleClick","handleBlur","relatedTarget","getAttribute","Slate","Editable"],"mappings":"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"}