@gravity-ui/markdown-editor 15.12.1 → 15.13.1
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/build/cjs/core/ExtensionsManager.js +1 -1
- package/build/cjs/core/ExtensionsManager.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownSerializer.d.ts +1 -0
- package/build/cjs/core/markdown/MarkdownSerializer.js +8 -2
- package/build/cjs/core/markdown/MarkdownSerializer.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +6 -0
- package/build/cjs/extensions/behavior/SelectionContext/index.js +8 -2
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.d.ts +1 -1
- package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.js +7 -0
- package/build/cjs/extensions/markdown/Link/PlaceholderWidget/commands.js.map +1 -1
- package/build/cjs/extensions/markdown/Link/actions/linkEnhanceActions.js +3 -1
- package/build/cjs/extensions/markdown/Link/actions/linkEnhanceActions.js.map +1 -1
- package/build/cjs/extensions/yfm/Color/ColorSpecs/index.js +8 -3
- package/build/cjs/extensions/yfm/Color/ColorSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -1
- package/build/cjs/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/views.js +1 -0
- package/build/cjs/extensions/yfm/YfmTabs/views.js.map +1 -1
- package/build/cjs/markdown-it/color.d.ts +1 -1
- package/build/cjs/markdown-it/color.js +2 -2
- package/build/cjs/markdown-it/color.js.map +1 -1
- package/build/cjs/toolbar/FlexToolbar.js +1 -1
- package/build/cjs/toolbar/FlexToolbar.js.map +1 -1
- package/build/cjs/toolbar/ToolbarListButton.d.ts +4 -2
- package/build/cjs/toolbar/ToolbarListButton.js +3 -3
- package/build/cjs/toolbar/ToolbarListButton.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.d.ts +1 -1
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js +41 -38
- package/build/cjs/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/build/esm/core/ExtensionsManager.js +1 -1
- package/build/esm/core/ExtensionsManager.js.map +1 -1
- package/build/esm/core/markdown/MarkdownSerializer.d.ts +1 -0
- package/build/esm/core/markdown/MarkdownSerializer.js +8 -2
- package/build/esm/core/markdown/MarkdownSerializer.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/index.d.ts +6 -0
- package/build/esm/extensions/behavior/SelectionContext/index.js +8 -2
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.d.ts +1 -1
- package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.js +7 -0
- package/build/esm/extensions/markdown/Link/PlaceholderWidget/commands.js.map +1 -1
- package/build/esm/extensions/markdown/Link/actions/linkEnhanceActions.js +3 -1
- package/build/esm/extensions/markdown/Link/actions/linkEnhanceActions.js.map +1 -1
- package/build/esm/extensions/yfm/Color/ColorSpecs/index.js +8 -3
- package/build/esm/extensions/yfm/Color/ColorSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js +3 -1
- package/build/esm/extensions/yfm/YfmTabs/YfmTabsSpecs/schema.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/views.js +1 -0
- package/build/esm/extensions/yfm/YfmTabs/views.js.map +1 -1
- package/build/esm/markdown-it/color.d.ts +1 -1
- package/build/esm/markdown-it/color.js +1 -1
- package/build/esm/markdown-it/color.js.map +1 -1
- package/build/esm/toolbar/FlexToolbar.js +1 -1
- package/build/esm/toolbar/FlexToolbar.js.map +1 -1
- package/build/esm/toolbar/ToolbarListButton.d.ts +4 -2
- package/build/esm/toolbar/ToolbarListButton.js +3 -3
- package/build/esm/toolbar/ToolbarListButton.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.d.ts +1 -1
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js +41 -38
- package/build/esm/view/hooks/useFilesGallery/useFilesGallery.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTabs/views.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/YfmTabs/views.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Node} from 'prosemirror-model';\nimport {type EditorState, TextSelection} from 'prosemirror-state';\n// @ts-ignore // TODO: fix cjs build\nimport {findParentNodeOfTypeClosestToPos} from 'prosemirror-utils';\nimport type {EditorView, NodeViewConstructor, ViewMutationRecord} from 'prosemirror-view';\n\nimport {cn} from '../../../classname';\n\nimport {tabType, tabsType} from './const';\nimport {crossSvg, plusSvg} from './icons';\nimport {createTab, removeTab} from './plugins';\nimport {execAfterPaint} from './utils';\n\nimport './index.scss';\n\nconst cnYfmTab = cn('yfm-tab');\n\nconst ignoreMutation =\n (_node: Node, _view: EditorView, _getPos: () => number | undefined) =>\n (mutation: ViewMutationRecord) => {\n if (\n mutation instanceof MutationRecord &&\n mutation.type === 'attributes' &&\n mutation.attributeName\n ) {\n return true;\n }\n\n return false;\n };\n\nconst getTabNodes = (state: EditorState, getPos: () => number | undefined) => {\n const currentTab = findParentNodeOfTypeClosestToPos(\n state.tr.doc.resolve(getPos()! + 1),\n tabType(state.schema),\n );\n const tabsParentNode = findParentNodeOfTypeClosestToPos(\n state.tr.doc.resolve(getPos()!),\n tabsType(state.schema),\n );\n\n return {currentTab, tabsParentNode};\n};\n\nexport const tabView: NodeViewConstructor = (node, view, getPos) => {\n const tabElem = document.createElement('div');\n const wrapperElem = document.createElement('div');\n wrapperElem.setAttribute('class', cnYfmTab('wrapper'));\n\n const viewElem = document.createElement('div');\n viewElem.setAttribute('class', cnYfmTab('view'));\n\n wrapperElem.addEventListener('click', () => {\n // Click on parent node to trigger event listener that selects current tab\n tabElem.click();\n\n {\n /**\n * Hack for empty tabs\n *\n * Problem: when clicking on an empty tab (without text content) it focuses, and selection doesn't move to beginning of tab\n *\n * Temporary fix: manually return focus to pm-view, move text selection to beginning of tab\n */\n\n view.focus();\n\n // tab is empty\n if (node.nodeSize < 3) {\n execAfterPaint(() => {\n const pos = getPos();\n if (pos !== undefined) {\n const {tr} = view.state;\n view.dispatch(\n tr.setSelection(TextSelection.create(tr.doc, pos + 1)).scrollIntoView(),\n );\n }\n });\n }\n }\n });\n\n const removeTabButton = document.createElement('div');\n removeTabButton.setAttribute('class', cnYfmTab('remove-button'));\n removeTabButton.innerHTML = crossSvg;\n removeTabButton.contentEditable = 'false';\n removeTabButton.addEventListener('click', () => {\n const {state, dispatch} = view;\n const {currentTab, tabsParentNode} = getTabNodes(state, getPos);\n\n if (currentTab && tabsParentNode)\n removeTab(currentTab, tabsParentNode)(state, dispatch, view);\n });\n\n const createTabButton = document.createElement('div');\n createTabButton.setAttribute('class', cnYfmTab('create-button'));\n createTabButton.innerHTML = plusSvg;\n createTabButton.contentEditable = 'false';\n createTabButton.addEventListener('click', () => {\n const {state, dispatch} = view;\n const {currentTab, tabsParentNode} = getTabNodes(state, getPos);\n\n if (currentTab && tabsParentNode)\n createTab(currentTab, tabsParentNode)(state, dispatch, view);\n });\n\n tabElem.draggable = false;\n for (const attr in node.attrs) {\n if (Object.prototype.hasOwnProperty.call(node.attrs, attr)) {\n tabElem.setAttribute(attr, node.attrs[attr]);\n }\n }\n\n wrapperElem.appendChild(viewElem);\n wrapperElem.appendChild(removeTabButton);\n\n tabElem.appendChild(wrapperElem);\n tabElem.appendChild(createTabButton);\n\n return {\n dom: tabElem,\n contentDOM: viewElem,\n destroy() {\n tabElem.remove();\n },\n // FIX: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n };\n};\n\n// @ts-expect-error\nexport const tabPanelView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n\n// @ts-expect-error\nexport const vtabView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n\n// @ts-expect-error\nexport const vtabInputView: NodeViewConstructor = (node, view, getPos) => ({\n // FIXME: ignore mutation and don't rerender node when yfm.js switch tab\n ignoreMutation: ignoreMutation(node, view, getPos),\n});\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { colorPlugin } from '
|
|
1
|
+
import { colorPlugin } from '@diplodoc/color-extension';
|
|
2
2
|
export default colorPlugin;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
exports.default =
|
|
3
|
+
const color_extension_1 = require("@diplodoc/color-extension");
|
|
4
|
+
exports.default = color_extension_1.colorPlugin;
|
|
5
5
|
//# sourceMappingURL=color.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.js","sourceRoot":"../../../src","sources":["markdown-it/color.ts"],"names":[],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"../../../src","sources":["markdown-it/color.ts"],"names":[],"mappings":";;AAAA,+DAAsD;AAEtD,kBAAe,6BAAW,CAAC","sourcesContent":["import {colorPlugin} from '@diplodoc/color-extension';\n\nexport default colorPlugin;\n"]}
|
|
@@ -46,6 +46,6 @@ function FlexToolbar(props) {
|
|
|
46
46
|
hiddenActions: filteredHiddenAction,
|
|
47
47
|
});
|
|
48
48
|
}, [data, width, hiddenActions]);
|
|
49
|
-
return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: b(null, [className]), children: (0, jsx_runtime_1.jsxs)("div", { className: b('container'), children: [(0, jsx_runtime_1.jsx)(Toolbar_1.Toolbar, { ...props, data: items, className: b('bar') }), dots?.length && ((0, jsx_runtime_1.jsx)(ToolbarListButton_1.ToolbarListButton, { qa: "g-md-toolbar-more-action", data: dots, icon: { data: icons_1.Ellipsis }, title: props.dotsTitle, editor: props.editor, focus: props.focus, onClick: props.onClick, className: b('dots'), alwaysActive: true }))] }) }));
|
|
49
|
+
return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: b(null, [className]), children: (0, jsx_runtime_1.jsxs)("div", { className: b('container'), children: [(0, jsx_runtime_1.jsx)(Toolbar_1.Toolbar, { ...props, data: items, className: b('bar') }), dots?.length && ((0, jsx_runtime_1.jsx)(ToolbarListButton_1.ToolbarListButton, { qa: "g-md-toolbar-more-action", qaMenu: "g-md-toolbar-more-menu", data: dots, icon: { data: icons_1.Ellipsis }, title: props.dotsTitle, editor: props.editor, focus: props.focus, onClick: props.onClick, className: b('dots'), alwaysActive: true }))] }) }));
|
|
50
50
|
}
|
|
51
51
|
//# sourceMappingURL=FlexToolbar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlexToolbar.js","sourceRoot":"../../../src","sources":["toolbar/FlexToolbar.tsx"],"names":[],"mappings":";;AAuBA,
|
|
1
|
+
{"version":3,"file":"FlexToolbar.js","sourceRoot":"../../../src","sources":["toolbar/FlexToolbar.tsx"],"names":[],"mappings":";;AAuBA,kCAyDC;;AAhFD,iCAA8B;AAE9B,6CAA2C;AAC3C,yCAAqC;AAErC,+CAAgC;AAChC,yCAAiC;AACjC,mDAAmD;AAEnD,0CAAqD;AACrD,8DAAsD;AACtD,4CAA6C;AAC7C,sCAA8D;AAE9D,6BAA4B;AAE5B,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,cAAc,CAAC,CAAC;AAO7B,SAAgB,WAAW,CAAI,KAA0B;IACrD,IAAA,qBAAa,EAAC,CAAC,IAAI,EAAE,EAAE;QACnB,eAAM,CAAC,OAAO,CAAC;YACX,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,EAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAC,GAAG,KAAK,CAAC;IAE/C,MAAM,CAAC,GAAG,EAAE,EAAC,KAAK,EAAC,CAAC,GAAG,IAAA,sBAAU,GAAkB,CAAC;IACpD,MAAM,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAW,EAAE,YAAY,EAAE,EAAE;YAC/D,OAAO;gBACH,GAAG,CAAC;gBACJ,GAAG,YAAY;qBACV,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;oBACnB,IAAI,aAAa,CAAC,IAAI,KAAK,uBAAe,CAAC,UAAU,EAAE,CAAC;wBACpD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/C,CAAC;oBACD,OAAO,aAAa,CAAC,EAAE,CAAC;gBAC5B,CAAC,CAAC;qBACD,IAAI,EAAE;aACd,CAAC;QACN,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,sEAAsE;QACtE,MAAM,oBAAoB,GAAG,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,IAAA,4BAAiB,EAAC;YACrB,IAAI;YACJ,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,oBAAoB;SACtC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjC,OAAO,CACH,gCAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,YAC1C,iCAAK,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,aAC1B,uBAAC,iBAAO,OAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAI,EACvD,IAAI,EAAE,MAAM,IAAI,CACb,uBAAC,qCAAiB,IACd,EAAE,EAAC,0BAA0B,EAC7B,MAAM,EAAC,wBAAwB,EAC/B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,EAAC,IAAI,EAAE,gBAAQ,EAAC,EACtB,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,IAAI,GACpB,CACL,IACC,GACJ,CACT,CAAC;AACN,CAAC","sourcesContent":["import {useMemo} from 'react';\n\nimport {Ellipsis} from '@gravity-ui/icons';\nimport {useMeasure} from 'react-use';\n\nimport {cn} from '../classname';\nimport {logger} from '../logger';\nimport {useRenderTime} from '../react-utils/hooks';\n\nimport {Toolbar, type ToolbarProps} from './Toolbar';\nimport {ToolbarListButton} from './ToolbarListButton';\nimport {shrinkToolbarData} from './flexible';\nimport {ToolbarDataType, type ToolbarItemData} from './types';\n\nimport './FlexToolbar.scss';\n\nconst b = cn('flex-toolbar');\n\nexport type FlexToolbarProps<E> = ToolbarProps<E> & {\n dotsTitle: string | (() => string);\n hiddenActions?: ToolbarItemData<E>[];\n};\n\nexport function FlexToolbar<E>(props: FlexToolbarProps<E>) {\n useRenderTime((time) => {\n logger.metrics({\n component: 'toolbar',\n event: 'render',\n duration: time,\n });\n });\n\n const {data, className, hiddenActions} = props;\n\n const [ref, {width}] = useMeasure<HTMLDivElement>();\n const {data: items, dots} = useMemo(() => {\n const toolbarButtonIds = data.reduce((a: string[], toolbarGroup) => {\n return [\n ...a,\n ...toolbarGroup\n .map((toolbarButton) => {\n if (toolbarButton.type === ToolbarDataType.ListButton) {\n return toolbarButton.data.map((v) => v.id);\n }\n return toolbarButton.id;\n })\n .flat(),\n ];\n }, []);\n\n // Finding only actions tha are not present in the main toolbar config\n const filteredHiddenAction = hiddenActions?.filter((a) => !toolbarButtonIds.includes(a.id));\n return shrinkToolbarData({\n data,\n availableWidth: width,\n hiddenActions: filteredHiddenAction,\n });\n }, [data, width, hiddenActions]);\n\n return (\n <div ref={ref} className={b(null, [className])}>\n <div className={b('container')}>\n <Toolbar {...props} data={items} className={b('bar')} />\n {dots?.length && (\n <ToolbarListButton\n qa=\"g-md-toolbar-more-action\"\n qaMenu=\"g-md-toolbar-more-menu\"\n data={dots}\n icon={{data: Ellipsis}}\n title={props.dotsTitle}\n editor={props.editor}\n focus={props.focus}\n onClick={props.onClick}\n className={b('dots')}\n alwaysActive={true}\n />\n )}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ToolbarBaseProps, ToolbarListButtonData } from "./types.js";
|
|
2
2
|
import "./ToolbarListButton.css";
|
|
3
3
|
export type { ToolbarListButtonData };
|
|
4
|
-
export type ToolbarListButtonProps<E> = ToolbarBaseProps<E> & ToolbarListButtonData<E
|
|
5
|
-
|
|
4
|
+
export type ToolbarListButtonProps<E> = ToolbarBaseProps<E> & ToolbarListButtonData<E> & {
|
|
5
|
+
qaMenu?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function ToolbarListButton<E>({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, qaMenu, }: ToolbarListButtonProps<E>): JSX.Element | null;
|
|
@@ -13,7 +13,7 @@ const PreviewTooltip_1 = require("./PreviewTooltip.js");
|
|
|
13
13
|
const ToolbarButton_1 = require("./ToolbarButton.js");
|
|
14
14
|
require("./ToolbarListButton.css");
|
|
15
15
|
const b = (0, classname_1.cn)('toolbar-list-button');
|
|
16
|
-
function ToolbarListButton({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, }) {
|
|
16
|
+
function ToolbarListButton({ className, editor, focus, onClick, icon, title, withArrow, data, alwaysActive, replaceActiveIcon, qa, qaMenu, }) {
|
|
17
17
|
const [anchorElement, setAnchorElement] = (0, hooks_1.useElementState)();
|
|
18
18
|
const [open, , hide, toggleOpen] = (0, hooks_1.useBooleanState)(false);
|
|
19
19
|
const [popupItem, setPopupItem] = (0, react_1.useState)();
|
|
@@ -42,7 +42,7 @@ function ToolbarListButton({ className, editor, focus, onClick, icon, title, wit
|
|
|
42
42
|
setPopupItem(undefined);
|
|
43
43
|
else
|
|
44
44
|
toggleOpen();
|
|
45
|
-
}, children: buttonContent }), (0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorElement: anchorElement, open: popupOpen, onOpenChange: hide, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu, { size: "l", className: b('menu'), children: data
|
|
45
|
+
}, children: buttonContent }), (0, jsx_runtime_1.jsx)(uikit_1.Popup, { anchorElement: anchorElement, open: popupOpen, onOpenChange: hide, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu, { size: "l", className: b('menu'), qa: qaMenu, children: data
|
|
46
46
|
.map((data) => {
|
|
47
47
|
const { id, title, icon, hotkey, isActive, isEnable, exec, hint, hintWhenDisabled, preview, } = data;
|
|
48
48
|
const titleText = (0, lodash_1.isFunction)(title) ? title() : title;
|
|
@@ -66,7 +66,7 @@ function ToolbarListButton({ className, editor, focus, onClick, icon, title, wit
|
|
|
66
66
|
onClick?.(id);
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
|
-
return ((0, jsx_runtime_1.jsx)(uikit_1.Popover, { className: b('action-disabled-popover'), content: (0, jsx_runtime_1.jsx)("div", { className: b('action-disabled-tooltip'), children: hintWhenDisabledText }), placement: "left", modal: false, disabled: hideHintWhenDisabled, children: (props, ref) => ((0, jsx_runtime_1.jsx)(PreviewTooltip_1.PreviewTooltip, { preview: preview, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu.Item, { ref: ref, active: isActive(editor), disabled: !isEnable(editor), onClick: handleClick, iconStart: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icon.data, size: icon.size ?? 16 }), extraProps: {
|
|
69
|
+
return ((0, jsx_runtime_1.jsx)(uikit_1.Popover, { className: b('action-disabled-popover'), content: (0, jsx_runtime_1.jsx)("div", { className: b('action-disabled-tooltip'), children: hintWhenDisabledText }), placement: "left", modal: false, disabled: hideHintWhenDisabled, qa: "g-md-toolbar-action-disabled-hint", children: (props, ref) => ((0, jsx_runtime_1.jsx)(PreviewTooltip_1.PreviewTooltip, { preview: preview, children: (0, jsx_runtime_1.jsx)(uikit_1.Menu.Item, { ref: ref, active: isActive(editor), disabled: !isEnable(editor), onClick: handleClick, iconStart: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icon.data, size: icon.size ?? 16 }), extraProps: {
|
|
70
70
|
...props,
|
|
71
71
|
'aria-label': titleText,
|
|
72
72
|
}, children: (0, jsx_runtime_1.jsxs)("div", { className: b('item'), children: [titleText, (0, jsx_runtime_1.jsxs)("div", { className: b('extra'), children: [hotkey && (0, jsx_runtime_1.jsx)(uikit_1.Hotkey, { value: hotkey }), hintText && ((0, jsx_runtime_1.jsx)(uikit_1.HelpMark, { className: b('hint'), popoverProps: { modal: false }, children: hintText }))] })] }) }, id) })) }, id));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarListButton.js","sourceRoot":"../../../src","sources":["toolbar/ToolbarListButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Fragment, useEffect, useState} from 'react';\n\nimport {ChevronDown} from '@gravity-ui/icons';\nimport {HelpMark, Hotkey, Icon, Menu, Popover, Popup} from '@gravity-ui/uikit';\n\nimport {cn} from '../classname';\nimport {i18n} from '../i18n/common';\nimport {isFunction} from '../lodash';\nimport {useBooleanState, useElementState} from '../react-utils/hooks';\n\nimport {PreviewTooltip} from './PreviewTooltip';\nimport {ToolbarButtonView} from './ToolbarButton';\nimport type {\n ToolbarBaseProps,\n ToolbarButtonPopupData,\n ToolbarItemData,\n ToolbarListButtonData,\n} from './types';\n\nimport './ToolbarListButton.scss';\n\nconst b = cn('toolbar-list-button');\n\nexport type {ToolbarListButtonData};\n\nexport type ToolbarListButtonProps<E> = ToolbarBaseProps<E> & ToolbarListButtonData<E>;\n\nexport function ToolbarListButton<E>({\n className,\n editor,\n focus,\n onClick,\n icon,\n title,\n withArrow,\n data,\n alwaysActive,\n replaceActiveIcon,\n qa,\n}: ToolbarListButtonProps<E>) {\n const [anchorElement, setAnchorElement] = useElementState();\n const [open, , hide, toggleOpen] = useBooleanState(false);\n const [popupItem, setPopupItem] = useState<ToolbarButtonPopupData<E>>();\n\n const everyDisabled = alwaysActive ? false : data.every((item) => !item.isEnable(editor));\n const popupOpen = everyDisabled ? false : open;\n const shouldForceHide = open && !popupOpen;\n useEffect(() => {\n if (shouldForceHide) {\n hide();\n }\n }, [hide, shouldForceHide]);\n\n if (data.length === 0) return null;\n\n const activeItem = data.find((item) => item.isActive(editor) && !item.doNotActivateList);\n const someActive = alwaysActive ? false : Boolean(activeItem);\n\n if (replaceActiveIcon && someActive && activeItem) {\n icon = activeItem.icon;\n }\n\n const buttonContent = [<Icon key={1} data={icon.data} size={icon.size ?? 16} />];\n if (withArrow) {\n buttonContent.push(<Fragment key={2}>{''}</Fragment>);\n buttonContent.push(<Icon key={3} data={ChevronDown} size={16} />);\n }\n\n return (\n <>\n <ToolbarButtonView\n qa={qa}\n ref={setAnchorElement}\n active={someActive}\n enabled={!everyDisabled}\n title={title}\n className={b({arrow: withArrow}, [className])}\n onClick={() => {\n if (popupItem) setPopupItem(undefined);\n else toggleOpen();\n }}\n >\n {buttonContent}\n </ToolbarButtonView>\n <Popup anchorElement={anchorElement} open={popupOpen} onOpenChange={hide}>\n <Menu size=\"l\" className={b('menu')}>\n {data\n .map((data) => {\n const {\n id,\n title,\n icon,\n hotkey,\n isActive,\n isEnable,\n exec,\n hint,\n hintWhenDisabled,\n preview,\n } = data;\n\n const titleText = isFunction(title) ? title() : title;\n const hintText = isFunction(hint) ? hint() : hint;\n\n const disabled = !isEnable(editor);\n\n const hideHintWhenDisabled = hintWhenDisabled === false || !disabled;\n const hintWhenDisabledText =\n typeof hintWhenDisabled === 'string'\n ? hintWhenDisabled\n : typeof hintWhenDisabled === 'function'\n ? hintWhenDisabled()\n : i18n('toolbar_action_disabled');\n\n const handleClick = () => {\n hide();\n\n if (isPopupItem(data)) {\n setPopupItem(data);\n } else {\n setPopupItem(undefined);\n focus();\n exec(editor);\n onClick?.(id);\n }\n };\n\n return (\n <Popover\n className={b('action-disabled-popover')}\n content={\n <div className={b('action-disabled-tooltip')}>\n {hintWhenDisabledText}\n </div>\n }\n placement=\"left\"\n modal={false}\n disabled={hideHintWhenDisabled}\n key={id}\n >\n {(props, ref) => (\n <PreviewTooltip preview={preview}>\n <Menu.Item\n key={id}\n ref={ref}\n active={isActive(editor)}\n disabled={!isEnable(editor)}\n onClick={handleClick}\n iconStart={\n <Icon data={icon.data} size={icon.size ?? 16} />\n }\n extraProps={{\n ...props,\n 'aria-label': titleText,\n }}\n >\n <div className={b('item')}>\n {titleText}\n <div className={b('extra')}>\n {hotkey && <Hotkey value={hotkey} />}\n {hintText && (\n <HelpMark\n className={b('hint')}\n popoverProps={{modal: false}}\n >\n {hintText}\n </HelpMark>\n )}\n </div>\n </div>\n </Menu.Item>\n </PreviewTooltip>\n )}\n </Popover>\n );\n })\n .filter(Boolean)}\n </Menu>\n </Popup>\n {popupItem\n ? popupItem.renderPopup({\n ...popupItem,\n editor,\n focus,\n onClick,\n anchorElement,\n hide: () => setPopupItem(undefined),\n })\n : null}\n </>\n );\n}\n\nfunction isPopupItem<E>(item: ToolbarItemData<E>): item is ToolbarButtonPopupData<E> {\n return Boolean((item as ToolbarButtonPopupData<E>).renderPopup);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ToolbarListButton.js","sourceRoot":"../../../src","sources":["toolbar/ToolbarListButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Fragment, useEffect, useState} from 'react';\n\nimport {ChevronDown} from '@gravity-ui/icons';\nimport {HelpMark, Hotkey, Icon, Menu, Popover, Popup} from '@gravity-ui/uikit';\n\nimport {cn} from '../classname';\nimport {i18n} from '../i18n/common';\nimport {isFunction} from '../lodash';\nimport {useBooleanState, useElementState} from '../react-utils/hooks';\n\nimport {PreviewTooltip} from './PreviewTooltip';\nimport {ToolbarButtonView} from './ToolbarButton';\nimport type {\n ToolbarBaseProps,\n ToolbarButtonPopupData,\n ToolbarItemData,\n ToolbarListButtonData,\n} from './types';\n\nimport './ToolbarListButton.scss';\n\nconst b = cn('toolbar-list-button');\n\nexport type {ToolbarListButtonData};\n\nexport type ToolbarListButtonProps<E> = ToolbarBaseProps<E> &\n ToolbarListButtonData<E> & {\n qaMenu?: string;\n };\n\nexport function ToolbarListButton<E>({\n className,\n editor,\n focus,\n onClick,\n icon,\n title,\n withArrow,\n data,\n alwaysActive,\n replaceActiveIcon,\n qa,\n qaMenu,\n}: ToolbarListButtonProps<E>) {\n const [anchorElement, setAnchorElement] = useElementState();\n const [open, , hide, toggleOpen] = useBooleanState(false);\n const [popupItem, setPopupItem] = useState<ToolbarButtonPopupData<E>>();\n\n const everyDisabled = alwaysActive ? false : data.every((item) => !item.isEnable(editor));\n const popupOpen = everyDisabled ? false : open;\n const shouldForceHide = open && !popupOpen;\n useEffect(() => {\n if (shouldForceHide) {\n hide();\n }\n }, [hide, shouldForceHide]);\n\n if (data.length === 0) return null;\n\n const activeItem = data.find((item) => item.isActive(editor) && !item.doNotActivateList);\n const someActive = alwaysActive ? false : Boolean(activeItem);\n\n if (replaceActiveIcon && someActive && activeItem) {\n icon = activeItem.icon;\n }\n\n const buttonContent = [<Icon key={1} data={icon.data} size={icon.size ?? 16} />];\n if (withArrow) {\n buttonContent.push(<Fragment key={2}>{''}</Fragment>);\n buttonContent.push(<Icon key={3} data={ChevronDown} size={16} />);\n }\n\n return (\n <>\n <ToolbarButtonView\n qa={qa}\n ref={setAnchorElement}\n active={someActive}\n enabled={!everyDisabled}\n title={title}\n className={b({arrow: withArrow}, [className])}\n onClick={() => {\n if (popupItem) setPopupItem(undefined);\n else toggleOpen();\n }}\n >\n {buttonContent}\n </ToolbarButtonView>\n <Popup anchorElement={anchorElement} open={popupOpen} onOpenChange={hide}>\n <Menu size=\"l\" className={b('menu')} qa={qaMenu}>\n {data\n .map((data) => {\n const {\n id,\n title,\n icon,\n hotkey,\n isActive,\n isEnable,\n exec,\n hint,\n hintWhenDisabled,\n preview,\n } = data;\n\n const titleText = isFunction(title) ? title() : title;\n const hintText = isFunction(hint) ? hint() : hint;\n\n const disabled = !isEnable(editor);\n\n const hideHintWhenDisabled = hintWhenDisabled === false || !disabled;\n const hintWhenDisabledText =\n typeof hintWhenDisabled === 'string'\n ? hintWhenDisabled\n : typeof hintWhenDisabled === 'function'\n ? hintWhenDisabled()\n : i18n('toolbar_action_disabled');\n\n const handleClick = () => {\n hide();\n\n if (isPopupItem(data)) {\n setPopupItem(data);\n } else {\n setPopupItem(undefined);\n focus();\n exec(editor);\n onClick?.(id);\n }\n };\n\n return (\n <Popover\n className={b('action-disabled-popover')}\n content={\n <div className={b('action-disabled-tooltip')}>\n {hintWhenDisabledText}\n </div>\n }\n placement=\"left\"\n modal={false}\n disabled={hideHintWhenDisabled}\n qa=\"g-md-toolbar-action-disabled-hint\"\n key={id}\n >\n {(props, ref) => (\n <PreviewTooltip preview={preview}>\n <Menu.Item\n key={id}\n ref={ref}\n active={isActive(editor)}\n disabled={!isEnable(editor)}\n onClick={handleClick}\n iconStart={\n <Icon data={icon.data} size={icon.size ?? 16} />\n }\n extraProps={{\n ...props,\n 'aria-label': titleText,\n }}\n >\n <div className={b('item')}>\n {titleText}\n <div className={b('extra')}>\n {hotkey && <Hotkey value={hotkey} />}\n {hintText && (\n <HelpMark\n className={b('hint')}\n popoverProps={{modal: false}}\n >\n {hintText}\n </HelpMark>\n )}\n </div>\n </div>\n </Menu.Item>\n </PreviewTooltip>\n )}\n </Popover>\n );\n })\n .filter(Boolean)}\n </Menu>\n </Popup>\n {popupItem\n ? popupItem.renderPopup({\n ...popupItem,\n editor,\n focus,\n onClick,\n anchorElement,\n hide: () => setPopupItem(undefined),\n })\n : null}\n </>\n );\n}\n\nfunction isPopupItem<E>(item: ToolbarItemData<E>): item is ToolbarButtonPopupData<E> {\n return Boolean((item as ToolbarButtonPopupData<E>).renderPopup);\n}\n"]}
|
package/build/cjs/version.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
/** During build process, the current version will be injected here */
|
|
5
|
-
exports.VERSION = typeof '15.
|
|
5
|
+
exports.VERSION = typeof '15.13.1' !== 'undefined' ? '15.13.1' : 'unknown';
|
|
6
6
|
//# sourceMappingURL=version.js.map
|
package/build/cjs/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.13.1' !== 'undefined' ? '15.13.1' : 'unknown';\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { GalleryItemPropsWithUrl } from "./types.js";
|
|
3
3
|
export declare function useFilesGallery(customFiles?: GalleryItemPropsWithUrl[]): {
|
|
4
|
-
openFilesGallery: (event: React.MouseEvent<HTMLDivElement>) =>
|
|
4
|
+
openFilesGallery: (event: React.MouseEvent<HTMLDivElement>) => boolean;
|
|
5
5
|
};
|
|
@@ -9,47 +9,50 @@ function useFilesGallery(customFiles) {
|
|
|
9
9
|
const { openGallery } = (0, components_1.useGallery)();
|
|
10
10
|
return {
|
|
11
11
|
openFilesGallery: React.useCallback((event) => {
|
|
12
|
-
if (event.target instanceof HTMLElement) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
12
|
+
if (!(event.target instanceof HTMLElement)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
let fileLink = '';
|
|
16
|
+
if (event.target.tagName === 'IMG' && !event.target.closest('a')) {
|
|
17
|
+
fileLink = event.target.getAttribute('src') ?? '';
|
|
18
|
+
}
|
|
19
|
+
else if (event.target.tagName === 'A') {
|
|
20
|
+
fileLink = event.target.getAttribute('href') ?? '';
|
|
21
|
+
}
|
|
22
|
+
if (!fileLink) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const filesFromContent = [
|
|
26
|
+
...(event.currentTarget?.querySelectorAll('img,a') ?? []),
|
|
27
|
+
].reduce((result, element) => {
|
|
28
|
+
const isImage = element.tagName === 'IMG';
|
|
29
|
+
const link = isImage
|
|
30
|
+
? element.getAttribute('src')
|
|
31
|
+
: element.getAttribute('href');
|
|
32
|
+
if (link && !customFiles?.some((item) => item.url === link)) {
|
|
33
|
+
const extension = link.match(constants_1.extensionRegex)?.[0] || '';
|
|
34
|
+
if (isImage || constants_1.supportedExtensions.includes(extension)) {
|
|
35
|
+
const name = (isImage
|
|
36
|
+
? element.getAttribute('alt')
|
|
37
|
+
: element.getAttribute('title')) || '';
|
|
38
|
+
result.push({
|
|
39
|
+
...(constants_1.supportedVideoExtensions.includes(extension)
|
|
40
|
+
? (0, components_1.getGalleryItemVideo)({ src: link, name: name })
|
|
41
|
+
: (0, components_1.getGalleryItemImage)({ src: link, name: name })),
|
|
42
|
+
url: link,
|
|
43
|
+
});
|
|
43
44
|
}
|
|
44
|
-
return result;
|
|
45
|
-
}, []);
|
|
46
|
-
const files = [...(customFiles ?? []), ...filesFromContent];
|
|
47
|
-
const initialItemIndex = files.findIndex((item) => item.url === fileLink);
|
|
48
|
-
if (initialItemIndex !== -1) {
|
|
49
|
-
event.preventDefault();
|
|
50
|
-
openGallery(files, initialItemIndex);
|
|
51
45
|
}
|
|
46
|
+
return result;
|
|
47
|
+
}, []);
|
|
48
|
+
const files = [...(customFiles ?? []), ...filesFromContent];
|
|
49
|
+
const initialItemIndex = files.findIndex((item) => item.url === fileLink);
|
|
50
|
+
if (initialItemIndex !== -1) {
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
openGallery(files, initialItemIndex);
|
|
53
|
+
return true;
|
|
52
54
|
}
|
|
55
|
+
return false;
|
|
53
56
|
}, [customFiles, openGallery]),
|
|
54
57
|
};
|
|
55
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilesGallery.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/useFilesGallery.tsx"],"names":[],"mappings":";;AAOA,
|
|
1
|
+
{"version":3,"file":"useFilesGallery.js","sourceRoot":"../../../../../src","sources":["view/hooks/useFilesGallery/useFilesGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {getGalleryItemImage, getGalleryItemVideo, useGallery} from '@gravity-ui/components';\n\nimport {extensionRegex, supportedExtensions, supportedVideoExtensions} from './constants';\nimport type {GalleryItemPropsWithUrl} from './types';\n\nexport function useFilesGallery(customFiles?: GalleryItemPropsWithUrl[]) {\n const {openGallery} = useGallery();\n\n return {\n openFilesGallery: React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (!(event.target instanceof HTMLElement)) {\n return false;\n }\n\n let fileLink = '';\n\n if (event.target.tagName === 'IMG' && !event.target.closest('a')) {\n fileLink = event.target.getAttribute('src') ?? '';\n } else if (event.target.tagName === 'A') {\n fileLink = event.target.getAttribute('href') ?? '';\n }\n\n if (!fileLink) {\n return false;\n }\n\n const filesFromContent = [\n ...(event.currentTarget?.querySelectorAll('img,a') ?? []),\n ].reduce<GalleryItemPropsWithUrl[]>((result, element) => {\n const isImage = element.tagName === 'IMG';\n const link = isImage\n ? element.getAttribute('src')\n : element.getAttribute('href');\n\n if (link && !customFiles?.some((item) => item.url === link)) {\n const extension = link.match(extensionRegex)?.[0] || '';\n\n if (isImage || supportedExtensions.includes(extension)) {\n const name =\n (isImage\n ? element.getAttribute('alt')\n : element.getAttribute('title')) || '';\n\n result.push({\n ...(supportedVideoExtensions.includes(extension)\n ? getGalleryItemVideo({src: link, name: name})\n : getGalleryItemImage({src: link, name: name})),\n url: link,\n });\n }\n }\n\n return result;\n }, []);\n\n const files = [...(customFiles ?? []), ...filesFromContent];\n\n const initialItemIndex = files.findIndex((item) => item.url === fileLink);\n\n if (initialItemIndex !== -1) {\n event.preventDefault();\n openGallery(files, initialItemIndex);\n return true;\n }\n\n return false;\n },\n [customFiles, openGallery],\n ),\n };\n}\n"]}
|
|
@@ -74,7 +74,7 @@ export class ExtensionsManager {
|
|
|
74
74
|
this.#spec.nodes().forEach(this.processNode);
|
|
75
75
|
this.#spec.marks().forEach(this.processMark);
|
|
76
76
|
}
|
|
77
|
-
processNode = (name, { spec, fromMd, toMd
|
|
77
|
+
processNode = (name, { spec, fromMd, toMd, view }) => {
|
|
78
78
|
this.#schemaRegistry.addNode(name, spec);
|
|
79
79
|
this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);
|
|
80
80
|
this.#serializerRegistry.addNode(name, toMd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtensionsManager.js","sourceRoot":"../../../src","sources":["core/ExtensionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import MarkdownIt, {type PresetName} from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport {Logger2} from '../logger';\n\nimport {ActionsManager} from './ActionsManager';\nimport {ExtensionBuilder} from './ExtensionBuilder';\nimport {ParserTokensRegistry} from './ParserTokensRegistry';\nimport type {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {SchemaSpecRegistry} from './SchemaSpecRegistry';\nimport {SerializerTokensRegistry} from './SerializerTokensRegistry';\nimport type {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n} from './types/extension';\nimport type {MarkViewConstructor, NodeViewConstructor} from './types/node-views';\n\ntype ExtensionsManagerParams = {\n logger?: Logger2.ILogger;\n extensions: Extension;\n options?: ExtensionsManagerOptions;\n};\n\ntype ExtensionsManagerOptions = {\n mdOpts?: MarkdownIt.Options & {preset?: PresetName};\n linkifyTlds?: string | string[];\n pmTransformers?: TransformFn[];\n dynamicModifiers?: {\n parser?: MarkdownParserDynamicModifier;\n serializer?: MarkdownSerializerDynamicModifier;\n schema?: SchemaDynamicModifier;\n };\n};\n\nexport class ExtensionsManager {\n static process(\n extensions: Extension,\n options: ExtensionsManagerOptions,\n logger?: Logger2.ILogger,\n ) {\n return new this({extensions, options, logger}).build();\n }\n\n #schemaRegistry;\n #parserRegistry;\n #serializerRegistry;\n\n #nodeViewCreators = new Map<string, (deps: ExtensionDeps) => NodeViewConstructor>();\n #markViewCreators = new Map<string, (deps: ExtensionDeps) => MarkViewConstructor>();\n\n #pmTransformers: TransformFn[] = [];\n\n #mdForMarkup: MarkdownIt;\n #mdForText: MarkdownIt;\n #extensions: Extension;\n #builder: ExtensionBuilder;\n\n #spec!: ExtensionSpec;\n #deps!: ExtensionDeps;\n #plugins: Plugin[] = [];\n #actions: Record<string, ActionSpec> = {};\n #nodeViews: Record<string, NodeViewConstructor> = {};\n #markViews: Record<string, MarkViewConstructor> = {};\n #serializerDynamicModifier?: MarkdownSerializerDynamicModifier;\n #parserDynamicModifier?: MarkdownParserDynamicModifier;\n\n constructor({extensions, options = {}, logger = new Logger2()}: ExtensionsManagerParams) {\n this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);\n this.#parserRegistry = new ParserTokensRegistry({logger});\n this.#serializerRegistry = new SerializerTokensRegistry();\n if (options.dynamicModifiers) {\n this.#parserDynamicModifier = options.dynamicModifiers?.parser;\n this.#serializerDynamicModifier = options.dynamicModifiers?.serializer;\n }\n\n this.#extensions = extensions;\n\n const mdPreset: PresetName = options.mdOpts?.preset ?? 'default';\n this.#mdForMarkup = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n this.#mdForText = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n\n if (options.linkifyTlds) {\n this.#mdForMarkup.linkify.tlds(options.linkifyTlds, true);\n this.#mdForText.linkify.tlds(options.linkifyTlds, true);\n }\n\n if (options.pmTransformers) {\n this.#pmTransformers = options.pmTransformers;\n }\n\n // TODO: add prefilled context\n this.#builder = new ExtensionBuilder(logger);\n }\n\n build() {\n this.processExtensions();\n this.createDeps();\n this.createDerived();\n\n return {\n ...this.#deps,\n actions: this.#deps.actions as ActionsManager,\n rawActions: this.#actions,\n plugins: this.#plugins,\n nodeViews: this.#nodeViews,\n markViews: this.#markViews,\n };\n }\n\n buildDeps() {\n this.processExtensions();\n this.createDeps();\n return this.#deps;\n }\n\n private processExtensions() {\n this.#spec = this.#builder.use(this.#extensions).build();\n this.#mdForMarkup = this.#spec.configureMd(this.#mdForMarkup, 'markup');\n this.#mdForText = this.#spec.configureMd(this.#mdForText, 'text');\n this.#spec.nodes().forEach(this.processNode);\n this.#spec.marks().forEach(this.processMark);\n }\n\n private processNode = (name: string, {spec, fromMd, toMd: toMd, view}: ExtensionNodeSpec) => {\n this.#schemaRegistry.addNode(name, spec);\n\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addNode(name, toMd);\n if (view) {\n this.#nodeViewCreators.set(name, view);\n }\n };\n\n private processMark = (name: string, {spec, fromMd, toMd, view}: ExtensionMarkSpec) => {\n this.#schemaRegistry.addMark(name, spec);\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addMark(name, toMd);\n if (view) {\n this.#markViewCreators.set(name, view);\n }\n };\n\n private createParser(schema: Schema, mdInstance: MarkdownIt) {\n return this.#parserRegistry.createParser(\n schema,\n mdInstance,\n this.#pmTransformers,\n this.#parserDynamicModifier,\n );\n }\n\n private createDeps() {\n const actions = new ActionsManager();\n\n const schema = this.#schemaRegistry.createSchema();\n const markupParser = this.createParser(schema, this.#mdForMarkup);\n const textParser = this.createParser(schema, this.#mdForText);\n const serializer = this.#serializerRegistry.createSerializer(\n this.#serializerDynamicModifier,\n );\n\n this.#deps = {\n schema,\n actions,\n markupParser,\n textParser,\n serializer,\n };\n }\n\n private createDerived() {\n this.#plugins = this.#spec.plugins(this.#deps);\n Object.assign(this.#actions, this.#spec.actions(this.#deps));\n\n for (const [name, view] of this.#nodeViewCreators) {\n this.#nodeViews[name] = view(this.#deps);\n }\n\n for (const [name, view] of this.#markViewCreators) {\n this.#markViews[name] = view(this.#deps);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExtensionsManager.js","sourceRoot":"../../../src","sources":["core/ExtensionsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import MarkdownIt, {type PresetName} from 'markdown-it';\nimport type {Schema} from 'prosemirror-model';\nimport type {Plugin} from 'prosemirror-state';\n\nimport {Logger2} from '../logger';\n\nimport {ActionsManager} from './ActionsManager';\nimport {ExtensionBuilder} from './ExtensionBuilder';\nimport {ParserTokensRegistry} from './ParserTokensRegistry';\nimport type {SchemaDynamicModifier} from './SchemaDynamicModifier';\nimport {SchemaSpecRegistry} from './SchemaSpecRegistry';\nimport {SerializerTokensRegistry} from './SerializerTokensRegistry';\nimport type {MarkdownParserDynamicModifier} from './markdown/MarkdownParser';\nimport type {MarkdownSerializerDynamicModifier} from './markdown/MarkdownSerializerDynamicModifier';\nimport type {TransformFn} from './markdown/ProseMirrorTransformer';\nimport type {ActionSpec} from './types/actions';\nimport type {\n Extension,\n ExtensionDeps,\n ExtensionMarkSpec,\n ExtensionNodeSpec,\n ExtensionSpec,\n} from './types/extension';\nimport type {MarkViewConstructor, NodeViewConstructor} from './types/node-views';\n\ntype ExtensionsManagerParams = {\n logger?: Logger2.ILogger;\n extensions: Extension;\n options?: ExtensionsManagerOptions;\n};\n\ntype ExtensionsManagerOptions = {\n mdOpts?: MarkdownIt.Options & {preset?: PresetName};\n linkifyTlds?: string | string[];\n pmTransformers?: TransformFn[];\n dynamicModifiers?: {\n parser?: MarkdownParserDynamicModifier;\n serializer?: MarkdownSerializerDynamicModifier;\n schema?: SchemaDynamicModifier;\n };\n};\n\nexport class ExtensionsManager {\n static process(\n extensions: Extension,\n options: ExtensionsManagerOptions,\n logger?: Logger2.ILogger,\n ) {\n return new this({extensions, options, logger}).build();\n }\n\n #schemaRegistry;\n #parserRegistry;\n #serializerRegistry;\n\n #nodeViewCreators = new Map<string, (deps: ExtensionDeps) => NodeViewConstructor>();\n #markViewCreators = new Map<string, (deps: ExtensionDeps) => MarkViewConstructor>();\n\n #pmTransformers: TransformFn[] = [];\n\n #mdForMarkup: MarkdownIt;\n #mdForText: MarkdownIt;\n #extensions: Extension;\n #builder: ExtensionBuilder;\n\n #spec!: ExtensionSpec;\n #deps!: ExtensionDeps;\n #plugins: Plugin[] = [];\n #actions: Record<string, ActionSpec> = {};\n #nodeViews: Record<string, NodeViewConstructor> = {};\n #markViews: Record<string, MarkViewConstructor> = {};\n #serializerDynamicModifier?: MarkdownSerializerDynamicModifier;\n #parserDynamicModifier?: MarkdownParserDynamicModifier;\n\n constructor({extensions, options = {}, logger = new Logger2()}: ExtensionsManagerParams) {\n this.#schemaRegistry = new SchemaSpecRegistry(undefined, options.dynamicModifiers?.schema);\n this.#parserRegistry = new ParserTokensRegistry({logger});\n this.#serializerRegistry = new SerializerTokensRegistry();\n if (options.dynamicModifiers) {\n this.#parserDynamicModifier = options.dynamicModifiers?.parser;\n this.#serializerDynamicModifier = options.dynamicModifiers?.serializer;\n }\n\n this.#extensions = extensions;\n\n const mdPreset: PresetName = options.mdOpts?.preset ?? 'default';\n this.#mdForMarkup = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n this.#mdForText = new MarkdownIt(mdPreset, options.mdOpts ?? {});\n\n if (options.linkifyTlds) {\n this.#mdForMarkup.linkify.tlds(options.linkifyTlds, true);\n this.#mdForText.linkify.tlds(options.linkifyTlds, true);\n }\n\n if (options.pmTransformers) {\n this.#pmTransformers = options.pmTransformers;\n }\n\n // TODO: add prefilled context\n this.#builder = new ExtensionBuilder(logger);\n }\n\n build() {\n this.processExtensions();\n this.createDeps();\n this.createDerived();\n\n return {\n ...this.#deps,\n actions: this.#deps.actions as ActionsManager,\n rawActions: this.#actions,\n plugins: this.#plugins,\n nodeViews: this.#nodeViews,\n markViews: this.#markViews,\n };\n }\n\n buildDeps() {\n this.processExtensions();\n this.createDeps();\n return this.#deps;\n }\n\n private processExtensions() {\n this.#spec = this.#builder.use(this.#extensions).build();\n this.#mdForMarkup = this.#spec.configureMd(this.#mdForMarkup, 'markup');\n this.#mdForText = this.#spec.configureMd(this.#mdForText, 'text');\n this.#spec.nodes().forEach(this.processNode);\n this.#spec.marks().forEach(this.processMark);\n }\n\n private processNode = (name: string, {spec, fromMd, toMd, view}: ExtensionNodeSpec) => {\n this.#schemaRegistry.addNode(name, spec);\n\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addNode(name, toMd);\n if (view) {\n this.#nodeViewCreators.set(name, view);\n }\n };\n\n private processMark = (name: string, {spec, fromMd, toMd, view}: ExtensionMarkSpec) => {\n this.#schemaRegistry.addMark(name, spec);\n this.#parserRegistry.addToken(fromMd.tokenName || name, fromMd.tokenSpec);\n this.#serializerRegistry.addMark(name, toMd);\n if (view) {\n this.#markViewCreators.set(name, view);\n }\n };\n\n private createParser(schema: Schema, mdInstance: MarkdownIt) {\n return this.#parserRegistry.createParser(\n schema,\n mdInstance,\n this.#pmTransformers,\n this.#parserDynamicModifier,\n );\n }\n\n private createDeps() {\n const actions = new ActionsManager();\n\n const schema = this.#schemaRegistry.createSchema();\n const markupParser = this.createParser(schema, this.#mdForMarkup);\n const textParser = this.createParser(schema, this.#mdForText);\n const serializer = this.#serializerRegistry.createSerializer(\n this.#serializerDynamicModifier,\n );\n\n this.#deps = {\n schema,\n actions,\n markupParser,\n textParser,\n serializer,\n };\n }\n\n private createDerived() {\n this.#plugins = this.#spec.plugins(this.#deps);\n Object.assign(this.#actions, this.#spec.actions(this.#deps));\n\n for (const [name, view] of this.#nodeViewCreators) {\n this.#nodeViews[name] = view(this.#deps);\n }\n\n for (const [name, view] of this.#markViewCreators) {\n this.#markViews[name] = view(this.#deps);\n }\n }\n}\n"]}
|
|
@@ -70,6 +70,7 @@ export class MarkdownSerializerState {
|
|
|
70
70
|
noAutoBlank;
|
|
71
71
|
isAutolink;
|
|
72
72
|
escapeWhitespace;
|
|
73
|
+
escapeCharacters;
|
|
73
74
|
nodes;
|
|
74
75
|
marks;
|
|
75
76
|
options;
|
|
@@ -274,8 +275,9 @@ export class MarkdownSerializerState {
|
|
|
274
275
|
while (keep < Math.min(active.length, len) && marks[keep].eq(active[keep]))
|
|
275
276
|
++keep;
|
|
276
277
|
// Close the marks that need to be closed
|
|
277
|
-
while (keep < active.length)
|
|
278
|
+
while (keep < active.length) {
|
|
278
279
|
this.text(this.markString(active.pop(), false, parent, index), false);
|
|
280
|
+
}
|
|
279
281
|
// Output any previously expelled trailing whitespace outside the marks
|
|
280
282
|
if (leading)
|
|
281
283
|
this.text(leading);
|
|
@@ -328,7 +330,11 @@ export class MarkdownSerializerState {
|
|
|
328
330
|
// have special meaning only at the start of the line.
|
|
329
331
|
esc(str, startOfLine = false) {
|
|
330
332
|
// eslint-disable-next-line no-useless-escape
|
|
331
|
-
const
|
|
333
|
+
const defaultEsc = /[`\^+*\\\|~\[\]\{\}<>\$_]/g;
|
|
334
|
+
const extraChars = this.escapeCharacters?.length ? this.escapeCharacters.map(c => '\\' + c).join('') : '';
|
|
335
|
+
const escRegexp = this.options?.commonEscape ||
|
|
336
|
+
// Compose the escape regexp from default, options, and extra characters
|
|
337
|
+
new RegExp(defaultEsc.source + (extraChars ? `|[${extraChars}]` : ''), 'g');
|
|
332
338
|
const startOfLineEscRegexp = this.options?.startOfLineEscape || /^[:#\-*+>]/;
|
|
333
339
|
str = str.replace(escRegexp, '\\$&');
|
|
334
340
|
if (startOfLine)
|