@makeswift/runtime 0.10.3 → 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 (146) 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 +4 -4
  6. package/dist/Button.es.js +5 -5
  7. package/dist/Carousel.cjs.js +3 -3
  8. package/dist/Carousel.es.js +4 -4
  9. package/dist/Countdown.cjs.js +1 -3
  10. package/dist/Countdown.cjs.js.map +1 -1
  11. package/dist/Countdown.es.js +2 -4
  12. package/dist/Countdown.es.js.map +1 -1
  13. package/dist/Divider.cjs.js +1 -3
  14. package/dist/Divider.cjs.js.map +1 -1
  15. package/dist/Divider.es.js +2 -4
  16. package/dist/Divider.es.js.map +1 -1
  17. package/dist/Embed.cjs.js +1 -0
  18. package/dist/Embed.cjs.js.map +1 -1
  19. package/dist/Embed.es.js +2 -1
  20. package/dist/Embed.es.js.map +1 -1
  21. package/dist/Form.cjs.js +13 -13
  22. package/dist/Form.cjs.js.map +1 -1
  23. package/dist/Form.es.js +5 -5
  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 +1 -3
  28. package/dist/LiveProvider.cjs.js.map +1 -1
  29. package/dist/LiveProvider.es.js +3 -5
  30. package/dist/LiveProvider.es.js.map +1 -1
  31. package/dist/Navigation.cjs.js +12 -12
  32. package/dist/Navigation.cjs.js.map +1 -1
  33. package/dist/Navigation.es.js +12 -12
  34. package/dist/PreviewProvider.cjs.js +1 -3
  35. package/dist/PreviewProvider.cjs.js.map +1 -1
  36. package/dist/PreviewProvider.es.js +3 -5
  37. package/dist/PreviewProvider.es.js.map +1 -1
  38. package/dist/ReadOnlyText.cjs.js +7 -6
  39. package/dist/ReadOnlyText.cjs.js.map +1 -1
  40. package/dist/ReadOnlyText.es.js +4 -3
  41. package/dist/ReadOnlyText.es.js.map +1 -1
  42. package/dist/ReadOnlyTextV2.cjs.js +7 -60
  43. package/dist/ReadOnlyTextV2.cjs.js.map +1 -1
  44. package/dist/ReadOnlyTextV2.es.js +9 -62
  45. package/dist/ReadOnlyTextV2.es.js.map +1 -1
  46. package/dist/Root.cjs.js +1 -3
  47. package/dist/Root.cjs.js.map +1 -1
  48. package/dist/Root.es.js +2 -4
  49. package/dist/Root.es.js.map +1 -1
  50. package/dist/SocialLinks.cjs.js +6 -6
  51. package/dist/SocialLinks.cjs.js.map +1 -1
  52. package/dist/SocialLinks.es.js +7 -7
  53. package/dist/Video.cjs.js +1 -0
  54. package/dist/Video.cjs.js.map +1 -1
  55. package/dist/Video.es.js +2 -1
  56. package/dist/Video.es.js.map +1 -1
  57. package/dist/builder.cjs.js +1 -0
  58. package/dist/builder.cjs.js.map +1 -1
  59. package/dist/builder.es.js +1 -0
  60. package/dist/builder.es.js.map +1 -1
  61. package/dist/components.cjs.js +3 -3
  62. package/dist/components.es.js +3 -3
  63. package/dist/control-serialization.es.js +1 -1
  64. package/dist/controls.cjs.js +1 -0
  65. package/dist/controls.cjs.js.map +1 -1
  66. package/dist/controls.es.js +2 -1
  67. package/dist/controls.es.js.map +1 -1
  68. package/dist/index.cjs.js +120 -256
  69. package/dist/index.cjs.js.map +1 -1
  70. package/dist/index.cjs3.js +107 -21
  71. package/dist/index.cjs3.js.map +1 -1
  72. package/dist/index.cjs4.js +57 -16
  73. package/dist/index.cjs4.js.map +1 -1
  74. package/dist/index.cjs5.js +42 -81
  75. package/dist/index.cjs5.js.map +1 -1
  76. package/dist/index.cjs6.js +82 -17
  77. package/dist/index.cjs6.js.map +1 -1
  78. package/dist/index.cjs7.js +18 -377
  79. package/dist/index.cjs7.js.map +1 -1
  80. package/dist/index.cjs8.js +258 -181
  81. package/dist/index.cjs8.js.map +1 -1
  82. package/dist/index.cjs9.js +343 -0
  83. package/dist/index.cjs9.js.map +1 -0
  84. package/dist/index.es.js +125 -260
  85. package/dist/index.es.js.map +1 -1
  86. package/dist/index.es2.js +1 -1
  87. package/dist/index.es3.js +103 -22
  88. package/dist/index.es3.js.map +1 -1
  89. package/dist/index.es4.js +57 -16
  90. package/dist/index.es4.js.map +1 -1
  91. package/dist/index.es5.js +42 -80
  92. package/dist/index.es5.js.map +1 -1
  93. package/dist/index.es6.js +81 -17
  94. package/dist/index.es6.js.map +1 -1
  95. package/dist/index.es7.js +18 -371
  96. package/dist/index.es7.js.map +1 -1
  97. package/dist/index.es8.js +259 -182
  98. package/dist/index.es8.js.map +1 -1
  99. package/dist/index.es9.js +336 -0
  100. package/dist/index.es9.js.map +1 -0
  101. package/dist/main.cjs.js +1 -0
  102. package/dist/main.cjs.js.map +1 -1
  103. package/dist/main.es.js +1 -0
  104. package/dist/main.es.js.map +1 -1
  105. package/dist/next.cjs.js +1 -3
  106. package/dist/next.cjs.js.map +1 -1
  107. package/dist/next.es.js +2 -4
  108. package/dist/next.es.js.map +1 -1
  109. package/dist/prop-controllers.cjs.js +1 -0
  110. package/dist/prop-controllers.cjs.js.map +1 -1
  111. package/dist/prop-controllers.es.js +1 -0
  112. package/dist/prop-controllers.es.js.map +1 -1
  113. package/dist/react-page.cjs.js +26 -6
  114. package/dist/react-page.cjs.js.map +1 -1
  115. package/dist/react-page.es.js +26 -7
  116. package/dist/react-page.es.js.map +1 -1
  117. package/dist/react.cjs.js +1 -3
  118. package/dist/react.cjs.js.map +1 -1
  119. package/dist/react.es.js +1 -3
  120. package/dist/react.es.js.map +1 -1
  121. package/dist/slate.cjs.js +9 -6
  122. package/dist/slate.cjs.js.map +1 -1
  123. package/dist/slate.es.js +9 -7
  124. package/dist/slate.es.js.map +1 -1
  125. package/dist/toText.cjs.js +67 -0
  126. package/dist/toText.cjs.js.map +1 -0
  127. package/dist/toText.es.js +66 -0
  128. package/dist/toText.es.js.map +1 -0
  129. package/dist/types/src/components/builtin/Text/register.d.ts.map +1 -1
  130. package/dist/types/src/controls/rich-text-v2/rich-text-v2.d.ts +2 -4
  131. package/dist/types/src/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  132. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.d.ts.map +1 -1
  133. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.d.ts.map +1 -1
  134. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.d.ts +10 -0
  135. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.d.ts.map +1 -0
  136. package/dist/types/src/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.d.ts.map +1 -1
  137. package/dist/types/src/slate/BuilderPlugin/index.d.ts +2 -1
  138. package/dist/types/src/slate/BuilderPlugin/index.d.ts.map +1 -1
  139. package/dist/types/src/slate/InlineModePlugin/index.d.ts.map +1 -1
  140. package/dist/types/src/slate/index.d.ts +1 -0
  141. package/dist/types/src/slate/index.d.ts.map +1 -1
  142. package/dist/types/src/slate/utils/index.d.ts +2 -0
  143. package/dist/types/src/slate/utils/index.d.ts.map +1 -0
  144. package/dist/types/src/slate/utils/toText.d.ts +4 -0
  145. package/dist/types/src/slate/utils/toText.d.ts.map +1 -0
  146. package/package.json +1 -1
@@ -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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"}