@makeswift/runtime 0.11.9 → 0.11.11
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/LICENSE +21 -0
- package/dist/Box.cjs.js +1 -1
- package/dist/Box.cjs.js.map +1 -1
- package/dist/Box.es.js +1 -1
- package/dist/Box.es.js.map +1 -1
- package/dist/Button.cjs.js +1 -1
- package/dist/Button.cjs.js.map +1 -1
- package/dist/Button.es.js +1 -1
- package/dist/Button.es.js.map +1 -1
- package/dist/Carousel.cjs.js +1 -1
- package/dist/Carousel.cjs.js.map +1 -1
- package/dist/Carousel.es.js +1 -1
- package/dist/Carousel.es.js.map +1 -1
- package/dist/Countdown.cjs.js +1 -1
- package/dist/Countdown.cjs.js.map +1 -1
- package/dist/Countdown.es.js +1 -1
- package/dist/Countdown.es.js.map +1 -1
- package/dist/Divider.cjs.js +1 -1
- package/dist/Divider.cjs.js.map +1 -1
- package/dist/Divider.es.js +1 -1
- package/dist/Divider.es.js.map +1 -1
- package/dist/Embed.cjs.js +1 -1
- package/dist/Embed.cjs.js.map +1 -1
- package/dist/Embed.es.js +1 -1
- package/dist/Embed.es.js.map +1 -1
- package/dist/Form.cjs.js +3 -3
- package/dist/Form.cjs.js.map +1 -1
- package/dist/Form.es.js +3 -3
- package/dist/Form.es.js.map +1 -1
- package/dist/Image.cjs.js +1 -1
- package/dist/Image.cjs.js.map +1 -1
- package/dist/Image.es.js +1 -1
- package/dist/Image.es.js.map +1 -1
- package/dist/LiveProvider.cjs.js +1 -1
- package/dist/LiveProvider.cjs.js.map +1 -1
- package/dist/LiveProvider.es.js +1 -1
- package/dist/LiveProvider.es.js.map +1 -1
- package/dist/Navigation.cjs.js +7 -7
- package/dist/Navigation.cjs.js.map +1 -1
- package/dist/Navigation.es.js +7 -7
- package/dist/Navigation.es.js.map +1 -1
- package/dist/PreviewProvider.cjs.js +1 -1
- package/dist/PreviewProvider.cjs.js.map +1 -1
- package/dist/PreviewProvider.es.js +1 -1
- package/dist/PreviewProvider.es.js.map +1 -1
- package/dist/ReadOnlyText.cjs.js +1 -1
- package/dist/ReadOnlyText.cjs.js.map +1 -1
- package/dist/ReadOnlyText.es.js +1 -1
- package/dist/ReadOnlyText.es.js.map +1 -1
- package/dist/ReadOnlyTextV2.cjs.js +2 -2
- package/dist/ReadOnlyTextV2.cjs.js.map +1 -1
- package/dist/ReadOnlyTextV2.es.js +2 -2
- package/dist/ReadOnlyTextV2.es.js.map +1 -1
- package/dist/Root.cjs.js +1 -1
- package/dist/Root.cjs.js.map +1 -1
- package/dist/Root.es.js +1 -1
- package/dist/Root.es.js.map +1 -1
- package/dist/SocialLinks.cjs.js +132 -74
- package/dist/SocialLinks.cjs.js.map +1 -1
- package/dist/SocialLinks.es.js +132 -74
- package/dist/SocialLinks.es.js.map +1 -1
- package/dist/Text.cjs.js.map +1 -1
- package/dist/Text.es.js.map +1 -1
- package/dist/Video.cjs.js +1 -1
- package/dist/Video.cjs.js.map +1 -1
- package/dist/Video.es.js +1 -1
- package/dist/Video.es.js.map +1 -1
- package/dist/breakpoints.cjs.js +223 -0
- package/dist/breakpoints.cjs.js.map +1 -0
- package/dist/breakpoints.es.js +206 -0
- package/dist/breakpoints.es.js.map +1 -0
- package/dist/builder.cjs.js +1 -1
- package/dist/builder.es.js +1 -1
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +1 -1
- package/dist/control-serialization.cjs.js +1 -1
- package/dist/control-serialization.es.js +1 -1
- package/dist/controls.cjs.js +1 -1
- package/dist/controls.es.js +1 -1
- package/dist/index.cjs.js +15 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs2.js +1 -1
- package/dist/index.cjs2.js.map +1 -1
- package/dist/index.cjs3.js.map +1 -1
- package/dist/index.cjs6.js.map +1 -1
- package/dist/index.cjs7.js.map +1 -1
- package/dist/index.cjs8.js +1 -1
- package/dist/index.cjs8.js.map +1 -1
- package/dist/index.cjs9.js +1 -1
- package/dist/index.cjs9.js.map +1 -1
- package/dist/index.es.js +15 -5
- package/dist/index.es.js.map +1 -1
- package/dist/index.es2.js +1 -1
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es3.js.map +1 -1
- package/dist/index.es6.js.map +1 -1
- package/dist/index.es7.js.map +1 -1
- package/dist/index.es8.js +1 -1
- package/dist/index.es8.js.map +1 -1
- package/dist/index.es9.js +1 -1
- package/dist/index.es9.js.map +1 -1
- package/dist/main.cjs.js +1 -1
- package/dist/main.es.js +1 -1
- package/dist/next.cjs.js +1 -1
- package/dist/next.es.js +1 -1
- package/dist/prop-controllers.cjs.js +1 -1
- package/dist/prop-controllers.es.js +1 -1
- package/dist/react-page.cjs.js +192 -6
- package/dist/react-page.cjs.js.map +1 -1
- package/dist/react-page.es.js +198 -12
- package/dist/react-page.es.js.map +1 -1
- package/dist/react.cjs.js +1 -1
- package/dist/react.es.js +1 -1
- package/dist/slate.cjs.js +1 -1
- package/dist/slate.es.js +1 -1
- package/dist/state/breakpoints.cjs.js +17 -219
- package/dist/state/breakpoints.cjs.js.map +1 -1
- package/dist/state/breakpoints.es.js +2 -205
- package/dist/state/breakpoints.es.js.map +1 -1
- package/dist/toText.cjs.js +1 -1
- package/dist/toText.es.js +1 -1
- package/dist/types/src/components/builtin/Form/components/Field/components/PlaceholderTableField/index.d.ts +1 -0
- package/dist/types/src/components/builtin/Form/components/Field/components/PlaceholderTableField/index.d.ts.map +1 -1
- package/dist/types/src/components/builtin/Form/components/Field/index.d.ts +1 -0
- package/dist/types/src/components/builtin/Form/components/Field/index.d.ts.map +1 -1
- package/dist/types/src/components/builtin/Form/components/Spinner/index.d.ts +1 -0
- package/dist/types/src/components/builtin/Form/components/Spinner/index.d.ts.map +1 -1
- package/dist/types/src/components/builtin/Navigation/components/LinksPlaceholder/index.d.ts +1 -0
- package/dist/types/src/components/builtin/Navigation/components/LinksPlaceholder/index.d.ts.map +1 -1
- package/dist/types/src/components/builtin/Navigation/components/MobileMenu/index.d.ts +1 -0
- package/dist/types/src/components/builtin/Navigation/components/MobileMenu/index.d.ts.map +1 -1
- package/dist/types/src/components/builtin/SocialLinks/components/SocialLinksPlaceholder/index.d.ts +1 -0
- package/dist/types/src/components/builtin/SocialLinks/components/SocialLinksPlaceholder/index.d.ts.map +1 -1
- package/dist/types/src/components/builtin/SocialLinks/options.d.ts +10 -0
- package/dist/types/src/components/builtin/SocialLinks/options.d.ts.map +1 -1
- package/dist/types/src/components/page/Page.d.ts +1 -0
- package/dist/types/src/components/page/Page.d.ts.map +1 -1
- package/dist/types/src/components/shared/BackgroundsContainer/components/BackgroundVideo/index.d.ts +1 -0
- package/dist/types/src/components/shared/BackgroundsContainer/components/BackgroundVideo/index.d.ts.map +1 -1
- package/dist/types/src/components/shared/BackgroundsContainer/components/Backgrounds/index.d.ts +1 -0
- package/dist/types/src/components/shared/BackgroundsContainer/components/Backgrounds/index.d.ts.map +1 -1
- package/dist/types/src/controls/control.d.ts.map +1 -1
- package/dist/types/src/controls/rich-text/__tests__/copy.test.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text/__tests__/dto.test.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text/__tests__/introspection.test.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text-v2/__tests__/copy.test.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text-v2/__tests__/fixtures/rearranged.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text-v2/__tests__/fixtures/simple.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text-v2/__tests__/introspection.test.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text-v2/__tests__/translation.test.d.ts.map +1 -0
- package/dist/types/src/controls/rich-text-v2/translation.d.ts +1 -1
- package/dist/types/src/controls/rich-text-v2/translation.d.ts.map +1 -1
- package/dist/types/src/next/client.d.ts.map +1 -1
- package/dist/types/src/prop-controllers/descriptors.d.ts +1 -1
- package/dist/types/src/prop-controllers/descriptors.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/components/render-hook.d.ts +1 -0
- package/dist/types/src/runtimes/react/components/render-hook.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/controls/control.d.ts +1 -0
- package/dist/types/src/runtimes/react/controls/control.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/controls/list.d.ts +1 -0
- package/dist/types/src/runtimes/react/controls/list.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/controls/shape.d.ts +1 -0
- package/dist/types/src/runtimes/react/controls/shape.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/controls/style-v2.d.ts +1 -0
- package/dist/types/src/runtimes/react/controls/style-v2.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/controls.d.ts +1 -0
- package/dist/types/src/runtimes/react/controls.d.ts.map +1 -1
- package/dist/types/src/runtimes/react/find-dom-node.d.ts.map +1 -1
- package/dist/types/src/slate/TypographyPlugin/index.d.ts +4 -1
- package/dist/types/src/slate/TypographyPlugin/index.d.ts.map +1 -1
- package/dist/types/src/slate/TypographyPlugin/normalizeSimilarText.d.ts +10 -0
- package/dist/types/src/slate/TypographyPlugin/normalizeSimilarText.d.ts.map +1 -0
- package/dist/types/src/slate/TypographyPlugin/normalizeTypographyDown.d.ts +29 -0
- package/dist/types/src/slate/TypographyPlugin/normalizeTypographyDown.d.ts.map +1 -0
- package/dist/types/src/slate/TypographyPlugin/normalizeTypographyUp.d.ts +4 -0
- package/dist/types/src/slate/TypographyPlugin/normalizeTypographyUp.d.ts.map +1 -0
- package/dist/types/src/slate/types.d.ts +19 -2
- package/dist/types/src/slate/types.d.ts.map +1 -1
- package/dist/types/src/state/makeswift-api-client.d.ts.map +1 -1
- package/dist/useMediaQuery.cjs.js +1 -1
- package/dist/useMediaQuery.es.js +1 -1
- package/package.json +12 -13
- package/dist/types/src/controls/rich-text/__test__/copy.test.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text/__test__/dto.test.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text/__test__/introspection.test.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text-v2/__test__/copy.test.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text-v2/__test__/fixtures/rearranged.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text-v2/__test__/fixtures/simple.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text-v2/__test__/introspection.test.d.ts.map +0 -1
- package/dist/types/src/controls/rich-text-v2/__test__/translation.test.d.ts.map +0 -1
- /package/dist/types/src/controls/rich-text/{__test__ → __tests__}/copy.test.d.ts +0 -0
- /package/dist/types/src/controls/rich-text/{__test__ → __tests__}/dto.test.d.ts +0 -0
- /package/dist/types/src/controls/rich-text/{__test__ → __tests__}/introspection.test.d.ts +0 -0
- /package/dist/types/src/controls/rich-text-v2/{__test__ → __tests__}/copy.test.d.ts +0 -0
- /package/dist/types/src/controls/rich-text-v2/{__test__ → __tests__}/fixtures/rearranged.d.ts +0 -0
- /package/dist/types/src/controls/rich-text-v2/{__test__ → __tests__}/fixtures/simple.d.ts +0 -0
- /package/dist/types/src/controls/rich-text-v2/{__test__ → __tests__}/introspection.test.d.ts +0 -0
- /package/dist/types/src/controls/rich-text-v2/{__test__ → __tests__}/translation.test.d.ts +0 -0
package/dist/index.es9.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es9.js","sources":["../src/runtimes/react/controls/rich-text-v2/EditableTextV2/useSyncDOMSelection.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/useRemoteChanges.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.tsx"],"sourcesContent":["import { Editor, Range as SlateRange } from 'slate'\nimport { useIsomorphicLayoutEffect } from '../../../../../components/hooks/useIsomorphicLayoutEffect'\nimport { MutableRefObject } from 'react'\nimport { ReactEditor } from 'slate-react'\n\n/**\n * Clicking outside of the host blurs our `<Editable />`.\n * `<Editable />` only updates the DOM's selection to match slate when it is focused.\n * In the case of a panel being clicked this hook updates the DOM selection to match slate.\n */\nexport function useSyncDOMSelection(editor: Editor, isEnabled: MutableRefObject<boolean>) {\n useIsomorphicLayoutEffect(() => {\n if (!isEnabled.current || editor.selection == null || ReactEditor.isFocused(editor)) return\n try {\n const root = ReactEditor.findDocumentOrShadowRoot(editor) as Document\n const domSelection = root.getSelection()\n const newDomRange: Range | null = ReactEditor.toDOMRange(editor, editor.selection)\n\n if (newDomRange) {\n if (SlateRange.isBackward(editor.selection!)) {\n domSelection?.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset,\n )\n } else {\n domSelection?.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset,\n )\n }\n } else {\n domSelection?.removeAllRanges()\n }\n } catch (e) {\n console.error(e)\n }\n })\n}\n","import { RenderElementProps } from 'slate-react'\nimport { RichTextV2ControlDefinition } from '../../../../../controls'\nimport { ControlValue } from '../../control'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\ntype RichTextV2ElementProps = RenderElementProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Element({ definition, plugins, ...props }: RichTextV2ElementProps) {\n function initialRenderElement(props: RenderElementProps) {\n return props.children\n }\n\n const renderElement = plugins.reduce(\n (renderFn, plugin) => (props: RenderElementProps) => {\n const { control, renderElement } = plugin\n\n if (renderElement == null) return renderFn(props)\n\n if (control == null || control.getElementValue == null)\n return renderElement(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getElementValue(props.element)}>\n {value => renderElement(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderElement,\n )\n\n return renderElement(props)\n}\n","import { RenderLeafProps } from 'slate-react'\nimport { RichTextV2ControlDefinition } from '../../../../../controls'\nimport { ControlValue } from '../../control'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\ntype RichTextV2LeafProps = RenderLeafProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Leaf({ definition, plugins, ...props }: RichTextV2LeafProps) {\n function initialRenderLeaf({ attributes, children, leaf }: RenderLeafProps) {\n return (\n <span className={leaf.className} {...attributes}>\n {children}\n </span>\n )\n }\n\n const renderLeaf = plugins.reduce(\n (renderFn, plugin) => (props: RenderLeafProps) => {\n const { control, renderLeaf } = plugin\n\n if (control?.definition == null || renderLeaf == null) return renderFn(props)\n\n if (control.getLeafValue == null) return renderLeaf(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getLeafValue(props.leaf)}>\n {value => renderLeaf(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderLeaf,\n )\n\n return renderLeaf(props)\n}\n","import { useEffect } from 'react'\nimport { Editor } from 'slate'\nimport { RichTextV2ControlData, richTextV2DataToDescendents } from '../../../../../controls'\nimport { LocalChange } from '../../../../../slate'\nimport { useIsInBuilder } from '../../..'\n\n// From the component point of view we can't know if the change came from an action or a undo/redo\n// So we diff the time and force updates on actions that occured over a second ago.\nfunction isChangeWithinPreviousSec(change?: LocalChange) {\n return performance.now() - (change?.time ?? 0) < 1000\n}\n\nexport function useSyncRemoteChanges(editor: Editor, data?: RichTextV2ControlData) {\n const isInBuilder = useIsInBuilder()\n\n useEffect(() => {\n if (\n !isChangeWithinPreviousSec(editor.localChanges.get(data?.key ?? '')) &&\n data &&\n isInBuilder\n ) {\n editor.children = richTextV2DataToDescendents(data)\n editor.selection = editor?.localChanges.get(data.key)?.selection ?? null\n editor.onChange()\n }\n }, [editor, data])\n}\n","import { Descendant } from 'slate'\nimport { BlockType } from '../../../../../slate'\nimport { getBaseBreakpoint, DefaultBreakpointID } from '../../../../../state/modules/breakpoints'\nimport { useBreakpoints } from '../../..'\nimport { useMemo } from 'react'\nimport { RichTextV2ControlDefinition, RichTextV2Mode } from '../../../../../controls'\n\nexport function usePresetValue(definition: RichTextV2ControlDefinition): Descendant[] {\n const breakpoints = useBreakpoints()\n return useMemo(\n () => [\n {\n type: BlockType.Default,\n children: [\n {\n text: definition.config.defaultValue ?? '',\n ...(definition.config.mode === RichTextV2Mode.Inline\n ? {}\n : {\n typography: {\n style: [\n {\n deviceId: getBaseBreakpoint(breakpoints).id,\n value: {\n fontWeight: 400,\n fontSize: { value: 18, unit: 'px' },\n lineHeight: 1.5,\n },\n },\n ...(breakpoints.some(({ id }) => id === DefaultBreakpointID.Mobile)\n ? [\n {\n deviceId: DefaultBreakpointID.Mobile,\n value: { fontSize: { value: 16, unit: 'px' } },\n },\n ]\n : []),\n ],\n },\n }),\n },\n ],\n },\n ],\n [definition.config.mode, definition.config.defaultValue, breakpoints],\n )\n}\n\nexport const defaultValue = [\n {\n type: BlockType.Default,\n children: [\n {\n text: '',\n },\n ],\n },\n]\n","import {\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createEditor } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport {\n withReact,\n ReactEditor,\n RenderElementProps,\n RenderLeafProps,\n Slate,\n Editable,\n} from 'slate-react'\n\nimport {\n RichTextV2Control,\n RichTextV2ControlData,\n RichTextV2ControlDefinition,\n RichTextV2Mode,\n} from '../../../../../controls'\nimport { useBuilderEditMode } from '../../..'\nimport { BuilderEditMode } from '../../../../../state/modules/builder-edit-mode'\nimport { pollBoxModel } from '../../../poll-box-model'\nimport {\n BlockPlugin,\n InlineModePlugin,\n InlinePlugin,\n LinkPlugin,\n TextAlignPlugin,\n TypographyPlugin,\n withBuilder,\n withLocalChanges,\n} from '../../../../../slate'\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { RichTextV2Element } from './render-element'\nimport { RichTextV2Leaf } from './render-leaf'\nimport { richTextV2DataToDescendents } from '../../../../../controls/rich-text-v2/dto'\nimport { useSyncRemoteChanges } from './useRemoteChanges'\nimport { defaultValue, usePresetValue } from './usePresetValue'\n\nexport type RichTextV2ControlValue = ReactNode\n\nexport type Descriptors = { text?: RichTextV2ControlDefinition }\n\ntype Props = {\n text?: RichTextV2ControlData\n definition: RichTextV2ControlDefinition\n control: RichTextV2Control | null\n}\n\nexport function EditableTextV2({ text, definition, control }: Props) {\n const plugins = useMemo(() => {\n const plugins = [\n /**\n * TODO: we are manually referencing our default plugins for each mode here because\n * Referencing the real LinkPlugin causes a circular dependency.\n * When circular dependencies calm down we should update the plugin definition to use real plugins,\n * and just use the plugins that are defined by our config.\n */\n // ...(definition?.config?.plugins ?? []),\n ...(definition?.config?.mode === RichTextV2Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n ]\n return plugins\n }, [definition])\n\n const [editor] = useState(() =>\n plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n withLocalChanges(withBuilder(withReact(createEditor()))),\n ),\n )\n\n useEffect(() => {\n if (control == null) return\n\n const element = ReactEditor.toDOMNode(editor, editor)\n return pollBoxModel({\n element,\n onBoxModelChange: boxModel => control.changeBoxModel(boxModel),\n })\n }, [editor, control])\n\n // ------ Preserving selection ------\n\n const isPreservingFocus = useRef(false)\n useSyncDOMSelection(editor, isPreservingFocus)\n const editMode = useBuilderEditMode()\n\n useEffect(() => {\n /**\n * This is required because clicking on the overlay has `relatedTarget` null just like the sidebar, but\n * - in the case of the overlay we switch to BUILD mode\n * - in the case of the sidebar we preserve the selection\n */\n if (editMode !== BuilderEditMode.CONTENT) {\n isPreservingFocus.current = false\n ReactEditor.deselect(editor)\n }\n }, [editMode])\n\n // ------ Syncing remote changes ------\n\n useSyncRemoteChanges(editor, text)\n\n // ------ Default value ------\n\n const presetValue = usePresetValue(definition)\n\n const initialValue = useMemo(\n () => (text && richTextV2DataToDescendents(text)) ?? presetValue,\n [text, presetValue],\n )\n\n useEffect(() => {\n control?.setEditor(editor)\n control?.setDefaultValue(defaultValue)\n }, [control, editor])\n\n /**\n * When initialValue is set to the default value we need to trigger an local change so that the sidebar updates and so the data is saved\n */\n useEffect(() => {\n if (initialValue === presetValue) {\n control?.onLocalUserChange()\n }\n }, [control, initialValue, presetValue])\n\n // ------ Rendering ------\n\n const renderElement = useCallback(\n (props: RenderElementProps) => {\n return <RichTextV2Element {...props} definition={definition} plugins={plugins} />\n },\n [plugins, definition],\n )\n\n const renderLeaf = useCallback(\n (props: RenderLeafProps) => {\n return <RichTextV2Leaf {...props} definition={definition} plugins={plugins} />\n },\n [plugins, definition],\n )\n\n // ------ Event handlers ------\n\n const handleFocus = useCallback(() => {\n isPreservingFocus.current = true\n control?.select()\n }, [control])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return control?.redo()\n if (isHotkey('mod+z', e)) return control?.undo()\n if (isHotkey('escape')(e)) {\n isPreservingFocus.current = false\n ReactEditor.blur(editor)\n control?.switchToBuildMode()\n }\n\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n }\n\n plugins.forEach(plugin => plugin?.onKeyDown?.(e, editor))\n },\n [control, plugins, editor, editMode],\n )\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n e.preventDefault()\n }\n },\n [control, editor, editMode],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n if (editMode === BuilderEditMode.CONTENT) e.stopPropagation()\n },\n [editMode],\n )\n\n const handleBlur = useCallback((e: FocusEvent) => {\n // outside of iframe (overlay, sidebar, etc)\n if (e.relatedTarget == null) return\n // another text\n if (e.relatedTarget?.getAttribute('contenteditable') === 'true')\n isPreservingFocus.current = false\n }, [])\n\n return (\n <Slate editor={editor} value={initialValue}>\n <Editable\n renderLeaf={renderLeaf}\n renderElement={renderElement}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onClick={handleClick}\n onBlur={handleBlur}\n readOnly={editMode !== BuilderEditMode.CONTENT}\n placeholder=\"Write some text...\"\n />\n </Slate>\n )\n}\n\nexport default EditableTextV2\n"],"names":["editor","isEnabled","useIsomorphicLayoutEffect","current","selection","ReactEditor","isFocused","root","findDocumentOrShadowRoot","domSelection","getSelection","newDomRange","toDOMRange","SlateRange","isBackward","setBaseAndExtent","endContainer","endOffset","startContainer","startOffset","removeAllRanges","e","console","error","definition","plugins","props","children","renderElement","reduce","renderFn","plugin","control","getElementValue","undefined","element","value","initialRenderElement","attributes","leaf","className","renderLeaf","getLeafValue","initialRenderLeaf","change","performance","now","time","data","isInBuilder","useIsInBuilder","useEffect","isChangeWithinPreviousSec","localChanges","get","key","richTextV2DataToDescendents","onChange","breakpoints","useBreakpoints","useMemo","type","BlockType","Default","text","config","defaultValue","mode","RichTextV2Mode","Inline","typography","style","deviceId","getBaseBreakpoint","id","fontWeight","fontSize","unit","lineHeight","some","DefaultBreakpointID","Mobile","InlineModePlugin","BlockPlugin","TypographyPlugin","TextAlignPlugin","InlinePlugin","LinkPlugin","useState","reduceRight","withPlugin","withLocalChanges","withBuilder","withReact","createEditor","toDOMNode","pollBoxModel","onBoxModelChange","boxModel","changeBoxModel","isPreservingFocus","useRef","useSyncDOMSelection","editMode","useBuilderEditMode","BuilderEditMode","CONTENT","deselect","useSyncRemoteChanges","presetValue","usePresetValue","initialValue","setEditor","setDefaultValue","onLocalUserChange","useCallback","handleFocus","select","handleKeyDown","isHotkey","redo","undo","blur","switchToBuildMode","stopPropagation","forEach","onKeyDown","handleKeyUp","preventDefault","handleClick","handleBlur","relatedTarget","getAttribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es9.js","sources":["../src/runtimes/react/controls/rich-text-v2/EditableTextV2/useSyncDOMSelection.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-element.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/render-leaf.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/useRemoteChanges.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.tsx","../src/runtimes/react/controls/rich-text-v2/EditableTextV2/editable-text-v2.tsx"],"sourcesContent":["import { Editor, Range as SlateRange } from 'slate'\nimport { useIsomorphicLayoutEffect } from '../../../../../components/hooks/useIsomorphicLayoutEffect'\nimport { MutableRefObject } from 'react'\nimport { ReactEditor } from 'slate-react'\n\n/**\n * Clicking outside of the host blurs our `<Editable />`.\n * `<Editable />` only updates the DOM's selection to match slate when it is focused.\n * In the case of a panel being clicked this hook updates the DOM selection to match slate.\n */\nexport function useSyncDOMSelection(editor: Editor, isEnabled: MutableRefObject<boolean>) {\n useIsomorphicLayoutEffect(() => {\n if (!isEnabled.current || editor.selection == null || ReactEditor.isFocused(editor)) return\n try {\n const root = ReactEditor.findDocumentOrShadowRoot(editor) as Document\n const domSelection = root.getSelection()\n const newDomRange: Range | null = ReactEditor.toDOMRange(editor, editor.selection)\n\n if (newDomRange) {\n if (SlateRange.isBackward(editor.selection!)) {\n domSelection?.setBaseAndExtent(\n newDomRange.endContainer,\n newDomRange.endOffset,\n newDomRange.startContainer,\n newDomRange.startOffset,\n )\n } else {\n domSelection?.setBaseAndExtent(\n newDomRange.startContainer,\n newDomRange.startOffset,\n newDomRange.endContainer,\n newDomRange.endOffset,\n )\n }\n } else {\n domSelection?.removeAllRanges()\n }\n } catch (e) {\n console.error(e)\n }\n })\n}\n","import { RenderElementProps } from 'slate-react'\nimport { RichTextV2ControlDefinition } from '../../../../../controls'\nimport { ControlValue } from '../../control'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\ntype RichTextV2ElementProps = RenderElementProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Element({ definition, plugins, ...props }: RichTextV2ElementProps) {\n function initialRenderElement(props: RenderElementProps) {\n return props.children\n }\n\n const renderElement = plugins.reduce(\n (renderFn, plugin) => (props: RenderElementProps) => {\n const { control, renderElement } = plugin\n\n if (renderElement == null) return renderFn(props)\n\n if (control == null || control.getElementValue == null)\n return renderElement(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getElementValue(props.element)}>\n {value => renderElement(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderElement,\n )\n\n return renderElement(props)\n}\n","import { RenderLeafProps } from 'slate-react'\nimport { RichTextV2ControlDefinition } from '../../../../../controls'\nimport { ControlValue } from '../../control'\nimport { RichTextV2Plugin } from '../../../../../controls/rich-text-v2/plugin'\n\ntype RichTextV2LeafProps = RenderLeafProps & {\n definition: RichTextV2ControlDefinition\n plugins: RichTextV2Plugin[]\n}\n\nexport function RichTextV2Leaf({ definition, plugins, ...props }: RichTextV2LeafProps) {\n function initialRenderLeaf({ attributes, children, leaf }: RenderLeafProps) {\n return (\n <span className={leaf.className} {...attributes}>\n {children}\n </span>\n )\n }\n\n const renderLeaf = plugins.reduce(\n (renderFn, plugin) => (props: RenderLeafProps) => {\n const { control, renderLeaf } = plugin\n\n if (control?.definition == null || renderLeaf == null) return renderFn(props)\n\n if (control.getLeafValue == null) return renderLeaf(renderFn, undefined)(props)\n\n return (\n <ControlValue definition={control.definition} data={control.getLeafValue(props.leaf)}>\n {value => renderLeaf(renderFn, value)(props)}\n </ControlValue>\n )\n },\n initialRenderLeaf,\n )\n\n return renderLeaf(props)\n}\n","import { useEffect } from 'react'\nimport { Editor } from 'slate'\nimport { RichTextV2ControlData, richTextV2DataToDescendents } from '../../../../../controls'\nimport { LocalChange } from '../../../../../slate'\nimport { useIsInBuilder } from '../../..'\n\n// From the component point of view we can't know if the change came from an action or a undo/redo\n// So we diff the time and force updates on actions that occured over a second ago.\nfunction isChangeWithinPreviousSec(change?: LocalChange) {\n return performance.now() - (change?.time ?? 0) < 1000\n}\n\nexport function useSyncRemoteChanges(editor: Editor, data?: RichTextV2ControlData) {\n const isInBuilder = useIsInBuilder()\n\n useEffect(() => {\n if (\n !isChangeWithinPreviousSec(editor.localChanges.get(data?.key ?? '')) &&\n data &&\n isInBuilder\n ) {\n editor.children = richTextV2DataToDescendents(data)\n editor.selection = editor?.localChanges.get(data.key)?.selection ?? null\n editor.onChange()\n }\n }, [editor, data])\n}\n","import { Descendant } from 'slate'\nimport { BlockType } from '../../../../../slate'\nimport { getBaseBreakpoint, DefaultBreakpointID } from '../../../../../state/modules/breakpoints'\nimport { useBreakpoints } from '../../..'\nimport { useMemo } from 'react'\nimport { RichTextV2ControlDefinition, RichTextV2Mode } from '../../../../../controls'\n\nexport function usePresetValue(definition: RichTextV2ControlDefinition): Descendant[] {\n const breakpoints = useBreakpoints()\n return useMemo(\n () => [\n {\n type: BlockType.Default,\n children: [\n {\n text: definition.config.defaultValue ?? '',\n ...(definition.config.mode === RichTextV2Mode.Inline\n ? {}\n : {\n typography: {\n style: [\n {\n deviceId: getBaseBreakpoint(breakpoints).id,\n value: {\n fontWeight: 400,\n fontSize: { value: 18, unit: 'px' },\n lineHeight: 1.5,\n },\n },\n ...(breakpoints.some(({ id }) => id === DefaultBreakpointID.Mobile)\n ? [\n {\n deviceId: DefaultBreakpointID.Mobile,\n value: { fontSize: { value: 16, unit: 'px' } },\n },\n ]\n : []),\n ],\n },\n }),\n },\n ],\n },\n ],\n [definition.config.mode, definition.config.defaultValue, breakpoints],\n )\n}\n\nexport const defaultValue = [\n {\n type: BlockType.Default,\n children: [\n {\n text: '',\n },\n ],\n },\n]\n","import {\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createEditor } from 'slate'\nimport isHotkey from 'is-hotkey'\nimport {\n withReact,\n ReactEditor,\n RenderElementProps,\n RenderLeafProps,\n Slate,\n Editable,\n} from 'slate-react'\n\nimport {\n RichTextV2Control,\n RichTextV2ControlData,\n RichTextV2ControlDefinition,\n RichTextV2Mode,\n} from '../../../../../controls'\nimport { useBuilderEditMode } from '../../..'\nimport { BuilderEditMode } from '../../../../../state/modules/builder-edit-mode'\nimport { pollBoxModel } from '../../../poll-box-model'\nimport {\n BlockPlugin,\n InlineModePlugin,\n InlinePlugin,\n LinkPlugin,\n TextAlignPlugin,\n TypographyPlugin,\n withBuilder,\n withLocalChanges,\n} from '../../../../../slate'\nimport { useSyncDOMSelection } from './useSyncDOMSelection'\nimport { RichTextV2Element } from './render-element'\nimport { RichTextV2Leaf } from './render-leaf'\nimport { richTextV2DataToDescendents } from '../../../../../controls/rich-text-v2/dto'\nimport { useSyncRemoteChanges } from './useRemoteChanges'\nimport { defaultValue, usePresetValue } from './usePresetValue'\n\nexport type RichTextV2ControlValue = ReactNode\n\nexport type Descriptors = { text?: RichTextV2ControlDefinition }\n\ntype Props = {\n text?: RichTextV2ControlData\n definition: RichTextV2ControlDefinition\n control: RichTextV2Control | null\n}\n\nexport function EditableTextV2({ text, definition, control }: Props) {\n const plugins = useMemo(() => {\n const plugins = [\n /**\n * TODO: we are manually referencing our default plugins for each mode here because\n * Referencing the real LinkPlugin causes a circular dependency.\n * When circular dependencies calm down we should update the plugin definition to use real plugins,\n * and just use the plugins that are defined by our config.\n */\n // ...(definition?.config?.plugins ?? []),\n ...(definition?.config?.mode === RichTextV2Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n ]\n return plugins\n }, [definition])\n\n const [editor] = useState(() =>\n plugins.reduceRight(\n (editor, plugin) => plugin?.withPlugin?.(editor) ?? editor,\n withLocalChanges(withBuilder(withReact(createEditor()))),\n ),\n )\n\n useEffect(() => {\n if (control == null) return\n\n const element = ReactEditor.toDOMNode(editor, editor)\n return pollBoxModel({\n element,\n onBoxModelChange: boxModel => control.changeBoxModel(boxModel),\n })\n }, [editor, control])\n\n // ------ Preserving selection ------\n\n const isPreservingFocus = useRef(false)\n useSyncDOMSelection(editor, isPreservingFocus)\n const editMode = useBuilderEditMode()\n\n useEffect(() => {\n /**\n * This is required because clicking on the overlay has `relatedTarget` null just like the sidebar, but\n * - in the case of the overlay we switch to BUILD mode\n * - in the case of the sidebar we preserve the selection\n */\n if (editMode !== BuilderEditMode.CONTENT) {\n isPreservingFocus.current = false\n ReactEditor.deselect(editor)\n }\n }, [editMode])\n\n // ------ Syncing remote changes ------\n\n useSyncRemoteChanges(editor, text)\n\n // ------ Default value ------\n\n const presetValue = usePresetValue(definition)\n\n const initialValue = useMemo(\n () => (text && richTextV2DataToDescendents(text)) ?? presetValue,\n [text, presetValue],\n )\n\n useEffect(() => {\n control?.setEditor(editor)\n control?.setDefaultValue(defaultValue)\n }, [control, editor])\n\n /**\n * When initialValue is set to the default value we need to trigger an local change so that the sidebar updates and so the data is saved\n */\n useEffect(() => {\n if (initialValue === presetValue) {\n control?.onLocalUserChange()\n }\n }, [control, initialValue, presetValue])\n\n // ------ Rendering ------\n\n const renderElement = useCallback(\n (props: RenderElementProps) => {\n return <RichTextV2Element {...props} definition={definition} plugins={plugins} />\n },\n [plugins, definition],\n )\n\n const renderLeaf = useCallback(\n (props: RenderLeafProps) => {\n return <RichTextV2Leaf {...props} definition={definition} plugins={plugins} />\n },\n [plugins, definition],\n )\n\n // ------ Event handlers ------\n\n const handleFocus = useCallback(() => {\n isPreservingFocus.current = true\n control?.select()\n }, [control])\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isHotkey('mod+shift+z', e)) return control?.redo()\n if (isHotkey('mod+z', e)) return control?.undo()\n if (isHotkey('escape')(e)) {\n isPreservingFocus.current = false\n ReactEditor.blur(editor)\n control?.switchToBuildMode()\n }\n\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n }\n\n plugins.forEach(plugin => plugin?.onKeyDown?.(e, editor))\n },\n [control, plugins, editor, editMode],\n )\n\n const handleKeyUp = useCallback(\n (e: KeyboardEvent) => {\n if (editMode === BuilderEditMode.CONTENT) {\n e.stopPropagation()\n e.preventDefault()\n }\n },\n [control, editor, editMode],\n )\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n if (editMode === BuilderEditMode.CONTENT) e.stopPropagation()\n },\n [editMode],\n )\n\n const handleBlur = useCallback((e: FocusEvent) => {\n // outside of iframe (overlay, sidebar, etc)\n if (e.relatedTarget == null) return\n // another text\n if (e.relatedTarget?.getAttribute('contenteditable') === 'true')\n isPreservingFocus.current = false\n }, [])\n\n return (\n <Slate editor={editor} value={initialValue}>\n <Editable\n renderLeaf={renderLeaf}\n renderElement={renderElement}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onClick={handleClick}\n onBlur={handleBlur}\n readOnly={editMode !== BuilderEditMode.CONTENT}\n placeholder=\"Write some text...\"\n />\n </Slate>\n )\n}\n\nexport default EditableTextV2\n"],"names":["editor","isEnabled","useIsomorphicLayoutEffect","current","selection","ReactEditor","isFocused","root","findDocumentOrShadowRoot","domSelection","getSelection","newDomRange","toDOMRange","SlateRange","isBackward","setBaseAndExtent","endContainer","endOffset","startContainer","startOffset","removeAllRanges","e","console","error","definition","plugins","props","children","renderElement","reduce","renderFn","plugin","control","getElementValue","undefined","element","value","initialRenderElement","attributes","leaf","className","renderLeaf","getLeafValue","initialRenderLeaf","change","performance","now","time","data","isInBuilder","useIsInBuilder","useEffect","isChangeWithinPreviousSec","localChanges","get","key","richTextV2DataToDescendents","onChange","breakpoints","useBreakpoints","useMemo","type","BlockType","Default","text","config","defaultValue","mode","RichTextV2Mode","Inline","typography","style","deviceId","getBaseBreakpoint","id","fontWeight","fontSize","unit","lineHeight","some","DefaultBreakpointID","Mobile","InlineModePlugin","BlockPlugin","TypographyPlugin","TextAlignPlugin","InlinePlugin","LinkPlugin","useState","reduceRight","withPlugin","withLocalChanges","withBuilder","withReact","createEditor","toDOMNode","pollBoxModel","onBoxModelChange","boxModel","changeBoxModel","isPreservingFocus","useRef","useSyncDOMSelection","editMode","useBuilderEditMode","BuilderEditMode","CONTENT","deselect","useSyncRemoteChanges","presetValue","usePresetValue","initialValue","setEditor","setDefaultValue","onLocalUserChange","useCallback","handleFocus","select","handleKeyDown","isHotkey","redo","undo","blur","switchToBuildMode","stopPropagation","forEach","onKeyDown","handleKeyUp","preventDefault","handleClick","handleBlur","relatedTarget","getAttribute"],"mappings":"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"}
|
package/dist/main.cjs.js
CHANGED
package/dist/main.es.js
CHANGED
package/dist/next.cjs.js
CHANGED
package/dist/next.es.js
CHANGED
package/dist/react-page.cjs.js
CHANGED
|
@@ -38,7 +38,7 @@ var _c;
|
|
|
38
38
|
var redux = require("redux");
|
|
39
39
|
var thunk = require("redux-thunk");
|
|
40
40
|
var actions = require("./actions.cjs.js");
|
|
41
|
-
var state_breakpoints = require("./
|
|
41
|
+
var state_breakpoints = require("./breakpoints.cjs.js");
|
|
42
42
|
var tsPattern = require("ts-pattern");
|
|
43
43
|
var ipsum = require("corporate-ipsum");
|
|
44
44
|
var slate = require("slate");
|
|
@@ -3615,6 +3615,168 @@ function getValue(editor) {
|
|
|
3615
3615
|
})).map(([node]) => node["typography"]);
|
|
3616
3616
|
return matchingValues;
|
|
3617
3617
|
}
|
|
3618
|
+
function shallowMergeTypographies(commonTypography, typography) {
|
|
3619
|
+
var _a, _b;
|
|
3620
|
+
const devices = [
|
|
3621
|
+
...new Set(commonTypography == null ? void 0 : commonTypography.style.map((node) => node.deviceId).concat((_a = typography == null ? void 0 : typography.style.map((node) => node.deviceId)) != null ? _a : []))
|
|
3622
|
+
];
|
|
3623
|
+
return {
|
|
3624
|
+
id: (_b = commonTypography == null ? void 0 : commonTypography.id) != null ? _b : typography == null ? void 0 : typography.id,
|
|
3625
|
+
style: devices.map((deviceId) => {
|
|
3626
|
+
var _a2, _b2;
|
|
3627
|
+
const commonDevice = commonTypography == null ? void 0 : commonTypography.style.find((s) => s.deviceId === deviceId);
|
|
3628
|
+
const existingDeviceStyle = typography == null ? void 0 : typography.style.find((s) => s.deviceId === deviceId);
|
|
3629
|
+
return {
|
|
3630
|
+
deviceId,
|
|
3631
|
+
value: state_breakpoints.shallowMerge((_a2 = existingDeviceStyle == null ? void 0 : existingDeviceStyle.value) != null ? _a2 : {}, (_b2 = commonDevice == null ? void 0 : commonDevice.value) != null ? _b2 : {})
|
|
3632
|
+
};
|
|
3633
|
+
})
|
|
3634
|
+
};
|
|
3635
|
+
}
|
|
3636
|
+
function normalizeTypographyDown(editor, entry) {
|
|
3637
|
+
const [normalizationNode, normalizationPath] = entry;
|
|
3638
|
+
if (slate.Element.isElement(normalizationNode) && normalizationNode.typography != null && normalizationNode.children.length) {
|
|
3639
|
+
slate.Editor.withoutNormalizing(editor, () => {
|
|
3640
|
+
var _a;
|
|
3641
|
+
slate.Transforms.unsetNodes(editor, TYPOGRAPHY_KEY, { at: normalizationPath });
|
|
3642
|
+
for (let i = 0; i < normalizationNode.children.length; i++) {
|
|
3643
|
+
const resultingTypography = shallowMergeTypographies(normalizationNode.typography, (_a = normalizationNode.children.at(i)) == null ? void 0 : _a.typography);
|
|
3644
|
+
slate.Transforms.setNodes(editor, { typography: resultingTypography }, { at: [...normalizationPath, i] });
|
|
3645
|
+
}
|
|
3646
|
+
});
|
|
3647
|
+
return true;
|
|
3648
|
+
}
|
|
3649
|
+
return false;
|
|
3650
|
+
}
|
|
3651
|
+
function shallowAnd(a, b) {
|
|
3652
|
+
const bKeys = state_breakpoints.keys(b);
|
|
3653
|
+
const aPrime = __spreadValues({}, a);
|
|
3654
|
+
const and = {};
|
|
3655
|
+
bKeys.forEach((key) => {
|
|
3656
|
+
if (deepEqual(aPrime[key], b[key]))
|
|
3657
|
+
and[key] = aPrime[key];
|
|
3658
|
+
});
|
|
3659
|
+
return and;
|
|
3660
|
+
}
|
|
3661
|
+
function shallowAndTypographies(...typographies) {
|
|
3662
|
+
var _a;
|
|
3663
|
+
return {
|
|
3664
|
+
id: typographies.every((typography) => {
|
|
3665
|
+
var _a2;
|
|
3666
|
+
return (typography == null ? void 0 : typography.id) === ((_a2 = typographies.at(0)) == null ? void 0 : _a2.id);
|
|
3667
|
+
}) ? (_a = typographies.at(0)) == null ? void 0 : _a.id : void 0,
|
|
3668
|
+
style: [
|
|
3669
|
+
...new Set(typographies.flatMap((typography) => {
|
|
3670
|
+
var _a2;
|
|
3671
|
+
return (_a2 = typography == null ? void 0 : typography.style.map((node) => node.deviceId)) != null ? _a2 : [];
|
|
3672
|
+
}))
|
|
3673
|
+
].flatMap((deviceId) => {
|
|
3674
|
+
const stylesForThisDevice = typographies.map((typography) => {
|
|
3675
|
+
var _a2;
|
|
3676
|
+
return (_a2 = typography.style.find((s) => s.deviceId === deviceId)) == null ? void 0 : _a2.value;
|
|
3677
|
+
}).filter((typography) => Boolean(typography));
|
|
3678
|
+
if (typographies.length !== stylesForThisDevice.length)
|
|
3679
|
+
return [];
|
|
3680
|
+
const value = stylesForThisDevice.reduce((acc, curr) => {
|
|
3681
|
+
return shallowAnd(acc, curr);
|
|
3682
|
+
}, stylesForThisDevice.at(0));
|
|
3683
|
+
if (value == null || Object.keys(value).length === 0) {
|
|
3684
|
+
return [];
|
|
3685
|
+
}
|
|
3686
|
+
return [
|
|
3687
|
+
{
|
|
3688
|
+
deviceId,
|
|
3689
|
+
value
|
|
3690
|
+
}
|
|
3691
|
+
];
|
|
3692
|
+
})
|
|
3693
|
+
};
|
|
3694
|
+
}
|
|
3695
|
+
function shallowInverseAnd(a, b) {
|
|
3696
|
+
const bKeys = Array.from(/* @__PURE__ */ new Set([...state_breakpoints.keys(b), ...state_breakpoints.keys(a)]));
|
|
3697
|
+
const aPrime = __spreadValues({}, a);
|
|
3698
|
+
const bPrime = __spreadValues({}, b);
|
|
3699
|
+
const xor = {};
|
|
3700
|
+
bKeys.forEach((key) => {
|
|
3701
|
+
if (aPrime[key] == null && bPrime[key] == null || !deepEqual(aPrime[key], bPrime[key]))
|
|
3702
|
+
xor[key] = aPrime[key];
|
|
3703
|
+
});
|
|
3704
|
+
return xor;
|
|
3705
|
+
}
|
|
3706
|
+
function shallowInverseAndTypographies(a, b) {
|
|
3707
|
+
const typography = { style: [] };
|
|
3708
|
+
if ((a == null ? void 0 : a.id) !== b.id) {
|
|
3709
|
+
typography.id = a == null ? void 0 : a.id;
|
|
3710
|
+
}
|
|
3711
|
+
if (a && a.style.length > 0) {
|
|
3712
|
+
const styles = [];
|
|
3713
|
+
for (const style of a.style) {
|
|
3714
|
+
const bDeviceTypography = b.style.find((s) => s.deviceId === style.deviceId);
|
|
3715
|
+
if (bDeviceTypography == null) {
|
|
3716
|
+
styles.push(style);
|
|
3717
|
+
} else {
|
|
3718
|
+
const uniquePropertiesOfA = shallowInverseAnd(style.value, bDeviceTypography.value);
|
|
3719
|
+
if (Object.keys(uniquePropertiesOfA).length > 0) {
|
|
3720
|
+
styles.push({
|
|
3721
|
+
deviceId: style.deviceId,
|
|
3722
|
+
value: uniquePropertiesOfA
|
|
3723
|
+
});
|
|
3724
|
+
}
|
|
3725
|
+
}
|
|
3726
|
+
}
|
|
3727
|
+
typography.style = styles;
|
|
3728
|
+
}
|
|
3729
|
+
return typography;
|
|
3730
|
+
}
|
|
3731
|
+
function isException(node) {
|
|
3732
|
+
return slate.Text.isText(node) && node.text === "";
|
|
3733
|
+
}
|
|
3734
|
+
function normalizeTypographyUp(editor, entry) {
|
|
3735
|
+
const [node, path] = entry;
|
|
3736
|
+
if (slate.Element.isElement(node) && node.children.length) {
|
|
3737
|
+
const typographiesOfChildren = node.children.filter((child) => !isException(child)).map((child) => child.typography);
|
|
3738
|
+
const definedTypographiesOfChildren = typographiesOfChildren.filter((typography) => Boolean(typography));
|
|
3739
|
+
if (typographiesOfChildren.length === definedTypographiesOfChildren.length) {
|
|
3740
|
+
let sharedTypography = shallowAndTypographies(...definedTypographiesOfChildren);
|
|
3741
|
+
if (sharedTypography.style.length > 0 || sharedTypography.id != null) {
|
|
3742
|
+
const rootTypography = shallowMergeTypographies(sharedTypography, node.typography);
|
|
3743
|
+
slate.Editor.withoutNormalizing(editor, () => {
|
|
3744
|
+
var _a, _b;
|
|
3745
|
+
slate.Transforms.setNodes(editor, { typography: rootTypography }, { at: path });
|
|
3746
|
+
for (let i = 0; i < node.children.length; i++) {
|
|
3747
|
+
const typography = shallowInverseAndTypographies((_b = (_a = node.children.at(i)) == null ? void 0 : _a.typography) != null ? _b : { style: [] }, sharedTypography);
|
|
3748
|
+
slate.Transforms.setNodes(editor, { typography }, { at: [...path, i] });
|
|
3749
|
+
}
|
|
3750
|
+
});
|
|
3751
|
+
return true;
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
}
|
|
3755
|
+
return false;
|
|
3756
|
+
}
|
|
3757
|
+
function isTextEqual(a, b) {
|
|
3758
|
+
const _a = a, { text: aText } = _a, aRest = __objRest(_a, ["text"]);
|
|
3759
|
+
const _b = b, { text: bText } = _b, bRest = __objRest(_b, ["text"]);
|
|
3760
|
+
return deepEqual(aRest, bRest);
|
|
3761
|
+
}
|
|
3762
|
+
function normalizeSimilarText(editor, entry) {
|
|
3763
|
+
const [node, path] = entry;
|
|
3764
|
+
if (slate.Text.isText(node))
|
|
3765
|
+
return false;
|
|
3766
|
+
let hasMergedNodes = false;
|
|
3767
|
+
for (let i = node.children.length; i > 0; i--) {
|
|
3768
|
+
const currentNode = slate.Node.get(editor, path);
|
|
3769
|
+
if (slate.Text.isText(currentNode))
|
|
3770
|
+
continue;
|
|
3771
|
+
const child = currentNode.children[i];
|
|
3772
|
+
const prev = currentNode.children[i - 1];
|
|
3773
|
+
if (slate.Text.isText(child) && prev != null && slate.Text.isText(prev) && isTextEqual(child, prev)) {
|
|
3774
|
+
slate.Transforms.mergeNodes(editor, { at: path.concat(i), voids: true });
|
|
3775
|
+
hasMergedNodes = true;
|
|
3776
|
+
}
|
|
3777
|
+
}
|
|
3778
|
+
return hasMergedNodes;
|
|
3779
|
+
}
|
|
3618
3780
|
const TypographyActions = {
|
|
3619
3781
|
setActiveTypographyId,
|
|
3620
3782
|
setActiveTypographyStyle,
|
|
@@ -3628,14 +3790,20 @@ function withTypography(editor) {
|
|
|
3628
3790
|
editor.normalizeNode = (entry) => {
|
|
3629
3791
|
var _a, _b;
|
|
3630
3792
|
const [normalizationNode, normalizationPath] = entry;
|
|
3631
|
-
if (
|
|
3793
|
+
if ("typography" in normalizationNode && ((_a = normalizationNode == null ? void 0 : normalizationNode.typography) == null ? void 0 : _a.id) == null && ((_b = normalizationNode == null ? void 0 : normalizationNode.typography) == null ? void 0 : _b.style.length) === 0) {
|
|
3632
3794
|
slate.Transforms.unsetNodes(editor, TYPOGRAPHY_KEY, { at: normalizationPath });
|
|
3633
3795
|
return;
|
|
3634
3796
|
}
|
|
3635
|
-
if (
|
|
3797
|
+
if ("slice" in normalizationNode && (normalizationNode == null ? void 0 : normalizationNode.slice) != null) {
|
|
3636
3798
|
slate.Transforms.unsetNodes(editor, "slice", { at: normalizationPath });
|
|
3637
3799
|
return;
|
|
3638
3800
|
}
|
|
3801
|
+
if (normalizeSimilarText(editor, entry))
|
|
3802
|
+
return;
|
|
3803
|
+
if (editor.typographyNormalizationDirection === "up" && normalizeTypographyUp(editor, entry))
|
|
3804
|
+
return;
|
|
3805
|
+
if ((editor.typographyNormalizationDirection === "down" || editor.typographyNormalizationDirection == null) && normalizeTypographyDown(editor, entry))
|
|
3806
|
+
return;
|
|
3639
3807
|
normalizeNode(entry);
|
|
3640
3808
|
};
|
|
3641
3809
|
return editor;
|
|
@@ -4002,6 +4170,8 @@ function getInlineOrTextTranslatableData(descendant, path = []) {
|
|
|
4002
4170
|
let string = escapeHtml__default["default"](descendant.text);
|
|
4003
4171
|
if (string === "")
|
|
4004
4172
|
return null;
|
|
4173
|
+
if (descendant.typography === void 0)
|
|
4174
|
+
return string;
|
|
4005
4175
|
return `<span key="${pathToString(path)}">${string}</span>`;
|
|
4006
4176
|
}
|
|
4007
4177
|
const children = descendant.children.map((child, i) => getInlineOrTextTranslatableData(child, [...path, i])).join("");
|
|
@@ -4020,8 +4190,17 @@ function getInlineOrTextTranslatableData(descendant, path = []) {
|
|
|
4020
4190
|
return children;
|
|
4021
4191
|
}
|
|
4022
4192
|
}
|
|
4023
|
-
function getRichTextV2TranslatableData(data) {
|
|
4024
|
-
|
|
4193
|
+
function getRichTextV2TranslatableData(definition2, data) {
|
|
4194
|
+
var _a;
|
|
4195
|
+
const plugins = ((_a = definition2 == null ? void 0 : definition2.config) == null ? void 0 : _a.mode) === RichTextV2Mode.Inline ? [InlineModePlugin()] : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin()];
|
|
4196
|
+
const editor = plugins.reduceRight((editor2, plugin) => {
|
|
4197
|
+
var _a2, _b;
|
|
4198
|
+
return (_b = (_a2 = plugin == null ? void 0 : plugin.withPlugin) == null ? void 0 : _a2.call(plugin, editor2)) != null ? _b : editor2;
|
|
4199
|
+
}, slate.createEditor());
|
|
4200
|
+
editor.children = data.descendants;
|
|
4201
|
+
editor.typographyNormalizationDirection = "up";
|
|
4202
|
+
slate.Editor.normalize(editor, { force: true });
|
|
4203
|
+
return editor.children.reduce((acc, descendant, i) => __spreadValues(__spreadValues({}, acc), getDescendantTranslatableData(descendant, [i])), {});
|
|
4025
4204
|
}
|
|
4026
4205
|
function deserializeTranslationHtmlString(el, translationKey) {
|
|
4027
4206
|
var _a, _b;
|
|
@@ -4066,6 +4245,8 @@ function mergeRichTextV2TranslatedData(definition2, data, translatedData) {
|
|
|
4066
4245
|
return (_b = (_a2 = plugin == null ? void 0 : plugin.withPlugin) == null ? void 0 : _a2.call(plugin, editor)) != null ? _b : editor;
|
|
4067
4246
|
}, slate.createEditor());
|
|
4068
4247
|
sourceEditor.children = data.descendants;
|
|
4248
|
+
sourceEditor.typographyNormalizationDirection = "up";
|
|
4249
|
+
slate.Editor.normalize(sourceEditor, { force: true });
|
|
4069
4250
|
Object.entries(translatedData).reverse().forEach(([blockStringPath, htmlString]) => {
|
|
4070
4251
|
var _c2;
|
|
4071
4252
|
const blockPath = stringToPath(blockStringPath);
|
|
@@ -4074,6 +4255,7 @@ function mergeRichTextV2TranslatedData(definition2, data, translatedData) {
|
|
|
4074
4255
|
const html = parse5.parseFragment(htmlString);
|
|
4075
4256
|
const inlineDescendants = deserializeTranslationHtmlString(html);
|
|
4076
4257
|
targetEditor.children = [{ type: BlockType.Default, children: inlineDescendants }];
|
|
4258
|
+
targetEditor.typographyNormalizationDirection = "neutral";
|
|
4077
4259
|
slate.Editor.normalize(targetEditor, { force: true });
|
|
4078
4260
|
for (const [descendant, absolutePathToTargetNode] of slate.Node.descendants(targetEditor)) {
|
|
4079
4261
|
if (!slate.Text.isText(descendant) && !ElementUtils.isInline(descendant) || descendant.translationKey == null || descendant.translationKey === "") {
|
|
@@ -4100,6 +4282,8 @@ function mergeRichTextV2TranslatedData(definition2, data, translatedData) {
|
|
|
4100
4282
|
slate.Transforms.insertNodes(sourceEditor, translatedChildren, { at: [...blockPath, 0] });
|
|
4101
4283
|
});
|
|
4102
4284
|
});
|
|
4285
|
+
sourceEditor.typographyNormalizationDirection = "down";
|
|
4286
|
+
slate.Editor.normalize(sourceEditor, { force: true });
|
|
4103
4287
|
return __spreadProps(__spreadValues({}, data), { descendants: sourceEditor.children });
|
|
4104
4288
|
}
|
|
4105
4289
|
function copy(definition2, value, context) {
|
|
@@ -4159,7 +4343,7 @@ function getTranslatableData(definition2, data) {
|
|
|
4159
4343
|
const richTextData = data;
|
|
4160
4344
|
if (isRichTextV1Data(richTextData))
|
|
4161
4345
|
return null;
|
|
4162
|
-
return getRichTextV2TranslatableData(richTextData);
|
|
4346
|
+
return getRichTextV2TranslatableData(definition2, richTextData);
|
|
4163
4347
|
case ListControlType:
|
|
4164
4348
|
if (data == null)
|
|
4165
4349
|
return null;
|
|
@@ -4173,6 +4357,8 @@ function getTranslatableData(definition2, data) {
|
|
|
4173
4357
|
}
|
|
4174
4358
|
}
|
|
4175
4359
|
function mergeTranslatedData(definition2, data, translatedData, context) {
|
|
4360
|
+
if (data == null)
|
|
4361
|
+
return data;
|
|
4176
4362
|
switch (definition2.type) {
|
|
4177
4363
|
case Types.TextInput:
|
|
4178
4364
|
case Types.TextArea:
|