@notectl/core 1.0.5 → 1.0.8
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/README.md +78 -55
- package/custom-elements.json +344 -0
- package/dist/chunks/{AttrRegistry-DTsHyDVA.mjs → AttrRegistry-D-przlzb.mjs} +4 -4
- package/dist/chunks/{AttrRegistry-DTsHyDVA.mjs.map → AttrRegistry-D-przlzb.mjs.map} +1 -1
- package/dist/chunks/ColorNames-iaWsSZx1.mjs +35 -0
- package/dist/chunks/ColorNames-iaWsSZx1.mjs.map +1 -0
- package/dist/chunks/ColorValidation-Dyy4Bye8.mjs +140 -0
- package/dist/chunks/ColorValidation-Dyy4Bye8.mjs.map +1 -0
- package/dist/chunks/{Commands-DLP85Mp5.mjs → Commands-CSpSwGXv.mjs} +13 -13
- package/dist/chunks/{Commands-DLP85Mp5.mjs.map → Commands-CSpSwGXv.mjs.map} +1 -1
- package/dist/chunks/ToolbarKeyboardNav-B32OMv8r.mjs +46 -0
- package/dist/chunks/ToolbarKeyboardNav-B32OMv8r.mjs.map +1 -0
- package/dist/chunks/{ToolbarPlugin-D5VqeBPT.mjs → ToolbarPlugin-DY2xaJiu.mjs} +63 -93
- package/dist/chunks/ToolbarPlugin-DY2xaJiu.mjs.map +1 -0
- package/dist/chunks/index-BAk1EG1x.mjs +541 -0
- package/dist/chunks/index-BAk1EG1x.mjs.map +1 -0
- package/dist/chunks/index-BRYzYOYC.mjs +63 -0
- package/dist/chunks/index-BRYzYOYC.mjs.map +1 -0
- package/dist/chunks/index-BSFLNveF.mjs +953 -0
- package/dist/chunks/index-BSFLNveF.mjs.map +1 -0
- package/dist/chunks/index-BYgspns5.mjs +209 -0
- package/dist/chunks/index-BYgspns5.mjs.map +1 -0
- package/dist/chunks/index-B_3qDrUN.mjs +64 -0
- package/dist/chunks/index-B_3qDrUN.mjs.map +1 -0
- package/dist/chunks/index-Bsp4LC5t.mjs +130 -0
- package/dist/chunks/index-Bsp4LC5t.mjs.map +1 -0
- package/dist/chunks/index-C-YWHOcC.mjs +100 -0
- package/dist/chunks/index-C-YWHOcC.mjs.map +1 -0
- package/dist/chunks/index-C2GQoHot.mjs +92 -0
- package/dist/chunks/index-C2GQoHot.mjs.map +1 -0
- package/dist/chunks/index-CT3HGdQt.mjs +39 -0
- package/dist/chunks/index-CT3HGdQt.mjs.map +1 -0
- package/dist/chunks/index-Ct0ivLhO.mjs +407 -0
- package/dist/chunks/index-Ct0ivLhO.mjs.map +1 -0
- package/dist/chunks/index-CxiWyUho.mjs +191 -0
- package/dist/chunks/index-CxiWyUho.mjs.map +1 -0
- package/dist/chunks/index-D3CQWJiw.mjs +200 -0
- package/dist/chunks/index-D3CQWJiw.mjs.map +1 -0
- package/dist/chunks/index-DC1EK22F.mjs +41 -0
- package/dist/chunks/index-DC1EK22F.mjs.map +1 -0
- package/dist/chunks/index-Dh76rR13.mjs +196 -0
- package/dist/chunks/index-Dh76rR13.mjs.map +1 -0
- package/dist/chunks/index-o6hDR07y.mjs +41 -0
- package/dist/chunks/index-o6hDR07y.mjs.map +1 -0
- package/dist/chunks/index-uTnc9y7M.mjs +62 -0
- package/dist/chunks/index-uTnc9y7M.mjs.map +1 -0
- package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs +34 -0
- package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs.map +1 -0
- package/dist/editor/EditorDOM.d.ts.map +1 -1
- package/dist/editor/NotectlEditor.d.ts +15 -1
- package/dist/editor/NotectlEditor.d.ts.map +1 -1
- package/dist/editor/PaperLayoutController.d.ts +27 -0
- package/dist/editor/PaperLayoutController.d.ts.map +1 -0
- package/dist/editor/PaperSize.d.ts +35 -0
- package/dist/editor/PaperSize.d.ts.map +1 -0
- package/dist/editor/styles/color-picker.d.ts +1 -1
- package/dist/editor/styles/color-picker.d.ts.map +1 -1
- package/dist/editor/styles/paper.d.ts +3 -0
- package/dist/editor/styles/paper.d.ts.map +1 -0
- package/dist/editor/styles/table.d.ts +1 -1
- package/dist/editor/styles/table.d.ts.map +1 -1
- package/dist/editor/styles/toolbar.d.ts +1 -1
- package/dist/editor/styles/toolbar.d.ts.map +1 -1
- package/dist/editor/styles.d.ts.map +1 -1
- package/dist/i18n/Locale.d.ts +17 -0
- package/dist/i18n/Locale.d.ts.map +1 -0
- package/dist/i18n/LocaleService.d.ts +8 -0
- package/dist/i18n/LocaleService.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +4 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/resolvePluginLocale.d.ts +3 -0
- package/dist/i18n/resolvePluginLocale.d.ts.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/input/ClipboardHandler.d.ts.map +1 -1
- package/dist/input/InputHandler.d.ts.map +1 -1
- package/dist/input/KeyboardHandler.d.ts.map +1 -1
- package/dist/input/PasteHandler.d.ts.map +1 -1
- package/dist/notectl-core.mjs +1145 -837
- package/dist/notectl-core.mjs.map +1 -1
- package/dist/notectl-core.umd.js +2368 -1826
- package/dist/notectl-core.umd.js.map +1 -1
- package/dist/plugins/PluginManager.d.ts +8 -1
- package/dist/plugins/PluginManager.d.ts.map +1 -1
- package/dist/plugins/alignment/AlignmentLocale.d.ts +19 -0
- package/dist/plugins/alignment/AlignmentLocale.d.ts.map +1 -0
- package/dist/plugins/alignment/AlignmentPlugin.d.ts +4 -0
- package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
- package/dist/plugins/alignment.mjs +3 -89
- package/dist/plugins/alignment.mjs.map +1 -1
- package/dist/plugins/blockquote/BlockquoteLocale.d.ts +17 -0
- package/dist/plugins/blockquote/BlockquoteLocale.d.ts.map +1 -0
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts +3 -0
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
- package/dist/plugins/blockquote.mjs +2 -55
- package/dist/plugins/blockquote.mjs.map +1 -1
- package/dist/plugins/code-block/CodeBlockCommands.d.ts +5 -0
- package/dist/plugins/code-block/CodeBlockCommands.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts +10 -0
- package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockLocale.d.ts +17 -0
- package/dist/plugins/code-block/CodeBlockLocale.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockNodeView.d.ts +1 -1
- package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts +4 -111
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockService.d.ts +5 -0
- package/dist/plugins/code-block/CodeBlockService.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockTypes.d.ts +71 -0
- package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -0
- package/dist/plugins/code-block.mjs +3 -3
- package/dist/plugins/font/FontLocale.d.ts +15 -0
- package/dist/plugins/font/FontLocale.d.ts.map +1 -0
- package/dist/plugins/font/FontPlugin.d.ts +3 -0
- package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizeLocale.d.ts +17 -0
- package/dist/plugins/font-size/FontSizeLocale.d.ts.map +1 -0
- package/dist/plugins/font-size/FontSizeOperations.d.ts +22 -0
- package/dist/plugins/font-size/FontSizeOperations.d.ts.map +1 -0
- package/dist/plugins/font-size/FontSizePlugin.d.ts +4 -10
- package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePopup.d.ts +11 -0
- package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -0
- package/dist/plugins/font-size.mjs +2 -217
- package/dist/plugins/font-size.mjs.map +1 -1
- package/dist/plugins/font.mjs +2 -183
- package/dist/plugins/font.mjs.map +1 -1
- package/dist/plugins/hard-break.mjs +1 -1
- package/dist/plugins/heading/HeadingLocale.d.ts +26 -0
- package/dist/plugins/heading/HeadingLocale.d.ts.map +1 -0
- package/dist/plugins/heading/HeadingPlugin.d.ts +4 -0
- package/dist/plugins/heading/HeadingPlugin.d.ts.map +1 -1
- package/dist/plugins/heading.mjs +1 -184
- package/dist/plugins/heading.mjs.map +1 -1
- package/dist/plugins/highlight/HighlightLocale.d.ts +17 -0
- package/dist/plugins/highlight/HighlightLocale.d.ts.map +1 -0
- package/dist/plugins/highlight/HighlightPlugin.d.ts +3 -5
- package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
- package/dist/plugins/highlight.mjs +2 -123
- package/dist/plugins/highlight.mjs.map +1 -1
- package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts +15 -0
- package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts +4 -0
- package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
- package/dist/plugins/horizontal-rule.mjs +2 -56
- package/dist/plugins/horizontal-rule.mjs.map +1 -1
- package/dist/plugins/image/ImageLocale.d.ts +25 -0
- package/dist/plugins/image/ImageLocale.d.ts.map +1 -0
- package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
- package/dist/plugins/image/ImagePlugin.d.ts +1 -0
- package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
- package/dist/plugins/image/ImageUpload.d.ts +3 -0
- package/dist/plugins/image/ImageUpload.d.ts.map +1 -1
- package/dist/plugins/image.mjs +4 -378
- package/dist/plugins/image.mjs.map +1 -1
- package/dist/plugins/link/LinkLocale.d.ts +23 -0
- package/dist/plugins/link/LinkLocale.d.ts.map +1 -0
- package/dist/plugins/link/LinkPlugin.d.ts +3 -0
- package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
- package/dist/plugins/link.mjs +2 -124
- package/dist/plugins/link.mjs.map +1 -1
- package/dist/plugins/list/ListLocale.d.ts +18 -0
- package/dist/plugins/list/ListLocale.d.ts.map +1 -0
- package/dist/plugins/list/ListPlugin.d.ts +4 -0
- package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
- package/dist/plugins/list.mjs +2 -190
- package/dist/plugins/list.mjs.map +1 -1
- package/dist/plugins/print/PrintContentPreparer.d.ts +12 -0
- package/dist/plugins/print/PrintContentPreparer.d.ts.map +1 -0
- package/dist/plugins/print/PrintLocale.d.ts +16 -0
- package/dist/plugins/print/PrintLocale.d.ts.map +1 -0
- package/dist/plugins/print/PrintPlugin.d.ts +13 -0
- package/dist/plugins/print/PrintPlugin.d.ts.map +1 -0
- package/dist/plugins/print/PrintServiceImpl.d.ts +7 -0
- package/dist/plugins/print/PrintServiceImpl.d.ts.map +1 -0
- package/dist/plugins/print/PrintStyleCollector.d.ts +17 -0
- package/dist/plugins/print/PrintStyleCollector.d.ts.map +1 -0
- package/dist/plugins/print/PrintTypes.d.ts +61 -0
- package/dist/plugins/print/PrintTypes.d.ts.map +1 -0
- package/dist/plugins/shared/ColorMarkOperations.d.ts +28 -0
- package/dist/plugins/shared/ColorMarkOperations.d.ts.map +1 -0
- package/dist/plugins/shared/ColorNames.d.ts +22 -0
- package/dist/plugins/shared/ColorNames.d.ts.map +1 -0
- package/dist/plugins/shared/ColorPickerPopup.d.ts +31 -0
- package/dist/plugins/shared/ColorPickerPopup.d.ts.map +1 -0
- package/dist/plugins/shared/ColorValidation.d.ts +14 -0
- package/dist/plugins/shared/ColorValidation.d.ts.map +1 -0
- package/dist/plugins/strikethrough/StrikethroughLocale.d.ts +17 -0
- package/dist/plugins/strikethrough/StrikethroughLocale.d.ts.map +1 -0
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts +3 -0
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
- package/dist/plugins/strikethrough.mjs +2 -32
- package/dist/plugins/strikethrough.mjs.map +1 -1
- package/dist/plugins/super-sub/SuperSubLocale.d.ts +19 -0
- package/dist/plugins/super-sub/SuperSubLocale.d.ts.map +1 -0
- package/dist/plugins/super-sub/SuperSubPlugin.d.ts +3 -0
- package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
- package/dist/plugins/super-sub.mjs +2 -78
- package/dist/plugins/super-sub.mjs.map +1 -1
- package/dist/plugins/table/TableBorderColor.d.ts +24 -0
- package/dist/plugins/table/TableBorderColor.d.ts.map +1 -0
- package/dist/plugins/table/TableCommands.d.ts +9 -8
- package/dist/plugins/table/TableCommands.d.ts.map +1 -1
- package/dist/plugins/table/TableContextMenu.d.ts +14 -0
- package/dist/plugins/table/TableContextMenu.d.ts.map +1 -0
- package/dist/plugins/table/TableControls.d.ts +3 -1
- package/dist/plugins/table/TableControls.d.ts.map +1 -1
- package/dist/plugins/table/TableControlsDOM.d.ts +13 -1
- package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
- package/dist/plugins/table/TableLocale.d.ts +48 -0
- package/dist/plugins/table/TableLocale.d.ts.map +1 -0
- package/dist/plugins/table/TableNavigation.d.ts +2 -1
- package/dist/plugins/table/TableNavigation.d.ts.map +1 -1
- package/dist/plugins/table/TableNodeViews.d.ts +3 -1
- package/dist/plugins/table/TableNodeViews.d.ts.map +1 -1
- package/dist/plugins/table/TablePlugin.d.ts +7 -1
- package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
- package/dist/plugins/table/index.d.ts +3 -0
- package/dist/plugins/table/index.d.ts.map +1 -1
- package/dist/plugins/table.mjs +18 -660
- package/dist/plugins/table.mjs.map +1 -1
- package/dist/plugins/text-color/TextColorLocale.d.ts +17 -0
- package/dist/plugins/text-color/TextColorLocale.d.ts.map +1 -0
- package/dist/plugins/text-color/TextColorPlugin.d.ts +3 -5
- package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
- package/dist/plugins/text-color.mjs +2 -123
- package/dist/plugins/text-color.mjs.map +1 -1
- package/dist/plugins/text-formatting/TextFormattingLocale.d.ts +18 -0
- package/dist/plugins/text-formatting/TextFormattingLocale.d.ts.map +1 -0
- package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts +4 -0
- package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
- package/dist/plugins/text-formatting.mjs +2 -49
- package/dist/plugins/text-formatting.mjs.map +1 -1
- package/dist/plugins/toolbar/ToolbarLocale.d.ts +14 -0
- package/dist/plugins/toolbar/ToolbarLocale.d.ts.map +1 -0
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts +1 -0
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
- package/dist/plugins/toolbar.mjs +1 -1
- package/dist/state/EditorState.d.ts +4 -1
- package/dist/state/EditorState.d.ts.map +1 -1
- package/dist/view/EditorView.d.ts.map +1 -1
- package/dist/view/Reconciler.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/chunks/Plugin-B9OZ6Y4c.mjs +0 -15
- package/dist/chunks/Plugin-B9OZ6Y4c.mjs.map +0 -1
- package/dist/chunks/ToolbarPlugin-D5VqeBPT.mjs.map +0 -1
- package/dist/chunks/color-picker-Csf0wx5a.mjs +0 -5
- package/dist/chunks/color-picker-Csf0wx5a.mjs.map +0 -1
- package/dist/chunks/index-CPPb-Jah.mjs +0 -569
- package/dist/chunks/index-CPPb-Jah.mjs.map +0 -1
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { r as t } from "./resolvePluginLocale-B4w1OkPy.mjs";
|
|
2
|
+
import { f as e } from "./NodeResolver-D68ZLXti.mjs";
|
|
3
|
+
import { i, f as l } from "./Selection-D5ZjXoB7.mjs";
|
|
4
|
+
const n = { alignLeft: "Align Left", alignCenter: "Align Center", alignRight: "Align Right", justify: "Justify", toolbarLabel: "Alignment", toolbarTooltip: "Alignment" }, a = { alignLeft: "Linksbündig", alignCenter: "Zentriert", alignRight: "Rechtsbündig", justify: "Blocksatz", toolbarLabel: "Ausrichtung", toolbarTooltip: "Ausrichtung" }, s = { en: n, de: a, es: { alignLeft: "Alinear a la izquierda", alignCenter: "Centrar", alignRight: "Alinear a la derecha", justify: "Justificar", toolbarLabel: "Alineación", toolbarTooltip: "Alineación" }, fr: { alignLeft: "Aligner à gauche", alignCenter: "Centrer", alignRight: "Aligner à droite", justify: "Justifier", toolbarLabel: "Alignement", toolbarTooltip: "Alignement" }, zh: { alignLeft: "左对齐", alignCenter: "居中", alignRight: "右对齐", justify: "两端对齐", toolbarLabel: "对齐", toolbarTooltip: "对齐" }, ru: { alignLeft: "По левому краю", alignCenter: "По центру", alignRight: "По правому краю", justify: "По ширине", toolbarLabel: "Выравнивание", toolbarTooltip: "Выравнивание" }, ar: { alignLeft: "محاذاة لليسار", alignCenter: "توسيط", alignRight: "محاذاة لليمين", justify: "ضبط", toolbarLabel: "المحاذاة", toolbarTooltip: "المحاذاة" }, hi: { alignLeft: "बाएँ संरेखित करें", alignCenter: "केंद्र में", alignRight: "दाएँ संरेखित करें", justify: "समायोजित करें", toolbarLabel: "संरेखण", toolbarTooltip: "संरेखण" } }, o = { alignments: ["left", "center", "right", "justify"], alignableTypes: ["paragraph", "heading", "title", "subtitle", "table_cell", "image"], defaults: { image: "center" } }, r = { left: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z"/></svg>', center: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z"/></svg>', right: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z"/></svg>', justify: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zM3 3v2h18V3H3z"/></svg>' };
|
|
5
|
+
class g {
|
|
6
|
+
id = "alignment";
|
|
7
|
+
name = "Alignment";
|
|
8
|
+
priority = 90;
|
|
9
|
+
config;
|
|
10
|
+
locale;
|
|
11
|
+
alignableTypes;
|
|
12
|
+
constructor(t2) {
|
|
13
|
+
this.config = { ...o, ...t2, defaults: { ...o.defaults, ...t2?.defaults } };
|
|
14
|
+
}
|
|
15
|
+
init(e2) {
|
|
16
|
+
this.locale = t(s, e2, this.config.locale), this.alignableTypes = new Set(this.config.alignableTypes), this.patchNodeSpecs(e2), this.registerCommands(e2), this.registerKeymaps(e2), this.registerToolbarItem(e2), this.registerMiddleware(e2);
|
|
17
|
+
}
|
|
18
|
+
patchNodeSpecs(t2) {
|
|
19
|
+
const e2 = t2.getSchemaRegistry();
|
|
20
|
+
for (const t3 of this.config.alignableTypes) {
|
|
21
|
+
const i2 = e2.getNodeSpec(t3);
|
|
22
|
+
if (!i2) continue;
|
|
23
|
+
if (i2.attrs?.align) continue;
|
|
24
|
+
const l2 = i2.toDOM, n2 = this.config.defaults[t3] ?? "left";
|
|
25
|
+
e2.removeNodeSpec(t3), e2.registerNodeSpec({ ...i2, attrs: { ...i2.attrs, align: { default: n2 } }, toDOM(t4) {
|
|
26
|
+
const e3 = l2.call(i2, t4);
|
|
27
|
+
return c(e3, t4), e3;
|
|
28
|
+
} });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
registerCommands(t2) {
|
|
32
|
+
for (const e2 of this.config.alignments) t2.registerCommand(`align${h(e2)}`, () => this.setAlignment(t2, e2));
|
|
33
|
+
}
|
|
34
|
+
registerKeymaps(t2) {
|
|
35
|
+
const e2 = {};
|
|
36
|
+
this.config.alignments.includes("left") && (e2["Mod-Shift-L"] = () => t2.executeCommand("alignLeft")), this.config.alignments.includes("center") && (e2["Mod-Shift-E"] = () => t2.executeCommand("alignCenter")), this.config.alignments.includes("right") && (e2["Mod-Shift-R"] = () => t2.executeCommand("alignRight")), this.config.alignments.includes("justify") && (e2["Mod-Shift-J"] = () => t2.executeCommand("alignJustify")), Object.keys(e2).length > 0 && t2.registerKeymap(e2);
|
|
37
|
+
}
|
|
38
|
+
registerToolbarItem(t2) {
|
|
39
|
+
const e2 = this.config.alignments.map((t3) => ({ label: this.getAlignmentLabel(t3), command: `align${h(t3)}`, icon: r[t3] }));
|
|
40
|
+
t2.registerToolbarItem({ id: "alignment", group: "block", icon: r.left, label: this.locale.toolbarLabel, tooltip: this.locale.toolbarTooltip, command: "alignLeft", priority: 60, popupType: "dropdown", popupConfig: { items: e2 }, separatorAfter: this.config.separatorAfter, isActive: (t3) => this.isNonDefaultAlignment(t3), isEnabled: (t3) => this.isAlignable(t3) });
|
|
41
|
+
}
|
|
42
|
+
getAlignmentLabel(t2) {
|
|
43
|
+
return { left: this.locale.alignLeft, center: this.locale.alignCenter, right: this.locale.alignRight, justify: this.locale.justify }[t2];
|
|
44
|
+
}
|
|
45
|
+
registerMiddleware(t2) {
|
|
46
|
+
t2.registerMiddleware((t3, e2, i2) => {
|
|
47
|
+
let l2 = false;
|
|
48
|
+
const n2 = t3.steps.map((t4) => {
|
|
49
|
+
if ("setBlockType" !== t4.type) return t4;
|
|
50
|
+
if (!this.alignableTypes.has(t4.nodeType)) return t4;
|
|
51
|
+
const e3 = t4.previousAttrs?.align;
|
|
52
|
+
return e3 && "left" !== e3 ? (l2 = true, { ...t4, attrs: { ...t4.attrs, align: e3 } }) : t4;
|
|
53
|
+
});
|
|
54
|
+
i2(l2 ? { ...t3, steps: n2 } : t3);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
getSelectedBlock(t2) {
|
|
58
|
+
const e2 = t2.selection;
|
|
59
|
+
return i(e2) ? t2.getBlock(e2.nodeId) : l(e2) ? t2.getBlock(e2.anchor.blockId) : void 0;
|
|
60
|
+
}
|
|
61
|
+
getSelectedBlockId(t2) {
|
|
62
|
+
const e2 = t2.selection;
|
|
63
|
+
return i(e2) ? e2.nodeId : l(e2) ? e2.anchor.blockId : void 0;
|
|
64
|
+
}
|
|
65
|
+
setAlignment(t2, i2) {
|
|
66
|
+
const l2 = t2.getState(), n2 = this.getSelectedBlock(l2);
|
|
67
|
+
if (!n2 || !this.alignableTypes.has(n2.type)) return false;
|
|
68
|
+
const a2 = this.getSelectedBlockId(l2);
|
|
69
|
+
if (!a2) return false;
|
|
70
|
+
const s2 = e(l2.doc, a2);
|
|
71
|
+
if (!s2) return false;
|
|
72
|
+
const o2 = { ...n2.attrs, align: i2 }, r2 = l2.transaction("command").setNodeAttr(s2, o2).setSelection(l2.selection).build();
|
|
73
|
+
return t2.dispatch(r2), true;
|
|
74
|
+
}
|
|
75
|
+
isNonDefaultAlignment(t2) {
|
|
76
|
+
const e2 = this.getSelectedBlock(t2);
|
|
77
|
+
if (!e2 || !this.alignableTypes.has(e2.type)) return false;
|
|
78
|
+
const i2 = e2.attrs?.align, l2 = this.config.defaults[e2.type] ?? "left";
|
|
79
|
+
return null != i2 && i2 !== l2;
|
|
80
|
+
}
|
|
81
|
+
isAlignable(t2) {
|
|
82
|
+
const e2 = this.getSelectedBlock(t2);
|
|
83
|
+
return null != e2 && this.alignableTypes.has(e2.type);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function c(t2, e2) {
|
|
87
|
+
const i2 = e2.attrs?.align;
|
|
88
|
+
"string" == typeof i2 && "left" !== i2 && (t2.style.textAlign = i2);
|
|
89
|
+
}
|
|
90
|
+
function h(t2) {
|
|
91
|
+
return t2.charAt(0).toUpperCase() + t2.slice(1);
|
|
92
|
+
}
|
|
93
|
+
export {
|
|
94
|
+
r as A,
|
|
95
|
+
s as a,
|
|
96
|
+
a as b,
|
|
97
|
+
n as c,
|
|
98
|
+
g as d
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=index-C-YWHOcC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C-YWHOcC.mjs","sources":["../../src/plugins/alignment/AlignmentLocale.ts","../../src/plugins/alignment/AlignmentPlugin.ts"],"sourcesContent":["/** Locale interface and default English locale for the AlignmentPlugin. */\n\nexport interface AlignmentLocale {\n\treadonly alignLeft: string;\n\treadonly alignCenter: string;\n\treadonly alignRight: string;\n\treadonly justify: string;\n\treadonly toolbarLabel: string;\n\treadonly toolbarTooltip: string;\n}\n\n// --- Default English Locale ---\n\nexport const ALIGNMENT_LOCALE_EN: AlignmentLocale = {\n\talignLeft: 'Align Left',\n\talignCenter: 'Align Center',\n\talignRight: 'Align Right',\n\tjustify: 'Justify',\n\ttoolbarLabel: 'Alignment',\n\ttoolbarTooltip: 'Alignment',\n};\n\n// --- German Locale ---\n\nexport const ALIGNMENT_LOCALE_DE: AlignmentLocale = {\n\talignLeft: 'Linksbündig',\n\talignCenter: 'Zentriert',\n\talignRight: 'Rechtsbündig',\n\tjustify: 'Blocksatz',\n\ttoolbarLabel: 'Ausrichtung',\n\ttoolbarTooltip: 'Ausrichtung',\n};\n\n// --- Spanish Locale ---\n\nexport const ALIGNMENT_LOCALE_ES: AlignmentLocale = {\n\talignLeft: 'Alinear a la izquierda',\n\talignCenter: 'Centrar',\n\talignRight: 'Alinear a la derecha',\n\tjustify: 'Justificar',\n\ttoolbarLabel: 'Alineación',\n\ttoolbarTooltip: 'Alineación',\n};\n\n// --- French Locale ---\n\nexport const ALIGNMENT_LOCALE_FR: AlignmentLocale = {\n\talignLeft: 'Aligner à gauche',\n\talignCenter: 'Centrer',\n\talignRight: 'Aligner à droite',\n\tjustify: 'Justifier',\n\ttoolbarLabel: 'Alignement',\n\ttoolbarTooltip: 'Alignement',\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const ALIGNMENT_LOCALE_ZH: AlignmentLocale = {\n\talignLeft: '左对齐',\n\talignCenter: '居中',\n\talignRight: '右对齐',\n\tjustify: '两端对齐',\n\ttoolbarLabel: '对齐',\n\ttoolbarTooltip: '对齐',\n};\n\n// --- Russian Locale ---\n\nexport const ALIGNMENT_LOCALE_RU: AlignmentLocale = {\n\talignLeft: 'По левому краю',\n\talignCenter: 'По центру',\n\talignRight: 'По правому краю',\n\tjustify: 'По ширине',\n\ttoolbarLabel: 'Выравнивание',\n\ttoolbarTooltip: 'Выравнивание',\n};\n\n// --- Arabic Locale ---\n\nexport const ALIGNMENT_LOCALE_AR: AlignmentLocale = {\n\talignLeft: 'محاذاة لليسار',\n\talignCenter: 'توسيط',\n\talignRight: 'محاذاة لليمين',\n\tjustify: 'ضبط',\n\ttoolbarLabel: 'المحاذاة',\n\ttoolbarTooltip: 'المحاذاة',\n};\n\n// --- Hindi Locale ---\n\nexport const ALIGNMENT_LOCALE_HI: AlignmentLocale = {\n\talignLeft: 'बाएँ संरेखित करें',\n\talignCenter: 'केंद्र में',\n\talignRight: 'दाएँ संरेखित करें',\n\tjustify: 'समायोजित करें',\n\ttoolbarLabel: 'संरेखण',\n\ttoolbarTooltip: 'संरेखण',\n};\n\n// --- Locale Map ---\n\nexport const ALIGNMENT_LOCALES: Record<string, AlignmentLocale> = {\n\ten: ALIGNMENT_LOCALE_EN,\n\tde: ALIGNMENT_LOCALE_DE,\n\tes: ALIGNMENT_LOCALE_ES,\n\tfr: ALIGNMENT_LOCALE_FR,\n\tzh: ALIGNMENT_LOCALE_ZH,\n\tru: ALIGNMENT_LOCALE_RU,\n\tar: ALIGNMENT_LOCALE_AR,\n\thi: ALIGNMENT_LOCALE_HI,\n};\n","/**\n * AlignmentPlugin: adds left/center/right/justify alignment as a block\n * attribute on paragraphs, headings, images, and other alignable types.\n * Patches their NodeSpecs to render the `align` attribute via inline\n * `text-align` style and provides toggle commands, keyboard shortcuts,\n * and a toolbar dropdown. Handles both TextSelection and NodeSelection.\n */\n\nimport { resolvePluginLocale } from '../../i18n/resolvePluginLocale.js';\nimport type { BlockNode } from '../../model/Document.js';\nimport { findNodePath } from '../../model/NodeResolver.js';\nimport { isNodeSelection, isTextSelection } from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { ALIGNMENT_LOCALES, type AlignmentLocale } from './AlignmentLocale.js';\n\n// --- Public Types ---\n\nexport type BlockAlignment = 'left' | 'center' | 'right' | 'justify';\n\nexport interface AlignmentConfig {\n\t/** Which alignments to expose. Defaults to all four. */\n\treadonly alignments: readonly BlockAlignment[];\n\t/** Block types that support alignment. Defaults to paragraph + heading + title + subtitle + table_cell + image. */\n\treadonly alignableTypes: readonly string[];\n\t/** Per-type default alignment (e.g. `{ image: 'center' }`). Falls back to `'left'`. */\n\treadonly defaults: Readonly<Record<string, BlockAlignment>>;\n\t/** When true, a separator is rendered after the toolbar item. */\n\treadonly separatorAfter?: boolean;\n\treadonly locale?: AlignmentLocale;\n}\n\n// --- Constants ---\n\nconst DEFAULT_CONFIG: AlignmentConfig = {\n\talignments: ['left', 'center', 'right', 'justify'],\n\talignableTypes: ['paragraph', 'heading', 'title', 'subtitle', 'table_cell', 'image'],\n\tdefaults: { image: 'center' },\n};\n\nexport const ALIGNMENT_ICONS: Readonly<Record<BlockAlignment, string>> = {\n\tleft: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z\"/></svg>',\n\tcenter:\n\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z\"/></svg>',\n\tright:\n\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z\"/></svg>',\n\tjustify:\n\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zM3 3v2h18V3H3z\"/></svg>',\n};\n\n// --- Plugin ---\n\nexport class AlignmentPlugin implements Plugin {\n\treadonly id = 'alignment';\n\treadonly name = 'Alignment';\n\treadonly priority = 90;\n\n\tprivate readonly config: AlignmentConfig;\n\tprivate locale!: AlignmentLocale;\n\tprivate alignableTypes!: ReadonlySet<string>;\n\n\tconstructor(config?: Partial<AlignmentConfig>) {\n\t\tthis.config = {\n\t\t\t...DEFAULT_CONFIG,\n\t\t\t...config,\n\t\t\tdefaults: { ...DEFAULT_CONFIG.defaults, ...config?.defaults },\n\t\t};\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(ALIGNMENT_LOCALES, context, this.config.locale);\n\n\t\tthis.alignableTypes = new Set(this.config.alignableTypes);\n\t\tthis.patchNodeSpecs(context);\n\t\tthis.registerCommands(context);\n\t\tthis.registerKeymaps(context);\n\t\tthis.registerToolbarItem(context);\n\t\tthis.registerMiddleware(context);\n\t}\n\n\t// --- NodeSpec Patching ---\n\n\t/**\n\t * Patches existing NodeSpecs for alignable block types to support the\n\t * `align` attribute and render it as an inline style. Skips types\n\t * that already define an `align` attribute in their spec.\n\t */\n\tprivate patchNodeSpecs(context: PluginContext): void {\n\t\tconst registry = context.getSchemaRegistry();\n\n\t\tfor (const type of this.config.alignableTypes) {\n\t\t\tconst spec = registry.getNodeSpec(type);\n\t\t\tif (!spec) continue;\n\n\t\t\t// Skip types that already declare an `align` attr (e.g. image)\n\t\t\tif (spec.attrs?.align) continue;\n\n\t\t\tconst originalToDOM = spec.toDOM;\n\t\t\tconst defaultAlign: BlockAlignment = this.config.defaults[type] ?? 'left';\n\n\t\t\tregistry.removeNodeSpec(type);\n\t\t\tregistry.registerNodeSpec({\n\t\t\t\t...spec,\n\t\t\t\tattrs: {\n\t\t\t\t\t...spec.attrs,\n\t\t\t\t\talign: { default: defaultAlign },\n\t\t\t\t},\n\t\t\t\ttoDOM(node) {\n\t\t\t\t\tconst el = originalToDOM.call(spec, node);\n\t\t\t\t\tapplyAlignment(el, node);\n\t\t\t\t\treturn el;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\t// --- Commands ---\n\n\tprivate registerCommands(context: PluginContext): void {\n\t\tfor (const alignment of this.config.alignments) {\n\t\t\tcontext.registerCommand(`align${capitalize(alignment)}`, () => {\n\t\t\t\treturn this.setAlignment(context, alignment);\n\t\t\t});\n\t\t}\n\t}\n\n\t// --- Keymaps ---\n\n\tprivate registerKeymaps(context: PluginContext): void {\n\t\tconst bindings: Record<string, () => boolean> = {};\n\n\t\tif (this.config.alignments.includes('left')) {\n\t\t\tbindings['Mod-Shift-L'] = () => context.executeCommand('alignLeft');\n\t\t}\n\t\tif (this.config.alignments.includes('center')) {\n\t\t\tbindings['Mod-Shift-E'] = () => context.executeCommand('alignCenter');\n\t\t}\n\t\tif (this.config.alignments.includes('right')) {\n\t\t\tbindings['Mod-Shift-R'] = () => context.executeCommand('alignRight');\n\t\t}\n\t\tif (this.config.alignments.includes('justify')) {\n\t\t\tbindings['Mod-Shift-J'] = () => context.executeCommand('alignJustify');\n\t\t}\n\n\t\tif (Object.keys(bindings).length > 0) {\n\t\t\tcontext.registerKeymap(bindings);\n\t\t}\n\t}\n\n\t// --- Toolbar ---\n\n\tprivate registerToolbarItem(context: PluginContext): void {\n\t\tconst dropdownItems = this.config.alignments.map((alignment) => ({\n\t\t\tlabel: this.getAlignmentLabel(alignment),\n\t\t\tcommand: `align${capitalize(alignment)}`,\n\t\t\ticon: ALIGNMENT_ICONS[alignment],\n\t\t}));\n\n\t\tcontext.registerToolbarItem({\n\t\t\tid: 'alignment',\n\t\t\tgroup: 'block',\n\t\t\ticon: ALIGNMENT_ICONS.left,\n\t\t\tlabel: this.locale.toolbarLabel,\n\t\t\ttooltip: this.locale.toolbarTooltip,\n\t\t\tcommand: 'alignLeft',\n\t\t\tpriority: 60,\n\t\t\tpopupType: 'dropdown',\n\t\t\tpopupConfig: { items: dropdownItems },\n\t\t\tseparatorAfter: this.config.separatorAfter,\n\t\t\tisActive: (state) => this.isNonDefaultAlignment(state),\n\t\t\tisEnabled: (state) => this.isAlignable(state),\n\t\t});\n\t}\n\n\tprivate getAlignmentLabel(alignment: BlockAlignment): string {\n\t\tconst labels: Record<BlockAlignment, string> = {\n\t\t\tleft: this.locale.alignLeft,\n\t\t\tcenter: this.locale.alignCenter,\n\t\t\tright: this.locale.alignRight,\n\t\t\tjustify: this.locale.justify,\n\t\t};\n\t\treturn labels[alignment];\n\t}\n\n\t// --- Middleware ---\n\n\t/**\n\t * Preserves the `align` attribute when other plugins change the block\n\t * type (e.g. paragraph → heading) via `setBlockType`, which replaces attrs.\n\t */\n\tprivate registerMiddleware(context: PluginContext): void {\n\t\tcontext.registerMiddleware((tr, _state, next) => {\n\t\t\tlet patched = false;\n\n\t\t\tconst patchedSteps = tr.steps.map((step) => {\n\t\t\t\tif (step.type !== 'setBlockType') return step;\n\t\t\t\tif (!this.alignableTypes.has(step.nodeType)) return step;\n\n\t\t\t\tconst prevAlign = step.previousAttrs?.align;\n\t\t\t\tif (!prevAlign || prevAlign === 'left') return step;\n\n\t\t\t\t// Carry forward align into new attrs\n\t\t\t\tpatched = true;\n\t\t\t\treturn {\n\t\t\t\t\t...step,\n\t\t\t\t\tattrs: { ...step.attrs, align: prevAlign },\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tnext(patched ? { ...tr, steps: patchedSteps } : tr);\n\t\t});\n\t}\n\n\t// --- Alignment Logic ---\n\n\t/**\n\t * Gets the selected block, handling both TextSelection and NodeSelection.\n\t */\n\tprivate getSelectedBlock(state: EditorState): BlockNode | undefined {\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel)) {\n\t\t\treturn state.getBlock(sel.nodeId);\n\t\t}\n\t\tif (isTextSelection(sel)) {\n\t\t\treturn state.getBlock(sel.anchor.blockId);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Gets the block ID of the selected block, handling both selection types.\n\t */\n\tprivate getSelectedBlockId(state: EditorState): BlockId | undefined {\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel)) return sel.nodeId;\n\t\tif (isTextSelection(sel)) return sel.anchor.blockId;\n\t\treturn undefined;\n\t}\n\n\tprivate setAlignment(context: PluginContext, alignment: BlockAlignment): boolean {\n\t\tconst state = context.getState();\n\t\tconst block = this.getSelectedBlock(state);\n\t\tif (!block || !this.alignableTypes.has(block.type)) return false;\n\n\t\tconst blockId = this.getSelectedBlockId(state);\n\t\tif (!blockId) return false;\n\n\t\tconst path = findNodePath(state.doc, blockId);\n\t\tif (!path) return false;\n\n\t\tconst newAttrs = { ...block.attrs, align: alignment };\n\n\t\tconst tr = state\n\t\t\t.transaction('command')\n\t\t\t.setNodeAttr(path as BlockId[], newAttrs)\n\t\t\t.setSelection(state.selection)\n\t\t\t.build();\n\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n\n\tprivate isNonDefaultAlignment(state: EditorState): boolean {\n\t\tconst block = this.getSelectedBlock(state);\n\t\tif (!block || !this.alignableTypes.has(block.type)) return false;\n\t\tconst align = block.attrs?.align;\n\t\tconst defaultAlign: BlockAlignment = this.config.defaults[block.type] ?? 'left';\n\t\treturn align != null && align !== defaultAlign;\n\t}\n\n\tprivate isAlignable(state: EditorState): boolean {\n\t\tconst block = this.getSelectedBlock(state);\n\t\treturn block != null && this.alignableTypes.has(block.type);\n\t}\n}\n\n// --- Helpers ---\n\nfunction applyAlignment(el: HTMLElement, node: BlockNode): void {\n\tconst align = node.attrs?.align;\n\tif (typeof align === 'string' && align !== 'left') {\n\t\tel.style.textAlign = align;\n\t}\n}\n\nfunction capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n"],"names":["ALIGNMENT_LOCALE_EN","alignLeft","alignCenter","alignRight","justify","toolbarLabel","toolbarTooltip","ALIGNMENT_LOCALE_DE","ALIGNMENT_LOCALES","en","de","es","fr","zh","ru","ar","hi","DEFAULT_CONFIG","alignments","alignableTypes","defaults","image","ALIGNMENT_ICONS","left","center","right","AlignmentPlugin","id","name","priority","config","locale","this","context","resolvePluginLocale","Set","patchNodeSpecs","registerCommands","registerKeymaps","registerToolbarItem","registerMiddleware","registry","getSchemaRegistry","type","spec","getNodeSpec","attrs","align","originalToDOM","toDOM","defaultAlign","removeNodeSpec","registerNodeSpec","default","node","el","call","applyAlignment","alignment","registerCommand","capitalize","setAlignment","bindings","includes","executeCommand","Object","keys","length","registerKeymap","dropdownItems","map","label","getAlignmentLabel","command","icon","group","tooltip","popupType","popupConfig","items","separatorAfter","isActive","state","isNonDefaultAlignment","isEnabled","isAlignable","tr","_state","next","patched","patchedSteps","steps","step","has","nodeType","prevAlign","previousAttrs","sel","selection","isNodeSelection","getBlock","nodeId","isTextSelection","anchor","blockId","getState","block","getSelectedBlock","getSelectedBlockId","path","findNodePath","doc","newAttrs","transaction","setNodeAttr","setSelection","build","dispatch","style","textAlign","s","charAt","toUpperCase","slice"],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { A as t, t as s } from "./Commands-CSpSwGXv.mjs";
|
|
2
|
+
import { r as i } from "./resolvePluginLocale-B4w1OkPy.mjs";
|
|
3
|
+
import { m as e } from "./TypeBrands-C09nE2qO.mjs";
|
|
4
|
+
import { f as r } from "./ToolbarItem-ugDymuXi.mjs";
|
|
5
|
+
const o = { superscriptLabel: "Superscript", superscriptTooltip: (t2) => `Superscript (${t2})`, subscriptLabel: "Subscript", subscriptTooltip: (t2) => `Subscript (${t2})` }, p = { en: o, de: { superscriptLabel: "Hochgestellt", superscriptTooltip: (t2) => `Hochgestellt (${t2})`, subscriptLabel: "Tiefgestellt", subscriptTooltip: (t2) => `Tiefgestellt (${t2})` }, es: { superscriptLabel: "Superíndice", superscriptTooltip: (t2) => `Superíndice (${t2})`, subscriptLabel: "Subíndice", subscriptTooltip: (t2) => `Subíndice (${t2})` }, fr: { superscriptLabel: "Exposant", superscriptTooltip: (t2) => `Exposant (${t2})`, subscriptLabel: "Indice", subscriptTooltip: (t2) => `Indice (${t2})` }, zh: { superscriptLabel: "上标", superscriptTooltip: (t2) => `上标 (${t2})`, subscriptLabel: "下标", subscriptTooltip: (t2) => `下标 (${t2})` }, ru: { superscriptLabel: "Надстрочный", superscriptTooltip: (t2) => `Надстрочный (${t2})`, subscriptLabel: "Подстрочный", subscriptTooltip: (t2) => `Подстрочный (${t2})` }, ar: { superscriptLabel: "مرتفع", superscriptTooltip: (t2) => `مرتفع (${t2})`, subscriptLabel: "منخفض", subscriptTooltip: (t2) => `منخفض (${t2})` }, hi: { superscriptLabel: "सुपरस्क्रिप्ट", superscriptTooltip: (t2) => `सुपरस्क्रिप्ट (${t2})`, subscriptLabel: "सबस्क्रिप्ट", subscriptTooltip: (t2) => `सबस्क्रिप्ट (${t2})` } }, c = { superscript: true, subscript: true }, a = [{ type: "superscript", opposite: "subscript", configKey: "superscript", rank: 4, tag: "sup", label: "Superscript", icon: ['<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">', '<path d="M16 7.41L11.41 12 16 16.59 14.59 18l-6-6 6-6z"', ' fill="none"/>', '<path d="M9.64 7.64c.23-.5.36-1.05.36-1.64', " 0-2.21-1.79-4-4-4H2v14h4.36c2.34 0 4.24-1.9", " 4.24-4.24 0-1.6-.89-2.99-2.2-3.71zM4.5 4.5H6c.83", " 0 1.5.67 1.5 1.5S6.83 7.5 6 7.5H4.5v-3zm2 9H4.5v-3H6.5c.83", ' 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z" fill="none"/>', '<path d="M15.97 3.84c0-.47.19-.91.53-1.21.34-.31.8-.49', " 1.3-.49.5 0 .95.18 1.28.48.32.3.5.7.51 1.15h1.59c-.02", "-.96-.43-1.83-1.13-2.42C19.36.77 18.45.44 17.5.44c-.88", " 0-1.74.28-2.39.8-.67.53-1.06 1.28-1.06 2.1 0 .76.34", " 1.47.93 1.97.59.49 1.41.84 2.32 1.15.7.24 1.26.5 1.62.8.35.3.53.64.53", " 1.02 0 .48-.2.93-.55 1.24-.36.3-.84.48-1.37.48-.55 0-1.04-.2-1.39-.54", "-.34-.33-.53-.8-.53-1.32h-1.58c.01 1.02.43 1.95 1.16 2.57.72.62 1.67.96", " 2.67.96.92 0 1.81-.3 2.46-.84.67-.56 1.04-1.33 1.04-2.18 0-.81-.36-1.56", "-.99-2.08-.62-.51-1.48-.88-2.43-1.2-.67-.23-1.2-.47-1.52-.75-.32-.27-.46", '-.59-.46-.94z"/>', '<path d="M5.88 20h2.66l3.4-5.42L15.3 20h2.67l-4.73-7.38', ' 4.37-6.62h-2.6l-3.07 4.98L8.92 6h-2.6l4.26 6.58z"/>', "</svg>"].join(""), keyBinding: "Mod-.", toolbarPriority: 50, toHTMLString: (t2) => `<sup>${t2}</sup>`, parseHTML: [{ tag: "sup" }], sanitize: { tags: ["sup"] } }, { type: "subscript", opposite: "superscript", configKey: "subscript", rank: 4, tag: "sub", label: "Subscript", icon: ['<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">', '<path d="M15.97 16.84c0-.47.19-.91.53-1.21.34-.31.8-.49', " 1.3-.49.5 0 .95.18 1.28.48.32.3.5.7.51 1.15h1.59c-.02", "-.96-.43-1.83-1.13-2.42-.7-.58-1.61-.91-2.56-.91-.88", " 0-1.74.28-2.39.8-.67.53-1.06 1.28-1.06 2.1 0 .76.34", " 1.47.93 1.97.59.49 1.41.84 2.32 1.15.7.24 1.26.5 1.62.8.35.3.53.64.53", " 1.02 0 .48-.2.93-.55 1.24-.36.3-.84.48-1.37.48-.55 0-1.04-.2-1.39-.54", "-.34-.33-.53-.8-.53-1.32h-1.58c.01 1.02.43 1.95 1.16 2.57.72.62 1.67.96", " 2.67.96.92 0 1.81-.3 2.46-.84.67-.56 1.04-1.33 1.04-2.18 0-.81-.36-1.56", "-.99-2.08-.62-.51-1.48-.88-2.43-1.2-.67-.23-1.2-.47-1.52-.75-.32-.27-.46", '-.59-.46-.94z"/>', '<path d="M5.88 18h2.66l3.4-5.42L15.3 18h2.67l-4.73-7.38', ' 4.37-6.62h-2.6l-3.07 4.98L8.92 4h-2.6l4.26 6.58z"/>', "</svg>"].join(""), keyBinding: "Mod-,", toolbarPriority: 51, toHTMLString: (t2) => `<sub>${t2}</sub>`, parseHTML: [{ tag: "sub" }], sanitize: { tags: ["sub"] } }];
|
|
6
|
+
class l {
|
|
7
|
+
id = "super-sub";
|
|
8
|
+
name = "Superscript & Subscript";
|
|
9
|
+
priority = 23;
|
|
10
|
+
config;
|
|
11
|
+
locale;
|
|
12
|
+
constructor(t2) {
|
|
13
|
+
this.config = { ...c, ...t2 };
|
|
14
|
+
}
|
|
15
|
+
init(t2) {
|
|
16
|
+
this.locale = i(p, t2, this.config.locale);
|
|
17
|
+
const s2 = a.filter((t3) => this.config[t3.configKey]), e2 = s2.filter((t3) => this.isToolbarVisible(t3.configKey)).at(-1);
|
|
18
|
+
for (const i2 of s2) {
|
|
19
|
+
const s3 = !!this.config.separatorAfter && i2 === e2;
|
|
20
|
+
this.registerMark(t2, i2, s3);
|
|
21
|
+
}
|
|
22
|
+
this.registerKeymaps(t2, s2), this.registerExclusivityMiddleware(t2, s2), this.registerDisabledToolbarItems(t2);
|
|
23
|
+
}
|
|
24
|
+
registerMark(i2, o2, p2) {
|
|
25
|
+
const c2 = n(o2.type), a2 = this.isToolbarVisible(o2.configKey);
|
|
26
|
+
if (i2.registerMarkSpec({ type: o2.type, rank: o2.rank, toDOM: () => document.createElement(o2.tag), toHTMLString: (t2, s2) => o2.toHTMLString(s2), parseHTML: o2.parseHTML, sanitize: o2.sanitize }), i2.registerCommand(c2, () => {
|
|
27
|
+
const s2 = t(i2.getState(), e(o2.type));
|
|
28
|
+
return !!s2 && (i2.dispatch(s2), true);
|
|
29
|
+
}), a2) {
|
|
30
|
+
const t2 = "superscript" === o2.type ? this.locale.superscriptLabel : this.locale.subscriptLabel, a3 = "superscript" === o2.type ? this.locale.superscriptTooltip(r(o2.keyBinding)) : this.locale.subscriptTooltip(r(o2.keyBinding));
|
|
31
|
+
i2.registerToolbarItem({ id: o2.type, group: "format", icon: o2.icon, label: t2, tooltip: a3, command: c2, priority: o2.toolbarPriority, separatorAfter: p2, isActive: (t3) => s(t3, e(o2.type)) });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
registerKeymaps(t2, s2) {
|
|
35
|
+
const i2 = {};
|
|
36
|
+
for (const e2 of s2) {
|
|
37
|
+
const s3 = n(e2.type);
|
|
38
|
+
i2[e2.keyBinding] = () => t2.executeCommand(s3);
|
|
39
|
+
}
|
|
40
|
+
Object.keys(i2).length > 0 && t2.registerKeymap(i2);
|
|
41
|
+
}
|
|
42
|
+
registerExclusivityMiddleware(t2, s2) {
|
|
43
|
+
s2.some((t3) => "superscript" === t3.type) && s2.some((t3) => "subscript" === t3.type) && t2.registerMiddleware((t3, s3, i2) => {
|
|
44
|
+
let r2 = false;
|
|
45
|
+
const o2 = [];
|
|
46
|
+
for (const s4 of t3.steps) {
|
|
47
|
+
if ("addMark" !== s4.type) {
|
|
48
|
+
o2.push(s4);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const t4 = s4.mark.type, i3 = a.find((s5) => s5.type === t4);
|
|
52
|
+
if (!i3) {
|
|
53
|
+
o2.push(s4);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
r2 = true;
|
|
57
|
+
const p3 = { type: "removeMark", blockId: s4.blockId, from: s4.from, to: s4.to, mark: { type: e(i3.opposite) }, ...s4.path ? { path: s4.path } : {} };
|
|
58
|
+
o2.push(p3, s4);
|
|
59
|
+
}
|
|
60
|
+
let p2 = t3.storedMarksAfter;
|
|
61
|
+
if (p2) {
|
|
62
|
+
const t4 = p2.some((t5) => "superscript" === t5.type), s4 = p2.some((t5) => "subscript" === t5.type);
|
|
63
|
+
if (t4 && s4) {
|
|
64
|
+
const t5 = p2.findLastIndex((t6) => "superscript" === t6.type) > p2.findLastIndex((t6) => "subscript" === t6.type) ? "subscript" : "superscript";
|
|
65
|
+
p2 = p2.filter((s5) => s5.type !== t5), r2 = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
i2(r2 ? { ...t3, steps: o2, storedMarksAfter: p2 } : t3);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
registerDisabledToolbarItems(t2) {
|
|
72
|
+
if (this.config.toolbar) for (const s2 of a) {
|
|
73
|
+
const i2 = this.config[s2.configKey], e2 = this.config.toolbar[s2.configKey] ?? true;
|
|
74
|
+
if (!i2 && e2) {
|
|
75
|
+
const i3 = "superscript" === s2.type ? this.locale.superscriptLabel : this.locale.subscriptLabel;
|
|
76
|
+
t2.registerToolbarItem({ id: s2.type, group: "format", icon: s2.icon, label: i3, command: n(s2.type), priority: s2.toolbarPriority, isEnabled: () => false });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
isToolbarVisible(t2) {
|
|
81
|
+
return !this.config.toolbar || (this.config.toolbar[t2] ?? true);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function n(t2) {
|
|
85
|
+
return `toggle${t2.charAt(0).toUpperCase()}${t2.slice(1)}`;
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
p as S,
|
|
89
|
+
o as a,
|
|
90
|
+
l as b
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=index-C2GQoHot.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C2GQoHot.mjs","sources":["../../src/plugins/super-sub/SuperSubLocale.ts","../../src/plugins/super-sub/SuperSubPlugin.ts"],"sourcesContent":["/**\n * Locale interface and default English locale for the SuperSubPlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface SuperSubLocale {\n\treadonly superscriptLabel: string;\n\treadonly superscriptTooltip: (shortcut: string) => string;\n\treadonly subscriptLabel: string;\n\treadonly subscriptTooltip: (shortcut: string) => string;\n}\n\n// --- Default English Locale ---\n\nexport const SUPER_SUB_LOCALE_EN: SuperSubLocale = {\n\tsuperscriptLabel: 'Superscript',\n\tsuperscriptTooltip: (shortcut: string) => `Superscript (${shortcut})`,\n\tsubscriptLabel: 'Subscript',\n\tsubscriptTooltip: (shortcut: string) => `Subscript (${shortcut})`,\n};\n\n// --- German Locale ---\n\nexport const SUPER_SUB_LOCALE_DE: SuperSubLocale = {\n\tsuperscriptLabel: 'Hochgestellt',\n\tsuperscriptTooltip: (shortcut: string) => `Hochgestellt (${shortcut})`,\n\tsubscriptLabel: 'Tiefgestellt',\n\tsubscriptTooltip: (shortcut: string) => `Tiefgestellt (${shortcut})`,\n};\n\n// --- Spanish Locale ---\n\nexport const SUPER_SUB_LOCALE_ES: SuperSubLocale = {\n\tsuperscriptLabel: 'Superíndice',\n\tsuperscriptTooltip: (shortcut: string) => `Superíndice (${shortcut})`,\n\tsubscriptLabel: 'Subíndice',\n\tsubscriptTooltip: (shortcut: string) => `Subíndice (${shortcut})`,\n};\n\n// --- French Locale ---\n\nexport const SUPER_SUB_LOCALE_FR: SuperSubLocale = {\n\tsuperscriptLabel: 'Exposant',\n\tsuperscriptTooltip: (shortcut: string) => `Exposant (${shortcut})`,\n\tsubscriptLabel: 'Indice',\n\tsubscriptTooltip: (shortcut: string) => `Indice (${shortcut})`,\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const SUPER_SUB_LOCALE_ZH: SuperSubLocale = {\n\tsuperscriptLabel: '上标',\n\tsuperscriptTooltip: (shortcut: string) => `上标 (${shortcut})`,\n\tsubscriptLabel: '下标',\n\tsubscriptTooltip: (shortcut: string) => `下标 (${shortcut})`,\n};\n\n// --- Russian Locale ---\n\nexport const SUPER_SUB_LOCALE_RU: SuperSubLocale = {\n\tsuperscriptLabel: 'Надстрочный',\n\tsuperscriptTooltip: (shortcut: string) => `Надстрочный (${shortcut})`,\n\tsubscriptLabel: 'Подстрочный',\n\tsubscriptTooltip: (shortcut: string) => `Подстрочный (${shortcut})`,\n};\n\n// --- Arabic Locale ---\n\nexport const SUPER_SUB_LOCALE_AR: SuperSubLocale = {\n\tsuperscriptLabel: 'مرتفع',\n\tsuperscriptTooltip: (shortcut: string) => `مرتفع (${shortcut})`,\n\tsubscriptLabel: 'منخفض',\n\tsubscriptTooltip: (shortcut: string) => `منخفض (${shortcut})`,\n};\n\n// --- Hindi Locale ---\n\nexport const SUPER_SUB_LOCALE_HI: SuperSubLocale = {\n\tsuperscriptLabel: 'सुपरस्क्रिप्ट',\n\tsuperscriptTooltip: (shortcut: string) => `सुपरस्क्रिप्ट (${shortcut})`,\n\tsubscriptLabel: 'सबस्क्रिप्ट',\n\tsubscriptTooltip: (shortcut: string) => `सबस्क्रिप्ट (${shortcut})`,\n};\n\n// --- Locale Map ---\n\nexport const SUPER_SUB_LOCALES: Record<string, SuperSubLocale> = {\n\ten: SUPER_SUB_LOCALE_EN,\n\tde: SUPER_SUB_LOCALE_DE,\n\tes: SUPER_SUB_LOCALE_ES,\n\tfr: SUPER_SUB_LOCALE_FR,\n\tzh: SUPER_SUB_LOCALE_ZH,\n\tru: SUPER_SUB_LOCALE_RU,\n\tar: SUPER_SUB_LOCALE_AR,\n\thi: SUPER_SUB_LOCALE_HI,\n};\n","/**\n * SuperSubPlugin: registers superscript and subscript inline marks with\n * MarkSpecs, toggle commands, keyboard shortcuts, toolbar buttons, and\n * a middleware that enforces mutual exclusivity between the two marks.\n *\n * Data-driven — each mark type is defined declaratively and all\n * registrations are derived from the same definition table.\n */\n\nimport { isMarkActive, toggleMark } from '../../commands/Commands.js';\nimport { resolvePluginLocale } from '../../i18n/resolvePluginLocale.js';\nimport type { Mark } from '../../model/Document.js';\nimport type { ParseRule } from '../../model/ParseRule.js';\nimport type { SanitizeConfig } from '../../model/SanitizeConfig.js';\nimport { markType as mkType } from '../../model/TypeBrands.js';\nimport type { RemoveMarkStep, Step } from '../../state/Transaction.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { formatShortcut } from '../toolbar/ToolbarItem.js';\nimport { SUPER_SUB_LOCALES, type SuperSubLocale } from './SuperSubLocale.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface MarkAttrRegistry {\n\t\tsuperscript: Record<string, never>;\n\t\tsubscript: Record<string, never>;\n\t}\n}\n\n// --- Configuration ---\n\n/** Controls toolbar button visibility per mark. */\nexport interface SuperSubToolbarConfig {\n\treadonly superscript?: boolean;\n\treadonly subscript?: boolean;\n}\n\n/** Controls which marks are enabled and which toolbar buttons are shown. */\nexport interface SuperSubConfig {\n\treadonly superscript: boolean;\n\treadonly subscript: boolean;\n\treadonly toolbar?: SuperSubToolbarConfig;\n\t/** When true, a separator is rendered after the last toolbar item. */\n\treadonly separatorAfter?: boolean;\n\treadonly locale?: SuperSubLocale;\n}\n\nconst DEFAULT_CONFIG: SuperSubConfig = {\n\tsuperscript: true,\n\tsubscript: true,\n};\n\n// --- Mark Definitions ---\n\ninterface MarkDefinition {\n\treadonly type: 'superscript' | 'subscript';\n\treadonly opposite: 'superscript' | 'subscript';\n\treadonly configKey: keyof Omit<SuperSubConfig, 'toolbar' | 'separatorAfter' | 'locale'>;\n\treadonly rank: number;\n\treadonly tag: string;\n\treadonly label: string;\n\treadonly icon: string;\n\treadonly keyBinding: string;\n\treadonly toolbarPriority: number;\n\treadonly toHTMLString: (content: string) => string;\n\treadonly parseHTML: readonly ParseRule[];\n\treadonly sanitize: SanitizeConfig;\n}\n\nconst SUPERSCRIPT_ICON: string = [\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">',\n\t'<path d=\"M16 7.41L11.41 12 16 16.59 14.59 18l-6-6 6-6z\"',\n\t' fill=\"none\"/>',\n\t'<path d=\"M9.64 7.64c.23-.5.36-1.05.36-1.64',\n\t' 0-2.21-1.79-4-4-4H2v14h4.36c2.34 0 4.24-1.9',\n\t' 4.24-4.24 0-1.6-.89-2.99-2.2-3.71zM4.5 4.5H6c.83',\n\t' 0 1.5.67 1.5 1.5S6.83 7.5 6 7.5H4.5v-3zm2 9H4.5v-3H6.5c.83',\n\t' 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z\" fill=\"none\"/>',\n\t'<path d=\"M15.97 3.84c0-.47.19-.91.53-1.21.34-.31.8-.49',\n\t' 1.3-.49.5 0 .95.18 1.28.48.32.3.5.7.51 1.15h1.59c-.02',\n\t'-.96-.43-1.83-1.13-2.42C19.36.77 18.45.44 17.5.44c-.88',\n\t' 0-1.74.28-2.39.8-.67.53-1.06 1.28-1.06 2.1 0 .76.34',\n\t' 1.47.93 1.97.59.49 1.41.84 2.32 1.15.7.24 1.26.5 1.62.8.35.3.53.64.53',\n\t' 1.02 0 .48-.2.93-.55 1.24-.36.3-.84.48-1.37.48-.55 0-1.04-.2-1.39-.54',\n\t'-.34-.33-.53-.8-.53-1.32h-1.58c.01 1.02.43 1.95 1.16 2.57.72.62 1.67.96',\n\t' 2.67.96.92 0 1.81-.3 2.46-.84.67-.56 1.04-1.33 1.04-2.18 0-.81-.36-1.56',\n\t'-.99-2.08-.62-.51-1.48-.88-2.43-1.2-.67-.23-1.2-.47-1.52-.75-.32-.27-.46',\n\t'-.59-.46-.94z\"/>',\n\t'<path d=\"M5.88 20h2.66l3.4-5.42L15.3 20h2.67l-4.73-7.38',\n\t' 4.37-6.62h-2.6l-3.07 4.98L8.92 6h-2.6l4.26 6.58z\"/>',\n\t'</svg>',\n].join('');\n\nconst SUBSCRIPT_ICON: string = [\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">',\n\t'<path d=\"M15.97 16.84c0-.47.19-.91.53-1.21.34-.31.8-.49',\n\t' 1.3-.49.5 0 .95.18 1.28.48.32.3.5.7.51 1.15h1.59c-.02',\n\t'-.96-.43-1.83-1.13-2.42-.7-.58-1.61-.91-2.56-.91-.88',\n\t' 0-1.74.28-2.39.8-.67.53-1.06 1.28-1.06 2.1 0 .76.34',\n\t' 1.47.93 1.97.59.49 1.41.84 2.32 1.15.7.24 1.26.5 1.62.8.35.3.53.64.53',\n\t' 1.02 0 .48-.2.93-.55 1.24-.36.3-.84.48-1.37.48-.55 0-1.04-.2-1.39-.54',\n\t'-.34-.33-.53-.8-.53-1.32h-1.58c.01 1.02.43 1.95 1.16 2.57.72.62 1.67.96',\n\t' 2.67.96.92 0 1.81-.3 2.46-.84.67-.56 1.04-1.33 1.04-2.18 0-.81-.36-1.56',\n\t'-.99-2.08-.62-.51-1.48-.88-2.43-1.2-.67-.23-1.2-.47-1.52-.75-.32-.27-.46',\n\t'-.59-.46-.94z\"/>',\n\t'<path d=\"M5.88 18h2.66l3.4-5.42L15.3 18h2.67l-4.73-7.38',\n\t' 4.37-6.62h-2.6l-3.07 4.98L8.92 4h-2.6l4.26 6.58z\"/>',\n\t'</svg>',\n].join('');\n\nconst MARK_DEFINITIONS: readonly MarkDefinition[] = [\n\t{\n\t\ttype: 'superscript',\n\t\topposite: 'subscript',\n\t\tconfigKey: 'superscript',\n\t\trank: 4,\n\t\ttag: 'sup',\n\t\tlabel: 'Superscript',\n\t\ticon: SUPERSCRIPT_ICON,\n\t\tkeyBinding: 'Mod-.',\n\t\ttoolbarPriority: 50,\n\t\ttoHTMLString: (content) => `<sup>${content}</sup>`,\n\t\tparseHTML: [{ tag: 'sup' }],\n\t\tsanitize: { tags: ['sup'] },\n\t},\n\t{\n\t\ttype: 'subscript',\n\t\topposite: 'superscript',\n\t\tconfigKey: 'subscript',\n\t\trank: 4,\n\t\ttag: 'sub',\n\t\tlabel: 'Subscript',\n\t\ticon: SUBSCRIPT_ICON,\n\t\tkeyBinding: 'Mod-,',\n\t\ttoolbarPriority: 51,\n\t\ttoHTMLString: (content) => `<sub>${content}</sub>`,\n\t\tparseHTML: [{ tag: 'sub' }],\n\t\tsanitize: { tags: ['sub'] },\n\t},\n];\n\n// --- Plugin ---\n\nexport class SuperSubPlugin implements Plugin {\n\treadonly id = 'super-sub';\n\treadonly name = 'Superscript & Subscript';\n\treadonly priority = 23;\n\n\tprivate readonly config: SuperSubConfig;\n\tprivate locale!: SuperSubLocale;\n\n\tconstructor(config?: Partial<SuperSubConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(SUPER_SUB_LOCALES, context, this.config.locale);\n\n\t\tconst enabledMarks: MarkDefinition[] = MARK_DEFINITIONS.filter(\n\t\t\t(def) => this.config[def.configKey],\n\t\t);\n\n\t\tconst visibleToolbarMarks: MarkDefinition[] = enabledMarks.filter((def) =>\n\t\t\tthis.isToolbarVisible(def.configKey),\n\t\t);\n\t\tconst lastVisibleMark: MarkDefinition | undefined = visibleToolbarMarks.at(-1);\n\n\t\tfor (const def of enabledMarks) {\n\t\t\tconst isSeparatorTarget: boolean = !!this.config.separatorAfter && def === lastVisibleMark;\n\t\t\tthis.registerMark(context, def, isSeparatorTarget);\n\t\t}\n\n\t\tthis.registerKeymaps(context, enabledMarks);\n\t\tthis.registerExclusivityMiddleware(context, enabledMarks);\n\t\tthis.registerDisabledToolbarItems(context);\n\t}\n\n\tprivate registerMark(context: PluginContext, def: MarkDefinition, separatorAfter: boolean): void {\n\t\tconst commandName: string = toCommandName(def.type);\n\t\tconst toolbarVisible: boolean = this.isToolbarVisible(def.configKey);\n\n\t\tcontext.registerMarkSpec({\n\t\t\ttype: def.type,\n\t\t\trank: def.rank,\n\t\t\ttoDOM() {\n\t\t\t\treturn document.createElement(def.tag);\n\t\t\t},\n\t\t\ttoHTMLString: (_mark, content) => def.toHTMLString(content),\n\t\t\tparseHTML: def.parseHTML,\n\t\t\tsanitize: def.sanitize,\n\t\t});\n\n\t\tcontext.registerCommand(commandName, () => {\n\t\t\tconst tr = toggleMark(context.getState(), mkType(def.type));\n\t\t\tif (tr) {\n\t\t\t\tcontext.dispatch(tr);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\tif (toolbarVisible) {\n\t\t\tconst label: string =\n\t\t\t\tdef.type === 'superscript' ? this.locale.superscriptLabel : this.locale.subscriptLabel;\n\t\t\tconst tooltip: string =\n\t\t\t\tdef.type === 'superscript'\n\t\t\t\t\t? this.locale.superscriptTooltip(formatShortcut(def.keyBinding))\n\t\t\t\t\t: this.locale.subscriptTooltip(formatShortcut(def.keyBinding));\n\t\t\tcontext.registerToolbarItem({\n\t\t\t\tid: def.type,\n\t\t\t\tgroup: 'format',\n\t\t\t\ticon: def.icon,\n\t\t\t\tlabel,\n\t\t\t\ttooltip,\n\t\t\t\tcommand: commandName,\n\t\t\t\tpriority: def.toolbarPriority,\n\t\t\t\tseparatorAfter,\n\t\t\t\tisActive: (state) => isMarkActive(state, mkType(def.type)),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate registerKeymaps(context: PluginContext, marks: readonly MarkDefinition[]): void {\n\t\tconst keymap: Record<string, () => boolean> = {};\n\t\tfor (const def of marks) {\n\t\t\tconst commandName: string = toCommandName(def.type);\n\t\t\tkeymap[def.keyBinding] = () => context.executeCommand(commandName);\n\t\t}\n\t\tif (Object.keys(keymap).length > 0) {\n\t\t\tcontext.registerKeymap(keymap);\n\t\t}\n\t}\n\n\t/**\n\t * Ensures superscript and subscript are mutually exclusive.\n\t * When an addMark step for one type is found, a removeMark step\n\t * for the opposite type is injected. For stored marks, the opposite\n\t * mark is filtered out.\n\t */\n\tprivate registerExclusivityMiddleware(\n\t\tcontext: PluginContext,\n\t\tenabledMarks: readonly MarkDefinition[],\n\t): void {\n\t\tconst bothEnabled: boolean =\n\t\t\tenabledMarks.some((d) => d.type === 'superscript') &&\n\t\t\tenabledMarks.some((d) => d.type === 'subscript');\n\n\t\tif (!bothEnabled) return;\n\n\t\tcontext.registerMiddleware((tr, _state, next) => {\n\t\t\tlet patched = false;\n\n\t\t\t// Handle addMark steps: inject removeMark for the opposite type\n\t\t\tconst patchedSteps: Step[] = [];\n\t\t\tfor (const step of tr.steps) {\n\t\t\t\tif (step.type !== 'addMark') {\n\t\t\t\t\tpatchedSteps.push(step);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst markName: string = step.mark.type;\n\t\t\t\tconst def: MarkDefinition | undefined = MARK_DEFINITIONS.find((d) => d.type === markName);\n\t\t\t\tif (!def) {\n\t\t\t\t\tpatchedSteps.push(step);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tpatched = true;\n\t\t\t\tconst removeStep: RemoveMarkStep = {\n\t\t\t\t\ttype: 'removeMark',\n\t\t\t\t\tblockId: step.blockId,\n\t\t\t\t\tfrom: step.from,\n\t\t\t\t\tto: step.to,\n\t\t\t\t\tmark: { type: mkType(def.opposite) },\n\t\t\t\t\t...(step.path ? { path: step.path } : {}),\n\t\t\t\t};\n\t\t\t\tpatchedSteps.push(removeStep, step);\n\t\t\t}\n\n\t\t\t// Handle stored marks: remove the opposite mark\n\t\t\tlet storedMarksAfter: readonly Mark[] | null = tr.storedMarksAfter;\n\t\t\tif (storedMarksAfter) {\n\t\t\t\tconst hasSup: boolean = storedMarksAfter.some((m) => m.type === 'superscript');\n\t\t\t\tconst hasSub: boolean = storedMarksAfter.some((m) => m.type === 'subscript');\n\n\t\t\t\tif (hasSup && hasSub) {\n\t\t\t\t\t// Keep the one that was most recently added (last in array)\n\t\t\t\t\tconst lastSupIdx: number = storedMarksAfter.findLastIndex(\n\t\t\t\t\t\t(m) => m.type === 'superscript',\n\t\t\t\t\t);\n\t\t\t\t\tconst lastSubIdx: number = storedMarksAfter.findLastIndex((m) => m.type === 'subscript');\n\t\t\t\t\tconst removeType: string = lastSupIdx > lastSubIdx ? 'subscript' : 'superscript';\n\n\t\t\t\t\tstoredMarksAfter = storedMarksAfter.filter((m) => m.type !== removeType);\n\t\t\t\t\tpatched = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext(patched ? { ...tr, steps: patchedSteps, storedMarksAfter } : tr);\n\t\t});\n\t}\n\n\t/**\n\t * Registers disabled toolbar buttons for marks whose feature is disabled\n\t * but whose toolbar button is explicitly requested.\n\t */\n\tprivate registerDisabledToolbarItems(context: PluginContext): void {\n\t\tif (!this.config.toolbar) return;\n\n\t\tfor (const def of MARK_DEFINITIONS) {\n\t\t\tconst featureEnabled: boolean = this.config[def.configKey];\n\t\t\tconst toolbarVisible: boolean = this.config.toolbar[def.configKey] ?? true;\n\n\t\t\tif (!featureEnabled && toolbarVisible) {\n\t\t\t\tconst label: string =\n\t\t\t\t\tdef.type === 'superscript' ? this.locale.superscriptLabel : this.locale.subscriptLabel;\n\t\t\t\tcontext.registerToolbarItem({\n\t\t\t\t\tid: def.type,\n\t\t\t\t\tgroup: 'format',\n\t\t\t\t\ticon: def.icon,\n\t\t\t\t\tlabel,\n\t\t\t\t\tcommand: toCommandName(def.type),\n\t\t\t\t\tpriority: def.toolbarPriority,\n\t\t\t\t\tisEnabled: () => false,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate isToolbarVisible(\n\t\tconfigKey: keyof Omit<SuperSubConfig, 'toolbar' | 'separatorAfter' | 'locale'>,\n\t): boolean {\n\t\tif (!this.config.toolbar) return true;\n\t\treturn this.config.toolbar[configKey] ?? true;\n\t}\n}\n\n/** Converts a mark type to its toggle command name (e.g. 'superscript' → 'toggleSuperscript'). */\nfunction toCommandName(markType: string): string {\n\treturn `toggle${markType.charAt(0).toUpperCase()}${markType.slice(1)}`;\n}\n"],"names":["SUPER_SUB_LOCALE_EN","superscriptLabel","superscriptTooltip","shortcut","subscriptLabel","subscriptTooltip","SUPER_SUB_LOCALES","en","de","es","fr","zh","ru","ar","hi","DEFAULT_CONFIG","superscript","subscript","MARK_DEFINITIONS","type","opposite","configKey","rank","tag","label","icon","join","keyBinding","toolbarPriority","toHTMLString","content","parseHTML","sanitize","tags","SuperSubPlugin","id","name","priority","config","locale","this","context","resolvePluginLocale","enabledMarks","filter","def","lastVisibleMark","isToolbarVisible","at","isSeparatorTarget","separatorAfter","registerMark","registerKeymaps","registerExclusivityMiddleware","registerDisabledToolbarItems","commandName","toCommandName","toolbarVisible","registerMarkSpec","toDOM","document","createElement","_mark","registerCommand","tr","toggleMark","getState","mkType","dispatch","tooltip","formatShortcut","registerToolbarItem","group","command","isActive","state","isMarkActive","marks","keymap","executeCommand","Object","keys","length","registerKeymap","some","d","registerMiddleware","_state","next","patched","patchedSteps","step","steps","push","markName","mark","find","removeStep","blockId","from","to","path","storedMarksAfter","hasSup","m","hasSub","removeType","findLastIndex","toolbar","featureEnabled","isEnabled","markType","charAt","toUpperCase","slice"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { A as t, t as e } from "./Commands-CSpSwGXv.mjs";
|
|
2
|
+
import { r } from "./resolvePluginLocale-B4w1OkPy.mjs";
|
|
3
|
+
import { m as o } from "./TypeBrands-C09nE2qO.mjs";
|
|
4
|
+
import { f as i } from "./ToolbarItem-ugDymuXi.mjs";
|
|
5
|
+
const a = { label: "Strikethrough", tooltip: (t2) => `Strikethrough (${t2})` }, s = { en: a, de: { label: "Durchgestrichen", tooltip: (t2) => `Durchgestrichen (${t2})` }, es: { label: "Tachado", tooltip: (t2) => `Tachado (${t2})` }, fr: { label: "Barré", tooltip: (t2) => `Barré (${t2})` }, zh: { label: "删除线", tooltip: (t2) => `删除线 (${t2})` }, ru: { label: "Зачёркнутый", tooltip: (t2) => `Зачёркнутый (${t2})` }, ar: { label: "يتوسطه خط", tooltip: (t2) => `يتوسطه خط (${t2})` }, hi: { label: "स्ट्राइकथ्रू", tooltip: (t2) => `स्ट्राइकथ्रू (${t2})` } }, l = {};
|
|
6
|
+
class h {
|
|
7
|
+
id = "strikethrough";
|
|
8
|
+
name = "Strikethrough";
|
|
9
|
+
priority = 22;
|
|
10
|
+
config;
|
|
11
|
+
locale;
|
|
12
|
+
constructor(t2) {
|
|
13
|
+
this.config = { ...l, ...t2 };
|
|
14
|
+
}
|
|
15
|
+
init(t2) {
|
|
16
|
+
this.locale = r(s, t2, this.config.locale), this.registerMarkSpec(t2), this.registerCommand(t2), this.registerKeymap(t2), this.registerToolbarItem(t2);
|
|
17
|
+
}
|
|
18
|
+
registerMarkSpec(t2) {
|
|
19
|
+
t2.registerMarkSpec({ type: "strikethrough", rank: 3, toDOM: () => document.createElement("s"), toHTMLString: (t3, e2) => `<s>${e2}</s>`, parseHTML: [{ tag: "s" }, { tag: "strike" }, { tag: "del" }], sanitize: { tags: ["s"] } });
|
|
20
|
+
}
|
|
21
|
+
registerCommand(e2) {
|
|
22
|
+
e2.registerCommand("toggleStrikethrough", () => {
|
|
23
|
+
const r2 = t(e2.getState(), o("strikethrough"));
|
|
24
|
+
return !!r2 && (e2.dispatch(r2), true);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
registerKeymap(t2) {
|
|
28
|
+
t2.registerKeymap({ "Mod-Shift-X": () => t2.executeCommand("toggleStrikethrough") });
|
|
29
|
+
}
|
|
30
|
+
registerToolbarItem(t2) {
|
|
31
|
+
t2.registerToolbarItem({ id: "strikethrough", group: "format", icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z"/></svg>', label: this.locale.label, tooltip: this.locale.tooltip(i("Mod-Shift-X")), command: "toggleStrikethrough", priority: 40, separatorAfter: this.config.separatorAfter, isActive: (t3) => e(t3, o("strikethrough")) });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
s as S,
|
|
36
|
+
a,
|
|
37
|
+
h as b
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=index-CT3HGdQt.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CT3HGdQt.mjs","sources":["../../src/plugins/strikethrough/StrikethroughLocale.ts","../../src/plugins/strikethrough/StrikethroughPlugin.ts"],"sourcesContent":["/**\n * Locale interface and default English locale for the StrikethroughPlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface StrikethroughLocale {\n\treadonly label: string;\n\treadonly tooltip: (shortcut: string) => string;\n}\n\n// --- Default English Locale ---\n\nexport const STRIKETHROUGH_LOCALE_EN: StrikethroughLocale = {\n\tlabel: 'Strikethrough',\n\ttooltip: (shortcut: string) => `Strikethrough (${shortcut})`,\n};\n\n// --- German Locale ---\n\nexport const STRIKETHROUGH_LOCALE_DE: StrikethroughLocale = {\n\tlabel: 'Durchgestrichen',\n\ttooltip: (shortcut: string) => `Durchgestrichen (${shortcut})`,\n};\n\n// --- Spanish Locale ---\n\nexport const STRIKETHROUGH_LOCALE_ES: StrikethroughLocale = {\n\tlabel: 'Tachado',\n\ttooltip: (shortcut: string) => `Tachado (${shortcut})`,\n};\n\n// --- French Locale ---\n\nexport const STRIKETHROUGH_LOCALE_FR: StrikethroughLocale = {\n\tlabel: 'Barré',\n\ttooltip: (shortcut: string) => `Barré (${shortcut})`,\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const STRIKETHROUGH_LOCALE_ZH: StrikethroughLocale = {\n\tlabel: '删除线',\n\ttooltip: (shortcut: string) => `删除线 (${shortcut})`,\n};\n\n// --- Russian Locale ---\n\nexport const STRIKETHROUGH_LOCALE_RU: StrikethroughLocale = {\n\tlabel: 'Зачёркнутый',\n\ttooltip: (shortcut: string) => `Зачёркнутый (${shortcut})`,\n};\n\n// --- Arabic Locale ---\n\nexport const STRIKETHROUGH_LOCALE_AR: StrikethroughLocale = {\n\tlabel: 'يتوسطه خط',\n\ttooltip: (shortcut: string) => `يتوسطه خط (${shortcut})`,\n};\n\n// --- Hindi Locale ---\n\nexport const STRIKETHROUGH_LOCALE_HI: StrikethroughLocale = {\n\tlabel: 'स्ट्राइकथ्रू',\n\ttooltip: (shortcut: string) => `स्ट्राइकथ्रू (${shortcut})`,\n};\n\n// --- Locale Map ---\n\nexport const STRIKETHROUGH_LOCALES: Record<string, StrikethroughLocale> = {\n\ten: STRIKETHROUGH_LOCALE_EN,\n\tde: STRIKETHROUGH_LOCALE_DE,\n\tes: STRIKETHROUGH_LOCALE_ES,\n\tfr: STRIKETHROUGH_LOCALE_FR,\n\tzh: STRIKETHROUGH_LOCALE_ZH,\n\tru: STRIKETHROUGH_LOCALE_RU,\n\tar: STRIKETHROUGH_LOCALE_AR,\n\thi: STRIKETHROUGH_LOCALE_HI,\n};\n","/**\n * StrikethroughPlugin: registers a strikethrough inline mark with MarkSpec,\n * toggle command, keyboard shortcut (Mod-Shift-X), and a toolbar button.\n */\n\nimport { isMarkActive, toggleMark } from '../../commands/Commands.js';\nimport { resolvePluginLocale } from '../../i18n/resolvePluginLocale.js';\nimport { markType } from '../../model/TypeBrands.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { formatShortcut } from '../toolbar/ToolbarItem.js';\nimport { STRIKETHROUGH_LOCALES, type StrikethroughLocale } from './StrikethroughLocale.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface MarkAttrRegistry {\n\t\tstrikethrough: Record<string, never>;\n\t}\n}\n\n// --- Configuration ---\n\nexport interface StrikethroughConfig {\n\t/** When true, a separator is rendered after the strikethrough toolbar item. */\n\treadonly separatorAfter?: boolean;\n\treadonly locale?: StrikethroughLocale;\n}\n\nconst DEFAULT_CONFIG: StrikethroughConfig = {};\n\n// --- Plugin ---\n\nexport class StrikethroughPlugin implements Plugin {\n\treadonly id = 'strikethrough';\n\treadonly name = 'Strikethrough';\n\treadonly priority = 22;\n\n\tprivate readonly config: StrikethroughConfig;\n\tprivate locale!: StrikethroughLocale;\n\n\tconstructor(config?: Partial<StrikethroughConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(STRIKETHROUGH_LOCALES, context, this.config.locale);\n\t\tthis.registerMarkSpec(context);\n\t\tthis.registerCommand(context);\n\t\tthis.registerKeymap(context);\n\t\tthis.registerToolbarItem(context);\n\t}\n\n\tprivate registerMarkSpec(context: PluginContext): void {\n\t\tcontext.registerMarkSpec({\n\t\t\ttype: 'strikethrough',\n\t\t\trank: 3,\n\t\t\ttoDOM() {\n\t\t\t\treturn document.createElement('s');\n\t\t\t},\n\t\t\ttoHTMLString: (_mark, content) => `<s>${content}</s>`,\n\t\t\tparseHTML: [{ tag: 's' }, { tag: 'strike' }, { tag: 'del' }],\n\t\t\tsanitize: { tags: ['s'] },\n\t\t});\n\t}\n\n\tprivate registerCommand(context: PluginContext): void {\n\t\tcontext.registerCommand('toggleStrikethrough', () => {\n\t\t\tconst tr = toggleMark(context.getState(), markType('strikethrough'));\n\t\t\tif (tr) {\n\t\t\t\tcontext.dispatch(tr);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tprivate registerKeymap(context: PluginContext): void {\n\t\tcontext.registerKeymap({\n\t\t\t'Mod-Shift-X': () => context.executeCommand('toggleStrikethrough'),\n\t\t});\n\t}\n\n\tprivate registerToolbarItem(context: PluginContext): void {\n\t\tconst icon =\n\t\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z\"/></svg>';\n\n\t\tcontext.registerToolbarItem({\n\t\t\tid: 'strikethrough',\n\t\t\tgroup: 'format',\n\t\t\ticon,\n\t\t\tlabel: this.locale.label,\n\t\t\ttooltip: this.locale.tooltip(formatShortcut('Mod-Shift-X')),\n\t\t\tcommand: 'toggleStrikethrough',\n\t\t\tpriority: 40,\n\t\t\tseparatorAfter: this.config.separatorAfter,\n\t\t\tisActive: (state) => isMarkActive(state, markType('strikethrough')),\n\t\t});\n\t}\n}\n"],"names":["STRIKETHROUGH_LOCALE_EN","label","tooltip","shortcut","STRIKETHROUGH_LOCALES","en","de","es","fr","zh","ru","ar","hi","DEFAULT_CONFIG","StrikethroughPlugin","id","name","priority","config","locale","this","context","resolvePluginLocale","registerMarkSpec","registerCommand","registerKeymap","registerToolbarItem","type","rank","toDOM","document","createElement","toHTMLString","_mark","content","parseHTML","tag","sanitize","tags","tr","toggleMark","getState","markType","dispatch","executeCommand","group","icon","formatShortcut","command","separatorAfter","isActive","state","isMarkActive"],"mappings":";;;;AAaO,MAAMA,IAA+C,EAC3DC,OAAO,iBACPC,SAAUC,CAAAA,OAAqB,kBAAkBA,EAAAA,IAAAA,GAsDrCC,IAA6D,EACzEC,IAAIL,GACJM,IAnD2D,EAC3DL,OAAO,mBACPC,SAAUC,CAAAA,OAAqB,oBAAoBA,EAAAA,IAAAA,GAkDnDI,IA7C2D,EAC3DN,OAAO,WACPC,SAAUC,CAAAA,OAAqB,YAAYA,EAAAA,IAAAA,GA4C3CK,IAvC2D,EAC3DP,OAAO,SACPC,SAAUC,CAAAA,OAAqB,UAAUA,EAAAA,IAAAA,GAsCzCM,IAjC2D,EAC3DR,OAAO,OACPC,SAAUC,CAAAA,OAAqB,QAAQA,EAAAA,IAAAA,GAgCvCO,IA3B2D,EAC3DT,OAAO,eACPC,SAAUC,CAAAA,OAAqB,gBAAgBA,EAAAA,IAAAA,GA0B/CQ,IArB2D,EAC3DV,OAAO,aACPC,SAAUC,CAAAA,OAAqB,cAAcA,EAAAA,IAAAA,GAoB7CS,IAf2D,EAC3DX,OAAO,gBACPC,SAAUC,CAAAA,OAAqB,iBAAiBA,EAAAA,IAAAA,EAAAA,GCpC3CU,IAAsC,CAAA;AAIrC,MAAMC,EAAAA;AAAAA,EACHC,KAAK;AAAA,EACLC,OAAO;AAAA,EACPC,WAAW;AAAA,EAEHC;AAAAA,EACTC;AAAAA,EAER,YAAYD,IAAAA;AACXE,SAAKF,SAAS,EAAA,GAAKL,GAAAA,GAAmBK,GAAAA;AAAAA,EACvC;AAAA,EAEA,KAAKG;AACJD,SAAKD,SAASG,EAAoBlB,GAAuBiB,IAASD,KAAKF,OAAOC,MAAAA,GAC9EC,KAAKG,iBAAiBF,EAAAA,GACtBD,KAAKI,gBAAgBH,EAAAA,GACrBD,KAAKK,eAAeJ,EAAAA,GACpBD,KAAKM,oBAAoBL,EAAAA;AAAAA,EAC1B;AAAA,EAEQ,iBAAiBA,IAAAA;AACxBA,IAAAA,GAAQE,iBAAiB,EACxBI,MAAM,iBACNC,MAAM,GACNC,OAAA,MACQC,SAASC,cAAc,GAAA,GAE/BC,cAAc,CAACC,IAAOC,OAAY,MAAMA,EAAAA,QACxCC,WAAW,CAAC,EAAEC,KAAK,IAAA,GAAO,EAAEA,KAAK,SAAA,GAAY,EAAEA,KAAK,MAAA,CAAA,GACpDC,UAAU,EAAEC,MAAM,CAAC,GAAA,EAAA,EAAA,CAAA;AAAA,EAErB;AAAA,EAEQ,gBAAgBjB,IAAAA;AACvBA,IAAAA,GAAQG,gBAAgB,uBAAuB,MAAA;AAC9C,YAAMe,KAAKC,EAAWnB,GAAQoB,SAAAA,GAAYC,EAAS,eAAA,CAAA;AACnD,eAAIH,OACHlB,GAAQsB,SAASJ,EAAAA,GAAAA;AAAAA,IACV,CAAA;AAAA,EAIV;AAAA,EAEQ,eAAelB,IAAAA;AACtBA,IAAAA,GAAQI,eAAe,EACtB,eAAe,MAAMJ,GAAQuB,eAAe,qBAAA,EAAA,CAAA;AAAA,EAE9C;AAAA,EAEQ,oBAAoBvB,IAAAA;AAI3BA,IAAAA,GAAQK,oBAAoB,EAC3BX,IAAI,iBACJ8B,OAAO,UACPC,MALA,wIAMA7C,OAAOmB,KAAKD,OAAOlB,OACnBC,SAASkB,KAAKD,OAAOjB,QAAQ6C,EAAe,aAAA,CAAA,GAC5CC,SAAS,uBACT/B,UAAU,IACVgC,gBAAgB7B,KAAKF,OAAO+B,gBAC5BC,UAAWC,CAAAA,OAAUC,EAAaD,IAAOT,EAAS,eAAA,CAAA,EAAA,CAAA;AAAA,EAEpD;AAAA;"}
|