@frontify/fondue 12.0.0-beta.157 → 12.0.0-beta.159
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/ButtonPlugin/components/FloatingButton/CustomFloatingButton.es.js +1 -1
- package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/CustomFloatingButton.es.js.map +1 -1
- package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/InsertButtonModal.es.js.map +1 -1
- package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/useInsertModal.es.js.map +1 -1
- package/dist/components/RichTextEditor/Plugins/ButtonPlugin/withButton.es.js +31 -58
- package/dist/components/RichTextEditor/Plugins/ButtonPlugin/withButton.es.js.map +1 -1
- package/dist/index.cjs.js +23 -23
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.umd.js +20 -20
- package/dist/index.umd.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -3
- /package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/InsertButtonModal.d.ts +0 -0
- /package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/InsertButtonModal.es.js +0 -0
- /package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/types.d.ts +0 -0
- /package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/useInsertModal.d.ts +0 -0
- /package/dist/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/{InserButtontModal → InsertButtonModal}/useInsertModal.es.js +0 -0
|
@@ -2,7 +2,7 @@ import t from "react";
|
|
|
2
2
|
import { EditModal as l } from "./EditButtonModal/EditModal.es.js";
|
|
3
3
|
import { FloatingButton as o } from "./FloatingButton.es.js";
|
|
4
4
|
import { useFloatingButtonSelectors as i } from "./floatingButtonStore.es.js";
|
|
5
|
-
import { InsertButtonModal as m } from "./
|
|
5
|
+
import { InsertButtonModal as m } from "./InsertButtonModal/InsertButtonModal.es.js";
|
|
6
6
|
const d = () => {
|
|
7
7
|
const n = i().isEditing(), e = /* @__PURE__ */ t.createElement(m, null), r = n ? e : /* @__PURE__ */ t.createElement(l, null);
|
|
8
8
|
return /* @__PURE__ */ t.createElement(t.Fragment, null, /* @__PURE__ */ t.createElement(o.InsertRoot, null, e), /* @__PURE__ */ t.createElement(o.EditRoot, null, r));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFloatingButton.es.js","sources":["../../../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/CustomFloatingButton.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React from 'react';\nimport { EditModal } from './EditButtonModal/EditModal';\nimport { FloatingButton } from './FloatingButton';\nimport { useFloatingButtonSelectors } from './floatingButtonStore';\nimport { InsertButtonModal } from './
|
|
1
|
+
{"version":3,"file":"CustomFloatingButton.es.js","sources":["../../../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/CustomFloatingButton.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React from 'react';\nimport { EditModal } from './EditButtonModal/EditModal';\nimport { FloatingButton } from './FloatingButton';\nimport { useFloatingButtonSelectors } from './floatingButtonStore';\nimport { InsertButtonModal } from './InsertButtonModal/InsertButtonModal';\n\nexport const CustomFloatingButton = () => {\n const isEditing = useFloatingButtonSelectors().isEditing();\n\n const input = <InsertButtonModal />;\n const editContent = isEditing ? input : <EditModal />;\n\n return (\n <>\n <FloatingButton.InsertRoot>{input}</FloatingButton.InsertRoot>\n <FloatingButton.EditRoot>{editContent}</FloatingButton.EditRoot>\n </>\n );\n};\n"],"names":["CustomFloatingButton","isEditing","useFloatingButtonSelectors","input","InsertButtonModal","editContent","React","EditModal","FloatingButton"],"mappings":";;;;;AAQO,MAAMA,IAAuB,MAAM;AAChC,QAAAC,IAAYC,IAA6B,aAEzCC,oCAASC,GAAkB,IAAA,GAC3BC,IAAcJ,IAAYE,IAAQ,gBAAAG,EAAA,cAACC,GAAU,IAAA;AAEnD,SAEQ,gBAAAD,EAAA,cAAAA,EAAA,UAAA,MAAA,gBAAAA,EAAA,cAACE,EAAe,YAAf,MAA2BL,CAAM,GAClC,gBAAAG,EAAA,cAACE,EAAe,UAAf,MAAyBH,CAAY,CAC1C;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsertButtonModal.es.js","sources":["../../../../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/
|
|
1
|
+
{"version":3,"file":"InsertButtonModal.es.js","sources":["../../../../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/InsertButtonModal/InsertButtonModal.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { CSSProperties, FC, ReactNode, useState } from 'react';\n\nimport { FormControl } from '@components/FormControl';\nimport { useInsertModal } from './useInsertModal';\nimport { useRichTextEditorContext } from '@components/RichTextEditor/context/RichTextEditorContext';\nimport { InsertModal } from '@components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/InsertLinkModal';\nimport { ButtonStyles } from '@components/RichTextEditor/Plugins/TextStylePlugin/TextStyles';\n\nexport const InsertButtonModal = () => {\n const modalProps = useInsertModal();\n const { state, onButtonStyleChange } = modalProps;\n const context = useRichTextEditorContext();\n\n const designTokens = context.designTokens as Partial<\n Record<ButtonStyles, CSSProperties & { hover: CSSProperties }>\n >;\n\n return (\n <InsertModal {...modalProps} testId=\"floating-button-insert\">\n <div className=\"tw-pt-5\">\n <FormControl\n label={{\n children: 'Button Style',\n htmlFor: 'buttonStyle',\n required: true,\n }}\n >\n <HoverableButton\n id=\"primary\"\n styles={designTokens.buttonPrimary}\n isActive={state.buttonStyle === 'primary'}\n onClick={() => onButtonStyleChange('primary')}\n >\n {state.text || 'Primary Button'}\n </HoverableButton>\n\n <HoverableButton\n id=\"secondary\"\n styles={designTokens.buttonSecondary}\n isActive={state.buttonStyle === 'secondary'}\n onClick={() => onButtonStyleChange('secondary')}\n >\n {state.text || 'Secondary Button'}\n </HoverableButton>\n\n <HoverableButton\n id=\"tertiary\"\n styles={designTokens.buttonTertiary}\n isActive={state.buttonStyle === 'tertiary'}\n onClick={() => onButtonStyleChange('tertiary')}\n >\n {state.text || 'Tertiary Button'}\n </HoverableButton>\n </FormControl>\n </div>\n </InsertModal>\n );\n};\n\ntype Props = {\n id: string;\n styles?: CSSProperties & { hover?: CSSProperties };\n isActive: boolean;\n onClick: () => void;\n children: ReactNode;\n};\n\nconst HoverableButton: FC<Props> = ({ id, styles, isActive, onClick, children }) => {\n const [hovered, setHovered] = useState(false);\n const getStyles = () => (styles && styles.hover && hovered ? { ...styles, ...styles.hover } : styles);\n\n return (\n <button\n data-test-id={`floating-button-insert-${id}`}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={onClick}\n style={getStyles()}\n className={\n isActive ? 'tw-outline tw-outline-1 tw-outline-violet-60 tw-outline-offset-2 tw-w-fit' : 'tw-w-fit'\n }\n >\n {children}\n </button>\n );\n};\n"],"names":["InsertButtonModal","modalProps","useInsertModal","state","onButtonStyleChange","designTokens","useRichTextEditorContext","React","InsertModal","FormControl","HoverableButton","id","styles","isActive","onClick","children","hovered","setHovered","useState","getStyles"],"mappings":";;;;;AAUO,MAAMA,IAAoB,MAAM;AACnC,QAAMC,IAAaC,KACb,EAAE,OAAAC,GAAO,qBAAAC,EAAwB,IAAAH,GAGjCI,IAFUC,IAEa;AAKzB,SAAA,gBAAAC,EAAA,cAACC,KAAa,GAAGP,GAAY,QAAO,yBAChC,GAAA,gBAAAM,EAAA,cAAC,OAAI,EAAA,WAAU,UACX,GAAA,gBAAAA,EAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACG,OAAO;AAAA,QACH,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,MACd;AAAA,IAAA;AAAA,IAEA,gBAAAF,EAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,QAAQL,EAAa;AAAA,QACrB,UAAUF,EAAM,gBAAgB;AAAA,QAChC,SAAS,MAAMC,EAAoB,SAAS;AAAA,MAAA;AAAA,MAE3CD,EAAM,QAAQ;AAAA,IACnB;AAAA,IAEA,gBAAAI,EAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,QAAQL,EAAa;AAAA,QACrB,UAAUF,EAAM,gBAAgB;AAAA,QAChC,SAAS,MAAMC,EAAoB,WAAW;AAAA,MAAA;AAAA,MAE7CD,EAAM,QAAQ;AAAA,IACnB;AAAA,IAEA,gBAAAI,EAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,QAAQL,EAAa;AAAA,QACrB,UAAUF,EAAM,gBAAgB;AAAA,QAChC,SAAS,MAAMC,EAAoB,UAAU;AAAA,MAAA;AAAA,MAE5CD,EAAM,QAAQ;AAAA,IACnB;AAAA,EAER,CAAA,CACJ;AAER,GAUMO,IAA6B,CAAC,EAAE,IAAAC,GAAI,QAAAC,GAAQ,UAAAC,GAAU,SAAAC,GAAS,UAAAC,QAAe;AAChF,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtCC,IAAY,MAAOP,KAAUA,EAAO,SAASI,IAAU,EAAE,GAAGJ,GAAQ,GAAGA,EAAO,MAAA,IAAUA;AAG1F,SAAA,gBAAAL,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,gBAAc,0BAA0BI;AAAA,MACxC,cAAc,MAAMM,EAAW,EAAI;AAAA,MACnC,cAAc,MAAMA,EAAW,EAAK;AAAA,MACpC,SAAAH;AAAA,MACA,OAAOK,EAAU;AAAA,MACjB,WACIN,IAAW,8EAA8E;AAAA,IAAA;AAAA,IAG5FE;AAAA,EAAA;AAGb;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInsertModal.es.js","sources":["../../../../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/
|
|
1
|
+
{"version":3,"file":"useInsertModal.es.js","sources":["../../../../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/components/FloatingButton/InsertButtonModal/useInsertModal.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { Dispatch, Reducer, useEffect, useReducer } from 'react';\nimport { getPluginOptions, useEditorRef, useHotkeys } from '@udecode/plate';\nimport { CheckboxState } from '@components/Checkbox';\nimport { InsertModalDispatchType, InsertModalStateProps } from './types';\nimport { floatingButtonActions, floatingButtonSelectors } from '../floatingButtonStore';\nimport { ButtonPlugin, ELEMENT_BUTTON } from '../../../createButtonPlugin';\nimport { submitFloatingButton } from '../../../transforms/submitFloatingButton';\nimport { RichTextButtonStyle } from '../../../types';\nimport { getButtonStyle } from '../../../utils/getButtonStyle';\n\nconst initialState: InsertModalStateProps = {\n url: '',\n text: '',\n buttonStyle: 'primary',\n newTab: CheckboxState.Unchecked,\n};\n\nexport const InsertModalState = (): [InsertModalStateProps, Dispatch<InsertModalDispatchType>] => {\n const [state, dispatch] = useReducer<Reducer<InsertModalStateProps, InsertModalDispatchType>>((state, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case 'NEW_TAB':\n return {\n ...state,\n newTab: CheckboxState.Checked,\n };\n case 'SAME_TAB':\n return {\n ...state,\n newTab: CheckboxState.Unchecked,\n };\n case 'URL':\n case 'TEXT':\n case 'BUTTON_STYLE':\n case 'INIT':\n return {\n ...state,\n ...payload,\n };\n default:\n return state;\n }\n }, initialState);\n\n return [state, dispatch];\n};\n\nexport const useInsertModal = () => {\n const editor = useEditorRef();\n const [state, dispatch] = InsertModalState();\n\n useEffect(() => {\n const buttonStyle = getButtonStyle(editor);\n\n dispatch({\n type: 'INIT',\n payload: {\n text: floatingButtonSelectors.text(),\n buttonStyle,\n newTab: floatingButtonSelectors.newTab() ? CheckboxState.Checked : CheckboxState.Unchecked,\n url: floatingButtonSelectors.url(),\n },\n });\n }, [dispatch, editor]);\n\n const onTextChange = (value: string) => {\n dispatch({\n type: 'TEXT',\n payload: { text: value },\n });\n };\n\n const onButtonStyleChange = (value: RichTextButtonStyle) => {\n dispatch({\n type: 'BUTTON_STYLE',\n payload: { buttonStyle: value },\n });\n };\n\n const onUrlChange = (value: string) => {\n dispatch({\n type: 'URL',\n payload: { url: value },\n });\n };\n\n const onToggleTab = (checked: boolean) => {\n checked ? dispatch({ type: 'NEW_TAB' }) : dispatch({ type: 'SAME_TAB' });\n };\n\n const onCancel = () => {\n floatingButtonActions.hide();\n };\n\n const onSave = (e: React.MouseEvent<HTMLButtonElement, MouseEvent> | KeyboardEvent | undefined) => {\n if (!isValidUrlOrEmpty() || !hasValues) {\n return;\n }\n\n floatingButtonActions.text(state.text);\n floatingButtonActions.url(state.url);\n floatingButtonActions.buttonStyle(state.buttonStyle);\n floatingButtonActions.newTab(state.newTab === CheckboxState.Checked);\n\n if (submitFloatingButton(editor)) {\n e?.preventDefault();\n }\n };\n\n const hasValues = state.url !== '' && state.text !== '';\n\n const isValidUrlOrEmpty = () => {\n const { isUrl } = getPluginOptions<ButtonPlugin>(editor, ELEMENT_BUTTON);\n return !state.url || (isUrl && isUrl(state.url));\n };\n\n useHotkeys(\n 'enter',\n onSave,\n {\n enableOnTags: ['INPUT'],\n },\n [],\n );\n\n return {\n state,\n onTextChange,\n onButtonStyleChange,\n onUrlChange,\n onToggleTab,\n onCancel,\n onSave,\n hasValues,\n isValidUrlOrEmpty,\n };\n};\n"],"names":["initialState","CheckboxState","InsertModalState","state","dispatch","useReducer","action","type","payload","useInsertModal","editor","useEditorRef","useEffect","buttonStyle","getButtonStyle","floatingButtonSelectors","onTextChange","value","onButtonStyleChange","onUrlChange","onToggleTab","checked","onCancel","floatingButtonActions","onSave","e","isValidUrlOrEmpty","hasValues","submitFloatingButton","isUrl","getPluginOptions","ELEMENT_BUTTON","useHotkeys"],"mappings":"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"}
|
|
@@ -1,80 +1,53 @@
|
|
|
1
|
-
import { isCollapsed as
|
|
2
|
-
import { Path as
|
|
3
|
-
import { ELEMENT_BUTTON as
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
z(t, () => {
|
|
8
|
-
const s = t.selection;
|
|
9
|
-
let n = D(t, s, B);
|
|
10
|
-
if (n || (n = L(t)), !n || W(t, {
|
|
11
|
-
at: n,
|
|
12
|
-
match: { type: f(t, m) }
|
|
13
|
-
}))
|
|
14
|
-
return;
|
|
15
|
-
let e = _(t, n);
|
|
16
|
-
e = (i == null ? void 0 : i(e)) ?? e, h(e) && (l(t, n), r(t, {
|
|
17
|
-
url: e
|
|
18
|
-
}), A(t, { edge: "end" }));
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
return t.insertBreak = () => {
|
|
22
|
-
if (!a(t.selection))
|
|
23
|
-
return p();
|
|
24
|
-
P(), p();
|
|
25
|
-
}, t.insertText = (s) => {
|
|
26
|
-
s === " " && a(t.selection) && P(), g(s);
|
|
27
|
-
}, t.insertData = (s) => {
|
|
28
|
-
const n = s.getData("text/plain"), o = i == null ? void 0 : i(n);
|
|
29
|
-
n && r(t, {
|
|
30
|
-
url: o || n,
|
|
31
|
-
insertTextInButton: !0
|
|
32
|
-
}) || T(s);
|
|
33
|
-
}, t.apply = (s) => {
|
|
1
|
+
import { isCollapsed as i, getAboveNode as a, getPluginType as l, isStartPoint as g, getPreviousNodeEndPoint as x, isEndPoint as P, getNextNodeStartPoint as m, select as u, insertNodes as E, withRemoveEmptyNodes as h, mockPlugin as r } from "@udecode/plate";
|
|
2
|
+
import { Path as w } from "slate";
|
|
3
|
+
import { ELEMENT_BUTTON as p } from "./createButtonPlugin.es.js";
|
|
4
|
+
const B = (t, { type: N }) => {
|
|
5
|
+
const { apply: f, normalizeNode: y } = t;
|
|
6
|
+
return t.apply = (s) => {
|
|
34
7
|
if (s.type !== "set_selection") {
|
|
35
|
-
|
|
8
|
+
f(s);
|
|
36
9
|
return;
|
|
37
10
|
}
|
|
38
11
|
const n = s.newProperties;
|
|
39
|
-
if (!(n != null && n.focus) || !n.anchor || !
|
|
40
|
-
|
|
12
|
+
if (!(n != null && n.focus) || !n.anchor || !i(n)) {
|
|
13
|
+
f(s);
|
|
41
14
|
return;
|
|
42
15
|
}
|
|
43
|
-
const
|
|
16
|
+
const c = a(t, {
|
|
44
17
|
at: n,
|
|
45
|
-
match: { type:
|
|
18
|
+
match: { type: l(t, p) }
|
|
46
19
|
});
|
|
47
|
-
if (
|
|
48
|
-
const [,
|
|
49
|
-
let
|
|
50
|
-
|
|
51
|
-
anchor:
|
|
52
|
-
focus:
|
|
20
|
+
if (c) {
|
|
21
|
+
const [, o] = c;
|
|
22
|
+
let e;
|
|
23
|
+
g(t, n.focus, o) && (e = x(t, o)), P(t, n.focus, o) && (e = m(t, o)), e && (s.newProperties = {
|
|
24
|
+
anchor: e,
|
|
25
|
+
focus: e
|
|
53
26
|
});
|
|
54
27
|
}
|
|
55
|
-
|
|
28
|
+
f(s);
|
|
56
29
|
}, t.normalizeNode = ([s, n]) => {
|
|
57
|
-
if (s.type ===
|
|
58
|
-
const
|
|
59
|
-
if (
|
|
60
|
-
const
|
|
61
|
-
if (
|
|
62
|
-
|
|
30
|
+
if (s.type === l(t, p)) {
|
|
31
|
+
const c = t.selection;
|
|
32
|
+
if (c && i(c) && P(t, c.focus, n)) {
|
|
33
|
+
const o = m(t, n);
|
|
34
|
+
if (o)
|
|
35
|
+
u(t, o);
|
|
63
36
|
else {
|
|
64
|
-
const
|
|
65
|
-
|
|
37
|
+
const e = w.next(n);
|
|
38
|
+
E(t, { text: "" }, { at: e }), u(t, e);
|
|
66
39
|
}
|
|
67
40
|
}
|
|
68
41
|
}
|
|
69
|
-
|
|
70
|
-
},
|
|
42
|
+
y([s, n]);
|
|
43
|
+
}, h(
|
|
71
44
|
t,
|
|
72
|
-
|
|
73
|
-
options: { types:
|
|
45
|
+
r({
|
|
46
|
+
options: { types: N }
|
|
74
47
|
})
|
|
75
48
|
);
|
|
76
49
|
};
|
|
77
50
|
export {
|
|
78
|
-
|
|
51
|
+
B as withButton
|
|
79
52
|
};
|
|
80
53
|
//# sourceMappingURL=withButton.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withButton.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/withButton.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {
|
|
1
|
+
{"version":3,"file":"withButton.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/ButtonPlugin/withButton.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n AnyObject,\n EText,\n PlateEditor,\n Value,\n WithOverride,\n getAboveNode,\n getNextNodeStartPoint,\n getPluginType,\n getPreviousNodeEndPoint,\n insertNodes,\n isCollapsed,\n isEndPoint,\n isStartPoint,\n mockPlugin,\n select,\n withRemoveEmptyNodes,\n} from '@udecode/plate';\nimport { Path, Point, Range } from 'slate';\nimport { ELEMENT_BUTTON } from './createButtonPlugin';\n\n/**\n * Insert space after a url to wrap a button.\n * Lookup from the block start to the cursor to check if there is an url.\n * If not found, lookup before the cursor for a space character to check the url.\n *\n * On insert data:\n * Paste a string inside a button element will edit its children text but not its url.\n *\n */\n\nexport const withButton: WithOverride = (editor, { type }) => {\n const { apply, normalizeNode } = editor;\n\n editor.apply = (operation) => {\n if (operation.type !== 'set_selection') {\n apply(operation);\n return;\n }\n\n const range = operation.newProperties;\n if (!range?.focus || !range.anchor || !isCollapsed(range as Range)) {\n apply(operation);\n return;\n }\n\n const entry = getAboveNode(editor, {\n at: range as Range,\n match: { type: getPluginType(editor, ELEMENT_BUTTON) },\n });\n\n if (entry) {\n const [, path] = entry;\n\n let newPoint: Point | undefined;\n\n if (isStartPoint(editor, range.focus, path)) {\n newPoint = getPreviousNodeEndPoint(editor, path);\n }\n\n if (isEndPoint(editor, range.focus, path)) {\n newPoint = getNextNodeStartPoint(editor, path);\n }\n\n if (newPoint) {\n operation.newProperties = {\n anchor: newPoint,\n focus: newPoint,\n };\n }\n }\n\n apply(operation);\n };\n\n editor.normalizeNode = ([node, path]) => {\n if (node.type === getPluginType(editor, ELEMENT_BUTTON)) {\n const range = editor.selection as Range | null;\n\n if (range && isCollapsed(range) && isEndPoint(editor, range.focus, path)) {\n const nextPoint = getNextNodeStartPoint(editor, path);\n\n // select next text node if any\n if (nextPoint) {\n select(editor, nextPoint);\n } else {\n // insert text node then select\n const nextPath = Path.next(path);\n insertNodes(editor, { text: '' } as EText<Value>, { at: nextPath });\n select(editor, nextPath);\n }\n }\n }\n\n normalizeNode([node, path]);\n };\n\n return withRemoveEmptyNodes<Value, PlateEditor<Value>>(\n editor,\n mockPlugin<AnyObject, Value, PlateEditor<Value>>({\n options: { types: type },\n }),\n );\n};\n"],"names":["withButton","editor","type","apply","normalizeNode","operation","range","isCollapsed","entry","getAboveNode","getPluginType","ELEMENT_BUTTON","path","newPoint","isStartPoint","getPreviousNodeEndPoint","isEndPoint","getNextNodeStartPoint","node","nextPoint","select","nextPath","Path","insertNodes","withRemoveEmptyNodes","mockPlugin"],"mappings":";;;AAiCO,MAAMA,IAA2B,CAACC,GAAQ,EAAE,MAAAC,QAAW;AACpD,QAAA,EAAE,OAAAC,GAAO,eAAAC,EAAkB,IAAAH;AAE1B,SAAAA,EAAA,QAAQ,CAACI,MAAc;AACtB,QAAAA,EAAU,SAAS,iBAAiB;AACpC,MAAAF,EAAME,CAAS;AACf;AAAA,IACJ;AAEA,UAAMC,IAAQD,EAAU;AACpB,QAAA,EAACC,KAAA,QAAAA,EAAO,UAAS,CAACA,EAAM,UAAU,CAACC,EAAYD,CAAc,GAAG;AAChE,MAAAH,EAAME,CAAS;AACf;AAAA,IACJ;AAEM,UAAAG,IAAQC,EAAaR,GAAQ;AAAA,MAC/B,IAAIK;AAAA,MACJ,OAAO,EAAE,MAAMI,EAAcT,GAAQU,CAAc,EAAE;AAAA,IAAA,CACxD;AAED,QAAIH,GAAO;AACD,YAAA,CAAG,EAAAI,CAAI,IAAIJ;AAEb,UAAAK;AAEJ,MAAIC,EAAab,GAAQK,EAAM,OAAOM,CAAI,MAC3BC,IAAAE,EAAwBd,GAAQW,CAAI,IAG/CI,EAAWf,GAAQK,EAAM,OAAOM,CAAI,MACzBC,IAAAI,EAAsBhB,GAAQW,CAAI,IAG7CC,MACAR,EAAU,gBAAgB;AAAA,QACtB,QAAQQ;AAAA,QACR,OAAOA;AAAA,MAAA;AAAA,IAGnB;AAEA,IAAAV,EAAME,CAAS;AAAA,EAAA,GAGnBJ,EAAO,gBAAgB,CAAC,CAACiB,GAAMN,CAAI,MAAM;AACrC,QAAIM,EAAK,SAASR,EAAcT,GAAQU,CAAc,GAAG;AACrD,YAAML,IAAQL,EAAO;AAEjB,UAAAK,KAASC,EAAYD,CAAK,KAAKU,EAAWf,GAAQK,EAAM,OAAOM,CAAI,GAAG;AAChE,cAAAO,IAAYF,EAAsBhB,GAAQW,CAAI;AAGpD,YAAIO;AACA,UAAAC,EAAOnB,GAAQkB,CAAS;AAAA,aACrB;AAEG,gBAAAE,IAAWC,EAAK,KAAKV,CAAI;AACnB,UAAAW,EAAAtB,GAAQ,EAAE,MAAM,MAAsB,EAAE,IAAIoB,GAAU,GAClED,EAAOnB,GAAQoB,CAAQ;AAAA,QAC3B;AAAA,MACJ;AAAA,IACJ;AAEc,IAAAjB,EAAA,CAACc,GAAMN,CAAI,CAAC;AAAA,EAAA,GAGvBY;AAAA,IACHvB;AAAA,IACAwB,EAAiD;AAAA,MAC7C,SAAS,EAAE,OAAOvB,EAAK;AAAA,IAAA,CAC1B;AAAA,EAAA;AAET;"}
|