@makeswift/runtime 0.9.0 → 0.9.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 (200) hide show
  1. package/dist/Box.cjs.js +15 -15
  2. package/dist/Box.cjs.js.map +1 -1
  3. package/dist/Box.es.js +10 -10
  4. package/dist/Button.cjs.js +12 -12
  5. package/dist/Button.cjs.js.map +1 -1
  6. package/dist/Button.es.js +10 -10
  7. package/dist/Carousel.cjs.js +28 -28
  8. package/dist/Carousel.cjs.js.map +1 -1
  9. package/dist/Carousel.es.js +7 -7
  10. package/dist/Countdown.cjs.js +15 -15
  11. package/dist/Countdown.cjs.js.map +1 -1
  12. package/dist/Countdown.es.js +7 -7
  13. package/dist/Divider.cjs.js +12 -12
  14. package/dist/Divider.cjs.js.map +1 -1
  15. package/dist/Divider.es.js +10 -10
  16. package/dist/Embed.cjs.js +3 -30
  17. package/dist/Embed.cjs.js.map +1 -1
  18. package/dist/Embed.es.js +2 -29
  19. package/dist/Embed.es.js.map +1 -1
  20. package/dist/Form.cjs.js +51 -51
  21. package/dist/Form.cjs.js.map +1 -1
  22. package/dist/Form.es.js +7 -7
  23. package/dist/Image.cjs.js +8 -8
  24. package/dist/Image.cjs.js.map +1 -1
  25. package/dist/Image.es.js +7 -7
  26. package/dist/LiveProvider.cjs.js +6 -6
  27. package/dist/LiveProvider.es.js +8 -8
  28. package/dist/Navigation.cjs.js +27 -27
  29. package/dist/Navigation.cjs.js.map +1 -1
  30. package/dist/Navigation.es.js +6 -6
  31. package/dist/PreviewProvider.cjs.js +7 -7
  32. package/dist/PreviewProvider.cjs.js.map +1 -1
  33. package/dist/PreviewProvider.es.js +7 -7
  34. package/dist/ReadOnlyText.cjs.js +16 -13
  35. package/dist/ReadOnlyText.cjs.js.map +1 -1
  36. package/dist/ReadOnlyText.es.js +11 -8
  37. package/dist/ReadOnlyText.es.js.map +1 -1
  38. package/dist/ReadOnlyTextV2.cjs.js +13 -10
  39. package/dist/ReadOnlyTextV2.cjs.js.map +1 -1
  40. package/dist/ReadOnlyTextV2.es.js +9 -6
  41. package/dist/ReadOnlyTextV2.es.js.map +1 -1
  42. package/dist/Root.cjs.js +8 -8
  43. package/dist/Root.cjs.js.map +1 -1
  44. package/dist/Root.es.js +6 -6
  45. package/dist/SocialLinks.cjs.js +14 -14
  46. package/dist/SocialLinks.cjs.js.map +1 -1
  47. package/dist/SocialLinks.es.js +10 -10
  48. package/dist/Text.cjs.js +4 -4
  49. package/dist/Text.es.js +5 -5
  50. package/dist/Video.cjs.js +3 -30
  51. package/dist/Video.cjs.js.map +1 -1
  52. package/dist/Video.es.js +2 -29
  53. package/dist/Video.es.js.map +1 -1
  54. package/dist/builder.cjs.js +4 -2
  55. package/dist/builder.cjs.js.map +1 -1
  56. package/dist/builder.es.js +4 -2
  57. package/dist/builder.es.js.map +1 -1
  58. package/dist/components.cjs.js +9 -9
  59. package/dist/components.es.js +9 -9
  60. package/dist/control-serialization.cjs.js +88 -12
  61. package/dist/control-serialization.cjs.js.map +1 -1
  62. package/dist/control-serialization.es.js +89 -13
  63. package/dist/control-serialization.es.js.map +1 -1
  64. package/dist/controls.cjs.js +15 -4
  65. package/dist/controls.cjs.js.map +1 -1
  66. package/dist/controls.es.js +6 -3
  67. package/dist/controls.es.js.map +1 -1
  68. package/dist/deepEqual.cjs.js +40 -0
  69. package/dist/deepEqual.cjs.js.map +1 -0
  70. package/dist/deepEqual.es.js +39 -0
  71. package/dist/deepEqual.es.js.map +1 -0
  72. package/dist/index.cjs.js +102 -98
  73. package/dist/index.cjs.js.map +1 -1
  74. package/dist/index.cjs10.js +173 -249
  75. package/dist/index.cjs10.js.map +1 -1
  76. package/dist/index.cjs11.js +375 -0
  77. package/dist/index.cjs11.js.map +1 -0
  78. package/dist/index.cjs2.js +14 -16
  79. package/dist/index.cjs2.js.map +1 -1
  80. package/dist/index.cjs4.js +2 -1
  81. package/dist/index.cjs4.js.map +1 -1
  82. package/dist/index.cjs6.js +700 -22
  83. package/dist/index.cjs6.js.map +1 -1
  84. package/dist/index.cjs7.js +37 -13
  85. package/dist/index.cjs7.js.map +1 -1
  86. package/dist/index.cjs8.js +17 -41
  87. package/dist/index.cjs8.js.map +1 -1
  88. package/dist/index.cjs9.js +13 -266
  89. package/dist/index.cjs9.js.map +1 -1
  90. package/dist/index.es.js +85 -80
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.es10.js +174 -250
  93. package/dist/index.es10.js.map +1 -1
  94. package/dist/index.es11.js +368 -0
  95. package/dist/index.es11.js.map +1 -0
  96. package/dist/index.es2.js +3 -5
  97. package/dist/index.es2.js.map +1 -1
  98. package/dist/index.es3.js +1 -1
  99. package/dist/index.es4.js +2 -1
  100. package/dist/index.es4.js.map +1 -1
  101. package/dist/index.es6.js +695 -22
  102. package/dist/index.es6.js.map +1 -1
  103. package/dist/index.es7.js +33 -14
  104. package/dist/index.es7.js.map +1 -1
  105. package/dist/index.es8.js +17 -39
  106. package/dist/index.es8.js.map +1 -1
  107. package/dist/index.es9.js +12 -261
  108. package/dist/index.es9.js.map +1 -1
  109. package/dist/leaf.cjs.js +1 -1
  110. package/dist/leaf.cjs.js.map +1 -1
  111. package/dist/leaf.es.js +2 -2
  112. package/dist/main.cjs.js +4 -2
  113. package/dist/main.cjs.js.map +1 -1
  114. package/dist/main.es.js +4 -2
  115. package/dist/main.es.js.map +1 -1
  116. package/dist/next.cjs.js +3 -3
  117. package/dist/next.es.js +4 -4
  118. package/dist/prop-controllers.cjs.js +4 -2
  119. package/dist/prop-controllers.cjs.js.map +1 -1
  120. package/dist/prop-controllers.es.js +4 -2
  121. package/dist/prop-controllers.es.js.map +1 -1
  122. package/dist/react-page.cjs.js +958 -1431
  123. package/dist/react-page.cjs.js.map +1 -1
  124. package/dist/react-page.es.js +852 -1343
  125. package/dist/react-page.es.js.map +1 -1
  126. package/dist/react.cjs.js +3 -3
  127. package/dist/react.es.js +3 -3
  128. package/dist/select.cjs.js +21 -0
  129. package/dist/select.cjs.js.map +1 -0
  130. package/dist/select.es.js +16 -0
  131. package/dist/select.es.js.map +1 -0
  132. package/dist/slate.cjs.js +213 -12
  133. package/dist/slate.cjs.js.map +1 -1
  134. package/dist/slate.es.js +207 -6
  135. package/dist/slate.es.js.map +1 -1
  136. package/dist/types/src/api/react.d.ts.map +1 -1
  137. package/dist/types/src/builder/serialization/control-serialization.d.ts +3 -3
  138. package/dist/types/src/builder/serialization/control-serialization.d.ts.map +1 -1
  139. package/dist/types/src/builder/serialization/controls/rich-text-v2.d.ts +2 -2
  140. package/dist/types/src/builder/serialization/controls/rich-text-v2.d.ts.map +1 -1
  141. package/dist/types/src/builder/serialization/controls/style-v2.d.ts +5 -0
  142. package/dist/types/src/builder/serialization/controls/style-v2.d.ts.map +1 -0
  143. package/dist/types/src/components/builtin/Button/Button.d.ts +1 -1
  144. package/dist/types/src/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +1 -1
  145. package/dist/types/src/components/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  146. package/dist/types/src/components/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  147. package/dist/types/src/components/page/Page.d.ts.map +1 -1
  148. package/dist/types/src/controls/control.d.ts +4 -2
  149. package/dist/types/src/controls/control.d.ts.map +1 -1
  150. package/dist/types/src/controls/icon-radio-group.d.ts +29 -0
  151. package/dist/types/src/controls/icon-radio-group.d.ts.map +1 -0
  152. package/dist/types/src/controls/index.d.ts +2 -0
  153. package/dist/types/src/controls/index.d.ts.map +1 -1
  154. package/dist/types/src/controls/rich-text/translation.d.ts +1 -1
  155. package/dist/types/src/controls/rich-text/translation.d.ts.map +1 -1
  156. package/dist/types/src/controls/rich-text-v2/rich-text-v2.d.ts +12 -3
  157. package/dist/types/src/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  158. package/dist/types/src/controls/shape.d.ts +1 -2
  159. package/dist/types/src/controls/shape.d.ts.map +1 -1
  160. package/dist/types/src/controls/style-v2.d.ts +64 -0
  161. package/dist/types/src/controls/style-v2.d.ts.map +1 -0
  162. package/dist/types/src/next/client.d.ts.map +1 -1
  163. package/dist/types/src/next/document.d.ts.map +1 -1
  164. package/dist/types/src/prop-controllers/descriptors.d.ts +6 -3
  165. package/dist/types/src/prop-controllers/descriptors.d.ts.map +1 -1
  166. package/dist/types/src/prop-controllers/instances.d.ts +2 -2
  167. package/dist/types/src/prop-controllers/instances.d.ts.map +1 -1
  168. package/dist/types/src/prop-controllers/introspection.d.ts.map +1 -1
  169. package/dist/types/src/runtimes/react/controls/control.d.ts +5 -2
  170. package/dist/types/src/runtimes/react/controls/control.d.ts.map +1 -1
  171. package/dist/types/src/runtimes/react/controls/icon-radio-group.d.ts +4 -0
  172. package/dist/types/src/runtimes/react/controls/icon-radio-group.d.ts.map +1 -0
  173. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.d.ts +2 -1
  174. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.d.ts.map +1 -1
  175. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.d.ts +10 -0
  176. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.d.ts.map +1 -0
  177. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.d.ts +10 -0
  178. package/dist/types/src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.d.ts.map +1 -0
  179. package/dist/types/src/runtimes/react/controls/rich-text-v2/rich-text-v2.d.ts +1 -1
  180. package/dist/types/src/runtimes/react/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  181. package/dist/types/src/runtimes/react/controls/style-v2.d.ts +13 -0
  182. package/dist/types/src/runtimes/react/controls/style-v2.d.ts.map +1 -0
  183. package/dist/types/src/runtimes/react/controls.d.ts.map +1 -1
  184. package/dist/types/src/runtimes/react/index.d.ts.map +1 -1
  185. package/dist/types/src/slate/BlockPlugin/index.d.ts +4 -0
  186. package/dist/types/src/slate/BlockPlugin/index.d.ts.map +1 -1
  187. package/dist/types/src/slate/ColorPlugin/index.d.ts +10 -0
  188. package/dist/types/src/slate/ColorPlugin/index.d.ts.map +1 -0
  189. package/dist/types/src/slate/InlineModePlugin/index.d.ts +2 -0
  190. package/dist/types/src/slate/InlineModePlugin/index.d.ts.map +1 -1
  191. package/dist/types/src/slate/TextAlignPlugin/index.d.ts +9 -0
  192. package/dist/types/src/slate/TextAlignPlugin/index.d.ts.map +1 -0
  193. package/dist/types/src/slate/index.d.ts +2 -0
  194. package/dist/types/src/slate/index.d.ts.map +1 -1
  195. package/dist/types/src/slate/types.d.ts +39 -0
  196. package/dist/types/src/slate/types.d.ts.map +1 -1
  197. package/dist/types/src/slate/utils/responsive.d.ts +16 -0
  198. package/dist/types/src/slate/utils/responsive.d.ts.map +1 -0
  199. package/dist/useMediaQuery.es.js +1 -1
  200. package/package.json +1 -1
@@ -33,31 +33,33 @@ var __objRest = (source, exclude) => {
33
33
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
34
34
  var React = require("react");
35
35
  var slate = require("slate");
36
+ var isHotkey = require("is-hotkey");
37
+ var slateHistory = require("slate-history");
36
38
  var slateReact = require("slate-react");
37
- var css = require("@emotion/css");
38
- var boxModels = require("./box-models.cjs.js");
39
39
  var reactPage = require("./react-page.cjs.js");
40
- var leaf = require("./leaf.cjs.js");
40
+ var css = require("@emotion/css");
41
+ require("@emotion/serialize");
42
+ require("@emotion/utils");
41
43
  var next = require("./index.cjs.js");
42
44
  require("./state/breakpoints.cjs.js");
43
- var isHotkey = require("is-hotkey");
44
- var jsxRuntime = require("react/jsx-runtime");
45
- var index = require("./index.cjs3.js");
46
- var index$1 = require("./index.cjs5.js");
47
- var index$2 = require("./index.cjs7.js");
45
+ require("./index.cjs6.js");
46
+ var index = require("./index.cjs7.js");
47
+ var index$1 = require("./index.cjs8.js");
48
48
  var useIsomorphicLayoutEffect = require("./useIsomorphicLayoutEffect.cjs.js");
49
- require("css-box-model");
50
- require("./actions.cjs.js");
49
+ var jsxRuntime = require("react/jsx-runtime");
51
50
  require("redux");
52
51
  require("redux-thunk");
52
+ require("./actions.cjs.js");
53
53
  require("use-sync-external-store/shim/with-selector");
54
54
  require("next/dynamic");
55
- require("@emotion/serialize");
56
- require("@emotion/utils");
57
55
  require("./text-input.cjs.js");
58
56
  require("./combobox.cjs.js");
57
+ require("./select.cjs.js");
59
58
  require("use-sync-external-store/shim");
60
59
  require("./types.cjs.js");
60
+ require("./deepEqual.cjs.js");
61
+ require("./box-models.cjs.js");
62
+ require("css-box-model");
61
63
  require("color");
62
64
  require("scroll-into-view-if-needed");
63
65
  require("react-dom");
@@ -74,202 +76,13 @@ require("set-cookie-parser");
74
76
  require("./constants.cjs.js");
75
77
  require("uuid");
76
78
  require("corporate-ipsum");
77
- require("next/link");
78
79
  function _interopDefaultLegacy(e) {
79
80
  return e && typeof e === "object" && "default" in e ? e : { "default": e };
80
81
  }
81
82
  var isHotkey__default = /* @__PURE__ */ _interopDefaultLegacy(isHotkey);
82
- function BlockElement({
83
- element,
84
- attributes,
85
- children
86
- }) {
87
- const blockStyles = [next.useStyle({
88
- margin: 0
89
- }), next.useStyle(next.useResponsiveStyle([element.textAlign], ([textAlign = "left"]) => ({
90
- textAlign
91
- })))];
92
- const quoteStyles = next.useStyle({
93
- padding: "0.5em 10px",
94
- fontSize: "1.25em",
95
- fontWeight: "300",
96
- borderLeft: "5px solid rgba(0, 0, 0, 0.1)"
97
- });
98
- switch (element.type) {
99
- case reactPage.BlockType.Text:
100
- return /* @__PURE__ */ jsxRuntime.jsx("span", __spreadProps(__spreadValues({}, attributes), {
101
- className: css.cx(...blockStyles),
102
- children
103
- }));
104
- case reactPage.BlockType.Paragraph:
105
- return /* @__PURE__ */ jsxRuntime.jsx("p", __spreadProps(__spreadValues({}, attributes), {
106
- className: css.cx(...blockStyles),
107
- children
108
- }));
109
- case reactPage.BlockType.Heading1:
110
- return /* @__PURE__ */ jsxRuntime.jsx("h1", __spreadProps(__spreadValues({}, attributes), {
111
- className: css.cx(...blockStyles),
112
- children
113
- }));
114
- case reactPage.BlockType.Heading2:
115
- return /* @__PURE__ */ jsxRuntime.jsx("h2", __spreadProps(__spreadValues({}, attributes), {
116
- className: css.cx(...blockStyles),
117
- children
118
- }));
119
- case reactPage.BlockType.Heading3:
120
- return /* @__PURE__ */ jsxRuntime.jsx("h3", __spreadProps(__spreadValues({}, attributes), {
121
- className: css.cx(...blockStyles),
122
- children
123
- }));
124
- case reactPage.BlockType.Heading4:
125
- return /* @__PURE__ */ jsxRuntime.jsx("h4", __spreadProps(__spreadValues({}, attributes), {
126
- className: css.cx(...blockStyles),
127
- children
128
- }));
129
- case reactPage.BlockType.Heading5:
130
- return /* @__PURE__ */ jsxRuntime.jsx("h5", __spreadProps(__spreadValues({}, attributes), {
131
- className: css.cx(...blockStyles),
132
- children
133
- }));
134
- case reactPage.BlockType.Heading6:
135
- return /* @__PURE__ */ jsxRuntime.jsx("h6", __spreadProps(__spreadValues({}, attributes), {
136
- className: css.cx(...blockStyles),
137
- children
138
- }));
139
- case reactPage.BlockType.BlockQuote:
140
- return /* @__PURE__ */ jsxRuntime.jsx("blockquote", __spreadProps(__spreadValues({}, attributes), {
141
- className: css.cx(...blockStyles, quoteStyles),
142
- children
143
- }));
144
- case reactPage.BlockType.OrderedList:
145
- return /* @__PURE__ */ jsxRuntime.jsx("ol", __spreadProps(__spreadValues({}, attributes), {
146
- className: css.cx(...blockStyles),
147
- style: {
148
- listStylePosition: "inside"
149
- },
150
- children
151
- }));
152
- case reactPage.BlockType.UnorderedList:
153
- return /* @__PURE__ */ jsxRuntime.jsx("ul", __spreadProps(__spreadValues({}, attributes), {
154
- className: css.cx(...blockStyles),
155
- style: {
156
- listStylePosition: "inside"
157
- },
158
- children
159
- }));
160
- case reactPage.BlockType.ListItem:
161
- return /* @__PURE__ */ jsxRuntime.jsx("li", __spreadProps(__spreadValues({}, attributes), {
162
- className: css.cx(...blockStyles),
163
- children
164
- }));
165
- case reactPage.BlockType.ListItemChild:
166
- return /* @__PURE__ */ jsxRuntime.jsx("span", __spreadProps(__spreadValues({}, attributes), {
167
- className: css.cx(...blockStyles),
168
- children
169
- }));
170
- default:
171
- return null;
172
- }
173
- }
174
- function StyledLink(_a) {
175
- var _b = _a, {
176
- className
177
- } = _b, restOfProps = __objRest(_b, [
178
- "className"
179
- ]);
180
- return /* @__PURE__ */ jsxRuntime.jsx(index.Link, __spreadProps(__spreadValues({}, restOfProps), {
181
- className: css.cx(next.useStyle({
182
- textDecoration: "none"
183
- }), className)
184
- }));
185
- }
186
- function InlineElement({
187
- element,
188
- attributes,
189
- children
190
- }) {
191
- switch (element.type) {
192
- case reactPage.InlineType.Code:
193
- return /* @__PURE__ */ jsxRuntime.jsx("code", __spreadProps(__spreadValues({}, attributes), {
194
- children
195
- }));
196
- case reactPage.InlineType.SuperScript:
197
- return /* @__PURE__ */ jsxRuntime.jsx("sup", __spreadProps(__spreadValues({}, attributes), {
198
- children
199
- }));
200
- case reactPage.InlineType.SubScript:
201
- return /* @__PURE__ */ jsxRuntime.jsx("sub", __spreadProps(__spreadValues({}, attributes), {
202
- children
203
- }));
204
- case reactPage.InlineType.Link:
205
- return /* @__PURE__ */ jsxRuntime.jsx(StyledLink, __spreadProps(__spreadValues({}, attributes), {
206
- link: element.link,
207
- children
208
- }));
209
- }
210
- }
211
- function Element(_c) {
212
- var _d = _c, {
213
- element
214
- } = _d, props = __objRest(_d, [
215
- "element"
216
- ]);
217
- switch (element.type) {
218
- case reactPage.InlineType.Code:
219
- case reactPage.InlineType.SuperScript:
220
- case reactPage.InlineType.SubScript:
221
- case reactPage.InlineType.Link:
222
- return /* @__PURE__ */ jsxRuntime.jsx(InlineElement, __spreadValues({
223
- element
224
- }, props));
225
- case reactPage.BlockType.Paragraph:
226
- case reactPage.BlockType.Heading1:
227
- case reactPage.BlockType.Heading2:
228
- case reactPage.BlockType.Heading3:
229
- case reactPage.BlockType.BlockQuote:
230
- case reactPage.BlockType.OrderedList:
231
- case reactPage.BlockType.UnorderedList:
232
- case reactPage.BlockType.ListItem:
233
- case reactPage.BlockType.ListItemChild:
234
- return /* @__PURE__ */ jsxRuntime.jsx(BlockElement, __spreadValues({
235
- element
236
- }, props));
237
- default:
238
- return /* @__PURE__ */ jsxRuntime.jsx("span", __spreadProps(__spreadValues({}, props.attributes), {
239
- children: props.children
240
- }));
241
- }
242
- }
243
- const COMMIT_DEBOUNCE_DELAY = 500;
244
- function useSyncWithBuilder(editor, text) {
245
- const [shouldCommit, setShouldCommit] = React.useState(true);
246
- const isInBuilder = next.useIsInBuilder();
247
- React.useEffect(() => {
248
- if (shouldCommit && text && isInBuilder) {
249
- const nextValue = reactPage.richTextDTOtoDAO(text);
250
- const nextSelection = reactPage.richTextDTOtoSelection(text);
251
- if (!next.deepEqual(editor.children, nextValue) || !next.deepEqual(editor.selection, nextSelection)) {
252
- editor.children = nextValue;
253
- editor.selection = nextSelection;
254
- editor.onChange();
255
- }
256
- }
257
- }, [editor, shouldCommit, text]);
258
- React.useEffect(() => {
259
- if (shouldCommit)
260
- return;
261
- const timeoutId = window.setTimeout(() => {
262
- setShouldCommit(true);
263
- }, COMMIT_DEBOUNCE_DELAY);
264
- return () => {
265
- window.clearTimeout(timeoutId);
266
- };
267
- }, [shouldCommit]);
268
- return React.useCallback(() => setShouldCommit(false), []);
269
- }
270
83
  function useSyncDOMSelection(editor, isEnabled) {
271
84
  useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
272
- if (!isEnabled || editor.selection == null || slateReact.ReactEditor.isFocused(editor))
85
+ if (!isEnabled.current || editor.selection == null || slateReact.ReactEditor.isFocused(editor))
273
86
  return;
274
87
  try {
275
88
  const root = slateReact.ReactEditor.findDocumentOrShadowRoot(editor);
@@ -289,84 +102,195 @@ function useSyncDOMSelection(editor, isEnabled) {
289
102
  }
290
103
  });
291
104
  }
105
+ function RichTextV2Element(_a) {
106
+ var _b = _a, {
107
+ definition,
108
+ plugins
109
+ } = _b, props = __objRest(_b, [
110
+ "definition",
111
+ "plugins"
112
+ ]);
113
+ const blockStyles = [reactPage.useStyle({
114
+ margin: 0
115
+ })];
116
+ function initialRenderElement(props2) {
117
+ switch (props2.element.type) {
118
+ case reactPage.BlockType.Default:
119
+ default:
120
+ if (definition.config.mode === reactPage.RichTextV2Mode.Inline) {
121
+ return /* @__PURE__ */ jsxRuntime.jsx("span", __spreadProps(__spreadValues({}, props2.attributes), {
122
+ className: css.cx(...blockStyles),
123
+ children: props2.children
124
+ }));
125
+ }
126
+ return /* @__PURE__ */ jsxRuntime.jsx("p", __spreadProps(__spreadValues({}, props2.attributes), {
127
+ className: css.cx(...blockStyles),
128
+ children: props2.children
129
+ }));
130
+ }
131
+ }
132
+ const renderElement = plugins.reduce((renderFn, plugin) => (props2) => {
133
+ const {
134
+ control,
135
+ renderElement: renderElement2
136
+ } = plugin;
137
+ if ((control == null ? void 0 : control.definition) == null || renderElement2 == null)
138
+ return renderFn(props2);
139
+ if (control.getElementValue == null)
140
+ return renderElement2(renderFn, void 0)(props2);
141
+ return /* @__PURE__ */ jsxRuntime.jsx(next.ControlValue, {
142
+ definition: control.definition,
143
+ data: control.getElementValue(props2.element),
144
+ children: (value) => renderElement2(renderFn, value)(props2)
145
+ });
146
+ }, initialRenderElement);
147
+ return renderElement(props);
148
+ }
149
+ function RichTextV2Leaf(_c) {
150
+ var _d = _c, {
151
+ definition,
152
+ plugins
153
+ } = _d, props = __objRest(_d, [
154
+ "definition",
155
+ "plugins"
156
+ ]);
157
+ function initialRenderLeaf({
158
+ attributes,
159
+ children,
160
+ leaf
161
+ }) {
162
+ return /* @__PURE__ */ jsxRuntime.jsx("span", __spreadProps(__spreadValues({
163
+ className: leaf.className
164
+ }, attributes), {
165
+ children
166
+ }));
167
+ }
168
+ const renderLeaf = plugins.reduce((renderFn, plugin) => (props2) => {
169
+ const {
170
+ control,
171
+ renderLeaf: renderLeaf2
172
+ } = plugin;
173
+ if ((control == null ? void 0 : control.definition) == null || renderLeaf2 == null)
174
+ return renderFn(props2);
175
+ if (control.getLeafValue == null)
176
+ return renderLeaf2(renderFn, void 0)(props2);
177
+ return /* @__PURE__ */ jsxRuntime.jsx(next.ControlValue, {
178
+ definition: control.definition,
179
+ data: control.getLeafValue(props2.leaf),
180
+ children: (value) => renderLeaf2(renderFn, value)(props2)
181
+ });
182
+ }, initialRenderLeaf);
183
+ return renderLeaf(props);
184
+ }
292
185
  const defaultText = [{
293
- type: reactPage.BlockType.Paragraph,
186
+ type: reactPage.BlockType.Default,
294
187
  children: [{
295
188
  text: ""
296
189
  }]
297
190
  }];
298
- const EditableText = React.forwardRef(function EditableText2({
299
- id,
191
+ function EditableTextV2({
300
192
  text,
301
- width,
302
- margin
303
- }, ref) {
304
- const [editor] = React.useState(() => reactPage.withBlock(index$1.withTypography(index$2.withBuilder(slateReact.withReact(slate.createEditor())))));
305
- const [isPreservingDOMSElection, setIsPreservingDOMSelection] = React.useState(false);
306
- useSyncDOMSelection(editor, isPreservingDOMSElection);
307
- const delaySync = useSyncWithBuilder(editor, text);
193
+ definition,
194
+ control
195
+ }) {
196
+ const plugins = React.useMemo(() => {
197
+ var _a, _b, _c;
198
+ const plugins2 = [...(_b = (_a = definition == null ? void 0 : definition.config) == null ? void 0 : _a.plugins) != null ? _b : [], ...((_c = definition == null ? void 0 : definition.config) == null ? void 0 : _c.mode) === reactPage.RichTextV2Mode.Inline ? [index.InlineModePlugin] : []];
199
+ return plugins2;
200
+ }, [definition]);
201
+ const [editor] = React.useState(() => plugins.reduceRight((editor2, plugin) => {
202
+ var _a, _b;
203
+ return (_b = (_a = plugin == null ? void 0 : plugin.withPlugin) == null ? void 0 : _a.call(plugin, editor2)) != null ? _b : editor2;
204
+ }, index$1.withBuilder(slateHistory.withHistory(slateReact.withReact(slate.createEditor())))));
205
+ const isPreservingFocus = React.useRef(false);
206
+ useSyncDOMSelection(editor, isPreservingFocus);
308
207
  const editMode = next.useBuilderEditMode();
309
- const [propControllers, setPropControllers] = React.useState(null);
310
- const controller = propControllers == null ? void 0 : propControllers.text;
311
208
  React.useEffect(() => {
312
- if (controller == null)
209
+ if (control == null)
313
210
  return;
314
211
  const element = slateReact.ReactEditor.toDOMNode(editor, editor);
315
212
  return next.pollBoxModel({
316
213
  element,
317
- onBoxModelChange: (boxModel) => controller.changeBoxModel(boxModel)
214
+ onBoxModelChange: (boxModel) => control.changeBoxModel(boxModel)
318
215
  });
319
- }, [editor, controller]);
320
- React.useImperativeHandle(ref, () => ({
321
- getDomNode() {
322
- return slateReact.ReactEditor.toDOMNode(editor, editor);
323
- },
324
- getBoxModel() {
325
- return boxModels.getBox(slateReact.ReactEditor.toDOMNode(editor, editor));
326
- },
327
- setPropControllers
328
- }), [editor, setPropControllers]);
329
- const initialValue = React.useMemo(() => text ? reactPage.richTextDTOtoDAO(text) : defaultText, [text]);
216
+ }, [editor, control]);
217
+ const renderElement = React.useCallback((props) => {
218
+ return /* @__PURE__ */ jsxRuntime.jsx(RichTextV2Element, __spreadProps(__spreadValues({}, props), {
219
+ definition,
220
+ plugins
221
+ }));
222
+ }, [plugins, definition]);
223
+ const renderLeaf = React.useCallback((props) => {
224
+ return /* @__PURE__ */ jsxRuntime.jsx(RichTextV2Leaf, __spreadProps(__spreadValues({}, props), {
225
+ definition,
226
+ plugins
227
+ }));
228
+ }, [plugins, definition]);
229
+ const initialValue = React.useMemo(() => text != null ? text : defaultText, [text]);
230
+ React.useEffect(() => {
231
+ if (editMode !== reactPage.BuilderEditMode.CONTENT) {
232
+ isPreservingFocus.current = false;
233
+ slateReact.ReactEditor.deselect(editor);
234
+ }
235
+ }, [editMode]);
330
236
  React.useEffect(() => {
331
- controller == null ? void 0 : controller.setSlateEditor(editor);
332
- }, [controller, editor]);
237
+ control == null ? void 0 : control.setEditor(editor);
238
+ control == null ? void 0 : control.setDefaultValue(defaultText);
239
+ }, [control, editor, defaultText]);
333
240
  const handleFocus = React.useCallback(() => {
334
- controller == null ? void 0 : controller.focus();
335
- setIsPreservingDOMSelection(true);
336
- }, [controller]);
241
+ isPreservingFocus.current = true;
242
+ control == null ? void 0 : control.select();
243
+ }, [control]);
337
244
  const handleKeyDown = React.useCallback((e) => {
338
245
  if (isHotkey__default["default"]("mod+shift+z", e))
339
- return controller == null ? void 0 : controller.redo();
246
+ return slateHistory.HistoryEditor.redo(editor);
340
247
  if (isHotkey__default["default"]("mod+z", e))
341
- return controller == null ? void 0 : controller.undo();
342
- if (isHotkey__default["default"]("escape")(e))
343
- return controller == null ? void 0 : controller.blur();
344
- reactPage.onKeyDown(e, editor);
345
- }, [controller, editor]);
248
+ return slateHistory.HistoryEditor.undo(editor);
249
+ if (isHotkey__default["default"]("escape")(e)) {
250
+ isPreservingFocus.current = false;
251
+ slateReact.ReactEditor.blur(editor);
252
+ control == null ? void 0 : control.switchToBuildMode();
253
+ }
254
+ plugins.forEach((plugin) => {
255
+ var _a;
256
+ return (_a = plugin == null ? void 0 : plugin.onKeyDown) == null ? void 0 : _a.call(plugin, e, editor);
257
+ });
258
+ }, [control, plugins, editor]);
259
+ const handleKeyUp = React.useCallback((e) => {
260
+ if (editMode === reactPage.BuilderEditMode.CONTENT)
261
+ e.preventDefault();
262
+ }, [control, editor, editMode]);
263
+ const handleClick = React.useCallback((e) => {
264
+ if (editMode === reactPage.BuilderEditMode.CONTENT)
265
+ e.stopPropagation();
266
+ }, [editMode]);
346
267
  const handleBlur = React.useCallback((e) => {
268
+ var _a;
347
269
  if (e.relatedTarget == null)
348
270
  return;
349
- setIsPreservingDOMSelection(false);
350
- slateReact.ReactEditor.deselect(editor);
271
+ if (((_a = e.relatedTarget) == null ? void 0 : _a.getAttribute("contenteditable")) === "true")
272
+ isPreservingFocus.current = false;
351
273
  }, []);
274
+ const handleOnChange = React.useCallback((value) => {
275
+ control == null ? void 0 : control.onChange(value);
276
+ }, [control]);
352
277
  return /* @__PURE__ */ jsxRuntime.jsx(slateReact.Slate, {
353
278
  editor,
279
+ onChange: handleOnChange,
354
280
  value: initialValue,
355
- onChange: delaySync,
356
281
  children: /* @__PURE__ */ jsxRuntime.jsx(slateReact.Editable, {
357
- id,
358
- renderLeaf: leaf.Leaf,
359
- renderElement: Element,
282
+ renderLeaf,
283
+ renderElement,
360
284
  onFocus: handleFocus,
361
285
  onKeyDown: handleKeyDown,
286
+ onKeyUp: handleKeyUp,
287
+ onClick: handleClick,
362
288
  onBlur: handleBlur,
363
- className: css.cx(width, margin),
364
289
  readOnly: editMode !== reactPage.BuilderEditMode.CONTENT,
365
290
  placeholder: "Write some text..."
366
291
  })
367
292
  });
368
- });
369
- var EditableText$1 = EditableText;
370
- exports.EditableText = EditableText;
371
- exports["default"] = EditableText$1;
293
+ }
294
+ exports.EditableTextV2 = EditableTextV2;
295
+ exports["default"] = EditableTextV2;
372
296
  //# sourceMappingURL=index.cjs10.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs10.js","sources":["../src/components/builtin/Text/components/Element/block.tsx","../src/components/builtin/Text/components/Element/inline.tsx","../src/components/builtin/Text/components/Element/element.tsx","../src/components/builtin/Text/EditableText/useSyncWithBuilder.tsx","../src/components/builtin/Text/EditableText/useSyncDOMSelection.tsx","../src/components/builtin/Text/EditableText/editable-text.tsx"],"sourcesContent":["import { cx } from '@emotion/css'\nimport { RenderElementProps } from 'slate-react'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { useResponsiveStyle } from '../../../../utils/responsive-style'\nimport { Block, BlockType } from '../../../../../slate'\n\nexport interface InlineRenderElementProps extends RenderElementProps {\n element: Block\n}\n\nexport function BlockElement({ element, attributes, children }: InlineRenderElementProps) {\n const blockStyles = [\n useStyle({ margin: 0 }),\n useStyle(useResponsiveStyle([element.textAlign], ([textAlign = 'left']) => ({ textAlign }))),\n ]\n\n const quoteStyles = useStyle({\n padding: '0.5em 10px',\n fontSize: '1.25em',\n fontWeight: '300',\n borderLeft: '5px solid rgba(0, 0, 0, 0.1)',\n })\n\n switch (element.type) {\n case BlockType.Text:\n return (\n <span {...attributes} className={cx(...blockStyles)}>\n {children}\n </span>\n )\n case BlockType.Paragraph:\n return (\n <p {...attributes} className={cx(...blockStyles)}>\n {children}\n </p>\n )\n case BlockType.Heading1:\n return (\n <h1 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h1>\n )\n case BlockType.Heading2:\n return (\n <h2 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h2>\n )\n case BlockType.Heading3:\n return (\n <h3 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h3>\n )\n case BlockType.Heading4:\n return (\n <h4 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h4>\n )\n case BlockType.Heading5:\n return (\n <h5 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h5>\n )\n case BlockType.Heading6:\n return (\n <h6 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h6>\n )\n case BlockType.BlockQuote:\n return (\n <blockquote {...attributes} className={cx(...blockStyles, quoteStyles)}>\n {children}\n </blockquote>\n )\n case BlockType.OrderedList:\n return (\n <ol {...attributes} className={cx(...blockStyles)} style={{ listStylePosition: 'inside' }}>\n {children}\n </ol>\n )\n case BlockType.UnorderedList:\n return (\n <ul {...attributes} className={cx(...blockStyles)} style={{ listStylePosition: 'inside' }}>\n {children}\n </ul>\n )\n case BlockType.ListItem:\n return (\n <li {...attributes} className={cx(...blockStyles)}>\n {children}\n </li>\n )\n case BlockType.ListItemChild:\n return (\n <span {...attributes} className={cx(...blockStyles)}>\n {children}\n </span>\n )\n\n default:\n return null\n }\n}\n","import { cx } from '@emotion/css'\nimport { ComponentPropsWithoutRef } from 'react'\nimport { RenderElementProps } from 'slate-react'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { Link } from '../../../../shared/Link'\nimport { Inline, InlineType } from '../../../../../slate'\n\nfunction StyledLink({ className, ...restOfProps }: ComponentPropsWithoutRef<typeof Link>) {\n return <Link {...restOfProps} className={cx(useStyle({ textDecoration: 'none' }), className)} />\n}\n\nexport interface InlineRenderElementProps extends RenderElementProps {\n element: Inline\n}\n\nexport function InlineElement({ element, attributes, children }: InlineRenderElementProps) {\n switch (element.type) {\n case InlineType.Code:\n return <code {...attributes}>{children}</code>\n case InlineType.SuperScript:\n return <sup {...attributes}>{children}</sup>\n case InlineType.SubScript:\n return <sub {...attributes}>{children}</sub>\n case InlineType.Link:\n return (\n <StyledLink {...attributes} link={element.link}>\n {children}\n </StyledLink>\n )\n }\n}\n","import { RenderElementProps } from 'slate-react'\nimport { BlockElement } from './block'\nimport { InlineElement } from './inline'\nimport { InlineType, BlockType } from '../../../../../slate'\n\nexport function Element({ element, ...props }: RenderElementProps) {\n switch (element.type) {\n case InlineType.Code:\n case InlineType.SuperScript:\n case InlineType.SubScript:\n case InlineType.Link:\n return <InlineElement element={element} {...props} />\n case BlockType.Paragraph:\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.BlockQuote:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return <BlockElement element={element} {...props} />\n default:\n return <span {...props.attributes}>{props.children}</span>\n }\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { Editor } from 'slate'\nimport { richTextDTOtoDAO, richTextDTOtoSelection } from '../../../../controls'\nimport { RichTextValue } from '../../../../prop-controllers'\nimport deepEqual from '../../../../utils/deepEqual'\nimport { useIsInBuilder } from '../../../../runtimes/react'\n\nconst COMMIT_DEBOUNCE_DELAY = 500\n\n/**\n * Compare new prop value with current editor and update editor\n * if the values are not equal.\n */\nexport function useSyncWithBuilder(editor: Editor, text?: RichTextValue) {\n const [shouldCommit, setShouldCommit] = useState(true)\n const isInBuilder = useIsInBuilder()\n\n useEffect(() => {\n if (shouldCommit && text && isInBuilder) {\n const nextValue = richTextDTOtoDAO(text)\n const nextSelection = richTextDTOtoSelection(text)\n if (!deepEqual(editor.children, nextValue) || !deepEqual(editor.selection, nextSelection)) {\n editor.children = nextValue\n editor.selection = nextSelection\n editor.onChange()\n }\n }\n }, [editor, shouldCommit, text])\n\n useEffect(() => {\n if (shouldCommit) return\n\n const timeoutId = window.setTimeout(() => {\n setShouldCommit(true)\n }, COMMIT_DEBOUNCE_DELAY)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [shouldCommit])\n\n return useCallback(() => setShouldCommit(false), [])\n}\n","import { ReactEditor } from 'slate-react'\nimport { useIsomorphicLayoutEffect } from '../../../hooks/useIsomorphicLayoutEffect'\nimport { Editor, Range as SlateRange } from 'slate'\n\n/**\n * Clicking outside of the host blurs our `<Editable />`.\n * `<Editable />` only updates the DOM's selection to match slate when it is focused.\n * In the case of a panel being clicked this hook updates the DOM selection to match slate.\n */\nexport function useSyncDOMSelection(editor: Editor, isEnabled: boolean) {\n useIsomorphicLayoutEffect(() => {\n if (!isEnabled || editor.selection == null || ReactEditor.isFocused(editor)) return\n try {\n const root = ReactEditor.findDocumentOrShadowRoot(editor) as Document\n const domSelection = root.getSelection()\n const newDomRange: Range | null = ReactEditor.toDOMRange(editor, editor.selection)\n\n if (newDomRange) {\n if (SlateRange.isBackward(editor.selection!)) {\n domSelection?.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset,\n )\n } else {\n domSelection?.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset,\n )\n }\n } else {\n domSelection?.removeAllRanges()\n }\n } catch (e) {\n console.error(e)\n }\n })\n}\n","import {\n FocusEvent,\n forwardRef,\n KeyboardEvent,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\n\nimport { createEditor } from 'slate'\nimport { Slate, Editable, withReact, ReactEditor } from 'slate-react'\n\nimport { ElementIDValue, RichTextValue } from '../../../../prop-controllers/descriptors'\nimport { cx } from '@emotion/css'\nimport { DescriptorsPropControllers } from '../../../../prop-controllers/instances'\nimport { Descriptors } from '../../../../runtimes/react/controls/rich-text'\nimport { getBox } from '../../../../box-model'\nimport { PropControllersHandle } from '../../../../state/modules/prop-controller-handles'\nimport { richTextDTOtoDAO } from '../../../../controls'\nimport { Leaf } from '../components/Leaf'\nimport { Element } from '../components/Element'\nimport { useSyncWithBuilder } from './useSyncWithBuilder'\nimport isHotkey from 'is-hotkey'\nimport { useBuilderEditMode } from '../../../../runtimes/react'\nimport { BuilderEditMode } from '../../../../state/modules/builder-edit-mode'\nimport { onKeyDown, withBlock, withTypography, withBuilder } from '../../../../slate'\nimport { pollBoxModel } from '../../../../runtimes/react/poll-box-model'\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { RichTextDAO, BlockType } from '../../../../slate'\n\ntype Props = {\n id?: ElementIDValue\n text?: RichTextValue\n width?: string\n margin?: string\n}\n\nconst defaultText: RichTextDAO = [{ type: BlockType.Paragraph, children: [{ text: '' }] }]\n\nexport const EditableText = forwardRef(function EditableText(\n { id, text, width, margin }: Props,\n ref: Ref<PropControllersHandle<Descriptors>>,\n) {\n const [editor] = useState(() => withBlock(withTypography(withBuilder(withReact(createEditor())))))\n const [isPreservingDOMSElection, setIsPreservingDOMSelection] = useState(false)\n useSyncDOMSelection(editor, isPreservingDOMSElection)\n const delaySync = useSyncWithBuilder(editor, text)\n const editMode = useBuilderEditMode()\n\n const [propControllers, setPropControllers] =\n useState<DescriptorsPropControllers<Descriptors> | null>(null)\n const controller = propControllers?.text\n\n useEffect(() => {\n if (controller == null) return\n\n const element = ReactEditor.toDOMNode(editor, editor)\n\n return pollBoxModel({\n element,\n onBoxModelChange: boxModel => controller.changeBoxModel(boxModel),\n })\n }, [editor, controller])\n\n useImperativeHandle(\n ref,\n () => ({\n getDomNode() {\n return ReactEditor.toDOMNode(editor, editor)\n },\n getBoxModel() {\n return getBox(ReactEditor.toDOMNode(editor, editor))\n },\n setPropControllers,\n }),\n [editor, setPropControllers],\n )\n\n const initialValue = useMemo(() => (text ? richTextDTOtoDAO(text) : defaultText), [text])\n\n useEffect(() => {\n controller?.setSlateEditor(editor)\n }, [controller, editor])\n\n const handleFocus = useCallback(() => {\n controller?.focus()\n setIsPreservingDOMSelection(true)\n }, [controller])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return controller?.redo()\n if (isHotkey('mod+z', e)) return controller?.undo()\n if (isHotkey('escape')(e)) return controller?.blur()\n onKeyDown(e, editor)\n },\n [controller, editor],\n )\n\n const handleBlur = useCallback((e: FocusEvent) => {\n // When clicking outside of the iframe (`relatedTarget` is null) we want to preserve the DOM selection.\n if (e.relatedTarget == null) return\n // Otherwise we want to deselect on blur and stop preserving selection.\n setIsPreservingDOMSelection(false)\n ReactEditor.deselect(editor)\n }, [])\n\n return (\n <Slate editor={editor} value={initialValue} onChange={delaySync}>\n <Editable\n id={id}\n renderLeaf={Leaf}\n renderElement={Element}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cx(width, margin)}\n readOnly={editMode !== BuilderEditMode.CONTENT}\n placeholder=\"Write some text...\"\n />\n </Slate>\n )\n})\n\nexport default EditableText\n"],"names":["element","attributes","children","blockStyles","useStyle","margin","useResponsiveStyle","textAlign","quoteStyles","padding","fontSize","fontWeight","borderLeft","type","BlockType","Text","cx","Paragraph","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","BlockQuote","OrderedList","listStylePosition","UnorderedList","ListItem","ListItemChild","className","restOfProps","Link","textDecoration","InlineType","Code","SuperScript","SubScript","link","props","COMMIT_DEBOUNCE_DELAY","editor","text","shouldCommit","setShouldCommit","useState","isInBuilder","useIsInBuilder","useEffect","nextValue","richTextDTOtoDAO","nextSelection","richTextDTOtoSelection","deepEqual","selection","onChange","timeoutId","window","setTimeout","clearTimeout","useCallback","isEnabled","useIsomorphicLayoutEffect","ReactEditor","isFocused","root","findDocumentOrShadowRoot","domSelection","getSelection","newDomRange","toDOMRange","SlateRange","isBackward","setBaseAndExtent","endContainer","endOffset","startContainer","startOffset","removeAllRanges","e","console","error","defaultText","EditableText","forwardRef","id","width","ref","withBlock","withTypography","withBuilder","withReact","createEditor","isPreservingDOMSElection","setIsPreservingDOMSelection","useSyncDOMSelection","delaySync","useSyncWithBuilder","editMode","useBuilderEditMode","propControllers","setPropControllers","controller","toDOMNode","pollBoxModel","onBoxModelChange","boxModel","changeBoxModel","useImperativeHandle","getDomNode","getBoxModel","getBox","initialValue","useMemo","setSlateEditor","handleFocus","focus","handleKeyDown","isHotkey","redo","undo","blur","onKeyDown","handleBlur","relatedTarget","deselect","Slate","Editable","Leaf","Element","BuilderEditMode","CONTENT"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs10.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/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 { cx } from '@emotion/css'\nimport { RenderElementProps } from 'slate-react'\nimport {\n RichTextV2ControlDefinition,\n RichTextV2Plugin,\n RichTextV2Mode,\n} from '../../../../../controls'\nimport { BlockType } from '../../../../../slate'\nimport { useStyle } from '../../../use-style'\nimport { ControlValue } from '../../control'\n\ntype RichTextV2ElementProps = RenderElementProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Element({ definition, plugins, ...props }: RichTextV2ElementProps) {\n const blockStyles = [useStyle({ margin: 0 })]\n\n function initialRenderElement(props: RenderElementProps) {\n switch (props.element.type) {\n case BlockType.Default:\n default:\n if (definition.config.mode === RichTextV2Mode.Inline) {\n return (\n <span {...props.attributes} className={cx(...blockStyles)}>\n {props.children}\n </span>\n )\n }\n\n return (\n <p {...props.attributes} className={cx(...blockStyles)}>\n {props.children}\n </p>\n )\n }\n }\n\n const renderElement = plugins.reduce(\n (renderFn, plugin) => (props: RenderElementProps) => {\n const { control, renderElement } = plugin\n\n if (control?.definition == null || renderElement == null) return renderFn(props)\n\n if (control.getElementValue == null) 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, RichTextV2Plugin } from '../../../../../controls'\nimport { ControlValue } from '../../control'\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 {\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { Descendant, createEditor } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport { withHistory, HistoryEditor } from 'slate-history'\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 { InlineModePlugin, withBuilder } from '../../../../../slate'\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { BlockType } from '../../../../../slate'\nimport { RichTextV2Element } from './render-element'\nimport { RichTextV2Leaf } from './render-leaf'\n\nexport type RichTextV2ControlValue = ReactNode\n\nexport type Descriptors = { text?: RichTextV2ControlDefinition }\n\nconst defaultText: Descendant[] = [{ type: BlockType.Default, children: [{ text: '' }] }]\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 ...(definition?.config?.plugins ?? []),\n ...(definition?.config?.mode === RichTextV2Mode.Inline ? [InlineModePlugin] : []),\n ]\n return plugins\n }, [definition])\n\n const [editor] = useState(() =>\n plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n withBuilder(withHistory(withReact(createEditor()))),\n ),\n )\n\n const isPreservingFocus = useRef(false)\n useSyncDOMSelection(editor, isPreservingFocus)\n\n const editMode = useBuilderEditMode()\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 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 const initialValue = useMemo(() => text ?? defaultText, [text])\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 useEffect(() => {\n control?.setEditor(editor)\n control?.setDefaultValue(defaultText)\n }, [control, editor, defaultText])\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 HistoryEditor.redo(editor)\n if (isHotkey('mod+z', e)) return HistoryEditor.undo(editor)\n if (isHotkey('escape')(e)) {\n isPreservingFocus.current = false\n ReactEditor.blur(editor)\n control?.switchToBuildMode()\n }\n\n plugins.forEach(plugin => plugin?.onKeyDown?.(e, editor))\n },\n [control, plugins, editor],\n )\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (editMode === BuilderEditMode.CONTENT) e.preventDefault()\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 const handleOnChange = useCallback(\n (value: Descendant[]) => {\n control?.onChange(value)\n },\n [control],\n )\n\n return (\n <Slate editor={editor} onChange={handleOnChange} 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","blockStyles","useStyle","margin","element","type","BlockType","Default","config","mode","RichTextV2Mode","Inline","attributes","cx","children","renderElement","reduce","renderFn","plugin","control","getElementValue","undefined","ControlValue","value","initialRenderElement","leaf","className","renderLeaf","getLeafValue","initialRenderLeaf","defaultText","text","useMemo","InlineModePlugin","useState","reduceRight","withPlugin","withBuilder","withHistory","withReact","createEditor","isPreservingFocus","useRef","useSyncDOMSelection","editMode","useBuilderEditMode","useEffect","toDOMNode","pollBoxModel","onBoxModelChange","boxModel","changeBoxModel","useCallback","initialValue","BuilderEditMode","CONTENT","deselect","setEditor","setDefaultValue","handleFocus","select","handleKeyDown","isHotkey","HistoryEditor","redo","undo","blur","switchToBuildMode","forEach","onKeyDown","handleKeyUp","preventDefault","handleClick","stopPropagation","handleBlur","relatedTarget","getAttribute","handleOnChange","onChange","Slate","Editable"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,6BAA6BA,QAAgBC,WAAsC;AACxFC,4BAAAA,0BAA0B,MAAM;AAC1B,QAAA,CAACD,UAAUE,WAAWH,OAAOI,aAAa,QAAQC,WAAAA,YAAYC,UAAUN,MAAtB;AAA+B;AACjF,QAAA;AACIO,YAAAA,OAAOF,WAAAA,YAAYG,yBAAyBR,MAArC;AACPS,YAAAA,eAAeF,KAAKG;AAC1B,YAAMC,cAA4BN,WAAAA,YAAYO,WAAWZ,QAAQA,OAAOI,SAAtC;AAElC,UAAIO,aAAa;AACXE,YAAAA,YAAWC,WAAWd,OAAOI,SAA7B,GAA0C;AAC9BW,uDAAAA,iBACZJ,YAAYK,cACZL,YAAYM,WACZN,YAAYO,gBACZP,YAAYQ;AAAAA,QAJd,OAMK;AACSJ,uDAAAA,iBACZJ,YAAYO,gBACZP,YAAYQ,aACZR,YAAYK,cACZL,YAAYM;AAAAA,QAEf;AAAA,MAAA,OACI;AACLR,qDAAcW;AAAAA,MACf;AAAA,aACMC;AACPC,cAAQC,MAAMF,CAAd;AAAA,IACD;AAAA,EAAA,CA5BsB;AA8B1B;ACzBiC,2BAAA,IAA2D;AAA3D,eAAEG;AAAAA;AAAAA,IAAYC;AAAAA,MAAd,IAA0BC,kBAA1B,IAA0BA;AAAAA,IAAxBF;AAAAA,IAAYC;AAAAA;AACxCE,QAAAA,cAAc,CAACC,mBAAS;AAAA,IAAEC,QAAQ;AAAA,EAAX,CAAA,CAAT;AAEpB,gCAA8BH,QAA2B;AACvD,YAAQA,OAAMI,QAAQC;AAAAA,WACfC,UAAAA,UAAUC;AAAAA;AAETT,YAAAA,WAAWU,OAAOC,SAASC,UAAAA,eAAeC,QAAQ;AAElD,gDAAA,QAAA,iCAAUX,OAAMY,aAAhB;AAAA,YAA4B,WAAWC,IAAAA,GAAG,GAAGZ,WAAJ;AAAA,YAAzC,UACGD,OAAMc;AAAAA,UAAAA,EAFX;AAAA,QAKD;AAGC,8CAAA,KAAA,iCAAOd,OAAMY,aAAb;AAAA,UAAyB,WAAWC,IAAAA,GAAG,GAAGZ,WAAJ;AAAA,UAAtC,UACGD,OAAMc;AAAAA,QAAAA,EAFX;AAAA;AAAA,EAML;AAED,QAAMC,gBAAgBhB,QAAQiB,OAC5B,CAACC,UAAUC,WAAW,CAAClB,WAA8B;AAC7C,UAAA;AAAA,MAAEmB;AAAAA,MAASJ,eAAAA;AAAAA,QAAkBG;AAE/BC,QAAAA,oCAASrB,eAAc,QAAQiB,kBAAiB;AAAM,aAAOE,SAASjB,MAAD;AAEzE,QAAImB,QAAQC,mBAAmB;AAAM,aAAOL,eAAcE,UAAUI,MAAX,EAAsBrB,MAAnC;AAE5C,0CACGsB,KAAAA,cAAD;AAAA,MAAc,YAAYH,QAAQrB;AAAAA,MAAY,MAAMqB,QAAQC,gBAAgBpB,OAAMI,OAA9B;AAAA,MACjDmB,UAAAA,CAASR,UAAAA,eAAcE,UAAUM,KAAX,EAAkBvB,MAA/B;AAAA,IAAA,CAFd;AAAA,KAMFwB,oBAdoB;AAiBfT,SAAAA,cAAcf,KAAD;AACrB;AChD8B,wBAAA,IAAwD;AAAxD,eAAEF;AAAAA;AAAAA,IAAYC;AAAAA,MAAd,IAA0BC,kBAA1B,IAA0BA;AAAAA,IAAxBF;AAAAA,IAAYC;AAAAA;AAChB,6BAAA;AAAA,IAAEa;AAAAA,IAAYE;AAAAA,IAAUW;AAAAA,KAAyB;AAExE,0CAAA,QAAA;AAAA,MAAM,WAAWA,KAAKC;AAAAA,OAAed,aAArC;AAAA,MACGE;AAAAA,IAAAA,EAFL;AAAA,EAKD;AAED,QAAMa,aAAa5B,QAAQiB,OACzB,CAACC,UAAUC,WAAW,CAAClB,WAA2B;AAC1C,UAAA;AAAA,MAAEmB;AAAAA,MAASQ,YAAAA;AAAAA,QAAeT;AAE5BC,QAAAA,oCAASrB,eAAc,QAAQ6B,eAAc;AAAM,aAAOV,SAASjB,MAAD;AAEtE,QAAImB,QAAQS,gBAAgB;AAAM,aAAOD,YAAWV,UAAUI,MAAX,EAAsBrB,MAAhC;AAEzC,0CACGsB,KAAAA,cAAD;AAAA,MAAc,YAAYH,QAAQrB;AAAAA,MAAY,MAAMqB,QAAQS,aAAa5B,OAAMyB,IAA3B;AAAA,MACjDF,UAAAA,CAASI,UAAAA,YAAWV,UAAUM,KAAX,EAAkBvB,MAA5B;AAAA,IAAA,CAFd;AAAA,KAMF6B,iBAdiB;AAiBZF,SAAAA,WAAW3B,KAAD;AAClB;ACMD,MAAM8B,cAA4B,CAAC;AAAA,EAAEzB,MAAMC,UAAUC,UAAAA;AAAAA,EAASO,UAAU,CAAC;AAAA,IAAEiB,MAAM;AAAA,EAAA,CAAT;AAArC,CAAD;AAQH,wBAAA;AAAA,EAAEA;AAAAA,EAAMjC;AAAAA,EAAYqB;AAAAA,GAAkB;AAC7DpB,QAAAA,UAAUiC,MAAAA,QAAQ,MAAM;;AAC5B,UAAMjC,WAAU,CACd,GAAID,qDAAYU,WAAZV,mBAAoBC,YAApBD,YAA+B,CAAA,GACnC,GAAIA,gDAAYU,WAAZV,mBAAoBW,UAASC,UAAAA,eAAeC,SAAS,CAACsB,MAAD,gBAAA,IAAqB,CAAA,CAFhE;AAITlC,WAAAA;AAAAA,EAAAA,GACN,CAACD,UAAD,CANoB;AAQjB,QAAA,CAACxB,UAAU4D,eAAS,MACxBnC,QAAQoC,YACN,CAAC7D,SAAQ4C;;AAAWA,wDAAQkB,eAARlB,gCAAqB5C,aAArB4C,YAAgC5C;AAAAA,KACpD+D,QAAAA,YAAYC,aAAYC,YAAAA,WAAAA,UAAUC,mBAAD,CAAA,CAAV,CAAZ,CAFb,CADuB;AAOnBC,QAAAA,oBAAoBC,aAAO,KAAD;AAChCC,sBAAoBrE,QAAQmE,iBAAT;AAEbG,QAAAA,WAAWC,KAAAA;AAEjBC,QAAAA,UAAU,MAAM;AACV3B,QAAAA,WAAW;AAAM;AAEff,UAAAA,UAAUzB,WAAAA,YAAYoE,UAAUzE,QAAQA,MAA9B;AAChB,WAAO0E,kBAAa;AAAA,MAClB5C;AAAAA,MACA6C,kBAAkBC,CAAAA,aAAY/B,QAAQgC,eAAeD,QAAvB;AAAA,IAAA,CAFb;AAAA,EAAA,GAIlB,CAAC5E,QAAQ6C,OAAT,CARM;AAUHJ,QAAAA,gBAAgBqC,kBACpB,CAACpD,UAA8B;AACtB,0CAAC,mBAAD,iCAAuBA,QAAvB;AAAA,MAA8B;AAAA,MAAwB;AAAA,IAAA,EAA7D;AAAA,EAAA,GAEF,CAACD,SAASD,UAAV,CAJ+B;AAO3B6B,QAAAA,aAAayB,kBACjB,CAACpD,UAA2B;AACnB,0CAAC,gBAAD,iCAAoBA,QAApB;AAAA,MAA2B;AAAA,MAAwB;AAAA,IAAA,EAA1D;AAAA,EAAA,GAEF,CAACD,SAASD,UAAV,CAJ4B;AAO9B,QAAMuD,eAAerB,MAAAA,QAAQ,MAAMD,sBAAQD,aAAa,CAACC,IAAD,CAA5B;AAE5Be,QAAAA,UAAU,MAAM;AAMVF,QAAAA,aAAaU,0BAAgBC,SAAS;AACxCd,wBAAkBhE,UAAU;AAC5BE,6BAAY6E,SAASlF,MAArB;AAAA,IACD;AAAA,EAAA,GACA,CAACsE,QAAD,CAVM;AAYTE,QAAAA,UAAU,MAAM;AACd3B,uCAASsC,UAAUnF;AACnB6C,uCAASuC,gBAAgB5B;AAAAA,EACxB,GAAA,CAACX,SAAS7C,QAAQwD,WAAlB,CAHM;AAKH6B,QAAAA,cAAcP,MAAAA,YAAY,MAAM;AACpCX,sBAAkBhE,UAAU;AAC5B0C,uCAASyC;AAAAA,EAAT,GACC,CAACzC,OAAD,CAH4B;AAKzB0C,QAAAA,gBAAgBT,kBACpB,CAACzD,MAAqB;AAChBmE,QAAAA,kBAAAA,WAAS,eAAenE,CAAhB;AAA2BoE,aAAAA,aAAAA,cAAcC,KAAK1F,MAAnB;AACnCwF,QAAAA,kBAAAA,WAAS,SAASnE,CAAV;AAAqBoE,aAAAA,aAAAA,cAAcE,KAAK3F,MAAnB;AACjC,QAAIwF,6BAAS,QAAD,EAAWnE,CAAnB,GAAuB;AACzB8C,wBAAkBhE,UAAU;AAC5BE,6BAAYuF,KAAK5F,MAAjB;AACA6C,yCAASgD;AAAAA,IACV;AAEDpE,YAAQqE,QAAQlD,CAAUA,WAAAA;;AAAAA,oDAAQmD,cAARnD,gCAAoBvB,GAAGrB;AAAAA,KAAjD;AAAA,EAEF,GAAA,CAAC6C,SAASpB,SAASzB,MAAnB,CAZ+B;AAe3BgG,QAAAA,cAAclB,kBAClB,CAACzD,MAAqB;AAChBiD,QAAAA,aAAaU,UAAAA,gBAAgBC;AAAS5D,QAAE4E,eAAF;AAAA,EAE5C,GAAA,CAACpD,SAAS7C,QAAQsE,QAAlB,CAJ6B;AAOzB4B,QAAAA,cAAcpB,kBAClB,CAACzD,MAAkB;AACbiD,QAAAA,aAAaU,UAAAA,gBAAgBC;AAAS5D,QAAE8E,gBAAF;AAAA,EAAA,GAE5C,CAAC7B,QAAD,CAJ6B;AAOzB8B,QAAAA,aAAatB,kBAAY,CAACzD,MAAkB;;AAEhD,QAAIA,EAAEgF,iBAAiB;AAAM;AAE7B,QAAIhF,SAAEgF,kBAAFhF,mBAAiBiF,aAAa,wBAAuB;AACvDnC,wBAAkBhE,UAAU;AAAA,EALF,GAM3B,CAN2B,CAAA;AAQxBoG,QAAAA,iBAAiBzB,kBACrB,CAAC7B,UAAwB;AACvBJ,uCAAS2D,SAASvD;AAAAA,EAAlB,GAEF,CAACJ,OAAD,CAJgC;AAOlC,wCACG4D,WAAAA,OAAD;AAAA,IAAO;AAAA,IAAgB,UAAUF;AAAAA,IAAgB,OAAOxB;AAAAA,IAAxD,yCACG2B,qBAAD;AAAA,MACE;AAAA,MACA;AAAA,MACA,SAASrB;AAAAA,MACT,WAAWE;AAAAA,MACX,SAASS;AAAAA,MACT,SAASE;AAAAA,MACT,QAAQE;AAAAA,MACR,UAAU9B,aAAaU,UAAAA,gBAAgBC;AAAAA,MACvC,aAAY;AAAA,IAAA,CATd;AAAA,EAAA,CAFJ;AAeD;;;"}