@makeswift/runtime 0.0.0-20230323144840 → 0.0.0-20230323152709

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.
package/dist/Text.cjs.js CHANGED
@@ -358,13 +358,13 @@ function useSyncWithBuilder(editor, text) {
358
358
  if (shouldCommit && text) {
359
359
  const nextValue = richText.richTextDTOtoDAO(text);
360
360
  const nextSelection = richText.richTextDTOtoSelection(text);
361
- if (!compare.compareRichTextDAO(editor.current.children, nextValue) || !compare.compareRichTextSelection(editor.current.selection, nextSelection)) {
362
- editor.current.children = nextValue;
363
- editor.current.selection = nextSelection;
364
- editor.current.onChange();
361
+ if (!compare.compareRichTextDAO(editor.children, nextValue) || !compare.compareRichTextSelection(editor.selection, nextSelection)) {
362
+ editor.children = nextValue;
363
+ editor.selection = nextSelection;
364
+ editor.onChange();
365
365
  }
366
366
  }
367
- }, [editor, shouldCommit, text]);
367
+ }, [shouldCommit, text]);
368
368
  React.useEffect(() => {
369
369
  if (shouldCommit)
370
370
  return;
@@ -764,23 +764,23 @@ const EditableText = React.forwardRef(function EditableText2({
764
764
  width,
765
765
  margin
766
766
  }, ref) {
767
- const editor = React.useRef(withList(slateReact.withReact(slate.createEditor())));
767
+ const [editor] = React.useState(() => withList(slateReact.withReact(slate.createEditor())));
768
768
  const delaySync = useSyncWithBuilder(editor, text);
769
769
  const editMode = next.useBuilderEditMode();
770
770
  const [propControllers, setPropControllers] = React.useState(null);
771
771
  const controller = propControllers == null ? void 0 : propControllers.text;
772
772
  React.useImperativeHandle(ref, () => ({
773
773
  getDomNode() {
774
- return slateReact.ReactEditor.toDOMNode(editor.current, editor.current);
774
+ return slateReact.ReactEditor.toDOMNode(editor, editor);
775
775
  },
776
776
  getBoxModel() {
777
- return boxModels.getBox(slateReact.ReactEditor.toDOMNode(editor.current, editor.current));
777
+ return boxModels.getBox(slateReact.ReactEditor.toDOMNode(editor, editor));
778
778
  },
779
779
  setPropControllers
780
- }), []);
780
+ }), [editor, setPropControllers]);
781
781
  const initialValue = React.useMemo(() => text ? richText.richTextDTOtoDAO(text) : defaultText, [text]);
782
782
  React.useEffect(() => {
783
- controller == null ? void 0 : controller.setSlateEditor(editor.current);
783
+ controller == null ? void 0 : controller.setSlateEditor(editor);
784
784
  }, [controller, editor]);
785
785
  const handleFocus = React.useCallback(() => {
786
786
  controller == null ? void 0 : controller.focus();
@@ -792,10 +792,10 @@ const EditableText = React.forwardRef(function EditableText2({
792
792
  return controller == null ? void 0 : controller.undo();
793
793
  if (isHotkey__default["default"]("escape")(e))
794
794
  return controller == null ? void 0 : controller.blur();
795
- onKeyDown(e, editor.current);
795
+ onKeyDown(e, editor);
796
796
  }, [controller, editor]);
797
797
  return /* @__PURE__ */ jsxRuntime.jsx(slateReact.Slate, {
798
- editor: editor.current,
798
+ editor,
799
799
  value: initialValue,
800
800
  onChange: delaySync,
801
801
  children: /* @__PURE__ */ jsxRuntime.jsx(slateReact.Editable, {
@@ -1 +1 @@
1
- {"version":3,"file":"Text.cjs.js","sources":["../src/components/builtin/Text/EditableText/Leaf/typography.tsx","../src/components/builtin/Text/EditableText/Leaf/leaf.tsx","../src/components/builtin/Text/EditableText/Element/block.tsx","../src/components/builtin/Text/EditableText/Element/inline.tsx","../src/components/builtin/Text/EditableText/Element/element.tsx","../src/components/builtin/Text/EditableText/useSyncWithBuilder.tsx","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/element.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/wrapList.ts","../src/components/builtin/Text/EditableText/ListPlugin/constants.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/editor.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/filterForSubtreeRoots.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/location.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/getSelectedListItems.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/unwrapList.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/toggleList.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/indent.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/dedent.ts","../src/components/builtin/Text/EditableText/ListPlugin/ListPlugin.ts","../src/components/builtin/Text/EditableText/editable-text.tsx","../src/components/builtin/Text/Text.tsx"],"sourcesContent":["import { CSSObject } from '@emotion/serialize'\nimport { RenderLeafProps } from 'slate-react'\nimport { Swatch, Typography } from '../../../../../api'\nimport { TypographyText } from '../../../../../controls'\nimport { DeviceOverride, ResponsiveValue } from '../../../../../prop-controllers'\nimport { getTypographyStyleSwatchIds } from '../../../../../prop-controllers/introspection'\nimport { useTypography, useSwatches } from '../../../../../runtimes/react/hooks/makeswift-api'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { colorToString } from '../../../../utils/colorToString'\nimport { findDeviceOverride, shallowMergeFallbacks } from '../../../../utils/devices'\nimport { isNonNullable } from '../../../../utils/isNonNullable'\nimport { responsiveStyle } from '../../../../utils/responsive-style'\nimport { ColorValue } from '../../../../utils/types'\n\nexport type TypographyValue = Typography['style'][number]['value']\n\ntype EnhancedColor = {\n color?: ColorValue\n}\n\ntype EnhancedTypographyValue = Omit<TypographyValue, keyof EnhancedColor> & EnhancedColor\n\nexport type EnhancedTypography = Array<DeviceOverride<EnhancedTypographyValue>>\n\nexport function isDeviceOverride(value: {\n deviceId: string\n value: TypographyValue\n}): value is DeviceOverride<TypographyValue> {\n return value.deviceId === 'desktop' || value.deviceId === 'tablet' || value.deviceId === 'mobile'\n}\n\nconst withColor =\n (swatches: Swatch[]) =>\n (\n deviceRawTypographyValue: DeviceOverride<TypographyValue>,\n ): DeviceOverride<EnhancedTypographyValue> => {\n const { value, deviceId } = deviceRawTypographyValue\n\n if (value.color == null) {\n const { color, ...nextValue } = value\n return {\n deviceId,\n value: nextValue,\n }\n }\n return {\n deviceId,\n value: {\n ...value,\n color: {\n swatch: swatches.find(s => s && s.id === value.color?.swatchId),\n alpha: value.color?.alpha ?? undefined,\n },\n },\n }\n }\n\nconst getDeviceId = ({ deviceId }: DeviceOverride<unknown>) => deviceId\n\nexport default function useEnhancedTypography(value: Typography): EnhancedTypography {\n const typography = useTypography(value?.id ?? null)\n const source = typography?.style.filter(isDeviceOverride) ?? []\n const override = value?.style.filter(isDeviceOverride) ?? []\n\n const swatchIds = [\n ...getTypographyStyleSwatchIds(value?.style),\n ...getTypographyStyleSwatchIds(typography?.style),\n ]\n const swatches = useSwatches(swatchIds).filter(isNonNullable)\n\n const enhancedSource = source.map(withColor(swatches))\n const enhancedOverride = override.map(withColor(swatches))\n\n const devices = [\n ...new Set(enhancedSource.map(getDeviceId).concat(enhancedOverride.map(getDeviceId))),\n ]\n\n return devices\n .map(deviceId => {\n const deviceSource = findDeviceOverride(enhancedSource, deviceId)?.value\n const deviceOverride = findDeviceOverride(enhancedOverride, deviceId)?.value\n\n if (deviceSource && deviceOverride) {\n return {\n deviceId,\n value: { ...deviceSource, ...deviceOverride },\n }\n } else if (deviceOverride) {\n return {\n deviceId,\n value: deviceOverride,\n }\n } else if (deviceSource) {\n return {\n deviceId,\n value: deviceSource,\n }\n }\n return null\n })\n .filter(isNonNullable)\n}\n\nexport function useTypographyClassName(value: EnhancedTypography): string {\n return useStyle(\n responsiveStyle<\n EnhancedTypographyValue,\n [ResponsiveValue<EnhancedTypographyValue> | null | undefined]\n >(\n [value],\n ([value]) => {\n if (value === undefined) return {}\n\n let styles: CSSObject = {}\n if (value.color != null) styles.color = colorToString(value.color)\n if (value.fontFamily != null) styles.fontFamily = value.fontFamily\n if (value.fontSize != null && value.fontSize.value != null && value.fontSize.unit != null)\n styles.fontSize = `${value.fontSize.value}${value.fontSize.unit}`\n if (value.fontWeight != null) styles.fontWeight = value.fontWeight\n if (value.lineHeight != null) styles.lineHeight = value.lineHeight\n if (value.letterSpacing != null) styles.letterSpacing = `${value.letterSpacing / 10}em`\n if (value.uppercase != null)\n styles.textTransform = value.uppercase === true ? 'uppercase' : 'initial'\n if (value.underline != null || value.strikethrough != null)\n styles.textDecoration = [\n Boolean(value.underline) && 'underline',\n Boolean(value.strikethrough) && 'line-through',\n ]\n .filter(Boolean)\n .join(' ')\n if (value.italic != null) styles.fontStyle = value.italic === true ? 'italic' : 'initial'\n\n return styles\n },\n shallowMergeFallbacks,\n ),\n )\n}\n\nexport interface TypographyRenderLeafProps extends RenderLeafProps {\n leaf: TypographyText\n}\n\nexport function TypographyLeaf({ leaf, children, attributes }: TypographyRenderLeafProps) {\n const enhancedTypography = useEnhancedTypography(leaf.typography)\n const typographyClassName = useTypographyClassName(enhancedTypography)\n return (\n <span {...attributes} className={typographyClassName}>\n {children}\n </span>\n )\n}\n","import { RenderLeafProps } from 'slate-react'\nimport { TextType } from '../../../../../controls'\nimport { TypographyLeaf } from './typography'\n\nexport function Leaf({ leaf, ...props }: RenderLeafProps) {\n switch (leaf.type) {\n case TextType.Typography:\n return <TypographyLeaf leaf={leaf} {...props} />\n\n default:\n return <span {...props.attributes}>{props.children}</span>\n }\n}\n","import { cx } from '@emotion/css'\nimport { RenderElementProps } from 'slate-react'\nimport { Block, BlockType } from '../../../../../controls'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { responsiveStyle } from '../../../../utils/responsive-style'\n\nexport interface InlineRenderElementProps extends RenderElementProps {\n element: Block\n}\n\nexport function BlockElement({ element, attributes, children }: InlineRenderElementProps) {\n const blockStyles = [\n useStyle({ margin: 0 }),\n useStyle(responsiveStyle([element.textAlign], ([textAlign = 'left']) => ({ textAlign }))),\n ]\n\n switch (element.type) {\n case BlockType.Paragraph:\n return (\n <p {...attributes} className={cx(...blockStyles)}>\n {children}\n </p>\n )\n case BlockType.Heading1:\n return (\n <h1 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h1>\n )\n case BlockType.Heading2:\n return (\n <h2 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h2>\n )\n case BlockType.Heading3:\n return (\n <h3 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h3>\n )\n case BlockType.Heading4:\n return (\n <h4 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h4>\n )\n case BlockType.Heading5:\n return (\n <h5 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h5>\n )\n case BlockType.Heading6:\n return (\n <h6 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h6>\n )\n case BlockType.BlockQuote:\n return (\n <blockquote\n {...attributes}\n className={cx(\n ...blockStyles,\n useStyle({\n padding: '0.5em 10px',\n fontSize: '1.25em',\n fontWeight: '300',\n borderLeft: '5px solid rgba(0, 0, 0, 0.1)',\n }),\n )}\n >\n {children}\n </blockquote>\n )\n case BlockType.OrderedList:\n return (\n <ol\n {...attributes}\n className={cx(...blockStyles, `${element.type}`)}\n style={{ listStylePosition: 'inside' }}\n >\n {children}\n </ol>\n )\n case BlockType.UnorderedList:\n return (\n <ul\n {...attributes}\n className={cx(...blockStyles, `${element.type}`)}\n style={{ listStylePosition: 'inside' }}\n >\n {children}\n </ul>\n )\n case BlockType.ListItem:\n return (\n <li {...attributes} className={cx(...blockStyles, `${element.type}`)}>\n {children}\n </li>\n )\n case BlockType.ListItemChild:\n return (\n <span {...attributes} className={cx(...blockStyles, `${element.type}`)}>\n {children}\n </span>\n )\n }\n}\n","import { cx } from '@emotion/css'\nimport { ComponentPropsWithoutRef } from 'react'\nimport { RenderElementProps } from 'slate-react'\nimport { Inline, InlineType } from '../../../../../controls'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { Link } from '../../../../shared/Link'\n\nfunction StyledLink({ className, ...restOfProps }: ComponentPropsWithoutRef<typeof Link>) {\n return <Link {...restOfProps} className={cx(useStyle({ textDecoration: 'none' }), className)} />\n}\n\nexport interface InlineRenderElementProps extends RenderElementProps {\n element: Inline\n}\n\nexport function InlineElement({ element, attributes, children }: InlineRenderElementProps) {\n switch (element.type) {\n case InlineType.Code:\n return <code {...attributes}>{children}</code>\n case InlineType.SuperScript:\n return <sup {...attributes}>{children}</sup>\n case InlineType.SubScript:\n return <sub {...attributes}>{children}</sub>\n case InlineType.Link:\n return (\n <StyledLink {...attributes} link={element.link}>\n {children}\n </StyledLink>\n )\n }\n}\n","import { RenderElementProps } from 'slate-react'\nimport { BlockType, InlineType } from '../../../../../controls'\nimport { BlockElement } from './block'\nimport { InlineElement } from './inline'\n\nexport function Element({ element, ...props }: RenderElementProps) {\n switch (element.type) {\n case InlineType.Code:\n case InlineType.SuperScript:\n case InlineType.SubScript:\n case InlineType.Link:\n return <InlineElement element={element} {...props} />\n case BlockType.Paragraph:\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.BlockQuote:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return <BlockElement element={element} {...props} />\n default:\n return <span {...props.attributes}>{props.children}</span>\n }\n}\n","import { useState, useEffect, useCallback, MutableRefObject } from 'react'\nimport { Editor } from 'slate'\nimport {\n compareRichTextDAO,\n compareRichTextSelection,\n richTextDTOtoDAO,\n richTextDTOtoSelection,\n} from '../../../../controls'\nimport { RichTextValue } from '../../../../prop-controllers'\n\nconst COMMIT_DEBOUNCE_DELAY = 500\n\nexport function useSyncWithBuilder(editor: MutableRefObject<Editor>, text?: RichTextValue) {\n const [shouldCommit, setShouldCommit] = useState(true)\n\n useEffect(() => {\n if (shouldCommit && text) {\n const nextValue = richTextDTOtoDAO(text)\n const nextSelection = richTextDTOtoSelection(text)\n if (\n !compareRichTextDAO(editor.current.children, nextValue) ||\n !compareRichTextSelection(editor.current.selection, nextSelection)\n ) {\n editor.current.children = nextValue\n editor.current.selection = nextSelection\n editor.current.onChange()\n }\n }\n }, [editor, shouldCommit, text])\n\n useEffect(() => {\n if (shouldCommit) return\n\n const timeoutId = window.setTimeout(() => {\n setShouldCommit(true)\n }, COMMIT_DEBOUNCE_DELAY)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [shouldCommit])\n\n return useCallback(() => setShouldCommit(false), [])\n}\n","import { Node, Element, Text } from 'slate'\nimport {\n TextType,\n BlockType,\n Block,\n ParagraphElement,\n OrderedListElement,\n UnorderedListElement,\n ListItemElement,\n ListItemChildElement,\n} from '../../../../../../../controls'\n\nexport const ElementUtils = {\n isConvertibleToListTextNode(node: Node) {\n return (\n !this.isList(node) &&\n !this.isListItem(node) &&\n !this.isListItemChild(node) &&\n !this.isText(node) &&\n !this.isTypography(node)\n )\n },\n isText(node: Node) {\n return Element.isElementType(node, TextType.Text) || Text.isText(node)\n },\n isTypography(node: Node) {\n return Element.isElementType(node, TextType.Typography)\n },\n isParagraph(node: Node): node is ParagraphElement {\n return Element.isElementType(node, BlockType.Paragraph)\n },\n isList(node: Node): node is OrderedListElement | UnorderedListElement {\n return (\n Element.isElementType(node, BlockType.OrderedList) ||\n Element.isElementType(node, BlockType.UnorderedList)\n )\n },\n isListItem(node: Node): node is ListItemElement {\n return Element.isElementType(node, BlockType.ListItem)\n },\n isListItemChild(node: Node): node is ListItemChildElement {\n return Element.isElementType(node, BlockType.ListItemChild)\n },\n createText() {\n return { text: '', type: TextType.Text }\n },\n createParagraph() {\n return {\n children: [this.createText()],\n type: BlockType.Paragraph,\n }\n },\n createList(type: BlockType = BlockType.UnorderedList): Block {\n return { children: [this.createText()], type }\n },\n createListItem(): Block {\n return {\n children: [this.createListItemChild()],\n type: BlockType.ListItem,\n }\n },\n createListItemChild(): Block {\n return {\n children: [this.createText()],\n type: BlockType.ListItemChild,\n }\n },\n}\n","import { Editor, Element, Transforms } from 'slate'\nimport { BlockType } from '../../../../../../controls'\nimport { ElementUtils } from './utils/element'\n\ntype WrapListOptions = {\n type: typeof BlockType.UnorderedList | typeof BlockType.OrderedList\n}\n\nexport function wrapList(\n editor: Editor,\n options: WrapListOptions = { type: BlockType.UnorderedList },\n) {\n if (!editor.selection) return\n\n const nonListEntries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: node => {\n return Element.isElement(node) && ElementUtils.isConvertibleToListTextNode(node)\n },\n }),\n )\n\n const refs = nonListEntries.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n const path = ref.current\n if (path) {\n Editor.withoutNormalizing(editor, () => {\n Transforms.setNodes(\n editor,\n { type: BlockType.ListItemChild },\n {\n at: path,\n },\n )\n Transforms.wrapNodes(editor, ElementUtils.createListItem(), {\n at: path,\n })\n Transforms.wrapNodes(editor, ElementUtils.createList(options.type), {\n at: path,\n })\n })\n }\n ref.unref()\n })\n}\n","export const LIST_ITEM_CHILD_POSITION = 0\nexport const LIST_ITEM_LIST_POSITION = 1\n","import { Path, Editor, NodeEntry } from 'slate'\nimport { ListElement, ListItemElement } from '../../../../../../../controls'\nimport { ElementUtils } from './element'\n\nexport const EditorUtils = {\n getFirstAncestorList(editor: Editor, path: Path): NodeEntry<ListElement> | null {\n const parentList = Editor.above(editor, {\n at: path,\n match: (node): node is ListElement => ElementUtils.isList(node),\n })\n return parentList ?? null\n },\n getFirstAncestorListItem(editor: Editor, path: Path): NodeEntry<ListItemElement> | null {\n const parentListItem = Editor.above(editor, {\n at: path,\n match: (node): node is ListItemElement => ElementUtils.isListItem(node),\n })\n\n return parentListItem ?? null\n },\n}\n","import type { Node, NodeEntry } from 'slate'\nimport { Path } from 'slate'\n\nexport function filterForSubtreeRoots(entries: NodeEntry<Node>[]): NodeEntry<Node>[] {\n return entries.filter(\n ([, nodePath]) =>\n !Path.ancestors(nodePath).some(ancestor => {\n return entries.some(([, path]) => Path.equals(path, ancestor))\n }),\n )\n}\n","import { Range, Point, Path, Location } from 'slate'\n\nexport const LocationUtils = {\n getStartPath(location: Location): Path {\n if (Range.isRange(location)) return Range.start(location).path\n if (Point.isPoint(location)) return location.path\n return location\n },\n}\n","import type { Element, NodeEntry } from 'slate'\nimport { Editor, Path } from 'slate'\nimport { EditorUtils } from './editor'\nimport { ElementUtils } from './element'\nimport { LocationUtils } from './location'\n\nexport function getSelectedListItems(editor: Editor): NodeEntry<Element>[] {\n if (!editor.selection) return []\n\n const start = LocationUtils.getStartPath(editor.selection)\n const listItems = Editor.nodes(editor, {\n at: editor.selection,\n match: node => ElementUtils.isListItem(node),\n })\n const firstAncestorPath = EditorUtils.getFirstAncestorListItem(editor, start)?.[1] ?? []\n\n return Array.from(listItems).filter((node): node is NodeEntry<Element> =>\n Path.isDescendant(start, node[1])\n ? Path.equals(node[1], firstAncestorPath)\n : !Path.isAfter(start, node[1]),\n )\n}\n\nexport function getSelectedLists(editor: Editor): NodeEntry<Element>[] {\n if (!editor.selection) return []\n\n const start = LocationUtils.getStartPath(editor.selection)\n const lists = Editor.nodes(editor, {\n at: editor.selection,\n match: node => ElementUtils.isList(node),\n })\n const firstAncestorPath = EditorUtils.getFirstAncestorList(editor, start)?.[1] ?? []\n\n return Array.from(lists).filter((node): node is NodeEntry<Element> =>\n Path.isDescendant(start, node[1])\n ? Path.equals(node[1], firstAncestorPath)\n : !Path.isAfter(start, node[1]),\n )\n}\n","import { Editor, Transforms, Path, Node } from 'slate'\nimport { BlockType } from '../../../../../../controls'\nimport { LIST_ITEM_CHILD_POSITION, LIST_ITEM_LIST_POSITION } from '../constants'\nimport { EditorUtils } from './utils/editor'\nimport { filterForSubtreeRoots } from './utils/filterForSubtreeRoots'\nimport { getSelectedListItems } from './utils/getSelectedListItems'\n\nexport function unwrapPath(editor: Editor, listItemPath: Path) {\n const parentList = EditorUtils.getFirstAncestorList(editor, listItemPath)\n const listItemContainingParentList = EditorUtils.getFirstAncestorListItem(editor, listItemPath)\n //if this is a nested item we don't want to unwrap it\n if (!parentList || listItemContainingParentList) return\n\n Editor.withoutNormalizing(editor, () => {\n const listItemTextPath = [...listItemPath, LIST_ITEM_CHILD_POSITION]\n const listItemNestedListPath = [...listItemPath, LIST_ITEM_LIST_POSITION]\n\n if (Node.has(editor, listItemNestedListPath)) {\n Transforms.setNodes(editor, { type: parentList[0].type }, { at: listItemNestedListPath })\n Transforms.liftNodes(editor, { at: listItemNestedListPath })\n Transforms.liftNodes(editor, { at: Path.next(listItemPath) })\n }\n\n if (Node.has(editor, listItemTextPath)) {\n Transforms.setNodes(\n editor,\n { type: BlockType.Paragraph },\n {\n at: listItemTextPath,\n },\n )\n Transforms.liftNodes(editor, { at: listItemTextPath })\n Transforms.liftNodes(editor, { at: listItemPath })\n }\n })\n}\n\nexport function unwrapList(editor: Editor) {\n if (!editor.selection) return\n\n const listItems = getSelectedListItems(editor)\n const subRoots = filterForSubtreeRoots(listItems)\n const refs = subRoots.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n if (ref.current) {\n unwrapPath(editor, ref.current)\n }\n ref.unref()\n })\n}\n","import { Editor, Node, Path, Transforms } from 'slate'\nimport { BlockType } from '../../../../../../controls'\nimport { unwrapList } from './unwrapList'\nimport { ElementUtils } from './utils/element'\nimport { LocationUtils } from './utils/location'\nimport { wrapList } from './wrapList'\n\ntype ToggleListOptions = {\n type: typeof BlockType.UnorderedList | typeof BlockType.OrderedList\n}\n\nexport function toggleList(\n editor: Editor,\n options: ToggleListOptions = { type: BlockType.UnorderedList },\n) {\n if (!editor.selection) return\n const start = LocationUtils.getStartPath(editor.selection)\n const ancestorPath = Path.ancestors(start).at(1)\n if (!ancestorPath || !Node.has(editor, ancestorPath)) return\n const ancestor = Node.get(editor, ancestorPath)\n\n if (!ElementUtils.isList(ancestor)) {\n return wrapList(editor, { type: options.type })\n }\n\n if (ancestor.type === options.type) {\n unwrapList(editor)\n } else {\n Transforms.setNodes(editor, { type: options.type }, { at: ancestorPath })\n }\n}\n","import { Editor, Node, Path, Transforms } from 'slate'\nimport { LIST_ITEM_LIST_POSITION } from '../constants'\nimport { ElementUtils } from './utils/element'\nimport { filterForSubtreeRoots } from './utils/filterForSubtreeRoots'\nimport { getSelectedListItems } from './utils/getSelectedListItems'\n\nexport function indentPath(editor: Editor, path: Path) {\n const parent = Node.parent(editor, path)\n if (!path || !Path.hasPrevious(path) || !ElementUtils.isList(parent) ) return\n\n \n const previosPath = Path.previous(path)\n\n const previousChildListPath = [...previosPath, LIST_ITEM_LIST_POSITION]\n const previousHasChildList = Node.has(editor, previousChildListPath)\n\n Editor.withoutNormalizing(editor, () => {\n if (!previousHasChildList) {\n Transforms.insertNodes(editor, ElementUtils.createList(parent.type), {\n at: previousChildListPath,\n })\n }\n\n const previousChildList = Node.get(editor, previousChildListPath)\n\n if (ElementUtils.isList(previousChildList)) {\n const index = previousHasChildList ? previousChildList.children.length : 0\n Transforms.moveNodes(editor, {\n at: path,\n to: [...previousChildListPath, index],\n })\n }\n })\n}\n\nexport function indent(editor: Editor) {\n if (!editor.selection) return\n\n const listItems = getSelectedListItems(editor)\n const subRoots = filterForSubtreeRoots(listItems)\n const refs = subRoots.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n if (ref.current) {\n indentPath(editor, ref.current)\n }\n ref.unref()\n })\n}\n","import { Editor, Path, Transforms } from 'slate'\nimport { indentPath } from './indent'\nimport { getSelectedListItems } from './utils/getSelectedListItems'\nimport { filterForSubtreeRoots } from './utils/filterForSubtreeRoots'\nimport { EditorUtils } from './utils/editor'\n\nfunction dedentPath(editor: Editor, listItemPath: Path) {\n const parentList = EditorUtils.getFirstAncestorList(editor, listItemPath)\n const listItemContainingParentList = EditorUtils.getFirstAncestorListItem(editor, listItemPath)\n if (!parentList || !listItemContainingParentList) return\n\n const [parentListNode, parentListPath] = parentList\n const [_, listItemContainingParentListPath] = listItemContainingParentList\n\n const listItemPosition = listItemPath[listItemPath.length - 1]\n const previousSiblings = parentListNode.children.slice(0, listItemPosition)\n const nextSiblings = parentListNode.children.slice(listItemPosition + 1)\n\n Editor.withoutNormalizing(editor, () => {\n // put next siblings into list item\n nextSiblings.forEach(() => {\n const nextSiblingPath = [...parentListPath, listItemPosition + 1]\n indentPath(editor, nextSiblingPath)\n })\n // move list item to parent list\n Transforms.moveNodes(editor, {\n at: listItemPath,\n to: Path.next(listItemContainingParentListPath),\n })\n // delete old parent list if there are no other list items\n if (previousSiblings.length === 0) {\n Transforms.removeNodes(editor, { at: parentListPath })\n }\n })\n}\n\nexport function dedent(editor: Editor) {\n if (!editor.selection) return\n\n const listItems = getSelectedListItems(editor)\n const subRoots = filterForSubtreeRoots(listItems)\n const refs = subRoots.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n if (ref.current) {\n dedentPath(editor, ref.current)\n }\n ref.unref()\n })\n}\n","import type { KeyboardEvent } from 'react'\nimport { Editor, Transforms, Range, Node, PathRef } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport { ElementUtils } from './lib/utils/element'\nimport { unwrapList, wrapList, indent, dedent, toggleList } from './lib'\nimport { EditorUtils } from './lib/utils/editor'\nimport { LIST_ITEM_CHILD_POSITION } from './constants'\nimport { BlockType } from '../../../../../controls'\n\nexport const List = {\n unwrapList,\n wrapList,\n indent,\n dedent,\n toggleList,\n}\n\nexport function onKeyDown(e: KeyboardEvent, editor: Editor) {\n if (\n !editor.selection ||\n Array.from(Editor.nodes(editor, { match: node => ElementUtils.isListItem(node) })).length === 0\n )\n return\n\n if (isHotkey('shift+tab', e)) {\n e.preventDefault()\n List.dedent(editor)\n }\n\n if (isHotkey('tab', e)) {\n e.preventDefault()\n List.indent(editor)\n }\n\n if (isHotkey('backspace', e)) {\n if (!editor.selection) return\n if (Range.isExpanded(editor.selection)) return\n const listItem = EditorUtils.getFirstAncestorListItem(editor, editor.selection.anchor.path)\n if (editor.selection.anchor.offset === 0 && listItem) {\n e.preventDefault()\n const parentListItem = EditorUtils.getFirstAncestorListItem(editor, listItem[1])\n const list = EditorUtils.getFirstAncestorList(editor, listItem[1])\n\n if (parentListItem) {\n List.dedent(editor)\n } else if (list) {\n List.unwrapList(editor)\n }\n return\n }\n }\n\n if (isHotkey('enter', e)) {\n e.preventDefault()\n\n if (!editor.selection) return\n\n if (Range.isExpanded(editor.selection)) {\n Transforms.delete(editor)\n return\n }\n\n const listItem = EditorUtils.getFirstAncestorListItem(editor, editor.selection.anchor.path)\n if (\n editor.selection.anchor.offset === 0 &&\n listItem &&\n Editor.string(editor, listItem[1]) === ''\n ) {\n const parentListItem = EditorUtils.getFirstAncestorListItem(editor, listItem[1])\n\n if (parentListItem) {\n List.dedent(editor)\n } else {\n List.unwrapList(editor)\n }\n return\n }\n\n Transforms.splitNodes(editor, {\n at: editor.selection,\n always: true,\n match: node => ElementUtils.isListItem(node),\n })\n }\n\n if (isHotkey('shift+enter', e)) {\n e.preventDefault()\n editor.insertText('\\n')\n }\n}\n\nexport function withList(editor: Editor) {\n editor.normalizeNode = entry => {\n const [normalizationNode, normalizationPath] = entry\n\n // Normalization for converting children of list items to list item children\n // In the case of backspace from position 0 of node into a list this converts the node into a list item.\n if (ElementUtils.isListItem(normalizationNode)) {\n const pathToListItemText = [...normalizationPath, LIST_ITEM_CHILD_POSITION]\n\n if (Node.has(editor, pathToListItemText)) {\n const nodeInListItemTextPosition = Node.get(editor, pathToListItemText)\n if (ElementUtils.isParagraph(nodeInListItemTextPosition)) {\n Transforms.setNodes(\n editor,\n { type: BlockType.ListItemChild },\n {\n at: pathToListItemText,\n },\n )\n return\n }\n } else {\n Transforms.insertNodes(editor, ElementUtils.createListItem(), {\n at: pathToListItemText,\n })\n return\n }\n }\n\n // Normalization for removing stray text elements from lists\n if (ElementUtils.isList(normalizationNode)) {\n Array.from(Node.children(editor, normalizationPath)).forEach(([node, path]) => {\n if (ElementUtils.isText(node)) {\n Transforms.removeNodes(editor, { at: path })\n return\n }\n })\n }\n\n // Normalization for merging adjacent lists of the same type\n if (!ElementUtils.isText(normalizationNode) && !ElementUtils.isTypography(normalizationNode)) {\n const mergeableChildren = Array.from(Node.children(editor, normalizationPath))\n .map((child, index, children) => {\n const potentialNodeToBeMerged = children.at(index + 1)\n if (\n !potentialNodeToBeMerged ||\n !ElementUtils.isList(potentialNodeToBeMerged[0]) ||\n potentialNodeToBeMerged[0].type !== child[0].type\n ) {\n return null\n }\n return [\n Editor.pathRef(editor, child[1]),\n Editor.pathRef(editor, potentialNodeToBeMerged[1]),\n ]\n })\n .filter((mergeableNodes): mergeableNodes is PathRef[] => Boolean(mergeableNodes))\n\n if (mergeableChildren.length !== 0) {\n mergeableChildren.reverse().forEach(([nodePathRef, nodeToBeMergedPathRef]) => {\n const nodePath = nodePathRef.current\n const nodeToBeMergedPath = nodeToBeMergedPathRef.current\n if (nodePath == null || nodeToBeMergedPath == null) return\n const nodeChildren = Array.from(Node.children(editor, nodePath))\n const childrenToBeMerged = Array.from(Node.children(editor, nodeToBeMergedPath))\n Editor.withoutNormalizing(editor, () => {\n childrenToBeMerged.forEach(([_, childPath], index) => {\n Transforms.moveNodes(editor, {\n at: childPath,\n to: [...nodePath, nodeChildren.length + index],\n })\n })\n Transforms.removeNodes(editor, { at: nodeToBeMergedPath })\n })\n nodePathRef.unref()\n nodeToBeMergedPathRef.unref()\n })\n return\n }\n }\n }\n\n return editor\n}\n","import {\n forwardRef,\n KeyboardEvent,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport { createEditor } from 'slate'\nimport { Slate, Editable, withReact, ReactEditor } from 'slate-react'\n\nimport { ElementIDValue, RichTextValue } from '../../../../prop-controllers/descriptors'\nimport { cx } from '@emotion/css'\nimport { DescriptorsPropControllers } from '../../../../prop-controllers/instances'\nimport { Descriptors } from '../../../../runtimes/react/controls/rich-text'\nimport { getBox } from '../../../../box-model'\nimport { PropControllersHandle } from '../../../../state/modules/prop-controller-handles'\nimport { BlockType, RichTextDAO, richTextDTOtoDAO, TextType } from '../../../../controls'\nimport { Leaf } from './Leaf'\nimport { Element } from './Element'\nimport { useSyncWithBuilder } from './useSyncWithBuilder'\nimport { onKeyDown, withList } from './ListPlugin'\nimport isHotkey from 'is-hotkey'\nimport { useBuilderEditMode } from '../../../../runtimes/react'\nimport { BuilderEditMode } from '../../../../state/modules/builder-edit-mode'\n\ntype Props = {\n id?: ElementIDValue\n text?: RichTextValue\n width?: string\n margin?: string\n}\n\nconst defaultText: RichTextDAO = [\n { type: BlockType.Paragraph, children: [{ type: TextType.Text, text: '' }] },\n]\n\nexport const EditableText = forwardRef(function EditableText(\n { id, text, width, margin }: Props,\n ref: Ref<PropControllersHandle<Descriptors>>,\n) {\n const editor = useRef(withList(withReact(createEditor())))\n const delaySync = useSyncWithBuilder(editor, text)\n const editMode = useBuilderEditMode()\n\n const [propControllers, setPropControllers] =\n useState<DescriptorsPropControllers<Descriptors> | null>(null)\n const controller = propControllers?.text\n\n // const [nextEditor, setEditor] = useState<any>(null)\n\n useImperativeHandle(\n ref,\n () => ({\n getDomNode() {\n return ReactEditor.toDOMNode(editor.current, editor.current)\n // return nextEditor ? ReactEditor.toDOMNode(nextEditor, nextEditor) : null\n },\n getBoxModel() {\n return getBox(ReactEditor.toDOMNode(editor.current, editor.current))\n // return nextEditor ? getBox(ReactEditor.toDOMNode(nextEditor, nextEditor)) : null\n },\n setPropControllers,\n }),\n [],\n )\n\n // useEffect(() => {\n // setEditor(editor)\n // }, [])\n\n const initialValue = useMemo(() => (text ? richTextDTOtoDAO(text) : defaultText), [text])\n\n useEffect(() => {\n // console.log('initialize setSlateEditor with', { propControllers, controller, editor })\n\n controller?.setSlateEditor(editor.current)\n }, [controller, editor])\n\n const handleFocus = useCallback(() => {\n controller?.focus()\n }, [controller])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return controller?.redo()\n if (isHotkey('mod+z', e)) return controller?.undo()\n if (isHotkey('escape')(e)) return controller?.blur()\n onKeyDown(e, editor.current)\n },\n [controller, editor],\n )\n\n // console.log('render', { propControllers, controller, editor })\n\n return (\n <Slate editor={editor.current} value={initialValue} onChange={delaySync}>\n <Editable\n id={id}\n renderLeaf={Leaf}\n renderElement={Element}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n className={cx(width, margin)}\n readOnly={editMode === BuilderEditMode.INTERACT}\n />\n </Slate>\n )\n})\n","import { ForwardedRef, forwardRef } from 'react'\nimport { RichTextValue } from '../../../prop-controllers'\nimport { ElementIDValue } from '../../../prop-controllers/descriptors'\nimport { EditableText } from './EditableText'\n\ntype Props = {\n id?: ElementIDValue\n text?: RichTextValue\n width?: string\n margin?: string\n}\n\nconst Text = forwardRef(function Text(props: Props, ref: ForwardedRef<any>) {\n return <EditableText {...props} ref={ref} />\n})\n\nexport default Text\n"],"names":["value","deviceId","withColor","swatches","deviceRawTypographyValue","color","nextValue","swatch","find","s","id","swatchId","alpha","undefined","getDeviceId","typography","useTypography","source","style","filter","isDeviceOverride","override","swatchIds","getTypographyStyleSwatchIds","useSwatches","isNonNullable","enhancedSource","map","enhancedOverride","devices","Set","concat","deviceSource","findDeviceOverride","deviceOverride","useStyle","responsiveStyle","styles","colorToString","fontFamily","fontSize","unit","fontWeight","lineHeight","letterSpacing","uppercase","textTransform","underline","strikethrough","textDecoration","Boolean","join","italic","fontStyle","shallowMergeFallbacks","leaf","children","attributes","enhancedTypography","useEnhancedTypography","typographyClassName","useTypographyClassName","props","type","TextType","Typography","element","blockStyles","margin","textAlign","BlockType","Paragraph","cx","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","BlockQuote","padding","borderLeft","OrderedList","listStylePosition","UnorderedList","ListItem","ListItemChild","className","restOfProps","Link","InlineType","Code","SuperScript","SubScript","link","COMMIT_DEBOUNCE_DELAY","editor","text","shouldCommit","setShouldCommit","useState","useEffect","richTextDTOtoDAO","nextSelection","richTextDTOtoSelection","compareRichTextDAO","current","compareRichTextSelection","selection","onChange","timeoutId","window","setTimeout","clearTimeout","useCallback","Element","Text","Editor","Transforms","Path","Range","Point","Node","isHotkey","defaultText","EditableText","forwardRef","width","ref","useRef","withList","withReact","createEditor","delaySync","useSyncWithBuilder","editMode","useBuilderEditMode","propControllers","setPropControllers","controller","useImperativeHandle","getDomNode","ReactEditor","toDOMNode","getBoxModel","getBox","initialValue","useMemo","setSlateEditor","handleFocus","focus","handleKeyDown","e","redo","undo","blur","Slate","Editable","Leaf","BuilderEditMode","INTERACT"],"mappings":"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"}
1
+ {"version":3,"file":"Text.cjs.js","sources":["../src/components/builtin/Text/EditableText/Leaf/typography.tsx","../src/components/builtin/Text/EditableText/Leaf/leaf.tsx","../src/components/builtin/Text/EditableText/Element/block.tsx","../src/components/builtin/Text/EditableText/Element/inline.tsx","../src/components/builtin/Text/EditableText/Element/element.tsx","../src/components/builtin/Text/EditableText/useSyncWithBuilder.tsx","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/element.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/wrapList.ts","../src/components/builtin/Text/EditableText/ListPlugin/constants.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/editor.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/filterForSubtreeRoots.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/location.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/utils/getSelectedListItems.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/unwrapList.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/toggleList.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/indent.ts","../src/components/builtin/Text/EditableText/ListPlugin/lib/dedent.ts","../src/components/builtin/Text/EditableText/ListPlugin/ListPlugin.ts","../src/components/builtin/Text/EditableText/editable-text.tsx","../src/components/builtin/Text/Text.tsx"],"sourcesContent":["import { CSSObject } from '@emotion/serialize'\nimport { RenderLeafProps } from 'slate-react'\nimport { Swatch, Typography } from '../../../../../api'\nimport { TypographyText } from '../../../../../controls'\nimport { DeviceOverride, ResponsiveValue } from '../../../../../prop-controllers'\nimport { getTypographyStyleSwatchIds } from '../../../../../prop-controllers/introspection'\nimport { useTypography, useSwatches } from '../../../../../runtimes/react/hooks/makeswift-api'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { colorToString } from '../../../../utils/colorToString'\nimport { findDeviceOverride, shallowMergeFallbacks } from '../../../../utils/devices'\nimport { isNonNullable } from '../../../../utils/isNonNullable'\nimport { responsiveStyle } from '../../../../utils/responsive-style'\nimport { ColorValue } from '../../../../utils/types'\n\nexport type TypographyValue = Typography['style'][number]['value']\n\ntype EnhancedColor = {\n color?: ColorValue\n}\n\ntype EnhancedTypographyValue = Omit<TypographyValue, keyof EnhancedColor> & EnhancedColor\n\nexport type EnhancedTypography = Array<DeviceOverride<EnhancedTypographyValue>>\n\nexport function isDeviceOverride(value: {\n deviceId: string\n value: TypographyValue\n}): value is DeviceOverride<TypographyValue> {\n return value.deviceId === 'desktop' || value.deviceId === 'tablet' || value.deviceId === 'mobile'\n}\n\nconst withColor =\n (swatches: Swatch[]) =>\n (\n deviceRawTypographyValue: DeviceOverride<TypographyValue>,\n ): DeviceOverride<EnhancedTypographyValue> => {\n const { value, deviceId } = deviceRawTypographyValue\n\n if (value.color == null) {\n const { color, ...nextValue } = value\n return {\n deviceId,\n value: nextValue,\n }\n }\n return {\n deviceId,\n value: {\n ...value,\n color: {\n swatch: swatches.find(s => s && s.id === value.color?.swatchId),\n alpha: value.color?.alpha ?? undefined,\n },\n },\n }\n }\n\nconst getDeviceId = ({ deviceId }: DeviceOverride<unknown>) => deviceId\n\nexport default function useEnhancedTypography(value: Typography): EnhancedTypography {\n const typography = useTypography(value?.id ?? null)\n const source = typography?.style.filter(isDeviceOverride) ?? []\n const override = value?.style.filter(isDeviceOverride) ?? []\n\n const swatchIds = [\n ...getTypographyStyleSwatchIds(value?.style),\n ...getTypographyStyleSwatchIds(typography?.style),\n ]\n const swatches = useSwatches(swatchIds).filter(isNonNullable)\n\n const enhancedSource = source.map(withColor(swatches))\n const enhancedOverride = override.map(withColor(swatches))\n\n const devices = [\n ...new Set(enhancedSource.map(getDeviceId).concat(enhancedOverride.map(getDeviceId))),\n ]\n\n return devices\n .map(deviceId => {\n const deviceSource = findDeviceOverride(enhancedSource, deviceId)?.value\n const deviceOverride = findDeviceOverride(enhancedOverride, deviceId)?.value\n\n if (deviceSource && deviceOverride) {\n return {\n deviceId,\n value: { ...deviceSource, ...deviceOverride },\n }\n } else if (deviceOverride) {\n return {\n deviceId,\n value: deviceOverride,\n }\n } else if (deviceSource) {\n return {\n deviceId,\n value: deviceSource,\n }\n }\n return null\n })\n .filter(isNonNullable)\n}\n\nexport function useTypographyClassName(value: EnhancedTypography): string {\n return useStyle(\n responsiveStyle<\n EnhancedTypographyValue,\n [ResponsiveValue<EnhancedTypographyValue> | null | undefined]\n >(\n [value],\n ([value]) => {\n if (value === undefined) return {}\n\n let styles: CSSObject = {}\n if (value.color != null) styles.color = colorToString(value.color)\n if (value.fontFamily != null) styles.fontFamily = value.fontFamily\n if (value.fontSize != null && value.fontSize.value != null && value.fontSize.unit != null)\n styles.fontSize = `${value.fontSize.value}${value.fontSize.unit}`\n if (value.fontWeight != null) styles.fontWeight = value.fontWeight\n if (value.lineHeight != null) styles.lineHeight = value.lineHeight\n if (value.letterSpacing != null) styles.letterSpacing = `${value.letterSpacing / 10}em`\n if (value.uppercase != null)\n styles.textTransform = value.uppercase === true ? 'uppercase' : 'initial'\n if (value.underline != null || value.strikethrough != null)\n styles.textDecoration = [\n Boolean(value.underline) && 'underline',\n Boolean(value.strikethrough) && 'line-through',\n ]\n .filter(Boolean)\n .join(' ')\n if (value.italic != null) styles.fontStyle = value.italic === true ? 'italic' : 'initial'\n\n return styles\n },\n shallowMergeFallbacks,\n ),\n )\n}\n\nexport interface TypographyRenderLeafProps extends RenderLeafProps {\n leaf: TypographyText\n}\n\nexport function TypographyLeaf({ leaf, children, attributes }: TypographyRenderLeafProps) {\n const enhancedTypography = useEnhancedTypography(leaf.typography)\n const typographyClassName = useTypographyClassName(enhancedTypography)\n return (\n <span {...attributes} className={typographyClassName}>\n {children}\n </span>\n )\n}\n","import { RenderLeafProps } from 'slate-react'\nimport { TextType } from '../../../../../controls'\nimport { TypographyLeaf } from './typography'\n\nexport function Leaf({ leaf, ...props }: RenderLeafProps) {\n switch (leaf.type) {\n case TextType.Typography:\n return <TypographyLeaf leaf={leaf} {...props} />\n\n default:\n return <span {...props.attributes}>{props.children}</span>\n }\n}\n","import { cx } from '@emotion/css'\nimport { RenderElementProps } from 'slate-react'\nimport { Block, BlockType } from '../../../../../controls'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { responsiveStyle } from '../../../../utils/responsive-style'\n\nexport interface InlineRenderElementProps extends RenderElementProps {\n element: Block\n}\n\nexport function BlockElement({ element, attributes, children }: InlineRenderElementProps) {\n const blockStyles = [\n useStyle({ margin: 0 }),\n useStyle(responsiveStyle([element.textAlign], ([textAlign = 'left']) => ({ textAlign }))),\n ]\n\n switch (element.type) {\n case BlockType.Paragraph:\n return (\n <p {...attributes} className={cx(...blockStyles)}>\n {children}\n </p>\n )\n case BlockType.Heading1:\n return (\n <h1 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h1>\n )\n case BlockType.Heading2:\n return (\n <h2 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h2>\n )\n case BlockType.Heading3:\n return (\n <h3 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h3>\n )\n case BlockType.Heading4:\n return (\n <h4 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h4>\n )\n case BlockType.Heading5:\n return (\n <h5 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h5>\n )\n case BlockType.Heading6:\n return (\n <h6 {...attributes} className={cx(...blockStyles)}>\n {children}\n </h6>\n )\n case BlockType.BlockQuote:\n return (\n <blockquote\n {...attributes}\n className={cx(\n ...blockStyles,\n useStyle({\n padding: '0.5em 10px',\n fontSize: '1.25em',\n fontWeight: '300',\n borderLeft: '5px solid rgba(0, 0, 0, 0.1)',\n }),\n )}\n >\n {children}\n </blockquote>\n )\n case BlockType.OrderedList:\n return (\n <ol\n {...attributes}\n className={cx(...blockStyles, `${element.type}`)}\n style={{ listStylePosition: 'inside' }}\n >\n {children}\n </ol>\n )\n case BlockType.UnorderedList:\n return (\n <ul\n {...attributes}\n className={cx(...blockStyles, `${element.type}`)}\n style={{ listStylePosition: 'inside' }}\n >\n {children}\n </ul>\n )\n case BlockType.ListItem:\n return (\n <li {...attributes} className={cx(...blockStyles, `${element.type}`)}>\n {children}\n </li>\n )\n case BlockType.ListItemChild:\n return (\n <span {...attributes} className={cx(...blockStyles, `${element.type}`)}>\n {children}\n </span>\n )\n }\n}\n","import { cx } from '@emotion/css'\nimport { ComponentPropsWithoutRef } from 'react'\nimport { RenderElementProps } from 'slate-react'\nimport { Inline, InlineType } from '../../../../../controls'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { Link } from '../../../../shared/Link'\n\nfunction StyledLink({ className, ...restOfProps }: ComponentPropsWithoutRef<typeof Link>) {\n return <Link {...restOfProps} className={cx(useStyle({ textDecoration: 'none' }), className)} />\n}\n\nexport interface InlineRenderElementProps extends RenderElementProps {\n element: Inline\n}\n\nexport function InlineElement({ element, attributes, children }: InlineRenderElementProps) {\n switch (element.type) {\n case InlineType.Code:\n return <code {...attributes}>{children}</code>\n case InlineType.SuperScript:\n return <sup {...attributes}>{children}</sup>\n case InlineType.SubScript:\n return <sub {...attributes}>{children}</sub>\n case InlineType.Link:\n return (\n <StyledLink {...attributes} link={element.link}>\n {children}\n </StyledLink>\n )\n }\n}\n","import { RenderElementProps } from 'slate-react'\nimport { BlockType, InlineType } from '../../../../../controls'\nimport { BlockElement } from './block'\nimport { InlineElement } from './inline'\n\nexport function Element({ element, ...props }: RenderElementProps) {\n switch (element.type) {\n case InlineType.Code:\n case InlineType.SuperScript:\n case InlineType.SubScript:\n case InlineType.Link:\n return <InlineElement element={element} {...props} />\n case BlockType.Paragraph:\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.BlockQuote:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return <BlockElement element={element} {...props} />\n default:\n return <span {...props.attributes}>{props.children}</span>\n }\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport { Editor } from 'slate'\nimport {\n compareRichTextDAO,\n compareRichTextSelection,\n richTextDTOtoDAO,\n richTextDTOtoSelection,\n} from '../../../../controls'\nimport { RichTextValue } from '../../../../prop-controllers'\n\nconst COMMIT_DEBOUNCE_DELAY = 500\n\nexport function useSyncWithBuilder(editor: Editor, text?: RichTextValue) {\n const [shouldCommit, setShouldCommit] = useState(true)\n\n useEffect(() => {\n if (shouldCommit && text) {\n const nextValue = richTextDTOtoDAO(text)\n const nextSelection = richTextDTOtoSelection(text)\n if (\n !compareRichTextDAO(editor.children, nextValue) ||\n !compareRichTextSelection(editor.selection, nextSelection)\n ) {\n editor.children = nextValue\n editor.selection = nextSelection\n editor.onChange()\n }\n }\n }, [shouldCommit, text])\n\n useEffect(() => {\n if (shouldCommit) return\n\n const timeoutId = window.setTimeout(() => {\n setShouldCommit(true)\n }, COMMIT_DEBOUNCE_DELAY)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [shouldCommit])\n\n return useCallback(() => setShouldCommit(false), [])\n}\n","import { Node, Element, Text } from 'slate'\nimport {\n TextType,\n BlockType,\n Block,\n ParagraphElement,\n OrderedListElement,\n UnorderedListElement,\n ListItemElement,\n ListItemChildElement,\n} from '../../../../../../../controls'\n\nexport const ElementUtils = {\n isConvertibleToListTextNode(node: Node) {\n return (\n !this.isList(node) &&\n !this.isListItem(node) &&\n !this.isListItemChild(node) &&\n !this.isText(node) &&\n !this.isTypography(node)\n )\n },\n isText(node: Node) {\n return Element.isElementType(node, TextType.Text) || Text.isText(node)\n },\n isTypography(node: Node) {\n return Element.isElementType(node, TextType.Typography)\n },\n isParagraph(node: Node): node is ParagraphElement {\n return Element.isElementType(node, BlockType.Paragraph)\n },\n isList(node: Node): node is OrderedListElement | UnorderedListElement {\n return (\n Element.isElementType(node, BlockType.OrderedList) ||\n Element.isElementType(node, BlockType.UnorderedList)\n )\n },\n isListItem(node: Node): node is ListItemElement {\n return Element.isElementType(node, BlockType.ListItem)\n },\n isListItemChild(node: Node): node is ListItemChildElement {\n return Element.isElementType(node, BlockType.ListItemChild)\n },\n createText() {\n return { text: '', type: TextType.Text }\n },\n createParagraph() {\n return {\n children: [this.createText()],\n type: BlockType.Paragraph,\n }\n },\n createList(type: BlockType = BlockType.UnorderedList): Block {\n return { children: [this.createText()], type }\n },\n createListItem(): Block {\n return {\n children: [this.createListItemChild()],\n type: BlockType.ListItem,\n }\n },\n createListItemChild(): Block {\n return {\n children: [this.createText()],\n type: BlockType.ListItemChild,\n }\n },\n}\n","import { Editor, Element, Transforms } from 'slate'\nimport { BlockType } from '../../../../../../controls'\nimport { ElementUtils } from './utils/element'\n\ntype WrapListOptions = {\n type: typeof BlockType.UnorderedList | typeof BlockType.OrderedList\n}\n\nexport function wrapList(\n editor: Editor,\n options: WrapListOptions = { type: BlockType.UnorderedList },\n) {\n if (!editor.selection) return\n\n const nonListEntries = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: node => {\n return Element.isElement(node) && ElementUtils.isConvertibleToListTextNode(node)\n },\n }),\n )\n\n const refs = nonListEntries.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n const path = ref.current\n if (path) {\n Editor.withoutNormalizing(editor, () => {\n Transforms.setNodes(\n editor,\n { type: BlockType.ListItemChild },\n {\n at: path,\n },\n )\n Transforms.wrapNodes(editor, ElementUtils.createListItem(), {\n at: path,\n })\n Transforms.wrapNodes(editor, ElementUtils.createList(options.type), {\n at: path,\n })\n })\n }\n ref.unref()\n })\n}\n","export const LIST_ITEM_CHILD_POSITION = 0\nexport const LIST_ITEM_LIST_POSITION = 1\n","import { Path, Editor, NodeEntry } from 'slate'\nimport { ListElement, ListItemElement } from '../../../../../../../controls'\nimport { ElementUtils } from './element'\n\nexport const EditorUtils = {\n getFirstAncestorList(editor: Editor, path: Path): NodeEntry<ListElement> | null {\n const parentList = Editor.above(editor, {\n at: path,\n match: (node): node is ListElement => ElementUtils.isList(node),\n })\n return parentList ?? null\n },\n getFirstAncestorListItem(editor: Editor, path: Path): NodeEntry<ListItemElement> | null {\n const parentListItem = Editor.above(editor, {\n at: path,\n match: (node): node is ListItemElement => ElementUtils.isListItem(node),\n })\n\n return parentListItem ?? null\n },\n}\n","import type { Node, NodeEntry } from 'slate'\nimport { Path } from 'slate'\n\nexport function filterForSubtreeRoots(entries: NodeEntry<Node>[]): NodeEntry<Node>[] {\n return entries.filter(\n ([, nodePath]) =>\n !Path.ancestors(nodePath).some(ancestor => {\n return entries.some(([, path]) => Path.equals(path, ancestor))\n }),\n )\n}\n","import { Range, Point, Path, Location } from 'slate'\n\nexport const LocationUtils = {\n getStartPath(location: Location): Path {\n if (Range.isRange(location)) return Range.start(location).path\n if (Point.isPoint(location)) return location.path\n return location\n },\n}\n","import type { Element, NodeEntry } from 'slate'\nimport { Editor, Path } from 'slate'\nimport { EditorUtils } from './editor'\nimport { ElementUtils } from './element'\nimport { LocationUtils } from './location'\n\nexport function getSelectedListItems(editor: Editor): NodeEntry<Element>[] {\n if (!editor.selection) return []\n\n const start = LocationUtils.getStartPath(editor.selection)\n const listItems = Editor.nodes(editor, {\n at: editor.selection,\n match: node => ElementUtils.isListItem(node),\n })\n const firstAncestorPath = EditorUtils.getFirstAncestorListItem(editor, start)?.[1] ?? []\n\n return Array.from(listItems).filter((node): node is NodeEntry<Element> =>\n Path.isDescendant(start, node[1])\n ? Path.equals(node[1], firstAncestorPath)\n : !Path.isAfter(start, node[1]),\n )\n}\n\nexport function getSelectedLists(editor: Editor): NodeEntry<Element>[] {\n if (!editor.selection) return []\n\n const start = LocationUtils.getStartPath(editor.selection)\n const lists = Editor.nodes(editor, {\n at: editor.selection,\n match: node => ElementUtils.isList(node),\n })\n const firstAncestorPath = EditorUtils.getFirstAncestorList(editor, start)?.[1] ?? []\n\n return Array.from(lists).filter((node): node is NodeEntry<Element> =>\n Path.isDescendant(start, node[1])\n ? Path.equals(node[1], firstAncestorPath)\n : !Path.isAfter(start, node[1]),\n )\n}\n","import { Editor, Transforms, Path, Node } from 'slate'\nimport { BlockType } from '../../../../../../controls'\nimport { LIST_ITEM_CHILD_POSITION, LIST_ITEM_LIST_POSITION } from '../constants'\nimport { EditorUtils } from './utils/editor'\nimport { filterForSubtreeRoots } from './utils/filterForSubtreeRoots'\nimport { getSelectedListItems } from './utils/getSelectedListItems'\n\nexport function unwrapPath(editor: Editor, listItemPath: Path) {\n const parentList = EditorUtils.getFirstAncestorList(editor, listItemPath)\n const listItemContainingParentList = EditorUtils.getFirstAncestorListItem(editor, listItemPath)\n //if this is a nested item we don't want to unwrap it\n if (!parentList || listItemContainingParentList) return\n\n Editor.withoutNormalizing(editor, () => {\n const listItemTextPath = [...listItemPath, LIST_ITEM_CHILD_POSITION]\n const listItemNestedListPath = [...listItemPath, LIST_ITEM_LIST_POSITION]\n\n if (Node.has(editor, listItemNestedListPath)) {\n Transforms.setNodes(editor, { type: parentList[0].type }, { at: listItemNestedListPath })\n Transforms.liftNodes(editor, { at: listItemNestedListPath })\n Transforms.liftNodes(editor, { at: Path.next(listItemPath) })\n }\n\n if (Node.has(editor, listItemTextPath)) {\n Transforms.setNodes(\n editor,\n { type: BlockType.Paragraph },\n {\n at: listItemTextPath,\n },\n )\n Transforms.liftNodes(editor, { at: listItemTextPath })\n Transforms.liftNodes(editor, { at: listItemPath })\n }\n })\n}\n\nexport function unwrapList(editor: Editor) {\n if (!editor.selection) return\n\n const listItems = getSelectedListItems(editor)\n const subRoots = filterForSubtreeRoots(listItems)\n const refs = subRoots.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n if (ref.current) {\n unwrapPath(editor, ref.current)\n }\n ref.unref()\n })\n}\n","import { Editor, Node, Path, Transforms } from 'slate'\nimport { BlockType } from '../../../../../../controls'\nimport { unwrapList } from './unwrapList'\nimport { ElementUtils } from './utils/element'\nimport { LocationUtils } from './utils/location'\nimport { wrapList } from './wrapList'\n\ntype ToggleListOptions = {\n type: typeof BlockType.UnorderedList | typeof BlockType.OrderedList\n}\n\nexport function toggleList(\n editor: Editor,\n options: ToggleListOptions = { type: BlockType.UnorderedList },\n) {\n if (!editor.selection) return\n const start = LocationUtils.getStartPath(editor.selection)\n const ancestorPath = Path.ancestors(start).at(1)\n if (!ancestorPath || !Node.has(editor, ancestorPath)) return\n const ancestor = Node.get(editor, ancestorPath)\n\n if (!ElementUtils.isList(ancestor)) {\n return wrapList(editor, { type: options.type })\n }\n\n if (ancestor.type === options.type) {\n unwrapList(editor)\n } else {\n Transforms.setNodes(editor, { type: options.type }, { at: ancestorPath })\n }\n}\n","import { Editor, Node, Path, Transforms } from 'slate'\nimport { LIST_ITEM_LIST_POSITION } from '../constants'\nimport { ElementUtils } from './utils/element'\nimport { filterForSubtreeRoots } from './utils/filterForSubtreeRoots'\nimport { getSelectedListItems } from './utils/getSelectedListItems'\n\nexport function indentPath(editor: Editor, path: Path) {\n const parent = Node.parent(editor, path)\n if (!path || !Path.hasPrevious(path) || !ElementUtils.isList(parent) ) return\n\n \n const previosPath = Path.previous(path)\n\n const previousChildListPath = [...previosPath, LIST_ITEM_LIST_POSITION]\n const previousHasChildList = Node.has(editor, previousChildListPath)\n\n Editor.withoutNormalizing(editor, () => {\n if (!previousHasChildList) {\n Transforms.insertNodes(editor, ElementUtils.createList(parent.type), {\n at: previousChildListPath,\n })\n }\n\n const previousChildList = Node.get(editor, previousChildListPath)\n\n if (ElementUtils.isList(previousChildList)) {\n const index = previousHasChildList ? previousChildList.children.length : 0\n Transforms.moveNodes(editor, {\n at: path,\n to: [...previousChildListPath, index],\n })\n }\n })\n}\n\nexport function indent(editor: Editor) {\n if (!editor.selection) return\n\n const listItems = getSelectedListItems(editor)\n const subRoots = filterForSubtreeRoots(listItems)\n const refs = subRoots.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n if (ref.current) {\n indentPath(editor, ref.current)\n }\n ref.unref()\n })\n}\n","import { Editor, Path, Transforms } from 'slate'\nimport { indentPath } from './indent'\nimport { getSelectedListItems } from './utils/getSelectedListItems'\nimport { filterForSubtreeRoots } from './utils/filterForSubtreeRoots'\nimport { EditorUtils } from './utils/editor'\n\nfunction dedentPath(editor: Editor, listItemPath: Path) {\n const parentList = EditorUtils.getFirstAncestorList(editor, listItemPath)\n const listItemContainingParentList = EditorUtils.getFirstAncestorListItem(editor, listItemPath)\n if (!parentList || !listItemContainingParentList) return\n\n const [parentListNode, parentListPath] = parentList\n const [_, listItemContainingParentListPath] = listItemContainingParentList\n\n const listItemPosition = listItemPath[listItemPath.length - 1]\n const previousSiblings = parentListNode.children.slice(0, listItemPosition)\n const nextSiblings = parentListNode.children.slice(listItemPosition + 1)\n\n Editor.withoutNormalizing(editor, () => {\n // put next siblings into list item\n nextSiblings.forEach(() => {\n const nextSiblingPath = [...parentListPath, listItemPosition + 1]\n indentPath(editor, nextSiblingPath)\n })\n // move list item to parent list\n Transforms.moveNodes(editor, {\n at: listItemPath,\n to: Path.next(listItemContainingParentListPath),\n })\n // delete old parent list if there are no other list items\n if (previousSiblings.length === 0) {\n Transforms.removeNodes(editor, { at: parentListPath })\n }\n })\n}\n\nexport function dedent(editor: Editor) {\n if (!editor.selection) return\n\n const listItems = getSelectedListItems(editor)\n const subRoots = filterForSubtreeRoots(listItems)\n const refs = subRoots.map(([_, path]) => Editor.pathRef(editor, path))\n\n refs.forEach(ref => {\n if (ref.current) {\n dedentPath(editor, ref.current)\n }\n ref.unref()\n })\n}\n","import type { KeyboardEvent } from 'react'\nimport { Editor, Transforms, Range, Node, PathRef } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport { ElementUtils } from './lib/utils/element'\nimport { unwrapList, wrapList, indent, dedent, toggleList } from './lib'\nimport { EditorUtils } from './lib/utils/editor'\nimport { LIST_ITEM_CHILD_POSITION } from './constants'\nimport { BlockType } from '../../../../../controls'\n\nexport const List = {\n unwrapList,\n wrapList,\n indent,\n dedent,\n toggleList,\n}\n\nexport function onKeyDown(e: KeyboardEvent, editor: Editor) {\n if (\n !editor.selection ||\n Array.from(Editor.nodes(editor, { match: node => ElementUtils.isListItem(node) })).length === 0\n )\n return\n\n if (isHotkey('shift+tab', e)) {\n e.preventDefault()\n List.dedent(editor)\n }\n\n if (isHotkey('tab', e)) {\n e.preventDefault()\n List.indent(editor)\n }\n\n if (isHotkey('backspace', e)) {\n if (!editor.selection) return\n if (Range.isExpanded(editor.selection)) return\n const listItem = EditorUtils.getFirstAncestorListItem(editor, editor.selection.anchor.path)\n if (editor.selection.anchor.offset === 0 && listItem) {\n e.preventDefault()\n const parentListItem = EditorUtils.getFirstAncestorListItem(editor, listItem[1])\n const list = EditorUtils.getFirstAncestorList(editor, listItem[1])\n\n if (parentListItem) {\n List.dedent(editor)\n } else if (list) {\n List.unwrapList(editor)\n }\n return\n }\n }\n\n if (isHotkey('enter', e)) {\n e.preventDefault()\n\n if (!editor.selection) return\n\n if (Range.isExpanded(editor.selection)) {\n Transforms.delete(editor)\n return\n }\n\n const listItem = EditorUtils.getFirstAncestorListItem(editor, editor.selection.anchor.path)\n if (\n editor.selection.anchor.offset === 0 &&\n listItem &&\n Editor.string(editor, listItem[1]) === ''\n ) {\n const parentListItem = EditorUtils.getFirstAncestorListItem(editor, listItem[1])\n\n if (parentListItem) {\n List.dedent(editor)\n } else {\n List.unwrapList(editor)\n }\n return\n }\n\n Transforms.splitNodes(editor, {\n at: editor.selection,\n always: true,\n match: node => ElementUtils.isListItem(node),\n })\n }\n\n if (isHotkey('shift+enter', e)) {\n e.preventDefault()\n editor.insertText('\\n')\n }\n}\n\nexport function withList(editor: Editor) {\n editor.normalizeNode = entry => {\n const [normalizationNode, normalizationPath] = entry\n\n // Normalization for converting children of list items to list item children\n // In the case of backspace from position 0 of node into a list this converts the node into a list item.\n if (ElementUtils.isListItem(normalizationNode)) {\n const pathToListItemText = [...normalizationPath, LIST_ITEM_CHILD_POSITION]\n\n if (Node.has(editor, pathToListItemText)) {\n const nodeInListItemTextPosition = Node.get(editor, pathToListItemText)\n if (ElementUtils.isParagraph(nodeInListItemTextPosition)) {\n Transforms.setNodes(\n editor,\n { type: BlockType.ListItemChild },\n {\n at: pathToListItemText,\n },\n )\n return\n }\n } else {\n Transforms.insertNodes(editor, ElementUtils.createListItem(), {\n at: pathToListItemText,\n })\n return\n }\n }\n\n // Normalization for removing stray text elements from lists\n if (ElementUtils.isList(normalizationNode)) {\n Array.from(Node.children(editor, normalizationPath)).forEach(([node, path]) => {\n if (ElementUtils.isText(node)) {\n Transforms.removeNodes(editor, { at: path })\n return\n }\n })\n }\n\n // Normalization for merging adjacent lists of the same type\n if (!ElementUtils.isText(normalizationNode) && !ElementUtils.isTypography(normalizationNode)) {\n const mergeableChildren = Array.from(Node.children(editor, normalizationPath))\n .map((child, index, children) => {\n const potentialNodeToBeMerged = children.at(index + 1)\n if (\n !potentialNodeToBeMerged ||\n !ElementUtils.isList(potentialNodeToBeMerged[0]) ||\n potentialNodeToBeMerged[0].type !== child[0].type\n ) {\n return null\n }\n return [\n Editor.pathRef(editor, child[1]),\n Editor.pathRef(editor, potentialNodeToBeMerged[1]),\n ]\n })\n .filter((mergeableNodes): mergeableNodes is PathRef[] => Boolean(mergeableNodes))\n\n if (mergeableChildren.length !== 0) {\n mergeableChildren.reverse().forEach(([nodePathRef, nodeToBeMergedPathRef]) => {\n const nodePath = nodePathRef.current\n const nodeToBeMergedPath = nodeToBeMergedPathRef.current\n if (nodePath == null || nodeToBeMergedPath == null) return\n const nodeChildren = Array.from(Node.children(editor, nodePath))\n const childrenToBeMerged = Array.from(Node.children(editor, nodeToBeMergedPath))\n Editor.withoutNormalizing(editor, () => {\n childrenToBeMerged.forEach(([_, childPath], index) => {\n Transforms.moveNodes(editor, {\n at: childPath,\n to: [...nodePath, nodeChildren.length + index],\n })\n })\n Transforms.removeNodes(editor, { at: nodeToBeMergedPath })\n })\n nodePathRef.unref()\n nodeToBeMergedPathRef.unref()\n })\n return\n }\n }\n }\n\n return editor\n}\n","import {\n forwardRef,\n KeyboardEvent,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\n\nimport { createEditor } from 'slate'\nimport { Slate, Editable, withReact, ReactEditor } from 'slate-react'\n\nimport { ElementIDValue, RichTextValue } from '../../../../prop-controllers/descriptors'\nimport { cx } from '@emotion/css'\nimport { DescriptorsPropControllers } from '../../../../prop-controllers/instances'\nimport { Descriptors } from '../../../../runtimes/react/controls/rich-text'\nimport { getBox } from '../../../../box-model'\nimport { PropControllersHandle } from '../../../../state/modules/prop-controller-handles'\nimport { BlockType, RichTextDAO, richTextDTOtoDAO, TextType } from '../../../../controls'\nimport { Leaf } from './Leaf'\nimport { Element } from './Element'\nimport { useSyncWithBuilder } from './useSyncWithBuilder'\nimport { onKeyDown, withList } from './ListPlugin'\nimport isHotkey from 'is-hotkey'\nimport { useBuilderEditMode } from '../../../../runtimes/react'\nimport { BuilderEditMode } from '../../../../state/modules/builder-edit-mode'\n\ntype Props = {\n id?: ElementIDValue\n text?: RichTextValue\n width?: string\n margin?: string\n}\n\nconst defaultText: RichTextDAO = [\n { type: BlockType.Paragraph, children: [{ type: TextType.Text, text: '' }] },\n]\n\nexport const EditableText = forwardRef(function EditableText(\n { id, text, width, margin }: Props,\n ref: Ref<PropControllersHandle<Descriptors>>,\n) {\n const [editor] = useState(() => withList(withReact(createEditor())))\n const delaySync = useSyncWithBuilder(editor, text)\n const editMode = useBuilderEditMode()\n\n const [propControllers, setPropControllers] =\n useState<DescriptorsPropControllers<Descriptors> | null>(null)\n const controller = propControllers?.text\n\n useImperativeHandle(\n ref,\n () => ({\n getDomNode() {\n return ReactEditor.toDOMNode(editor, editor)\n },\n getBoxModel() {\n return getBox(ReactEditor.toDOMNode(editor, editor))\n },\n setPropControllers,\n }),\n [editor, setPropControllers],\n )\n\n const initialValue = useMemo(() => (text ? richTextDTOtoDAO(text) : defaultText), [text])\n\n useEffect(() => {\n controller?.setSlateEditor(editor)\n }, [controller, editor])\n\n const handleFocus = useCallback(() => {\n controller?.focus()\n }, [controller])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return controller?.redo()\n if (isHotkey('mod+z', e)) return controller?.undo()\n if (isHotkey('escape')(e)) return controller?.blur()\n onKeyDown(e, editor)\n },\n [controller, editor],\n )\n\n return (\n <Slate editor={editor} value={initialValue} onChange={delaySync}>\n <Editable\n id={id}\n renderLeaf={Leaf}\n renderElement={Element}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n className={cx(width, margin)}\n readOnly={editMode === BuilderEditMode.INTERACT}\n />\n </Slate>\n )\n})\n","import { ForwardedRef, forwardRef } from 'react'\nimport { RichTextValue } from '../../../prop-controllers'\nimport { ElementIDValue } from '../../../prop-controllers/descriptors'\nimport { EditableText } from './EditableText'\n\ntype Props = {\n id?: ElementIDValue\n text?: RichTextValue\n width?: string\n margin?: string\n}\n\nconst Text = forwardRef(function Text(props: Props, ref: ForwardedRef<any>) {\n return <EditableText {...props} ref={ref} />\n})\n\nexport default Text\n"],"names":["value","deviceId","withColor","swatches","deviceRawTypographyValue","color","nextValue","swatch","find","s","id","swatchId","alpha","undefined","getDeviceId","typography","useTypography","source","style","filter","isDeviceOverride","override","swatchIds","getTypographyStyleSwatchIds","useSwatches","isNonNullable","enhancedSource","map","enhancedOverride","devices","Set","concat","deviceSource","findDeviceOverride","deviceOverride","useStyle","responsiveStyle","styles","colorToString","fontFamily","fontSize","unit","fontWeight","lineHeight","letterSpacing","uppercase","textTransform","underline","strikethrough","textDecoration","Boolean","join","italic","fontStyle","shallowMergeFallbacks","leaf","children","attributes","enhancedTypography","useEnhancedTypography","typographyClassName","useTypographyClassName","props","type","TextType","Typography","element","blockStyles","margin","textAlign","BlockType","Paragraph","cx","Heading1","Heading2","Heading3","Heading4","Heading5","Heading6","BlockQuote","padding","borderLeft","OrderedList","listStylePosition","UnorderedList","ListItem","ListItemChild","className","restOfProps","Link","InlineType","Code","SuperScript","SubScript","link","COMMIT_DEBOUNCE_DELAY","editor","text","shouldCommit","setShouldCommit","useState","useEffect","richTextDTOtoDAO","nextSelection","richTextDTOtoSelection","compareRichTextDAO","compareRichTextSelection","selection","onChange","timeoutId","window","setTimeout","clearTimeout","useCallback","Element","Text","Editor","Transforms","Path","Range","Point","Node","isHotkey","defaultText","EditableText","forwardRef","width","ref","withList","withReact","createEditor","delaySync","useSyncWithBuilder","editMode","useBuilderEditMode","propControllers","setPropControllers","controller","useImperativeHandle","getDomNode","ReactEditor","toDOMNode","getBoxModel","getBox","initialValue","useMemo","setSlateEditor","handleFocus","focus","handleKeyDown","e","redo","undo","blur","onKeyDown","Slate","Editable","Leaf","BuilderEditMode","INTERACT"],"mappings":"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"}
package/dist/Text.es.js CHANGED
@@ -29,7 +29,7 @@ var __objRest = (source, exclude) => {
29
29
  }
30
30
  return target;
31
31
  };
32
- import { useCallback, useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo } from "react";
32
+ import { useCallback, useState, useEffect, forwardRef, useImperativeHandle, useMemo } from "react";
33
33
  import { Element as Element$1, Text as Text$1, Editor, Transforms, Path, Range, Point, Node, createEditor } from "slate";
34
34
  import { withReact, ReactEditor, Slate, Editable } from "slate-react";
35
35
  import { cx } from "@emotion/css";
@@ -352,13 +352,13 @@ function useSyncWithBuilder(editor, text) {
352
352
  if (shouldCommit && text) {
353
353
  const nextValue = richTextDTOtoDAO(text);
354
354
  const nextSelection = richTextDTOtoSelection(text);
355
- if (!compareRichTextDAO(editor.current.children, nextValue) || !compareRichTextSelection(editor.current.selection, nextSelection)) {
356
- editor.current.children = nextValue;
357
- editor.current.selection = nextSelection;
358
- editor.current.onChange();
355
+ if (!compareRichTextDAO(editor.children, nextValue) || !compareRichTextSelection(editor.selection, nextSelection)) {
356
+ editor.children = nextValue;
357
+ editor.selection = nextSelection;
358
+ editor.onChange();
359
359
  }
360
360
  }
361
- }, [editor, shouldCommit, text]);
361
+ }, [shouldCommit, text]);
362
362
  useEffect(() => {
363
363
  if (shouldCommit)
364
364
  return;
@@ -758,23 +758,23 @@ const EditableText = forwardRef(function EditableText2({
758
758
  width,
759
759
  margin
760
760
  }, ref) {
761
- const editor = useRef(withList(withReact(createEditor())));
761
+ const [editor] = useState(() => withList(withReact(createEditor())));
762
762
  const delaySync = useSyncWithBuilder(editor, text);
763
763
  const editMode = useBuilderEditMode();
764
764
  const [propControllers, setPropControllers] = useState(null);
765
765
  const controller = propControllers == null ? void 0 : propControllers.text;
766
766
  useImperativeHandle(ref, () => ({
767
767
  getDomNode() {
768
- return ReactEditor.toDOMNode(editor.current, editor.current);
768
+ return ReactEditor.toDOMNode(editor, editor);
769
769
  },
770
770
  getBoxModel() {
771
- return getBox(ReactEditor.toDOMNode(editor.current, editor.current));
771
+ return getBox(ReactEditor.toDOMNode(editor, editor));
772
772
  },
773
773
  setPropControllers
774
- }), []);
774
+ }), [editor, setPropControllers]);
775
775
  const initialValue = useMemo(() => text ? richTextDTOtoDAO(text) : defaultText, [text]);
776
776
  useEffect(() => {
777
- controller == null ? void 0 : controller.setSlateEditor(editor.current);
777
+ controller == null ? void 0 : controller.setSlateEditor(editor);
778
778
  }, [controller, editor]);
779
779
  const handleFocus = useCallback(() => {
780
780
  controller == null ? void 0 : controller.focus();
@@ -786,10 +786,10 @@ const EditableText = forwardRef(function EditableText2({
786
786
  return controller == null ? void 0 : controller.undo();
787
787
  if (isHotkey("escape")(e))
788
788
  return controller == null ? void 0 : controller.blur();
789
- onKeyDown(e, editor.current);
789
+ onKeyDown(e, editor);
790
790
  }, [controller, editor]);
791
791
  return /* @__PURE__ */ jsx(Slate, {
792
- editor: editor.current,
792
+ editor,
793
793
  value: initialValue,
794
794
  onChange: delaySync,
795
795
  children: /* @__PURE__ */ jsx(Editable, {