@makeswift/runtime 0.9.4 → 0.9.6

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 (179) hide show
  1. package/dist/Box.cjs.js +3 -3
  2. package/dist/Box.es.js +3 -3
  3. package/dist/Button.cjs.js +3 -3
  4. package/dist/Button.es.js +3 -3
  5. package/dist/Carousel.cjs.js +3 -3
  6. package/dist/Carousel.es.js +3 -3
  7. package/dist/Countdown.cjs.js +1 -1
  8. package/dist/Countdown.es.js +1 -1
  9. package/dist/Divider.cjs.js +3 -3
  10. package/dist/Divider.es.js +3 -3
  11. package/dist/Embed.cjs.js +1 -0
  12. package/dist/Embed.cjs.js.map +1 -1
  13. package/dist/Embed.es.js +1 -0
  14. package/dist/Embed.es.js.map +1 -1
  15. package/dist/Form.cjs.js +1 -1
  16. package/dist/Form.es.js +1 -1
  17. package/dist/Image.cjs.js +1 -1
  18. package/dist/Image.es.js +1 -1
  19. package/dist/LiveProvider.cjs.js +4 -4
  20. package/dist/LiveProvider.es.js +5 -5
  21. package/dist/Navigation.cjs.js +2 -2
  22. package/dist/Navigation.es.js +2 -2
  23. package/dist/PreviewProvider.cjs.js +8 -7
  24. package/dist/PreviewProvider.cjs.js.map +1 -1
  25. package/dist/PreviewProvider.es.js +11 -10
  26. package/dist/PreviewProvider.es.js.map +1 -1
  27. package/dist/ReadOnlyText.cjs.js +3 -2
  28. package/dist/ReadOnlyText.cjs.js.map +1 -1
  29. package/dist/ReadOnlyText.es.js +5 -4
  30. package/dist/ReadOnlyText.es.js.map +1 -1
  31. package/dist/ReadOnlyTextV2.cjs.js +12 -12
  32. package/dist/ReadOnlyTextV2.cjs.js.map +1 -1
  33. package/dist/ReadOnlyTextV2.es.js +14 -14
  34. package/dist/ReadOnlyTextV2.es.js.map +1 -1
  35. package/dist/Root.cjs.js +1 -1
  36. package/dist/Root.es.js +1 -1
  37. package/dist/SocialLinks.cjs.js +3 -3
  38. package/dist/SocialLinks.es.js +3 -3
  39. package/dist/Text.cjs.js +1 -1
  40. package/dist/Text.es.js +1 -1
  41. package/dist/Video.cjs.js +1 -0
  42. package/dist/Video.cjs.js.map +1 -1
  43. package/dist/Video.es.js +1 -0
  44. package/dist/Video.es.js.map +1 -1
  45. package/dist/actions.cjs.js +467 -3
  46. package/dist/actions.cjs.js.map +1 -1
  47. package/dist/actions.es.js +467 -4
  48. package/dist/actions.es.js.map +1 -1
  49. package/dist/api.cjs.js +20 -1
  50. package/dist/api.cjs.js.map +1 -1
  51. package/dist/api.es.js +20 -1
  52. package/dist/api.es.js.map +1 -1
  53. package/dist/box-model.cjs.js +1 -0
  54. package/dist/box-model.cjs.js.map +1 -1
  55. package/dist/box-model.es.js +1 -0
  56. package/dist/box-model.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 +1 -1
  62. package/dist/components.es.js +1 -1
  63. package/dist/control-serialization.cjs.js +1 -0
  64. package/dist/control-serialization.cjs.js.map +1 -1
  65. package/dist/control-serialization.es.js +1 -0
  66. package/dist/control-serialization.es.js.map +1 -1
  67. package/dist/controls.cjs.js +1 -0
  68. package/dist/controls.cjs.js.map +1 -1
  69. package/dist/controls.es.js +2 -1
  70. package/dist/controls.es.js.map +1 -1
  71. package/dist/index.cjs.js +71 -41
  72. package/dist/index.cjs.js.map +1 -1
  73. package/dist/index.cjs10.js +5 -4
  74. package/dist/index.cjs10.js.map +1 -1
  75. package/dist/index.cjs2.js +1 -0
  76. package/dist/index.cjs2.js.map +1 -1
  77. package/dist/index.cjs5.js +30 -14
  78. package/dist/index.cjs5.js.map +1 -1
  79. package/dist/index.cjs8.js +1 -1
  80. package/dist/index.cjs9.js +4 -4
  81. package/dist/index.es.js +74 -45
  82. package/dist/index.es.js.map +1 -1
  83. package/dist/index.es10.js +7 -6
  84. package/dist/index.es10.js.map +1 -1
  85. package/dist/index.es2.js +2 -1
  86. package/dist/index.es2.js.map +1 -1
  87. package/dist/index.es5.js +32 -16
  88. package/dist/index.es5.js.map +1 -1
  89. package/dist/index.es6.js +1 -1
  90. package/dist/index.es8.js +1 -1
  91. package/dist/index.es9.js +6 -6
  92. package/dist/main.cjs.js +1 -0
  93. package/dist/main.cjs.js.map +1 -1
  94. package/dist/main.es.js +1 -0
  95. package/dist/main.es.js.map +1 -1
  96. package/dist/next.cjs.js +1 -1
  97. package/dist/next.es.js +2 -2
  98. package/dist/prop-controllers.cjs.js +1 -0
  99. package/dist/prop-controllers.cjs.js.map +1 -1
  100. package/dist/prop-controllers.es.js +1 -0
  101. package/dist/prop-controllers.es.js.map +1 -1
  102. package/dist/react-page.cjs.js +27 -32
  103. package/dist/react-page.cjs.js.map +1 -1
  104. package/dist/react-page.es.js +27 -14
  105. package/dist/react-page.es.js.map +1 -1
  106. package/dist/react.cjs.js +1 -1
  107. package/dist/react.es.js +1 -1
  108. package/dist/slate.cjs.js +25 -67
  109. package/dist/slate.cjs.js.map +1 -1
  110. package/dist/slate.es.js +31 -71
  111. package/dist/slate.es.js.map +1 -1
  112. package/dist/state/breakpoints.cjs.js +14 -0
  113. package/dist/state/breakpoints.cjs.js.map +1 -1
  114. package/dist/state/breakpoints.es.js +14 -1
  115. package/dist/state/breakpoints.es.js.map +1 -1
  116. package/dist/types/src/api/graphql/documents/fragments.d.ts +1 -1
  117. package/dist/types/src/api/graphql/documents/fragments.d.ts.map +1 -1
  118. package/dist/types/src/api/graphql/documents/queries.d.ts.map +1 -1
  119. package/dist/types/src/api/graphql/generated/fragment-document-nodes.d.ts.map +1 -1
  120. package/dist/types/src/api/graphql/generated/types.d.ts +12 -0
  121. package/dist/types/src/api/graphql/generated/types.d.ts.map +1 -1
  122. package/dist/types/src/api/react.d.ts +3 -1
  123. package/dist/types/src/api/react.d.ts.map +1 -1
  124. package/dist/types/src/components/builtin/Button/Button.d.ts +1 -1
  125. package/dist/types/src/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +1 -1
  126. package/dist/types/src/components/page/Page.d.ts.map +1 -1
  127. package/dist/types/src/controls/icon-radio-group.d.ts +1 -1
  128. package/dist/types/src/controls/icon-radio-group.d.ts.map +1 -1
  129. package/dist/types/src/controls/link.d.ts +1 -1
  130. package/dist/types/src/controls/link.d.ts.map +1 -1
  131. package/dist/types/src/controls/select.d.ts +1 -1
  132. package/dist/types/src/controls/select.d.ts.map +1 -1
  133. package/dist/types/src/controls/typography.d.ts +1 -1
  134. package/dist/types/src/controls/typography.d.ts.map +1 -1
  135. package/dist/types/src/next/api-handler/index.d.ts.map +1 -1
  136. package/dist/types/src/next/client.d.ts +11 -2
  137. package/dist/types/src/next/client.d.ts.map +1 -1
  138. package/dist/types/src/next/index.d.ts.map +1 -1
  139. package/dist/types/src/runtimes/react/controls/rich-text-v2/ReadOnlyTextV2.d.ts.map +1 -1
  140. package/dist/types/src/runtimes/react/controls/style-v2.d.ts.map +1 -1
  141. package/dist/types/src/runtimes/react/controls/typography.d.ts +2 -2
  142. package/dist/types/src/runtimes/react/controls/typography.d.ts.map +1 -1
  143. package/dist/types/src/runtimes/react/index.d.ts.map +1 -1
  144. package/dist/types/src/slate/BlockPlugin/index.d.ts.map +1 -1
  145. package/dist/types/src/slate/InlinePlugin/getValue.d.ts +1 -1
  146. package/dist/types/src/slate/InlinePlugin/getValue.d.ts.map +1 -1
  147. package/dist/types/src/slate/LinkPlugin/getValue.d.ts.map +1 -1
  148. package/dist/types/src/slate/TextAlignPlugin/getValue.d.ts +4 -0
  149. package/dist/types/src/slate/TextAlignPlugin/getValue.d.ts.map +1 -0
  150. package/dist/types/src/slate/TextAlignPlugin/index.d.ts.map +1 -1
  151. package/dist/types/src/slate/TypographyPlugin/getValue.d.ts +4 -0
  152. package/dist/types/src/slate/TypographyPlugin/getValue.d.ts.map +1 -0
  153. package/dist/types/src/slate/TypographyPlugin/index.d.ts.map +1 -1
  154. package/dist/types/src/slate/index.d.ts +0 -1
  155. package/dist/types/src/slate/index.d.ts.map +1 -1
  156. package/dist/types/src/slate/utils/responsive.d.ts +3 -5
  157. package/dist/types/src/slate/utils/responsive.d.ts.map +1 -1
  158. package/dist/types/src/state/actions.d.ts +7 -7
  159. package/dist/types/src/state/actions.d.ts.map +1 -1
  160. package/dist/types/src/state/makeswift-api-client.d.ts +1 -1
  161. package/dist/types/src/state/makeswift-api-client.d.ts.map +1 -1
  162. package/dist/types/src/state/modules/breakpoints.d.ts +2 -0
  163. package/dist/types/src/state/modules/breakpoints.d.ts.map +1 -1
  164. package/dist/types/src/state/modules/locales.d.ts +6 -7
  165. package/dist/types/src/state/modules/locales.d.ts.map +1 -1
  166. package/dist/types/src/state/react-builder-preview.d.ts.map +1 -1
  167. package/dist/types/src/state/react-page.d.ts +3 -1
  168. package/dist/types/src/state/react-page.d.ts.map +1 -1
  169. package/dist/types/types/locale.d.ts +9 -0
  170. package/dist/types/types/locale.d.ts.map +1 -0
  171. package/dist/types.cjs2.js +8 -11
  172. package/dist/types.cjs2.js.map +1 -1
  173. package/dist/types.es2.js +9 -12
  174. package/dist/types.es2.js.map +1 -1
  175. package/dist/typography.cjs.js.map +1 -1
  176. package/dist/typography.es.js.map +1 -1
  177. package/package.json +1 -1
  178. package/dist/types/src/slate/ColorPlugin/index.d.ts +0 -10
  179. package/dist/types/src/slate/ColorPlugin/index.d.ts.map +0 -1
package/dist/react.cjs.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  var actions = require("./actions.cjs.js");
4
4
  var next = require("./index.cjs.js");
5
+ require("zod");
5
6
  require("react");
6
7
  require("use-sync-external-store/shim/with-selector");
7
8
  require("next/dynamic");
@@ -25,7 +26,6 @@ require("scroll-into-view-if-needed");
25
26
  require("react-dom");
26
27
  require("html-react-parser");
27
28
  require("next/head");
28
- require("zod");
29
29
  require("@emotion/server/create-instance");
30
30
  require("next/document");
31
31
  require("cors");
package/dist/react.es.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { A as ActionTypes, c as changeDocument } from "./actions.es.js";
2
2
  export { D as DocumentReference, E as Element, P as PageProvider, a as ReactRuntime, R as RuntimeProvider, u as useIsInBuilder, b as usePageId } from "./index.es.js";
3
+ import "zod";
3
4
  import "react";
4
5
  import "use-sync-external-store/shim/with-selector";
5
6
  import "next/dynamic";
@@ -23,7 +24,6 @@ import "scroll-into-view-if-needed";
23
24
  import "react-dom";
24
25
  import "html-react-parser";
25
26
  import "next/head";
26
- import "zod";
27
27
  import "@emotion/server/create-instance";
28
28
  import "next/document";
29
29
  import "cors";
package/dist/slate.cjs.js CHANGED
@@ -24,21 +24,24 @@ var types = require("./types.cjs2.js");
24
24
  var index$1 = require("./index.cjs6.js");
25
25
  var index$2 = require("./index.cjs7.js");
26
26
  var reactPage = require("./react-page.cjs.js");
27
+ require("./actions.cjs.js");
27
28
  var typography = require("./typography.cjs.js");
28
29
  var slate = require("slate");
29
- require("react");
30
- var css = require("@emotion/css");
31
- require("@emotion/serialize");
32
- require("@emotion/utils");
33
- var next = require("./index.cjs.js");
34
30
  var jsxRuntime = require("react/jsx-runtime");
35
31
  var index$3 = require("./index.cjs3.js");
32
+ var css = require("@emotion/css");
33
+ var next = require("./index.cjs.js");
36
34
  require("./state/breakpoints.cjs.js");
37
- require("./actions.cjs.js");
35
+ require("zod");
38
36
  require("is-hotkey");
39
37
  require("slate-react");
40
38
  require("redux");
41
39
  require("redux-thunk");
40
+ require("react");
41
+ require("@emotion/serialize");
42
+ require("@emotion/utils");
43
+ require("scroll-into-view-if-needed");
44
+ require("next/link");
42
45
  require("use-sync-external-store/shim/with-selector");
43
46
  require("next/dynamic");
44
47
  require("./combobox.cjs.js");
@@ -47,11 +50,9 @@ require("./types.cjs.js");
47
50
  require("./box-models.cjs.js");
48
51
  require("css-box-model");
49
52
  require("color");
50
- require("scroll-into-view-if-needed");
51
53
  require("react-dom");
52
54
  require("html-react-parser");
53
55
  require("next/head");
54
- require("zod");
55
56
  require("@emotion/server/create-instance");
56
57
  require("next/document");
57
58
  require("cors");
@@ -62,7 +63,15 @@ require("set-cookie-parser");
62
63
  require("./constants.cjs.js");
63
64
  require("uuid");
64
65
  require("corporate-ipsum");
65
- require("next/link");
66
+ function getValue$2(editor) {
67
+ const matchingValues = Array.from(slate.Editor.nodes(editor, {
68
+ at: types.getSelection(editor),
69
+ match: types.ElementUtils.isRootBlock
70
+ })).map(([node]) => node["textAlign"]);
71
+ return matchingValues.length === 0 ? void 0 : matchingValues.reduce((a, b) => {
72
+ return index.responsiveShallowEqual(a, b);
73
+ });
74
+ }
66
75
  const TEXT_ALIGN_KEY = "textAlign";
67
76
  const withTextAlign = (editor) => {
68
77
  const {
@@ -113,9 +122,7 @@ function TextAlignPlugin() {
113
122
  match: types.ElementUtils.isRootBlock,
114
123
  split: false
115
124
  }),
116
- getValue: (editor) => index.getResponsiveValue(editor, TEXT_ALIGN_KEY, {
117
- match: types.ElementUtils.isRootBlock
118
- }),
125
+ getValue: (editor) => getValue$2(editor),
119
126
  getElementValue: (element) => {
120
127
  return types.ElementUtils.isRootBlock(element) ? element.textAlign : void 0;
121
128
  }
@@ -130,56 +137,6 @@ function TextAlignPlugin() {
130
137
  }
131
138
  });
132
139
  }
133
- const COLOR_KEY = "color";
134
- function ColorPlugin() {
135
- return reactPage.createRichTextV2Plugin({
136
- control: {
137
- definition: reactPage.unstable_StyleV2({
138
- type: reactPage.Color({
139
- label: "Color"
140
- }),
141
- getStyle(color) {
142
- return {
143
- color
144
- };
145
- }
146
- }),
147
- onChange: (editor, value) => {
148
- index.setResponsiveValue(editor, COLOR_KEY, value, {
149
- match: slate.Text.isText,
150
- split: true
151
- });
152
- },
153
- getValue: (editor) => index.getResponsiveValue(editor, COLOR_KEY, {
154
- match: slate.Text.isText
155
- }),
156
- getLeafValue: (text) => {
157
- return slate.Text.isText(text) ? text == null ? void 0 : text.color : void 0;
158
- }
159
- },
160
- withPlugin: (editor) => {
161
- const {
162
- normalizeNode
163
- } = editor;
164
- editor.normalizeNode = (entry) => {
165
- if (index.normalizeResponsiveValue(editor, COLOR_KEY, {
166
- match: slate.Text.isText
167
- })(entry)) {
168
- return;
169
- }
170
- normalizeNode(entry);
171
- };
172
- return editor;
173
- },
174
- renderLeaf: (renderLeaf, className) => (props) => {
175
- return renderLeaf(__spreadProps(__spreadValues({}, props), {
176
- leaf: __spreadProps(__spreadValues({}, props.leaf), {
177
- className: `${props.leaf.className} ${className}`
178
- })
179
- }));
180
- }
181
- });
182
- }
183
140
  function getSupportedInlinesAndTextInSelection(editor) {
184
141
  return Array.from(slate.Editor.nodes(editor, {
185
142
  at: types.getSelection(editor),
@@ -193,7 +150,8 @@ const getValue$1 = (editor) => {
193
150
  if (!areAllRootsSupportedInlineTypesOrText)
194
151
  return void 0;
195
152
  const matchingValues = roots.filter(types.isSupportedInlineEntry).map(([node]) => node);
196
- return (_a = matchingValues.reduce((a, b) => next.deepEqual(a, b) ? b : void 0, matchingValues.at(0))) == null ? void 0 : _a.type;
153
+ const match = matchingValues.reduce((a, b) => (a == null ? void 0 : a.type) === (b == null ? void 0 : b.type) ? b : null, (_a = matchingValues.at(0)) != null ? _a : void 0);
154
+ return match == null ? match : match.type;
197
155
  };
198
156
  const onChange$1 = (editor, value) => {
199
157
  function unwrapAllSupportedTypes() {
@@ -296,7 +254,8 @@ const getValue = (editor) => {
296
254
  if (!areAllRootsLinks)
297
255
  return void 0;
298
256
  const matchingValues = roots.map(([node]) => node).filter(isLinkElement);
299
- return (_a = matchingValues.reduce((a, b) => next.deepEqual(a, b) ? b : void 0, matchingValues.at(0))) == null ? void 0 : _a.link;
257
+ const match = matchingValues.reduce((a, b) => next.deepEqual(a == null ? void 0 : a.link, b == null ? void 0 : b.link) ? b : null, (_a = matchingValues.at(0)) != null ? _a : void 0);
258
+ return match == null ? match : match.link;
300
259
  };
301
260
  const onChange = (editor, value) => {
302
261
  if (value == null)
@@ -327,13 +286,14 @@ function InlinePluginComponent({
327
286
  children,
328
287
  renderElement
329
288
  }) {
289
+ var _a;
330
290
  const linkStyle = reactPage.useStyle({
331
291
  textDecoration: "none"
332
292
  });
333
293
  switch (element.type) {
334
294
  case reactPage.InlineType.Link:
335
295
  return /* @__PURE__ */ jsxRuntime.jsx(index$3.Link, __spreadProps(__spreadValues({}, attributes), {
336
- link: element.link,
296
+ link: (_a = element.link) != null ? _a : void 0,
337
297
  className: css.cx(linkStyle, element.className),
338
298
  children
339
299
  }));
@@ -381,8 +341,6 @@ exports.BlockTextAlignment = reactPage.BlockTextAlignment;
381
341
  exports.BlockType = reactPage.BlockType;
382
342
  exports.InlineType = reactPage.InlineType;
383
343
  exports.RootBlockType = reactPage.RootBlockType;
384
- exports.COLOR_KEY = COLOR_KEY;
385
- exports.ColorPlugin = ColorPlugin;
386
344
  exports.InlinePlugin = InlinePlugin;
387
345
  exports.LinkPlugin = LinkPlugin;
388
346
  exports.TextAlignPlugin = TextAlignPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"slate.cjs.js","sources":["../src/slate/TextAlignPlugin/index.tsx","../src/slate/ColorPlugin/index.tsx","../src/slate/InlinePlugin/getValue.ts","../src/slate/InlinePlugin/onChange.ts","../src/slate/InlinePlugin/index.tsx","../src/slate/LinkPlugin/types.ts","../src/slate/LinkPlugin/getValue.ts","../src/slate/LinkPlugin/onChange.ts","../src/slate/LinkPlugin/index.tsx"],"sourcesContent":["import { Editor, Element } from 'slate'\nimport {\n createRichTextV2Plugin,\n unstable_IconRadioGroup,\n unstable_IconRadioGroupIcon,\n unstable_StyleV2,\n} from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { TextAlignProperty } from 'csstype'\nimport {\n getResponsiveValue,\n normalizeResponsiveValue,\n setResponsiveValue,\n} from '../utils/responsive'\n\nconst TEXT_ALIGN_KEY = 'textAlign'\n\nexport const withTextAlign = (editor: Editor) => {\n const { normalizeNode } = editor\n editor.normalizeNode = entry => {\n if (\n normalizeResponsiveValue(editor, TEXT_ALIGN_KEY, { match: ElementUtils.isRootBlock })(entry)\n ) {\n return\n }\n normalizeNode(entry)\n }\n\n return editor\n}\n\nexport function TextAlignPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_StyleV2({\n type: unstable_IconRadioGroup({\n label: 'Alignment',\n options: [\n {\n icon: unstable_IconRadioGroupIcon.TextAlignLeft,\n label: 'Left Align',\n value: 'left',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignCenter,\n label: 'Center Align',\n value: 'center',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignRight,\n label: 'Right Align',\n value: 'right',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignJustify,\n label: 'Justify',\n value: 'justify',\n },\n ],\n defaultValue: 'left',\n }),\n getStyle(textAlign: TextAlignProperty) {\n return { textAlign }\n },\n }),\n onChange: (editor, value) =>\n setResponsiveValue(editor, TEXT_ALIGN_KEY, value, {\n match: ElementUtils.isRootBlock,\n split: false,\n }),\n getValue: editor =>\n getResponsiveValue(editor, TEXT_ALIGN_KEY, { match: ElementUtils.isRootBlock }),\n getElementValue: (element: Element) => {\n return ElementUtils.isRootBlock(element) ? element.textAlign : undefined\n },\n },\n withPlugin: withTextAlign,\n renderElement: (renderElement, className) => props => {\n return renderElement({\n ...props,\n element: {\n ...props.element,\n className,\n },\n })\n },\n })\n}\n","import { Editor, Text } from 'slate'\nimport {\n Color,\n createRichTextV2Plugin,\n unstable_StyleV2,\n ColorControlDefinition,\n} from '../../controls'\nimport { ControlDefinitionValue } from '../../runtimes/react/controls/control'\nimport {\n getResponsiveValue,\n normalizeResponsiveValue,\n setResponsiveValue,\n} from '../utils/responsive'\n\nexport const COLOR_KEY = 'color'\n\nexport function ColorPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_StyleV2({\n type: Color({\n label: 'Color',\n }),\n getStyle(color: ControlDefinitionValue<ColorControlDefinition>) {\n return { color }\n },\n }),\n onChange: (editor, value) => {\n setResponsiveValue(editor, COLOR_KEY, value, {\n match: Text.isText,\n split: true,\n })\n },\n getValue: editor => getResponsiveValue(editor, COLOR_KEY, { match: Text.isText }),\n getLeafValue: (text: Text) => {\n return Text.isText(text) ? text?.color : undefined\n },\n },\n withPlugin: (editor: Editor) => {\n const { normalizeNode } = editor\n editor.normalizeNode = entry => {\n if (normalizeResponsiveValue(editor, COLOR_KEY, { match: Text.isText })(entry)) {\n return\n }\n\n normalizeNode(entry)\n }\n\n return editor\n },\n renderLeaf: (renderLeaf, className) => props => {\n return renderLeaf({\n ...props,\n leaf: {\n ...props.leaf,\n className: `${props.leaf.className} ${className}`,\n },\n })\n },\n })\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport deepEqual from '../../utils/deepEqual'\nimport { SupportedInline, isSupportedInlineType, isSupportedInlineEntry } from './types'\n\nexport function getSupportedInlinesAndTextInSelection(\n editor: Editor,\n): NodeEntry<SupportedInline | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node =>\n (ElementUtils.isInline(node) && isSupportedInlineType(node.type)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | SupportedInline>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n\n const areAllRootsSupportedInlineTypesOrText = roots.every(\n entry => isSupportedInlineEntry(entry) || Text.isText(entry[0]),\n )\n\n if (!areAllRootsSupportedInlineTypesOrText) return undefined\n\n const matchingValues = roots.filter(isSupportedInlineEntry).map(([node]) => node)\n\n return matchingValues.reduce((a, b) => (deepEqual(a, b) ? b : undefined), matchingValues.at(0))\n ?.type\n}\n","import { getSupportedInlinesAndTextInSelection } from './getValue'\nimport { Editor, Transforms } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport {\n SupportedInlineType,\n isSupportedInlineEntry,\n isSupportedInlineType,\n supportedInlineOptions,\n} from './types'\n\nexport const onChange = (editor: Editor, value: SupportedInlineType) => {\n function unwrapAllSupportedTypes() {\n supportedInlineOptions.forEach(({ value: optionValue }) => unwrapInline(editor, optionValue))\n }\n\n function unwrapAllInlines() {\n Transforms.unwrapNodes(editor, {\n match: node => ElementUtils.isInline(node),\n at: getSelection(editor),\n })\n }\n\n if (value == null) return unwrapAllSupportedTypes()\n\n if (!isSupportedInlineType(value)) return\n\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n const root = roots.at(0)\n\n if (\n roots.length === 1 &&\n root != null &&\n isSupportedInlineEntry(root) &&\n root[0].type === value\n ) {\n unwrapInline(editor, value)\n } else {\n unwrapAllInlines()\n wrapInline(editor, { type: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { RenderElement, createRichTextV2Plugin, unstable_IconRadioGroup } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { supportedInlineOptions } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withInline = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nexport function InlinePlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_IconRadioGroup({\n label: 'Inline',\n options: supportedInlineOptions,\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) ? element.type : undefined\n },\n },\n withPlugin: withInline,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\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\n default:\n return (\n <>\n {renderElement({\n element,\n attributes,\n children,\n })}\n </>\n )\n }\n}\n","import { Node, NodeEntry } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType, LinkElement } from '../types'\n\nexport function isLinkElement(node: Node): node is LinkElement {\n return ElementUtils.isInline(node) && node.type === InlineType.Link\n}\n\nexport function isLinkEntry(inline: NodeEntry<Node>): inline is NodeEntry<LinkElement> {\n return ElementUtils.isInline(inline[0]) && inline[0].type === InlineType.Link\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { LinkElement } from '../types'\nimport deepEqual from '../../utils/deepEqual'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkElement } from './types'\n\nexport function getLinksAndTextInSelection(editor: Editor): NodeEntry<LinkElement | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node => (ElementUtils.isInline(node) && isLinkElement(node)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | LinkElement>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n\n const areAllRootsLinks = roots.every(([root]) => isLinkElement(root) || Text.isText(root))\n\n if (!areAllRootsLinks) return undefined\n\n const matchingValues = roots.map(([node]) => node).filter(isLinkElement)\n\n return matchingValues.reduce((a, b) => (deepEqual(a, b) ? b : undefined), matchingValues.at(0))\n ?.link\n}\n","import { Editor, Transforms } from 'slate'\nimport { LinkControlData } from '../../controls'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { InlineType } from '../types'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkEntry } from './types'\nimport { getLinksAndTextInSelection } from './getValue'\n\nexport const onChange = (editor: Editor, value: LinkControlData) => {\n if (value == null) return unwrapInline(editor, InlineType.Link)\n\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n const root = roots.at(0)\n\n // If the root of our selection is a link we just want to modify it\n if (roots.length === 1 && root != null && isLinkEntry(root)) {\n Transforms.setNodes(\n editor,\n {\n link: value,\n },\n { at: root[1] },\n )\n }\n // In all other cases we want to remove all existing links and wrap the current selection in a new link\n else {\n unwrapInline(editor, InlineType.Link)\n wrapInline(editor, { type: InlineType.Link, link: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { Link, RenderElement, createRichTextV2Plugin } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { useStyle } from '../../runtimes/react/use-style'\nimport { Link as LinkComponent } from '../../components/shared/Link'\nimport { cx } from '@emotion/css'\nimport { isLinkElement } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withLink = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\n const linkStyle = useStyle({ textDecoration: 'none' })\n switch (element.type) {\n case InlineType.Link:\n return (\n <LinkComponent\n {...attributes}\n link={element.link}\n className={cx(linkStyle, element.className)}\n >\n {children}\n </LinkComponent>\n )\n\n default:\n return renderElement({\n element,\n attributes,\n children,\n })\n }\n}\n\nexport function LinkPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: Link({\n label: 'On Click',\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) && isLinkElement(element) ? element.link : undefined\n },\n },\n withPlugin: withLink,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n"],"names":["TEXT_ALIGN_KEY","withTextAlign","editor","normalizeNode","entry","normalizeResponsiveValue","match","ElementUtils","isRootBlock","createRichTextV2Plugin","control","definition","unstable_StyleV2","type","unstable_IconRadioGroup","label","options","icon","unstable_IconRadioGroupIcon","TextAlignLeft","value","TextAlignCenter","TextAlignRight","TextAlignJustify","defaultValue","getStyle","textAlign","onChange","setResponsiveValue","split","getValue","getResponsiveValue","getElementValue","element","undefined","withPlugin","renderElement","className","props","COLOR_KEY","Color","color","Text","isText","getLeafValue","text","renderLeaf","leaf","Editor","getSelection","isSupportedInlineType","filterForSubtreeRoots","isSupportedInlineEntry","deepEqual","supportedInlineOptions","unwrapInline","Transforms","wrapInline","withInline","isInline","InlinePluginComponent","attributes","children","InlineType","Code","SuperScript","SubScript","_Fragment","withLink","linkStyle","useStyle","textDecoration","Link","LinkComponent","link","cx","isLinkElement"],"mappings":"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"}
1
+ {"version":3,"file":"slate.cjs.js","sources":["../src/slate/TextAlignPlugin/getValue.ts","../src/slate/TextAlignPlugin/index.tsx","../src/slate/InlinePlugin/getValue.ts","../src/slate/InlinePlugin/onChange.ts","../src/slate/InlinePlugin/index.tsx","../src/slate/LinkPlugin/types.ts","../src/slate/LinkPlugin/getValue.ts","../src/slate/LinkPlugin/onChange.ts","../src/slate/LinkPlugin/index.tsx"],"sourcesContent":["import { Editor } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { ResponsiveBlockTextAlignment } from '../types'\nimport { getSelection } from '../selectors'\nimport { responsiveShallowEqual } from '../utils/responsive'\n\nexport function getValue(editor: Editor): ResponsiveBlockTextAlignment | undefined {\n const matchingValues = Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: ElementUtils.isRootBlock,\n }),\n ).map(([node]) => node['textAlign']) as (ResponsiveBlockTextAlignment | undefined)[]\n\n return matchingValues.length === 0\n ? undefined\n : matchingValues.reduce((a, b) => {\n return responsiveShallowEqual(a, b)\n })\n}\n","import { Editor, Element } from 'slate'\nimport {\n createRichTextV2Plugin,\n unstable_IconRadioGroup,\n unstable_IconRadioGroupIcon,\n unstable_StyleV2,\n} from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { TextAlignProperty } from 'csstype'\nimport { normalizeResponsiveValue, setResponsiveValue } from '../utils/responsive'\nimport { getValue } from './getValue'\n\nconst TEXT_ALIGN_KEY = 'textAlign'\n\nexport const withTextAlign = (editor: Editor) => {\n const { normalizeNode } = editor\n editor.normalizeNode = entry => {\n if (\n normalizeResponsiveValue(editor, TEXT_ALIGN_KEY, { match: ElementUtils.isRootBlock })(entry)\n ) {\n return\n }\n normalizeNode(entry)\n }\n\n return editor\n}\n\nexport function TextAlignPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_StyleV2({\n type: unstable_IconRadioGroup({\n label: 'Alignment',\n options: [\n {\n icon: unstable_IconRadioGroupIcon.TextAlignLeft,\n label: 'Left Align',\n value: 'left',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignCenter,\n label: 'Center Align',\n value: 'center',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignRight,\n label: 'Right Align',\n value: 'right',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignJustify,\n label: 'Justify',\n value: 'justify',\n },\n ],\n defaultValue: 'left',\n }),\n getStyle(textAlign: TextAlignProperty) {\n return { textAlign }\n },\n }),\n onChange: (editor, value) =>\n setResponsiveValue(editor, TEXT_ALIGN_KEY, value, {\n match: ElementUtils.isRootBlock,\n split: false,\n }),\n getValue: editor => getValue(editor),\n getElementValue: (element: Element) => {\n return ElementUtils.isRootBlock(element) ? element.textAlign : undefined\n },\n },\n withPlugin: withTextAlign,\n renderElement: (renderElement, className) => props => {\n return renderElement({\n ...props,\n element: {\n ...props.element,\n className,\n },\n })\n },\n })\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { SupportedInline, isSupportedInlineType, isSupportedInlineEntry } from './types'\n\nexport function getSupportedInlinesAndTextInSelection(\n editor: Editor,\n): NodeEntry<SupportedInline | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node =>\n (ElementUtils.isInline(node) && isSupportedInlineType(node.type)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | SupportedInline>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n\n const areAllRootsSupportedInlineTypesOrText = roots.every(\n entry => isSupportedInlineEntry(entry) || Text.isText(entry[0]),\n )\n\n if (!areAllRootsSupportedInlineTypesOrText) return undefined\n\n const matchingValues = roots.filter(isSupportedInlineEntry).map(([node]) => node) as (\n | SupportedInline\n | null\n | undefined\n )[]\n\n const match = matchingValues.reduce(\n (a, b) => (a?.type === b?.type ? b : null),\n matchingValues.at(0) ?? undefined,\n )\n\n return match == null ? match : match.type\n}\n","import { getSupportedInlinesAndTextInSelection } from './getValue'\nimport { Editor, Transforms } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport {\n SupportedInlineType,\n isSupportedInlineEntry,\n isSupportedInlineType,\n supportedInlineOptions,\n} from './types'\n\nexport const onChange = (editor: Editor, value: SupportedInlineType) => {\n function unwrapAllSupportedTypes() {\n supportedInlineOptions.forEach(({ value: optionValue }) => unwrapInline(editor, optionValue))\n }\n\n function unwrapAllInlines() {\n Transforms.unwrapNodes(editor, {\n match: node => ElementUtils.isInline(node),\n at: getSelection(editor),\n })\n }\n\n if (value == null) return unwrapAllSupportedTypes()\n\n if (!isSupportedInlineType(value)) return\n\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n const root = roots.at(0)\n\n if (\n roots.length === 1 &&\n root != null &&\n isSupportedInlineEntry(root) &&\n root[0].type === value\n ) {\n unwrapInline(editor, value)\n } else {\n unwrapAllInlines()\n wrapInline(editor, { type: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { RenderElement, createRichTextV2Plugin, unstable_IconRadioGroup } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { supportedInlineOptions } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withInline = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nexport function InlinePlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_IconRadioGroup({\n label: 'Inline',\n options: supportedInlineOptions,\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) ? element.type : undefined\n },\n },\n withPlugin: withInline,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\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\n default:\n return (\n <>\n {renderElement({\n element,\n attributes,\n children,\n })}\n </>\n )\n }\n}\n","import { Node, NodeEntry } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType, LinkElement } from '../types'\n\nexport function isLinkElement(node: Node): node is LinkElement {\n return ElementUtils.isInline(node) && node.type === InlineType.Link\n}\n\nexport function isLinkEntry(inline: NodeEntry<Node>): inline is NodeEntry<LinkElement> {\n return ElementUtils.isInline(inline[0]) && inline[0].type === InlineType.Link\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { LinkElement } from '../types'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkElement } from './types'\nimport deepEqual from '../../utils/deepEqual'\n\nexport function getLinksAndTextInSelection(editor: Editor): NodeEntry<LinkElement | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node => (ElementUtils.isInline(node) && isLinkElement(node)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | LinkElement>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n\n const areAllRootsLinks = roots.every(([root]) => isLinkElement(root) || Text.isText(root))\n\n if (!areAllRootsLinks) return undefined\n\n const matchingValues = roots.map(([node]) => node).filter(isLinkElement) as (\n | LinkElement\n | null\n | undefined\n )[]\n\n const match = matchingValues.reduce(\n (a, b) => (deepEqual(a?.link, b?.link) ? b : null),\n matchingValues.at(0) ?? undefined,\n )\n\n return match == null ? match : match.link\n}\n","import { Editor, Transforms } from 'slate'\nimport { LinkControlData } from '../../controls'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { InlineType } from '../types'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkEntry } from './types'\nimport { getLinksAndTextInSelection } from './getValue'\n\nexport const onChange = (editor: Editor, value: LinkControlData) => {\n if (value == null) return unwrapInline(editor, InlineType.Link)\n\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n const root = roots.at(0)\n\n // If the root of our selection is a link we just want to modify it\n if (roots.length === 1 && root != null && isLinkEntry(root)) {\n Transforms.setNodes(\n editor,\n {\n link: value,\n },\n { at: root[1] },\n )\n }\n // In all other cases we want to remove all existing links and wrap the current selection in a new link\n else {\n unwrapInline(editor, InlineType.Link)\n wrapInline(editor, { type: InlineType.Link, link: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { Link, RenderElement, createRichTextV2Plugin } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { useStyle } from '../../runtimes/react/use-style'\nimport { Link as LinkComponent } from '../../components/shared/Link'\nimport { cx } from '@emotion/css'\nimport { isLinkElement } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withLink = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\n const linkStyle = useStyle({ textDecoration: 'none' })\n switch (element.type) {\n case InlineType.Link:\n return (\n <LinkComponent\n {...attributes}\n link={element.link ?? undefined}\n className={cx(linkStyle, element.className)}\n >\n {children}\n </LinkComponent>\n )\n\n default:\n return renderElement({\n element,\n attributes,\n children,\n })\n }\n}\n\nexport function LinkPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: Link({\n label: 'On Click',\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) && isLinkElement(element) ? element.link : undefined\n },\n },\n withPlugin: withLink,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n"],"names":["Editor","getSelection","ElementUtils","responsiveShallowEqual","TEXT_ALIGN_KEY","withTextAlign","editor","normalizeNode","entry","normalizeResponsiveValue","match","isRootBlock","createRichTextV2Plugin","control","definition","unstable_StyleV2","type","unstable_IconRadioGroup","label","options","icon","unstable_IconRadioGroupIcon","TextAlignLeft","value","TextAlignCenter","TextAlignRight","TextAlignJustify","defaultValue","getStyle","textAlign","onChange","setResponsiveValue","split","getValue","getElementValue","element","undefined","withPlugin","renderElement","className","props","isSupportedInlineType","Text","filterForSubtreeRoots","isSupportedInlineEntry","supportedInlineOptions","unwrapInline","Transforms","wrapInline","withInline","isInline","InlinePluginComponent","attributes","children","InlineType","Code","SuperScript","SubScript","_Fragment","deepEqual","withLink","linkStyle","useStyle","textDecoration","Link","LinkComponent","link","cx","isLinkElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,oBAAkB,QAA0D;AACjF,QAAM,iBAAiB,MAAM,KAC3BA,MAAAA,OAAO,MAAM,QAAQ;AAAA,IACnB,IAAIC,mBAAa,MAAM;AAAA,IACvB,OAAOC,MAAa,aAAA;AAAA,EAAA,CACrB,CACH,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,YAAY;AAE5B,SAAA,eAAe,WAAW,IAC7B,SACA,eAAe,OAAO,CAAC,GAAG,MAAM;AACvB,WAAAC,MAAA,uBAAuB,GAAG,CAAC;AAAA,EAAA,CACnC;AACP;ACPA,MAAMC,iBAAiB;AAEVC,MAAAA,gBAAgB,CAACC,WAAmB;AACzC,QAAA;AAAA,IAAEC;AAAAA,MAAkBD;AAC1BA,SAAOC,gBAAgBC,CAAS,UAAA;AAE5BC,QAAAA,MAAAA,yBAAyBH,QAAQF,gBAAgB;AAAA,MAAEM,OAAOR,MAAaS,aAAAA;AAAAA,IAAAA,CAA/C,EAA8DH,KAAtF,GACA;AACA;AAAA,IACD;AACDD,kBAAcC,KAAD;AAAA,EAAA;AAGRF,SAAAA;AACR;AAEiC,2BAAA;AAChC,SAAOM,iCAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYC,UAAAA,iBAAiB;AAAA,QAC3BC,MAAMC,WAAAA,wBAAwB;AAAA,UAC5BC,OAAO;AAAA,UACPC,SAAS,CACP;AAAA,YACEC,MAAMC,WAA4BC,4BAAAA;AAAAA,YAClCJ,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,GAET;AAAA,YACEH,MAAMC,WAA4BG,4BAAAA;AAAAA,YAClCN,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,GAET;AAAA,YACEH,MAAMC,WAA4BI,4BAAAA;AAAAA,YAClCP,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,GAET;AAAA,YACEH,MAAMC,WAA4BK,4BAAAA;AAAAA,YAClCR,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,CAnBF;AAAA,UAsBTI,cAAc;AAAA,QAAA,CAxBa;AAAA,QA0B7BC,SAASC,WAA8B;AAC9B,iBAAA;AAAA,YAAEA;AAAAA,UAAAA;AAAAA,QACV;AAAA,MAAA,CA7ByB;AAAA,MA+B5BC,UAAU,CAACxB,QAAQiB,UACjBQ,MAAmBzB,mBAAAA,QAAQF,gBAAgBmB,OAAO;AAAA,QAChDb,OAAOR,MAAaS,aAAAA;AAAAA,QACpBqB,OAAO;AAAA,MAAA,CAFS;AAAA,MAIpBC,UAAU3B,CAAU2B,WAAAA,WAAS3B,MAAD;AAAA,MAC5B4B,iBAAiB,CAACC,YAAqB;AAC9BjC,eAAAA,MAAAA,aAAaS,YAAYwB,OAAzB,IAAoCA,QAAQN,YAAYO;AAAAA,MAChE;AAAA,IAzCyB;AAAA,IA2C5BC,YAAYhC;AAAAA,IACZiC,eAAe,CAACA,eAAeC,cAAcC,CAAS,UAAA;AACpD,aAAOF,cAAc,iCAChBE,QADgB;AAAA,QAEnBL,SAAS,iCACJK,MAAML,UADF;AAAA,UAEPI;AAAAA,QAFO;AAAA,MAAA,EAFS;AAAA,IAOrB;AAAA,EAAA,CApD0B;AAsD9B;AC7EM,+CACL,QACqC;AACrC,SAAO,MAAM,KACXvC,aAAO,MAAM,QAAQ;AAAA,IACnB,IAAIC,mBAAa,MAAM;AAAA,IACvB,OAAO,CAAA,SACJC,mBAAa,SAAS,IAAI,KAAKuC,4BAAsB,KAAK,IAAI,KAAMC,WAAK,OAAO,IAAI;AAAA,EACxF,CAAA,CACH;AACF;AAEa,MAAAT,aAAW,CAAC,WAAmB;;AAC1C,QAAM,QAAQU,MAAA,sBAAsB,sCAAsC,MAAM,CAAC;AAE3E,QAAA,wCAAwC,MAAM,MAClD,CAAS,UAAAC,MAAA,uBAAuB,KAAK,KAAKF,MAAK,KAAA,OAAO,MAAM,EAAE,CAChE;AAEA,MAAI,CAAC;AAA8C,WAAA;AAE7C,QAAA,iBAAiB,MAAM,OAAOE,MAAsB,sBAAA,EAAE,IAAI,CAAC,CAAC,UAAU,IAAI;AAMhF,QAAM,QAAQ,eAAe,OAC3B,CAAC,GAAG,MAAO,wBAAG,UAAS,wBAAG,QAAO,IAAI,MACrC,qBAAe,GAAG,CAAC,MAAnB,YAAwB,MAC1B;AAEO,SAAA,SAAS,OAAO,QAAQ,MAAM;AACvC;ACzBa,MAAAd,aAAW,CAAC,QAAgB,UAA+B;AACnC,qCAAA;AACVe,iCAAA,QAAQ,CAAC,EAAE,OAAO,kBAAkBC,mBAAa,QAAQ,WAAW,CAAC;AAAA,EAC9F;AAE4B,8BAAA;AAC1BC,UAAA,WAAW,YAAY,QAAQ;AAAA,MAC7B,OAAO,CAAA,SAAQ7C,mBAAa,SAAS,IAAI;AAAA,MACzC,IAAID,mBAAa,MAAM;AAAA,IAAA,CACxB;AAAA,EACH;AAEA,MAAI,SAAS;AAAM,WAAO,wBAAwB;AAE9C,MAAA,CAACwC,4BAAsB,KAAK;AAAG;AAEnC,QAAM,QAAQE,MAAA,sBAAsB,sCAAsC,MAAM,CAAC;AAC3E,QAAA,OAAO,MAAM,GAAG,CAAC;AAGrB,MAAA,MAAM,WAAW,KACjB,QAAQ,QACRC,MAAAA,uBAAuB,IAAI,KAC3B,KAAK,GAAG,SAAS,OACjB;AACAE,uBAAa,QAAQ,KAAK;AAAA,EAAA,OACrB;AACY;AACjBE,UAAA,WAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,IAAI;AAAA,EAClD;AACF;ACnCaC,MAAAA,aAAa,CAAC3C,WAAmB;AACtC,QAAA;AAAA,IAAE4C;AAAAA,MAAa5C;AAErBA,SAAO4C,WAAW1C,CAAS,UAAA;AAClBN,WAAAA,MAAAA,aAAagD,SAAS1C,KAAtB,KAAgC0C,SAAS1C,KAAD;AAAA,EAAA;AAG1CF,SAAAA;AACR;AAE8B,wBAAA;AAC7B,SAAOM,iCAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYG,WAAAA,wBAAwB;AAAA,QAClCC,OAAO;AAAA,QACPC,SAAS0B,MAAAA;AAAAA,MAAAA,CAFwB;AAAA,MAAA,UAInCf;AAAAA,MAAAA,UACAG;AAAAA,MACAC,iBAAiB,CAACC,YAAqB;AAC9BjC,eAAAA,MAAAA,aAAagD,SAASf,OAAtB,IAAiCA,QAAQnB,OAAOoB;AAAAA,MACxD;AAAA,IAVyB;AAAA,IAY5BC,YAAYY;AAAAA,IACZX,eAAeA,mBAAiBE,CAAS,UAAA;AAChC,4CAACW,yBAAD,iCAA2BX,QAA3B;AAAA,QAAkC;AAAA,MAAA,EAAzC;AAAA,IACD;AAAA,EAAA,CAf0B;AAiB9B;AAED,iCAA+B;AAAA,EAC7BL;AAAAA,EACAiB;AAAAA,EACAC;AAAAA,EACAf;AAAAA,GACwD;AAChDH,UAAAA,QAAQnB;AAAAA,SACTsC,UAAWC,WAAAA;AACd,qFAAiBH;QAAaC;AAAAA,MAAAA,EAA9B;AAAA,SACGC,UAAWE,WAAAA;AACd,oFAAgBJ;QAAaC;AAAAA,MAAAA,EAA7B;AAAA,SACGC,UAAWG,WAAAA;AACd,oFAAgBL;QAAaC;AAAAA,MAAAA,EAA7B;AAAA;AAIE,4CAAAK,WAAAA,UAAA;AAAA,QAAA,UACGpB,cAAc;AAAA,UACbH;AAAAA,UACAiB;AAAAA,UACAC;AAAAA,QAAAA,CAHY;AAAA,MAAA,CAFlB;AAAA;AAUL;AC5DM,uBAAuB,MAAiC;AAC7D,SAAOnD,MAAAA,aAAa,SAAS,IAAI,KAAK,KAAK,SAASoD,UAAW,WAAA;AACjE;AAEO,qBAAqB,QAA2D;AAC9E,SAAApD,mBAAa,SAAS,OAAO,EAAE,KAAK,OAAO,GAAG,SAASoD,UAAAA,WAAW;AAC3E;ACFO,oCAAoC,QAAiD;AAC1F,SAAO,MAAM,KACXtD,aAAO,MAAM,QAAQ;AAAA,IACnB,IAAIC,mBAAa,MAAM;AAAA,IACvB,OAAO,CAAS,SAAAC,MAAA,aAAa,SAAS,IAAI,KAAK,cAAc,IAAI,KAAMwC,WAAK,OAAO,IAAI;AAAA,EACxF,CAAA,CACH;AACF;AAEa,MAAA,WAAW,CAAC,WAAmB;;AAC1C,QAAM,QAAQC,MAAA,sBAAsB,2BAA2B,MAAM,CAAC;AAEtE,QAAM,mBAAmB,MAAM,MAAM,CAAC,CAAC,UAAU,cAAc,IAAI,KAAKD,MAAA,KAAK,OAAO,IAAI,CAAC;AAEzF,MAAI,CAAC;AAAyB,WAAA;AAExB,QAAA,iBAAiB,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,OAAO,aAAa;AAMvE,QAAM,QAAQ,eAAe,OAC3B,CAAC,GAAG,MAAOiB,KAAAA,UAAU,uBAAG,MAAM,uBAAG,IAAI,IAAI,IAAI,MAC7C,qBAAe,GAAG,CAAC,MAAnB,YAAwB,MAC1B;AAEO,SAAA,SAAS,OAAO,QAAQ,MAAM;AACvC;AC3Ba,MAAA,WAAW,CAAC,QAAgB,UAA2B;AAClE,MAAI,SAAS;AAAa,WAAAb,mBAAa,QAAQQ,UAAA,WAAW,IAAI;AAE9D,QAAM,QAAQX,MAAA,sBAAsB,2BAA2B,MAAM,CAAC;AAChE,QAAA,OAAO,MAAM,GAAG,CAAC;AAGvB,MAAI,MAAM,WAAW,KAAK,QAAQ,QAAQ,YAAY,IAAI,GAAG;AAC3DI,UAAA,WAAW,SACT,QACA;AAAA,MACE,MAAM;AAAA,IAER,GAAA,EAAE,IAAI,KAAK,GACb,CAAA;AAAA,EAAA,OAGG;AACUD,UAAAA,aAAA,QAAQQ,qBAAW,IAAI;AACzBN,UAAAA,WAAA,QAAQ,EAAE,MAAMM,qBAAW,MAAM,MAAM,OAAO,UAAU,CAAC,EAAA,CAAG;AAAA,EACzE;AACF;AClBaM,MAAAA,WAAW,CAACtD,WAAmB;AACpC,QAAA;AAAA,IAAE4C;AAAAA,MAAa5C;AAErBA,SAAO4C,WAAW1C,CAAS,UAAA;AAClBN,WAAAA,MAAAA,aAAagD,SAAS1C,KAAtB,KAAgC0C,SAAS1C,KAAD;AAAA,EAAA;AAG1CF,SAAAA;AACR;AAED,+BAA+B;AAAA,EAC7B6B;AAAAA,EACAiB;AAAAA,EACAC;AAAAA,EACAf;AAAAA,GACwD;;AAClDuB,QAAAA,YAAYC,UAAAA,SAAS;AAAA,IAAEC,gBAAgB;AAAA,EAAA,CAAnB;AAClB5B,UAAAA,QAAQnB;AAAAA,SACTsC,UAAWU,WAAAA;AAEZ,4CAACC,QAAAA,MAAD,iCACMb,aADN;AAAA,QAEE,MAAMjB,cAAQ+B,SAAR/B,YAAgBC;AAAAA,QACtB,WAAW+B,IAAAA,GAAGN,WAAW1B,QAAQI,SAApB;AAAA,QAEZc;AAAAA,MAAAA,EANL;AAAA;AAWA,aAAOf,cAAc;AAAA,QACnBH;AAAAA,QACAiB;AAAAA,QACAC;AAAAA,MAAAA,CAHkB;AAAA;AAMzB;AAE4B,sBAAA;AAC3B,SAAOzC,iCAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYkD,UAAAA,OAAK;AAAA,QACf9C,OAAO;AAAA,MAAA,CADO;AAAA,MAGhBY;AAAAA,MACAG;AAAAA,MACAC,iBAAiB,CAACC,YAAqB;AAC9BjC,eAAAA,MAAAA,aAAagD,SAASf,OAAtB,KAAkCiC,cAAcjC,OAAD,IAAYA,QAAQ+B,OAAO9B;AAAAA,MAClF;AAAA,IATyB;AAAA,IAW5BC,YAAYuB;AAAAA,IACZtB,eAAeA,mBAAiBE,CAAS,UAAA;AAChC,4CAAC,uBAAD,iCAA2BA,QAA3B;AAAA,QAAkC;AAAA,MAAA,EAAzC;AAAA,IACD;AAAA,EAAA,CAd0B;AAgB9B;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/slate.es.js CHANGED
@@ -17,29 +17,32 @@ var __spreadValues = (a2, b3) => {
17
17
  return a2;
18
18
  };
19
19
  var __spreadProps = (a2, b3) => __defProps(a2, __getOwnPropDescs(b3));
20
- import { n as normalizeResponsiveValue, s as setResponsiveValue, g as getResponsiveValue } from "./index.es5.js";
20
+ import { r as responsiveShallowEqual, n as normalizeResponsiveValue, s as setResponsiveValue } from "./index.es5.js";
21
21
  export { a as TYPOGRAPHY_KEY, T as TypographyActions, b as TypographyPlugin, w as withTypography } from "./index.es5.js";
22
- import { E as ElementUtils, f as filterForSubtreeRoots, g as getSelection, i as isSupportedInlineType, a as isSupportedInlineEntry, u as unwrapInline, w as wrapInline, s as supportedInlineOptions } from "./types.es2.js";
22
+ import { g as getSelection, E as ElementUtils, f as filterForSubtreeRoots, i as isSupportedInlineType, a as isSupportedInlineEntry, u as unwrapInline, w as wrapInline, s as supportedInlineOptions } from "./types.es2.js";
23
23
  export { B as BlockActions, c as BlockPlugin, L as ListActions, o as onKeyDown, b as withBlock } from "./types.es2.js";
24
24
  export { I as InlineModePlugin, w as withInlineMode } from "./index.es6.js";
25
25
  export { w as withBuilder } from "./index.es7.js";
26
- import { b8 as createRichTextV2Plugin, aY as unstable_StyleV2, aw as Color, bc as InlineType, aC as Link, U as useStyle } from "./react-page.es.js";
27
- export { bf as BlockTextAlignment, be as BlockType, bc as InlineType, bd as RootBlockType } from "./react-page.es.js";
26
+ import { b9 as createRichTextV2Plugin, aZ as unstable_StyleV2, bd as InlineType, aD as Link, U as useStyle } from "./react-page.es.js";
27
+ export { bg as BlockTextAlignment, bf as BlockType, bd as InlineType, be as RootBlockType } from "./react-page.es.js";
28
+ import "./actions.es.js";
28
29
  import { d as unstable_IconRadioGroup, u as unstable_IconRadioGroupIcon } from "./typography.es.js";
29
- import { Text, Editor, Transforms } from "slate";
30
- import "react";
31
- import { cx } from "@emotion/css";
32
- import "@emotion/serialize";
33
- import "@emotion/utils";
34
- import { K as deepEqual } from "./index.es.js";
30
+ import { Editor, Text, Transforms } from "slate";
35
31
  import { jsx, Fragment } from "react/jsx-runtime";
36
32
  import { L as Link$1 } from "./index.es3.js";
33
+ import { cx } from "@emotion/css";
34
+ import { K as deepEqual } from "./index.es.js";
37
35
  import "./state/breakpoints.es.js";
38
- import "./actions.es.js";
36
+ import "zod";
39
37
  import "is-hotkey";
40
38
  import "slate-react";
41
39
  import "redux";
42
40
  import "redux-thunk";
41
+ import "react";
42
+ import "@emotion/serialize";
43
+ import "@emotion/utils";
44
+ import "scroll-into-view-if-needed";
45
+ import "next/link";
43
46
  import "use-sync-external-store/shim/with-selector";
44
47
  import "next/dynamic";
45
48
  import "./combobox.es.js";
@@ -48,11 +51,9 @@ import "./types.es.js";
48
51
  import "./box-models.es.js";
49
52
  import "css-box-model";
50
53
  import "color";
51
- import "scroll-into-view-if-needed";
52
54
  import "react-dom";
53
55
  import "html-react-parser";
54
56
  import "next/head";
55
- import "zod";
56
57
  import "@emotion/server/create-instance";
57
58
  import "next/document";
58
59
  import "cors";
@@ -63,7 +64,15 @@ import "set-cookie-parser";
63
64
  import "./constants.es.js";
64
65
  import "uuid";
65
66
  import "corporate-ipsum";
66
- import "next/link";
67
+ function getValue$2(editor) {
68
+ const matchingValues = Array.from(Editor.nodes(editor, {
69
+ at: getSelection(editor),
70
+ match: ElementUtils.isRootBlock
71
+ })).map(([node]) => node["textAlign"]);
72
+ return matchingValues.length === 0 ? void 0 : matchingValues.reduce((a2, b3) => {
73
+ return responsiveShallowEqual(a2, b3);
74
+ });
75
+ }
67
76
  const TEXT_ALIGN_KEY = "textAlign";
68
77
  const withTextAlign = (editor) => {
69
78
  const {
@@ -114,9 +123,7 @@ function TextAlignPlugin() {
114
123
  match: ElementUtils.isRootBlock,
115
124
  split: false
116
125
  }),
117
- getValue: (editor) => getResponsiveValue(editor, TEXT_ALIGN_KEY, {
118
- match: ElementUtils.isRootBlock
119
- }),
126
+ getValue: (editor) => getValue$2(editor),
120
127
  getElementValue: (element) => {
121
128
  return ElementUtils.isRootBlock(element) ? element.textAlign : void 0;
122
129
  }
@@ -131,56 +138,6 @@ function TextAlignPlugin() {
131
138
  }
132
139
  });
133
140
  }
134
- const COLOR_KEY = "color";
135
- function ColorPlugin() {
136
- return createRichTextV2Plugin({
137
- control: {
138
- definition: unstable_StyleV2({
139
- type: Color({
140
- label: "Color"
141
- }),
142
- getStyle(color) {
143
- return {
144
- color
145
- };
146
- }
147
- }),
148
- onChange: (editor, value) => {
149
- setResponsiveValue(editor, COLOR_KEY, value, {
150
- match: Text.isText,
151
- split: true
152
- });
153
- },
154
- getValue: (editor) => getResponsiveValue(editor, COLOR_KEY, {
155
- match: Text.isText
156
- }),
157
- getLeafValue: (text) => {
158
- return Text.isText(text) ? text == null ? void 0 : text.color : void 0;
159
- }
160
- },
161
- withPlugin: (editor) => {
162
- const {
163
- normalizeNode
164
- } = editor;
165
- editor.normalizeNode = (entry) => {
166
- if (normalizeResponsiveValue(editor, COLOR_KEY, {
167
- match: Text.isText
168
- })(entry)) {
169
- return;
170
- }
171
- normalizeNode(entry);
172
- };
173
- return editor;
174
- },
175
- renderLeaf: (renderLeaf, className) => (props) => {
176
- return renderLeaf(__spreadProps(__spreadValues({}, props), {
177
- leaf: __spreadProps(__spreadValues({}, props.leaf), {
178
- className: `${props.leaf.className} ${className}`
179
- })
180
- }));
181
- }
182
- });
183
- }
184
141
  function getSupportedInlinesAndTextInSelection(editor) {
185
142
  return Array.from(Editor.nodes(editor, {
186
143
  at: getSelection(editor),
@@ -194,7 +151,8 @@ const getValue$1 = (editor) => {
194
151
  if (!areAllRootsSupportedInlineTypesOrText)
195
152
  return void 0;
196
153
  const matchingValues = roots.filter(isSupportedInlineEntry).map(([node]) => node);
197
- return (_a = matchingValues.reduce((a2, b3) => deepEqual(a2, b3) ? b3 : void 0, matchingValues.at(0))) == null ? void 0 : _a.type;
154
+ const match = matchingValues.reduce((a2, b3) => (a2 == null ? void 0 : a2.type) === (b3 == null ? void 0 : b3.type) ? b3 : null, (_a = matchingValues.at(0)) != null ? _a : void 0);
155
+ return match == null ? match : match.type;
198
156
  };
199
157
  const onChange$1 = (editor, value) => {
200
158
  function unwrapAllSupportedTypes() {
@@ -297,7 +255,8 @@ const getValue = (editor) => {
297
255
  if (!areAllRootsLinks)
298
256
  return void 0;
299
257
  const matchingValues = roots.map(([node]) => node).filter(isLinkElement);
300
- return (_a = matchingValues.reduce((a2, b3) => deepEqual(a2, b3) ? b3 : void 0, matchingValues.at(0))) == null ? void 0 : _a.link;
258
+ const match = matchingValues.reduce((a2, b3) => deepEqual(a2 == null ? void 0 : a2.link, b3 == null ? void 0 : b3.link) ? b3 : null, (_a = matchingValues.at(0)) != null ? _a : void 0);
259
+ return match == null ? match : match.link;
301
260
  };
302
261
  const onChange = (editor, value) => {
303
262
  if (value == null)
@@ -328,13 +287,14 @@ function InlinePluginComponent({
328
287
  children,
329
288
  renderElement
330
289
  }) {
290
+ var _a;
331
291
  const linkStyle = useStyle({
332
292
  textDecoration: "none"
333
293
  });
334
294
  switch (element.type) {
335
295
  case InlineType.Link:
336
296
  return /* @__PURE__ */ jsx(Link$1, __spreadProps(__spreadValues({}, attributes), {
337
- link: element.link,
297
+ link: (_a = element.link) != null ? _a : void 0,
338
298
  className: cx(linkStyle, element.className),
339
299
  children
340
300
  }));
@@ -366,5 +326,5 @@ function LinkPlugin() {
366
326
  }
367
327
  });
368
328
  }
369
- export { COLOR_KEY, ColorPlugin, InlinePlugin, LinkPlugin, TextAlignPlugin, withInline, withLink, withTextAlign };
329
+ export { InlinePlugin, LinkPlugin, TextAlignPlugin, withInline, withLink, withTextAlign };
370
330
  //# sourceMappingURL=slate.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slate.es.js","sources":["../src/slate/TextAlignPlugin/index.tsx","../src/slate/ColorPlugin/index.tsx","../src/slate/InlinePlugin/getValue.ts","../src/slate/InlinePlugin/onChange.ts","../src/slate/InlinePlugin/index.tsx","../src/slate/LinkPlugin/types.ts","../src/slate/LinkPlugin/getValue.ts","../src/slate/LinkPlugin/onChange.ts","../src/slate/LinkPlugin/index.tsx"],"sourcesContent":["import { Editor, Element } from 'slate'\nimport {\n createRichTextV2Plugin,\n unstable_IconRadioGroup,\n unstable_IconRadioGroupIcon,\n unstable_StyleV2,\n} from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { TextAlignProperty } from 'csstype'\nimport {\n getResponsiveValue,\n normalizeResponsiveValue,\n setResponsiveValue,\n} from '../utils/responsive'\n\nconst TEXT_ALIGN_KEY = 'textAlign'\n\nexport const withTextAlign = (editor: Editor) => {\n const { normalizeNode } = editor\n editor.normalizeNode = entry => {\n if (\n normalizeResponsiveValue(editor, TEXT_ALIGN_KEY, { match: ElementUtils.isRootBlock })(entry)\n ) {\n return\n }\n normalizeNode(entry)\n }\n\n return editor\n}\n\nexport function TextAlignPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_StyleV2({\n type: unstable_IconRadioGroup({\n label: 'Alignment',\n options: [\n {\n icon: unstable_IconRadioGroupIcon.TextAlignLeft,\n label: 'Left Align',\n value: 'left',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignCenter,\n label: 'Center Align',\n value: 'center',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignRight,\n label: 'Right Align',\n value: 'right',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignJustify,\n label: 'Justify',\n value: 'justify',\n },\n ],\n defaultValue: 'left',\n }),\n getStyle(textAlign: TextAlignProperty) {\n return { textAlign }\n },\n }),\n onChange: (editor, value) =>\n setResponsiveValue(editor, TEXT_ALIGN_KEY, value, {\n match: ElementUtils.isRootBlock,\n split: false,\n }),\n getValue: editor =>\n getResponsiveValue(editor, TEXT_ALIGN_KEY, { match: ElementUtils.isRootBlock }),\n getElementValue: (element: Element) => {\n return ElementUtils.isRootBlock(element) ? element.textAlign : undefined\n },\n },\n withPlugin: withTextAlign,\n renderElement: (renderElement, className) => props => {\n return renderElement({\n ...props,\n element: {\n ...props.element,\n className,\n },\n })\n },\n })\n}\n","import { Editor, Text } from 'slate'\nimport {\n Color,\n createRichTextV2Plugin,\n unstable_StyleV2,\n ColorControlDefinition,\n} from '../../controls'\nimport { ControlDefinitionValue } from '../../runtimes/react/controls/control'\nimport {\n getResponsiveValue,\n normalizeResponsiveValue,\n setResponsiveValue,\n} from '../utils/responsive'\n\nexport const COLOR_KEY = 'color'\n\nexport function ColorPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_StyleV2({\n type: Color({\n label: 'Color',\n }),\n getStyle(color: ControlDefinitionValue<ColorControlDefinition>) {\n return { color }\n },\n }),\n onChange: (editor, value) => {\n setResponsiveValue(editor, COLOR_KEY, value, {\n match: Text.isText,\n split: true,\n })\n },\n getValue: editor => getResponsiveValue(editor, COLOR_KEY, { match: Text.isText }),\n getLeafValue: (text: Text) => {\n return Text.isText(text) ? text?.color : undefined\n },\n },\n withPlugin: (editor: Editor) => {\n const { normalizeNode } = editor\n editor.normalizeNode = entry => {\n if (normalizeResponsiveValue(editor, COLOR_KEY, { match: Text.isText })(entry)) {\n return\n }\n\n normalizeNode(entry)\n }\n\n return editor\n },\n renderLeaf: (renderLeaf, className) => props => {\n return renderLeaf({\n ...props,\n leaf: {\n ...props.leaf,\n className: `${props.leaf.className} ${className}`,\n },\n })\n },\n })\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport deepEqual from '../../utils/deepEqual'\nimport { SupportedInline, isSupportedInlineType, isSupportedInlineEntry } from './types'\n\nexport function getSupportedInlinesAndTextInSelection(\n editor: Editor,\n): NodeEntry<SupportedInline | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node =>\n (ElementUtils.isInline(node) && isSupportedInlineType(node.type)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | SupportedInline>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n\n const areAllRootsSupportedInlineTypesOrText = roots.every(\n entry => isSupportedInlineEntry(entry) || Text.isText(entry[0]),\n )\n\n if (!areAllRootsSupportedInlineTypesOrText) return undefined\n\n const matchingValues = roots.filter(isSupportedInlineEntry).map(([node]) => node)\n\n return matchingValues.reduce((a, b) => (deepEqual(a, b) ? b : undefined), matchingValues.at(0))\n ?.type\n}\n","import { getSupportedInlinesAndTextInSelection } from './getValue'\nimport { Editor, Transforms } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport {\n SupportedInlineType,\n isSupportedInlineEntry,\n isSupportedInlineType,\n supportedInlineOptions,\n} from './types'\n\nexport const onChange = (editor: Editor, value: SupportedInlineType) => {\n function unwrapAllSupportedTypes() {\n supportedInlineOptions.forEach(({ value: optionValue }) => unwrapInline(editor, optionValue))\n }\n\n function unwrapAllInlines() {\n Transforms.unwrapNodes(editor, {\n match: node => ElementUtils.isInline(node),\n at: getSelection(editor),\n })\n }\n\n if (value == null) return unwrapAllSupportedTypes()\n\n if (!isSupportedInlineType(value)) return\n\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n const root = roots.at(0)\n\n if (\n roots.length === 1 &&\n root != null &&\n isSupportedInlineEntry(root) &&\n root[0].type === value\n ) {\n unwrapInline(editor, value)\n } else {\n unwrapAllInlines()\n wrapInline(editor, { type: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { RenderElement, createRichTextV2Plugin, unstable_IconRadioGroup } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { supportedInlineOptions } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withInline = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nexport function InlinePlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_IconRadioGroup({\n label: 'Inline',\n options: supportedInlineOptions,\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) ? element.type : undefined\n },\n },\n withPlugin: withInline,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\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\n default:\n return (\n <>\n {renderElement({\n element,\n attributes,\n children,\n })}\n </>\n )\n }\n}\n","import { Node, NodeEntry } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType, LinkElement } from '../types'\n\nexport function isLinkElement(node: Node): node is LinkElement {\n return ElementUtils.isInline(node) && node.type === InlineType.Link\n}\n\nexport function isLinkEntry(inline: NodeEntry<Node>): inline is NodeEntry<LinkElement> {\n return ElementUtils.isInline(inline[0]) && inline[0].type === InlineType.Link\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { LinkElement } from '../types'\nimport deepEqual from '../../utils/deepEqual'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkElement } from './types'\n\nexport function getLinksAndTextInSelection(editor: Editor): NodeEntry<LinkElement | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node => (ElementUtils.isInline(node) && isLinkElement(node)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | LinkElement>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n\n const areAllRootsLinks = roots.every(([root]) => isLinkElement(root) || Text.isText(root))\n\n if (!areAllRootsLinks) return undefined\n\n const matchingValues = roots.map(([node]) => node).filter(isLinkElement)\n\n return matchingValues.reduce((a, b) => (deepEqual(a, b) ? b : undefined), matchingValues.at(0))\n ?.link\n}\n","import { Editor, Transforms } from 'slate'\nimport { LinkControlData } from '../../controls'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { InlineType } from '../types'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkEntry } from './types'\nimport { getLinksAndTextInSelection } from './getValue'\n\nexport const onChange = (editor: Editor, value: LinkControlData) => {\n if (value == null) return unwrapInline(editor, InlineType.Link)\n\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n const root = roots.at(0)\n\n // If the root of our selection is a link we just want to modify it\n if (roots.length === 1 && root != null && isLinkEntry(root)) {\n Transforms.setNodes(\n editor,\n {\n link: value,\n },\n { at: root[1] },\n )\n }\n // In all other cases we want to remove all existing links and wrap the current selection in a new link\n else {\n unwrapInline(editor, InlineType.Link)\n wrapInline(editor, { type: InlineType.Link, link: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { Link, RenderElement, createRichTextV2Plugin } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { useStyle } from '../../runtimes/react/use-style'\nimport { Link as LinkComponent } from '../../components/shared/Link'\nimport { cx } from '@emotion/css'\nimport { isLinkElement } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withLink = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\n const linkStyle = useStyle({ textDecoration: 'none' })\n switch (element.type) {\n case InlineType.Link:\n return (\n <LinkComponent\n {...attributes}\n link={element.link}\n className={cx(linkStyle, element.className)}\n >\n {children}\n </LinkComponent>\n )\n\n default:\n return renderElement({\n element,\n attributes,\n children,\n })\n }\n}\n\nexport function LinkPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: Link({\n label: 'On Click',\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) && isLinkElement(element) ? element.link : undefined\n },\n },\n withPlugin: withLink,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n"],"names":["TEXT_ALIGN_KEY","withTextAlign","editor","normalizeNode","entry","normalizeResponsiveValue","match","ElementUtils","isRootBlock","createRichTextV2Plugin","control","definition","unstable_StyleV2","type","unstable_IconRadioGroup","label","options","icon","unstable_IconRadioGroupIcon","TextAlignLeft","value","TextAlignCenter","TextAlignRight","TextAlignJustify","defaultValue","getStyle","textAlign","onChange","setResponsiveValue","split","getValue","getResponsiveValue","getElementValue","element","undefined","withPlugin","renderElement","className","props","COLOR_KEY","Color","color","Text","isText","getLeafValue","text","renderLeaf","leaf","withInline","isInline","supportedInlineOptions","InlinePluginComponent","attributes","children","InlineType","Code","SuperScript","SubScript","_Fragment","withLink","linkStyle","useStyle","textDecoration","Link","LinkComponent","link","cx","isLinkElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAMA,iBAAiB;AAEVC,MAAAA,gBAAgB,CAACC,WAAmB;AACzC,QAAA;AAAA,IAAEC;AAAAA,MAAkBD;AAC1BA,SAAOC,gBAAgBC,CAAS,UAAA;AAE5BC,QAAAA,yBAAyBH,QAAQF,gBAAgB;AAAA,MAAEM,OAAOC,aAAaC;AAAAA,IAAAA,CAA/C,EAA8DJ,KAAtF,GACA;AACA;AAAA,IACD;AACDD,kBAAcC,KAAD;AAAA,EAAA;AAGRF,SAAAA;AACR;AAEiC,2BAAA;AAChC,SAAOO,uBAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYC,iBAAiB;AAAA,QAC3BC,MAAMC,wBAAwB;AAAA,UAC5BC,OAAO;AAAA,UACPC,SAAS,CACP;AAAA,YACEC,MAAMC,4BAA4BC;AAAAA,YAClCJ,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,GAET;AAAA,YACEH,MAAMC,4BAA4BG;AAAAA,YAClCN,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,GAET;AAAA,YACEH,MAAMC,4BAA4BI;AAAAA,YAClCP,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,GAET;AAAA,YACEH,MAAMC,4BAA4BK;AAAAA,YAClCR,OAAO;AAAA,YACPK,OAAO;AAAA,UAAA,CAnBF;AAAA,UAsBTI,cAAc;AAAA,QAAA,CAxBa;AAAA,QA0B7BC,SAASC,WAA8B;AAC9B,iBAAA;AAAA,YAAEA;AAAAA,UAAAA;AAAAA,QACV;AAAA,MAAA,CA7ByB;AAAA,MA+B5BC,UAAU,CAACzB,QAAQkB,UACjBQ,mBAAmB1B,QAAQF,gBAAgBoB,OAAO;AAAA,QAChDd,OAAOC,aAAaC;AAAAA,QACpBqB,OAAO;AAAA,MAAA,CAFS;AAAA,MAIpBC,UAAU5B,CAAAA,WACR6B,mBAAmB7B,QAAQF,gBAAgB;AAAA,QAAEM,OAAOC,aAAaC;AAAAA,MAAAA,CAA/C;AAAA,MACpBwB,iBAAiB,CAACC,YAAqB;AAC9B1B,eAAAA,aAAaC,YAAYyB,OAAzB,IAAoCA,QAAQP,YAAYQ;AAAAA,MAChE;AAAA,IA1CyB;AAAA,IA4C5BC,YAAYlC;AAAAA,IACZmC,eAAe,CAACA,eAAeC,cAAcC,CAAS,UAAA;AACpD,aAAOF,cAAc,iCAChBE,QADgB;AAAA,QAEnBL,SAAS,iCACJK,MAAML,UADF;AAAA,UAEPI;AAAAA,QAFO;AAAA,MAAA,EAFS;AAAA,IAOrB;AAAA,EAAA,CArD0B;AAuD9B;ACzEM,MAAME,YAAY;AAEK,uBAAA;AAC5B,SAAO9B,uBAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYC,iBAAiB;AAAA,QAC3BC,MAAM2B,MAAM;AAAA,UACVzB,OAAO;AAAA,QAAA,CADE;AAAA,QAGXU,SAASgB,OAAuD;AACvD,iBAAA;AAAA,YAAEA;AAAAA,UAAAA;AAAAA,QACV;AAAA,MAAA,CANyB;AAAA,MAQ5Bd,UAAU,CAACzB,QAAQkB,UAAU;AACRlB,2BAAAA,QAAQqC,WAAWnB,OAAO;AAAA,UAC3Cd,OAAOoC,KAAKC;AAAAA,UACZd,OAAO;AAAA,QAAA,CAFS;AAAA,MAVb;AAAA,MAePC,UAAU5B,CAAAA,WAAU6B,mBAAmB7B,QAAQqC,WAAW;AAAA,QAAEjC,OAAOoC,KAAKC;AAAAA,MAAAA,CAAlC;AAAA,MACtCC,cAAc,CAACC,SAAe;AACrBH,eAAAA,KAAKC,OAAOE,IAAZ,IAAoBA,6BAAMJ,QAAQP;AAAAA,MAC1C;AAAA,IAnByB;AAAA,IAqB5BC,YAAY,CAACjC,WAAmB;AACxB,YAAA;AAAA,QAAEC;AAAAA,UAAkBD;AAC1BA,aAAOC,gBAAgBC,CAAS,UAAA;AAC1BC,YAAAA,yBAAyBH,QAAQqC,WAAW;AAAA,UAAEjC,OAAOoC,KAAKC;AAAAA,QAAAA,CAAlC,EAA4CvC,KAApE,GAA4E;AAC9E;AAAA,QACD;AAEDD,sBAAcC,KAAD;AAAA,MAAA;AAGRF,aAAAA;AAAAA,IA/BmB;AAAA,IAiC5B4C,YAAY,CAACA,YAAYT,cAAcC,CAAS,UAAA;AAC9C,aAAOQ,WAAW,iCACbR,QADa;AAAA,QAEhBS,MAAM,iCACDT,MAAMS,OADL;AAAA,UAEJV,WAAY,GAAEC,MAAMS,KAAKV,aAAaA;AAAAA,QAFlC;AAAA,MAAA,EAFS;AAAA,IAOlB;AAAA,EAAA,CAzC0B;AA2C9B;ACrDM,+CACL,QACqC;AACrC,SAAO,MAAM,KACX,OAAO,MAAM,QAAQ;AAAA,IACnB,IAAI,aAAa,MAAM;AAAA,IACvB,OAAO,CAAA,SACJ,aAAa,SAAS,IAAI,KAAK,sBAAsB,KAAK,IAAI,KAAM,KAAK,OAAO,IAAI;AAAA,EACxF,CAAA,CACH;AACF;AAEa,MAAAP,aAAW,CAAC,WAAmB;;AAC1C,QAAM,QAAQ,sBAAsB,sCAAsC,MAAM,CAAC;AAE3E,QAAA,wCAAwC,MAAM,MAClD,CAAS,UAAA,uBAAuB,KAAK,KAAK,KAAK,OAAO,MAAM,EAAE,CAChE;AAEA,MAAI,CAAC;AAA8C,WAAA;AAE7C,QAAA,iBAAiB,MAAM,OAAO,sBAAsB,EAAE,IAAI,CAAC,CAAC,UAAU,IAAI;AAEhF,SAAO,qBAAe,OAAO,CAAC,IAAG,OAAO,UAAU,IAAG,EAAC,IAAI,KAAI,QAAY,eAAe,GAAG,CAAC,CAAC,MAAvF,mBACH;AACN;AClBa,MAAAH,aAAW,CAAC,QAAgB,UAA+B;AACnC,qCAAA;AACV,2BAAA,QAAQ,CAAC,EAAE,OAAO,kBAAkB,aAAa,QAAQ,WAAW,CAAC;AAAA,EAC9F;AAE4B,8BAAA;AAC1B,eAAW,YAAY,QAAQ;AAAA,MAC7B,OAAO,CAAA,SAAQ,aAAa,SAAS,IAAI;AAAA,MACzC,IAAI,aAAa,MAAM;AAAA,IAAA,CACxB;AAAA,EACH;AAEA,MAAI,SAAS;AAAM,WAAO,wBAAwB;AAE9C,MAAA,CAAC,sBAAsB,KAAK;AAAG;AAEnC,QAAM,QAAQ,sBAAsB,sCAAsC,MAAM,CAAC;AAC3E,QAAA,OAAO,MAAM,GAAG,CAAC;AAGrB,MAAA,MAAM,WAAW,KACjB,QAAQ,QACR,uBAAuB,IAAI,KAC3B,KAAK,GAAG,SAAS,OACjB;AACA,iBAAa,QAAQ,KAAK;AAAA,EAAA,OACrB;AACY;AACjB,eAAW,QAAQ,EAAE,MAAM,OAAO,UAAU,IAAI;AAAA,EAClD;AACF;ACnCaqB,MAAAA,aAAa,CAAC9C,WAAmB;AACtC,QAAA;AAAA,IAAE+C;AAAAA,MAAa/C;AAErBA,SAAO+C,WAAW7C,CAAS,UAAA;AAClBG,WAAAA,aAAa0C,SAAS7C,KAAtB,KAAgC6C,SAAS7C,KAAD;AAAA,EAAA;AAG1CF,SAAAA;AACR;AAE8B,wBAAA;AAC7B,SAAOO,uBAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYG,wBAAwB;AAAA,QAClCC,OAAO;AAAA,QACPC,SAASkC;AAAAA,MAAAA,CAFwB;AAAA,MAAA,UAInCvB;AAAAA,MAAAA,UACAG;AAAAA,MACAE,iBAAiB,CAACC,YAAqB;AAC9B1B,eAAAA,aAAa0C,SAAShB,OAAtB,IAAiCA,QAAQpB,OAAOqB;AAAAA,MACxD;AAAA,IAVyB;AAAA,IAY5BC,YAAYa;AAAAA,IACZZ,eAAeA,mBAAiBE,CAAS,UAAA;AAChC,iCAACa,yBAAD,iCAA2Bb,QAA3B;AAAA,QAAkC;AAAA,MAAA,EAAzC;AAAA,IACD;AAAA,EAAA,CAf0B;AAiB9B;AAED,iCAA+B;AAAA,EAC7BL;AAAAA,EACAmB;AAAAA,EACAC;AAAAA,EACAjB;AAAAA,GACwD;AAChDH,UAAAA,QAAQpB;AAAAA,SACTyC,WAAWC;AACd,0EAAiBH;QAAaC;AAAAA,MAAAA,EAA9B;AAAA,SACGC,WAAWE;AACd,yEAAgBJ;QAAaC;AAAAA,MAAAA,EAA7B;AAAA,SACGC,WAAWG;AACd,yEAAgBL;QAAaC;AAAAA,MAAAA,EAA7B;AAAA;AAIE,iCAAAK,UAAA;AAAA,QAAA,UACGtB,cAAc;AAAA,UACbH;AAAAA,UACAmB;AAAAA,UACAC;AAAAA,QAAAA,CAHY;AAAA,MAAA,CAFlB;AAAA;AAUL;AC5DM,uBAAuB,MAAiC;AAC7D,SAAO,aAAa,SAAS,IAAI,KAAK,KAAK,SAAS,WAAW;AACjE;AAEO,qBAAqB,QAA2D;AAC9E,SAAA,aAAa,SAAS,OAAO,EAAE,KAAK,OAAO,GAAG,SAAS,WAAW;AAC3E;ACFO,oCAAoC,QAAiD;AAC1F,SAAO,MAAM,KACX,OAAO,MAAM,QAAQ;AAAA,IACnB,IAAI,aAAa,MAAM;AAAA,IACvB,OAAO,CAAS,SAAA,aAAa,SAAS,IAAI,KAAK,cAAc,IAAI,KAAM,KAAK,OAAO,IAAI;AAAA,EACxF,CAAA,CACH;AACF;AAEa,MAAA,WAAW,CAAC,WAAmB;;AAC1C,QAAM,QAAQ,sBAAsB,2BAA2B,MAAM,CAAC;AAEtE,QAAM,mBAAmB,MAAM,MAAM,CAAC,CAAC,UAAU,cAAc,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC;AAEzF,MAAI,CAAC;AAAyB,WAAA;AAExB,QAAA,iBAAiB,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,OAAO,aAAa;AAEvE,SAAO,qBAAe,OAAO,CAAC,IAAG,OAAO,UAAU,IAAG,EAAC,IAAI,KAAI,QAAY,eAAe,GAAG,CAAC,CAAC,MAAvF,mBACH;AACN;ACnBa,MAAA,WAAW,CAAC,QAAgB,UAA2B;AAClE,MAAI,SAAS;AAAa,WAAA,aAAa,QAAQ,WAAW,IAAI;AAE9D,QAAM,QAAQ,sBAAsB,2BAA2B,MAAM,CAAC;AAChE,QAAA,OAAO,MAAM,GAAG,CAAC;AAGvB,MAAI,MAAM,WAAW,KAAK,QAAQ,QAAQ,YAAY,IAAI,GAAG;AAC3D,eAAW,SACT,QACA;AAAA,MACE,MAAM;AAAA,IAER,GAAA,EAAE,IAAI,KAAK,GACb,CAAA;AAAA,EAAA,OAGG;AACU,iBAAA,QAAQ,WAAW,IAAI;AACzB,eAAA,QAAQ,EAAE,MAAM,WAAW,MAAM,MAAM,OAAO,UAAU,CAAC,EAAA,CAAG;AAAA,EACzE;AACF;AClBaM,MAAAA,WAAW,CAACzD,WAAmB;AACpC,QAAA;AAAA,IAAE+C;AAAAA,MAAa/C;AAErBA,SAAO+C,WAAW7C,CAAS,UAAA;AAClBG,WAAAA,aAAa0C,SAAS7C,KAAtB,KAAgC6C,SAAS7C,KAAD;AAAA,EAAA;AAG1CF,SAAAA;AACR;AAED,+BAA+B;AAAA,EAC7B+B;AAAAA,EACAmB;AAAAA,EACAC;AAAAA,EACAjB;AAAAA,GACwD;AAClDwB,QAAAA,YAAYC,SAAS;AAAA,IAAEC,gBAAgB;AAAA,EAAA,CAAnB;AAClB7B,UAAAA,QAAQpB;AAAAA,SACTyC,WAAWS;AAEZ,iCAACC,QAAD,iCACMZ,aADN;AAAA,QAEE,MAAMnB,QAAQgC;AAAAA,QACd,WAAWC,GAAGN,WAAW3B,QAAQI,SAApB;AAAA,QAEZgB;AAAAA,MAAAA,EANL;AAAA;AAWA,aAAOjB,cAAc;AAAA,QACnBH;AAAAA,QACAmB;AAAAA,QACAC;AAAAA,MAAAA,CAHkB;AAAA;AAMzB;AAE4B,sBAAA;AAC3B,SAAO5C,uBAAuB;AAAA,IAC5BC,SAAS;AAAA,MACPC,YAAYoD,KAAK;AAAA,QACfhD,OAAO;AAAA,MAAA,CADO;AAAA,MAGhBY;AAAAA,MACAG;AAAAA,MACAE,iBAAiB,CAACC,YAAqB;AAC9B1B,eAAAA,aAAa0C,SAAShB,OAAtB,KAAkCkC,cAAclC,OAAD,IAAYA,QAAQgC,OAAO/B;AAAAA,MAClF;AAAA,IATyB;AAAA,IAW5BC,YAAYwB;AAAAA,IACZvB,eAAeA,mBAAiBE,CAAS,UAAA;AAChC,iCAAC,uBAAD,iCAA2BA,QAA3B;AAAA,QAAkC;AAAA,MAAA,EAAzC;AAAA,IACD;AAAA,EAAA,CAd0B;AAgB9B;;"}
1
+ {"version":3,"file":"slate.es.js","sources":["../src/slate/TextAlignPlugin/getValue.ts","../src/slate/TextAlignPlugin/index.tsx","../src/slate/InlinePlugin/getValue.ts","../src/slate/InlinePlugin/onChange.ts","../src/slate/InlinePlugin/index.tsx","../src/slate/LinkPlugin/types.ts","../src/slate/LinkPlugin/getValue.ts","../src/slate/LinkPlugin/onChange.ts","../src/slate/LinkPlugin/index.tsx"],"sourcesContent":["import { Editor } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { ResponsiveBlockTextAlignment } from '../types'\nimport { getSelection } from '../selectors'\nimport { responsiveShallowEqual } from '../utils/responsive'\n\nexport function getValue(editor: Editor): ResponsiveBlockTextAlignment | undefined {\n const matchingValues = Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: ElementUtils.isRootBlock,\n }),\n ).map(([node]) => node['textAlign']) as (ResponsiveBlockTextAlignment | undefined)[]\n\n return matchingValues.length === 0\n ? undefined\n : matchingValues.reduce((a, b) => {\n return responsiveShallowEqual(a, b)\n })\n}\n","import { Editor, Element } from 'slate'\nimport {\n createRichTextV2Plugin,\n unstable_IconRadioGroup,\n unstable_IconRadioGroupIcon,\n unstable_StyleV2,\n} from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { TextAlignProperty } from 'csstype'\nimport { normalizeResponsiveValue, setResponsiveValue } from '../utils/responsive'\nimport { getValue } from './getValue'\n\nconst TEXT_ALIGN_KEY = 'textAlign'\n\nexport const withTextAlign = (editor: Editor) => {\n const { normalizeNode } = editor\n editor.normalizeNode = entry => {\n if (\n normalizeResponsiveValue(editor, TEXT_ALIGN_KEY, { match: ElementUtils.isRootBlock })(entry)\n ) {\n return\n }\n normalizeNode(entry)\n }\n\n return editor\n}\n\nexport function TextAlignPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_StyleV2({\n type: unstable_IconRadioGroup({\n label: 'Alignment',\n options: [\n {\n icon: unstable_IconRadioGroupIcon.TextAlignLeft,\n label: 'Left Align',\n value: 'left',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignCenter,\n label: 'Center Align',\n value: 'center',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignRight,\n label: 'Right Align',\n value: 'right',\n },\n {\n icon: unstable_IconRadioGroupIcon.TextAlignJustify,\n label: 'Justify',\n value: 'justify',\n },\n ],\n defaultValue: 'left',\n }),\n getStyle(textAlign: TextAlignProperty) {\n return { textAlign }\n },\n }),\n onChange: (editor, value) =>\n setResponsiveValue(editor, TEXT_ALIGN_KEY, value, {\n match: ElementUtils.isRootBlock,\n split: false,\n }),\n getValue: editor => getValue(editor),\n getElementValue: (element: Element) => {\n return ElementUtils.isRootBlock(element) ? element.textAlign : undefined\n },\n },\n withPlugin: withTextAlign,\n renderElement: (renderElement, className) => props => {\n return renderElement({\n ...props,\n element: {\n ...props.element,\n className,\n },\n })\n },\n })\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { SupportedInline, isSupportedInlineType, isSupportedInlineEntry } from './types'\n\nexport function getSupportedInlinesAndTextInSelection(\n editor: Editor,\n): NodeEntry<SupportedInline | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node =>\n (ElementUtils.isInline(node) && isSupportedInlineType(node.type)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | SupportedInline>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n\n const areAllRootsSupportedInlineTypesOrText = roots.every(\n entry => isSupportedInlineEntry(entry) || Text.isText(entry[0]),\n )\n\n if (!areAllRootsSupportedInlineTypesOrText) return undefined\n\n const matchingValues = roots.filter(isSupportedInlineEntry).map(([node]) => node) as (\n | SupportedInline\n | null\n | undefined\n )[]\n\n const match = matchingValues.reduce(\n (a, b) => (a?.type === b?.type ? b : null),\n matchingValues.at(0) ?? undefined,\n )\n\n return match == null ? match : match.type\n}\n","import { getSupportedInlinesAndTextInSelection } from './getValue'\nimport { Editor, Transforms } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport {\n SupportedInlineType,\n isSupportedInlineEntry,\n isSupportedInlineType,\n supportedInlineOptions,\n} from './types'\n\nexport const onChange = (editor: Editor, value: SupportedInlineType) => {\n function unwrapAllSupportedTypes() {\n supportedInlineOptions.forEach(({ value: optionValue }) => unwrapInline(editor, optionValue))\n }\n\n function unwrapAllInlines() {\n Transforms.unwrapNodes(editor, {\n match: node => ElementUtils.isInline(node),\n at: getSelection(editor),\n })\n }\n\n if (value == null) return unwrapAllSupportedTypes()\n\n if (!isSupportedInlineType(value)) return\n\n const roots = filterForSubtreeRoots(getSupportedInlinesAndTextInSelection(editor))\n const root = roots.at(0)\n\n if (\n roots.length === 1 &&\n root != null &&\n isSupportedInlineEntry(root) &&\n root[0].type === value\n ) {\n unwrapInline(editor, value)\n } else {\n unwrapAllInlines()\n wrapInline(editor, { type: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { RenderElement, createRichTextV2Plugin, unstable_IconRadioGroup } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { supportedInlineOptions } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withInline = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nexport function InlinePlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: unstable_IconRadioGroup({\n label: 'Inline',\n options: supportedInlineOptions,\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) ? element.type : undefined\n },\n },\n withPlugin: withInline,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\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\n default:\n return (\n <>\n {renderElement({\n element,\n attributes,\n children,\n })}\n </>\n )\n }\n}\n","import { Node, NodeEntry } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType, LinkElement } from '../types'\n\nexport function isLinkElement(node: Node): node is LinkElement {\n return ElementUtils.isInline(node) && node.type === InlineType.Link\n}\n\nexport function isLinkEntry(inline: NodeEntry<Node>): inline is NodeEntry<LinkElement> {\n return ElementUtils.isInline(inline[0]) && inline[0].type === InlineType.Link\n}\n","import { Editor, NodeEntry, Text } from 'slate'\nimport { ElementUtils } from '../utils/element'\nimport { LinkElement } from '../types'\nimport { getSelection } from '../selectors'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkElement } from './types'\nimport deepEqual from '../../utils/deepEqual'\n\nexport function getLinksAndTextInSelection(editor: Editor): NodeEntry<LinkElement | Text>[] {\n return Array.from(\n Editor.nodes(editor, {\n at: getSelection(editor),\n match: node => (ElementUtils.isInline(node) && isLinkElement(node)) || Text.isText(node),\n }),\n ) as NodeEntry<Text | LinkElement>[]\n}\n\nexport const getValue = (editor: Editor) => {\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n\n const areAllRootsLinks = roots.every(([root]) => isLinkElement(root) || Text.isText(root))\n\n if (!areAllRootsLinks) return undefined\n\n const matchingValues = roots.map(([node]) => node).filter(isLinkElement) as (\n | LinkElement\n | null\n | undefined\n )[]\n\n const match = matchingValues.reduce(\n (a, b) => (deepEqual(a?.link, b?.link) ? b : null),\n matchingValues.at(0) ?? undefined,\n )\n\n return match == null ? match : match.link\n}\n","import { Editor, Transforms } from 'slate'\nimport { LinkControlData } from '../../controls'\nimport { unwrapInline } from '../BlockPlugin/unwrapInline'\nimport { wrapInline } from '../BlockPlugin/wrapInline'\nimport { InlineType } from '../types'\nimport { filterForSubtreeRoots } from '../BlockPlugin/utils/filterForSubtreeRoots'\nimport { isLinkEntry } from './types'\nimport { getLinksAndTextInSelection } from './getValue'\n\nexport const onChange = (editor: Editor, value: LinkControlData) => {\n if (value == null) return unwrapInline(editor, InlineType.Link)\n\n const roots = filterForSubtreeRoots(getLinksAndTextInSelection(editor))\n const root = roots.at(0)\n\n // If the root of our selection is a link we just want to modify it\n if (roots.length === 1 && root != null && isLinkEntry(root)) {\n Transforms.setNodes(\n editor,\n {\n link: value,\n },\n { at: root[1] },\n )\n }\n // In all other cases we want to remove all existing links and wrap the current selection in a new link\n else {\n unwrapInline(editor, InlineType.Link)\n wrapInline(editor, { type: InlineType.Link, link: value, children: [] })\n }\n}\n","import { Editor, Element } from 'slate'\nimport { Link, RenderElement, createRichTextV2Plugin } from '../../controls'\nimport { ElementUtils } from '../utils/element'\nimport { InlineType } from '../types'\nimport { RenderElementProps } from 'slate-react'\nimport { useStyle } from '../../runtimes/react/use-style'\nimport { Link as LinkComponent } from '../../components/shared/Link'\nimport { cx } from '@emotion/css'\nimport { isLinkElement } from './types'\nimport { onChange } from './onChange'\nimport { getValue } from './getValue'\n\nexport const withLink = (editor: Editor) => {\n const { isInline } = editor\n\n editor.isInline = entry => {\n return ElementUtils.isInline(entry) && isInline(entry)\n }\n\n return editor\n}\n\nfunction InlinePluginComponent({\n element,\n attributes,\n children,\n renderElement,\n}: RenderElementProps & { renderElement: RenderElement }) {\n const linkStyle = useStyle({ textDecoration: 'none' })\n switch (element.type) {\n case InlineType.Link:\n return (\n <LinkComponent\n {...attributes}\n link={element.link ?? undefined}\n className={cx(linkStyle, element.className)}\n >\n {children}\n </LinkComponent>\n )\n\n default:\n return renderElement({\n element,\n attributes,\n children,\n })\n }\n}\n\nexport function LinkPlugin() {\n return createRichTextV2Plugin({\n control: {\n definition: Link({\n label: 'On Click',\n }),\n onChange,\n getValue,\n getElementValue: (element: Element) => {\n return ElementUtils.isInline(element) && isLinkElement(element) ? element.link : undefined\n },\n },\n withPlugin: withLink,\n renderElement: renderElement => props => {\n return <InlinePluginComponent {...props} renderElement={renderElement} />\n },\n })\n}\n"],"names":["TEXT_ALIGN_KEY","withTextAlign","editor","normalizeNode","entry","normalizeResponsiveValue","match","ElementUtils","isRootBlock","createRichTextV2Plugin","control","definition","unstable_StyleV2","type","unstable_IconRadioGroup","label","options","icon","unstable_IconRadioGroupIcon","TextAlignLeft","value","TextAlignCenter","TextAlignRight","TextAlignJustify","defaultValue","getStyle","textAlign","onChange","setResponsiveValue","split","getValue","getElementValue","element","undefined","withPlugin","renderElement","className","props","withInline","isInline","supportedInlineOptions","InlinePluginComponent","attributes","children","InlineType","Code","SuperScript","SubScript","_Fragment","withLink","linkStyle","useStyle","textDecoration","Link","LinkComponent","link","cx","isLinkElement"],"mappings":"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"}
@@ -20,6 +20,7 @@ var __spreadValues = (a, b) => {
20
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
21
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
22
22
  var actions = require("../actions.cjs.js");
23
+ require("zod");
23
24
  const keys = (o) => Object.keys(o);
24
25
  const coalesce = (...args) => {
25
26
  let i;
@@ -150,6 +151,18 @@ function shallowMergeFallbacks(value, fallbacks) {
150
151
  value: shallowMerge(a.value, b.value)
151
152
  }));
152
153
  }
154
+ function mergeOrCoalesce(a, b) {
155
+ if (typeof a === "object" && a !== null && !Array.isArray(a) && typeof b === "object" && b !== null && !Array.isArray(b)) {
156
+ return shallowMerge(a, b);
157
+ }
158
+ return coalesce(a, b);
159
+ }
160
+ function mergeOrCoalesceFallbacks(value, fallbacks) {
161
+ return [value, ...fallbacks].filter((override) => Boolean(override)).reduce((a, b) => ({
162
+ deviceId: a.deviceId || b.deviceId,
163
+ value: mergeOrCoalesce(a.value, b.value)
164
+ }));
165
+ }
153
166
  function join(breakpoints, responsiveValues, joinFn, strategy) {
154
167
  return breakpoints.map(({ id }) => id).map((deviceId) => {
155
168
  const value = joinFn(responsiveValues.map((responsiveValue) => {
@@ -202,6 +215,7 @@ exports.getBreakpointMediaQuery = getBreakpointMediaQuery;
202
215
  exports.getInitialState = getInitialState;
203
216
  exports.getViewportStyle = getViewportStyle;
204
217
  exports.join = join;
218
+ exports.mergeOrCoalesceFallbacks = mergeOrCoalesceFallbacks;
205
219
  exports.mergeResponsiveValues = mergeResponsiveValues;
206
220
  exports.parseBreakpointsInput = parseBreakpointsInput;
207
221
  exports.reducer = reducer;