@frontify/fondue 12.1.5 → 12.1.7
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/components/RichTextEditor/Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js +23 -21
- package/dist/components/RichTextEditor/Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/Plugins/Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/RichTextEditor.es.js +60 -59
- package/dist/components/RichTextEditor/RichTextEditor.es.js.map +1 -1
- package/dist/components/RichTextEditor/serializer/serializeToHtml.es.js +28 -21
- package/dist/components/RichTextEditor/serializer/serializeToHtml.es.js.map +1 -1
- package/dist/index.cjs.js +5 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +17 -8
- package/dist/index.umd.js +10 -10
- package/dist/index.umd.js.map +1 -1
- package/dist/packages/components/style.css +1 -1
- package/dist/packages/tokens/tailwind.config.js +1 -1
- package/dist/style.css +1 -1
- package/dist/typography/shared/records.es.js +1 -0
- package/dist/typography/shared/records.es.js.map +1 -1
- package/package.json +2 -2
package/dist/components/RichTextEditor/Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js
CHANGED
|
@@ -1,42 +1,44 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var o = (e,
|
|
4
|
-
import { createPluginFactory as
|
|
5
|
-
import { Plugin as
|
|
6
|
-
import { ColumnBreakButton as
|
|
7
|
-
import { onKeyDownColumnBreak as
|
|
8
|
-
import { useColumnBreakHandler as
|
|
9
|
-
const
|
|
10
|
-
class y extends
|
|
11
|
-
constructor(
|
|
1
|
+
var u = Object.defineProperty;
|
|
2
|
+
var l = (e, n, t) => n in e ? u(e, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[n] = t;
|
|
3
|
+
var o = (e, n, t) => (l(e, typeof n != "symbol" ? n + "" : n, t), t);
|
|
4
|
+
import { createPluginFactory as m } from "@udecode/plate-core";
|
|
5
|
+
import { Plugin as a } from "../Plugin.es.js";
|
|
6
|
+
import { ColumnBreakButton as s } from "./ColumnBreakButton/index.es.js";
|
|
7
|
+
import { onKeyDownColumnBreak as r } from "./onKeyDownColumnBreak.es.js";
|
|
8
|
+
import { useColumnBreakHandler as i } from "./useColumnBreakHandler.es.js";
|
|
9
|
+
const c = "breakAfterColumn", g = "normal";
|
|
10
|
+
class y extends a {
|
|
11
|
+
constructor(t) {
|
|
12
12
|
super("break-after-plugin", {
|
|
13
|
-
button:
|
|
14
|
-
...
|
|
13
|
+
button: s,
|
|
14
|
+
...t
|
|
15
15
|
});
|
|
16
16
|
o(this, "columns");
|
|
17
17
|
o(this, "gap");
|
|
18
|
-
this
|
|
18
|
+
o(this, "customClass");
|
|
19
|
+
this.columns = (t == null ? void 0 : t.columns) ?? 1, this.gap = (t == null ? void 0 : t.gap) ?? g, this.customClass = t == null ? void 0 : t.customClass;
|
|
19
20
|
}
|
|
20
21
|
plugins() {
|
|
21
|
-
return [k(this.columns, this.gap)];
|
|
22
|
+
return [k(this.columns, this.gap, this.customClass)];
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
const k = (e, t) =>
|
|
25
|
-
key:
|
|
25
|
+
const k = (e, n, t) => m({
|
|
26
|
+
key: c,
|
|
26
27
|
handlers: {
|
|
27
|
-
onKeyDown:
|
|
28
|
+
onKeyDown: r
|
|
28
29
|
},
|
|
29
|
-
useHooks:
|
|
30
|
+
useHooks: i,
|
|
30
31
|
options: {
|
|
31
32
|
columns: e,
|
|
32
|
-
gap:
|
|
33
|
+
gap: n,
|
|
34
|
+
customClass: t,
|
|
33
35
|
hotkey: ["shift+ctrl+enter"]
|
|
34
36
|
}
|
|
35
37
|
})();
|
|
36
38
|
export {
|
|
37
39
|
y as BreakAfterPlugin,
|
|
38
40
|
g as GAP_DEFAULT,
|
|
39
|
-
|
|
41
|
+
c as KEY_ELEMENT_BREAK_AFTER_COLUMN,
|
|
40
42
|
k as createColumnBreakPlugin
|
|
41
43
|
};
|
|
42
44
|
//# sourceMappingURL=createColumnBreakPlugin.es.js.map
|
package/dist/components/RichTextEditor/Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createColumnBreakPlugin.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/ColumnBreakPlugin/createColumnBreakPlugin.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type PlatePlugin, createPluginFactory } from '@udecode/plate-core';\nimport { type CSSProperties } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"createColumnBreakPlugin.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/ColumnBreakPlugin/createColumnBreakPlugin.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type PlatePlugin, createPluginFactory } from '@udecode/plate-core';\nimport { type CSSProperties } from 'react';\n\nimport { type BreakAfterPluginProps } from '@components/RichTextEditor/Plugins/ColumnBreakPlugin/types';\n\nimport { Plugin } from '../Plugin';\n\nimport { ColumnBreakButton } from './ColumnBreakButton';\nimport { onKeyDownColumnBreak } from './onKeyDownColumnBreak';\nimport { useColumnBreakHandler } from './useColumnBreakHandler';\n\nexport const KEY_ELEMENT_BREAK_AFTER_COLUMN = 'breakAfterColumn';\nexport const GAP_DEFAULT = 'normal';\n\nexport class BreakAfterPlugin extends Plugin {\n private columns: number;\n private gap: CSSProperties['gap'];\n private customClass: string | undefined;\n constructor(props?: BreakAfterPluginProps) {\n super('break-after-plugin', {\n button: ColumnBreakButton,\n ...props,\n });\n this.columns = props?.columns ?? 1;\n this.gap = props?.gap ?? GAP_DEFAULT;\n this.customClass = props?.customClass;\n }\n\n plugins(): PlatePlugin[] {\n return [createColumnBreakPlugin(this.columns, this.gap, this.customClass)];\n }\n}\n\nexport const createColumnBreakPlugin = (\n columns: number,\n gap: CSSProperties['gap'],\n customClass: string | undefined,\n): PlatePlugin => {\n return createPluginFactory({\n key: KEY_ELEMENT_BREAK_AFTER_COLUMN,\n handlers: {\n onKeyDown: onKeyDownColumnBreak,\n },\n useHooks: useColumnBreakHandler,\n options: {\n columns,\n gap,\n customClass,\n hotkey: ['shift+ctrl+enter'],\n },\n })();\n};\n"],"names":["KEY_ELEMENT_BREAK_AFTER_COLUMN","GAP_DEFAULT","BreakAfterPlugin","Plugin","props","ColumnBreakButton","__publicField","createColumnBreakPlugin","columns","gap","customClass","createPluginFactory","onKeyDownColumnBreak","useColumnBreakHandler"],"mappings":";;;;;;;;AAaO,MAAMA,IAAiC,oBACjCC,IAAc;AAEpB,MAAMC,UAAyBC,EAAO;AAAA,EAIzC,YAAYC,GAA+B;AACvC,UAAM,sBAAsB;AAAA,MACxB,QAAQC;AAAA,MACR,GAAGD;AAAA,IAAA,CACN;AAPG,IAAAE,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAMC,SAAA,WAAUF,KAAA,gBAAAA,EAAO,YAAW,GAC5B,KAAA,OAAMA,KAAA,gBAAAA,EAAO,QAAOH,GACzB,KAAK,cAAcG,KAAA,gBAAAA,EAAO;AAAA,EAC9B;AAAA,EAEA,UAAyB;AACd,WAAA,CAACG,EAAwB,KAAK,SAAS,KAAK,KAAK,KAAK,WAAW,CAAC;AAAA,EAC7E;AACJ;AAEO,MAAMA,IAA0B,CACnCC,GACAC,GACAC,MAEOC,EAAoB;AAAA,EACvB,KAAKX;AAAA,EACL,UAAU;AAAA,IACN,WAAWY;AAAA,EACf;AAAA,EACA,UAAUC;AAAA,EACV,SAAS;AAAA,IACL,SAAAL;AAAA,IACA,KAAAC;AAAA,IACA,aAAAC;AAAA,IACA,QAAQ,CAAC,kBAAkB;AAAA,EAC/B;AACH,CAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.es.js","sources":["../../../../src/components/RichTextEditor/Plugins/Plugin.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type PlatePlugin } from '@udecode/plate-core';\nimport { type CSSProperties } from 'react';\n\nimport { Position } from '../components/EditorPositioningWrapper';\n\nimport { type MarkupElement } from './MarkupElement';\nimport { type InlineData, type PluginButton } from './types';\n\nexport type PluginProps = {\n id?: string;\n button?: PluginButton;\n markupElement?: MarkupElement;\n markupInputElement?: MarkupElement;\n leafMarkupElements?: MarkupElement | MarkupElement[];\n showIn?: Position[];\n
|
|
1
|
+
{"version":3,"file":"Plugin.es.js","sources":["../../../../src/components/RichTextEditor/Plugins/Plugin.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type PlatePlugin } from '@udecode/plate-core';\nimport { type CSSProperties } from 'react';\n\nimport { Position } from '../components/EditorPositioningWrapper';\n\nimport { type MarkupElement } from './MarkupElement';\nimport { type InlineData, type PluginButton } from './types';\n\nexport type PluginProps = {\n id?: string;\n button?: PluginButton;\n markupElement?: MarkupElement;\n markupInputElement?: MarkupElement;\n leafMarkupElements?: MarkupElement | MarkupElement[];\n showIn?: Position[];\n label?: string;\n textStyles?: Plugin<PluginProps>[];\n styles?: CSSProperties;\n};\n\nexport abstract class Plugin<P extends PluginProps = PluginProps> {\n readonly id: string;\n readonly button?: PluginButton;\n readonly markupElement?: MarkupElement;\n readonly markupInputElement?: MarkupElement;\n readonly leafMarkupElements?: MarkupElement | MarkupElement[];\n readonly showIn: Position[];\n readonly props?: P;\n readonly textStyles?: Plugin<PluginProps>[];\n readonly styles?: CSSProperties;\n\n constructor(id: string, rest?: P) {\n this.id = rest?.id || id;\n this.button = rest?.button;\n this.markupElement = rest?.markupElement;\n this.markupInputElement = rest?.markupInputElement;\n this.leafMarkupElements = rest?.leafMarkupElements;\n this.showIn = rest?.showIn ?? [Position.BOTTOM, Position.TOP, Position.FLOATING];\n this.props = rest;\n }\n\n inline(): InlineData | undefined {\n return undefined;\n }\n\n abstract plugins(): PlatePlugin[];\n}\n"],"names":["Plugin","id","rest","__publicField","Position"],"mappings":";;;;AAsBO,MAAeA,EAA4C;AAAA,EAW9D,YAAYC,GAAYC,GAAU;AAVzB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGA,SAAA,MAAKD,KAAA,gBAAAA,EAAM,OAAMD,GACtB,KAAK,SAASC,KAAA,gBAAAA,EAAM,QACpB,KAAK,gBAAgBA,KAAA,gBAAAA,EAAM,eAC3B,KAAK,qBAAqBA,KAAA,gBAAAA,EAAM,oBAChC,KAAK,qBAAqBA,KAAA,gBAAAA,EAAM,oBAC3B,KAAA,UAASA,KAAA,gBAAAA,EAAM,WAAU,CAACE,EAAS,QAAQA,EAAS,KAAKA,EAAS,QAAQ,GAC/E,KAAK,QAAQF;AAAA,EACjB;AAAA,EAEA,SAAiC;AAAA,EAEjC;AAGJ;"}
|
|
@@ -1,73 +1,74 @@
|
|
|
1
|
-
import { jsx as i, jsxs as
|
|
2
|
-
import { Plate as
|
|
3
|
-
import { useMemo as
|
|
4
|
-
import { BlurObserver as
|
|
5
|
-
import { useMemoizedId as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { jsx as i, jsxs as S } from "react/jsx-runtime";
|
|
2
|
+
import { Plate as g, PlateContent as z } from "@udecode/plate-core";
|
|
3
|
+
import { useMemo as D, useCallback as T } from "react";
|
|
4
|
+
import { BlurObserver as j } from "./BlurObserver.es.js";
|
|
5
|
+
import { useMemoizedId as B } from "../../hooks/useMemoizedId.es.js";
|
|
6
|
+
import { merge as H } from "../../utilities/merge.es.js";
|
|
7
|
+
import { ContentReplacement as U } from "./ContentReplacement.es.js";
|
|
8
|
+
import { RichTextEditorProvider as A } from "./context/RichTextEditorContext.es.js";
|
|
9
|
+
import { PaddingSizes as J } from "./types.es.js";
|
|
10
|
+
import { useEditorState as Y } from "./hooks/useEditorState.es.js";
|
|
11
|
+
import { KEY_ELEMENT_BREAK_AFTER_COLUMN as b, GAP_DEFAULT as q } from "./Plugins/ColumnBreakPlugin/createColumnBreakPlugin.es.js";
|
|
12
|
+
import { forceToFocusNextElement as v } from "./helpers/forceToFocusElement.es.js";
|
|
13
|
+
import { RenderPlaceholder as Q } from "./components/RenderPlaceholder/RenderPlaceholder.es.js";
|
|
14
|
+
import W from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.es.js";
|
|
15
|
+
import { Position as h } from "./components/EditorPositioningWrapper/types.es.js";
|
|
16
|
+
import { defaultPlugins as X } from "./Plugins/defaultPlugins.es.js";
|
|
17
|
+
import { parseRawValue as Z } from "./utils/parseRawValue.es.js";
|
|
18
|
+
const $ = ({
|
|
19
|
+
id: N,
|
|
19
20
|
value: m,
|
|
20
|
-
placeholder:
|
|
21
|
-
readonly:
|
|
22
|
-
onTextChange:
|
|
21
|
+
placeholder: R = "",
|
|
22
|
+
readonly: x = !1,
|
|
23
|
+
onTextChange: C,
|
|
23
24
|
onBlur: n,
|
|
24
|
-
padding:
|
|
25
|
-
position:
|
|
26
|
-
plugins:
|
|
27
|
-
updateValueOnChange:
|
|
28
|
-
onValueChanged:
|
|
29
|
-
border:
|
|
30
|
-
toolbarWidth:
|
|
31
|
-
hideExternalFloatingModals:
|
|
25
|
+
padding: F = J.None,
|
|
26
|
+
position: l = h.FLOATING,
|
|
27
|
+
plugins: s = X,
|
|
28
|
+
updateValueOnChange: O = !1,
|
|
29
|
+
onValueChanged: V,
|
|
30
|
+
border: w = !0,
|
|
31
|
+
toolbarWidth: I,
|
|
32
|
+
hideExternalFloatingModals: K
|
|
32
33
|
}) => {
|
|
33
|
-
var
|
|
34
|
-
const
|
|
35
|
-
editorId:
|
|
34
|
+
var u, E, y;
|
|
35
|
+
const t = B(N), { localValue: a, onChange: L, memoizedValue: P, config: r } = Y({
|
|
36
|
+
editorId: t,
|
|
36
37
|
initialValue: m,
|
|
37
|
-
onTextChange:
|
|
38
|
-
plugins:
|
|
39
|
-
onValueChanged:
|
|
40
|
-
}), o =
|
|
38
|
+
onTextChange: C,
|
|
39
|
+
plugins: s,
|
|
40
|
+
onValueChanged: V
|
|
41
|
+
}), o = s.plugins.find((e) => e.key === b), c = (u = o == null ? void 0 : o.options) == null ? void 0 : u.customClass, d = c ? null : ((E = o == null ? void 0 : o.options) == null ? void 0 : E.columns) ?? 1, p = ((y = o == null ? void 0 : o.options) == null ? void 0 : y.gap) ?? q, _ = D(
|
|
41
42
|
() => ({
|
|
42
|
-
columns:
|
|
43
|
-
columnGap:
|
|
43
|
+
columns: d,
|
|
44
|
+
columnGap: p,
|
|
44
45
|
outline: "none"
|
|
45
46
|
}),
|
|
46
|
-
[
|
|
47
|
-
),
|
|
47
|
+
[d, p]
|
|
48
|
+
), G = T(() => {
|
|
48
49
|
n && n(JSON.stringify(a.current));
|
|
49
|
-
}, [n, a]),
|
|
50
|
-
e.code === "Tab" &&
|
|
51
|
-
}, []),
|
|
52
|
-
placeholder:
|
|
53
|
-
renderPlaceholder:
|
|
54
|
-
readOnly:
|
|
55
|
-
onBlur:
|
|
56
|
-
className:
|
|
57
|
-
style:
|
|
58
|
-
onKeyDown:
|
|
59
|
-
scrollSelectionIntoView:
|
|
50
|
+
}, [n, a]), M = T((e) => {
|
|
51
|
+
e.code === "Tab" && v(e, !e.shiftKey);
|
|
52
|
+
}, []), f = {
|
|
53
|
+
placeholder: R,
|
|
54
|
+
renderPlaceholder: Q,
|
|
55
|
+
readOnly: x,
|
|
56
|
+
onBlur: G,
|
|
57
|
+
className: H([F, c]),
|
|
58
|
+
style: _,
|
|
59
|
+
onKeyDown: M,
|
|
60
|
+
scrollSelectionIntoView: W
|
|
60
61
|
};
|
|
61
|
-
return /* @__PURE__ */ i(
|
|
62
|
-
/* @__PURE__ */ i(
|
|
63
|
-
!
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
return /* @__PURE__ */ i(A, { styles: r.styles(), position: l, border: w, editorId: t, children: /* @__PURE__ */ S(g, { id: t, onChange: L, plugins: r.plugins, initialValue: P, children: [
|
|
63
|
+
/* @__PURE__ */ i(z, { ...f }),
|
|
64
|
+
!f.readOnly && r.toolbar(I),
|
|
65
|
+
r.inline(),
|
|
66
|
+
O && /* @__PURE__ */ i(U, { value: Z({ editorId: t, raw: m, plugins: s }) }),
|
|
67
|
+
l === h.FLOATING && /* @__PURE__ */ i(j, { hideExternalFloatingModals: K })
|
|
67
68
|
] }) });
|
|
68
69
|
};
|
|
69
|
-
|
|
70
|
+
$.displayName = "FondueRichTextEditor";
|
|
70
71
|
export {
|
|
71
|
-
|
|
72
|
+
$ as RichTextEditor
|
|
72
73
|
};
|
|
73
74
|
//# sourceMappingURL=RichTextEditor.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Plate, PlateContent, type TEditableProps } from '@udecode/plate-core';\nimport { noop } from 'lodash-es';\nimport { type KeyboardEvent, useCallback, useMemo } from 'react';\n\nimport { BlurObserver } from '@components/RichTextEditor/BlurObserver';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\n\nimport { ContentReplacement } from './ContentReplacement';\nimport { GAP_DEFAULT, KEY_ELEMENT_BREAK_AFTER_COLUMN, type PluginComposer, defaultPlugins } from './Plugins';\nimport { Position } from './components/EditorPositioningWrapper';\nimport { RenderPlaceholder } from './components/RenderPlaceholder';\nimport { RichTextEditorProvider } from './context/RichTextEditorContext';\nimport { forceToFocusNextElement } from './helpers';\nimport { useEditorState } from './hooks';\nimport { PaddingSizes, type TreeOfNodes } from './types';\nimport { parseRawValue } from './utils';\n\nexport type RichTextEditorProps = {\n id?: string;\n placeholder?: string;\n value?: string;\n onTextChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n readonly?: boolean;\n padding?: PaddingSizes;\n position?: Position;\n plugins?: PluginComposer;\n onValueChanged?: (value: TreeOfNodes | null) => void;\n border?: boolean;\n updateValueOnChange?: boolean; // Only set to true when you are sure that performance isn't an issue\n toolbarWidth?: number;\n hideExternalFloatingModals?: (editorId: string) => void;\n};\n\nexport const RichTextEditor = ({\n id,\n value,\n placeholder = '',\n readonly: readOnly = false,\n onTextChange,\n onBlur,\n padding = PaddingSizes.None,\n position = Position.FLOATING,\n plugins = defaultPlugins,\n updateValueOnChange = false,\n onValueChanged,\n border = true,\n toolbarWidth,\n hideExternalFloatingModals,\n}: RichTextEditorProps) => {\n const editorId = useMemoizedId(id);\n const { localValue, onChange, memoizedValue, config } = useEditorState({\n editorId,\n initialValue: value,\n onTextChange,\n plugins,\n onValueChanged,\n });\n const breakAfterPlugin = plugins.plugins.find((plugin) => plugin.key === KEY_ELEMENT_BREAK_AFTER_COLUMN);\n const columns = breakAfterPlugin?.options?.columns ?? 1;\n const columnGap = breakAfterPlugin?.options?.gap ?? GAP_DEFAULT;\n\n const style = useMemo(\n () => ({\n columns,\n columnGap,\n outline: 'none',\n }),\n [columns, columnGap],\n );\n\n const onBlurHandler = useCallback(() => {\n if (onBlur) {\n onBlur(JSON.stringify(localValue.current));\n }\n }, [onBlur, localValue]);\n\n const onKeyDownHandler = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (event.code === 'Tab') {\n forceToFocusNextElement(event, !event.shiftKey);\n }\n }, []);\n\n const editableProps: TEditableProps = {\n placeholder,\n renderPlaceholder: RenderPlaceholder,\n readOnly,\n onBlur: onBlurHandler,\n className:
|
|
1
|
+
{"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Plate, PlateContent, type TEditableProps } from '@udecode/plate-core';\nimport { noop } from 'lodash-es';\nimport { type KeyboardEvent, useCallback, useMemo } from 'react';\n\nimport { BlurObserver } from '@components/RichTextEditor/BlurObserver';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { merge } from '@utilities/merge';\n\nimport { ContentReplacement } from './ContentReplacement';\nimport { GAP_DEFAULT, KEY_ELEMENT_BREAK_AFTER_COLUMN, type PluginComposer, defaultPlugins } from './Plugins';\nimport { Position } from './components/EditorPositioningWrapper';\nimport { RenderPlaceholder } from './components/RenderPlaceholder';\nimport { RichTextEditorProvider } from './context/RichTextEditorContext';\nimport { forceToFocusNextElement } from './helpers';\nimport { useEditorState } from './hooks';\nimport { PaddingSizes, type TreeOfNodes } from './types';\nimport { parseRawValue } from './utils';\n\nexport type RichTextEditorProps = {\n id?: string;\n placeholder?: string;\n value?: string;\n onTextChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n readonly?: boolean;\n padding?: PaddingSizes;\n position?: Position;\n plugins?: PluginComposer;\n onValueChanged?: (value: TreeOfNodes | null) => void;\n border?: boolean;\n updateValueOnChange?: boolean; // Only set to true when you are sure that performance isn't an issue\n toolbarWidth?: number;\n hideExternalFloatingModals?: (editorId: string) => void;\n};\n\nexport const RichTextEditor = ({\n id,\n value,\n placeholder = '',\n readonly: readOnly = false,\n onTextChange,\n onBlur,\n padding = PaddingSizes.None,\n position = Position.FLOATING,\n plugins = defaultPlugins,\n updateValueOnChange = false,\n onValueChanged,\n border = true,\n toolbarWidth,\n hideExternalFloatingModals,\n}: RichTextEditorProps) => {\n const editorId = useMemoizedId(id);\n const { localValue, onChange, memoizedValue, config } = useEditorState({\n editorId,\n initialValue: value,\n onTextChange,\n plugins,\n onValueChanged,\n });\n const breakAfterPlugin = plugins.plugins.find((plugin) => plugin.key === KEY_ELEMENT_BREAK_AFTER_COLUMN);\n const customClass = breakAfterPlugin?.options?.customClass as string | undefined;\n const columns = customClass ? null : breakAfterPlugin?.options?.columns ?? 1;\n const columnGap = breakAfterPlugin?.options?.gap ?? GAP_DEFAULT;\n\n const style = useMemo(\n () => ({\n columns,\n columnGap,\n outline: 'none',\n }),\n [columns, columnGap],\n );\n\n const onBlurHandler = useCallback(() => {\n if (onBlur) {\n onBlur(JSON.stringify(localValue.current));\n }\n }, [onBlur, localValue]);\n\n const onKeyDownHandler = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (event.code === 'Tab') {\n forceToFocusNextElement(event, !event.shiftKey);\n }\n }, []);\n\n const editableProps: TEditableProps = {\n placeholder,\n renderPlaceholder: RenderPlaceholder,\n readOnly,\n onBlur: onBlurHandler,\n className: merge([padding, customClass]),\n style,\n onKeyDown: onKeyDownHandler,\n scrollSelectionIntoView: noop,\n };\n\n return (\n <RichTextEditorProvider styles={config.styles()} position={position} border={border} editorId={editorId}>\n <Plate id={editorId} onChange={onChange} plugins={config.plugins} initialValue={memoizedValue}>\n <PlateContent {...editableProps} />\n {!editableProps.readOnly && config.toolbar(toolbarWidth)}\n {config.inline()}\n {updateValueOnChange && <ContentReplacement value={parseRawValue({ editorId, raw: value, plugins })} />}\n {position === Position.FLOATING && (\n <BlurObserver hideExternalFloatingModals={hideExternalFloatingModals} />\n )}\n </Plate>\n </RichTextEditorProvider>\n );\n};\nRichTextEditor.displayName = 'FondueRichTextEditor';\n"],"names":["RichTextEditor","id","value","placeholder","readOnly","onTextChange","onBlur","padding","PaddingSizes","position","Position","plugins","defaultPlugins","updateValueOnChange","onValueChanged","border","toolbarWidth","hideExternalFloatingModals","editorId","useMemoizedId","localValue","onChange","memoizedValue","config","useEditorState","breakAfterPlugin","plugin","KEY_ELEMENT_BREAK_AFTER_COLUMN","customClass","_a","columns","_b","columnGap","_c","GAP_DEFAULT","style","useMemo","onBlurHandler","useCallback","onKeyDownHandler","event","forceToFocusNextElement","editableProps","RenderPlaceholder","merge","noop","RichTextEditorProvider","jsxs","Plate","jsx","PlateContent","ContentReplacement","parseRawValue","BlurObserver"],"mappings":";;;;;;;;;;;;;;;;;AAqCO,MAAMA,IAAiB,CAAC;AAAA,EAC3B,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAUC,IAAW;AAAA,EACrB,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC,IAAUC,EAAa;AAAA,EACvB,UAAAC,IAAWC,EAAS;AAAA,EACpB,SAAAC,IAAUC;AAAA,EACV,qBAAAC,IAAsB;AAAA,EACtB,gBAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,cAAAC;AAAA,EACA,4BAAAC;AACJ,MAA2B;;AACjB,QAAAC,IAAWC,EAAclB,CAAE,GAC3B,EAAE,YAAAmB,GAAY,UAAAC,GAAU,eAAAC,GAAe,QAAAC,EAAA,IAAWC,EAAe;AAAA,IACnE,UAAAN;AAAA,IACA,cAAchB;AAAA,IACd,cAAAG;AAAA,IACA,SAAAM;AAAA,IACA,gBAAAG;AAAA,EAAA,CACH,GACKW,IAAmBd,EAAQ,QAAQ,KAAK,CAACe,MAAWA,EAAO,QAAQC,CAA8B,GACjGC,KAAcC,IAAAJ,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAI,EAA2B,aACzCC,IAAUF,IAAc,SAAOG,IAAAN,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAM,EAA2B,YAAW,GACrEC,MAAYC,IAAAR,KAAA,gBAAAA,EAAkB,YAAlB,gBAAAQ,EAA2B,QAAOC,GAE9CC,IAAQC;AAAA,IACV,OAAO;AAAA,MACH,SAAAN;AAAA,MACA,WAAAE;AAAA,MACA,SAAS;AAAA,IAAA;AAAA,IAEb,CAACF,GAASE,CAAS;AAAA,EAAA,GAGjBK,IAAgBC,EAAY,MAAM;AACpC,IAAIhC,KACAA,EAAO,KAAK,UAAUc,EAAW,OAAO,CAAC;AAAA,EAC7C,GACD,CAACd,GAAQc,CAAU,CAAC,GAEjBmB,IAAmBD,EAAY,CAACE,MAAyC;AACvE,IAAAA,EAAM,SAAS,SACSC,EAAAD,GAAO,CAACA,EAAM,QAAQ;AAAA,EAEtD,GAAG,CAAE,CAAA,GAECE,IAAgC;AAAA,IAClC,aAAAvC;AAAA,IACA,mBAAmBwC;AAAA,IACnB,UAAAvC;AAAA,IACA,QAAQiC;AAAA,IACR,WAAWO,EAAM,CAACrC,GAASqB,CAAW,CAAC;AAAA,IACvC,OAAAO;AAAA,IACA,WAAWI;AAAA,IACX,yBAAyBM;AAAA,EAAA;AAG7B,2BACKC,GAAuB,EAAA,QAAQvB,EAAO,OAAO,GAAG,UAAAd,GAAoB,QAAAM,GAAgB,UAAAG,GACjF,UAAC,gBAAA6B,EAAAC,GAAA,EAAM,IAAI9B,GAAU,UAAAG,GAAoB,SAASE,EAAO,SAAS,cAAcD,GAC5E,UAAA;AAAA,IAAC,gBAAA2B,EAAAC,GAAA,EAAc,GAAGR,GAAe;AAAA,IAChC,CAACA,EAAc,YAAYnB,EAAO,QAAQP,CAAY;AAAA,IACtDO,EAAO,OAAO;AAAA,IACdV,KAAwB,gBAAAoC,EAAAE,GAAA,EAAmB,OAAOC,EAAc,EAAE,UAAAlC,GAAU,KAAKhB,GAAO,SAAAS,EAAQ,CAAC,EAAG,CAAA;AAAA,IACpGF,MAAaC,EAAS,YACnB,gBAAAuC,EAACI,KAAa,4BAAApC,GAAwD;AAAA,EAAA,EAE9E,CAAA,EACJ,CAAA;AAER;AACAjB,EAAe,cAAc;"}
|
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
import { parseRawValue as
|
|
2
|
-
import { serializeNodeToHtmlRecursive as
|
|
3
|
-
import { defaultPlugins as
|
|
4
|
-
import { mapMentionable as
|
|
5
|
-
import { defaultStyles as
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
return
|
|
9
|
-
},
|
|
10
|
-
const
|
|
11
|
-
return Promise.resolve(
|
|
12
|
-
},
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import { parseRawValue as i } from "../utils/parseRawValue.es.js";
|
|
2
|
+
import { serializeNodeToHtmlRecursive as d } from "./utils/serializeNodeToHtmlRecursive.es.js";
|
|
3
|
+
import { defaultPlugins as c } from "../Plugins/defaultPlugins.es.js";
|
|
4
|
+
import { mapMentionable as u } from "../Plugins/MentionPlugin/helpers/mapMentionable.es.js";
|
|
5
|
+
import { defaultStyles as $ } from "../utils/defaultStyles.es.js";
|
|
6
|
+
const T = (o, e = c, l = 1, r = "normal", t = "") => {
|
|
7
|
+
const s = i({ raw: o, plugins: e }), n = e.getStyles;
|
|
8
|
+
return y(s, { columns: l, columnGap: r, styles: n, customClass: t });
|
|
9
|
+
}, g = async (o, e = c, l = 1, r = "normal", t = "") => {
|
|
10
|
+
const s = i({ raw: o, plugins: e }), n = e.getStyles;
|
|
11
|
+
return Promise.resolve(y(s, { columns: l, columnGap: r, styles: n, customClass: t }));
|
|
12
|
+
}, y = (o, {
|
|
13
|
+
mentionable: e,
|
|
14
|
+
columns: l = 1,
|
|
15
|
+
columnGap: r = "normal",
|
|
16
|
+
customClass: t = "",
|
|
17
|
+
styles: s = $
|
|
18
|
+
} = {}) => {
|
|
19
|
+
const n = e ? u(e) : /* @__PURE__ */ new Map();
|
|
20
|
+
let m = "";
|
|
21
|
+
for (let a = 0, f = o.length; a < f; a++)
|
|
22
|
+
m += d(o[a], s, {
|
|
23
|
+
mappedMentionable: n
|
|
18
24
|
});
|
|
19
|
-
|
|
25
|
+
const p = `${t ? "" : `columns:${l};`} column-gap:${r};`;
|
|
26
|
+
return l > 1 || t ? `<div style="${p}" class="${t}">${m}</div>` : m;
|
|
20
27
|
};
|
|
21
28
|
export {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
y as serializeNodesToHtml,
|
|
30
|
+
T as serializeRawToHtml,
|
|
31
|
+
g as serializeRawToHtmlAsync
|
|
25
32
|
};
|
|
26
33
|
//# sourceMappingURL=serializeToHtml.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeToHtml.es.js","sources":["../../../../src/components/RichTextEditor/serializer/serializeToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type TDescendant } from '@udecode/slate';\nimport { type CSSProperties } from 'react';\n\nimport { type PluginComposer, defaultPlugins } from '../Plugins';\nimport { type MentionableItems } from '../Plugins/MentionPlugin';\nimport { mapMentionable } from '../Plugins/MentionPlugin/helpers';\nimport { defaultStyles } from '../utils';\nimport { parseRawValue } from '../utils/parseRawValue';\n\nimport { type CSSPropertiesHover } from './types';\nimport { serializeNodeToHtmlRecursive } from './utils/serializeNodeToHtmlRecursive';\n\nexport const serializeRawToHtml = (\n raw: string,\n plugins: PluginComposer = defaultPlugins,\n columns: SerializeNodesToHtmlOptions['columns'] = 1,\n columnGap: SerializeNodesToHtmlOptions['columnGap'] = 'normal',\n): string => {\n const nodes = parseRawValue({ raw, plugins });\n const styles = plugins.getStyles;\n return serializeNodesToHtml(nodes, { columns, columnGap, styles });\n};\nexport const serializeRawToHtmlAsync = async (\n raw: string,\n plugins: PluginComposer = defaultPlugins,\n columns: SerializeNodesToHtmlOptions['columns'] = 1,\n columnGap: SerializeNodesToHtmlOptions['columnGap'] = 'normal',\n): Promise<string> => {\n const nodes = parseRawValue({ raw, plugins });\n const styles = plugins.getStyles;\n return Promise.resolve(serializeNodesToHtml(nodes, { columns, columnGap, styles }));\n};\n\nexport type SerializeNodesToHtmlOptions = {\n styles?: Record<string, CSSPropertiesHover>;\n mentionable?: MentionableItems;\n columns?: number;\n columnGap?: CSSProperties['columnGap'];\n};\n\nexport const serializeNodesToHtml = (\n nodes: TDescendant[],\n {
|
|
1
|
+
{"version":3,"file":"serializeToHtml.es.js","sources":["../../../../src/components/RichTextEditor/serializer/serializeToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type TDescendant } from '@udecode/slate';\nimport { type CSSProperties } from 'react';\n\nimport { type PluginComposer, defaultPlugins } from '../Plugins';\nimport { type MentionableItems } from '../Plugins/MentionPlugin';\nimport { mapMentionable } from '../Plugins/MentionPlugin/helpers';\nimport { defaultStyles } from '../utils';\nimport { parseRawValue } from '../utils/parseRawValue';\n\nimport { type CSSPropertiesHover } from './types';\nimport { serializeNodeToHtmlRecursive } from './utils/serializeNodeToHtmlRecursive';\n\nexport const serializeRawToHtml = (\n raw: string,\n plugins: PluginComposer = defaultPlugins,\n columns: SerializeNodesToHtmlOptions['columns'] = 1,\n columnGap: SerializeNodesToHtmlOptions['columnGap'] = 'normal',\n customClass = '',\n): string => {\n const nodes = parseRawValue({ raw, plugins });\n const styles = plugins.getStyles;\n return serializeNodesToHtml(nodes, { columns, columnGap, styles, customClass });\n};\nexport const serializeRawToHtmlAsync = async (\n raw: string,\n plugins: PluginComposer = defaultPlugins,\n columns: SerializeNodesToHtmlOptions['columns'] = 1,\n columnGap: SerializeNodesToHtmlOptions['columnGap'] = 'normal',\n customClass = '',\n): Promise<string> => {\n const nodes = parseRawValue({ raw, plugins });\n const styles = plugins.getStyles;\n return Promise.resolve(serializeNodesToHtml(nodes, { columns, columnGap, styles, customClass }));\n};\n\nexport type SerializeNodesToHtmlOptions = {\n styles?: Record<string, CSSPropertiesHover>;\n mentionable?: MentionableItems;\n columns?: number;\n columnGap?: CSSProperties['columnGap'];\n customClass?: string;\n};\n\nexport const serializeNodesToHtml = (\n nodes: TDescendant[],\n {\n mentionable,\n columns = 1,\n columnGap = 'normal',\n customClass = '',\n styles = defaultStyles,\n }: SerializeNodesToHtmlOptions = {},\n): string => {\n const mappedMentionable = mentionable ? mapMentionable(mentionable) : new Map();\n\n let html = '';\n for (let i = 0, len = nodes.length; i < len; i++) {\n html += serializeNodeToHtmlRecursive(nodes[i], styles, {\n mappedMentionable,\n });\n }\n\n const columnsStyle = customClass ? '' : `columns:${columns};`;\n const style = `${columnsStyle} column-gap:${columnGap};`;\n\n if (columns > 1 || customClass) {\n return `<div style=\"${style}\" class=\"${customClass}\">${html}</div>`;\n }\n\n return html;\n};\n"],"names":["serializeRawToHtml","raw","plugins","defaultPlugins","columns","columnGap","customClass","nodes","parseRawValue","styles","serializeNodesToHtml","serializeRawToHtmlAsync","mentionable","defaultStyles","mappedMentionable","mapMentionable","html","i","len","serializeNodeToHtmlRecursive","style"],"mappings":";;;;;AAca,MAAAA,IAAqB,CAC9BC,GACAC,IAA0BC,GAC1BC,IAAkD,GAClDC,IAAsD,UACtDC,IAAc,OACL;AACT,QAAMC,IAAQC,EAAc,EAAE,KAAAP,GAAK,SAAAC,EAAS,CAAA,GACtCO,IAASP,EAAQ;AACvB,SAAOQ,EAAqBH,GAAO,EAAE,SAAAH,GAAS,WAAAC,GAAW,QAAAI,GAAQ,aAAAH,GAAa;AAClF,GACaK,IAA0B,OACnCV,GACAC,IAA0BC,GAC1BC,IAAkD,GAClDC,IAAsD,UACtDC,IAAc,OACI;AAClB,QAAMC,IAAQC,EAAc,EAAE,KAAAP,GAAK,SAAAC,EAAS,CAAA,GACtCO,IAASP,EAAQ;AAChB,SAAA,QAAQ,QAAQQ,EAAqBH,GAAO,EAAE,SAAAH,GAAS,WAAAC,GAAW,QAAAI,GAAQ,aAAAH,EAAa,CAAA,CAAC;AACnG,GAUaI,IAAuB,CAChCH,GACA;AAAA,EACI,aAAAK;AAAA,EACA,SAAAR,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,aAAAC,IAAc;AAAA,EACd,QAAAG,IAASI;AACb,IAAiC,OACxB;AACT,QAAMC,IAAoBF,IAAcG,EAAeH,CAAW,wBAAQ;AAE1E,MAAII,IAAO;AACX,WAASC,IAAI,GAAGC,IAAMX,EAAM,QAAQU,IAAIC,GAAKD;AACzC,IAAAD,KAAQG,EAA6BZ,EAAMU,CAAC,GAAGR,GAAQ;AAAA,MACnD,mBAAAK;AAAA,IAAA,CACH;AAIL,QAAMM,IAAQ,GADOd,IAAc,KAAK,WAAWF,CAAO,GAC7B,eAAeC,CAAS;AAEjD,SAAAD,IAAU,KAAKE,IACR,eAAec,CAAK,YAAYd,CAAW,KAAKU,CAAI,WAGxDA;AACX;"}
|