@notectl/core 2.0.0 → 2.0.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/dist/chunks/{AttrRegistry-B2AGfTE0.mjs → AttrRegistry-Ckj9eCHj.mjs} +2 -2
- package/dist/chunks/{AttrRegistry-B2AGfTE0.mjs.map → AttrRegistry-Ckj9eCHj.mjs.map} +1 -1
- package/dist/chunks/AttributedMarkCommands-x7h4Xy7V.mjs +2 -0
- package/dist/chunks/AttributedMarkCommands-x7h4Xy7V.mjs.map +1 -0
- package/dist/chunks/BlockInsertion-zPxm6oa_.mjs +2 -0
- package/dist/chunks/BlockInsertion-zPxm6oa_.mjs.map +1 -0
- package/dist/chunks/{ColorPickerPopup-DRzFvt7o.mjs → ColorPickerPopup-CDUvkgcK.mjs} +2 -2
- package/dist/chunks/ColorPickerPopup-CDUvkgcK.mjs.map +1 -0
- package/dist/chunks/Commands-DwXBBVGR.mjs +2 -0
- package/dist/chunks/Commands-DwXBBVGR.mjs.map +1 -0
- package/dist/chunks/Document-HC8s50qJ.mjs +2 -0
- package/dist/chunks/Document-HC8s50qJ.mjs.map +1 -0
- package/dist/chunks/DocumentParser-w70-Axud.mjs +2 -0
- package/dist/chunks/DocumentParser-w70-Axud.mjs.map +1 -0
- package/dist/chunks/DomUtils-CznMAZZg.mjs +2 -0
- package/dist/chunks/DomUtils-CznMAZZg.mjs.map +1 -0
- package/dist/chunks/HTMLUtils-Cxy99Ak2.mjs +2 -0
- package/dist/chunks/HTMLUtils-Cxy99Ak2.mjs.map +1 -0
- package/dist/chunks/HeadingPlugin-B-LF-AMM.mjs +2 -0
- package/dist/chunks/HeadingPlugin-B-LF-AMM.mjs.map +1 -0
- package/dist/chunks/MarkCommands-CTuVDqnn.mjs +2 -0
- package/dist/chunks/MarkCommands-CTuVDqnn.mjs.map +1 -0
- package/dist/chunks/{NavigationQueries-ogQuObz7.mjs → NavigationQueries-DCOv4Ca5.mjs} +2 -2
- package/dist/chunks/{NavigationQueries-ogQuObz7.mjs.map → NavigationQueries-DCOv4Ca5.mjs.map} +1 -1
- package/dist/chunks/NotectlEditor-DBBJkPCW.mjs +3 -0
- package/dist/chunks/NotectlEditor-DBBJkPCW.mjs.map +1 -0
- package/dist/chunks/PluginHelpers-CdPR0MuT.mjs +2 -0
- package/dist/chunks/PluginHelpers-CdPR0MuT.mjs.map +1 -0
- package/dist/chunks/PopupManager-Du3dYnsJ.mjs +2 -0
- package/dist/chunks/{PopupManager-BM8IT6M7.mjs.map → PopupManager-Du3dYnsJ.mjs.map} +1 -1
- package/dist/chunks/PrintTypes-DukwDSWS.mjs +2 -0
- package/dist/chunks/{PrintTypes-ehbL7ipA.mjs.map → PrintTypes-DukwDSWS.mjs.map} +1 -1
- package/dist/chunks/{RangeIterator-CNI6smOg.mjs → RangeIterator-CprUbOWv.mjs} +2 -2
- package/dist/chunks/{RangeIterator-CNI6smOg.mjs.map → RangeIterator-CprUbOWv.mjs.map} +1 -1
- package/dist/chunks/{Selection-6-W6Flxc.mjs → Selection-DhbizDM4.mjs} +2 -2
- package/dist/chunks/{Selection-6-W6Flxc.mjs.map → Selection-DhbizDM4.mjs.map} +1 -1
- package/dist/chunks/{SelectionTransactions-q71GEzgE.mjs → SelectionTransactions-DB3YDIEa.mjs} +2 -2
- package/dist/chunks/{SelectionTransactions-q71GEzgE.mjs.map → SelectionTransactions-DB3YDIEa.mjs.map} +1 -1
- package/dist/chunks/{TextDirectionLocale-DB_aqrMg.mjs → TextDirectionLocale-BraFI9JF.mjs} +2 -2
- package/dist/chunks/{TextDirectionLocale-DB_aqrMg.mjs.map → TextDirectionLocale-BraFI9JF.mjs.map} +1 -1
- package/dist/chunks/XmlPatterns-DxQXGjP8.mjs +2 -0
- package/dist/chunks/XmlPatterns-DxQXGjP8.mjs.map +1 -0
- package/dist/chunks/ar-b6VdnxAs.mjs +2 -0
- package/dist/chunks/ar-b6VdnxAs.mjs.map +1 -0
- package/dist/chunks/de-fXvs5vQT.mjs +2 -0
- package/dist/chunks/de-fXvs5vQT.mjs.map +1 -0
- package/dist/chunks/es-BTqy_aQ4.mjs +2 -0
- package/dist/chunks/es-BTqy_aQ4.mjs.map +1 -0
- package/dist/chunks/fr-VdiCNF4J.mjs +2 -0
- package/dist/chunks/fr-VdiCNF4J.mjs.map +1 -0
- package/dist/chunks/hi-BdtVhAzs.mjs +2 -0
- package/dist/chunks/hi-BdtVhAzs.mjs.map +1 -0
- package/dist/chunks/index-CVwf0cdH.mjs +2 -0
- package/dist/chunks/index-CVwf0cdH.mjs.map +1 -0
- package/dist/chunks/index-D3BZFsAD.mjs +2 -0
- package/dist/chunks/index-D3BZFsAD.mjs.map +1 -0
- package/dist/chunks/pt-K0BUlM9X.mjs +2 -0
- package/dist/chunks/pt-K0BUlM9X.mjs.map +1 -0
- package/dist/chunks/ru-Tzd5N37W.mjs +2 -0
- package/dist/chunks/ru-Tzd5N37W.mjs.map +1 -0
- package/dist/chunks/zh-Di3WqY4_.mjs +2 -0
- package/dist/chunks/zh-Di3WqY4_.mjs.map +1 -0
- package/dist/{input → commands}/BlockInsertion.d.ts +14 -1
- package/dist/commands/BlockInsertion.d.ts.map +1 -0
- package/dist/commands/CommandHelpers.d.ts +4 -0
- package/dist/commands/CommandHelpers.d.ts.map +1 -1
- package/dist/commands/Commands.d.ts.map +1 -1
- package/dist/commands/GapCursorCommands.d.ts.map +1 -1
- package/dist/commands/NodeSelectionCommands.d.ts.map +1 -1
- package/dist/commands/PasteCommand.d.ts.map +1 -1
- package/dist/editor/EditorThemeController.d.ts.map +1 -1
- package/dist/editor/NotectlEditor.d.ts.map +1 -1
- package/dist/editor/styles/code-block.d.ts +1 -1
- package/dist/editor/styles/code-block.d.ts.map +1 -1
- package/dist/editor/theme/ThemeEngine.d.ts.map +1 -1
- package/dist/editor/theme/ThemeTokens.d.ts +17 -1
- package/dist/editor/theme/ThemeTokens.d.ts.map +1 -1
- package/dist/full.d.ts +1 -0
- package/dist/full.d.ts.map +1 -1
- package/dist/full.mjs +1 -1
- package/dist/html.mjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/input/InputManager.d.ts +2 -0
- package/dist/input/InputManager.d.ts.map +1 -1
- package/dist/input/InternalClipboard.d.ts +2 -22
- package/dist/input/InternalClipboard.d.ts.map +1 -1
- package/dist/input/PasteHandler.d.ts +7 -0
- package/dist/input/PasteHandler.d.ts.map +1 -1
- package/dist/model/Document.d.ts.map +1 -1
- package/dist/model/HTMLUtils.d.ts +2 -0
- package/dist/model/HTMLUtils.d.ts.map +1 -1
- package/dist/model/PasteInterceptor.d.ts +21 -0
- package/dist/model/PasteInterceptor.d.ts.map +1 -0
- package/dist/model/RichBlockData.d.ts +24 -0
- package/dist/model/RichBlockData.d.ts.map +1 -0
- package/dist/model/SchemaRegistry.d.ts +2 -0
- package/dist/model/SchemaRegistry.d.ts.map +1 -1
- package/dist/notectl-core.mjs +1 -1
- package/dist/notectl-core.umd.js +1 -1
- package/dist/notectl-core.umd.js.map +1 -1
- package/dist/plugins/Plugin.d.ts +3 -0
- package/dist/plugins/Plugin.d.ts.map +1 -1
- package/dist/plugins/PluginManager.d.ts +7 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -1
- package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
- package/dist/plugins/alignment.mjs +1 -1
- package/dist/plugins/alignment.mjs.map +1 -1
- package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts.map +1 -1
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
- package/dist/plugins/blockquote.mjs +1 -1
- package/dist/plugins/blockquote.mjs.map +1 -1
- package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts.map +1 -1
- package/dist/plugins/caret-navigation.mjs +1 -1
- package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts +5 -0
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockTypes.d.ts +7 -0
- package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -1
- package/dist/plugins/code-block/highlighter/RegexTokenizer.d.ts +14 -0
- package/dist/plugins/code-block/highlighter/RegexTokenizer.d.ts.map +1 -0
- package/dist/plugins/code-block/highlighter/TokenizerTypes.d.ts +15 -0
- package/dist/plugins/code-block/highlighter/TokenizerTypes.d.ts.map +1 -0
- package/dist/plugins/code-block/highlighter/languages/index.d.ts +3 -0
- package/dist/plugins/code-block/highlighter/languages/index.d.ts.map +1 -0
- package/dist/plugins/code-block/highlighter/languages/json.d.ts +3 -0
- package/dist/plugins/code-block/highlighter/languages/json.d.ts.map +1 -0
- package/dist/plugins/code-block/highlighter/languages/xml.d.ts +3 -0
- package/dist/plugins/code-block/highlighter/languages/xml.d.ts.map +1 -0
- package/dist/plugins/code-block/index.d.ts +5 -1
- package/dist/plugins/code-block/index.d.ts.map +1 -1
- package/dist/plugins/code-block.mjs +1 -1
- package/dist/plugins/code-block.mjs.map +1 -1
- package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
- package/dist/plugins/font-size.mjs +1 -1
- package/dist/plugins/font-size.mjs.map +1 -1
- package/dist/plugins/font.mjs +1 -1
- package/dist/plugins/font.mjs.map +1 -1
- package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts.map +1 -1
- package/dist/plugins/gap-cursor.mjs +1 -1
- package/dist/plugins/hard-break.mjs +1 -1
- package/dist/plugins/heading/HeadingInputRules.d.ts.map +1 -1
- package/dist/plugins/heading/HeadingKeyboardHandlers.d.ts.map +1 -1
- package/dist/plugins/heading/HeadingPlugin.d.ts.map +1 -1
- package/dist/plugins/heading.mjs +1 -1
- package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
- package/dist/plugins/highlight.mjs +1 -1
- package/dist/plugins/highlight.mjs.map +1 -1
- package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
- package/dist/plugins/horizontal-rule.mjs +1 -1
- package/dist/plugins/horizontal-rule.mjs.map +1 -1
- package/dist/plugins/image/ImagePlugin.d.ts +0 -1
- package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
- package/dist/plugins/image/ImagePopup.d.ts +11 -0
- package/dist/plugins/image/ImagePopup.d.ts.map +1 -0
- package/dist/plugins/image.mjs +1 -1
- package/dist/plugins/image.mjs.map +1 -1
- package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
- package/dist/plugins/link.mjs +1 -1
- package/dist/plugins/link.mjs.map +1 -1
- package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
- package/dist/plugins/list.mjs +1 -1
- package/dist/plugins/list.mjs.map +1 -1
- package/dist/plugins/print/PrintPlugin.d.ts.map +1 -1
- package/dist/plugins/print.mjs +1 -1
- package/dist/plugins/print.mjs.map +1 -1
- package/dist/plugins/shared/ColorMarkOperations.d.ts +1 -2
- package/dist/plugins/shared/ColorMarkOperations.d.ts.map +1 -1
- package/dist/plugins/shared/ColorPickerPopup.d.ts +1 -8
- package/dist/plugins/shared/ColorPickerPopup.d.ts.map +1 -1
- package/dist/plugins/shared/PluginHelpers.d.ts +8 -0
- package/dist/plugins/shared/PluginHelpers.d.ts.map +1 -1
- package/dist/plugins/shared/XmlPatterns.d.ts +10 -0
- package/dist/plugins/shared/XmlPatterns.d.ts.map +1 -0
- package/dist/plugins/shared/index.d.ts +1 -0
- package/dist/plugins/shared/index.d.ts.map +1 -1
- package/dist/plugins/shared.mjs +1 -1
- package/dist/plugins/shared.mjs.map +1 -1
- package/dist/plugins/smart-paste/SmartPasteLocale.d.ts +7 -0
- package/dist/plugins/smart-paste/SmartPasteLocale.d.ts.map +1 -0
- package/dist/plugins/smart-paste/SmartPastePlugin.d.ts +19 -0
- package/dist/plugins/smart-paste/SmartPastePlugin.d.ts.map +1 -0
- package/dist/plugins/smart-paste/SmartPasteTypes.d.ts +24 -0
- package/dist/plugins/smart-paste/SmartPasteTypes.d.ts.map +1 -0
- package/dist/plugins/smart-paste/detectors/JsonDetector.d.ts +6 -0
- package/dist/plugins/smart-paste/detectors/JsonDetector.d.ts.map +1 -0
- package/dist/plugins/smart-paste/detectors/XmlDetector.d.ts +26 -0
- package/dist/plugins/smart-paste/detectors/XmlDetector.d.ts.map +1 -0
- package/dist/plugins/smart-paste/index.d.ts +7 -0
- package/dist/plugins/smart-paste/index.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/ar.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/ar.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/de.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/de.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/es.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/es.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/fr.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/fr.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/hi.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/hi.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/pt.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/pt.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/ru.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/ru.d.ts.map +1 -0
- package/dist/plugins/smart-paste/locales/zh.d.ts +4 -0
- package/dist/plugins/smart-paste/locales/zh.d.ts.map +1 -0
- package/dist/plugins/smart-paste.mjs +2 -0
- package/dist/plugins/smart-paste.mjs.map +1 -0
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
- package/dist/plugins/strikethrough.mjs +1 -1
- package/dist/plugins/strikethrough.mjs.map +1 -1
- package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
- package/dist/plugins/super-sub.mjs +1 -1
- package/dist/plugins/super-sub.mjs.map +1 -1
- package/dist/plugins/table/TableCommands.d.ts.map +1 -1
- package/dist/plugins/table/TableNavigation.d.ts.map +1 -1
- package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
- package/dist/plugins/table/index.d.ts +1 -0
- package/dist/plugins/table/index.d.ts.map +1 -1
- package/dist/plugins/table.mjs +1 -1
- package/dist/plugins/table.mjs.map +1 -1
- package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
- package/dist/plugins/text-color.mjs +1 -1
- package/dist/plugins/text-color.mjs.map +1 -1
- package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts.map +1 -1
- package/dist/plugins/text-direction/TextDirectionPlugin.d.ts.map +1 -1
- package/dist/plugins/text-direction-advanced.mjs +1 -1
- package/dist/plugins/text-direction-advanced.mjs.map +1 -1
- package/dist/plugins/text-direction.mjs +1 -1
- package/dist/plugins/text-direction.mjs.map +1 -1
- package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
- package/dist/plugins/text-formatting.mjs +1 -1
- package/dist/plugins/text-formatting.mjs.map +1 -1
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
- package/dist/plugins/toolbar.mjs +1 -1
- package/dist/plugins/toolbar.mjs.map +1 -1
- package/dist/presets/FullPreset.d.ts.map +1 -1
- package/dist/presets/PresetTypes.d.ts +2 -0
- package/dist/presets/PresetTypes.d.ts.map +1 -1
- package/dist/presets/full.mjs +1 -1
- package/dist/presets/full.mjs.map +1 -1
- package/dist/serialization/DocumentSerializer.d.ts.map +1 -1
- package/dist/state/InlineContentOps.d.ts.map +1 -1
- package/dist/state/StepInversion.d.ts +7 -0
- package/dist/state/StepInversion.d.ts.map +1 -0
- package/dist/state/Steps.d.ts +108 -0
- package/dist/state/Steps.d.ts.map +1 -0
- package/dist/state/Transaction.d.ts +5 -174
- package/dist/state/Transaction.d.ts.map +1 -1
- package/dist/state/TransactionBuilder.d.ts +69 -0
- package/dist/state/TransactionBuilder.d.ts.map +1 -0
- package/dist/test/TestUtils.d.ts.map +1 -1
- package/dist/view/CaretNavigation.d.ts.map +1 -1
- package/dist/view/DomUtils.d.ts +10 -1
- package/dist/view/DomUtils.d.ts.map +1 -1
- package/dist/view/EditorView.d.ts +2 -2
- package/dist/view/EditorView.d.ts.map +1 -1
- package/dist/view/ViewMovementCommands.d.ts.map +1 -1
- package/package.json +11 -1
- package/dist/chunks/AttributedMarkCommands-BB7lzFct.mjs +0 -2
- package/dist/chunks/AttributedMarkCommands-BB7lzFct.mjs.map +0 -1
- package/dist/chunks/ColorPickerPopup-DRzFvt7o.mjs.map +0 -1
- package/dist/chunks/Commands-P9wS8qtN.mjs +0 -2
- package/dist/chunks/Commands-P9wS8qtN.mjs.map +0 -1
- package/dist/chunks/Document-BFYAonMF.mjs +0 -2
- package/dist/chunks/Document-BFYAonMF.mjs.map +0 -1
- package/dist/chunks/DocumentParser-DFcvVMGY.mjs +0 -2
- package/dist/chunks/DocumentParser-DFcvVMGY.mjs.map +0 -1
- package/dist/chunks/DomUtils-Cdz1eDKM.mjs +0 -2
- package/dist/chunks/DomUtils-Cdz1eDKM.mjs.map +0 -1
- package/dist/chunks/HTMLUtils-CCvQ5f83.mjs +0 -2
- package/dist/chunks/HTMLUtils-CCvQ5f83.mjs.map +0 -1
- package/dist/chunks/HeadingPlugin-DYy3IoT_.mjs +0 -2
- package/dist/chunks/HeadingPlugin-DYy3IoT_.mjs.map +0 -1
- package/dist/chunks/LocaleService-B6Z-wyAF.mjs +0 -2
- package/dist/chunks/LocaleService-B6Z-wyAF.mjs.map +0 -1
- package/dist/chunks/MarkCommands-B_erV7zz.mjs +0 -2
- package/dist/chunks/MarkCommands-B_erV7zz.mjs.map +0 -1
- package/dist/chunks/NotectlEditor-4NFnXLyD.mjs +0 -2
- package/dist/chunks/NotectlEditor-4NFnXLyD.mjs.map +0 -1
- package/dist/chunks/Plugin-OzM8Oxm_.mjs +0 -2
- package/dist/chunks/Plugin-OzM8Oxm_.mjs.map +0 -1
- package/dist/chunks/PluginHelpers-DjZt0pQi.mjs +0 -2
- package/dist/chunks/PluginHelpers-DjZt0pQi.mjs.map +0 -1
- package/dist/chunks/PopupManager-BM8IT6M7.mjs +0 -2
- package/dist/chunks/PrintTypes-ehbL7ipA.mjs +0 -2
- package/dist/chunks/index-C8xtb3SM.mjs +0 -2
- package/dist/chunks/index-C8xtb3SM.mjs.map +0 -1
- package/dist/chunks/index-DAoSt12h.mjs +0 -2
- package/dist/chunks/index-DAoSt12h.mjs.map +0 -1
- package/dist/input/BlockInsertion.d.ts.map +0 -1
package/dist/plugins/Plugin.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ import { BlockTypePickerEntry } from './heading/BlockTypePickerEntry.js';
|
|
|
16
16
|
import { BlockTypePickerRegistry } from './heading/BlockTypePickerRegistry.js';
|
|
17
17
|
import { ToolbarItem } from './toolbar/ToolbarItem.js';
|
|
18
18
|
import { ToolbarRegistry } from './toolbar/ToolbarRegistry.js';
|
|
19
|
+
import { PasteInterceptor, PasteInterceptorOptions } from '../model/PasteInterceptor.js';
|
|
19
20
|
/** Type-safe event key for compile-time payload checking. */
|
|
20
21
|
export declare class EventKey<T> {
|
|
21
22
|
readonly id: string;
|
|
@@ -54,6 +55,7 @@ export interface MiddlewareOptions {
|
|
|
54
55
|
/** Execution priority (lower values run first). Defaults to 100. */
|
|
55
56
|
readonly priority?: number;
|
|
56
57
|
}
|
|
58
|
+
export type { PasteInterceptor, PasteInterceptorOptions } from '../model/PasteInterceptor.js';
|
|
57
59
|
export interface PluginContext {
|
|
58
60
|
getState(): EditorState;
|
|
59
61
|
dispatch(transaction: Transaction): void;
|
|
@@ -75,6 +77,7 @@ export interface PluginContext {
|
|
|
75
77
|
registerInlineNodeSpec<T extends string>(spec: InlineNodeSpec<T>): void;
|
|
76
78
|
registerFileHandler(pattern: string, handler: FileHandler): void;
|
|
77
79
|
registerBlockTypePickerEntry(entry: BlockTypePickerEntry): void;
|
|
80
|
+
registerPasteInterceptor(interceptor: PasteInterceptor, options?: PasteInterceptorOptions): void;
|
|
78
81
|
getSchemaRegistry(): SchemaRegistry;
|
|
79
82
|
getKeymapRegistry(): KeymapRegistry;
|
|
80
83
|
getInputRuleRegistry(): InputRuleRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/Plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/Plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { DecorationSet } from '../decorations/Decoration.js';
|
|
|
2
2
|
import { FileHandlerRegistry } from '../model/FileHandlerRegistry.js';
|
|
3
3
|
import { InputRuleRegistry } from '../model/InputRuleRegistry.js';
|
|
4
4
|
import { KeymapRegistry } from '../model/KeymapRegistry.js';
|
|
5
|
+
import { PasteInterceptorEntry } from '../model/PasteInterceptor.js';
|
|
5
6
|
import { SchemaRegistry } from '../model/SchemaRegistry.js';
|
|
6
7
|
import { EditorState } from '../state/EditorState.js';
|
|
7
8
|
import { Transaction } from '../state/Transaction.js';
|
|
@@ -15,6 +16,7 @@ export interface MiddlewareInfo {
|
|
|
15
16
|
readonly priority: number;
|
|
16
17
|
readonly pluginId: string;
|
|
17
18
|
}
|
|
19
|
+
export type { PasteInterceptorEntry } from '../model/PasteInterceptor.js';
|
|
18
20
|
export interface PluginManagerInitOptions {
|
|
19
21
|
getState(): EditorState;
|
|
20
22
|
dispatch(transaction: Transaction): void;
|
|
@@ -32,6 +34,7 @@ export declare class PluginManager {
|
|
|
32
34
|
private readonly commands;
|
|
33
35
|
private readonly services;
|
|
34
36
|
private readonly middlewares;
|
|
37
|
+
private readonly pasteInterceptors;
|
|
35
38
|
private readonly registrations;
|
|
36
39
|
private readonly eventBus;
|
|
37
40
|
private readonly pluginStyleSheets;
|
|
@@ -43,6 +46,7 @@ export declare class PluginManager {
|
|
|
43
46
|
readonly toolbarRegistry: ToolbarRegistry;
|
|
44
47
|
readonly blockTypePickerRegistry: BlockTypePickerRegistry;
|
|
45
48
|
private middlewareSorted;
|
|
49
|
+
private pasteInterceptorsSorted;
|
|
46
50
|
private initOrder;
|
|
47
51
|
private initialized;
|
|
48
52
|
private initializing;
|
|
@@ -82,6 +86,8 @@ export declare class PluginManager {
|
|
|
82
86
|
getPluginIds(): string[];
|
|
83
87
|
/** Returns the middleware chain in execution order, for debugging and introspection. */
|
|
84
88
|
getMiddlewareChain(): readonly MiddlewareInfo[];
|
|
89
|
+
/** Returns paste interceptors in priority order. */
|
|
90
|
+
getPasteInterceptors(): readonly PasteInterceptorEntry[];
|
|
85
91
|
/** Gets a plugin by ID. */
|
|
86
92
|
get(id: string): Plugin | undefined;
|
|
87
93
|
/** Gets a registered service by typed key. */
|
|
@@ -95,6 +101,7 @@ export declare class PluginManager {
|
|
|
95
101
|
private destroyPlugin;
|
|
96
102
|
private cleanupRegistrations;
|
|
97
103
|
private getSortedMiddleware;
|
|
104
|
+
private getSortedPasteInterceptors;
|
|
98
105
|
private createContext;
|
|
99
106
|
/**
|
|
100
107
|
* Resolves plugin initialization order via topological sort + priority.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAoB,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAExF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAIX,QAAQ,
|
|
1
|
+
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAoB,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAExF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAIX,QAAQ,EAKR,MAAM,EACN,YAAY,EAGZ,mBAAmB,EACnB,UAAU,EAEV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAW/D,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAoB1E,MAAM,WAAW,wBAAwB;IACxC,QAAQ,IAAI,WAAW,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACzC,YAAY,IAAI,WAAW,CAAC;IAC5B,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC5D,6EAA6E;IAC7E,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,eAAe,CAAC,IAAI,OAAO,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IACzD,QAAQ,CAAC,cAAc,iBAAwB;IAC/C,QAAQ,CAAC,cAAc,iBAAwB;IAC/C,QAAQ,CAAC,iBAAiB,oBAA2B;IACrD,QAAQ,CAAC,mBAAmB,sBAA6B;IACzD,QAAQ,CAAC,gBAAgB,mBAA0B;IACnD,QAAQ,CAAC,eAAe,kBAAyB;IACjD,QAAQ,CAAC,uBAAuB,0BAAiC;IACjE,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,uBAAuB,CAAwC;IACvE,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,oBAAoB,CAAS;IAErC;;;OAGG;IACH,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAOxD,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU9B,uEAAuE;IACjE,IAAI,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC5D,6DAA6D;IAC7D,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI;IAYtF,wDAAwD;IACxD,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,WAAW,GAAG,aAAa;IAiBvE;;;OAGG;IACH,sBAAsB,CACrB,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GACtC,IAAI;IAmCP,gGAAgG;IAChG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOxC,2FAA2F;IAC3F,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAiBrC,0EAA0E;IAC1E,kBAAkB,IAAI,OAAO;IAI7B,wDAAwD;IACxD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAa7D,2CAA2C;IAC3C,UAAU,IAAI,OAAO;IAIrB,wDAAwD;IACxD,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAcpC,yCAAyC;IACzC,YAAY,IAAI,MAAM,EAAE;IAIxB,wFAAwF;IACxF,kBAAkB,IAAI,SAAS,cAAc,EAAE;IAQ/C,oDAAoD;IACpD,oBAAoB,IAAI,SAAS,qBAAqB,EAAE;IAIxD,2BAA2B;IAC3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInC,8CAA8C;IAC9C,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAIhD,oGAAoG;IACpG,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAI1E,iDAAiD;IACjD,oBAAoB,IAAI,SAAS,aAAa,EAAE;IAIhD,kDAAkD;IAC5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA4BhB,aAAa;IAY3B,OAAO,CAAC,oBAAoB;IA4C5B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,0BAA0B;IASlC,OAAO,CAAC,aAAa;IAqKrB;;;OAGG;IACH,OAAO,CAAC,YAAY;CAgEpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlignmentPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/alignment/AlignmentPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"AlignmentPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/alignment/AlignmentPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKpE,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAO1D,OAAO,EAEN,KAAK,eAAe,EAEpB,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,eAAe;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,mHAAmH;IACnH,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CAClC;AAUD,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAQpE,CAAC;AAIF,qBAAa,eAAgB,YAAW,MAAM;IAC7C,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAQvC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjD;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,iBAAiB;IAYzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,WAAW;CAInB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as t}from"../chunks/
|
|
1
|
+
import{a as t}from"../chunks/StyleRuntime-BmsLoEa8.mjs";import{r as e,c as s,g as n,b as i}from"../chunks/PluginHelpers-CdPR0MuT.mjs";const a={alignStart:"Align Start",alignCenter:"Align Center",alignEnd:"Align End",justify:"Justify",toolbarLabel:"Alignment",toolbarTooltip:"Alignment"},l=/* @__PURE__ */Object.assign({"./locales/ar.ts":()=>import("../chunks/ar-CYtG-XlN.mjs"),"./locales/de.ts":()=>import("../chunks/de-8aCC5jBM.mjs"),"./locales/es.ts":()=>import("../chunks/es-DCwjeUUu.mjs"),"./locales/fr.ts":()=>import("../chunks/fr-C-y09LKg.mjs"),"./locales/hi.ts":()=>import("../chunks/hi-js2P6byR.mjs"),"./locales/pt.ts":()=>import("../chunks/pt-DrJ0-8Yo.mjs"),"./locales/ru.ts":()=>import("../chunks/ru-BNOU16E5.mjs"),"./locales/zh.ts":()=>import("../chunks/zh-CpP2kee3.mjs")});async function o(t){if("en"===t)return a;const e=l[`./locales/${t}.ts`];if(!e)return a;try{return(await e()).default}catch{return a}}const r={alignments:["start","center","end","justify"],alignableTypes:["paragraph","heading","title","subtitle","table_cell","image"],defaults:{image:"center"}},g={start:'<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>',end:'<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>'};class c{id="alignment";name="Alignment";priority=90;config;locale;alignableTypes;constructor(t){this.config={...r,...t,defaults:{...r.defaults,...t?.defaults}}}async init(t){this.locale=await e(t,this.config.locale,a,o),this.alignableTypes=new Set(this.config.alignableTypes),this.patchNodeSpecs(t),this.registerCommands(t),this.registerKeymaps(t),this.registerToolbarItem(t),this.registerMiddleware(t)}patchNodeSpecs(t){const e=t.getSchemaRegistry();for(const s of this.config.alignableTypes){const t=e.getNodeSpec(s);if(!t)continue;if(t.attrs?.align)continue;const n=t.toDOM,i=this.config.defaults[s]??"start";e.removeNodeSpec(s),e.registerNodeSpec({...t,attrs:{...t.attrs,align:{default:i}},toDOM(e){const s=n.call(t,e);return m(s,e),s}})}}registerCommands(t){for(const e of this.config.alignments)t.registerCommand(`align${s(e)}`,()=>this.setAlignment(t,e))}registerKeymaps(t){const e={};this.config.alignments.includes("start")&&(e["Mod-Shift-L"]=()=>t.executeCommand("alignStart")),this.config.alignments.includes("center")&&(e["Mod-Shift-E"]=()=>t.executeCommand("alignCenter")),this.config.alignments.includes("end")&&(e["Mod-Shift-R"]=()=>t.executeCommand("alignEnd")),this.config.alignments.includes("justify")&&(e["Mod-Shift-J"]=()=>t.executeCommand("alignJustify")),Object.keys(e).length>0&&t.registerKeymap(e)}registerToolbarItem(t){const e=this.config.alignments.map(t=>({label:this.getAlignmentLabel(t),command:`align${s(t)}`,icon:g[t]}));t.registerToolbarItem({id:"alignment",group:"block",icon:g.start,label:this.locale.toolbarLabel,tooltip:this.locale.toolbarTooltip,command:"alignStart",popupType:"dropdown",popupConfig:{items:e},isActive:t=>this.isNonDefaultAlignment(t),isEnabled:t=>this.isAlignable(t)})}getAlignmentLabel(t){return{start:this.locale.alignStart,center:this.locale.alignCenter,end:this.locale.alignEnd,justify:this.locale.justify}[t]}registerMiddleware(t){t.registerMiddleware((t,e,s)=>{let n=!1;const i=t.steps.map(t=>{if("setBlockType"!==t.type)return t;if(!this.alignableTypes.has(t.nodeType))return t;const e=t.previousAttrs?.align;return e&&"start"!==e?(n=!0,{...t,attrs:{...t.attrs,align:e}}):t});s(n?{...t,steps:i}:t)},{name:"alignment:preserve-align"})}setAlignment(t,e){const s=t.getState(),a=n(s);if(!a||!this.alignableTypes.has(a.type))return!1;const l=i(s);if(!l)return!1;const o=s.getNodePath(l);if(!o)return!1;const r={...a.attrs,align:e},g=s.transaction("command").setNodeAttr(o,r).setSelection(s.selection).build();return t.dispatch(g),!0}isNonDefaultAlignment(t){const e=n(t);if(!e||!this.alignableTypes.has(e.type))return!1;const s=e.attrs?.align,i=this.config.defaults[e.type]??"start";return null!=s&&s!==i}isAlignable(t){const e=n(t);return null!=e&&this.alignableTypes.has(e.type)}}function m(e,s){const n=s.attrs?.align;"string"==typeof n&&"start"!==n&&t(e,"textAlign",n)}export{g as ALIGNMENT_ICONS,a as ALIGNMENT_LOCALE_EN,c as AlignmentPlugin,o as loadAlignmentLocale};
|
|
2
2
|
//# sourceMappingURL=alignment.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alignment.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 alignStart: string;\n\treadonly alignCenter: string;\n\treadonly alignEnd: 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\talignStart: 'Align Start',\n\talignCenter: 'Align Center',\n\talignEnd: 'Align End',\n\tjustify: 'Justify',\n\ttoolbarLabel: 'Alignment',\n\ttoolbarTooltip: 'Alignment',\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: AlignmentLocale }>> =\n\timport.meta.glob<{ default: AlignmentLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadAlignmentLocale(lang: string): Promise<AlignmentLocale> {\n\tif (lang === 'en') return ALIGNMENT_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return ALIGNMENT_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn ALIGNMENT_LOCALE_EN;\n\t}\n}\n","/**\n * AlignmentPlugin: adds start/center/end/justify alignment as a block\n * attribute on paragraphs, headings, images, and other alignable types.\n * Uses logical values (`start`/`end`) instead of physical (`left`/`right`)\n * for correct behavior with RTL text direction. Patches NodeSpecs to render\n * the `align` attribute via inline `text-align` style and provides toggle\n * commands, keyboard shortcuts, and a toolbar dropdown.\n */\n\nimport { LocaleServiceKey } from '../../i18n/LocaleService.js';\nimport type { BlockAlignment } from '../../model/BlockAlignment.js';\nimport type { BlockNode } from '../../model/Document.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperty } from '../../style/StyleRuntime.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { capitalize, getSelectedBlock, getSelectedBlockId } from '../shared/PluginHelpers.js';\nimport {\n\tALIGNMENT_LOCALE_EN,\n\ttype AlignmentLocale,\n\tloadAlignmentLocale,\n} from './AlignmentLocale.js';\n\n// --- Public Types ---\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 `'start'`. */\n\treadonly defaults: Readonly<Record<string, BlockAlignment>>;\n\treadonly locale?: AlignmentLocale;\n}\n\n// --- Constants ---\n\nconst DEFAULT_CONFIG: AlignmentConfig = {\n\talignments: ['start', 'center', 'end', '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\tstart:\n\t\t'<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\tend: '<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\tasync init(context: PluginContext): Promise<void> {\n\t\tif (this.config.locale) {\n\t\t\tthis.locale = this.config.locale;\n\t\t} else {\n\t\t\tconst service = context.getService(LocaleServiceKey);\n\t\t\tconst lang: string = service?.getLocale() ?? 'en';\n\t\t\tthis.locale = lang === 'en' ? ALIGNMENT_LOCALE_EN : await loadAlignmentLocale(lang);\n\t\t}\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] ?? 'start';\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('start')) {\n\t\t\tbindings['Mod-Shift-L'] = () => context.executeCommand('alignStart');\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('end')) {\n\t\t\tbindings['Mod-Shift-R'] = () => context.executeCommand('alignEnd');\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.start,\n\t\t\tlabel: this.locale.toolbarLabel,\n\t\t\ttooltip: this.locale.toolbarTooltip,\n\t\t\tcommand: 'alignStart',\n\t\t\tpopupType: 'dropdown',\n\t\t\tpopupConfig: { items: dropdownItems },\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\tstart: this.locale.alignStart,\n\t\t\tcenter: this.locale.alignCenter,\n\t\t\tend: this.locale.alignEnd,\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(\n\t\t\t(tr, _state, next) => {\n\t\t\t\tlet patched = false;\n\n\t\t\t\tconst patchedSteps = tr.steps.map((step) => {\n\t\t\t\t\tif (step.type !== 'setBlockType') return step;\n\t\t\t\t\tif (!this.alignableTypes.has(step.nodeType)) return step;\n\n\t\t\t\t\tconst prevAlign = step.previousAttrs?.align;\n\t\t\t\t\tif (!prevAlign || prevAlign === 'start') return step;\n\n\t\t\t\t\t// Carry forward align into new attrs\n\t\t\t\t\tpatched = true;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...step,\n\t\t\t\t\t\tattrs: { ...step.attrs, align: prevAlign },\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tnext(patched ? { ...tr, steps: patchedSteps } : tr);\n\t\t\t},\n\t\t\t{ name: 'alignment:preserve-align' },\n\t\t);\n\t}\n\n\t// --- Alignment Logic ---\n\n\tprivate setAlignment(context: PluginContext, alignment: BlockAlignment): boolean {\n\t\tconst state = context.getState();\n\t\tconst block = getSelectedBlock(state);\n\t\tif (!block || !this.alignableTypes.has(block.type)) return false;\n\n\t\tconst id = getSelectedBlockId(state);\n\t\tif (!id) return false;\n\n\t\tconst path = state.getNodePath(id);\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 = 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] ?? 'start';\n\t\treturn align != null && align !== defaultAlign;\n\t}\n\n\tprivate isAlignable(state: EditorState): boolean {\n\t\tconst block = 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 !== 'start') {\n\t\tsetStyleProperty(el, 'textAlign', align);\n\t}\n}\n"],"names":["ALIGNMENT_LOCALE_EN","alignStart","alignCenter","alignEnd","justify","toolbarLabel","toolbarTooltip","localeModules","assign","import","async","loadAlignmentLocale","lang","loader","default","DEFAULT_CONFIG","alignments","alignableTypes","defaults","image","ALIGNMENT_ICONS","start","center","end","AlignmentPlugin","id","name","priority","config","locale","constructor","this","init","context","service","getService","LocaleServiceKey","getLocale","Set","patchNodeSpecs","registerCommands","registerKeymaps","registerToolbarItem","registerMiddleware","registry","getSchemaRegistry","type","spec","getNodeSpec","attrs","align","originalToDOM","toDOM","defaultAlign","removeNodeSpec","registerNodeSpec","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","isActive","state","isNonDefaultAlignment","isEnabled","isAlignable","tr","_state","next","patched","patchedSteps","steps","step","has","nodeType","prevAlign","previousAttrs","getState","block","getSelectedBlock","getSelectedBlockId","path","getNodePath","newAttrs","transaction","setNodeAttr","setSelection","selection","build","dispatch","setStyleProperty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alignment.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 alignStart: string;\n\treadonly alignCenter: string;\n\treadonly alignEnd: 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\talignStart: 'Align Start',\n\talignCenter: 'Align Center',\n\talignEnd: 'Align End',\n\tjustify: 'Justify',\n\ttoolbarLabel: 'Alignment',\n\ttoolbarTooltip: 'Alignment',\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: AlignmentLocale }>> =\n\timport.meta.glob<{ default: AlignmentLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadAlignmentLocale(lang: string): Promise<AlignmentLocale> {\n\tif (lang === 'en') return ALIGNMENT_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return ALIGNMENT_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn ALIGNMENT_LOCALE_EN;\n\t}\n}\n","/**\n * AlignmentPlugin: adds start/center/end/justify alignment as a block\n * attribute on paragraphs, headings, images, and other alignable types.\n * Uses logical values (`start`/`end`) instead of physical (`left`/`right`)\n * for correct behavior with RTL text direction. Patches NodeSpecs to render\n * the `align` attribute via inline `text-align` style and provides toggle\n * commands, keyboard shortcuts, and a toolbar dropdown.\n */\n\nimport type { BlockAlignment } from '../../model/BlockAlignment.js';\nimport type { BlockNode } from '../../model/Document.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperty } from '../../style/StyleRuntime.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport {\n\tcapitalize,\n\tgetSelectedBlock,\n\tgetSelectedBlockId,\n\tresolveLocale,\n} from '../shared/PluginHelpers.js';\nimport {\n\tALIGNMENT_LOCALE_EN,\n\ttype AlignmentLocale,\n\tloadAlignmentLocale,\n} from './AlignmentLocale.js';\n\n// --- Public Types ---\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 `'start'`. */\n\treadonly defaults: Readonly<Record<string, BlockAlignment>>;\n\treadonly locale?: AlignmentLocale;\n}\n\n// --- Constants ---\n\nconst DEFAULT_CONFIG: AlignmentConfig = {\n\talignments: ['start', 'center', 'end', '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\tstart:\n\t\t'<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\tend: '<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\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(\n\t\t\tcontext,\n\t\t\tthis.config.locale,\n\t\t\tALIGNMENT_LOCALE_EN,\n\t\t\tloadAlignmentLocale,\n\t\t);\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] ?? 'start';\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('start')) {\n\t\t\tbindings['Mod-Shift-L'] = () => context.executeCommand('alignStart');\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('end')) {\n\t\t\tbindings['Mod-Shift-R'] = () => context.executeCommand('alignEnd');\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.start,\n\t\t\tlabel: this.locale.toolbarLabel,\n\t\t\ttooltip: this.locale.toolbarTooltip,\n\t\t\tcommand: 'alignStart',\n\t\t\tpopupType: 'dropdown',\n\t\t\tpopupConfig: { items: dropdownItems },\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\tstart: this.locale.alignStart,\n\t\t\tcenter: this.locale.alignCenter,\n\t\t\tend: this.locale.alignEnd,\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(\n\t\t\t(tr, _state, next) => {\n\t\t\t\tlet patched = false;\n\n\t\t\t\tconst patchedSteps = tr.steps.map((step) => {\n\t\t\t\t\tif (step.type !== 'setBlockType') return step;\n\t\t\t\t\tif (!this.alignableTypes.has(step.nodeType)) return step;\n\n\t\t\t\t\tconst prevAlign = step.previousAttrs?.align;\n\t\t\t\t\tif (!prevAlign || prevAlign === 'start') return step;\n\n\t\t\t\t\t// Carry forward align into new attrs\n\t\t\t\t\tpatched = true;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...step,\n\t\t\t\t\t\tattrs: { ...step.attrs, align: prevAlign },\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tnext(patched ? { ...tr, steps: patchedSteps } : tr);\n\t\t\t},\n\t\t\t{ name: 'alignment:preserve-align' },\n\t\t);\n\t}\n\n\t// --- Alignment Logic ---\n\n\tprivate setAlignment(context: PluginContext, alignment: BlockAlignment): boolean {\n\t\tconst state = context.getState();\n\t\tconst block = getSelectedBlock(state);\n\t\tif (!block || !this.alignableTypes.has(block.type)) return false;\n\n\t\tconst id = getSelectedBlockId(state);\n\t\tif (!id) return false;\n\n\t\tconst path = state.getNodePath(id);\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 = 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] ?? 'start';\n\t\treturn align != null && align !== defaultAlign;\n\t}\n\n\tprivate isAlignable(state: EditorState): boolean {\n\t\tconst block = 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 !== 'start') {\n\t\tsetStyleProperty(el, 'textAlign', align);\n\t}\n}\n"],"names":["ALIGNMENT_LOCALE_EN","alignStart","alignCenter","alignEnd","justify","toolbarLabel","toolbarTooltip","localeModules","assign","import","async","loadAlignmentLocale","lang","loader","default","DEFAULT_CONFIG","alignments","alignableTypes","defaults","image","ALIGNMENT_ICONS","start","center","end","AlignmentPlugin","id","name","priority","config","locale","constructor","this","init","context","resolveLocale","Set","patchNodeSpecs","registerCommands","registerKeymaps","registerToolbarItem","registerMiddleware","registry","getSchemaRegistry","type","spec","getNodeSpec","attrs","align","originalToDOM","toDOM","defaultAlign","removeNodeSpec","registerNodeSpec","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","isActive","state","isNonDefaultAlignment","isEnabled","isAlignable","tr","_state","next","patched","patchedSteps","steps","step","has","nodeType","prevAlign","previousAttrs","getState","block","getSelectedBlock","getSelectedBlockId","path","getNodePath","newAttrs","transaction","setNodeAttr","setSelection","selection","build","dispatch","setStyleProperty"],"mappings":"sIAaO,MAAMA,EAAuC,CACnDC,WAAY,cACZC,YAAa,eACbC,SAAU,YACVC,QAAS,UACTC,aAAc,YACdC,eAAgB,aAKXC,wBACLC,OAAA,CAAA,kBAAA,IAAAC,OAAA,6BAAA,kBAAA,IAAAA,OAAA,6BAAA,kBAAA,IAAAA,OAAA,6BAAA,kBAAA,IAAAA,OAAA,6BAAA,kBAAA,IAAAA,OAAA,6BAAA,kBAAA,IAAAA,OAAA,6BAAA,kBAAA,IAAAA,OAAA,6BAAA,kBAAA,IAAAA,OAAA,+BAEDC,eAAsBC,EAAoBC,GACzC,GAAa,OAATA,EAAe,OAAOZ,EAC1B,MAAMa,EAASN,EAAc,aAAaK,QAC1C,IAAKC,EAAQ,OAAOb,EACpB,IAEC,aADkBa,KACPC,OACZ,CAAA,MACC,OAAOd,CACR,CACD,CCIA,MAAMe,EAAkC,CACvCC,WAAY,CAAC,QAAS,SAAU,MAAO,WACvCC,eAAgB,CAAC,YAAa,UAAW,QAAS,WAAY,aAAc,SAC5EC,SAAU,CAAEC,MAAO,WAGPC,EAA4D,CACxEC,MACC,6JACDC,OACC,4JACDC,IAAK,4JACLnB,QACC,4JAKK,MAAMoB,EACHC,GAAK,YACLC,KAAO,YACPC,SAAW,GAEHC,OACTC,OACAZ,eAER,WAAAa,CAAYF,GACXG,KAAKH,OAAS,IACVb,KACAa,EACHV,SAAU,IAAKH,EAAeG,YAAaU,GAAQV,UAErD,CAEA,UAAMc,CAAKC,GACVF,KAAKF,aAAeK,EACnBD,EACAF,KAAKH,OAAOC,OACZ7B,EACAW,GAGDoB,KAAKd,eAAiB,IAAIkB,IAAIJ,KAAKH,OAAOX,gBAC1Cc,KAAKK,eAAeH,GACpBF,KAAKM,iBAAiBJ,GACtBF,KAAKO,gBAAgBL,GACrBF,KAAKQ,oBAAoBN,GACzBF,KAAKS,mBAAmBP,EACzB,CASQ,cAAAG,CAAeH,GACtB,MAAMQ,EAAWR,EAAQS,oBAEzB,IAAA,MAAWC,KAAQZ,KAAKH,OAAOX,eAAgB,CAC9C,MAAM2B,EAAOH,EAASI,YAAYF,GAClC,IAAKC,EAAM,SAGX,GAAIA,EAAKE,OAAOC,MAAO,SAEvB,MAAMC,EAAgBJ,EAAKK,MACrBC,EAA+BnB,KAAKH,OAAOV,SAASyB,IAAS,QAEnEF,EAASU,eAAeR,GACxBF,EAASW,iBAAiB,IACtBR,EACHE,MAAO,IACHF,EAAKE,MACRC,MAAO,CAAEjC,QAASoC,IAEnB,KAAAD,CAAMI,GACL,MAAMC,EAAKN,EAAcO,KAAKX,EAAMS,GAEpC,OADAG,EAAeF,EAAID,GACZC,CACR,GAEF,CACD,CAIQ,gBAAAjB,CAAiBJ,GACxB,IAAA,MAAWwB,KAAa1B,KAAKH,OAAOZ,WACnCiB,EAAQyB,gBAAgB,QAAQC,EAAWF,KAAc,IACjD1B,KAAK6B,aAAa3B,EAASwB,GAGrC,CAIQ,eAAAnB,CAAgBL,GACvB,MAAM4B,EAA0C,CAAA,EAE5C9B,KAAKH,OAAOZ,WAAW8C,SAAS,WACnCD,EAAS,eAAiB,IAAM5B,EAAQ8B,eAAe,eAEpDhC,KAAKH,OAAOZ,WAAW8C,SAAS,YACnCD,EAAS,eAAiB,IAAM5B,EAAQ8B,eAAe,gBAEpDhC,KAAKH,OAAOZ,WAAW8C,SAAS,SACnCD,EAAS,eAAiB,IAAM5B,EAAQ8B,eAAe,aAEpDhC,KAAKH,OAAOZ,WAAW8C,SAAS,aACnCD,EAAS,eAAiB,IAAM5B,EAAQ8B,eAAe,iBAGpDC,OAAOC,KAAKJ,GAAUK,OAAS,GAClCjC,EAAQkC,eAAeN,EAEzB,CAIQ,mBAAAtB,CAAoBN,GAC3B,MAAMmC,EAAgBrC,KAAKH,OAAOZ,WAAWqD,IAAKZ,IAAA,CACjDa,MAAOvC,KAAKwC,kBAAkBd,GAC9Be,QAAS,QAAQb,EAAWF,KAC5BgB,KAAMrD,EAAgBqC,MAGvBxB,EAAQM,oBAAoB,CAC3Bd,GAAI,YACJiD,MAAO,QACPD,KAAMrD,EAAgBC,MACtBiD,MAAOvC,KAAKF,OAAOxB,aACnBsE,QAAS5C,KAAKF,OAAOvB,eACrBkE,QAAS,aACTI,UAAW,WACXC,YAAa,CAAEC,MAAOV,GACtBW,SAAWC,GAAUjD,KAAKkD,sBAAsBD,GAChDE,UAAYF,GAAUjD,KAAKoD,YAAYH,IAEzC,CAEQ,iBAAAT,CAAkBd,GAOzB,MAN+C,CAC9CpC,MAAOU,KAAKF,OAAO5B,WACnBqB,OAAQS,KAAKF,OAAO3B,YACpBqB,IAAKQ,KAAKF,OAAO1B,SACjBC,QAAS2B,KAAKF,OAAOzB,SAERqD,EACf,CAQQ,kBAAAjB,CAAmBP,GAC1BA,EAAQO,mBACP,CAAC4C,EAAIC,EAAQC,KACZ,IAAIC,GAAU,EAEd,MAAMC,EAAeJ,EAAGK,MAAMpB,IAAKqB,IAClC,GAAkB,iBAAdA,EAAK/C,KAAyB,OAAO+C,EACzC,IAAK3D,KAAKd,eAAe0E,IAAID,EAAKE,UAAW,OAAOF,EAEpD,MAAMG,EAAYH,EAAKI,eAAe/C,MACtC,OAAK8C,GAA2B,UAAdA,GAGlBN,GAAU,EACH,IACHG,EACH5C,MAAO,IAAK4C,EAAK5C,MAAOC,MAAO8C,KANgBH,IAUjDJ,EAAKC,EAAU,IAAKH,EAAIK,MAAOD,GAAiBJ,IAEjD,CAAE1D,KAAM,4BAEV,CAIQ,YAAAkC,CAAa3B,EAAwBwB,GAC5C,MAAMuB,EAAQ/C,EAAQ8D,WAChBC,EAAQC,EAAiBjB,GAC/B,IAAKgB,IAAUjE,KAAKd,eAAe0E,IAAIK,EAAMrD,MAAO,OAAO,EAE3D,MAAMlB,EAAKyE,EAAmBlB,GAC9B,IAAKvD,EAAI,OAAO,EAEhB,MAAM0E,EAAOnB,EAAMoB,YAAY3E,GAC/B,IAAK0E,EAAM,OAAO,EAElB,MAAME,EAAW,IAAKL,EAAMlD,MAAOC,MAAOU,GAEpC2B,EAAKJ,EACTsB,YAAY,WACZC,YAAYJ,EAAmBE,GAC/BG,aAAaxB,EAAMyB,WACnBC,QAGF,OADAzE,EAAQ0E,SAASvB,IACV,CACR,CAEQ,qBAAAH,CAAsBD,GAC7B,MAAMgB,EAAQC,EAAiBjB,GAC/B,IAAKgB,IAAUjE,KAAKd,eAAe0E,IAAIK,EAAMrD,MAAO,OAAO,EAC3D,MAAMI,EAAQiD,EAAMlD,OAAOC,MACrBG,EAA+BnB,KAAKH,OAAOV,SAAS8E,EAAMrD,OAAS,QACzE,OAAgB,MAATI,GAAiBA,IAAUG,CACnC,CAEQ,WAAAiC,CAAYH,GACnB,MAAMgB,EAAQC,EAAiBjB,GAC/B,OAAgB,MAATgB,GAAiBjE,KAAKd,eAAe0E,IAAIK,EAAMrD,KACvD,EAKD,SAASa,EAAeF,EAAiBD,GACxC,MAAMN,EAAQM,EAAKP,OAAOC,MACL,iBAAVA,GAAgC,UAAVA,GAChC6D,EAAiBtD,EAAI,YAAaP,EAEpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockquoteKeyboardHandlers.d.ts","sourceRoot":"","sources":["../../../src/plugins/blockquote/BlockquoteKeyboardHandlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"BlockquoteKeyboardHandlers.d.ts","sourceRoot":"","sources":["../../../src/plugins/blockquote/BlockquoteKeyboardHandlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAoClD,kEAAkE;AAClE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAUtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockquotePlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/blockquote/BlockquotePlugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"BlockquotePlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/blockquote/BlockquotePlugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI1D,OAAO,EAEN,KAAK,gBAAgB,EAErB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,QAAQ,6BAA6B,CAAC;IAC5C,UAAU,gBAAgB;QACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAClC;CACD;AAID,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAMD,qBAAa,gBAAiB,YAAW,MAAM;IAC9C,QAAQ,CAAC,EAAE,gBAAgB;IAC3B,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAIxC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,mBAAmB;IAmB3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,YAAY;CAkBpB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{j as t,i as e,c as o}from"../chunks/Selection-DhbizDM4.mjs";import{n as c}from"../chunks/TypeBrands-Bp_Z_o5Y.mjs";import{c as n}from"../chunks/DomUtils-CznMAZZg.mjs";import{r}from"../chunks/PluginHelpers-CdPR0MuT.mjs";import{f as s}from"../chunks/ShortcutFormatting-BLKS0Gys.mjs";import{f as l,s as i}from"../chunks/Document-HC8s50qJ.mjs";function a(o,c){const n=o.getState();if(!t(n.selection))return!1;const r=n.selection;if(!e(r))return!1;const s=n.getBlock(r.anchor.blockId);return!(!s||"blockquote"!==s.type)&&c({state:n,block:s,blockId:r.anchor.blockId,offset:r.anchor.offset})}const u={label:"Blockquote",tooltip:t=>`Blockquote (${t})`},p=/* @__PURE__ */Object.assign({"./locales/ar.ts":()=>import("../chunks/ar-Bp3rDZky.mjs"),"./locales/de.ts":()=>import("../chunks/de-CLYtb6kD.mjs"),"./locales/es.ts":()=>import("../chunks/es-BjPsub0k.mjs"),"./locales/fr.ts":()=>import("../chunks/fr-Dx4Qqimj.mjs"),"./locales/hi.ts":()=>import("../chunks/hi-BmkfaZpg.mjs"),"./locales/pt.ts":()=>import("../chunks/pt-DwdSYJzC.mjs"),"./locales/ru.ts":()=>import("../chunks/ru-B0cRw90L.mjs"),"./locales/zh.ts":()=>import("../chunks/zh-DG2CNTUU.mjs")});async function k(t){if("en"===t)return u;const e=p[`./locales/${t}.ts`];if(!e)return u;try{return(await e()).default}catch{return u}}const m={};class h{id="blockquote";name="Blockquote";priority=35;config;locale;constructor(t){this.config={...m,...t}}async init(t){this.locale=await r(t,this.config.locale,u,k),t.registerStyleSheet("\n.notectl-content blockquote {\n\tmargin: 0;\n\tpadding: 2px 0;\n\tpadding-inline-start: 16px;\n\tborder-inline-start: 3px solid var(--notectl-border);\n\tmin-height: 1.6em;\n}\n"),this.registerNodeSpec(t),this.registerCommands(t),this.registerKeymap(t),this.registerInputRule(t),this.registerToolbarItem(t)}registerNodeSpec(t){t.registerNodeSpec({type:"blockquote",group:"block",content:{allow:["text"]},toDOM:t=>n("blockquote",t.id),toHTML:(t,e)=>`<blockquote>${e||"<br>"}</blockquote>`,parseHTML:[{tag:"blockquote"}],sanitize:{tags:["blockquote"]}})}registerCommands(t){t.registerCommand("toggleBlockquote",()=>this.toggleBlockquote(t)),t.registerCommand("setBlockquote",()=>this.setBlockType(t,c("blockquote")))}registerKeymap(t){t.registerKeymap({"Mod-Shift->":()=>t.executeCommand("toggleBlockquote")}),function(t){t.registerKeymap({ArrowDown:()=>function(t){return a(t,({state:e,block:n,blockId:r,offset:s})=>{if(s!==l(n))return!1;const a=e.getBlockOrder(),u=a.indexOf(r);if(u<a.length-1){const c=a[u+1],n=e.transaction("command").setSelection(o(c,0)).build();t.dispatch(n)}else!function(t,e){const n=t.getState(),r=n.getBlock(e);if(!r)return;const s=l(r),a=i(),u=n.transaction("command").splitBlock(e,s,a).setBlockType(a,c("paragraph")).setSelection(o(a,0)).build();t.dispatch(u)}(t,r);return!0})}(t),ArrowUp:()=>function(t){return a(t,({state:e,blockId:c,offset:n})=>{if(0!==n)return!1;const r=e.getBlockOrder(),s=r.indexOf(c);if(s>0){const c=r[s-1],n=e.getBlock(c),i=n?l(n):0,a=e.transaction("command").setSelection(o(c,i)).build();return t.dispatch(a),!0}return!1})}(t),Enter:()=>function(t){return a(t,({state:e,block:n,blockId:r})=>{if(l(n)>0)return!1;const s=e.transaction("command").setBlockType(r,c("paragraph")).setSelection(o(r,0)).build();return t.dispatch(s),!0})}(t),Backspace:()=>function(t){return a(t,({state:e,blockId:o,offset:n})=>{if(0!==n)return!1;const r=e.transaction("input").setBlockType(o,c("paragraph")).setSelection(e.selection).build();return t.dispatch(r),!0})}(t)},{priority:"context"})}(t)}registerInputRule(o){o.registerInputRule({pattern:/^> $/,handler(o,n,r,s){const l=o.selection;if(!t(l))return null;if(!e(l))return null;const i=o.getBlock(l.anchor.blockId);return i&&"paragraph"===i.type?o.transaction("input").deleteTextAt(l.anchor.blockId,r,r+2).setBlockType(l.anchor.blockId,c("blockquote")).setSelection(l).build():null}})}registerToolbarItem(e){e.registerToolbarItem({id:"blockquote",group:"block",icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z"/></svg>',label:this.locale.label,tooltip:this.locale.tooltip(s("Mod-Shift->")),command:"toggleBlockquote",isActive:e=>{if(!t(e.selection))return!1;const o=e.getBlock(e.selection.anchor.blockId);return"blockquote"===o?.type}})}toggleBlockquote(e){const o=e.getState();if(!t(o.selection))return!1;const n=o.getBlock(o.selection.anchor.blockId);return!!n&&("blockquote"===n.type?this.setBlockType(e,c("paragraph")):this.setBlockType(e,c("blockquote")))}setBlockType(e,o,c){const n=e.getState(),r=n.selection;if(!t(r))return!1;const s=n.transaction("command").setBlockType(r.anchor.blockId,o,c).setSelection(r).build();return e.dispatch(s),!0}}export{u as BLOCKQUOTE_LOCALE_EN,h as BlockquotePlugin,k as loadBlockquoteLocale};
|
|
2
2
|
//# sourceMappingURL=blockquote.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockquote.mjs","sources":["../../src/plugins/blockquote/BlockquoteKeyboardHandlers.ts","../../src/plugins/blockquote/BlockquoteLocale.ts","../../src/plugins/blockquote/BlockquoteStyles.ts","../../src/plugins/blockquote/BlockquotePlugin.ts"],"sourcesContent":["/**\n * Keyboard handlers for blockquote boundary navigation and escape.\n *\n * Handles ArrowDown/ArrowUp at block boundaries, Enter on empty blockquote\n * (converts to paragraph), and Backspace at offset 0 (reverts to paragraph).\n */\n\nimport type { BlockNode } from '../../model/Document.js';\nimport { generateBlockId, getBlockLength } from '../../model/Document.js';\nimport {\n\tcreateCollapsedSelection,\n\tisCollapsed,\n\tisGapCursor,\n\tisNodeSelection,\n} from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport type { PluginContext } from '../Plugin.js';\n\n// --- Context Guard ---\n\ninterface BlockquoteContext {\n\treadonly state: EditorState;\n\treadonly block: BlockNode;\n\treadonly blockId: BlockId;\n\treadonly offset: number;\n}\n\n/**\n * Guards against non-blockquote contexts.\n * Returns false (not handled) if the cursor is not inside a blockquote.\n */\nfunction withBlockquoteContext(\n\tcontext: PluginContext,\n\thandler: (ctx: BlockquoteContext) => boolean,\n): boolean {\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\n\tconst sel = state.selection;\n\tif (!isCollapsed(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block || block.type !== 'blockquote') return false;\n\n\treturn handler({\n\t\tstate,\n\t\tblock,\n\t\tblockId: sel.anchor.blockId,\n\t\toffset: sel.anchor.offset,\n\t});\n}\n\n/** Registers blockquote keyboard handlers at context priority. */\nexport function registerBlockquoteKeymaps(context: PluginContext): void {\n\tcontext.registerKeymap(\n\t\t{\n\t\t\tArrowDown: () => handleArrowDown(context),\n\t\t\tArrowUp: () => handleArrowUp(context),\n\t\t\tEnter: () => handleEnterOnEmpty(context),\n\t\t\tBackspace: () => handleBackspaceAtStart(context),\n\t\t},\n\t\t{ priority: 'context' },\n\t);\n}\n\n// --- Handler Functions ---\n\n/**\n * Moves cursor to the next block when at the end of the blockquote text.\n * If no next block exists, inserts a new paragraph after the blockquote.\n */\nfunction handleArrowDown(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, block, blockId, offset }) => {\n\t\tconst textLength: number = getBlockLength(block);\n\t\tif (offset !== textLength) return false;\n\n\t\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\t\tconst idx: number = blockOrder.indexOf(blockId);\n\n\t\tif (idx < blockOrder.length - 1) {\n\t\t\tconst nextId: BlockId = blockOrder[idx + 1] as BlockId;\n\t\t\tconst tr: Transaction = state\n\t\t\t\t.transaction('command')\n\t\t\t\t.setSelection(createCollapsedSelection(nextId, 0))\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t} else {\n\t\t\tinsertParagraphAfter(context, blockId);\n\t\t}\n\n\t\treturn true;\n\t});\n}\n\n/**\n * Moves cursor to the previous block when at the start of the blockquote text.\n * Returns false if no previous block exists.\n */\nfunction handleArrowUp(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, blockId, offset }) => {\n\t\tif (offset !== 0) return false;\n\n\t\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\t\tconst idx: number = blockOrder.indexOf(blockId);\n\n\t\tif (idx > 0) {\n\t\t\tconst prevId: BlockId = blockOrder[idx - 1] as BlockId;\n\t\t\tconst prevBlock: BlockNode | undefined = state.getBlock(prevId);\n\t\t\tconst prevLen: number = prevBlock ? getBlockLength(prevBlock) : 0;\n\t\t\tconst tr: Transaction = state\n\t\t\t\t.transaction('command')\n\t\t\t\t.setSelection(createCollapsedSelection(prevId, prevLen))\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n\n/**\n * Converts an empty blockquote to a paragraph on Enter.\n * Returns false for non-empty blockquotes, letting splitBlock handle them.\n */\nfunction handleEnterOnEmpty(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, block, blockId }) => {\n\t\tif (getBlockLength(block) > 0) return false;\n\n\t\tconst tr: Transaction = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(blockId, nodeType('paragraph'))\n\t\t\t.setSelection(createCollapsedSelection(blockId, 0))\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t});\n}\n\n/**\n * Converts a blockquote to a paragraph when Backspace is pressed at offset 0.\n */\nfunction handleBackspaceAtStart(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, blockId, offset }) => {\n\t\tif (offset !== 0) return false;\n\n\t\tconst tr: Transaction = state\n\t\t\t.transaction('input')\n\t\t\t.setBlockType(blockId, nodeType('paragraph'))\n\t\t\t.setSelection(state.selection)\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t});\n}\n\n// --- Shared Helpers ---\n\nfunction insertParagraphAfter(context: PluginContext, bid: BlockId): void {\n\tconst state: EditorState = context.getState();\n\tconst block: BlockNode | undefined = state.getBlock(bid);\n\tif (!block) return;\n\n\tconst blockLength: number = getBlockLength(block);\n\tconst newId: BlockId = generateBlockId();\n\n\tconst tr: Transaction = state\n\t\t.transaction('command')\n\t\t.splitBlock(bid, blockLength, newId)\n\t\t.setBlockType(newId, nodeType('paragraph'))\n\t\t.setSelection(createCollapsedSelection(newId, 0))\n\t\t.build();\n\n\tcontext.dispatch(tr);\n}\n","/**\n * Locale interface and default English locale for the BlockquotePlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface BlockquoteLocale {\n\treadonly label: string;\n\treadonly tooltip: (shortcut: string) => string;\n}\n\n// --- Default English Locale ---\n\nexport const BLOCKQUOTE_LOCALE_EN: BlockquoteLocale = {\n\tlabel: 'Blockquote',\n\ttooltip: (shortcut: string) => `Blockquote (${shortcut})`,\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: BlockquoteLocale }>> =\n\timport.meta.glob<{ default: BlockquoteLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadBlockquoteLocale(lang: string): Promise<BlockquoteLocale> {\n\tif (lang === 'en') return BLOCKQUOTE_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return BLOCKQUOTE_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn BLOCKQUOTE_LOCALE_EN;\n\t}\n}\n","/** Blockquote styles using CSS logical properties for RTL support. */\nexport const BLOCKQUOTE_CSS = `\n.notectl-content blockquote {\n\tmargin: 0;\n\tpadding: 2px 0;\n\tpadding-inline-start: 16px;\n\tborder-inline-start: 3px solid var(--notectl-border);\n\tmin-height: 1.6em;\n}\n`;\n","/**\n * BlockquotePlugin: registers a blockquote block type with NodeSpec,\n * toggle command, keyboard shortcut, input rule, and a toolbar button.\n */\n\nimport { LocaleServiceKey } from '../../i18n/LocaleService.js';\nimport { isCollapsed, isGapCursor, isNodeSelection } from '../../model/Selection.js';\nimport { type NodeTypeName, nodeType } from '../../model/TypeBrands.js';\nimport { createBlockElement } from '../../view/DomUtils.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { formatShortcut } from '../shared/ShortcutFormatting.js';\nimport { registerBlockquoteKeymaps } from './BlockquoteKeyboardHandlers.js';\nimport {\n\tBLOCKQUOTE_LOCALE_EN,\n\ttype BlockquoteLocale,\n\tloadBlockquoteLocale,\n} from './BlockquoteLocale.js';\nimport { BLOCKQUOTE_CSS } from './BlockquoteStyles.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface NodeAttrRegistry {\n\t\tblockquote: Record<string, never>;\n\t}\n}\n\n// --- Configuration ---\n\nexport interface BlockquoteConfig {\n\treadonly locale?: BlockquoteLocale;\n}\n\nconst DEFAULT_CONFIG: BlockquoteConfig = {};\n\n// --- Plugin ---\n\nexport class BlockquotePlugin implements Plugin {\n\treadonly id = 'blockquote';\n\treadonly name = 'Blockquote';\n\treadonly priority = 35;\n\n\tprivate readonly config: BlockquoteConfig;\n\tprivate locale!: BlockquoteLocale;\n\n\tconstructor(config?: Partial<BlockquoteConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tif (this.config.locale) {\n\t\t\tthis.locale = this.config.locale;\n\t\t} else {\n\t\t\tconst service = context.getService(LocaleServiceKey);\n\t\t\tconst lang: string = service?.getLocale() ?? 'en';\n\t\t\tthis.locale = lang === 'en' ? BLOCKQUOTE_LOCALE_EN : await loadBlockquoteLocale(lang);\n\t\t}\n\t\tcontext.registerStyleSheet(BLOCKQUOTE_CSS);\n\t\tthis.registerNodeSpec(context);\n\t\tthis.registerCommands(context);\n\t\tthis.registerKeymap(context);\n\t\tthis.registerInputRule(context);\n\t\tthis.registerToolbarItem(context);\n\t}\n\n\tprivate registerNodeSpec(context: PluginContext): void {\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'blockquote',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\ttoDOM(node) {\n\t\t\t\treturn createBlockElement('blockquote', node.id);\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<blockquote>${content || '<br>'}</blockquote>`;\n\t\t\t},\n\t\t\tparseHTML: [{ tag: 'blockquote' }],\n\t\t\tsanitize: { tags: ['blockquote'] },\n\t\t});\n\t}\n\n\tprivate registerCommands(context: PluginContext): void {\n\t\tcontext.registerCommand('toggleBlockquote', () => {\n\t\t\treturn this.toggleBlockquote(context);\n\t\t});\n\n\t\tcontext.registerCommand('setBlockquote', () => {\n\t\t\treturn this.setBlockType(context, nodeType('blockquote'));\n\t\t});\n\t}\n\n\tprivate registerKeymap(context: PluginContext): void {\n\t\tcontext.registerKeymap({\n\t\t\t'Mod-Shift->': () => context.executeCommand('toggleBlockquote'),\n\t\t});\n\t\tregisterBlockquoteKeymaps(context);\n\t}\n\n\tprivate registerInputRule(context: PluginContext): void {\n\t\tcontext.registerInputRule({\n\t\t\tpattern: /^> $/,\n\t\t\thandler(state, _match, start, _end) {\n\t\t\t\tconst sel = state.selection;\n\t\t\t\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\t\t\t\tif (!isCollapsed(sel)) return null;\n\n\t\t\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\t\t\tif (!block || block.type !== 'paragraph') return null;\n\n\t\t\t\treturn state\n\t\t\t\t\t.transaction('input')\n\t\t\t\t\t.deleteTextAt(sel.anchor.blockId, start, start + 2)\n\t\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('blockquote'))\n\t\t\t\t\t.setSelection(sel)\n\t\t\t\t\t.build();\n\t\t\t},\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=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\"/></svg>';\n\n\t\tcontext.registerToolbarItem({\n\t\t\tid: 'blockquote',\n\t\t\tgroup: 'block',\n\t\t\ticon,\n\t\t\tlabel: this.locale.label,\n\t\t\ttooltip: this.locale.tooltip(formatShortcut('Mod-Shift->')),\n\t\t\tcommand: 'toggleBlockquote',\n\t\t\tisActive: (state) => {\n\t\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\t\treturn block?.type === 'blockquote';\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Toggles between blockquote and paragraph.\n\t * If the block is already a blockquote, resets to paragraph.\n\t */\n\tprivate toggleBlockquote(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\tif (!block) return false;\n\n\t\tif (block.type === 'blockquote') {\n\t\t\treturn this.setBlockType(context, nodeType('paragraph'));\n\t\t}\n\n\t\treturn this.setBlockType(context, nodeType('blockquote'));\n\t}\n\n\tprivate setBlockType(\n\t\tcontext: PluginContext,\n\t\ttype: NodeTypeName,\n\t\tattrs?: Record<string, string | number | boolean>,\n\t): boolean {\n\t\tconst state = context.getState();\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel) || isGapCursor(sel)) return false;\n\n\t\tconst tr = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(sel.anchor.blockId, type, attrs)\n\t\t\t.setSelection(sel)\n\t\t\t.build();\n\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n}\n"],"names":["withBlockquoteContext","context","handler","state","getState","isNodeSelection","selection","isGapCursor","sel","isCollapsed","block","getBlock","anchor","blockId","type","offset","BLOCKQUOTE_LOCALE_EN","label","tooltip","shortcut","localeModules","assign","import","async","loadBlockquoteLocale","lang","loader","default","DEFAULT_CONFIG","BlockquotePlugin","id","name","priority","config","locale","constructor","this","init","service","getService","LocaleServiceKey","getLocale","registerStyleSheet","registerNodeSpec","registerCommands","registerKeymap","registerInputRule","registerToolbarItem","group","content","allow","toDOM","node","createBlockElement","toHTML","_node","parseHTML","tag","sanitize","tags","registerCommand","toggleBlockquote","setBlockType","nodeType","executeCommand","ArrowDown","getBlockLength","blockOrder","getBlockOrder","idx","indexOf","length","nextId","tr","transaction","setSelection","createCollapsedSelection","build","dispatch","bid","blockLength","newId","generateBlockId","splitBlock","insertParagraphAfter","handleArrowDown","ArrowUp","prevId","prevBlock","prevLen","handleArrowUp","Enter","handleEnterOnEmpty","Backspace","handleBackspaceAtStart","registerBlockquoteKeymaps","pattern","_match","start","_end","deleteTextAt","icon","formatShortcut","command","isActive","attrs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blockquote.mjs","sources":["../../src/plugins/blockquote/BlockquoteKeyboardHandlers.ts","../../src/plugins/blockquote/BlockquoteLocale.ts","../../src/plugins/blockquote/BlockquoteStyles.ts","../../src/plugins/blockquote/BlockquotePlugin.ts"],"sourcesContent":["/**\n * Keyboard handlers for blockquote boundary navigation and escape.\n *\n * Handles ArrowDown/ArrowUp at block boundaries, Enter on empty blockquote\n * (converts to paragraph), and Backspace at offset 0 (reverts to paragraph).\n */\n\nimport type { BlockNode } from '../../model/Document.js';\nimport { generateBlockId, getBlockLength } from '../../model/Document.js';\nimport { createCollapsedSelection, isCollapsed, isTextSelection } from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport type { PluginContext } from '../Plugin.js';\n\n// --- Context Guard ---\n\ninterface BlockquoteContext {\n\treadonly state: EditorState;\n\treadonly block: BlockNode;\n\treadonly blockId: BlockId;\n\treadonly offset: number;\n}\n\n/**\n * Guards against non-blockquote contexts.\n * Returns false (not handled) if the cursor is not inside a blockquote.\n */\nfunction withBlockquoteContext(\n\tcontext: PluginContext,\n\thandler: (ctx: BlockquoteContext) => boolean,\n): boolean {\n\tconst state: EditorState = context.getState();\n\tif (!isTextSelection(state.selection)) return false;\n\n\tconst sel = state.selection;\n\tif (!isCollapsed(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block || block.type !== 'blockquote') return false;\n\n\treturn handler({\n\t\tstate,\n\t\tblock,\n\t\tblockId: sel.anchor.blockId,\n\t\toffset: sel.anchor.offset,\n\t});\n}\n\n/** Registers blockquote keyboard handlers at context priority. */\nexport function registerBlockquoteKeymaps(context: PluginContext): void {\n\tcontext.registerKeymap(\n\t\t{\n\t\t\tArrowDown: () => handleArrowDown(context),\n\t\t\tArrowUp: () => handleArrowUp(context),\n\t\t\tEnter: () => handleEnterOnEmpty(context),\n\t\t\tBackspace: () => handleBackspaceAtStart(context),\n\t\t},\n\t\t{ priority: 'context' },\n\t);\n}\n\n// --- Handler Functions ---\n\n/**\n * Moves cursor to the next block when at the end of the blockquote text.\n * If no next block exists, inserts a new paragraph after the blockquote.\n */\nfunction handleArrowDown(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, block, blockId, offset }) => {\n\t\tconst textLength: number = getBlockLength(block);\n\t\tif (offset !== textLength) return false;\n\n\t\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\t\tconst idx: number = blockOrder.indexOf(blockId);\n\n\t\tif (idx < blockOrder.length - 1) {\n\t\t\tconst nextId: BlockId = blockOrder[idx + 1] as BlockId;\n\t\t\tconst tr: Transaction = state\n\t\t\t\t.transaction('command')\n\t\t\t\t.setSelection(createCollapsedSelection(nextId, 0))\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t} else {\n\t\t\tinsertParagraphAfter(context, blockId);\n\t\t}\n\n\t\treturn true;\n\t});\n}\n\n/**\n * Moves cursor to the previous block when at the start of the blockquote text.\n * Returns false if no previous block exists.\n */\nfunction handleArrowUp(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, blockId, offset }) => {\n\t\tif (offset !== 0) return false;\n\n\t\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\t\tconst idx: number = blockOrder.indexOf(blockId);\n\n\t\tif (idx > 0) {\n\t\t\tconst prevId: BlockId = blockOrder[idx - 1] as BlockId;\n\t\t\tconst prevBlock: BlockNode | undefined = state.getBlock(prevId);\n\t\t\tconst prevLen: number = prevBlock ? getBlockLength(prevBlock) : 0;\n\t\t\tconst tr: Transaction = state\n\t\t\t\t.transaction('command')\n\t\t\t\t.setSelection(createCollapsedSelection(prevId, prevLen))\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n\n/**\n * Converts an empty blockquote to a paragraph on Enter.\n * Returns false for non-empty blockquotes, letting splitBlock handle them.\n */\nfunction handleEnterOnEmpty(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, block, blockId }) => {\n\t\tif (getBlockLength(block) > 0) return false;\n\n\t\tconst tr: Transaction = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(blockId, nodeType('paragraph'))\n\t\t\t.setSelection(createCollapsedSelection(blockId, 0))\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t});\n}\n\n/**\n * Converts a blockquote to a paragraph when Backspace is pressed at offset 0.\n */\nfunction handleBackspaceAtStart(context: PluginContext): boolean {\n\treturn withBlockquoteContext(context, ({ state, blockId, offset }) => {\n\t\tif (offset !== 0) return false;\n\n\t\tconst tr: Transaction = state\n\t\t\t.transaction('input')\n\t\t\t.setBlockType(blockId, nodeType('paragraph'))\n\t\t\t.setSelection(state.selection)\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t});\n}\n\n// --- Shared Helpers ---\n\nfunction insertParagraphAfter(context: PluginContext, bid: BlockId): void {\n\tconst state: EditorState = context.getState();\n\tconst block: BlockNode | undefined = state.getBlock(bid);\n\tif (!block) return;\n\n\tconst blockLength: number = getBlockLength(block);\n\tconst newId: BlockId = generateBlockId();\n\n\tconst tr: Transaction = state\n\t\t.transaction('command')\n\t\t.splitBlock(bid, blockLength, newId)\n\t\t.setBlockType(newId, nodeType('paragraph'))\n\t\t.setSelection(createCollapsedSelection(newId, 0))\n\t\t.build();\n\n\tcontext.dispatch(tr);\n}\n","/**\n * Locale interface and default English locale for the BlockquotePlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface BlockquoteLocale {\n\treadonly label: string;\n\treadonly tooltip: (shortcut: string) => string;\n}\n\n// --- Default English Locale ---\n\nexport const BLOCKQUOTE_LOCALE_EN: BlockquoteLocale = {\n\tlabel: 'Blockquote',\n\ttooltip: (shortcut: string) => `Blockquote (${shortcut})`,\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: BlockquoteLocale }>> =\n\timport.meta.glob<{ default: BlockquoteLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadBlockquoteLocale(lang: string): Promise<BlockquoteLocale> {\n\tif (lang === 'en') return BLOCKQUOTE_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return BLOCKQUOTE_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn BLOCKQUOTE_LOCALE_EN;\n\t}\n}\n","/** Blockquote styles using CSS logical properties for RTL support. */\nexport const BLOCKQUOTE_CSS = `\n.notectl-content blockquote {\n\tmargin: 0;\n\tpadding: 2px 0;\n\tpadding-inline-start: 16px;\n\tborder-inline-start: 3px solid var(--notectl-border);\n\tmin-height: 1.6em;\n}\n`;\n","/**\n * BlockquotePlugin: registers a blockquote block type with NodeSpec,\n * toggle command, keyboard shortcut, input rule, and a toolbar button.\n */\n\nimport { isCollapsed, isTextSelection } from '../../model/Selection.js';\nimport { type NodeTypeName, nodeType } from '../../model/TypeBrands.js';\nimport { createBlockElement } from '../../view/DomUtils.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { resolveLocale } from '../shared/PluginHelpers.js';\nimport { formatShortcut } from '../shared/ShortcutFormatting.js';\nimport { registerBlockquoteKeymaps } from './BlockquoteKeyboardHandlers.js';\nimport {\n\tBLOCKQUOTE_LOCALE_EN,\n\ttype BlockquoteLocale,\n\tloadBlockquoteLocale,\n} from './BlockquoteLocale.js';\nimport { BLOCKQUOTE_CSS } from './BlockquoteStyles.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface NodeAttrRegistry {\n\t\tblockquote: Record<string, never>;\n\t}\n}\n\n// --- Configuration ---\n\nexport interface BlockquoteConfig {\n\treadonly locale?: BlockquoteLocale;\n}\n\nconst DEFAULT_CONFIG: BlockquoteConfig = {};\n\n// --- Plugin ---\n\nexport class BlockquotePlugin implements Plugin {\n\treadonly id = 'blockquote';\n\treadonly name = 'Blockquote';\n\treadonly priority = 35;\n\n\tprivate readonly config: BlockquoteConfig;\n\tprivate locale!: BlockquoteLocale;\n\n\tconstructor(config?: Partial<BlockquoteConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(\n\t\t\tcontext,\n\t\t\tthis.config.locale,\n\t\t\tBLOCKQUOTE_LOCALE_EN,\n\t\t\tloadBlockquoteLocale,\n\t\t);\n\t\tcontext.registerStyleSheet(BLOCKQUOTE_CSS);\n\t\tthis.registerNodeSpec(context);\n\t\tthis.registerCommands(context);\n\t\tthis.registerKeymap(context);\n\t\tthis.registerInputRule(context);\n\t\tthis.registerToolbarItem(context);\n\t}\n\n\tprivate registerNodeSpec(context: PluginContext): void {\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'blockquote',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\ttoDOM(node) {\n\t\t\t\treturn createBlockElement('blockquote', node.id);\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<blockquote>${content || '<br>'}</blockquote>`;\n\t\t\t},\n\t\t\tparseHTML: [{ tag: 'blockquote' }],\n\t\t\tsanitize: { tags: ['blockquote'] },\n\t\t});\n\t}\n\n\tprivate registerCommands(context: PluginContext): void {\n\t\tcontext.registerCommand('toggleBlockquote', () => {\n\t\t\treturn this.toggleBlockquote(context);\n\t\t});\n\n\t\tcontext.registerCommand('setBlockquote', () => {\n\t\t\treturn this.setBlockType(context, nodeType('blockquote'));\n\t\t});\n\t}\n\n\tprivate registerKeymap(context: PluginContext): void {\n\t\tcontext.registerKeymap({\n\t\t\t'Mod-Shift->': () => context.executeCommand('toggleBlockquote'),\n\t\t});\n\t\tregisterBlockquoteKeymaps(context);\n\t}\n\n\tprivate registerInputRule(context: PluginContext): void {\n\t\tcontext.registerInputRule({\n\t\t\tpattern: /^> $/,\n\t\t\thandler(state, _match, start, _end) {\n\t\t\t\tconst sel = state.selection;\n\t\t\t\tif (!isTextSelection(sel)) return null;\n\t\t\t\tif (!isCollapsed(sel)) return null;\n\n\t\t\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\t\t\tif (!block || block.type !== 'paragraph') return null;\n\n\t\t\t\treturn state\n\t\t\t\t\t.transaction('input')\n\t\t\t\t\t.deleteTextAt(sel.anchor.blockId, start, start + 2)\n\t\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('blockquote'))\n\t\t\t\t\t.setSelection(sel)\n\t\t\t\t\t.build();\n\t\t\t},\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=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\"/></svg>';\n\n\t\tcontext.registerToolbarItem({\n\t\t\tid: 'blockquote',\n\t\t\tgroup: 'block',\n\t\t\ticon,\n\t\t\tlabel: this.locale.label,\n\t\t\ttooltip: this.locale.tooltip(formatShortcut('Mod-Shift->')),\n\t\t\tcommand: 'toggleBlockquote',\n\t\t\tisActive: (state) => {\n\t\t\t\tif (!isTextSelection(state.selection)) return false;\n\t\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\t\treturn block?.type === 'blockquote';\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Toggles between blockquote and paragraph.\n\t * If the block is already a blockquote, resets to paragraph.\n\t */\n\tprivate toggleBlockquote(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tif (!isTextSelection(state.selection)) return false;\n\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\tif (!block) return false;\n\n\t\tif (block.type === 'blockquote') {\n\t\t\treturn this.setBlockType(context, nodeType('paragraph'));\n\t\t}\n\n\t\treturn this.setBlockType(context, nodeType('blockquote'));\n\t}\n\n\tprivate setBlockType(\n\t\tcontext: PluginContext,\n\t\ttype: NodeTypeName,\n\t\tattrs?: Record<string, string | number | boolean>,\n\t): boolean {\n\t\tconst state = context.getState();\n\t\tconst sel = state.selection;\n\t\tif (!isTextSelection(sel)) return false;\n\n\t\tconst tr = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(sel.anchor.blockId, type, attrs)\n\t\t\t.setSelection(sel)\n\t\t\t.build();\n\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n}\n"],"names":["withBlockquoteContext","context","handler","state","getState","isTextSelection","selection","sel","isCollapsed","block","getBlock","anchor","blockId","type","offset","BLOCKQUOTE_LOCALE_EN","label","tooltip","shortcut","localeModules","assign","import","async","loadBlockquoteLocale","lang","loader","default","DEFAULT_CONFIG","BlockquotePlugin","id","name","priority","config","locale","constructor","this","init","resolveLocale","registerStyleSheet","registerNodeSpec","registerCommands","registerKeymap","registerInputRule","registerToolbarItem","group","content","allow","toDOM","node","createBlockElement","toHTML","_node","parseHTML","tag","sanitize","tags","registerCommand","toggleBlockquote","setBlockType","nodeType","executeCommand","ArrowDown","getBlockLength","blockOrder","getBlockOrder","idx","indexOf","length","nextId","tr","transaction","setSelection","createCollapsedSelection","build","dispatch","bid","blockLength","newId","generateBlockId","splitBlock","insertParagraphAfter","handleArrowDown","ArrowUp","prevId","prevBlock","prevLen","handleArrowUp","Enter","handleEnterOnEmpty","Backspace","handleBackspaceAtStart","registerBlockquoteKeymaps","pattern","_match","start","_end","deleteTextAt","icon","formatShortcut","command","isActive","attrs"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaretNavigationPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/caret-navigation/CaretNavigationPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"CaretNavigationPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/caret-navigation/CaretNavigationPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAe9D,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAkC1D,qBAAa,qBAAsB,YAAW,MAAM;IACnD,QAAQ,CAAC,EAAE,sBAAsB;IACjC,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,QAAQ,KAAK;IAEtB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,oBAAoB,CAAwB;IACpD,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,MAAM,CAAqD;IAE7D,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0EjD,uEAAuE;IACvE,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IAyCpF,OAAO,IAAI,IAAI;IAOf,iEAAiE;IACjE,OAAO,CAAC,YAAY;IAUpB,4EAA4E;IAC5E,OAAO,CAAC,qBAAqB;IAa7B,oFAAoF;IACpF,OAAO,CAAC,eAAe;IAOvB,kFAAkF;IAClF,OAAO,CAAC,cAAc;IAStB,8CAA8C;IAC9C,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,mBAAmB;IAgB3B,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;IAYxB;;;OAGG;IACH,OAAO,CAAC,iCAAiC;CAiBzC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{J as a,K as i,L as o}from"../chunks/index-
|
|
1
|
+
import{J as a,K as i,L as o}from"../chunks/index-CVwf0cdH.mjs";export{a as CARET_NAVIGATION_LOCALE_EN,i as CaretNavigationPlugin,o as loadCaretNavigationLocale};
|
|
2
2
|
//# sourceMappingURL=caret-navigation.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockKeyboardHandlers.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/CodeBlockKeyboardHandlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"CodeBlockKeyboardHandlers.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/CodeBlockKeyboardHandlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAkC5E,kDAAkD;AAClD,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,eAAe,EACvB,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,GACpE,IAAI,CAuBN;AAsFD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAkB5D"}
|
|
@@ -11,6 +11,8 @@ export declare class CodeBlockPlugin implements Plugin {
|
|
|
11
11
|
private readonly resolvedKeymap;
|
|
12
12
|
private context;
|
|
13
13
|
private locale;
|
|
14
|
+
private highlighter;
|
|
15
|
+
private readonly tokenCache;
|
|
14
16
|
constructor(config?: Partial<CodeBlockConfig>);
|
|
15
17
|
init(context: PluginContext): Promise<void>;
|
|
16
18
|
destroy(): void;
|
|
@@ -22,6 +24,9 @@ export declare class CodeBlockPlugin implements Plugin {
|
|
|
22
24
|
private registerToolbarItem;
|
|
23
25
|
private registerMiddleware;
|
|
24
26
|
private patchTableCellContent;
|
|
27
|
+
private initHighlighter;
|
|
28
|
+
private registerSyntaxHighlighterService;
|
|
29
|
+
private getCachedTokens;
|
|
25
30
|
private getFocusedCodeBlockId;
|
|
26
31
|
}
|
|
27
32
|
//# sourceMappingURL=CodeBlockPlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/CodeBlockPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeBlockPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/CodeBlockPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAcjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAY1D,OAAO,KAAK,EACX,eAAe,EAIf,MAAM,qBAAqB,CAAC;AAW7B,qBAAa,eAAgB,YAAW,MAAM;IAC7C,QAAQ,CAAC,EAAE,gBAAgB;IAC3B,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyD;IACxF,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAOvB;gBAEQ,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAQvC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjD,OAAO,IAAI,IAAI;IAMf,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IAuBnF,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa;IA6C9C,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,gCAAgC;IAcxC,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,qBAAqB;CAO7B"}
|
|
@@ -16,6 +16,7 @@ export interface SyntaxToken {
|
|
|
16
16
|
export interface SyntaxHighlighter {
|
|
17
17
|
tokenize(code: string, language: string): readonly SyntaxToken[];
|
|
18
18
|
getSupportedLanguages(): readonly string[];
|
|
19
|
+
registerLanguage?(def: import('./highlighter/TokenizerTypes.js').LanguageDefinition): void;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Configurable keyboard bindings for CodeBlockPlugin actions.
|
|
@@ -66,5 +67,11 @@ export interface CodeBlockService {
|
|
|
66
67
|
getSupportedLanguages(): readonly string[];
|
|
67
68
|
}
|
|
68
69
|
export declare const CODE_BLOCK_SERVICE_KEY: ServiceKey<CodeBlockService>;
|
|
70
|
+
export interface SyntaxHighlighterService {
|
|
71
|
+
registerLanguage(def: import('./highlighter/TokenizerTypes.js').LanguageDefinition): void;
|
|
72
|
+
getSupportedLanguages(): readonly string[];
|
|
73
|
+
tokenize(code: string, language: string): readonly SyntaxToken[];
|
|
74
|
+
}
|
|
75
|
+
export declare const SYNTAX_HIGHLIGHTER_SERVICE_KEY: ServiceKey<SyntaxHighlighterService>;
|
|
69
76
|
export declare const CODE_BLOCK_ICON = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z\"/></svg>";
|
|
70
77
|
//# sourceMappingURL=CodeBlockTypes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlockTypes.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/CodeBlockTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,QAAQ,6BAA6B,CAAC;IAC5C,UAAU,gBAAgB;QACzB,UAAU,EAAE;YACX,QAAQ,EAAE,MAAM,CAAC;YACjB,eAAe,EAAE,MAAM,CAAC;SACxB,CAAC;KACF;CACD;AAID,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAAC;IACjE,qBAAqB,IAAI,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeBlockTypes.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/CodeBlockTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SyntaxHighlighter, SyntaxToken } from '../CodeBlockTypes.js';
|
|
2
|
+
import { LanguageDefinition } from './TokenizerTypes.js';
|
|
3
|
+
export declare class RegexTokenizer implements SyntaxHighlighter {
|
|
4
|
+
private readonly languageMap;
|
|
5
|
+
constructor(languages?: readonly LanguageDefinition[]);
|
|
6
|
+
/** Registers a language definition. Overwrites existing definitions for the same name/aliases. */
|
|
7
|
+
registerLanguage(def: LanguageDefinition): void;
|
|
8
|
+
/** Tokenizes code using the specified language. Returns empty array for unknown languages. */
|
|
9
|
+
tokenize(code: string, language: string): readonly SyntaxToken[];
|
|
10
|
+
/** Returns all registered language names and aliases. */
|
|
11
|
+
getSupportedLanguages(): readonly string[];
|
|
12
|
+
private registerLanguageInternal;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=RegexTokenizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegexTokenizer.d.ts","sourceRoot":"","sources":["../../../../src/plugins/code-block/highlighter/RegexTokenizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qBAAa,cAAe,YAAW,iBAAiB;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;gBAEzD,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE;IAQrD,kGAAkG;IAClG,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAI/C,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE;IAgChE,yDAAyD;IACzD,qBAAqB,IAAI,SAAS,MAAM,EAAE;IAW1C,OAAO,CAAC,wBAAwB;CAMhC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the regex-based tokenizer and language definitions.
|
|
3
|
+
*/
|
|
4
|
+
/** A single token pattern for a language. Pattern must be ^-anchored. */
|
|
5
|
+
export interface TokenPattern {
|
|
6
|
+
readonly type: string;
|
|
7
|
+
readonly pattern: RegExp;
|
|
8
|
+
}
|
|
9
|
+
/** Language definition for syntax highlighting. */
|
|
10
|
+
export interface LanguageDefinition {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly aliases: readonly string[];
|
|
13
|
+
readonly patterns: readonly TokenPattern[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=TokenizerTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenizerTypes.d.ts","sourceRoot":"","sources":["../../../../src/plugins/code-block/highlighter/TokenizerTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/code-block/highlighter/languages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/code-block/highlighter/languages/json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,kBAW3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/code-block/highlighter/languages/xml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,YAAY,EAAE,kBAc1B,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export { CodeBlockPlugin } from './CodeBlockPlugin.js';
|
|
2
|
-
export { CODE_BLOCK_SERVICE_KEY, type CodeBlockConfig, type CodeBlockKeymap, type CodeBlockService, type SyntaxHighlighter, type SyntaxToken, } from './CodeBlockTypes.js';
|
|
2
|
+
export { CODE_BLOCK_SERVICE_KEY, SYNTAX_HIGHLIGHTER_SERVICE_KEY, type CodeBlockConfig, type CodeBlockKeymap, type CodeBlockService, type SyntaxHighlighter, type SyntaxHighlighterService, type SyntaxToken, } from './CodeBlockTypes.js';
|
|
3
3
|
export type { CodeBlockLocale } from './CodeBlockLocale.js';
|
|
4
4
|
export { CODE_BLOCK_LOCALE_EN, loadCodeBlockLocale, } from './CodeBlockLocale.js';
|
|
5
|
+
export { RegexTokenizer } from './highlighter/RegexTokenizer.js';
|
|
6
|
+
export type { LanguageDefinition, TokenPattern } from './highlighter/TokenizerTypes.js';
|
|
7
|
+
export { JSON_LANGUAGE } from './highlighter/languages/json.js';
|
|
8
|
+
export { XML_LANGUAGE } from './highlighter/languages/xml.js';
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACN,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,WAAW,GAChB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACN,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/code-block/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACN,sBAAsB,EACtB,8BAA8B,EAC9B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,GAChB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACN,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC"}
|