@notectl/core 2.1.2 → 2.2.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/AlignmentPlugin-BLzRjrUl.mjs +2 -0
- package/dist/chunks/AlignmentPlugin-BLzRjrUl.mjs.map +1 -0
- package/dist/chunks/AttrRegistry-CRnXTPha.mjs +2 -0
- package/dist/chunks/AttrRegistry-CRnXTPha.mjs.map +1 -0
- package/dist/chunks/AttributedMarkCommands-CxhdUsuE.mjs +2 -0
- package/dist/chunks/AttributedMarkCommands-CxhdUsuE.mjs.map +1 -0
- package/dist/chunks/BidiIsolationPlugin-DNPXe5ga.mjs +2 -0
- package/dist/chunks/BidiIsolationPlugin-DNPXe5ga.mjs.map +1 -0
- package/dist/chunks/BlockInsertion-C7jFEeYB.mjs +2 -0
- package/dist/chunks/BlockInsertion-C7jFEeYB.mjs.map +1 -0
- package/dist/chunks/BlockTypePickerRegistry-U4uY7-lN.mjs +2 -0
- package/dist/chunks/BlockTypePickerRegistry-U4uY7-lN.mjs.map +1 -0
- package/dist/chunks/BlockquotePlugin-YgXcV4mT.mjs +2 -0
- package/dist/chunks/BlockquotePlugin-YgXcV4mT.mjs.map +1 -0
- package/dist/chunks/CaretNavigationPlugin-P6OYaTSq.mjs +2 -0
- package/dist/chunks/CaretNavigationPlugin-P6OYaTSq.mjs.map +1 -0
- package/dist/chunks/CodeBlockPlugin-ChPv3Edf.mjs +2 -0
- package/dist/chunks/CodeBlockPlugin-ChPv3Edf.mjs.map +1 -0
- package/dist/chunks/ColorGrid-D5-teEjD.mjs +2 -0
- package/dist/chunks/ColorGrid-D5-teEjD.mjs.map +1 -0
- package/dist/chunks/ColorPickerPopup-_Gp09pdx.mjs +2 -0
- package/dist/chunks/ColorPickerPopup-_Gp09pdx.mjs.map +1 -0
- package/dist/chunks/ColorValidation-okAvytHQ.mjs +2 -0
- package/dist/chunks/ColorValidation-okAvytHQ.mjs.map +1 -0
- package/dist/chunks/CommandHelpers-NV80Ff1G.mjs +2 -0
- package/dist/chunks/CommandHelpers-NV80Ff1G.mjs.map +1 -0
- package/dist/chunks/Commands-ixGhPiRG.mjs +2 -0
- package/dist/chunks/Commands-ixGhPiRG.mjs.map +1 -0
- package/dist/chunks/Decoration-DZK7hrL1.mjs +2 -0
- package/dist/chunks/Decoration-DZK7hrL1.mjs.map +1 -0
- package/dist/chunks/DirectionDetection-7HmMUZrx.mjs +2 -0
- package/dist/chunks/DirectionDetection-7HmMUZrx.mjs.map +1 -0
- package/dist/chunks/DirectionIcons-DhRvPVoz.mjs +2 -0
- package/dist/chunks/DirectionIcons-DhRvPVoz.mjs.map +1 -0
- package/dist/chunks/Document-znhIcvM9.mjs +2 -0
- package/dist/chunks/Document-znhIcvM9.mjs.map +1 -0
- package/dist/chunks/DocumentParser-DCjOW3us.mjs +2 -0
- package/dist/chunks/DocumentParser-DCjOW3us.mjs.map +1 -0
- package/dist/chunks/FontPlugin-COYtG1Uo.mjs +2 -0
- package/dist/chunks/FontPlugin-COYtG1Uo.mjs.map +1 -0
- package/dist/chunks/FontSizePlugin-CLcfdTm3.mjs +2 -0
- package/dist/chunks/FontSizePlugin-CLcfdTm3.mjs.map +1 -0
- package/dist/chunks/FormulaPlugin-DphHU4Rn.mjs +2 -0
- package/dist/chunks/FormulaPlugin-DphHU4Rn.mjs.map +1 -0
- package/dist/chunks/GapCursorNavigation-Bkuu_Ek8.mjs +2 -0
- package/dist/chunks/GapCursorNavigation-Bkuu_Ek8.mjs.map +1 -0
- package/dist/chunks/GapCursorPlugin-CRDmQEi1.mjs +2 -0
- package/dist/chunks/GapCursorPlugin-CRDmQEi1.mjs.map +1 -0
- package/dist/chunks/HardBreakPlugin-Cr6dMQ-H.mjs +2 -0
- package/dist/chunks/HardBreakPlugin-Cr6dMQ-H.mjs.map +1 -0
- package/dist/chunks/HeadingPlugin-3NL4ARPp.mjs +2 -0
- package/dist/chunks/HeadingPlugin-3NL4ARPp.mjs.map +1 -0
- package/dist/chunks/HighlightPlugin-dHxnAuoW.mjs +2 -0
- package/dist/chunks/HighlightPlugin-dHxnAuoW.mjs.map +1 -0
- package/dist/chunks/HorizontalRulePlugin-BYPaI4TR.mjs +2 -0
- package/dist/chunks/HorizontalRulePlugin-BYPaI4TR.mjs.map +1 -0
- package/dist/chunks/ImagePlugin-kgokm-a1.mjs +2 -0
- package/dist/chunks/ImagePlugin-kgokm-a1.mjs.map +1 -0
- package/dist/chunks/InlineCodePlugin-Bl1jyDwk.mjs +2 -0
- package/dist/chunks/InlineCodePlugin-Bl1jyDwk.mjs.map +1 -0
- package/dist/chunks/InlineStyleMarkSpec-Cc-b1tlm.mjs +2 -0
- package/dist/chunks/InlineStyleMarkSpec-Cc-b1tlm.mjs.map +1 -0
- package/dist/chunks/KeyboardNav-DZXdTg-_.mjs +2 -0
- package/dist/chunks/KeyboardNav-DZXdTg-_.mjs.map +1 -0
- package/dist/chunks/LinkPlugin-Dmcfo3On.mjs +2 -0
- package/dist/chunks/LinkPlugin-Dmcfo3On.mjs.map +1 -0
- package/dist/chunks/ListPlugin-Ch-5CsFc.mjs +2 -0
- package/dist/chunks/ListPlugin-Ch-5CsFc.mjs.map +1 -0
- package/dist/chunks/NavigationQueries-3zTaNBlp.mjs +2 -0
- package/dist/chunks/NavigationQueries-3zTaNBlp.mjs.map +1 -0
- package/dist/chunks/NodeResolver-BplmzA7c.mjs +2 -0
- package/dist/chunks/NodeResolver-BplmzA7c.mjs.map +1 -0
- package/dist/chunks/NodeSelectionCommands-dUmbRoZ2.mjs +2 -0
- package/dist/chunks/NodeSelectionCommands-dUmbRoZ2.mjs.map +1 -0
- package/dist/chunks/NodeSpecPatching-DToX09gc.mjs +2 -0
- package/dist/chunks/NodeSpecPatching-DToX09gc.mjs.map +1 -0
- package/dist/chunks/Platform-wPvKFB9m.mjs +2 -0
- package/dist/chunks/Platform-wPvKFB9m.mjs.map +1 -0
- package/dist/chunks/PluginHelpers-C3aCCGfX.mjs +2 -0
- package/dist/chunks/PluginHelpers-C3aCCGfX.mjs.map +1 -0
- package/dist/chunks/PopupKeyboardPatterns-ZdAQB78m.mjs +2 -0
- package/dist/chunks/PopupKeyboardPatterns-ZdAQB78m.mjs.map +1 -0
- package/dist/chunks/PopupManager-DsT1uRWi.mjs +2 -0
- package/dist/chunks/PopupManager-DsT1uRWi.mjs.map +1 -0
- package/dist/chunks/PopupPositioning-BEnz90Oh.mjs +2 -0
- package/dist/chunks/PopupPositioning-BEnz90Oh.mjs.map +1 -0
- package/dist/chunks/PrintPlugin-Bq-Z14K1.mjs +2 -0
- package/dist/chunks/PrintPlugin-Bq-Z14K1.mjs.map +1 -0
- package/dist/chunks/PrintTypes-DA0Cc--M.mjs +2 -0
- package/dist/chunks/PrintTypes-DA0Cc--M.mjs.map +1 -0
- package/dist/chunks/RangeIterator-Cl4_k8cx.mjs +2 -0
- package/dist/chunks/RangeIterator-Cl4_k8cx.mjs.map +1 -0
- package/dist/chunks/SelectionSync-DCJpNFat.mjs +2 -0
- package/dist/chunks/SelectionSync-DCJpNFat.mjs.map +1 -0
- package/dist/chunks/ShortcutFormatting-DZK70CN9.mjs +2 -0
- package/dist/chunks/ShortcutFormatting-DZK70CN9.mjs.map +1 -0
- package/dist/chunks/SimpleMark-CezTJnXh.mjs +2 -0
- package/dist/chunks/SimpleMark-CezTJnXh.mjs.map +1 -0
- package/dist/chunks/SmartPastePlugin-DlApY6Vw.mjs +2 -0
- package/dist/chunks/SmartPastePlugin-DlApY6Vw.mjs.map +1 -0
- package/dist/chunks/StrikethroughPlugin-BuFDABvz.mjs +2 -0
- package/dist/chunks/StrikethroughPlugin-BuFDABvz.mjs.map +1 -0
- package/dist/chunks/StyleRuntime-Bwde5icB.mjs +2 -0
- package/dist/chunks/StyleRuntime-Bwde5icB.mjs.map +1 -0
- package/dist/chunks/SuperSubPlugin-CiLJ7i4s.mjs +2 -0
- package/dist/chunks/SuperSubPlugin-CiLJ7i4s.mjs.map +1 -0
- package/dist/chunks/SyntaxTokenTypes-C9dGwufi.mjs +2 -0
- package/dist/chunks/SyntaxTokenTypes-C9dGwufi.mjs.map +1 -0
- package/dist/chunks/TablePlugin-5ru-y-YX.mjs +2 -0
- package/dist/chunks/TablePlugin-5ru-y-YX.mjs.map +1 -0
- package/dist/chunks/TextColorPlugin-Vz-Nz8aH.mjs +2 -0
- package/dist/chunks/TextColorPlugin-Vz-Nz8aH.mjs.map +1 -0
- package/dist/chunks/TextDirectionAutoPlugin-Behl6KMe.mjs +2 -0
- package/dist/chunks/TextDirectionAutoPlugin-Behl6KMe.mjs.map +1 -0
- package/dist/chunks/TextDirectionPlugin-C3h1n-aA.mjs +2 -0
- package/dist/chunks/TextDirectionPlugin-C3h1n-aA.mjs.map +1 -0
- package/dist/chunks/TextDirectionService-DRfeQnF6.mjs +2 -0
- package/dist/chunks/TextDirectionService-DRfeQnF6.mjs.map +1 -0
- package/dist/chunks/TextFormattingPlugin-D_nRMeBn.mjs +2 -0
- package/dist/chunks/TextFormattingPlugin-D_nRMeBn.mjs.map +1 -0
- package/dist/chunks/ToolbarPlugin-CSMSgjPM.mjs +2 -0
- package/dist/chunks/ToolbarPlugin-CSMSgjPM.mjs.map +1 -0
- package/dist/chunks/TypedKeys-E3jOGByL.mjs +2 -0
- package/dist/chunks/TypedKeys-E3jOGByL.mjs.map +1 -0
- package/dist/chunks/VideoPlugin-BUCGIYXr.mjs +2 -0
- package/dist/chunks/VideoPlugin-BUCGIYXr.mjs.map +1 -0
- package/dist/chunks/WordBoundary-CYDAtEks.mjs +2 -0
- package/dist/chunks/WordBoundary-CYDAtEks.mjs.map +1 -0
- package/dist/chunks/XmlDetector-DxBGXqua.mjs +2 -0
- package/dist/chunks/XmlDetector-DxBGXqua.mjs.map +1 -0
- package/dist/chunks/XmlPatterns-BiHS8w3k.mjs +2 -0
- package/dist/chunks/XmlPatterns-BiHS8w3k.mjs.map +1 -0
- package/dist/chunks/XmlSupport-B_F65M8G.mjs +2 -0
- package/dist/chunks/XmlSupport-B_F65M8G.mjs.map +1 -0
- package/dist/chunks/ar-B38MlRRN.mjs +2 -0
- package/dist/chunks/ar-B38MlRRN.mjs.map +1 -0
- package/dist/chunks/ar-BIeE0C5A.mjs +2 -0
- package/dist/chunks/ar-BIeE0C5A.mjs.map +1 -0
- package/dist/chunks/ar-BK0rFxF_.mjs +2 -0
- package/dist/chunks/ar-BK0rFxF_.mjs.map +1 -0
- package/dist/chunks/ar-BK4O36ep.mjs +2 -0
- package/dist/chunks/ar-BK4O36ep.mjs.map +1 -0
- package/dist/chunks/ar-BNUWuZe3.mjs +2 -0
- package/dist/chunks/ar-BNUWuZe3.mjs.map +1 -0
- package/dist/chunks/ar-BSXH8acw.mjs +2 -0
- package/dist/chunks/ar-BSXH8acw.mjs.map +1 -0
- package/dist/chunks/ar-BY8yNlGe.mjs +2 -0
- package/dist/chunks/ar-BY8yNlGe.mjs.map +1 -0
- package/dist/chunks/ar-BgHkduPE.mjs +2 -0
- package/dist/chunks/ar-BgHkduPE.mjs.map +1 -0
- package/dist/chunks/ar-BnfWtLhK.mjs +2 -0
- package/dist/chunks/ar-BnfWtLhK.mjs.map +1 -0
- package/dist/chunks/ar-BwCPhCf6.mjs +2 -0
- package/dist/chunks/ar-BwCPhCf6.mjs.map +1 -0
- package/dist/chunks/ar-Bymjd9Z_.mjs +2 -0
- package/dist/chunks/ar-Bymjd9Z_.mjs.map +1 -0
- package/dist/chunks/ar-CKPpdJ7F.mjs +2 -0
- package/dist/chunks/ar-CKPpdJ7F.mjs.map +1 -0
- package/dist/chunks/ar-C_ir5Uf4.mjs +2 -0
- package/dist/chunks/ar-C_ir5Uf4.mjs.map +1 -0
- package/dist/chunks/ar-CkE6GDVA.mjs +2 -0
- package/dist/chunks/ar-CkE6GDVA.mjs.map +1 -0
- package/dist/chunks/ar-ClgA1KQM.mjs +2 -0
- package/dist/chunks/ar-ClgA1KQM.mjs.map +1 -0
- package/dist/chunks/ar-Cm1DOK74.mjs +2 -0
- package/dist/chunks/ar-Cm1DOK74.mjs.map +1 -0
- package/dist/chunks/ar-CseGhQtS.mjs +2 -0
- package/dist/chunks/ar-CseGhQtS.mjs.map +1 -0
- package/dist/chunks/ar-D0bqkviV.mjs +2 -0
- package/dist/chunks/ar-D0bqkviV.mjs.map +1 -0
- package/dist/chunks/ar-D5d185g0.mjs +2 -0
- package/dist/chunks/ar-D5d185g0.mjs.map +1 -0
- package/dist/chunks/ar-DSwUyX47.mjs +2 -0
- package/dist/chunks/ar-DSwUyX47.mjs.map +1 -0
- package/dist/chunks/ar-DfSNWZX7.mjs +2 -0
- package/dist/chunks/ar-DfSNWZX7.mjs.map +1 -0
- package/dist/chunks/ar-Dghtfs46.mjs +2 -0
- package/dist/chunks/ar-Dghtfs46.mjs.map +1 -0
- package/dist/chunks/ar-DvNKBrJd.mjs +2 -0
- package/dist/chunks/ar-DvNKBrJd.mjs.map +1 -0
- package/dist/chunks/ar-KNULRI8r.mjs +2 -0
- package/dist/chunks/ar-KNULRI8r.mjs.map +1 -0
- package/dist/chunks/ar-NtGRavHz.mjs +2 -0
- package/dist/chunks/ar-NtGRavHz.mjs.map +1 -0
- package/dist/chunks/ar-Y9KjJLX8.mjs +2 -0
- package/dist/chunks/ar-Y9KjJLX8.mjs.map +1 -0
- package/dist/chunks/ar-odM5gkvw.mjs +2 -0
- package/dist/chunks/ar-odM5gkvw.mjs.map +1 -0
- package/dist/chunks/color-picker-C89H4SVX.mjs +2 -0
- package/dist/chunks/color-picker-C89H4SVX.mjs.map +1 -0
- package/dist/chunks/de-B1TXiyll.mjs +2 -0
- package/dist/chunks/de-B1TXiyll.mjs.map +1 -0
- package/dist/chunks/de-BDRaxLyi.mjs +2 -0
- package/dist/chunks/de-BDRaxLyi.mjs.map +1 -0
- package/dist/chunks/de-BGOpZ8Ls.mjs +2 -0
- package/dist/chunks/de-BGOpZ8Ls.mjs.map +1 -0
- package/dist/chunks/de-BfZ5qXWz.mjs +2 -0
- package/dist/chunks/de-BfZ5qXWz.mjs.map +1 -0
- package/dist/chunks/de-BibufNIa.mjs +2 -0
- package/dist/chunks/de-BibufNIa.mjs.map +1 -0
- package/dist/chunks/de-BkZqCmzL.mjs +2 -0
- package/dist/chunks/de-BkZqCmzL.mjs.map +1 -0
- package/dist/chunks/de-BzRd2oyR.mjs +2 -0
- package/dist/chunks/de-BzRd2oyR.mjs.map +1 -0
- package/dist/chunks/de-C4gnHDmk.mjs +2 -0
- package/dist/chunks/de-C4gnHDmk.mjs.map +1 -0
- package/dist/chunks/de-C4iw9SEp.mjs +2 -0
- package/dist/chunks/de-C4iw9SEp.mjs.map +1 -0
- package/dist/chunks/de-CLWzcDoW.mjs +2 -0
- package/dist/chunks/de-CLWzcDoW.mjs.map +1 -0
- package/dist/chunks/de-Cbv0otYM.mjs +2 -0
- package/dist/chunks/de-Cbv0otYM.mjs.map +1 -0
- package/dist/chunks/de-Cinp7zmo.mjs +2 -0
- package/dist/chunks/de-Cinp7zmo.mjs.map +1 -0
- package/dist/chunks/de-CvnyjI_X.mjs +2 -0
- package/dist/chunks/de-CvnyjI_X.mjs.map +1 -0
- package/dist/chunks/de-DCx3Shj3.mjs +2 -0
- package/dist/chunks/de-DCx3Shj3.mjs.map +1 -0
- package/dist/chunks/de-Dav2GzjV.mjs +2 -0
- package/dist/chunks/de-Dav2GzjV.mjs.map +1 -0
- package/dist/chunks/de-Dc7GRbWc.mjs +2 -0
- package/dist/chunks/de-Dc7GRbWc.mjs.map +1 -0
- package/dist/chunks/de-DdntlpT3.mjs +2 -0
- package/dist/chunks/de-DdntlpT3.mjs.map +1 -0
- package/dist/chunks/de-DefykdF-.mjs +2 -0
- package/dist/chunks/de-DefykdF-.mjs.map +1 -0
- package/dist/chunks/de-DfQQIP8Y.mjs +2 -0
- package/dist/chunks/de-DfQQIP8Y.mjs.map +1 -0
- package/dist/chunks/de-DkcKDkbA.mjs +2 -0
- package/dist/chunks/de-DkcKDkbA.mjs.map +1 -0
- package/dist/chunks/de-DqGfLfeV.mjs +2 -0
- package/dist/chunks/de-DqGfLfeV.mjs.map +1 -0
- package/dist/chunks/de-DudqIJho.mjs +2 -0
- package/dist/chunks/de-DudqIJho.mjs.map +1 -0
- package/dist/chunks/de-LCXA2xWj.mjs +2 -0
- package/dist/chunks/de-LCXA2xWj.mjs.map +1 -0
- package/dist/chunks/de-YygmrxGp.mjs +2 -0
- package/dist/chunks/de-YygmrxGp.mjs.map +1 -0
- package/dist/chunks/de-asI3UlFG.mjs +2 -0
- package/dist/chunks/de-asI3UlFG.mjs.map +1 -0
- package/dist/chunks/de-kvMvD3AJ.mjs +2 -0
- package/dist/chunks/de-kvMvD3AJ.mjs.map +1 -0
- package/dist/chunks/de-pnfTnS03.mjs +2 -0
- package/dist/chunks/de-pnfTnS03.mjs.map +1 -0
- package/dist/chunks/es-4tbAR0If.mjs +2 -0
- package/dist/chunks/es-4tbAR0If.mjs.map +1 -0
- package/dist/chunks/es-B9z2Xwj0.mjs +2 -0
- package/dist/chunks/es-B9z2Xwj0.mjs.map +1 -0
- package/dist/chunks/es-BJxjRQSg.mjs +2 -0
- package/dist/chunks/es-BJxjRQSg.mjs.map +1 -0
- package/dist/chunks/es-BSyxBRjn.mjs +2 -0
- package/dist/chunks/es-BSyxBRjn.mjs.map +1 -0
- package/dist/chunks/es-Bcpq2xfU.mjs +2 -0
- package/dist/chunks/es-Bcpq2xfU.mjs.map +1 -0
- package/dist/chunks/es-BhUjc8mO.mjs +2 -0
- package/dist/chunks/es-BhUjc8mO.mjs.map +1 -0
- package/dist/chunks/es-Bm7hoJSI.mjs +2 -0
- package/dist/chunks/es-Bm7hoJSI.mjs.map +1 -0
- package/dist/chunks/es-C0E-lFIC.mjs +2 -0
- package/dist/chunks/es-C0E-lFIC.mjs.map +1 -0
- package/dist/chunks/es-C2wBBQ7N.mjs +2 -0
- package/dist/chunks/es-C2wBBQ7N.mjs.map +1 -0
- package/dist/chunks/es-C9vhYpfP.mjs +2 -0
- package/dist/chunks/es-C9vhYpfP.mjs.map +1 -0
- package/dist/chunks/es-Cgslt0Hp.mjs +2 -0
- package/dist/chunks/es-Cgslt0Hp.mjs.map +1 -0
- package/dist/chunks/es-CksXDFxg.mjs +2 -0
- package/dist/chunks/es-CksXDFxg.mjs.map +1 -0
- package/dist/chunks/es-CnQUZlfY.mjs +2 -0
- package/dist/chunks/es-CnQUZlfY.mjs.map +1 -0
- package/dist/chunks/es-CrRNOn2Q.mjs +2 -0
- package/dist/chunks/es-CrRNOn2Q.mjs.map +1 -0
- package/dist/chunks/es-D0427MIH.mjs +2 -0
- package/dist/chunks/es-D0427MIH.mjs.map +1 -0
- package/dist/chunks/es-D19xfXus.mjs +2 -0
- package/dist/chunks/es-D19xfXus.mjs.map +1 -0
- package/dist/chunks/es-Dk6lCcOt.mjs +2 -0
- package/dist/chunks/es-Dk6lCcOt.mjs.map +1 -0
- package/dist/chunks/es-Dls_xPCW.mjs +2 -0
- package/dist/chunks/es-Dls_xPCW.mjs.map +1 -0
- package/dist/chunks/es-DrcsyDvI.mjs +2 -0
- package/dist/chunks/es-DrcsyDvI.mjs.map +1 -0
- package/dist/chunks/es-DwKejbO9.mjs +2 -0
- package/dist/chunks/es-DwKejbO9.mjs.map +1 -0
- package/dist/chunks/es-NcrWuNe1.mjs +2 -0
- package/dist/chunks/es-NcrWuNe1.mjs.map +1 -0
- package/dist/chunks/es-RaZerssd.mjs +2 -0
- package/dist/chunks/es-RaZerssd.mjs.map +1 -0
- package/dist/chunks/es-TIjHCFNF.mjs +2 -0
- package/dist/chunks/es-TIjHCFNF.mjs.map +1 -0
- package/dist/chunks/es-eZcDkBb-.mjs +2 -0
- package/dist/chunks/es-eZcDkBb-.mjs.map +1 -0
- package/dist/chunks/es-j_-KW9-4.mjs +2 -0
- package/dist/chunks/es-j_-KW9-4.mjs.map +1 -0
- package/dist/chunks/es-kGLwn8EB.mjs +2 -0
- package/dist/chunks/es-kGLwn8EB.mjs.map +1 -0
- package/dist/chunks/es-qQRDC0Ge.mjs +2 -0
- package/dist/chunks/es-qQRDC0Ge.mjs.map +1 -0
- package/dist/chunks/fonts-ZXAIMT3b.mjs +2 -0
- package/dist/chunks/fonts-ZXAIMT3b.mjs.map +1 -0
- package/dist/chunks/fr-B27zAq0X.mjs +2 -0
- package/dist/chunks/fr-B27zAq0X.mjs.map +1 -0
- package/dist/chunks/fr-BEd3ZHO4.mjs +2 -0
- package/dist/chunks/fr-BEd3ZHO4.mjs.map +1 -0
- package/dist/chunks/fr-BHXLpdaH.mjs +2 -0
- package/dist/chunks/fr-BHXLpdaH.mjs.map +1 -0
- package/dist/chunks/fr-BKu4eU3V.mjs +2 -0
- package/dist/chunks/fr-BKu4eU3V.mjs.map +1 -0
- package/dist/chunks/fr-BUrUZ5UQ.mjs +2 -0
- package/dist/chunks/fr-BUrUZ5UQ.mjs.map +1 -0
- package/dist/chunks/fr-BlqlUQ3b.mjs +2 -0
- package/dist/chunks/fr-BlqlUQ3b.mjs.map +1 -0
- package/dist/chunks/fr-BruEqDw1.mjs +2 -0
- package/dist/chunks/fr-BruEqDw1.mjs.map +1 -0
- package/dist/chunks/fr-BwuuFBkA.mjs +2 -0
- package/dist/chunks/fr-BwuuFBkA.mjs.map +1 -0
- package/dist/chunks/fr-C2lLh5Ti.mjs +2 -0
- package/dist/chunks/fr-C2lLh5Ti.mjs.map +1 -0
- package/dist/chunks/fr-C7N2_AlK.mjs +2 -0
- package/dist/chunks/fr-C7N2_AlK.mjs.map +1 -0
- package/dist/chunks/fr-COfd6sLW.mjs +2 -0
- package/dist/chunks/fr-COfd6sLW.mjs.map +1 -0
- package/dist/chunks/fr-COx4cSxc.mjs +2 -0
- package/dist/chunks/fr-COx4cSxc.mjs.map +1 -0
- package/dist/chunks/fr-CX37XjPO.mjs +2 -0
- package/dist/chunks/fr-CX37XjPO.mjs.map +1 -0
- package/dist/chunks/fr-CYn6fMiH.mjs +2 -0
- package/dist/chunks/fr-CYn6fMiH.mjs.map +1 -0
- package/dist/chunks/fr-CbsiyDEa.mjs +2 -0
- package/dist/chunks/fr-CbsiyDEa.mjs.map +1 -0
- package/dist/chunks/fr-CcZiELJY.mjs +2 -0
- package/dist/chunks/fr-CcZiELJY.mjs.map +1 -0
- package/dist/chunks/fr-CeHzUPVT.mjs +2 -0
- package/dist/chunks/fr-CeHzUPVT.mjs.map +1 -0
- package/dist/chunks/fr-Cv73J4QZ.mjs +2 -0
- package/dist/chunks/fr-Cv73J4QZ.mjs.map +1 -0
- package/dist/chunks/fr-DDLuorz7.mjs +2 -0
- package/dist/chunks/fr-DDLuorz7.mjs.map +1 -0
- package/dist/chunks/fr-DMA4CAyo.mjs +2 -0
- package/dist/chunks/fr-DMA4CAyo.mjs.map +1 -0
- package/dist/chunks/fr-DNJuGtO1.mjs +2 -0
- package/dist/chunks/fr-DNJuGtO1.mjs.map +1 -0
- package/dist/chunks/fr-DQOE8O6_.mjs +2 -0
- package/dist/chunks/fr-DQOE8O6_.mjs.map +1 -0
- package/dist/chunks/fr-DXjOwGew.mjs +2 -0
- package/dist/chunks/fr-DXjOwGew.mjs.map +1 -0
- package/dist/chunks/fr-DilrEvE_.mjs +2 -0
- package/dist/chunks/fr-DilrEvE_.mjs.map +1 -0
- package/dist/chunks/fr-P7iY3ntE.mjs +2 -0
- package/dist/chunks/fr-P7iY3ntE.mjs.map +1 -0
- package/dist/chunks/fr-ViUNGo_J.mjs +2 -0
- package/dist/chunks/fr-ViUNGo_J.mjs.map +1 -0
- package/dist/chunks/fr-gdIyLcGC.mjs +2 -0
- package/dist/chunks/fr-gdIyLcGC.mjs.map +1 -0
- package/dist/chunks/full-h88Sb2MR.mjs +2 -0
- package/dist/chunks/full-h88Sb2MR.mjs.map +1 -0
- package/dist/chunks/hi-BC82Jxjl.mjs +2 -0
- package/dist/chunks/hi-BC82Jxjl.mjs.map +1 -0
- package/dist/chunks/hi-BCTarnem.mjs +2 -0
- package/dist/chunks/hi-BCTarnem.mjs.map +1 -0
- package/dist/chunks/hi-BMStjhJF.mjs +2 -0
- package/dist/chunks/hi-BMStjhJF.mjs.map +1 -0
- package/dist/chunks/hi-BQ2Fyx7t.mjs +2 -0
- package/dist/chunks/hi-BQ2Fyx7t.mjs.map +1 -0
- package/dist/chunks/hi-Bg4-z2Os.mjs +2 -0
- package/dist/chunks/hi-Bg4-z2Os.mjs.map +1 -0
- package/dist/chunks/hi-BgqI_gOH.mjs +2 -0
- package/dist/chunks/hi-BgqI_gOH.mjs.map +1 -0
- package/dist/chunks/hi-CEPSeUBX.mjs +2 -0
- package/dist/chunks/hi-CEPSeUBX.mjs.map +1 -0
- package/dist/chunks/hi-CRaZj5Uo.mjs +2 -0
- package/dist/chunks/hi-CRaZj5Uo.mjs.map +1 -0
- package/dist/chunks/hi-CT0uK1Me.mjs +2 -0
- package/dist/chunks/hi-CT0uK1Me.mjs.map +1 -0
- package/dist/chunks/hi-CnIpMd8L.mjs +2 -0
- package/dist/chunks/hi-CnIpMd8L.mjs.map +1 -0
- package/dist/chunks/hi-CnSv0JhL.mjs +2 -0
- package/dist/chunks/hi-CnSv0JhL.mjs.map +1 -0
- package/dist/chunks/hi-DLLBZu67.mjs +2 -0
- package/dist/chunks/hi-DLLBZu67.mjs.map +1 -0
- package/dist/chunks/hi-DMg_aiSR.mjs +2 -0
- package/dist/chunks/hi-DMg_aiSR.mjs.map +1 -0
- package/dist/chunks/hi-DWwLzOX5.mjs +2 -0
- package/dist/chunks/hi-DWwLzOX5.mjs.map +1 -0
- package/dist/chunks/hi-D_4Xi4Nv.mjs +2 -0
- package/dist/chunks/hi-D_4Xi4Nv.mjs.map +1 -0
- package/dist/chunks/hi-D_Jtykmj.mjs +2 -0
- package/dist/chunks/hi-D_Jtykmj.mjs.map +1 -0
- package/dist/chunks/hi-Da5pRz8E.mjs +2 -0
- package/dist/chunks/hi-Da5pRz8E.mjs.map +1 -0
- package/dist/chunks/hi-DqL20WmM.mjs +2 -0
- package/dist/chunks/hi-DqL20WmM.mjs.map +1 -0
- package/dist/chunks/hi-DwQopxRg.mjs +2 -0
- package/dist/chunks/hi-DwQopxRg.mjs.map +1 -0
- package/dist/chunks/hi-IuMohSSw.mjs +2 -0
- package/dist/chunks/hi-IuMohSSw.mjs.map +1 -0
- package/dist/chunks/hi-PUX7dDPm.mjs +2 -0
- package/dist/chunks/hi-PUX7dDPm.mjs.map +1 -0
- package/dist/chunks/hi-RmfZAmwT.mjs +2 -0
- package/dist/chunks/hi-RmfZAmwT.mjs.map +1 -0
- package/dist/chunks/hi-UIBrTEVu.mjs +2 -0
- package/dist/chunks/hi-UIBrTEVu.mjs.map +1 -0
- package/dist/chunks/hi-_SjWnfeh.mjs +2 -0
- package/dist/chunks/hi-_SjWnfeh.mjs.map +1 -0
- package/dist/chunks/hi-dV2GZgH_.mjs +2 -0
- package/dist/chunks/hi-dV2GZgH_.mjs.map +1 -0
- package/dist/chunks/hi-ehh5oKz3.mjs +2 -0
- package/dist/chunks/hi-ehh5oKz3.mjs.map +1 -0
- package/dist/chunks/hi-yXnRBFJK.mjs +2 -0
- package/dist/chunks/hi-yXnRBFJK.mjs.map +1 -0
- package/dist/chunks/minimal-a40NeBQ_.mjs +2 -0
- package/dist/chunks/minimal-a40NeBQ_.mjs.map +1 -0
- package/dist/chunks/pt-2a8Oto6x.mjs +2 -0
- package/dist/chunks/pt-2a8Oto6x.mjs.map +1 -0
- package/dist/chunks/pt-ALzIyTiI.mjs +2 -0
- package/dist/chunks/pt-ALzIyTiI.mjs.map +1 -0
- package/dist/chunks/pt-B2hMlTc6.mjs +2 -0
- package/dist/chunks/pt-B2hMlTc6.mjs.map +1 -0
- package/dist/chunks/pt-BCIkSb0w.mjs +2 -0
- package/dist/chunks/pt-BCIkSb0w.mjs.map +1 -0
- package/dist/chunks/pt-BFotmq5x.mjs +2 -0
- package/dist/chunks/pt-BFotmq5x.mjs.map +1 -0
- package/dist/chunks/pt-BM7OScX6.mjs +2 -0
- package/dist/chunks/pt-BM7OScX6.mjs.map +1 -0
- package/dist/chunks/pt-BM7zXWxW.mjs +2 -0
- package/dist/chunks/pt-BM7zXWxW.mjs.map +1 -0
- package/dist/chunks/pt-BchCuzFq.mjs +2 -0
- package/dist/chunks/pt-BchCuzFq.mjs.map +1 -0
- package/dist/chunks/pt-BmcHFWoR.mjs +2 -0
- package/dist/chunks/pt-BmcHFWoR.mjs.map +1 -0
- package/dist/chunks/pt-C53W99RV.mjs +2 -0
- package/dist/chunks/pt-C53W99RV.mjs.map +1 -0
- package/dist/chunks/pt-CORQy8qv.mjs +2 -0
- package/dist/chunks/pt-CORQy8qv.mjs.map +1 -0
- package/dist/chunks/pt-CUPKr943.mjs +2 -0
- package/dist/chunks/pt-CUPKr943.mjs.map +1 -0
- package/dist/chunks/pt-CYkKDsLa.mjs +2 -0
- package/dist/chunks/pt-CYkKDsLa.mjs.map +1 -0
- package/dist/chunks/pt-Cd_SXHKt.mjs +2 -0
- package/dist/chunks/pt-Cd_SXHKt.mjs.map +1 -0
- package/dist/chunks/pt-CjN3Oq-6.mjs +2 -0
- package/dist/chunks/pt-CjN3Oq-6.mjs.map +1 -0
- package/dist/chunks/pt-CrKrgktr.mjs +2 -0
- package/dist/chunks/pt-CrKrgktr.mjs.map +1 -0
- package/dist/chunks/pt-Crmbkj0e.mjs +2 -0
- package/dist/chunks/pt-Crmbkj0e.mjs.map +1 -0
- package/dist/chunks/pt-D19IWOM_.mjs +2 -0
- package/dist/chunks/pt-D19IWOM_.mjs.map +1 -0
- package/dist/chunks/pt-D6zY7l2E.mjs +2 -0
- package/dist/chunks/pt-D6zY7l2E.mjs.map +1 -0
- package/dist/chunks/pt-DA5hufLZ.mjs +2 -0
- package/dist/chunks/pt-DA5hufLZ.mjs.map +1 -0
- package/dist/chunks/pt-DEfBqu-c.mjs +2 -0
- package/dist/chunks/pt-DEfBqu-c.mjs.map +1 -0
- package/dist/chunks/pt-DG3rw6nK.mjs +2 -0
- package/dist/chunks/pt-DG3rw6nK.mjs.map +1 -0
- package/dist/chunks/pt-DRoAHNZi.mjs +2 -0
- package/dist/chunks/pt-DRoAHNZi.mjs.map +1 -0
- package/dist/chunks/pt-Eml9QiUL.mjs +2 -0
- package/dist/chunks/pt-Eml9QiUL.mjs.map +1 -0
- package/dist/chunks/pt-Haa3wVmA.mjs +2 -0
- package/dist/chunks/pt-Haa3wVmA.mjs.map +1 -0
- package/dist/chunks/pt-aj7zOxTg.mjs +2 -0
- package/dist/chunks/pt-aj7zOxTg.mjs.map +1 -0
- package/dist/chunks/pt-l6dTmkQk.mjs +2 -0
- package/dist/chunks/pt-l6dTmkQk.mjs.map +1 -0
- package/dist/chunks/ru--JPEpdcJ.mjs +2 -0
- package/dist/chunks/ru--JPEpdcJ.mjs.map +1 -0
- package/dist/chunks/ru-B76ORyqe.mjs +2 -0
- package/dist/chunks/ru-B76ORyqe.mjs.map +1 -0
- package/dist/chunks/ru-BDQ62WuE.mjs +2 -0
- package/dist/chunks/ru-BDQ62WuE.mjs.map +1 -0
- package/dist/chunks/ru-BQ6W3lwr.mjs +2 -0
- package/dist/chunks/ru-BQ6W3lwr.mjs.map +1 -0
- package/dist/chunks/ru-BQpaitci.mjs +2 -0
- package/dist/chunks/ru-BQpaitci.mjs.map +1 -0
- package/dist/chunks/ru-Bm9VwJLu.mjs +2 -0
- package/dist/chunks/ru-Bm9VwJLu.mjs.map +1 -0
- package/dist/chunks/ru-BnNdik6i.mjs +2 -0
- package/dist/chunks/ru-BnNdik6i.mjs.map +1 -0
- package/dist/chunks/ru-Bo4am8cd.mjs +2 -0
- package/dist/chunks/ru-Bo4am8cd.mjs.map +1 -0
- package/dist/chunks/ru-C1k56xWQ.mjs +2 -0
- package/dist/chunks/ru-C1k56xWQ.mjs.map +1 -0
- package/dist/chunks/ru-C4rnSQlI.mjs +2 -0
- package/dist/chunks/ru-C4rnSQlI.mjs.map +1 -0
- package/dist/chunks/ru-CKM3t1sv.mjs +2 -0
- package/dist/chunks/ru-CKM3t1sv.mjs.map +1 -0
- package/dist/chunks/ru-CO6eCsxU.mjs +2 -0
- package/dist/chunks/ru-CO6eCsxU.mjs.map +1 -0
- package/dist/chunks/ru-CTaYpQ9_.mjs +2 -0
- package/dist/chunks/ru-CTaYpQ9_.mjs.map +1 -0
- package/dist/chunks/ru-CdY8d80t.mjs +2 -0
- package/dist/chunks/ru-CdY8d80t.mjs.map +1 -0
- package/dist/chunks/ru-CsDtaWRd.mjs +2 -0
- package/dist/chunks/ru-CsDtaWRd.mjs.map +1 -0
- package/dist/chunks/ru-Cy_4nn8h.mjs +2 -0
- package/dist/chunks/ru-Cy_4nn8h.mjs.map +1 -0
- package/dist/chunks/ru-DACtjNuJ.mjs +2 -0
- package/dist/chunks/ru-DACtjNuJ.mjs.map +1 -0
- package/dist/chunks/ru-DN6yN_w9.mjs +2 -0
- package/dist/chunks/ru-DN6yN_w9.mjs.map +1 -0
- package/dist/chunks/ru-DThFtd76.mjs +2 -0
- package/dist/chunks/ru-DThFtd76.mjs.map +1 -0
- package/dist/chunks/ru-Dd_P7hP7.mjs +2 -0
- package/dist/chunks/ru-Dd_P7hP7.mjs.map +1 -0
- package/dist/chunks/ru-Dhuxwzwy.mjs +2 -0
- package/dist/chunks/ru-Dhuxwzwy.mjs.map +1 -0
- package/dist/chunks/ru-Dn6UDGIG.mjs +2 -0
- package/dist/chunks/ru-Dn6UDGIG.mjs.map +1 -0
- package/dist/chunks/ru-DojHc5wu.mjs +2 -0
- package/dist/chunks/ru-DojHc5wu.mjs.map +1 -0
- package/dist/chunks/ru-DyWzWBjV.mjs +2 -0
- package/dist/chunks/ru-DyWzWBjV.mjs.map +1 -0
- package/dist/chunks/ru-NBxCkjlP.mjs +2 -0
- package/dist/chunks/ru-NBxCkjlP.mjs.map +1 -0
- package/dist/chunks/ru-_MQaVHam.mjs +2 -0
- package/dist/chunks/ru-_MQaVHam.mjs.map +1 -0
- package/dist/chunks/ru-wv17PPrd.mjs +2 -0
- package/dist/chunks/ru-wv17PPrd.mjs.map +1 -0
- package/dist/chunks/src-ooaZ_Egu.mjs +2 -0
- package/dist/chunks/src-ooaZ_Egu.mjs.map +1 -0
- package/dist/chunks/zh-2-Y3Limy.mjs +2 -0
- package/dist/chunks/zh-2-Y3Limy.mjs.map +1 -0
- package/dist/chunks/zh-B02VPMqX.mjs +2 -0
- package/dist/chunks/zh-B02VPMqX.mjs.map +1 -0
- package/dist/chunks/zh-BYjLBWWN.mjs +2 -0
- package/dist/chunks/zh-BYjLBWWN.mjs.map +1 -0
- package/dist/chunks/zh-Bt2ZdHcS.mjs +2 -0
- package/dist/chunks/zh-Bt2ZdHcS.mjs.map +1 -0
- package/dist/chunks/zh-BuN_C4o-.mjs +2 -0
- package/dist/chunks/zh-BuN_C4o-.mjs.map +1 -0
- package/dist/chunks/zh-CA3BDj0Y.mjs +2 -0
- package/dist/chunks/zh-CA3BDj0Y.mjs.map +1 -0
- package/dist/chunks/zh-CHuGP7RS.mjs +2 -0
- package/dist/chunks/zh-CHuGP7RS.mjs.map +1 -0
- package/dist/chunks/zh-CIPsF5P8.mjs +2 -0
- package/dist/chunks/zh-CIPsF5P8.mjs.map +1 -0
- package/dist/chunks/zh-C_YS18re.mjs +2 -0
- package/dist/chunks/zh-C_YS18re.mjs.map +1 -0
- package/dist/chunks/zh-CfMPFWUg.mjs +2 -0
- package/dist/chunks/zh-CfMPFWUg.mjs.map +1 -0
- package/dist/chunks/zh-CfjCcBIB.mjs +2 -0
- package/dist/chunks/zh-CfjCcBIB.mjs.map +1 -0
- package/dist/chunks/zh-CqQph809.mjs +2 -0
- package/dist/chunks/zh-CqQph809.mjs.map +1 -0
- package/dist/chunks/zh-Cxe42GC5.mjs +2 -0
- package/dist/chunks/zh-Cxe42GC5.mjs.map +1 -0
- package/dist/chunks/zh-CyMU2cTf.mjs +2 -0
- package/dist/chunks/zh-CyMU2cTf.mjs.map +1 -0
- package/dist/chunks/zh-Cynz1sBa.mjs +2 -0
- package/dist/chunks/zh-Cynz1sBa.mjs.map +1 -0
- package/dist/chunks/zh-DRKs6Q0a.mjs +2 -0
- package/dist/chunks/zh-DRKs6Q0a.mjs.map +1 -0
- package/dist/chunks/zh-DTuIJjx6.mjs +2 -0
- package/dist/chunks/zh-DTuIJjx6.mjs.map +1 -0
- package/dist/chunks/zh-DTz9l6mp.mjs +2 -0
- package/dist/chunks/zh-DTz9l6mp.mjs.map +1 -0
- package/dist/chunks/zh-DZwjiJmn.mjs +2 -0
- package/dist/chunks/zh-DZwjiJmn.mjs.map +1 -0
- package/dist/chunks/zh-D_VJDQl4.mjs +2 -0
- package/dist/chunks/zh-D_VJDQl4.mjs.map +1 -0
- package/dist/chunks/zh-Dt20Om7Z.mjs +2 -0
- package/dist/chunks/zh-Dt20Om7Z.mjs.map +1 -0
- package/dist/chunks/zh-SgsZ9f-W.mjs +2 -0
- package/dist/chunks/zh-SgsZ9f-W.mjs.map +1 -0
- package/dist/chunks/zh-XR7Ls7m-.mjs +2 -0
- package/dist/chunks/zh-XR7Ls7m-.mjs.map +1 -0
- package/dist/chunks/zh-aXPI9lKF.mjs +2 -0
- package/dist/chunks/zh-aXPI9lKF.mjs.map +1 -0
- package/dist/chunks/zh-cLXIKkZQ.mjs +2 -0
- package/dist/chunks/zh-cLXIKkZQ.mjs.map +1 -0
- package/dist/chunks/zh-cZUtN871.mjs +2 -0
- package/dist/chunks/zh-cZUtN871.mjs.map +1 -0
- package/dist/chunks/zh-hcdnCGUp.mjs +2 -0
- package/dist/chunks/zh-hcdnCGUp.mjs.map +1 -0
- package/dist/commands/AttributedMarkCommands.d.ts.map +1 -1
- package/dist/commands/BlockInsertion.d.ts +27 -0
- package/dist/commands/BlockInsertion.d.ts.map +1 -1
- package/dist/commands/CommandHelpers.d.ts +12 -0
- package/dist/commands/CommandHelpers.d.ts.map +1 -1
- package/dist/commands/Commands.d.ts.map +1 -1
- package/dist/commands/ContainerCommands.d.ts +24 -0
- package/dist/commands/ContainerCommands.d.ts.map +1 -0
- package/dist/commands/CursorMarks.d.ts +13 -0
- package/dist/commands/CursorMarks.d.ts.map +1 -0
- package/dist/commands/GapCursorCommands.d.ts.map +1 -1
- package/dist/commands/MarkCommands.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/commands/SelectionDeletion.d.ts +25 -0
- package/dist/commands/SelectionDeletion.d.ts.map +1 -0
- package/dist/decorations/Decoration.d.ts +6 -0
- package/dist/decorations/Decoration.d.ts.map +1 -1
- package/dist/decorations/PositionMapping.d.ts +13 -3
- package/dist/decorations/PositionMapping.d.ts.map +1 -1
- package/dist/editor/ContentSerializer.d.ts +1 -1
- package/dist/editor/ContentSerializer.d.ts.map +1 -1
- package/dist/editor/EditorConfig.d.ts +14 -2
- package/dist/editor/EditorConfig.d.ts.map +1 -1
- package/dist/editor/EditorDOM.d.ts.map +1 -1
- package/dist/editor/EditorInitializer.d.ts.map +1 -1
- package/dist/editor/NotectlEditor.d.ts +12 -7
- package/dist/editor/NotectlEditor.d.ts.map +1 -1
- package/dist/editor/PluginBootstrapper.d.ts.map +1 -1
- package/dist/editor/styles/base.d.ts +1 -1
- package/dist/editor/styles/base.d.ts.map +1 -1
- package/dist/editor/styles/table.d.ts +1 -1
- package/dist/editor/styles/table.d.ts.map +1 -1
- package/dist/editor/styles/toolbar.d.ts +1 -1
- package/dist/editor/styles/toolbar.d.ts.map +1 -1
- package/dist/fonts.d.ts +11 -0
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.mjs +1 -1
- package/dist/full.d.ts +2 -0
- package/dist/full.d.ts.map +1 -1
- package/dist/full.mjs +1 -1
- package/dist/html.d.ts +1 -1
- package/dist/html.d.ts.map +1 -1
- package/dist/html.mjs +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/input/ClipboardHandler.d.ts.map +1 -1
- package/dist/input/HTMLParser.d.ts +3 -0
- package/dist/input/HTMLParser.d.ts.map +1 -1
- package/dist/input/InputHandler.d.ts +9 -0
- package/dist/input/InputHandler.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/KeyboardHandler.d.ts.map +1 -1
- package/dist/input/PasteHTMLHandler.d.ts +1 -1
- package/dist/input/PasteHTMLHandler.d.ts.map +1 -1
- package/dist/input/PasteRichBlockHandler.d.ts +1 -1
- package/dist/input/PasteRichBlockHandler.d.ts.map +1 -1
- package/dist/input/SelectionDocument.d.ts.map +1 -1
- package/dist/model/ContentSlice.d.ts +6 -7
- package/dist/model/ContentSlice.d.ts.map +1 -1
- package/dist/model/Document.d.ts +34 -0
- package/dist/model/Document.d.ts.map +1 -1
- package/dist/model/GraphemeUtils.d.ts +8 -2
- package/dist/model/GraphemeUtils.d.ts.map +1 -1
- package/dist/model/MarkSpec.d.ts +6 -0
- package/dist/model/MarkSpec.d.ts.map +1 -1
- package/dist/model/NodeResolver.d.ts +18 -0
- package/dist/model/NodeResolver.d.ts.map +1 -1
- package/dist/model/Schema.d.ts +6 -0
- package/dist/model/Schema.d.ts.map +1 -1
- package/dist/model/SchemaRegistry.d.ts.map +1 -1
- package/dist/model/TextInputInterceptor.d.ts +21 -0
- package/dist/model/TextInputInterceptor.d.ts.map +1 -0
- 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/MiddlewareChain.d.ts +11 -0
- package/dist/plugins/MiddlewareChain.d.ts.map +1 -1
- package/dist/plugins/Plugin.d.ts +7 -0
- package/dist/plugins/Plugin.d.ts.map +1 -1
- package/dist/plugins/PluginContextFactory.d.ts +6 -0
- package/dist/plugins/PluginContextFactory.d.ts.map +1 -1
- package/dist/plugins/PluginManager.d.ts +5 -0
- package/dist/plugins/PluginManager.d.ts.map +1 -1
- package/dist/plugins/RegistrationTracker.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/bidi-isolation/BidiIsolationPlugin.d.ts.map +1 -1
- package/dist/plugins/bidi-isolation.mjs +1 -1
- package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts +1 -1
- package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts.map +1 -1
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts +13 -3
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
- package/dist/plugins/blockquote/BlockquoteStyles.d.ts +1 -1
- package/dist/plugins/blockquote/BlockquoteStyles.d.ts.map +1 -1
- package/dist/plugins/blockquote.mjs +1 -1
- package/dist/plugins/caret-navigation.mjs +1 -1
- package/dist/plugins/code-block/AutoPairController.d.ts +50 -0
- package/dist/plugins/code-block/AutoPairController.d.ts.map +1 -0
- package/dist/plugins/code-block/BracketPairing.d.ts +49 -0
- package/dist/plugins/code-block/BracketPairing.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockDecorations.d.ts +16 -0
- package/dist/plugins/code-block/CodeBlockDecorations.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockHighlighting.d.ts +10 -0
- package/dist/plugins/code-block/CodeBlockHighlighting.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts +11 -2
- package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockLocale.d.ts +4 -0
- package/dist/plugins/code-block/CodeBlockLocale.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts +4 -14
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockSchema.d.ts +11 -0
- package/dist/plugins/code-block/CodeBlockSchema.d.ts.map +1 -0
- package/dist/plugins/code-block/CodeBlockTypes.d.ts +66 -0
- package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -1
- package/dist/plugins/code-block/IndentHelpers.d.ts +71 -0
- package/dist/plugins/code-block/IndentHelpers.d.ts.map +1 -0
- package/dist/plugins/code-block/PairStack.d.ts +37 -0
- package/dist/plugins/code-block/PairStack.d.ts.map +1 -0
- package/dist/plugins/code-block/TokenCache.d.ts +21 -0
- package/dist/plugins/code-block/TokenCache.d.ts.map +1 -0
- package/dist/plugins/code-block/highlighter/RegexTokenizer.d.ts.map +1 -1
- package/dist/plugins/code-block/highlighter/TokenIteration.d.ts +18 -0
- package/dist/plugins/code-block/highlighter/TokenIteration.d.ts.map +1 -0
- package/dist/plugins/code-block/highlighter/languages/index.d.ts +1 -0
- package/dist/plugins/code-block/highlighter/languages/index.d.ts.map +1 -1
- package/dist/plugins/code-block/highlighter/languages/java.d.ts.map +1 -1
- package/dist/plugins/code-block/highlighter/languages/typescript.d.ts +3 -0
- package/dist/plugins/code-block/highlighter/languages/typescript.d.ts.map +1 -0
- package/dist/plugins/code-block/index.d.ts +1 -0
- package/dist/plugins/code-block/index.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/ar.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/de.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/es.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/fr.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/hi.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/pt.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/ru.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/zh.d.ts.map +1 -1
- package/dist/plugins/code-block.mjs +1 -1
- package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizeOperations.d.ts +7 -3
- package/dist/plugins/font-size/FontSizeOperations.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.mjs +1 -1
- package/dist/plugins/formula/DisplayMathNodeSpec.d.ts +5 -0
- package/dist/plugins/formula/DisplayMathNodeSpec.d.ts.map +1 -0
- package/dist/plugins/formula/DisplayMathNodeView.d.ts +12 -0
- package/dist/plugins/formula/DisplayMathNodeView.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaCommands.d.ts +35 -0
- package/dist/plugins/formula/FormulaCommands.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaEditTrigger.d.ts +12 -0
- package/dist/plugins/formula/FormulaEditTrigger.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaEditorMount.d.ts +19 -0
- package/dist/plugins/formula/FormulaEditorMount.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaInputRules.d.ts +4 -0
- package/dist/plugins/formula/FormulaInputRules.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaLocale.d.ts +45 -0
- package/dist/plugins/formula/FormulaLocale.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaOverlay.d.ts +38 -0
- package/dist/plugins/formula/FormulaOverlay.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaPasteInterceptor.d.ts +10 -0
- package/dist/plugins/formula/FormulaPasteInterceptor.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaPlugin.d.ts +22 -0
- package/dist/plugins/formula/FormulaPlugin.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaRendering.d.ts +18 -0
- package/dist/plugins/formula/FormulaRendering.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaStyles.d.ts +12 -0
- package/dist/plugins/formula/FormulaStyles.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaToolbar.d.ts +5 -0
- package/dist/plugins/formula/FormulaToolbar.d.ts.map +1 -0
- package/dist/plugins/formula/FormulaTypes.d.ts +64 -0
- package/dist/plugins/formula/FormulaTypes.d.ts.map +1 -0
- package/dist/plugins/formula/InlineMathNodeSpec.d.ts +5 -0
- package/dist/plugins/formula/InlineMathNodeSpec.d.ts.map +1 -0
- package/dist/plugins/formula/MathFont.d.ts +4 -0
- package/dist/plugins/formula/MathFont.d.ts.map +1 -0
- package/dist/plugins/formula/MathFontFace.d.ts +4 -0
- package/dist/plugins/formula/MathFontFace.d.ts.map +1 -0
- package/dist/plugins/formula/index.d.ts +14 -0
- package/dist/plugins/formula/index.d.ts.map +1 -0
- package/dist/plugins/formula/latex/LatexParser.d.ts +8 -0
- package/dist/plugins/formula/latex/LatexParser.d.ts.map +1 -0
- package/dist/plugins/formula/latex/LatexParserTypes.d.ts +61 -0
- package/dist/plugins/formula/latex/LatexParserTypes.d.ts.map +1 -0
- package/dist/plugins/formula/latex/LatexSymbols.d.ts +87 -0
- package/dist/plugins/formula/latex/LatexSymbols.d.ts.map +1 -0
- package/dist/plugins/formula/latex/LatexToMathML.d.ts +33 -0
- package/dist/plugins/formula/latex/LatexToMathML.d.ts.map +1 -0
- package/dist/plugins/formula/latex/LatexTokenizer.d.ts +45 -0
- package/dist/plugins/formula/latex/LatexTokenizer.d.ts.map +1 -0
- package/dist/plugins/formula/latex/MathAlphabet.d.ts +42 -0
- package/dist/plugins/formula/latex/MathAlphabet.d.ts.map +1 -0
- package/dist/plugins/formula/latex/handlers/Accents.d.ts +6 -0
- package/dist/plugins/formula/latex/handlers/Accents.d.ts.map +1 -0
- package/dist/plugins/formula/latex/handlers/Delimiters.d.ts +12 -0
- package/dist/plugins/formula/latex/handlers/Delimiters.d.ts.map +1 -0
- package/dist/plugins/formula/latex/handlers/Environments.d.ts +9 -0
- package/dist/plugins/formula/latex/handlers/Environments.d.ts.map +1 -0
- package/dist/plugins/formula/latex/handlers/Fonts.d.ts +6 -0
- package/dist/plugins/formula/latex/handlers/Fonts.d.ts.map +1 -0
- package/dist/plugins/formula/latex/handlers/Spacing.d.ts +13 -0
- package/dist/plugins/formula/latex/handlers/Spacing.d.ts.map +1 -0
- package/dist/plugins/formula/latex/handlers/Structures.d.ts +19 -0
- package/dist/plugins/formula/latex/handlers/Structures.d.ts.map +1 -0
- package/dist/plugins/formula/latex/index.d.ts +11 -0
- package/dist/plugins/formula/latex/index.d.ts.map +1 -0
- package/dist/plugins/formula/locales/ar.d.ts +4 -0
- package/dist/plugins/formula/locales/ar.d.ts.map +1 -0
- package/dist/plugins/formula/locales/de.d.ts +4 -0
- package/dist/plugins/formula/locales/de.d.ts.map +1 -0
- package/dist/plugins/formula/locales/es.d.ts +4 -0
- package/dist/plugins/formula/locales/es.d.ts.map +1 -0
- package/dist/plugins/formula/locales/fr.d.ts +4 -0
- package/dist/plugins/formula/locales/fr.d.ts.map +1 -0
- package/dist/plugins/formula/locales/hi.d.ts +4 -0
- package/dist/plugins/formula/locales/hi.d.ts.map +1 -0
- package/dist/plugins/formula/locales/pt.d.ts +4 -0
- package/dist/plugins/formula/locales/pt.d.ts.map +1 -0
- package/dist/plugins/formula/locales/ru.d.ts +4 -0
- package/dist/plugins/formula/locales/ru.d.ts.map +1 -0
- package/dist/plugins/formula/locales/zh.d.ts +4 -0
- package/dist/plugins/formula/locales/zh.d.ts.map +1 -0
- package/dist/plugins/formula/math-field/MathField.d.ts +45 -0
- package/dist/plugins/formula/math-field/MathField.d.ts.map +1 -0
- package/dist/plugins/formula/math-field/MathFieldTypes.d.ts +73 -0
- package/dist/plugins/formula/math-field/MathFieldTypes.d.ts.map +1 -0
- package/dist/plugins/formula/math-field/MathPalette.d.ts +16 -0
- package/dist/plugins/formula/math-field/MathPalette.d.ts.map +1 -0
- package/dist/plugins/formula/math-field/MathPaletteData.d.ts +15 -0
- package/dist/plugins/formula/math-field/MathPaletteData.d.ts.map +1 -0
- package/dist/plugins/formula/math-field/index.d.ts +9 -0
- package/dist/plugins/formula/math-field/index.d.ts.map +1 -0
- package/dist/plugins/formula/mathml/MathMLBuilder.d.ts +58 -0
- package/dist/plugins/formula/mathml/MathMLBuilder.d.ts.map +1 -0
- package/dist/plugins/formula/mathml/MathMLDocument.d.ts +54 -0
- package/dist/plugins/formula/mathml/MathMLDocument.d.ts.map +1 -0
- package/dist/plugins/formula/mathml/MathMLSanitize.d.ts +15 -0
- package/dist/plugins/formula/mathml/MathMLSanitize.d.ts.map +1 -0
- package/dist/plugins/formula/mathml/index.d.ts +8 -0
- package/dist/plugins/formula/mathml/index.d.ts.map +1 -0
- package/dist/plugins/formula.mjs +1 -0
- package/dist/plugins/gap-cursor.mjs +1 -1
- package/dist/plugins/hard-break.mjs +1 -1
- package/dist/plugins/heading.mjs +1 -1
- package/dist/plugins/highlight/HighlightPalette.d.ts +7 -0
- package/dist/plugins/highlight/HighlightPalette.d.ts.map +1 -0
- package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
- package/dist/plugins/highlight.mjs +1 -1
- package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
- package/dist/plugins/horizontal-rule.mjs +1 -1
- package/dist/plugins/image/ImageCommands.d.ts.map +1 -1
- package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
- package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
- package/dist/plugins/image/ImagePopup.d.ts.map +1 -1
- package/dist/plugins/image/ImagePopupStyles.d.ts +3 -0
- package/dist/plugins/image/ImagePopupStyles.d.ts.map +1 -0
- package/dist/plugins/image.mjs +1 -1
- package/dist/plugins/inline-code/InlineCodePlugin.d.ts +1 -4
- package/dist/plugins/inline-code/InlineCodePlugin.d.ts.map +1 -1
- package/dist/plugins/inline-code.mjs +1 -1
- package/dist/plugins/language/bundles/JavaSupport.d.ts.map +1 -1
- package/dist/plugins/language/bundles/TypeScriptSupport.d.ts +3 -0
- package/dist/plugins/language/bundles/TypeScriptSupport.d.ts.map +1 -0
- package/dist/plugins/language/bundles/index.d.ts +1 -0
- package/dist/plugins/language/bundles/index.d.ts.map +1 -1
- package/dist/plugins/language/index.d.ts +1 -1
- package/dist/plugins/language/index.d.ts.map +1 -1
- package/dist/plugins/language.mjs +1 -1
- package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
- package/dist/plugins/link.mjs +1 -1
- package/dist/plugins/list.mjs +1 -1
- package/dist/plugins/print.mjs +1 -1
- package/dist/plugins/shared/InlineStyleMarkSpec.d.ts +22 -0
- package/dist/plugins/shared/InlineStyleMarkSpec.d.ts.map +1 -0
- package/dist/plugins/shared/NodeSpecPatching.d.ts +16 -0
- package/dist/plugins/shared/NodeSpecPatching.d.ts.map +1 -0
- package/dist/plugins/shared/PluginHelpers.d.ts +8 -0
- package/dist/plugins/shared/PluginHelpers.d.ts.map +1 -1
- package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
- package/dist/plugins/shared/PopupPositioning.d.ts +20 -0
- package/dist/plugins/shared/PopupPositioning.d.ts.map +1 -1
- package/dist/plugins/shared/SimpleMark.d.ts +22 -0
- package/dist/plugins/shared/SimpleMark.d.ts.map +1 -0
- package/dist/plugins/shared.mjs +1 -1
- package/dist/plugins/smart-paste/detectors/DetectionScorer.d.ts +17 -0
- package/dist/plugins/smart-paste/detectors/DetectionScorer.d.ts.map +1 -0
- package/dist/plugins/smart-paste/detectors/LexerDetector.d.ts +36 -0
- package/dist/plugins/smart-paste/detectors/LexerDetector.d.ts.map +1 -0
- package/dist/plugins/smart-paste/detectors/TokenStats.d.ts +44 -0
- package/dist/plugins/smart-paste/detectors/TokenStats.d.ts.map +1 -0
- package/dist/plugins/smart-paste/index.d.ts +3 -1
- package/dist/plugins/smart-paste/index.d.ts.map +1 -1
- package/dist/plugins/smart-paste.mjs +1 -1
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts +0 -4
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
- package/dist/plugins/strikethrough.mjs +1 -1
- package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
- package/dist/plugins/super-sub.mjs +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.mjs +1 -1
- package/dist/plugins/text-color/TextColorPalette.d.ts +6 -0
- package/dist/plugins/text-color/TextColorPalette.d.ts.map +1 -0
- package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
- package/dist/plugins/text-color.mjs +1 -1
- package/dist/plugins/text-direction/TextDirectionPlugin.d.ts.map +1 -1
- package/dist/plugins/text-direction-auto.mjs +1 -1
- package/dist/plugins/text-direction.mjs +1 -1
- package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
- package/dist/plugins/text-formatting.mjs +1 -1
- package/dist/plugins/toolbar/ToolbarOverflowController.d.ts +14 -1
- package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts +13 -1
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarRenderers.d.ts.map +1 -1
- package/dist/plugins/toolbar/index.d.ts +1 -1
- package/dist/plugins/toolbar/index.d.ts.map +1 -1
- package/dist/plugins/toolbar.mjs +1 -1
- package/dist/plugins/video/VideoCommands.d.ts +62 -0
- package/dist/plugins/video/VideoCommands.d.ts.map +1 -0
- package/dist/plugins/video/VideoEditOverlay.d.ts +30 -0
- package/dist/plugins/video/VideoEditOverlay.d.ts.map +1 -0
- package/dist/plugins/video/VideoEmbedPrompt.d.ts +18 -0
- package/dist/plugins/video/VideoEmbedPrompt.d.ts.map +1 -0
- package/dist/plugins/video/VideoFacade.d.ts +46 -0
- package/dist/plugins/video/VideoFacade.d.ts.map +1 -0
- package/dist/plugins/video/VideoLocale.d.ts +53 -0
- package/dist/plugins/video/VideoLocale.d.ts.map +1 -0
- package/dist/plugins/video/VideoNodeSpec.d.ts +24 -0
- package/dist/plugins/video/VideoNodeSpec.d.ts.map +1 -0
- package/dist/plugins/video/VideoNodeView.d.ts +16 -0
- package/dist/plugins/video/VideoNodeView.d.ts.map +1 -0
- package/dist/plugins/video/VideoPasteInterceptor.d.ts +9 -0
- package/dist/plugins/video/VideoPasteInterceptor.d.ts.map +1 -0
- package/dist/plugins/video/VideoPlugin.d.ts +31 -0
- package/dist/plugins/video/VideoPlugin.d.ts.map +1 -0
- package/dist/plugins/video/VideoPopup.d.ts +28 -0
- package/dist/plugins/video/VideoPopup.d.ts.map +1 -0
- package/dist/plugins/video/VideoPopupStyles.d.ts +3 -0
- package/dist/plugins/video/VideoPopupStyles.d.ts.map +1 -0
- package/dist/plugins/video/VideoProviders.d.ts +98 -0
- package/dist/plugins/video/VideoProviders.d.ts.map +1 -0
- package/dist/plugins/video/VideoResize.d.ts +35 -0
- package/dist/plugins/video/VideoResize.d.ts.map +1 -0
- package/dist/plugins/video/VideoSanitizeHook.d.ts +23 -0
- package/dist/plugins/video/VideoSanitizeHook.d.ts.map +1 -0
- package/dist/plugins/video/VideoSelectionToolbar.d.ts +20 -0
- package/dist/plugins/video/VideoSelectionToolbar.d.ts.map +1 -0
- package/dist/plugins/video/VideoStyles.d.ts +3 -0
- package/dist/plugins/video/VideoStyles.d.ts.map +1 -0
- package/dist/plugins/video/VideoTypes.d.ts +102 -0
- package/dist/plugins/video/VideoTypes.d.ts.map +1 -0
- package/dist/plugins/video/VideoViewHelpers.d.ts +13 -0
- package/dist/plugins/video/VideoViewHelpers.d.ts.map +1 -0
- package/dist/plugins/video/index.d.ts +6 -0
- package/dist/plugins/video/index.d.ts.map +1 -0
- package/dist/plugins/video/locales/ar.d.ts +4 -0
- package/dist/plugins/video/locales/ar.d.ts.map +1 -0
- package/dist/plugins/video/locales/de.d.ts +4 -0
- package/dist/plugins/video/locales/de.d.ts.map +1 -0
- package/dist/plugins/video/locales/es.d.ts +4 -0
- package/dist/plugins/video/locales/es.d.ts.map +1 -0
- package/dist/plugins/video/locales/fr.d.ts +4 -0
- package/dist/plugins/video/locales/fr.d.ts.map +1 -0
- package/dist/plugins/video/locales/hi.d.ts +4 -0
- package/dist/plugins/video/locales/hi.d.ts.map +1 -0
- package/dist/plugins/video/locales/pt.d.ts +4 -0
- package/dist/plugins/video/locales/pt.d.ts.map +1 -0
- package/dist/plugins/video/locales/ru.d.ts +4 -0
- package/dist/plugins/video/locales/ru.d.ts.map +1 -0
- package/dist/plugins/video/locales/zh.d.ts +4 -0
- package/dist/plugins/video/locales/zh.d.ts.map +1 -0
- package/dist/plugins/video.mjs +1 -0
- package/dist/presets/FullPreset.d.ts +1 -1
- package/dist/presets/FullPreset.d.ts.map +1 -1
- package/dist/presets/PresetTypes.d.ts +4 -0
- package/dist/presets/PresetTypes.d.ts.map +1 -1
- package/dist/presets/full.mjs +1 -1
- package/dist/presets/minimal.mjs +1 -1
- package/dist/presets.mjs +1 -1
- package/dist/serialization/CSSClassCollector.d.ts.map +1 -1
- package/dist/serialization/ContentHTMLTypes.d.ts +19 -1
- package/dist/serialization/ContentHTMLTypes.d.ts.map +1 -1
- package/dist/serialization/DocumentParser.d.ts.map +1 -1
- package/dist/serialization/DocumentSerializer.d.ts +3 -3
- package/dist/serialization/DocumentSerializer.d.ts.map +1 -1
- package/dist/serialization/HTMLWhitespace.d.ts +22 -0
- package/dist/serialization/HTMLWhitespace.d.ts.map +1 -0
- package/dist/serialization/MarkSerializer.d.ts.map +1 -1
- package/dist/serialization/index.d.ts +1 -1
- package/dist/serialization/index.d.ts.map +1 -1
- package/dist/state/BlockTreeOps.d.ts +8 -1
- package/dist/state/BlockTreeOps.d.ts.map +1 -1
- package/dist/state/EditorState.d.ts.map +1 -1
- package/dist/state/History.d.ts +20 -0
- package/dist/state/History.d.ts.map +1 -1
- package/dist/state/InlineContentOps.d.ts +30 -0
- package/dist/state/InlineContentOps.d.ts.map +1 -1
- package/dist/state/Mapping.d.ts +261 -0
- package/dist/state/Mapping.d.ts.map +1 -0
- package/dist/state/NavigationQueries.d.ts +11 -0
- package/dist/state/NavigationQueries.d.ts.map +1 -1
- package/dist/state/SelectionMapping.d.ts +25 -0
- package/dist/state/SelectionMapping.d.ts.map +1 -0
- package/dist/state/StepApplication.d.ts +20 -3
- package/dist/state/StepApplication.d.ts.map +1 -1
- package/dist/state/StepHandlers.d.ts +68 -0
- package/dist/state/StepHandlers.d.ts.map +1 -0
- package/dist/state/StepInversion.d.ts +22 -5
- package/dist/state/StepInversion.d.ts.map +1 -1
- package/dist/state/StepMapping.d.ts +18 -0
- package/dist/state/StepMapping.d.ts.map +1 -0
- package/dist/state/StepMaps.d.ts +25 -0
- package/dist/state/StepMaps.d.ts.map +1 -0
- package/dist/state/Steps.d.ts +38 -0
- package/dist/state/Steps.d.ts.map +1 -1
- package/dist/state/Transaction.d.ts +25 -1
- package/dist/state/Transaction.d.ts.map +1 -1
- package/dist/state/TransactionBuilder.d.ts +51 -7
- package/dist/state/TransactionBuilder.d.ts.map +1 -1
- package/dist/test/TestUtils.d.ts +3 -1
- package/dist/test/TestUtils.d.ts.map +1 -1
- package/dist/view/CaretNavigation.d.ts.map +1 -1
- package/dist/view/EditorView.d.ts.map +1 -1
- package/dist/view/SelectionSync.d.ts.map +1 -1
- package/dist/view/ViewMovementCommands.d.ts.map +1 -1
- package/package.json +16 -1
- package/dist/chunks/AlignmentPlugin-bqK6ze-E.mjs +0 -2
- package/dist/chunks/AlignmentPlugin-bqK6ze-E.mjs.map +0 -1
- package/dist/chunks/AttrRegistry-nDKtHK87.mjs +0 -2
- package/dist/chunks/AttrRegistry-nDKtHK87.mjs.map +0 -1
- package/dist/chunks/AttributedMarkCommands-35jTbVRg.mjs +0 -2
- package/dist/chunks/AttributedMarkCommands-35jTbVRg.mjs.map +0 -1
- package/dist/chunks/BidiIsolationPlugin-SIKxfWXp.mjs +0 -2
- package/dist/chunks/BidiIsolationPlugin-SIKxfWXp.mjs.map +0 -1
- package/dist/chunks/BlockInsertion-DsnHLcvM.mjs +0 -2
- package/dist/chunks/BlockInsertion-DsnHLcvM.mjs.map +0 -1
- package/dist/chunks/BlockTypePickerRegistry-C_jLddOz.mjs +0 -2
- package/dist/chunks/BlockTypePickerRegistry-C_jLddOz.mjs.map +0 -1
- package/dist/chunks/BlockquotePlugin-BEaZSoVT.mjs +0 -2
- package/dist/chunks/BlockquotePlugin-BEaZSoVT.mjs.map +0 -1
- package/dist/chunks/CaretNavigationPlugin-DHl61oc6.mjs +0 -2
- package/dist/chunks/CaretNavigationPlugin-DHl61oc6.mjs.map +0 -1
- package/dist/chunks/CodeBlockPlugin-DglqiSNK.mjs +0 -2
- package/dist/chunks/CodeBlockPlugin-DglqiSNK.mjs.map +0 -1
- package/dist/chunks/ColorGrid-Czm0p2E9.mjs +0 -2
- package/dist/chunks/ColorGrid-Czm0p2E9.mjs.map +0 -1
- package/dist/chunks/ColorPickerPopup-CL-W380M.mjs +0 -2
- package/dist/chunks/ColorPickerPopup-CL-W380M.mjs.map +0 -1
- package/dist/chunks/ColorValidation-CiGxVsqd.mjs +0 -2
- package/dist/chunks/ColorValidation-CiGxVsqd.mjs.map +0 -1
- package/dist/chunks/CommandHelpers-DTlQcGv5.mjs +0 -2
- package/dist/chunks/CommandHelpers-DTlQcGv5.mjs.map +0 -1
- package/dist/chunks/Commands-BuYF23lf.mjs +0 -2
- package/dist/chunks/Commands-BuYF23lf.mjs.map +0 -1
- package/dist/chunks/Decoration-oeHDjWWq.mjs +0 -2
- package/dist/chunks/Decoration-oeHDjWWq.mjs.map +0 -1
- package/dist/chunks/DirectionDetection-Hun6-7ER.mjs +0 -2
- package/dist/chunks/DirectionDetection-Hun6-7ER.mjs.map +0 -1
- package/dist/chunks/DirectionIcons-CfaDcQ9a.mjs +0 -2
- package/dist/chunks/DirectionIcons-CfaDcQ9a.mjs.map +0 -1
- package/dist/chunks/Document-_qdGR4vh.mjs +0 -2
- package/dist/chunks/Document-_qdGR4vh.mjs.map +0 -1
- package/dist/chunks/DocumentParser-CyATBOz-.mjs +0 -2
- package/dist/chunks/DocumentParser-CyATBOz-.mjs.map +0 -1
- package/dist/chunks/FontPlugin-B-Sxa0UW.mjs +0 -2
- package/dist/chunks/FontPlugin-B-Sxa0UW.mjs.map +0 -1
- package/dist/chunks/FontSizePlugin-C1zlyXL2.mjs +0 -2
- package/dist/chunks/FontSizePlugin-C1zlyXL2.mjs.map +0 -1
- package/dist/chunks/GapCursorNavigation-BaXDnjFf.mjs +0 -2
- package/dist/chunks/GapCursorNavigation-BaXDnjFf.mjs.map +0 -1
- package/dist/chunks/GapCursorPlugin-nldun8cE.mjs +0 -2
- package/dist/chunks/GapCursorPlugin-nldun8cE.mjs.map +0 -1
- package/dist/chunks/HardBreakPlugin-DZRdsE15.mjs +0 -2
- package/dist/chunks/HardBreakPlugin-DZRdsE15.mjs.map +0 -1
- package/dist/chunks/HeadingPlugin-EPAmsEGt.mjs +0 -2
- package/dist/chunks/HeadingPlugin-EPAmsEGt.mjs.map +0 -1
- package/dist/chunks/HighlightPlugin-RN3l6pVJ.mjs +0 -2
- package/dist/chunks/HighlightPlugin-RN3l6pVJ.mjs.map +0 -1
- package/dist/chunks/HorizontalRulePlugin-BJPXzTtJ.mjs +0 -2
- package/dist/chunks/HorizontalRulePlugin-BJPXzTtJ.mjs.map +0 -1
- package/dist/chunks/ImagePlugin-CCEevNfJ.mjs +0 -2
- package/dist/chunks/ImagePlugin-CCEevNfJ.mjs.map +0 -1
- package/dist/chunks/InlineCodePlugin-B7IOgUSI.mjs +0 -2
- package/dist/chunks/InlineCodePlugin-B7IOgUSI.mjs.map +0 -1
- package/dist/chunks/KeyboardNav-CsdlWnNl.mjs +0 -2
- package/dist/chunks/KeyboardNav-CsdlWnNl.mjs.map +0 -1
- package/dist/chunks/LinkPlugin-Bhwg24lH.mjs +0 -2
- package/dist/chunks/LinkPlugin-Bhwg24lH.mjs.map +0 -1
- package/dist/chunks/ListPlugin-BkG6UO4x.mjs +0 -2
- package/dist/chunks/ListPlugin-BkG6UO4x.mjs.map +0 -1
- package/dist/chunks/NavigationQueries-CgYPG6oY.mjs +0 -2
- package/dist/chunks/NavigationQueries-CgYPG6oY.mjs.map +0 -1
- package/dist/chunks/NodeResolver-DVPpO5nC.mjs +0 -2
- package/dist/chunks/NodeResolver-DVPpO5nC.mjs.map +0 -1
- package/dist/chunks/NodeSelectionCommands-Ddxu5Qck.mjs +0 -2
- package/dist/chunks/NodeSelectionCommands-Ddxu5Qck.mjs.map +0 -1
- package/dist/chunks/Platform-D9TRT4Mn.mjs +0 -2
- package/dist/chunks/Platform-D9TRT4Mn.mjs.map +0 -1
- package/dist/chunks/PluginHelpers-D-MvWR98.mjs +0 -2
- package/dist/chunks/PluginHelpers-D-MvWR98.mjs.map +0 -1
- package/dist/chunks/PopupKeyboardPatterns-DQdL7RHx.mjs +0 -2
- package/dist/chunks/PopupKeyboardPatterns-DQdL7RHx.mjs.map +0 -1
- package/dist/chunks/PopupManager-CxPzNm-P.mjs +0 -2
- package/dist/chunks/PopupManager-CxPzNm-P.mjs.map +0 -1
- package/dist/chunks/PopupPositioning-DRNwWB0U.mjs +0 -2
- package/dist/chunks/PopupPositioning-DRNwWB0U.mjs.map +0 -1
- package/dist/chunks/PrintPlugin-DOk5IZRO.mjs +0 -2
- package/dist/chunks/PrintPlugin-DOk5IZRO.mjs.map +0 -1
- package/dist/chunks/PrintTypes-Drk6kLcl.mjs +0 -2
- package/dist/chunks/PrintTypes-Drk6kLcl.mjs.map +0 -1
- package/dist/chunks/RangeIterator-DytL1lUT.mjs +0 -2
- package/dist/chunks/RangeIterator-DytL1lUT.mjs.map +0 -1
- package/dist/chunks/ShortcutFormatting-DE6B8iGs.mjs +0 -2
- package/dist/chunks/ShortcutFormatting-DE6B8iGs.mjs.map +0 -1
- package/dist/chunks/SmartPastePlugin-DqKx94sH.mjs +0 -2
- package/dist/chunks/SmartPastePlugin-DqKx94sH.mjs.map +0 -1
- package/dist/chunks/StrikethroughPlugin-vYNzfxdy.mjs +0 -2
- package/dist/chunks/StrikethroughPlugin-vYNzfxdy.mjs.map +0 -1
- package/dist/chunks/StyleRuntime-D3d1XFFe.mjs +0 -2
- package/dist/chunks/StyleRuntime-D3d1XFFe.mjs.map +0 -1
- package/dist/chunks/SuperSubPlugin-BNsoXWHS.mjs +0 -2
- package/dist/chunks/SuperSubPlugin-BNsoXWHS.mjs.map +0 -1
- package/dist/chunks/SyntaxTokenTypes-CVUAMov0.mjs +0 -2
- package/dist/chunks/SyntaxTokenTypes-CVUAMov0.mjs.map +0 -1
- package/dist/chunks/TablePlugin-R-hmydrM.mjs +0 -2
- package/dist/chunks/TablePlugin-R-hmydrM.mjs.map +0 -1
- package/dist/chunks/TextColorPlugin-DQ-CB9cr.mjs +0 -2
- package/dist/chunks/TextColorPlugin-DQ-CB9cr.mjs.map +0 -1
- package/dist/chunks/TextDirectionAutoPlugin-kZ1tcu0d.mjs +0 -2
- package/dist/chunks/TextDirectionAutoPlugin-kZ1tcu0d.mjs.map +0 -1
- package/dist/chunks/TextDirectionPlugin-Bk3CkbYh.mjs +0 -2
- package/dist/chunks/TextDirectionPlugin-Bk3CkbYh.mjs.map +0 -1
- package/dist/chunks/TextDirectionService-DY4M8EwU.mjs +0 -2
- package/dist/chunks/TextDirectionService-DY4M8EwU.mjs.map +0 -1
- package/dist/chunks/TextFormattingPlugin-D13eP6nF.mjs +0 -2
- package/dist/chunks/TextFormattingPlugin-D13eP6nF.mjs.map +0 -1
- package/dist/chunks/ToolbarPlugin-DeH8n5d2.mjs +0 -2
- package/dist/chunks/ToolbarPlugin-DeH8n5d2.mjs.map +0 -1
- package/dist/chunks/TypedKeys-CU7aToqY.mjs +0 -2
- package/dist/chunks/TypedKeys-CU7aToqY.mjs.map +0 -1
- package/dist/chunks/WordBoundary-BE2u997Q.mjs +0 -2
- package/dist/chunks/WordBoundary-BE2u997Q.mjs.map +0 -1
- package/dist/chunks/XmlDetector-BtYxzBDa.mjs +0 -2
- package/dist/chunks/XmlDetector-BtYxzBDa.mjs.map +0 -1
- package/dist/chunks/XmlPatterns-DuP8GWVt.mjs +0 -2
- package/dist/chunks/XmlPatterns-DuP8GWVt.mjs.map +0 -1
- package/dist/chunks/XmlSupport-D54BdAJZ.mjs +0 -2
- package/dist/chunks/XmlSupport-D54BdAJZ.mjs.map +0 -1
- package/dist/chunks/ar-2Fkz_6nI.mjs +0 -2
- package/dist/chunks/ar-2Fkz_6nI.mjs.map +0 -1
- package/dist/chunks/ar-4ZPC8daa.mjs +0 -2
- package/dist/chunks/ar-4ZPC8daa.mjs.map +0 -1
- package/dist/chunks/ar-6I20_Djq.mjs +0 -2
- package/dist/chunks/ar-6I20_Djq.mjs.map +0 -1
- package/dist/chunks/ar-B7-Dm70S.mjs +0 -2
- package/dist/chunks/ar-B7-Dm70S.mjs.map +0 -1
- package/dist/chunks/ar-BRe0t96G.mjs +0 -2
- package/dist/chunks/ar-BRe0t96G.mjs.map +0 -1
- package/dist/chunks/ar-BnNyrtdi.mjs +0 -2
- package/dist/chunks/ar-BnNyrtdi.mjs.map +0 -1
- package/dist/chunks/ar-BsMfhWs5.mjs +0 -2
- package/dist/chunks/ar-BsMfhWs5.mjs.map +0 -1
- package/dist/chunks/ar-Bvja-bjE.mjs +0 -2
- package/dist/chunks/ar-Bvja-bjE.mjs.map +0 -1
- package/dist/chunks/ar-BxVbBvSa.mjs +0 -2
- package/dist/chunks/ar-BxVbBvSa.mjs.map +0 -1
- package/dist/chunks/ar-C5dW-co3.mjs +0 -2
- package/dist/chunks/ar-C5dW-co3.mjs.map +0 -1
- package/dist/chunks/ar-CARMr30L.mjs +0 -2
- package/dist/chunks/ar-CARMr30L.mjs.map +0 -1
- package/dist/chunks/ar-CB-pehGw.mjs +0 -2
- package/dist/chunks/ar-CB-pehGw.mjs.map +0 -1
- package/dist/chunks/ar-CEYgAxTM.mjs +0 -2
- package/dist/chunks/ar-CEYgAxTM.mjs.map +0 -1
- package/dist/chunks/ar-CO60qpZJ.mjs +0 -2
- package/dist/chunks/ar-CO60qpZJ.mjs.map +0 -1
- package/dist/chunks/ar-CtI_snUM.mjs +0 -2
- package/dist/chunks/ar-CtI_snUM.mjs.map +0 -1
- package/dist/chunks/ar-Cv1RQvhK.mjs +0 -2
- package/dist/chunks/ar-Cv1RQvhK.mjs.map +0 -1
- package/dist/chunks/ar-D5jV20Tu.mjs +0 -2
- package/dist/chunks/ar-D5jV20Tu.mjs.map +0 -1
- package/dist/chunks/ar-DJN9fQ7Z.mjs +0 -2
- package/dist/chunks/ar-DJN9fQ7Z.mjs.map +0 -1
- package/dist/chunks/ar-DPTsUnwA.mjs +0 -2
- package/dist/chunks/ar-DPTsUnwA.mjs.map +0 -1
- package/dist/chunks/ar-DZJIBD1Q.mjs +0 -2
- package/dist/chunks/ar-DZJIBD1Q.mjs.map +0 -1
- package/dist/chunks/ar-DkkbwV93.mjs +0 -2
- package/dist/chunks/ar-DkkbwV93.mjs.map +0 -1
- package/dist/chunks/ar-DmeMor8Y.mjs +0 -2
- package/dist/chunks/ar-DmeMor8Y.mjs.map +0 -1
- package/dist/chunks/ar-LnE7jPai.mjs +0 -2
- package/dist/chunks/ar-LnE7jPai.mjs.map +0 -1
- package/dist/chunks/ar-P3wW0fmA.mjs +0 -2
- package/dist/chunks/ar-P3wW0fmA.mjs.map +0 -1
- package/dist/chunks/ar-uum0DCfv.mjs +0 -2
- package/dist/chunks/ar-uum0DCfv.mjs.map +0 -1
- package/dist/chunks/color-picker-DlXhHBZ6.mjs +0 -2
- package/dist/chunks/color-picker-DlXhHBZ6.mjs.map +0 -1
- package/dist/chunks/de-8SHQu0rr.mjs +0 -2
- package/dist/chunks/de-8SHQu0rr.mjs.map +0 -1
- package/dist/chunks/de-B8a71A0X.mjs +0 -2
- package/dist/chunks/de-B8a71A0X.mjs.map +0 -1
- package/dist/chunks/de-B9weXoA1.mjs +0 -2
- package/dist/chunks/de-B9weXoA1.mjs.map +0 -1
- package/dist/chunks/de-BKm53tVU.mjs +0 -2
- package/dist/chunks/de-BKm53tVU.mjs.map +0 -1
- package/dist/chunks/de-BLWrnMfX.mjs +0 -2
- package/dist/chunks/de-BLWrnMfX.mjs.map +0 -1
- package/dist/chunks/de-BOujs1pF.mjs +0 -2
- package/dist/chunks/de-BOujs1pF.mjs.map +0 -1
- package/dist/chunks/de-B_1XleAG.mjs +0 -2
- package/dist/chunks/de-B_1XleAG.mjs.map +0 -1
- package/dist/chunks/de-BpmjrOMc.mjs +0 -2
- package/dist/chunks/de-BpmjrOMc.mjs.map +0 -1
- package/dist/chunks/de-C8OHD1fm.mjs +0 -2
- package/dist/chunks/de-C8OHD1fm.mjs.map +0 -1
- package/dist/chunks/de-CAVCXBBR.mjs +0 -2
- package/dist/chunks/de-CAVCXBBR.mjs.map +0 -1
- package/dist/chunks/de-CkMnuozT.mjs +0 -2
- package/dist/chunks/de-CkMnuozT.mjs.map +0 -1
- package/dist/chunks/de-CtDnvnnm.mjs +0 -2
- package/dist/chunks/de-CtDnvnnm.mjs.map +0 -1
- package/dist/chunks/de-Cz26vtXW.mjs +0 -2
- package/dist/chunks/de-Cz26vtXW.mjs.map +0 -1
- package/dist/chunks/de-D0BPSP3j.mjs +0 -2
- package/dist/chunks/de-D0BPSP3j.mjs.map +0 -1
- package/dist/chunks/de-D74v0paw.mjs +0 -2
- package/dist/chunks/de-D74v0paw.mjs.map +0 -1
- package/dist/chunks/de-DKj55F9g.mjs +0 -2
- package/dist/chunks/de-DKj55F9g.mjs.map +0 -1
- package/dist/chunks/de-DYuRb98l.mjs +0 -2
- package/dist/chunks/de-DYuRb98l.mjs.map +0 -1
- package/dist/chunks/de-DaK0-sdo.mjs +0 -2
- package/dist/chunks/de-DaK0-sdo.mjs.map +0 -1
- package/dist/chunks/de-Dia08Wsq.mjs +0 -2
- package/dist/chunks/de-Dia08Wsq.mjs.map +0 -1
- package/dist/chunks/de-Dp_uj2Z3.mjs +0 -2
- package/dist/chunks/de-Dp_uj2Z3.mjs.map +0 -1
- package/dist/chunks/de-DwX1CDNO.mjs +0 -2
- package/dist/chunks/de-DwX1CDNO.mjs.map +0 -1
- package/dist/chunks/de-DyF2mRfw.mjs +0 -2
- package/dist/chunks/de-DyF2mRfw.mjs.map +0 -1
- package/dist/chunks/de-X3BLBlF8.mjs +0 -2
- package/dist/chunks/de-X3BLBlF8.mjs.map +0 -1
- package/dist/chunks/de-dPC3Qk7N.mjs +0 -2
- package/dist/chunks/de-dPC3Qk7N.mjs.map +0 -1
- package/dist/chunks/de-pLGt5S7j.mjs +0 -2
- package/dist/chunks/de-pLGt5S7j.mjs.map +0 -1
- package/dist/chunks/es--xozZF4T.mjs +0 -2
- package/dist/chunks/es--xozZF4T.mjs.map +0 -1
- package/dist/chunks/es-2BjtTusm.mjs +0 -2
- package/dist/chunks/es-2BjtTusm.mjs.map +0 -1
- package/dist/chunks/es-B2rEK7_f.mjs +0 -2
- package/dist/chunks/es-B2rEK7_f.mjs.map +0 -1
- package/dist/chunks/es-B9esmUm1.mjs +0 -2
- package/dist/chunks/es-B9esmUm1.mjs.map +0 -1
- package/dist/chunks/es-BJxkHalP.mjs +0 -2
- package/dist/chunks/es-BJxkHalP.mjs.map +0 -1
- package/dist/chunks/es-BMKsnh3y.mjs +0 -2
- package/dist/chunks/es-BMKsnh3y.mjs.map +0 -1
- package/dist/chunks/es-BXFflrrU.mjs +0 -2
- package/dist/chunks/es-BXFflrrU.mjs.map +0 -1
- package/dist/chunks/es-BbX_lEEN.mjs +0 -2
- package/dist/chunks/es-BbX_lEEN.mjs.map +0 -1
- package/dist/chunks/es-BlHe_tc0.mjs +0 -2
- package/dist/chunks/es-BlHe_tc0.mjs.map +0 -1
- package/dist/chunks/es-Bu6nnEeT.mjs +0 -2
- package/dist/chunks/es-Bu6nnEeT.mjs.map +0 -1
- package/dist/chunks/es-Bx0CbUoY.mjs +0 -2
- package/dist/chunks/es-Bx0CbUoY.mjs.map +0 -1
- package/dist/chunks/es-CE9Tbsb7.mjs +0 -2
- package/dist/chunks/es-CE9Tbsb7.mjs.map +0 -1
- package/dist/chunks/es-COSomns3.mjs +0 -2
- package/dist/chunks/es-COSomns3.mjs.map +0 -1
- package/dist/chunks/es-C_7qthHu.mjs +0 -2
- package/dist/chunks/es-C_7qthHu.mjs.map +0 -1
- package/dist/chunks/es-CirfP3x1.mjs +0 -2
- package/dist/chunks/es-CirfP3x1.mjs.map +0 -1
- package/dist/chunks/es-CpF8eiPr.mjs +0 -2
- package/dist/chunks/es-CpF8eiPr.mjs.map +0 -1
- package/dist/chunks/es-D787y0ui.mjs +0 -2
- package/dist/chunks/es-D787y0ui.mjs.map +0 -1
- package/dist/chunks/es-D8iB5vwQ.mjs +0 -2
- package/dist/chunks/es-D8iB5vwQ.mjs.map +0 -1
- package/dist/chunks/es-DBb78XWu.mjs +0 -2
- package/dist/chunks/es-DBb78XWu.mjs.map +0 -1
- package/dist/chunks/es-DC6mYTD3.mjs +0 -2
- package/dist/chunks/es-DC6mYTD3.mjs.map +0 -1
- package/dist/chunks/es-Dh--mRZs.mjs +0 -2
- package/dist/chunks/es-Dh--mRZs.mjs.map +0 -1
- package/dist/chunks/es-DvPsYqFj.mjs +0 -2
- package/dist/chunks/es-DvPsYqFj.mjs.map +0 -1
- package/dist/chunks/es-DxXimuUa.mjs +0 -2
- package/dist/chunks/es-DxXimuUa.mjs.map +0 -1
- package/dist/chunks/es-mWJptxq3.mjs +0 -2
- package/dist/chunks/es-mWJptxq3.mjs.map +0 -1
- package/dist/chunks/es-qYV--o6U.mjs +0 -2
- package/dist/chunks/es-qYV--o6U.mjs.map +0 -1
- package/dist/chunks/fonts-CxtWyeNB.mjs +0 -2
- package/dist/chunks/fonts-CxtWyeNB.mjs.map +0 -1
- package/dist/chunks/fr--F426oao.mjs +0 -2
- package/dist/chunks/fr--F426oao.mjs.map +0 -1
- package/dist/chunks/fr-B0BPbbNB.mjs +0 -2
- package/dist/chunks/fr-B0BPbbNB.mjs.map +0 -1
- package/dist/chunks/fr-B4UQy0j-.mjs +0 -2
- package/dist/chunks/fr-B4UQy0j-.mjs.map +0 -1
- package/dist/chunks/fr-B4XLxkci.mjs +0 -2
- package/dist/chunks/fr-B4XLxkci.mjs.map +0 -1
- package/dist/chunks/fr-BC1Rfp9S.mjs +0 -2
- package/dist/chunks/fr-BC1Rfp9S.mjs.map +0 -1
- package/dist/chunks/fr-BRGGu0E2.mjs +0 -2
- package/dist/chunks/fr-BRGGu0E2.mjs.map +0 -1
- package/dist/chunks/fr-BoSz1pa9.mjs +0 -2
- package/dist/chunks/fr-BoSz1pa9.mjs.map +0 -1
- package/dist/chunks/fr-Bom3RFIN.mjs +0 -2
- package/dist/chunks/fr-Bom3RFIN.mjs.map +0 -1
- package/dist/chunks/fr-BtnwMUII.mjs +0 -2
- package/dist/chunks/fr-BtnwMUII.mjs.map +0 -1
- package/dist/chunks/fr-C6pglM3H.mjs +0 -2
- package/dist/chunks/fr-C6pglM3H.mjs.map +0 -1
- package/dist/chunks/fr-CDBpS6xE.mjs +0 -2
- package/dist/chunks/fr-CDBpS6xE.mjs.map +0 -1
- package/dist/chunks/fr-CN0ihkUg.mjs +0 -2
- package/dist/chunks/fr-CN0ihkUg.mjs.map +0 -1
- package/dist/chunks/fr-CNNBBeLM.mjs +0 -2
- package/dist/chunks/fr-CNNBBeLM.mjs.map +0 -1
- package/dist/chunks/fr-CVOY2y07.mjs +0 -2
- package/dist/chunks/fr-CVOY2y07.mjs.map +0 -1
- package/dist/chunks/fr-CZAbL_o0.mjs +0 -2
- package/dist/chunks/fr-CZAbL_o0.mjs.map +0 -1
- package/dist/chunks/fr-DJkPmQG_.mjs +0 -2
- package/dist/chunks/fr-DJkPmQG_.mjs.map +0 -1
- package/dist/chunks/fr-DkWdFDsR.mjs +0 -2
- package/dist/chunks/fr-DkWdFDsR.mjs.map +0 -1
- package/dist/chunks/fr-DnQHoPVo.mjs +0 -2
- package/dist/chunks/fr-DnQHoPVo.mjs.map +0 -1
- package/dist/chunks/fr-DsdueaiG.mjs +0 -2
- package/dist/chunks/fr-DsdueaiG.mjs.map +0 -1
- package/dist/chunks/fr-DxNdsa11.mjs +0 -2
- package/dist/chunks/fr-DxNdsa11.mjs.map +0 -1
- package/dist/chunks/fr-IO4_LYvE.mjs +0 -2
- package/dist/chunks/fr-IO4_LYvE.mjs.map +0 -1
- package/dist/chunks/fr-ZKDCEpww.mjs +0 -2
- package/dist/chunks/fr-ZKDCEpww.mjs.map +0 -1
- package/dist/chunks/fr-coufP_et.mjs +0 -2
- package/dist/chunks/fr-coufP_et.mjs.map +0 -1
- package/dist/chunks/fr-lYSOgOK7.mjs +0 -2
- package/dist/chunks/fr-lYSOgOK7.mjs.map +0 -1
- package/dist/chunks/fr-wobtRjcF.mjs +0 -2
- package/dist/chunks/fr-wobtRjcF.mjs.map +0 -1
- package/dist/chunks/full-5hGvv-bG.mjs +0 -2
- package/dist/chunks/full-5hGvv-bG.mjs.map +0 -1
- package/dist/chunks/hi-B0o90MFd.mjs +0 -2
- package/dist/chunks/hi-B0o90MFd.mjs.map +0 -1
- package/dist/chunks/hi-BFko34WG.mjs +0 -2
- package/dist/chunks/hi-BFko34WG.mjs.map +0 -1
- package/dist/chunks/hi-BVxSgaNT.mjs +0 -2
- package/dist/chunks/hi-BVxSgaNT.mjs.map +0 -1
- package/dist/chunks/hi-BirBQ5Ef.mjs +0 -2
- package/dist/chunks/hi-BirBQ5Ef.mjs.map +0 -1
- package/dist/chunks/hi-BnsbcSIX.mjs +0 -2
- package/dist/chunks/hi-BnsbcSIX.mjs.map +0 -1
- package/dist/chunks/hi-BoFuxLtG.mjs +0 -2
- package/dist/chunks/hi-BoFuxLtG.mjs.map +0 -1
- package/dist/chunks/hi-BptyTwAv.mjs +0 -2
- package/dist/chunks/hi-BptyTwAv.mjs.map +0 -1
- package/dist/chunks/hi-BulaYhi_.mjs +0 -2
- package/dist/chunks/hi-BulaYhi_.mjs.map +0 -1
- package/dist/chunks/hi-BzflHG6Y.mjs +0 -2
- package/dist/chunks/hi-BzflHG6Y.mjs.map +0 -1
- package/dist/chunks/hi-C7Hb-gQ_.mjs +0 -2
- package/dist/chunks/hi-C7Hb-gQ_.mjs.map +0 -1
- package/dist/chunks/hi-C_lY7kA9.mjs +0 -2
- package/dist/chunks/hi-C_lY7kA9.mjs.map +0 -1
- package/dist/chunks/hi-CkylXoIm.mjs +0 -2
- package/dist/chunks/hi-CkylXoIm.mjs.map +0 -1
- package/dist/chunks/hi-DGJTbrQi.mjs +0 -2
- package/dist/chunks/hi-DGJTbrQi.mjs.map +0 -1
- package/dist/chunks/hi-DGJgX0fG.mjs +0 -2
- package/dist/chunks/hi-DGJgX0fG.mjs.map +0 -1
- package/dist/chunks/hi-DKDYpjdr.mjs +0 -2
- package/dist/chunks/hi-DKDYpjdr.mjs.map +0 -1
- package/dist/chunks/hi-DfAX8S-T.mjs +0 -2
- package/dist/chunks/hi-DfAX8S-T.mjs.map +0 -1
- package/dist/chunks/hi-Dhq91ipt.mjs +0 -2
- package/dist/chunks/hi-Dhq91ipt.mjs.map +0 -1
- package/dist/chunks/hi-Dup389dM.mjs +0 -2
- package/dist/chunks/hi-Dup389dM.mjs.map +0 -1
- package/dist/chunks/hi-DzRFsYYN.mjs +0 -2
- package/dist/chunks/hi-DzRFsYYN.mjs.map +0 -1
- package/dist/chunks/hi-ObZRwITd.mjs +0 -2
- package/dist/chunks/hi-ObZRwITd.mjs.map +0 -1
- package/dist/chunks/hi-VvUzjfH_.mjs +0 -2
- package/dist/chunks/hi-VvUzjfH_.mjs.map +0 -1
- package/dist/chunks/hi-jWQDQkOX.mjs +0 -2
- package/dist/chunks/hi-jWQDQkOX.mjs.map +0 -1
- package/dist/chunks/hi-l3hIrp8J.mjs +0 -2
- package/dist/chunks/hi-l3hIrp8J.mjs.map +0 -1
- package/dist/chunks/hi-o8Gsu5Ly.mjs +0 -2
- package/dist/chunks/hi-o8Gsu5Ly.mjs.map +0 -1
- package/dist/chunks/hi-sxC2nk3h.mjs +0 -2
- package/dist/chunks/hi-sxC2nk3h.mjs.map +0 -1
- package/dist/chunks/minimal-pBhi4EJI.mjs +0 -2
- package/dist/chunks/minimal-pBhi4EJI.mjs.map +0 -1
- package/dist/chunks/pt--57Ug7ig.mjs +0 -2
- package/dist/chunks/pt--57Ug7ig.mjs.map +0 -1
- package/dist/chunks/pt-4j8Km9Db.mjs +0 -2
- package/dist/chunks/pt-4j8Km9Db.mjs.map +0 -1
- package/dist/chunks/pt-BTGFKCns.mjs +0 -2
- package/dist/chunks/pt-BTGFKCns.mjs.map +0 -1
- package/dist/chunks/pt-BU8Qfuoz.mjs +0 -2
- package/dist/chunks/pt-BU8Qfuoz.mjs.map +0 -1
- package/dist/chunks/pt-BYAOJxIB.mjs +0 -2
- package/dist/chunks/pt-BYAOJxIB.mjs.map +0 -1
- package/dist/chunks/pt-BjNWQm9A.mjs +0 -2
- package/dist/chunks/pt-BjNWQm9A.mjs.map +0 -1
- package/dist/chunks/pt-Bvnb_NpT.mjs +0 -2
- package/dist/chunks/pt-Bvnb_NpT.mjs.map +0 -1
- package/dist/chunks/pt-C2pkn7vo.mjs +0 -2
- package/dist/chunks/pt-C2pkn7vo.mjs.map +0 -1
- package/dist/chunks/pt-C8MhLnWx.mjs +0 -2
- package/dist/chunks/pt-C8MhLnWx.mjs.map +0 -1
- package/dist/chunks/pt-CJfYLSTe.mjs +0 -2
- package/dist/chunks/pt-CJfYLSTe.mjs.map +0 -1
- package/dist/chunks/pt-CdwVIYOK.mjs +0 -2
- package/dist/chunks/pt-CdwVIYOK.mjs.map +0 -1
- package/dist/chunks/pt-CwrVo90O.mjs +0 -2
- package/dist/chunks/pt-CwrVo90O.mjs.map +0 -1
- package/dist/chunks/pt-DD26CKCA.mjs +0 -2
- package/dist/chunks/pt-DD26CKCA.mjs.map +0 -1
- package/dist/chunks/pt-DLbf6uoo.mjs +0 -2
- package/dist/chunks/pt-DLbf6uoo.mjs.map +0 -1
- package/dist/chunks/pt-DNyNHwKh.mjs +0 -2
- package/dist/chunks/pt-DNyNHwKh.mjs.map +0 -1
- package/dist/chunks/pt-DVfMAcXb.mjs +0 -2
- package/dist/chunks/pt-DVfMAcXb.mjs.map +0 -1
- package/dist/chunks/pt-DWSFad3n.mjs +0 -2
- package/dist/chunks/pt-DWSFad3n.mjs.map +0 -1
- package/dist/chunks/pt-DZXY4i4G.mjs +0 -2
- package/dist/chunks/pt-DZXY4i4G.mjs.map +0 -1
- package/dist/chunks/pt-DfUpRhK1.mjs +0 -2
- package/dist/chunks/pt-DfUpRhK1.mjs.map +0 -1
- package/dist/chunks/pt-DlvNEDeW.mjs +0 -2
- package/dist/chunks/pt-DlvNEDeW.mjs.map +0 -1
- package/dist/chunks/pt-DzFyGwB4.mjs +0 -2
- package/dist/chunks/pt-DzFyGwB4.mjs.map +0 -1
- package/dist/chunks/pt-HhQcARW6.mjs +0 -2
- package/dist/chunks/pt-HhQcARW6.mjs.map +0 -1
- package/dist/chunks/pt-SjvTF40s.mjs +0 -2
- package/dist/chunks/pt-SjvTF40s.mjs.map +0 -1
- package/dist/chunks/pt-ihNE0VQJ.mjs +0 -2
- package/dist/chunks/pt-ihNE0VQJ.mjs.map +0 -1
- package/dist/chunks/pt-zfCjhIgy.mjs +0 -2
- package/dist/chunks/pt-zfCjhIgy.mjs.map +0 -1
- package/dist/chunks/ru-0AHodbWv.mjs +0 -2
- package/dist/chunks/ru-0AHodbWv.mjs.map +0 -1
- package/dist/chunks/ru-2MDGmLw0.mjs +0 -2
- package/dist/chunks/ru-2MDGmLw0.mjs.map +0 -1
- package/dist/chunks/ru-3VfYKfTm.mjs +0 -2
- package/dist/chunks/ru-3VfYKfTm.mjs.map +0 -1
- package/dist/chunks/ru-B-gRJ6nQ.mjs +0 -2
- package/dist/chunks/ru-B-gRJ6nQ.mjs.map +0 -1
- package/dist/chunks/ru-B6ITUB-Y.mjs +0 -2
- package/dist/chunks/ru-B6ITUB-Y.mjs.map +0 -1
- package/dist/chunks/ru-BKDWkabk.mjs +0 -2
- package/dist/chunks/ru-BKDWkabk.mjs.map +0 -1
- package/dist/chunks/ru-BMxJsSe3.mjs +0 -2
- package/dist/chunks/ru-BMxJsSe3.mjs.map +0 -1
- package/dist/chunks/ru-Bep1iHQL.mjs +0 -2
- package/dist/chunks/ru-Bep1iHQL.mjs.map +0 -1
- package/dist/chunks/ru-Blj0nqoL.mjs +0 -2
- package/dist/chunks/ru-Blj0nqoL.mjs.map +0 -1
- package/dist/chunks/ru-BqnHkmii.mjs +0 -2
- package/dist/chunks/ru-BqnHkmii.mjs.map +0 -1
- package/dist/chunks/ru-C-4AaPUK.mjs +0 -2
- package/dist/chunks/ru-C-4AaPUK.mjs.map +0 -1
- package/dist/chunks/ru-C9Nv7JJI.mjs +0 -2
- package/dist/chunks/ru-C9Nv7JJI.mjs.map +0 -1
- package/dist/chunks/ru-CJFtr1Ks.mjs +0 -2
- package/dist/chunks/ru-CJFtr1Ks.mjs.map +0 -1
- package/dist/chunks/ru-CN63yWk_.mjs +0 -2
- package/dist/chunks/ru-CN63yWk_.mjs.map +0 -1
- package/dist/chunks/ru-CcFX97-2.mjs +0 -2
- package/dist/chunks/ru-CcFX97-2.mjs.map +0 -1
- package/dist/chunks/ru-D8PhWFSp.mjs +0 -2
- package/dist/chunks/ru-D8PhWFSp.mjs.map +0 -1
- package/dist/chunks/ru-DYAncidS.mjs +0 -2
- package/dist/chunks/ru-DYAncidS.mjs.map +0 -1
- package/dist/chunks/ru-D_zXo-FA.mjs +0 -2
- package/dist/chunks/ru-D_zXo-FA.mjs.map +0 -1
- package/dist/chunks/ru-DhSPV6m0.mjs +0 -2
- package/dist/chunks/ru-DhSPV6m0.mjs.map +0 -1
- package/dist/chunks/ru-LNbpjKCw.mjs +0 -2
- package/dist/chunks/ru-LNbpjKCw.mjs.map +0 -1
- package/dist/chunks/ru-LXi1ONW4.mjs +0 -2
- package/dist/chunks/ru-LXi1ONW4.mjs.map +0 -1
- package/dist/chunks/ru-db7wsWkx.mjs +0 -2
- package/dist/chunks/ru-db7wsWkx.mjs.map +0 -1
- package/dist/chunks/ru-nZ4BjiD0.mjs +0 -2
- package/dist/chunks/ru-nZ4BjiD0.mjs.map +0 -1
- package/dist/chunks/ru-v9zumXd2.mjs +0 -2
- package/dist/chunks/ru-v9zumXd2.mjs.map +0 -1
- package/dist/chunks/ru-wK2ytv3A.mjs +0 -2
- package/dist/chunks/ru-wK2ytv3A.mjs.map +0 -1
- package/dist/chunks/src-CNK6vpUU.mjs +0 -2
- package/dist/chunks/src-CNK6vpUU.mjs.map +0 -1
- package/dist/chunks/zh-9AcCSFm0.mjs +0 -2
- package/dist/chunks/zh-9AcCSFm0.mjs.map +0 -1
- package/dist/chunks/zh-B3bJCfdB.mjs +0 -2
- package/dist/chunks/zh-B3bJCfdB.mjs.map +0 -1
- package/dist/chunks/zh-B46Dt1h7.mjs +0 -2
- package/dist/chunks/zh-B46Dt1h7.mjs.map +0 -1
- package/dist/chunks/zh-BRy2B6Og.mjs +0 -2
- package/dist/chunks/zh-BRy2B6Og.mjs.map +0 -1
- package/dist/chunks/zh-BfYi8wB2.mjs +0 -2
- package/dist/chunks/zh-BfYi8wB2.mjs.map +0 -1
- package/dist/chunks/zh-C0I3L6NA.mjs +0 -2
- package/dist/chunks/zh-C0I3L6NA.mjs.map +0 -1
- package/dist/chunks/zh-C33e4gfg.mjs +0 -2
- package/dist/chunks/zh-C33e4gfg.mjs.map +0 -1
- package/dist/chunks/zh-C9sNwnC1.mjs +0 -2
- package/dist/chunks/zh-C9sNwnC1.mjs.map +0 -1
- package/dist/chunks/zh-CACr0qSo.mjs +0 -2
- package/dist/chunks/zh-CACr0qSo.mjs.map +0 -1
- package/dist/chunks/zh-CU0hd8zq.mjs +0 -2
- package/dist/chunks/zh-CU0hd8zq.mjs.map +0 -1
- package/dist/chunks/zh-CX2zUoWR.mjs +0 -2
- package/dist/chunks/zh-CX2zUoWR.mjs.map +0 -1
- package/dist/chunks/zh-CblZ-34H.mjs +0 -2
- package/dist/chunks/zh-CblZ-34H.mjs.map +0 -1
- package/dist/chunks/zh-CicpU0g8.mjs +0 -2
- package/dist/chunks/zh-CicpU0g8.mjs.map +0 -1
- package/dist/chunks/zh-Cr3KdEZV.mjs +0 -2
- package/dist/chunks/zh-Cr3KdEZV.mjs.map +0 -1
- package/dist/chunks/zh-D24dsCiw.mjs +0 -2
- package/dist/chunks/zh-D24dsCiw.mjs.map +0 -1
- package/dist/chunks/zh-DQtLxQ3s.mjs +0 -2
- package/dist/chunks/zh-DQtLxQ3s.mjs.map +0 -1
- package/dist/chunks/zh-DR1OF5vm.mjs +0 -2
- package/dist/chunks/zh-DR1OF5vm.mjs.map +0 -1
- package/dist/chunks/zh-DS82x1KL.mjs +0 -2
- package/dist/chunks/zh-DS82x1KL.mjs.map +0 -1
- package/dist/chunks/zh-DdJA-AEY.mjs +0 -2
- package/dist/chunks/zh-DdJA-AEY.mjs.map +0 -1
- package/dist/chunks/zh-DpVlDZ9n.mjs +0 -2
- package/dist/chunks/zh-DpVlDZ9n.mjs.map +0 -1
- package/dist/chunks/zh-OWVKcbVR.mjs +0 -2
- package/dist/chunks/zh-OWVKcbVR.mjs.map +0 -1
- package/dist/chunks/zh-d19V68ib.mjs +0 -2
- package/dist/chunks/zh-d19V68ib.mjs.map +0 -1
- package/dist/chunks/zh-fSMt1FnB.mjs +0 -2
- package/dist/chunks/zh-fSMt1FnB.mjs.map +0 -1
- package/dist/chunks/zh-mLlk9Wki.mjs +0 -2
- package/dist/chunks/zh-mLlk9Wki.mjs.map +0 -1
- package/dist/chunks/zh-nnMt8E6m.mjs +0 -2
- package/dist/chunks/zh-nnMt8E6m.mjs.map +0 -1
- package/dist/input/InternalClipboard.d.ts +0 -13
- package/dist/input/InternalClipboard.d.ts.map +0 -1
- package/dist/plugins/smart-paste/detectors/JavaDetector.d.ts +0 -7
- package/dist/plugins/smart-paste/detectors/JavaDetector.d.ts.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as t}from"./Platform-D9TRT4Mn.mjs";import{o as e,s as o}from"./StyleRuntime-D3d1XFFe.mjs";import{n}from"./TypedKeys-CU7aToqY.mjs";import{i as r,o as i}from"./PluginHelpers-D-MvWR98.mjs";import{n as l,r as s,t as a}from"./KeyboardNav-CsdlWnNl.mjs";import{n as c,r as d,t as p}from"./PopupPositioning-DRNwWB0U.mjs";import{n as u,t as h}from"./PopupManager-CxPzNm-P.mjs";var b=class{_toolbarItems=/* @__PURE__ */new Map;_toolbarItemPluginMap=/* @__PURE__ */new Map;registerToolbarItem(t,e){if(this._toolbarItems.has(t.id))throw new Error(`ToolbarItem with id "${t.id}" is already registered.`);if(this._toolbarItems.set(t.id,t),e){const o=this._toolbarItemPluginMap.get(e)??[];o.push(t.id),this._toolbarItemPluginMap.set(e,o)}}getToolbarItemsByPlugin(t){const e=this._toolbarItemPluginMap.get(t)??[],o=[];for(const n of e){const t=this._toolbarItems.get(n);t&&o.push(t)}return o}getToolbarItem(t){return this._toolbarItems.get(t)}getToolbarItems(){return[...this._toolbarItems.values()]}removeToolbarItem(t){this._toolbarItems.delete(t);for(const[e,o]of this._toolbarItemPluginMap){const n=o.indexOf(t);if(-1!==n){o.splice(n,1),0===o.length&&this._toolbarItemPluginMap.delete(e);break}}}clear(){this._toolbarItems.clear(),this._toolbarItemPluginMap.clear()}};function m(t){for(let e=0;e<t.length;e++)if(!t[e]?.disabled)return e;return-1}var f={formattingOptionsAria:"Formatting options",moreToolsAria:"More tools",gridPickerLabel:(t,e)=>`${t} x ${e}`},v=/* @__PURE__ */Object.assign({"./locales/ar.ts":()=>import("./ar-D5jV20Tu.mjs"),"./locales/de.ts":()=>import("./de-DyF2mRfw.mjs"),"./locales/es.ts":()=>import("./es-DC6mYTD3.mjs"),"./locales/fr.ts":()=>import("./fr-ZKDCEpww.mjs"),"./locales/hi.ts":()=>import("./hi-BzflHG6Y.mjs"),"./locales/pt.ts":()=>import("./pt-BjNWQm9A.mjs"),"./locales/ru.ts":()=>import("./ru-CN63yWk_.mjs"),"./locales/zh.ts":()=>import("./zh-OWVKcbVR.mjs")});async function g(t){return i(v,t,f)}var w={BurgerMenu:"burger-menu",Flow:"flow",None:"none"},x="notectl-toolbar-btn--overflow-hidden",y="notectl-toolbar-separator--overflow-hidden",E=class{toolbar;context;onOverflowChange;onItemActivated;getActiveElement;ariaLabel;popupManager;entries=[];overflowButton=null;overflowDropdown=null;overflowHandle=null;overflowEntries=[];resizeObserver=null;closeHandler=null;closeHandlerTimer=null;closeHandlerAttached=!1;constructor(t){this.toolbar=t.toolbar,this.ariaLabel=t.ariaLabel,this.context=t.context,this.onOverflowChange=t.onOverflowChange,this.onItemActivated=t.onItemActivated,this.getActiveElement=t.getActiveElement,this.popupManager=t.popupManager??null,this.resizeObserver=new ResizeObserver(()=>this.recalculate()),this.resizeObserver.observe(this.toolbar)}update(t){this.entries=t.map(t=>({element:t.element,item:t.item})),this.recalculate()}recalculate(){if(0===this.entries.length)return;this.closeDropdown(),this.resetVisibility(),this.ensureOverflowButton(),this.setOverflowButtonVisible(!1);const t=this.measureAvailableWidth(),e=Array.from(this.toolbar.children),o=this.measureChildWidths(e),n=t-34-2;let r=0,i=!1;const l=[];for(const s of e){if(s===this.overflowButton)continue;if(s.classList.contains("notectl-toolbar-separator")){if(i){s.classList.add(y);continue}const t=(o.get(s)??0)+2;r+t>n?(i=!0,s.classList.add(y)):r+=t;continue}const t=this.entries.find(t=>t.element===s);if(!t)continue;if(i){t.element.classList.add(x),l.push(t);continue}const e=(o.get(s)??0)+2;r+e>n?(i=!0,t.element.classList.add(x),l.push(t)):r+=e}this.overflowEntries=l,this.hideTrailingSeparators(),this.setOverflowButtonVisible(l.length>0),this.notifyChange()}updateItemStates(t){if(!this.overflowDropdown)return;const e=Array.from(this.overflowDropdown.querySelectorAll(".notectl-dropdown__item"));for(const o of e){const e=o.getAttribute("data-toolbar-item"),n=this.overflowEntries.find(t=>t.item.id===e);if(!n)continue;const r=n.item.isActive?.(t)??!1,i=n.item.isEnabled?.(t)??!0;if(o.classList.toggle("notectl-dropdown__item--active",r),o.disabled=!i,"combobox"===n.item.popupType){const e=o.querySelector(".notectl-dropdown__item-label");e&&(e.textContent=n.item.getLabel(t))}if(n.item.getIcon){const e=n.item.getIcon(t),r=o.querySelector(".notectl-dropdown__item-icon");r&&r.innerHTML!==e&&(r.innerHTML=e)}}}destroy(){this.resizeObserver?.disconnect(),this.resizeObserver=null,this.closeDropdown(),this.overflowButton?.remove(),this.overflowButton=null,this.entries=[],this.overflowEntries=[]}measureChildWidths(t){const e=/* @__PURE__ */new Map;for(const o of t)o!==this.overflowButton&&e.set(o,o.offsetWidth);return e}measureAvailableWidth(){const t=getComputedStyle(this.toolbar),e=Number.parseFloat(t.paddingLeft)||0,o=Number.parseFloat(t.paddingRight)||0;return this.toolbar.clientWidth-e-o}resetVisibility(){for(const e of this.entries)e.element.classList.remove(x);const t=Array.from(this.toolbar.querySelectorAll(".notectl-toolbar-separator"));for(const e of t)e.classList.remove(y)}setOverflowButtonVisible(t){this.overflowButton&&(this.overflowButton.classList.toggle("notectl-toolbar-overflow-btn--hidden",!t),t||this.overflowButton.removeAttribute("tabindex"))}ensureOverflowButton(){if(this.overflowButton)return;const t=document.createElement("button");t.type="button",t.className="notectl-toolbar-overflow-btn",t.setAttribute("aria-label",this.ariaLabel),t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded","false"),t.innerHTML='<svg viewBox="0 0 16 16" width="16" height="16"><circle cx="3" cy="8" r="1.5" fill="currentColor"/><circle cx="8" cy="8" r="1.5" fill="currentColor"/><circle cx="13" cy="8" r="1.5" fill="currentColor"/></svg>',t.addEventListener("mousedown",t=>{t.preventDefault(),this.toggleDropdown()}),this.toolbar.appendChild(t),this.overflowButton=t}toggleDropdown(){this.overflowDropdown?this.closeDropdown():this.openDropdown()}openDropdown(){if(!this.overflowButton||0===this.overflowEntries.length)return;const t=document.createElement("div");t.className="notectl-toolbar-popup notectl-dropdown",t.setAttribute("role","menu"),this.renderDropdownItems(t,this.context.getState()),this.popupManager?(this.overflowHandle=this.popupManager.open({anchor:this.overflowButton,className:"notectl-toolbar-popup notectl-dropdown",ariaRole:"menu",position:"below-end",referenceNode:this.overflowButton,restoreFocusTo:this.overflowButton,onClose:()=>{this.overflowHandle=null,this.overflowDropdown=null,this.overflowButton&&this.overflowButton.setAttribute("aria-expanded","false")},content:t=>{this.renderDropdownItems(t,this.context.getState()),this.overflowDropdown=t,t.addEventListener("keydown",t=>this.handleDropdownKeydown(t))}}),this.overflowButton.setAttribute("aria-expanded","true")):(this.positionDropdown(t),p(t,this.overflowButton),this.overflowDropdown=t,this.overflowButton.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{t.querySelector('[role="menuitem"]')?.focus()}),t.addEventListener("keydown",t=>this.handleDropdownKeydown(t)),this.registerCloseHandler())}renderDropdownItems(t,e){let o=null;for(const n of this.overflowEntries){if(null!==o&&n.item.group!==o){const e=document.createElement("div");e.className="notectl-dropdown__separator",e.setAttribute("role","separator"),t.appendChild(e)}o=n.item.group;const r=document.createElement("button");r.type="button",r.className="notectl-dropdown__item",r.setAttribute("role","menuitem"),r.setAttribute("tabindex","-1"),r.setAttribute("data-toolbar-item",n.item.id);const i=document.createElement("span");i.className="notectl-dropdown__item-icon","combobox"!==n.item.popupType&&(i.innerHTML=n.item.icon),r.appendChild(i);const l=document.createElement("span");l.className="notectl-dropdown__item-label",l.textContent="combobox"===n.item.popupType?n.item.getLabel(e):n.item.tooltip??n.item.label,r.appendChild(l),r.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.activateOverflowItem(n)}),t.appendChild(r)}}positionDropdown(e){if(!this.overflowButton)return;const o=this.overflowButton.getBoundingClientRect(),n=t(this.toolbar);d(e,o,{position:n?"below-start":"below-end",isRtl:n})}registerCloseHandler(){this.closeHandler=t=>{const e=t.composedPath();this.overflowDropdown&&!e.includes(this.overflowDropdown)&&this.overflowButton&&!e.includes(this.overflowButton)&&this.closeDropdown()},this.closeHandlerTimer=setTimeout(()=>{this.closeHandlerTimer=null,this.closeHandler&&this.overflowDropdown&&(document.addEventListener("mousedown",this.closeHandler),this.closeHandlerAttached=!0)},0)}closeDropdown(){if(this.overflowHandle){const t=this.overflowHandle;return this.overflowHandle=null,this.overflowDropdown=null,t.close(),void(this.overflowButton&&this.overflowButton.setAttribute("aria-expanded","false"))}this.overflowDropdown&&(this.overflowDropdown.remove(),this.overflowDropdown=null),this.overflowButton&&this.overflowButton.setAttribute("aria-expanded","false"),this.closeHandler&&(null!==this.closeHandlerTimer&&(clearTimeout(this.closeHandlerTimer),this.closeHandlerTimer=null),this.closeHandlerAttached&&(document.removeEventListener("mousedown",this.closeHandler),this.closeHandlerAttached=!1),this.closeHandler=null)}activateOverflowItem(t){this.closeDropdown(),t.item.popupType&&this.overflowButton?this.onItemActivated(this.overflowButton,t.item):this.context.executeCommand(t.item.command)}handleDropdownKeydown(t){if(!this.overflowDropdown)return;if("Escape"===t.key||"Tab"===t.key)return t.preventDefault(),t.stopPropagation(),this.closeDropdown(),void this.overflowButton?.focus();const e=Array.from(this.overflowDropdown.querySelectorAll('[role="menuitem"]')),o=e.indexOf(this.getActiveElement());switch(t.key){case"ArrowDown":t.preventDefault(),e[l(e,o,1)]?.focus();break;case"ArrowUp":t.preventDefault(),e[l(e,o,-1)]?.focus();break;case"Enter":case" ":{t.preventDefault();const n=e[o];if(!n)break;const r=n.getAttribute("data-toolbar-item"),i=this.overflowEntries.find(t=>t.item.id===r);i&&this.activateOverflowItem(i);break}}}hideTrailingSeparators(){const t=Array.from(this.toolbar.children);for(let e=t.length-1;e>=0;e--){const o=t[e];if(o&&o!==this.overflowButton)if(o.classList.contains("notectl-toolbar-separator"))o.classList.contains(y)||o.classList.add(y);else if(!o.classList.contains(x))break}}notifyChange(){const t=this.entries.filter(t=>!t.element.classList.contains(x)).map(t=>t.element);this.onOverflowChange(t,this.overflowEntries.length>0?this.overflowButton:null)}};function A(t,e,o){const n=t.querySelectorAll(".notectl-grid-picker__cell");for(const r of n){const t=Number(r.getAttribute("data-row")),n=Number(r.getAttribute("data-col"));r.classList.toggle("notectl-grid-picker__cell--highlighted",t<=e&&n<=o)}}function _(){const t=document.createElement("span");return t.className="notectl-toolbar-separator",t.setAttribute("role","separator"),t}var k=class{activePopup=null;activePopupButton=null;activeHandle=null;getActiveElement;locale;popupManager=null;constructor(t,e=f){this.getActiveElement=t,this.locale=e}setPopupManager(t){this.popupManager=t}isOpen(){return null!==this.activePopup}toggle(t,e,o){this.activePopup?this.close():this.openViaManager(t,e,o)}close(){if(this.activeHandle){const t=this.activeHandle;return this.activeHandle=null,this.clearButtonState(),void t.close()}this.clearButtonState(),this.activePopup&&(this.activePopup.remove(),this.activePopup=null)}closeAndRestoreFocus(){const t=this.activePopupButton;this.close(),t?.focus()}destroy(){this.close()}openViaManager(t,e,o){this.popupManager&&(this.activePopupButton=t,t.classList.add("notectl-toolbar-btn--popup-open"),t.setAttribute("aria-expanded","true"),this.activeHandle=this.popupManager.open({anchor:t,className:"notectl-toolbar-popup",referenceNode:t,restoreFocusTo:t,position:"below-start",onClose:()=>{this.activeHandle=null,this.clearButtonState(),this.activePopup=null},content:(t,n)=>{this.activePopup=t,this.renderPopupContent(t,e,o,n),t.addEventListener("keydown",t=>this.handlePopupKeydown(t))}}))}renderPopupContent(t,o,n,r){const i=()=>{r({restoreFocusTo:null}),n.getContainer().focus()};switch(o.popupType){case"gridPicker":!function(t,o,n,r=f){t.className+=" notectl-grid-picker";const i=document.createElement("div");i.className="notectl-grid-picker__grid",i.setAttribute("role","grid"),e(i,{display:"grid",gridTemplateColumns:`repeat(${o.maxCols}, 1fr)`,gap:"2px",padding:"8px"});const l=document.createElement("div");l.className="notectl-grid-picker__label",l.textContent=r.gridPickerLabel(1,1),e(l,{textAlign:"center",padding:"4px",fontSize:"12px"}),l.setAttribute("aria-live","polite");for(let s=1;s<=o.maxRows;s++)for(let t=1;t<=o.maxCols;t++){const a=document.createElement("div");a.className="notectl-grid-picker__cell",a.setAttribute("role","gridcell"),a.setAttribute("tabindex","-1"),a.setAttribute("aria-label",r.gridPickerLabel(s,t)),e(a,{width:"20px",height:"20px",border:"1px solid #ccc",cursor:"pointer"}),a.setAttribute("data-row",String(s)),a.setAttribute("data-col",String(t)),a.addEventListener("mouseenter",()=>{A(i,s,t),l.textContent=r.gridPickerLabel(s,t)}),a.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation()}),a.addEventListener("click",()=>{o.onSelect(s,t),n()}),i.appendChild(a)}t.appendChild(i),t.appendChild(l)}(t,o.popupConfig,i,this.locale);break;case"dropdown":!function(t,e,o,r){t.classList.add("notectl-dropdown"),t.setAttribute("role","menu");for(const i of e.items){const e=document.createElement("button");if(e.type="button",e.className="notectl-dropdown__item",e.setAttribute("role","menuitem"),e.setAttribute("tabindex","-1"),i.icon){const t=document.createElement("span");t.className="notectl-dropdown__item-icon",t.innerHTML=i.icon,e.appendChild(t)}const o=document.createElement("span");o.className="notectl-dropdown__item-label",o.textContent=i.label,e.appendChild(o),e.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation()}),e.addEventListener("click",()=>{var t;t=i.command,n.executeCommand(t),r()}),t.appendChild(e)}}(t,o.popupConfig,0,i);break;case"custom":case"combobox":o.renderPopup(t,n,r)}}clearButtonState(){this.activePopupButton&&(this.activePopupButton.classList.remove("notectl-toolbar-btn--popup-open"),this.activePopupButton.setAttribute("aria-expanded","false"),this.activePopupButton=null)}handlePopupKeydown(t){if(!this.activePopup)return;if("Escape"===t.key)return t.preventDefault(),t.stopPropagation(),void this.closeAndRestoreFocus();if("Tab"===t.key)return t.preventDefault(),void this.closeAndRestoreFocus();const e=this.activePopup.querySelectorAll('[role="menuitem"]');e.length>0?this.handleDropdownKeydown(t,e):null===this.activePopup.querySelector(".notectl-grid-picker__cell")?this.handleCustomPopupKeydown(t):this.handleGridKeydown(t)}handleDropdownKeydown(t,e){const o=Array.from(e),n=o.indexOf(this.getActiveElement());switch(t.key){case"ArrowDown":t.preventDefault(),o[l(o,n,1)]?.focus();break;case"ArrowUp":t.preventDefault(),o[l(o,n,-1)]?.focus();break;case"Enter":case" ":{t.preventDefault();const e=o[n];e&&e.click();break}}}handleGridKeydown(e){const o=this.getActiveElement(),n=Number(o?.getAttribute("data-row")??1),r=Number(o?.getAttribute("data-col")??1),i=this.activePopup?.querySelector(".notectl-grid-picker__grid")??null;if(!i)return;const l=i.querySelector(".notectl-grid-picker__cell:last-child"),a=Number(l?.getAttribute("data-col")??1),c=Number(l?.getAttribute("data-row")??1);if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.key)){e.preventDefault();const[o,l]=s(n,r,c,a,e.key,!!this.activePopup&&t(this.activePopup));i.querySelector(`.notectl-grid-picker__cell[data-row="${o}"][data-col="${l}"]`)?.focus(),A(i,o,l);const d=this.activePopup?.querySelector(".notectl-grid-picker__label")??null;d&&(d.textContent=this.locale.gridPickerLabel(o,l))}"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),o?.click())}handleCustomPopupKeydown(t){if(!this.activePopup)return;const e=Array.from(this.activePopup.querySelectorAll("button"));if(0===e.length)return;const o=this.getActiveElement(),n=e.indexOf(o);switch(t.key){case"ArrowDown":t.preventDefault(),e[l(e,n,1)]?.focus();break;case"ArrowUp":t.preventDefault(),e[l(e,n,-1)]?.focus();break;case"Enter":case" ":t.preventDefault(),o&&o.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0}))}}},C=class t{element;timer=null;target=null;isPopupActive;static TOOLTIP_ID="notectl-toolbar-tooltip";constructor(e){this.isPopupActive=e,this.element=document.createElement("div"),this.element.className="notectl-toolbar-tooltip",this.element.id=t.TOOLTIP_ID,this.element.setAttribute("role","tooltip"),o(this.element,"display","none")}show(n){if(this.hide(),this.isPopupActive()||n.disabled)return;const r=n.getAttribute("data-tooltip");r&&(this.target=n,this.timer=setTimeout(()=>{if(this.isPopupActive())return;this.element.textContent=r,o(this.element,"display","");const i=n.getRootNode();i instanceof ShadowRoot&&!this.element.parentNode?i.appendChild(this.element):i instanceof ShadowRoot||this.element.parentNode||document.body.appendChild(this.element),n.setAttribute("aria-describedby",t.TOOLTIP_ID);const l=n.getBoundingClientRect();o(this.element,"position","fixed");const s=c(this.element);e(this.element,{top:l.bottom+6-s.y+"px",left:l.left+l.width/2-s.x+"px",transform:"translateX(-50%)"})},500))}hide(){this.timer&&(clearTimeout(this.timer),this.timer=null),this.target&&(this.target.removeAttribute("aria-describedby"),this.target=null),o(this.element,"display","none")}destroy(){this.hide(),this.element.remove()}},B=new n("toolbar"),P=class{id="toolbar";name="Toolbar";priority=10;context=null;toolbarElement=null;buttons=[];hiddenItems=/* @__PURE__ */new Set;layoutConfig;overflowBehavior;focusedIndex=0;tooltip=null;popupController=null;popupManager=null;overflowController=null;visibleElements=[];locale;constructor(t){this.layoutConfig=t??null,this.overflowBehavior=t?.overflow??w.BurgerMenu}async init(t){this.locale=await r(t,void 0,f,g),t.registerStyleSheet('\n/* Toolbar */\n.notectl-plugin-container--top {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\tborder-bottom: 1px solid var(--notectl-border);\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n\tmin-height: 40px;\n\tflex-shrink: 0;\n}\n\n.notectl-toolbar {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n\tflex: 1;\n\tmin-width: 0;\n\tgap: 2px;\n\tpadding: 4px 8px;\n}\n\n.notectl-toolbar[hidden] {\n\tdisplay: none;\n}\n\n.notectl-toolbar-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 14px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-btn--active {\n\tbackground: var(--notectl-active-bg);\n\tborder-color: var(--notectl-primary-muted);\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-toolbar-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n.notectl-toolbar-btn:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn:disabled:hover {\n\t\tbackground: transparent;\n\t\tborder-color: transparent;\n\t}\n}\n\n.notectl-toolbar-btn__icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpointer-events: none;\n}\n\n.notectl-toolbar-btn__icon svg {\n\tdisplay: block;\n\twidth: 18px;\n\theight: 18px;\n\tfill: currentColor;\n}\n\n/* Tooltip (rendered as fixed-position element in shadow root) */\n.notectl-toolbar-tooltip {\n\tpadding: 4px 8px;\n\tborder-radius: 4px;\n\tbackground: var(--notectl-tooltip-bg);\n\tcolor: var(--notectl-tooltip-fg);\n\tfont-size: 11px;\n\tfont-weight: 500;\n\twhite-space: nowrap;\n\tpointer-events: none;\n\tz-index: 10001;\n\tline-height: 1.4;\n\tletter-spacing: 0.01em;\n\tfont-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif;\n}\n\n.notectl-toolbar-separator {\n\tdisplay: inline-block;\n\twidth: 1px;\n\theight: 20px;\n\tbackground: var(--notectl-border);\n\tmargin: 0 4px;\n\tvertical-align: middle;\n}\n\n/* Toolbar Popups */\n.notectl-toolbar-popup {\n\tbackground: var(--notectl-surface-overlay);\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 12px var(--notectl-shadow);\n\toverflow: hidden;\n}\n\n/* Grid Picker */\n.notectl-grid-picker__cell:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n\n.notectl-grid-picker__cell--highlighted {\n\tbackground: var(--notectl-primary-muted);\n\tborder-color: var(--notectl-primary);\n}\n\n/* Dropdown */\n.notectl-dropdown {\n\tmin-width: 160px;\n\tpadding: 4px 0;\n}\n\n.notectl-dropdown__item {\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 100%;\n\tpadding: 8px 12px;\n\ttext-align: start;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\tline-height: 1.4;\n\tfont-family: inherit;\n\twhite-space: nowrap;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-dropdown__item:focus-visible {\n\tbackground: var(--notectl-hover-bg);\n\toutline: none;\n}\n\n.notectl-dropdown__item-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-fg-muted);\n\tflex-shrink: 0;\n}\n\n.notectl-dropdown__item-label {\n\tflex: 1;\n}\n\n/* Overflow behavior: flow mode — toolbar wraps to additional rows */\n.notectl-toolbar[data-overflow="flow"] {\n\tflex-wrap: wrap;\n\toverflow: visible;\n}\n\n/* Overflow behavior: none — toolbar clips without any responsive behavior */\n.notectl-toolbar[data-overflow="none"] {\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n}\n\n/* Overflow: hidden items (burger-menu mode) */\n.notectl-toolbar-btn--overflow-hidden,\n.notectl-toolbar-separator--overflow-hidden {\n\tdisplay: none;\n}\n\n/* Overflow "more" button */\n.notectl-toolbar-overflow-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 16px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\tmargin-inline-start: auto;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-overflow-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-overflow-btn--hidden {\n\tdisplay: none;\n}\n\n.notectl-toolbar-overflow-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n/* Dropdown item states shared by all dropdown menus (including overflow) */\n.notectl-dropdown__item:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:disabled:hover {\n\t\tbackground: none;\n\t}\n}\n\n.notectl-dropdown__item--active {\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-dropdown__item-icon svg {\n\tdisplay: block;\n\twidth: 16px;\n\theight: 16px;\n\tfill: currentColor;\n}\n\n.notectl-dropdown__separator {\n\theight: 1px;\n\tbackground: var(--notectl-border);\n\tmargin: 4px 0;\n}\n\n/* Combobox-style toolbar buttons (shared base for font, fontSize, heading, etc.) */\n.notectl-toolbar-btn[role="combobox"] {\n\twidth: auto;\n\tpadding: 0 8px;\n\tgap: 4px;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn[role="combobox"]:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-fg-muted);\n\t}\n}\n\n.notectl-toolbar-btn[role="combobox"].notectl-toolbar-btn--active {\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n\tborder-color: var(--notectl-primary-muted);\n}\n\n.notectl-toolbar-combobox__label {\n\tflex: 1;\n\tfont-size: 13px;\n\tfont-weight: 500;\n\tcolor: var(--notectl-fg);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\ttext-align: start;\n\tline-height: 30px;\n}\n\n.notectl-toolbar-combobox__arrow {\n\tflex-shrink: 0;\n\tfont-size: 11px;\n\tcolor: var(--notectl-fg-muted);\n\tline-height: 30px;\n}\n\n/* Link Popup */\n.notectl-link-popup {\n\tpadding: 8px;\n\tmin-width: 200px;\n}\n\n.notectl-link-popup__input {\n\twidth: 100%;\n\tpadding: 4px;\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tfont-size: 13px;\n\tcolor: var(--notectl-fg);\n\tbackground: var(--notectl-surface-overlay);\n}\n\n.notectl-link-popup__input:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n\n.notectl-link-popup__button {\n\twidth: 100%;\n\tpadding: 6px 12px;\n\tcursor: pointer;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-surface-overlay);\n\tcolor: var(--notectl-fg);\n\tfont-size: 13px;\n}\n\n.notectl-link-popup__button--apply {\n\tmargin-top: 4px;\n}\n\n@media (hover: hover) {\n\t.notectl-link-popup__button:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-link-popup__button:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n'),this.context=t,this.popupManager=new h(t.getContainer()),t.registerService(u,this.popupManager),this.popupController=new k(()=>this.getActiveElement(),this.locale),this.popupController.setPopupManager(this.popupManager),this.tooltip=new C(()=>this.popupController?.isOpen()??!1),t.registerService(B,{refresh:()=>this.updateButtonStates(t.getState()),closePopup:()=>this.popupController?.close()}),this.createToolbarElement()}getOverflowBehavior(){return this.overflowBehavior}setOverflowBehavior(t){t!==this.overflowBehavior&&(this.overflowBehavior=t,this.applyOverflowBehavior(),this.renderItems())}onReady(){this.renderItems()}destroy(){this.overflowController?.destroy(),this.overflowController=null,this.popupController?.destroy(),this.popupController=null,this.popupManager?.destroy(),this.popupManager=null,this.tooltip?.destroy(),this.tooltip=null,this.toolbarElement&&(this.toolbarElement.remove(),this.toolbarElement=null),this.buttons=[],this.visibleElements=[],this.context=null}onStateChange(t,e,o){this.updateButtonStates(e)}onReadOnlyChange(t){this.toolbarElement&&(this.toolbarElement.hidden=t)}onConfigure(t){for(const[e,o]of Object.entries(t))!1===o?this.hiddenItems.add(e):this.hiddenItems.delete(e);this.renderItems()}createToolbarElement(){if(!this.context)return;this.toolbarElement&&this.toolbarElement.remove(),this.buttons=[];const t=this.context.getPluginContainer("top");this.toolbarElement=document.createElement("div"),this.toolbarElement.setAttribute("role","toolbar"),this.toolbarElement.setAttribute("aria-label",this.locale.formattingOptionsAria),this.toolbarElement.setAttribute("data-notectl-no-print",""),this.toolbarElement.className="notectl-toolbar",this.toolbarElement.addEventListener("keydown",t=>this.handleToolbarKeydown(t)),this.applyOverflowBehavior(),t.appendChild(this.toolbarElement)}applyOverflowBehavior(){this.toolbarElement&&this.context&&(this.overflowController?.destroy(),this.overflowController=null,this.toolbarElement.setAttribute("data-overflow",this.overflowBehavior),this.overflowBehavior===w.BurgerMenu?this.overflowController=new E({toolbar:this.toolbarElement,ariaLabel:this.locale.moreToolsAria,context:this.context,popupManager:this.popupManager??void 0,onOverflowChange:(t,e)=>{this.visibleElements=e?[...t,e]:[...t],this.initRovingTabindex()},onItemActivated:(t,e)=>{this.activateButton(t,e)},getActiveElement:()=>this.getActiveElement()}):this.visibleElements=[])}renderItems(){if(this.context&&this.toolbarElement){for(const t of this.buttons)t.element.remove();this.buttons=[];for(const t of this.toolbarElement.querySelectorAll(".notectl-toolbar-separator"))t.remove();this.layoutConfig?this.renderItemsByLayout():this.renderItemsByGroup(),this.buttons.length>0&&!this.toolbarElement.parentElement&&this.context.getPluginContainer("top").appendChild(this.toolbarElement),this.overflowController?.update(this.buttons),this.initRovingTabindex(),this.updateButtonStates(this.context.getState())}}getTabElements(){return this.visibleElements.length>0?this.visibleElements:this.buttons.map(t=>t.element)}initRovingTabindex(){const t=this.getTabElements(),e=m(t);this.focusedIndex=e>=0?e:0,a(t,this.focusedIndex)}setRovingFocus(t){const e=this.getTabElements();t<0||t>=e.length||(this.focusedIndex=t,a(e,t),e[t]?.focus())}getActiveElement(){const t=this.toolbarElement?.getRootNode();return t instanceof ShadowRoot?t.activeElement:document.activeElement}syncFocusedIndex(){const t=this.getActiveElement(),e=this.getTabElements().findIndex(e=>e===t);e>=0&&(this.focusedIndex=e)}handleToolbarKeydown(e){const o=this.getTabElements();var n;if(0!==o.length)switch(this.syncFocusedIndex(),e.key){case"ArrowRight":case"ArrowLeft":{e.preventDefault();const r=(n=!!this.toolbarElement&&t(this.toolbarElement),"ArrowRight"===e.key?n?-1:1:n?1:-1),i=function(t,e,o){const n=t.length;if(0===n)return-1;let r=e;for(let i=0;i<n;i++)if(r=(r+o+n)%n,!t[r]?.disabled)return r;return e}(o,this.focusedIndex,r);this.setRovingFocus(i);break}case"Home":{e.preventDefault();const t=m(o);t>=0&&this.setRovingFocus(t);break}case"End":{e.preventDefault();const t=function(t){for(let e=t.length-1;e>=0;e--)if(!t[e]?.disabled)return e;return-1}(o);t>=0&&this.setRovingFocus(t);break}case"Enter":case" ":{e.preventDefault();const t=o[this.focusedIndex],n=this.buttons.find(e=>e.element===t);n&&this.activateButton(n.element,n.item);break}}}activateButton(t,e){this.tooltip?.hide(),e.popupType&&this.context?this.popupController?.toggle(t,e,this.context):this.context?.executeCommand(e.command)}renderItemsByLayout(){if(!this.context||!this.toolbarElement||!this.layoutConfig)return;const t=this.context.getToolbarRegistry();let e=!0;for(const o of this.layoutConfig.groups){const n=[];for(const e of o){const o=t.getToolbarItemsByPlugin(e).filter(t=>!this.hiddenItems.has(t.id));n.push(...o)}if(0!==n.length){e||this.toolbarElement.appendChild(_()),e=!1;for(const t of n){const e=this.createButton(t);this.toolbarElement.appendChild(e.element),this.buttons.push(e)}}}0===this.buttons.length&&this.toolbarElement.remove()}renderItemsByGroup(){if(!this.context||!this.toolbarElement)return;const t=this.context.getToolbarRegistry().getToolbarItems().filter(t=>!this.hiddenItems.has(t.id));if(0===t.length)return void this.toolbarElement.remove();const e=/* @__PURE__ */new Map;for(const n of t){const t=e.get(n.group)??[];t.push(n),e.set(n.group,t)}let o=!0;for(const[,n]of e){o||this.toolbarElement.appendChild(_()),o=!1;for(const t of n){const e=this.createButton(t);this.toolbarElement.appendChild(e.element),this.buttons.push(e)}}}createButton(t){const e=document.createElement("button");e.type="button",e.className=`notectl-toolbar-btn notectl-toolbar-btn--${t.id}`,e.setAttribute("aria-pressed","false"),e.setAttribute("aria-label",t.label),e.setAttribute("data-toolbar-item",t.id),e.setAttribute("data-tooltip",t.tooltip??t.label);let o=null;if("combobox"===t.popupType){e.setAttribute("role","combobox"),e.setAttribute("aria-haspopup","listbox"),e.setAttribute("aria-expanded","false");const n=document.createElement("span");n.className="notectl-toolbar-combobox__label";const r=this.context?.getState();r&&(n.textContent=t.getLabel(r)),e.appendChild(n),o=n;const i=document.createElement("span");i.className="notectl-toolbar-combobox__arrow",i.setAttribute("aria-hidden","true"),i.textContent="▾",e.appendChild(i)}else{t.popupType&&(e.setAttribute("aria-haspopup","true"),e.setAttribute("aria-expanded","false"));const o=document.createElement("span");o.className="notectl-toolbar-btn__icon",o.innerHTML=t.icon,e.appendChild(o)}return e.addEventListener("mousedown",o=>{o.preventDefault(),this.activateButton(e,t)}),e.addEventListener("mouseenter",()=>this.tooltip?.show(e)),e.addEventListener("mouseleave",()=>this.tooltip?.hide()),e.addEventListener("focus",()=>this.tooltip?.show(e)),e.addEventListener("blur",()=>this.tooltip?.hide()),{element:e,item:t,comboLabelEl:o}}updateButtonStates(t){for(const e of this.buttons){const o=e.item.isActive?.(t)??!1,n=e.item.isEnabled?.(t)??!0;if(e.element.setAttribute("aria-pressed",String(o)),e.element.classList.toggle("notectl-toolbar-btn--active",o),e.element.disabled=!n,n?e.element.removeAttribute("aria-disabled"):e.element.setAttribute("aria-disabled","true"),e.comboLabelEl&&"combobox"===e.item.popupType&&(e.comboLabelEl.textContent=e.item.getLabel(t)),e.item.getIcon){const o=e.item.getIcon(t),n=e.element.querySelector(".notectl-toolbar-btn__icon");n&&n.innerHTML!==o&&(n.innerHTML=o)}}this.overflowController?.updateItemStates(t)}};export{g as a,f as i,B as n,b as o,w as r,P as t};
|
|
2
|
-
//# sourceMappingURL=ToolbarPlugin-DeH8n5d2.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarPlugin-DeH8n5d2.mjs","names":[],"sources":["../../src/plugins/toolbar/ToolbarRegistry.ts","../../src/editor/styles/toolbar.ts","../../src/plugins/toolbar/ToolbarKeyboardNav.ts","../../src/plugins/toolbar/ToolbarLocale.ts","../../src/plugins/toolbar/ToolbarOverflowBehavior.ts","../../src/plugins/toolbar/ToolbarOverflowController.ts","../../src/plugins/toolbar/ToolbarRenderers.ts","../../src/plugins/toolbar/ToolbarPopupController.ts","../../src/plugins/toolbar/ToolbarTooltip.ts","../../src/plugins/toolbar/ToolbarPlugin.ts"],"sourcesContent":["/**\n * ToolbarRegistry: manages plugin-registered toolbar items\n * with per-plugin tracking for clean teardown.\n */\n\nimport type { ToolbarItem } from './ToolbarItem.js';\n\nexport class ToolbarRegistry {\n\tprivate readonly _toolbarItems = new Map<string, ToolbarItem>();\n\tprivate readonly _toolbarItemPluginMap = new Map<string, string[]>();\n\n\tregisterToolbarItem(item: ToolbarItem, pluginId?: string): void {\n\t\tif (this._toolbarItems.has(item.id)) {\n\t\t\tthrow new Error(`ToolbarItem with id \"${item.id}\" is already registered.`);\n\t\t}\n\t\tthis._toolbarItems.set(item.id, item);\n\t\tif (pluginId) {\n\t\t\tconst ids = this._toolbarItemPluginMap.get(pluginId) ?? [];\n\t\t\tids.push(item.id);\n\t\t\tthis._toolbarItemPluginMap.set(pluginId, ids);\n\t\t}\n\t}\n\n\tgetToolbarItemsByPlugin(pluginId: string): ToolbarItem[] {\n\t\tconst ids = this._toolbarItemPluginMap.get(pluginId) ?? [];\n\t\tconst items: ToolbarItem[] = [];\n\t\tfor (const id of ids) {\n\t\t\tconst item = this._toolbarItems.get(id);\n\t\t\tif (item) items.push(item);\n\t\t}\n\t\treturn items;\n\t}\n\n\tgetToolbarItem(id: string): ToolbarItem | undefined {\n\t\treturn this._toolbarItems.get(id);\n\t}\n\n\tgetToolbarItems(): ToolbarItem[] {\n\t\treturn [...this._toolbarItems.values()];\n\t}\n\n\tremoveToolbarItem(id: string): void {\n\t\tthis._toolbarItems.delete(id);\n\t\tfor (const [pluginId, ids] of this._toolbarItemPluginMap) {\n\t\t\tconst idx = ids.indexOf(id);\n\t\t\tif (idx !== -1) {\n\t\t\t\tids.splice(idx, 1);\n\t\t\t\tif (ids.length === 0) this._toolbarItemPluginMap.delete(pluginId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tclear(): void {\n\t\tthis._toolbarItems.clear();\n\t\tthis._toolbarItemPluginMap.clear();\n\t}\n}\n","/** Toolbar styles — buttons, separators, tooltips, popups, dropdowns. */\nexport const TOOLBAR_CSS = `\n/* Toolbar */\n.notectl-plugin-container--top {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\tborder-bottom: 1px solid var(--notectl-border);\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n\tmin-height: 40px;\n\tflex-shrink: 0;\n}\n\n.notectl-toolbar {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n\tflex: 1;\n\tmin-width: 0;\n\tgap: 2px;\n\tpadding: 4px 8px;\n}\n\n.notectl-toolbar[hidden] {\n\tdisplay: none;\n}\n\n.notectl-toolbar-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 14px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-btn--active {\n\tbackground: var(--notectl-active-bg);\n\tborder-color: var(--notectl-primary-muted);\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-toolbar-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n.notectl-toolbar-btn:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn:disabled:hover {\n\t\tbackground: transparent;\n\t\tborder-color: transparent;\n\t}\n}\n\n.notectl-toolbar-btn__icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpointer-events: none;\n}\n\n.notectl-toolbar-btn__icon svg {\n\tdisplay: block;\n\twidth: 18px;\n\theight: 18px;\n\tfill: currentColor;\n}\n\n/* Tooltip (rendered as fixed-position element in shadow root) */\n.notectl-toolbar-tooltip {\n\tpadding: 4px 8px;\n\tborder-radius: 4px;\n\tbackground: var(--notectl-tooltip-bg);\n\tcolor: var(--notectl-tooltip-fg);\n\tfont-size: 11px;\n\tfont-weight: 500;\n\twhite-space: nowrap;\n\tpointer-events: none;\n\tz-index: 10001;\n\tline-height: 1.4;\n\tletter-spacing: 0.01em;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.notectl-toolbar-separator {\n\tdisplay: inline-block;\n\twidth: 1px;\n\theight: 20px;\n\tbackground: var(--notectl-border);\n\tmargin: 0 4px;\n\tvertical-align: middle;\n}\n\n/* Toolbar Popups */\n.notectl-toolbar-popup {\n\tbackground: var(--notectl-surface-overlay);\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 12px var(--notectl-shadow);\n\toverflow: hidden;\n}\n\n/* Grid Picker */\n.notectl-grid-picker__cell:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n\n.notectl-grid-picker__cell--highlighted {\n\tbackground: var(--notectl-primary-muted);\n\tborder-color: var(--notectl-primary);\n}\n\n/* Dropdown */\n.notectl-dropdown {\n\tmin-width: 160px;\n\tpadding: 4px 0;\n}\n\n.notectl-dropdown__item {\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 100%;\n\tpadding: 8px 12px;\n\ttext-align: start;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\tline-height: 1.4;\n\tfont-family: inherit;\n\twhite-space: nowrap;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-dropdown__item:focus-visible {\n\tbackground: var(--notectl-hover-bg);\n\toutline: none;\n}\n\n.notectl-dropdown__item-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-fg-muted);\n\tflex-shrink: 0;\n}\n\n.notectl-dropdown__item-label {\n\tflex: 1;\n}\n\n/* Overflow behavior: flow mode — toolbar wraps to additional rows */\n.notectl-toolbar[data-overflow=\"flow\"] {\n\tflex-wrap: wrap;\n\toverflow: visible;\n}\n\n/* Overflow behavior: none — toolbar clips without any responsive behavior */\n.notectl-toolbar[data-overflow=\"none\"] {\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n}\n\n/* Overflow: hidden items (burger-menu mode) */\n.notectl-toolbar-btn--overflow-hidden,\n.notectl-toolbar-separator--overflow-hidden {\n\tdisplay: none;\n}\n\n/* Overflow \"more\" button */\n.notectl-toolbar-overflow-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 16px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\tmargin-inline-start: auto;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-overflow-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-overflow-btn--hidden {\n\tdisplay: none;\n}\n\n.notectl-toolbar-overflow-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n/* Dropdown item states shared by all dropdown menus (including overflow) */\n.notectl-dropdown__item:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:disabled:hover {\n\t\tbackground: none;\n\t}\n}\n\n.notectl-dropdown__item--active {\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-dropdown__item-icon svg {\n\tdisplay: block;\n\twidth: 16px;\n\theight: 16px;\n\tfill: currentColor;\n}\n\n.notectl-dropdown__separator {\n\theight: 1px;\n\tbackground: var(--notectl-border);\n\tmargin: 4px 0;\n}\n\n/* Combobox-style toolbar buttons (shared base for font, fontSize, heading, etc.) */\n.notectl-toolbar-btn[role=\"combobox\"] {\n\twidth: auto;\n\tpadding: 0 8px;\n\tgap: 4px;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn[role=\"combobox\"]:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-fg-muted);\n\t}\n}\n\n.notectl-toolbar-btn[role=\"combobox\"].notectl-toolbar-btn--active {\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n\tborder-color: var(--notectl-primary-muted);\n}\n\n.notectl-toolbar-combobox__label {\n\tflex: 1;\n\tfont-size: 13px;\n\tfont-weight: 500;\n\tcolor: var(--notectl-fg);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\ttext-align: start;\n\tline-height: 30px;\n}\n\n.notectl-toolbar-combobox__arrow {\n\tflex-shrink: 0;\n\tfont-size: 11px;\n\tcolor: var(--notectl-fg-muted);\n\tline-height: 30px;\n}\n\n/* Link Popup */\n.notectl-link-popup {\n\tpadding: 8px;\n\tmin-width: 200px;\n}\n\n.notectl-link-popup__input {\n\twidth: 100%;\n\tpadding: 4px;\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tfont-size: 13px;\n\tcolor: var(--notectl-fg);\n\tbackground: var(--notectl-surface-overlay);\n}\n\n.notectl-link-popup__input:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n\n.notectl-link-popup__button {\n\twidth: 100%;\n\tpadding: 6px 12px;\n\tcursor: pointer;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-surface-overlay);\n\tcolor: var(--notectl-fg);\n\tfont-size: 13px;\n}\n\n.notectl-link-popup__button--apply {\n\tmargin-top: 4px;\n}\n\n@media (hover: hover) {\n\t.notectl-link-popup__button:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-link-popup__button:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n`;\n","/**\n * Keyboard navigation helpers for the toolbar (WAI-ARIA Toolbar pattern).\n * Also re-exports generic navigation helpers from `plugins/shared`.\n */\n\n/** Returns indices of all enabled buttons. */\nexport function getEnabledIndices(buttons: readonly HTMLButtonElement[]): number[] {\n\tconst result: number[] = [];\n\tfor (let i = 0; i < buttons.length; i++) {\n\t\tif (!buttons[i]?.disabled) {\n\t\t\tresult.push(i);\n\t\t}\n\t}\n\treturn result;\n}\n\n/** Finds the next enabled button index in the given direction (wraps around). */\nexport function findNextEnabled(\n\tbuttons: readonly HTMLButtonElement[],\n\tcurrent: number,\n\tdirection: 1 | -1,\n): number {\n\tconst len = buttons.length;\n\tif (len === 0) return -1;\n\n\tlet index = current;\n\tfor (let i = 0; i < len; i++) {\n\t\tindex = (index + direction + len) % len;\n\t\tif (!buttons[index]?.disabled) {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn current;\n}\n\n/** Finds the first enabled button index. */\nexport function findFirstEnabled(buttons: readonly HTMLButtonElement[]): number {\n\tfor (let i = 0; i < buttons.length; i++) {\n\t\tif (!buttons[i]?.disabled) return i;\n\t}\n\treturn -1;\n}\n\n/** Finds the last enabled button index. */\nexport function findLastEnabled(buttons: readonly HTMLButtonElement[]): number {\n\tfor (let i = buttons.length - 1; i >= 0; i--) {\n\t\tif (!buttons[i]?.disabled) return i;\n\t}\n\treturn -1;\n}\n\nexport {\n\tapplyRovingTabindex,\n\tfindNextDropdownItem,\n\tnavigateGrid,\n} from '../shared/KeyboardNav.js';\n\n/**\n * Resolves a horizontal navigation direction based on text direction.\n * In RTL, ArrowRight moves backward (-1) and ArrowLeft moves forward (1).\n */\nexport function resolveHorizontalDirection(\n\tkey: 'ArrowRight' | 'ArrowLeft',\n\tisRtl: boolean,\n): 1 | -1 {\n\tif (key === 'ArrowRight') return isRtl ? -1 : 1;\n\treturn isRtl ? 1 : -1;\n}\n","/** Locale interface and default English locale for the ToolbarPlugin. */\n\nimport { type LocaleModuleMap, loadLocaleModule } from '../shared/LocaleLoader.js';\n\n// --- Locale Interface ---\n\nexport interface ToolbarLocale {\n\treadonly formattingOptionsAria: string;\n\treadonly moreToolsAria: string;\n\treadonly gridPickerLabel: (rows: number, cols: number) => string;\n}\n\n// --- Default English Locale ---\n\nexport const TOOLBAR_LOCALE_EN: ToolbarLocale = {\n\tformattingOptionsAria: 'Formatting options',\n\tmoreToolsAria: 'More tools',\n\tgridPickerLabel: (rows: number, cols: number) => `${rows} x ${cols}`,\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: LocaleModuleMap<ToolbarLocale> = import.meta.glob<{\n\tdefault: ToolbarLocale;\n}>('./locales/*.ts', { eager: false });\n\nexport async function loadToolbarLocale(lang: string): Promise<ToolbarLocale> {\n\treturn loadLocaleModule(localeModules, lang, TOOLBAR_LOCALE_EN);\n}\n","/**\n * Controls how the toolbar responds when items exceed the available width.\n *\n * @example\n * ```typescript\n * const editor = await createEditor({\n * toolbar: {\n * groups: [[BoldPlugin, ItalicPlugin], [HeadingPlugin]],\n * overflow: ToolbarOverflowBehavior.Flow,\n * },\n * });\n * ```\n */\nexport const ToolbarOverflowBehavior = {\n\t/** Items that don't fit are hidden behind a \"...\" dropdown button. Default. */\n\tBurgerMenu: 'burger-menu',\n\t/** Toolbar wraps to additional rows when items overflow. Pure CSS, no JS measurement. */\n\tFlow: 'flow',\n\t/** No responsive behavior; the toolbar clips at the container boundary. */\n\tNone: 'none',\n} as const;\n\nexport type ToolbarOverflowBehavior =\n\t(typeof ToolbarOverflowBehavior)[keyof typeof ToolbarOverflowBehavior];\n","/**\n * ToolbarOverflowController: manages responsive toolbar overflow.\n * Uses ResizeObserver to detect when items exceed available width,\n * hides overflow items, and shows a \"more\" dropdown button.\n * Delegates popup lifecycle to PopupManager when available.\n */\n\nimport { isRtlContext } from '../../platform/Platform.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { PluginContext } from '../Plugin.js';\nimport { findNextDropdownItem } from '../shared/KeyboardNav.js';\nimport type { PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport { appendToRoot, positionPopup } from '../shared/PopupPositioning.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\n\n// --- Types ---\n\ninterface OverflowEntry {\n\treadonly element: HTMLButtonElement;\n\treadonly item: ToolbarItem;\n}\n\ntype OnOverflowChange = (\n\tvisibleButtons: readonly HTMLButtonElement[],\n\toverflowButton: HTMLButtonElement | null,\n) => void;\n\ntype OnItemActivated = (overflowButton: HTMLButtonElement, item: ToolbarItem) => void;\n\nexport interface OverflowControllerConfig {\n\treadonly toolbar: HTMLElement;\n\treadonly ariaLabel: string;\n\treadonly context: PluginContext;\n\treadonly onOverflowChange: OnOverflowChange;\n\treadonly onItemActivated: OnItemActivated;\n\treadonly getActiveElement: () => Element | null;\n\treadonly popupManager?: PopupManager;\n}\n\n// --- Constants ---\n\nconst OVERFLOW_BTN_WIDTH = 34;\nconst GAP = 2;\nconst HIDDEN_BTN_CLASS = 'notectl-toolbar-btn--overflow-hidden';\nconst HIDDEN_SEP_CLASS = 'notectl-toolbar-separator--overflow-hidden';\nconst HIDDEN_OVERFLOW_CLASS = 'notectl-toolbar-overflow-btn--hidden';\nconst ELLIPSIS_SVG =\n\t'<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/></svg>';\n\n// --- Controller ---\n\nexport class ToolbarOverflowController {\n\tprivate readonly toolbar: HTMLElement;\n\tprivate readonly context: PluginContext;\n\tprivate readonly onOverflowChange: OnOverflowChange;\n\tprivate readonly onItemActivated: OnItemActivated;\n\tprivate readonly getActiveElement: () => Element | null;\n\tprivate readonly ariaLabel: string;\n\tprivate readonly popupManager: PopupManager | null;\n\n\tprivate entries: OverflowEntry[] = [];\n\tprivate overflowButton: HTMLButtonElement | null = null;\n\tprivate overflowDropdown: HTMLElement | null = null;\n\tprivate overflowHandle: PopupHandle | null = null;\n\tprivate overflowEntries: OverflowEntry[] = [];\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate closeHandler: ((e: MouseEvent) => void) | null = null;\n\tprivate closeHandlerTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate closeHandlerAttached = false;\n\n\tconstructor(config: OverflowControllerConfig) {\n\t\tthis.toolbar = config.toolbar;\n\t\tthis.ariaLabel = config.ariaLabel;\n\t\tthis.context = config.context;\n\t\tthis.onOverflowChange = config.onOverflowChange;\n\t\tthis.onItemActivated = config.onItemActivated;\n\t\tthis.getActiveElement = config.getActiveElement;\n\t\tthis.popupManager = config.popupManager ?? null;\n\n\t\tthis.resizeObserver = new ResizeObserver(() => this.recalculate());\n\t\tthis.resizeObserver.observe(this.toolbar);\n\t}\n\n\t/** Called after renderItems() — stores button references and recalculates. */\n\tupdate(buttons: readonly { element: HTMLButtonElement; item: ToolbarItem }[]): void {\n\t\tthis.entries = buttons.map((b) => ({ element: b.element, item: b.item }));\n\t\tthis.recalculate();\n\t}\n\n\t/** Measures toolbar and redistributes items between visible and overflow. */\n\trecalculate(): void {\n\t\tif (this.entries.length === 0) return;\n\n\t\tthis.closeDropdown();\n\t\tthis.resetVisibility();\n\t\tthis.ensureOverflowButton();\n\t\tthis.setOverflowButtonVisible(false);\n\n\t\t// Phase 1 — Measure (reads only): batch all layout reads before any writes\n\t\tconst availableWidth: number = this.measureAvailableWidth();\n\t\tconst children: HTMLElement[] = Array.from(this.toolbar.children) as HTMLElement[];\n\t\tconst childWidths: Map<HTMLElement, number> = this.measureChildWidths(children);\n\n\t\t// Phase 2 — Apply (writes only): use cached widths, no layout reads\n\t\tconst maxWidth: number = availableWidth - OVERFLOW_BTN_WIDTH - GAP;\n\t\tlet usedWidth = 0;\n\t\tlet overflowing = false;\n\t\tconst overflowList: OverflowEntry[] = [];\n\n\t\tfor (const child of children) {\n\t\t\tif (child === this.overflowButton) continue;\n\n\t\t\tif (child.classList.contains('notectl-toolbar-separator')) {\n\t\t\t\tif (overflowing) {\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst sepWidth: number = (childWidths.get(child) ?? 0) + GAP;\n\t\t\t\tif (usedWidth + sepWidth > maxWidth) {\n\t\t\t\t\toverflowing = true;\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t} else {\n\t\t\t\t\tusedWidth += sepWidth;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst entry: OverflowEntry | undefined = this.entries.find((oe) => oe.element === child);\n\t\t\tif (!entry) continue;\n\n\t\t\tif (overflowing) {\n\t\t\t\tentry.element.classList.add(HIDDEN_BTN_CLASS);\n\t\t\t\toverflowList.push(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst btnWidth: number = (childWidths.get(child) ?? 0) + GAP;\n\t\t\tif (usedWidth + btnWidth > maxWidth) {\n\t\t\t\toverflowing = true;\n\t\t\t\tentry.element.classList.add(HIDDEN_BTN_CLASS);\n\t\t\t\toverflowList.push(entry);\n\t\t\t} else {\n\t\t\t\tusedWidth += btnWidth;\n\t\t\t}\n\t\t}\n\n\t\tthis.overflowEntries = overflowList;\n\t\tthis.hideTrailingSeparators();\n\t\tthis.setOverflowButtonVisible(overflowList.length > 0);\n\t\tthis.notifyChange();\n\t}\n\n\t/** Updates active/disabled states for items in the open overflow dropdown. */\n\tupdateItemStates(state: EditorState): void {\n\t\tif (!this.overflowDropdown) return;\n\n\t\tconst menuItems: HTMLButtonElement[] = Array.from(\n\t\t\tthis.overflowDropdown.querySelectorAll('.notectl-dropdown__item'),\n\t\t) as HTMLButtonElement[];\n\n\t\tfor (const menuItem of menuItems) {\n\t\t\tconst itemId: string | null = menuItem.getAttribute('data-toolbar-item');\n\t\t\tconst entry: OverflowEntry | undefined = this.overflowEntries.find(\n\t\t\t\t(oe) => oe.item.id === itemId,\n\t\t\t);\n\t\t\tif (!entry) continue;\n\n\t\t\tconst active: boolean = entry.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = entry.item.isEnabled?.(state) ?? true;\n\t\t\tmenuItem.classList.toggle('notectl-dropdown__item--active', active);\n\t\t\tmenuItem.disabled = !enabled;\n\n\t\t\tif (entry.item.popupType === 'combobox') {\n\t\t\t\tconst labelEl: HTMLSpanElement | null = menuItem.querySelector(\n\t\t\t\t\t'.notectl-dropdown__item-label',\n\t\t\t\t);\n\t\t\t\tif (labelEl) {\n\t\t\t\t\tlabelEl.textContent = entry.item.getLabel(state);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entry.item.getIcon) {\n\t\t\t\tconst newIcon: string = entry.item.getIcon(state);\n\t\t\t\tconst iconEl: HTMLSpanElement | null = menuItem.querySelector(\n\t\t\t\t\t'.notectl-dropdown__item-icon',\n\t\t\t\t);\n\t\t\t\tif (iconEl && iconEl.innerHTML !== newIcon) {\n\t\t\t\t\ticonEl.innerHTML = newIcon;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Cleans up ResizeObserver, DOM elements, and event listeners. */\n\tdestroy(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.resizeObserver = null;\n\t\tthis.closeDropdown();\n\t\tthis.overflowButton?.remove();\n\t\tthis.overflowButton = null;\n\t\tthis.entries = [];\n\t\tthis.overflowEntries = [];\n\t}\n\n\t// --- Measurement ---\n\n\tprivate measureChildWidths(children: readonly HTMLElement[]): Map<HTMLElement, number> {\n\t\tconst widths: Map<HTMLElement, number> = new Map();\n\t\tfor (const child of children) {\n\t\t\tif (child === this.overflowButton) continue;\n\t\t\twidths.set(child, child.offsetWidth);\n\t\t}\n\t\treturn widths;\n\t}\n\n\tprivate measureAvailableWidth(): number {\n\t\tconst toolbarStyle: CSSStyleDeclaration = getComputedStyle(this.toolbar);\n\t\tconst paddingLeft: number = Number.parseFloat(toolbarStyle.paddingLeft) || 0;\n\t\tconst paddingRight: number = Number.parseFloat(toolbarStyle.paddingRight) || 0;\n\t\treturn this.toolbar.clientWidth - paddingLeft - paddingRight;\n\t}\n\n\tprivate resetVisibility(): void {\n\t\tfor (const entry of this.entries) {\n\t\t\tentry.element.classList.remove(HIDDEN_BTN_CLASS);\n\t\t}\n\t\tconst separators: HTMLElement[] = Array.from(\n\t\t\tthis.toolbar.querySelectorAll('.notectl-toolbar-separator'),\n\t\t) as HTMLElement[];\n\t\tfor (const sep of separators) {\n\t\t\tsep.classList.remove(HIDDEN_SEP_CLASS);\n\t\t}\n\t}\n\n\t// --- Overflow Button ---\n\n\tprivate setOverflowButtonVisible(visible: boolean): void {\n\t\tif (!this.overflowButton) return;\n\t\tthis.overflowButton.classList.toggle(HIDDEN_OVERFLOW_CLASS, !visible);\n\t\tif (!visible) {\n\t\t\tthis.overflowButton.removeAttribute('tabindex');\n\t\t}\n\t}\n\n\tprivate ensureOverflowButton(): void {\n\t\tif (this.overflowButton) return;\n\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = 'notectl-toolbar-overflow-btn';\n\t\tbtn.setAttribute('aria-label', this.ariaLabel);\n\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\tbtn.innerHTML = ELLIPSIS_SVG;\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.toggleDropdown();\n\t\t});\n\n\t\tthis.toolbar.appendChild(btn);\n\t\tthis.overflowButton = btn;\n\t}\n\n\t// --- Dropdown ---\n\n\tprivate toggleDropdown(): void {\n\t\tif (this.overflowDropdown) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\tprivate openDropdown(): void {\n\t\tif (!this.overflowButton || this.overflowEntries.length === 0) return;\n\n\t\tconst dropdown: HTMLDivElement = document.createElement('div');\n\t\tdropdown.className = 'notectl-toolbar-popup notectl-dropdown';\n\t\tdropdown.setAttribute('role', 'menu');\n\n\t\tthis.renderDropdownItems(dropdown, this.context.getState());\n\n\t\tif (this.popupManager) {\n\t\t\tthis.overflowHandle = this.popupManager.open({\n\t\t\t\tanchor: this.overflowButton,\n\t\t\t\tclassName: 'notectl-toolbar-popup notectl-dropdown',\n\t\t\t\tariaRole: 'menu',\n\t\t\t\tposition: 'below-end',\n\t\t\t\treferenceNode: this.overflowButton,\n\t\t\t\trestoreFocusTo: this.overflowButton,\n\t\t\t\tonClose: () => {\n\t\t\t\t\tthis.overflowHandle = null;\n\t\t\t\t\tthis.overflowDropdown = null;\n\t\t\t\t\tif (this.overflowButton) {\n\t\t\t\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontent: (popup: HTMLElement) => {\n\t\t\t\t\tthis.renderDropdownItems(popup, this.context.getState());\n\t\t\t\t\tthis.overflowDropdown = popup;\n\t\t\t\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handleDropdownKeydown(e));\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'true');\n\t\t} else {\n\t\t\tthis.positionDropdown(dropdown);\n\t\t\tappendToRoot(dropdown, this.overflowButton);\n\t\t\tthis.overflowDropdown = dropdown;\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'true');\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst first: HTMLElement | null = dropdown.querySelector('[role=\"menuitem\"]');\n\t\t\t\tfirst?.focus();\n\t\t\t});\n\n\t\t\tdropdown.addEventListener('keydown', (e: KeyboardEvent) => this.handleDropdownKeydown(e));\n\t\t\tthis.registerCloseHandler();\n\t\t}\n\t}\n\n\tprivate renderDropdownItems(dropdown: HTMLElement, state: EditorState): void {\n\t\tlet lastGroup: string | null = null;\n\n\t\tfor (const entry of this.overflowEntries) {\n\t\t\tif (lastGroup !== null && entry.item.group !== lastGroup) {\n\t\t\t\tconst sep: HTMLDivElement = document.createElement('div');\n\t\t\t\tsep.className = 'notectl-dropdown__separator';\n\t\t\t\tsep.setAttribute('role', 'separator');\n\t\t\t\tdropdown.appendChild(sep);\n\t\t\t}\n\t\t\tlastGroup = entry.item.group;\n\n\t\t\tconst menuBtn: HTMLButtonElement = document.createElement('button');\n\t\t\tmenuBtn.type = 'button';\n\t\t\tmenuBtn.className = 'notectl-dropdown__item';\n\t\t\tmenuBtn.setAttribute('role', 'menuitem');\n\t\t\tmenuBtn.setAttribute('tabindex', '-1');\n\t\t\tmenuBtn.setAttribute('data-toolbar-item', entry.item.id);\n\n\t\t\tconst iconSpan: HTMLSpanElement = document.createElement('span');\n\t\t\ticonSpan.className = 'notectl-dropdown__item-icon';\n\t\t\tif (entry.item.popupType !== 'combobox') {\n\t\t\t\ticonSpan.innerHTML = entry.item.icon;\n\t\t\t}\n\t\t\tmenuBtn.appendChild(iconSpan);\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-dropdown__item-label';\n\t\t\tlabelSpan.textContent =\n\t\t\t\tentry.item.popupType === 'combobox'\n\t\t\t\t\t? entry.item.getLabel(state)\n\t\t\t\t\t: (entry.item.tooltip ?? entry.item.label);\n\t\t\tmenuBtn.appendChild(labelSpan);\n\n\t\t\tmenuBtn.addEventListener('mousedown', (ev: MouseEvent) => {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.activateOverflowItem(entry);\n\t\t\t});\n\n\t\t\tdropdown.appendChild(menuBtn);\n\t\t}\n\t}\n\n\tprivate positionDropdown(dropdown: HTMLElement): void {\n\t\tif (!this.overflowButton) return;\n\n\t\tconst rect: DOMRect = this.overflowButton.getBoundingClientRect();\n\t\tconst rtl: boolean = isRtlContext(this.toolbar);\n\n\t\tpositionPopup(dropdown, rect, { position: rtl ? 'below-start' : 'below-end', isRtl: rtl });\n\t}\n\n\tprivate registerCloseHandler(): void {\n\t\tthis.closeHandler = (ev: MouseEvent) => {\n\t\t\tconst path: EventTarget[] = ev.composedPath();\n\t\t\tif (\n\t\t\t\tthis.overflowDropdown &&\n\t\t\t\t!path.includes(this.overflowDropdown) &&\n\t\t\t\tthis.overflowButton &&\n\t\t\t\t!path.includes(this.overflowButton)\n\t\t\t) {\n\t\t\t\tthis.closeDropdown();\n\t\t\t}\n\t\t};\n\t\tthis.closeHandlerTimer = setTimeout(() => {\n\t\t\tthis.closeHandlerTimer = null;\n\t\t\tif (!this.closeHandler || !this.overflowDropdown) return;\n\t\t\tdocument.addEventListener('mousedown', this.closeHandler);\n\t\t\tthis.closeHandlerAttached = true;\n\t\t}, 0);\n\t}\n\n\tprivate closeDropdown(): void {\n\t\tif (this.overflowHandle) {\n\t\t\tconst handle: PopupHandle = this.overflowHandle;\n\t\t\tthis.overflowHandle = null;\n\t\t\tthis.overflowDropdown = null;\n\t\t\thandle.close();\n\t\t\tif (this.overflowButton) {\n\t\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.overflowDropdown) {\n\t\t\tthis.overflowDropdown.remove();\n\t\t\tthis.overflowDropdown = null;\n\t\t}\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t}\n\t\tif (this.closeHandler) {\n\t\t\tif (this.closeHandlerTimer !== null) {\n\t\t\t\tclearTimeout(this.closeHandlerTimer);\n\t\t\t\tthis.closeHandlerTimer = null;\n\t\t\t}\n\t\t\tif (this.closeHandlerAttached) {\n\t\t\t\tdocument.removeEventListener('mousedown', this.closeHandler);\n\t\t\t\tthis.closeHandlerAttached = false;\n\t\t\t}\n\t\t\tthis.closeHandler = null;\n\t\t}\n\t}\n\n\tprivate activateOverflowItem(entry: OverflowEntry): void {\n\t\tthis.closeDropdown();\n\t\tif (entry.item.popupType && this.overflowButton) {\n\t\t\tthis.onItemActivated(this.overflowButton, entry.item);\n\t\t} else {\n\t\t\tthis.context.executeCommand(entry.item.command);\n\t\t}\n\t}\n\n\t// --- Keyboard Navigation ---\n\n\tprivate handleDropdownKeydown(e: KeyboardEvent): void {\n\t\tif (!this.overflowDropdown) return;\n\n\t\tif (e.key === 'Escape' || e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.closeDropdown();\n\t\t\tthis.overflowButton?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tconst items: HTMLElement[] = Array.from(\n\t\t\tthis.overflowDropdown.querySelectorAll('[role=\"menuitem\"]'),\n\t\t) as HTMLElement[];\n\t\tconst current: number = items.indexOf(this.getActiveElement() as HTMLElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(items, current, 1);\n\t\t\t\titems[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(items, current, -1);\n\t\t\t\titems[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focusedItem: HTMLElement | undefined = items[current];\n\t\t\t\tif (!focusedItem) break;\n\t\t\t\tconst itemId: string | null = focusedItem.getAttribute('data-toolbar-item');\n\t\t\t\tconst entry: OverflowEntry | undefined = this.overflowEntries.find(\n\t\t\t\t\t(oe) => oe.item.id === itemId,\n\t\t\t\t);\n\t\t\t\tif (entry) this.activateOverflowItem(entry);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Helpers ---\n\n\tprivate hideTrailingSeparators(): void {\n\t\tconst children: HTMLElement[] = Array.from(this.toolbar.children) as HTMLElement[];\n\t\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\t\tconst child: HTMLElement | undefined = children[i];\n\t\t\tif (!child || child === this.overflowButton) continue;\n\t\t\tif (child.classList.contains('notectl-toolbar-separator')) {\n\t\t\t\tif (!child.classList.contains(HIDDEN_SEP_CLASS)) {\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t}\n\t\t\t} else if (!child.classList.contains(HIDDEN_BTN_CLASS)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate notifyChange(): void {\n\t\tconst visible: HTMLButtonElement[] = this.entries\n\t\t\t.filter((oe) => !oe.element.classList.contains(HIDDEN_BTN_CLASS))\n\t\t\t.map((oe) => oe.element);\n\t\tthis.onOverflowChange(visible, this.overflowEntries.length > 0 ? this.overflowButton : null);\n\t}\n}\n","/**\n * ToolbarRenderers: pure rendering functions for toolbar popup content.\n * Grid pickers, dropdown menus, and separator elements.\n */\n\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { DropdownConfig, GridPickerConfig } from './ToolbarItem.js';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale } from './ToolbarLocale.js';\n\nconst HIGHLIGHTED_CLASS = 'notectl-grid-picker__cell--highlighted';\n\n/**\n * Renders a grid picker into the given container.\n * Calls `onClose` after a cell is selected so the popup can be dismissed.\n */\nexport function renderGridPicker(\n\tcontainer: HTMLElement,\n\tconfig: GridPickerConfig,\n\tonClose: () => void,\n\tlocale: ToolbarLocale = TOOLBAR_LOCALE_EN,\n): void {\n\tcontainer.className += ' notectl-grid-picker';\n\n\tconst grid: HTMLDivElement = document.createElement('div');\n\tgrid.className = 'notectl-grid-picker__grid';\n\tgrid.setAttribute('role', 'grid');\n\tsetStyleProperties(grid, {\n\t\tdisplay: 'grid',\n\t\tgridTemplateColumns: `repeat(${config.maxCols}, 1fr)`,\n\t\tgap: '2px',\n\t\tpadding: '8px',\n\t});\n\n\tconst label: HTMLDivElement = document.createElement('div');\n\tlabel.className = 'notectl-grid-picker__label';\n\tlabel.textContent = locale.gridPickerLabel(1, 1);\n\tsetStyleProperties(label, {\n\t\ttextAlign: 'center',\n\t\tpadding: '4px',\n\t\tfontSize: '12px',\n\t});\n\tlabel.setAttribute('aria-live', 'polite');\n\n\tfor (let r = 1; r <= config.maxRows; r++) {\n\t\tfor (let c = 1; c <= config.maxCols; c++) {\n\t\t\tconst cell: HTMLDivElement = document.createElement('div');\n\t\t\tcell.className = 'notectl-grid-picker__cell';\n\t\t\tcell.setAttribute('role', 'gridcell');\n\t\t\tcell.setAttribute('tabindex', '-1');\n\t\t\tcell.setAttribute('aria-label', locale.gridPickerLabel(r, c));\n\t\t\tsetStyleProperties(cell, {\n\t\t\t\twidth: '20px',\n\t\t\t\theight: '20px',\n\t\t\t\tborder: '1px solid #ccc',\n\t\t\t\tcursor: 'pointer',\n\t\t\t});\n\t\t\tcell.setAttribute('data-row', String(r));\n\t\t\tcell.setAttribute('data-col', String(c));\n\n\t\t\tcell.addEventListener('mouseenter', () => {\n\t\t\t\thighlightCells(grid, r, c);\n\t\t\t\tlabel.textContent = locale.gridPickerLabel(r, c);\n\t\t\t});\n\n\t\t\tcell.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tcell.addEventListener('click', () => {\n\t\t\t\tconfig.onSelect(r, c);\n\t\t\t\tonClose();\n\t\t\t});\n\n\t\t\tgrid.appendChild(cell);\n\t\t}\n\t}\n\n\tcontainer.appendChild(grid);\n\tcontainer.appendChild(label);\n}\n\n/**\n * Highlights grid cells up to the given row/col and updates the label.\n * Used by both mouse hover and keyboard navigation.\n */\nexport function highlightCells(grid: HTMLElement, targetRow: number, targetCol: number): void {\n\tconst cells: NodeListOf<Element> = grid.querySelectorAll('.notectl-grid-picker__cell');\n\tfor (const cell of cells) {\n\t\tconst r: number = Number(cell.getAttribute('data-row'));\n\t\tconst c: number = Number(cell.getAttribute('data-col'));\n\t\tcell.classList.toggle(HIGHLIGHTED_CLASS, r <= targetRow && c <= targetCol);\n\t}\n}\n\n/**\n * Renders a dropdown menu into the given container.\n * Calls `onClose` after an item is activated so the popup can be dismissed.\n */\nexport function renderDropdown(\n\tcontainer: HTMLElement,\n\tconfig: DropdownConfig,\n\texecuteCommand: (command: string) => void,\n\tonClose: () => void,\n): void {\n\tcontainer.classList.add('notectl-dropdown');\n\tcontainer.setAttribute('role', 'menu');\n\n\tfor (const item of config.items) {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = 'notectl-dropdown__item';\n\t\tbtn.setAttribute('role', 'menuitem');\n\t\tbtn.setAttribute('tabindex', '-1');\n\n\t\tif (item.icon) {\n\t\t\tconst iconSpan: HTMLSpanElement = document.createElement('span');\n\t\t\ticonSpan.className = 'notectl-dropdown__item-icon';\n\t\t\ticonSpan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(iconSpan);\n\t\t}\n\n\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\tlabelSpan.className = 'notectl-dropdown__item-label';\n\t\tlabelSpan.textContent = item.label;\n\t\tbtn.appendChild(labelSpan);\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tbtn.addEventListener('click', () => {\n\t\t\texecuteCommand(item.command);\n\t\t\tonClose();\n\t\t});\n\n\t\tcontainer.appendChild(btn);\n\t}\n}\n\n/** Creates a toolbar group separator element. */\nexport function createSeparator(): HTMLSpanElement {\n\tconst sep: HTMLSpanElement = document.createElement('span');\n\tsep.className = 'notectl-toolbar-separator';\n\tsep.setAttribute('role', 'separator');\n\treturn sep;\n}\n","/**\n * ToolbarPopupController: manages popup lifecycle, positioning, keyboard\n * navigation, and auto-close for toolbar popups (grid pickers, dropdowns,\n * and custom popups). Delegates lifecycle to PopupManager.\n */\n\nimport { isRtlContext } from '../../platform/Platform.js';\nimport type { PluginContext } from '../Plugin.js';\nimport { findNextDropdownItem, navigateGrid } from '../shared/KeyboardNav.js';\nimport type { PopupCloseOptions, PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale } from './ToolbarLocale.js';\nimport { highlightCells, renderDropdown, renderGridPicker } from './ToolbarRenderers.js';\n\nexport class ToolbarPopupController {\n\tprivate activePopup: HTMLElement | null = null;\n\tprivate activePopupButton: HTMLButtonElement | null = null;\n\tprivate activeHandle: PopupHandle | null = null;\n\tprivate readonly getActiveElement: () => Element | null;\n\tprivate readonly locale: ToolbarLocale;\n\tprivate popupManager: PopupManager | null = null;\n\n\tconstructor(getActiveElement: () => Element | null, locale: ToolbarLocale = TOOLBAR_LOCALE_EN) {\n\t\tthis.getActiveElement = getActiveElement;\n\t\tthis.locale = locale;\n\t}\n\n\t/** Injects the PopupManager instance (called after service registration). */\n\tsetPopupManager(manager: PopupManager): void {\n\t\tthis.popupManager = manager;\n\t}\n\n\t/** Whether a popup is currently open. */\n\tisOpen(): boolean {\n\t\treturn this.activePopup !== null;\n\t}\n\n\t/** Toggles a popup for the given toolbar button. */\n\ttoggle(button: HTMLButtonElement, item: ToolbarItem, context: PluginContext): void {\n\t\tif (this.activePopup) {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.openViaManager(button, item, context);\n\t}\n\n\t/** Closes the active popup and cleans up event listeners. */\n\tclose(): void {\n\t\tif (this.activeHandle) {\n\t\t\t// Prevent onClose callback from re-entering\n\t\t\tconst handle: PopupHandle = this.activeHandle;\n\t\t\tthis.activeHandle = null;\n\t\t\tthis.clearButtonState();\n\t\t\thandle.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearButtonState();\n\t\tif (this.activePopup) {\n\t\t\tthis.activePopup.remove();\n\t\t\tthis.activePopup = null;\n\t\t}\n\t}\n\n\t/** Closes popup and restores focus to the trigger button. */\n\tcloseAndRestoreFocus(): void {\n\t\tconst triggerBtn: HTMLButtonElement | null = this.activePopupButton;\n\t\tthis.close();\n\t\ttriggerBtn?.focus();\n\t}\n\n\tdestroy(): void {\n\t\tthis.close();\n\t}\n\n\t// --- PopupManager path ---\n\n\tprivate openViaManager(\n\t\tbutton: HTMLButtonElement,\n\t\titem: ToolbarItem,\n\t\tcontext: PluginContext,\n\t): void {\n\t\tif (!this.popupManager) return;\n\n\t\tthis.activePopupButton = button;\n\t\tbutton.classList.add('notectl-toolbar-btn--popup-open');\n\t\tbutton.setAttribute('aria-expanded', 'true');\n\n\t\tthis.activeHandle = this.popupManager.open({\n\t\t\tanchor: button,\n\t\t\tclassName: 'notectl-toolbar-popup',\n\t\t\treferenceNode: button,\n\t\t\trestoreFocusTo: button,\n\t\t\tposition: 'below-start',\n\t\t\tonClose: () => {\n\t\t\t\t// Called when PopupManager closes the popup (click-outside, etc.)\n\t\t\t\tthis.activeHandle = null;\n\t\t\t\tthis.clearButtonState();\n\t\t\t\tthis.activePopup = null;\n\t\t\t},\n\t\t\tcontent: (popup: HTMLElement, close: (options?: PopupCloseOptions) => void) => {\n\t\t\t\tthis.activePopup = popup;\n\t\t\t\tthis.renderPopupContent(popup, item, context, close);\n\t\t\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handlePopupKeydown(e));\n\t\t\t},\n\t\t});\n\t}\n\n\t// --- Shared rendering ---\n\n\tprivate renderPopupContent(\n\t\tpopup: HTMLElement,\n\t\titem: ToolbarItem,\n\t\tcontext: PluginContext,\n\t\tclose: (options?: PopupCloseOptions) => void,\n\t): void {\n\t\tconst closeAndFocusEditor = (): void => {\n\t\t\tclose({ restoreFocusTo: null });\n\t\t\tcontext.getContainer().focus();\n\t\t};\n\n\t\tswitch (item.popupType) {\n\t\t\tcase 'gridPicker':\n\t\t\t\trenderGridPicker(popup, item.popupConfig, closeAndFocusEditor, this.locale);\n\t\t\t\tbreak;\n\t\t\tcase 'dropdown':\n\t\t\t\trenderDropdown(\n\t\t\t\t\tpopup,\n\t\t\t\t\titem.popupConfig,\n\t\t\t\t\t(cmd: string) => context.executeCommand(cmd),\n\t\t\t\t\tcloseAndFocusEditor,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'custom':\n\t\t\t\titem.renderPopup(popup, context, close);\n\t\t\t\tbreak;\n\t\t\tcase 'combobox':\n\t\t\t\titem.renderPopup(popup, context, close);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// --- Button state ---\n\n\tprivate clearButtonState(): void {\n\t\tif (this.activePopupButton) {\n\t\t\tthis.activePopupButton.classList.remove('notectl-toolbar-btn--popup-open');\n\t\t\tthis.activePopupButton.setAttribute('aria-expanded', 'false');\n\t\t\tthis.activePopupButton = null;\n\t\t}\n\t}\n\n\t// --- Keyboard Navigation ---\n\n\tprivate handlePopupKeydown(e: KeyboardEvent): void {\n\t\tif (!this.activePopup) return;\n\n\t\tif (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.closeAndRestoreFocus();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\tthis.closeAndRestoreFocus();\n\t\t\treturn;\n\t\t}\n\n\t\tconst menuItems: NodeListOf<Element> = this.activePopup.querySelectorAll('[role=\"menuitem\"]');\n\t\tif (menuItems.length > 0) {\n\t\t\tthis.handleDropdownKeydown(e, menuItems);\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasGrid: boolean = this.activePopup.querySelector('.notectl-grid-picker__cell') !== null;\n\t\tif (hasGrid) {\n\t\t\tthis.handleGridKeydown(e);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.handleCustomPopupKeydown(e);\n\t}\n\n\tprivate handleDropdownKeydown(e: KeyboardEvent, items: NodeListOf<Element>): void {\n\t\tconst itemArr: HTMLElement[] = Array.from(items) as HTMLElement[];\n\t\tconst current: number = itemArr.indexOf(this.getActiveElement() as HTMLElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(itemArr, current, 1);\n\t\t\t\titemArr[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(itemArr, current, -1);\n\t\t\t\titemArr[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLElement | undefined = itemArr[current];\n\t\t\t\tif (focused) focused.click();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleGridKeydown(e: KeyboardEvent): void {\n\t\tconst focused: HTMLElement = this.getActiveElement() as HTMLElement;\n\t\tconst row: number = Number(focused?.getAttribute('data-row') ?? 1);\n\t\tconst col: number = Number(focused?.getAttribute('data-col') ?? 1);\n\n\t\tconst grid: Element | null =\n\t\t\tthis.activePopup?.querySelector('.notectl-grid-picker__grid') ?? null;\n\t\tif (!grid) return;\n\n\t\tconst lastCell: Element | null = grid.querySelector('.notectl-grid-picker__cell:last-child');\n\t\tconst maxCols: number = Number(lastCell?.getAttribute('data-col') ?? 1);\n\t\tconst maxRows: number = Number(lastCell?.getAttribute('data-row') ?? 1);\n\n\t\tif (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n\t\t\te.preventDefault();\n\t\t\tconst [newRow, newCol]: [number, number] = navigateGrid(\n\t\t\t\trow,\n\t\t\t\tcol,\n\t\t\t\tmaxRows,\n\t\t\t\tmaxCols,\n\t\t\t\te.key as 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight',\n\t\t\t\tthis.activePopup ? isRtlContext(this.activePopup) : false,\n\t\t\t);\n\t\t\tconst target: HTMLElement | null = grid.querySelector(\n\t\t\t\t`.notectl-grid-picker__cell[data-row=\"${newRow}\"][data-col=\"${newCol}\"]`,\n\t\t\t);\n\t\t\ttarget?.focus();\n\n\t\t\thighlightCells(grid as HTMLElement, newRow, newCol);\n\t\t\tconst label: Element | null =\n\t\t\t\tthis.activePopup?.querySelector('.notectl-grid-picker__label') ?? null;\n\t\t\tif (label) label.textContent = this.locale.gridPickerLabel(newRow, newCol);\n\t\t}\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\tfocused?.click();\n\t\t}\n\t}\n\n\tprivate handleCustomPopupKeydown(e: KeyboardEvent): void {\n\t\tif (!this.activePopup) return;\n\t\tconst buttons: HTMLButtonElement[] = Array.from(this.activePopup.querySelectorAll('button'));\n\t\tif (buttons.length === 0) return;\n\t\tconst active: HTMLElement = this.getActiveElement() as HTMLElement;\n\t\tconst currentIdx: number = buttons.indexOf(active as HTMLButtonElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(buttons, currentIdx, 1);\n\t\t\t\tbuttons[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(buttons, currentIdx, -1);\n\t\t\t\tbuttons[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (active) {\n\t\t\t\t\tactive.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * ToolbarTooltip: manages the tooltip lifecycle for toolbar buttons.\n * Shows a tooltip after a short delay when hovering or focusing a button,\n * hides it when the cursor leaves or focus moves away.\n */\n\nimport { setStyleProperties, setStyleProperty } from '../../style/StyleRuntime.js';\nimport type { ContainingBlockOffset } from '../shared/PopupPositioning.js';\nimport { measureContainingBlockOffset } from '../shared/PopupPositioning.js';\n\nconst TOOLTIP_DELAY_MS = 500;\n\nexport class ToolbarTooltip {\n\tprivate readonly element: HTMLElement;\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\tprivate target: HTMLButtonElement | null = null;\n\tprivate readonly isPopupActive: () => boolean;\n\n\tstatic readonly TOOLTIP_ID = 'notectl-toolbar-tooltip';\n\n\tconstructor(isPopupActive: () => boolean) {\n\t\tthis.isPopupActive = isPopupActive;\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = 'notectl-toolbar-tooltip';\n\t\tthis.element.id = ToolbarTooltip.TOOLTIP_ID;\n\t\tthis.element.setAttribute('role', 'tooltip');\n\t\tsetStyleProperty(this.element, 'display', 'none');\n\t}\n\n\tshow(button: HTMLButtonElement): void {\n\t\tthis.hide();\n\n\t\tif (this.isPopupActive() || button.disabled) return;\n\n\t\tconst text: string | null = button.getAttribute('data-tooltip');\n\t\tif (!text) return;\n\n\t\tthis.target = button;\n\n\t\tthis.timer = setTimeout(() => {\n\t\t\tif (this.isPopupActive()) return;\n\n\t\t\tthis.element.textContent = text;\n\t\t\tsetStyleProperty(this.element, 'display', '');\n\n\t\t\tconst root: Node = button.getRootNode();\n\t\t\tif (root instanceof ShadowRoot && !this.element.parentNode) {\n\t\t\t\troot.appendChild(this.element);\n\t\t\t} else if (!(root instanceof ShadowRoot) && !this.element.parentNode) {\n\t\t\t\tdocument.body.appendChild(this.element);\n\t\t\t}\n\n\t\t\tbutton.setAttribute('aria-describedby', ToolbarTooltip.TOOLTIP_ID);\n\n\t\t\tconst rect: DOMRect = button.getBoundingClientRect();\n\t\t\tsetStyleProperty(this.element, 'position', 'fixed');\n\t\t\tconst cbOffset: ContainingBlockOffset = measureContainingBlockOffset(this.element);\n\t\t\tsetStyleProperties(this.element, {\n\t\t\t\ttop: `${rect.bottom + 6 - cbOffset.y}px`,\n\t\t\t\tleft: `${rect.left + rect.width / 2 - cbOffset.x}px`,\n\t\t\t\ttransform: 'translateX(-50%)',\n\t\t\t});\n\t\t}, TOOLTIP_DELAY_MS);\n\t}\n\n\thide(): void {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\tif (this.target) {\n\t\t\tthis.target.removeAttribute('aria-describedby');\n\t\t\tthis.target = null;\n\t\t}\n\t\tsetStyleProperty(this.element, 'display', 'none');\n\t}\n\n\tdestroy(): void {\n\t\tthis.hide();\n\t\tthis.element.remove();\n\t}\n}\n","/**\n * Toolbar plugin: renders toolbar items registered by other plugins.\n * Acts as a pure rendering engine — has no knowledge of specific features.\n * Supports buttons, dropdowns, grid pickers, and custom popups.\n * Implements WAI-ARIA Toolbar pattern with roving tabindex.\n */\n\nimport { TOOLBAR_CSS } from '../../editor/styles/toolbar.js';\nimport { isRtlContext } from '../../platform/Platform.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { ServiceKey } from '../Plugin.js';\nimport type { Plugin, PluginConfig, PluginContext } from '../Plugin.js';\nimport { applyRovingTabindex } from '../shared/KeyboardNav.js';\nimport { resolveLocale } from '../shared/PluginHelpers.js';\nimport { PopupManager, PopupServiceKey } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport {\n\tfindFirstEnabled,\n\tfindLastEnabled,\n\tfindNextEnabled,\n\tresolveHorizontalDirection,\n} from './ToolbarKeyboardNav.js';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale, loadToolbarLocale } from './ToolbarLocale.js';\nimport {\n\tToolbarOverflowBehavior,\n\ttype ToolbarOverflowBehavior as ToolbarOverflowBehaviorType,\n} from './ToolbarOverflowBehavior.js';\nimport { ToolbarOverflowController } from './ToolbarOverflowController.js';\nimport { ToolbarPopupController } from './ToolbarPopupController.js';\nimport { createSeparator } from './ToolbarRenderers.js';\nimport { ToolbarTooltip } from './ToolbarTooltip.js';\n\n// --- Layout Config ---\n\nexport interface ToolbarLayoutConfig {\n\treadonly groups: ReadonlyArray<ReadonlyArray<string>>;\n\t/**\n\t * Controls responsive overflow behavior when toolbar items exceed available width.\n\t * Defaults to `ToolbarOverflowBehavior.BurgerMenu`.\n\t */\n\treadonly overflow?: ToolbarOverflowBehaviorType;\n}\n\n// --- Typed Service API ---\n\nexport interface ToolbarServiceAPI {\n\t/** Re-reads isActive/isEnabled from state and updates all buttons. */\n\trefresh(): void;\n\t/** Closes the currently open popup, if any. */\n\tclosePopup(): void;\n}\n\nexport const ToolbarServiceKey = new ServiceKey<ToolbarServiceAPI>('toolbar');\n\n// --- Plugin ---\n\ninterface ToolbarButton {\n\telement: HTMLButtonElement;\n\titem: ToolbarItem;\n\tcomboLabelEl: HTMLSpanElement | null;\n}\n\nexport class ToolbarPlugin implements Plugin {\n\treadonly id = 'toolbar';\n\treadonly name = 'Toolbar';\n\treadonly priority = 10;\n\n\tprivate context: PluginContext | null = null;\n\tprivate toolbarElement: HTMLElement | null = null;\n\tprivate buttons: ToolbarButton[] = [];\n\tprivate readonly hiddenItems = new Set<string>();\n\tprivate readonly layoutConfig: ToolbarLayoutConfig | null;\n\tprivate overflowBehavior: ToolbarOverflowBehaviorType;\n\tprivate focusedIndex = 0;\n\tprivate tooltip: ToolbarTooltip | null = null;\n\tprivate popupController: ToolbarPopupController | null = null;\n\tprivate popupManager: PopupManager | null = null;\n\tprivate overflowController: ToolbarOverflowController | null = null;\n\tprivate visibleElements: HTMLButtonElement[] = [];\n\tprivate locale!: ToolbarLocale;\n\n\tconstructor(layoutConfig?: ToolbarLayoutConfig) {\n\t\tthis.layoutConfig = layoutConfig ?? null;\n\t\tthis.overflowBehavior = layoutConfig?.overflow ?? ToolbarOverflowBehavior.BurgerMenu;\n\t}\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(context, undefined, TOOLBAR_LOCALE_EN, loadToolbarLocale);\n\t\tcontext.registerStyleSheet(TOOLBAR_CSS);\n\t\tthis.context = context;\n\n\t\tthis.popupManager = new PopupManager(context.getContainer());\n\t\tcontext.registerService(PopupServiceKey, this.popupManager);\n\n\t\tthis.popupController = new ToolbarPopupController(() => this.getActiveElement(), this.locale);\n\t\tthis.popupController.setPopupManager(this.popupManager);\n\t\tthis.tooltip = new ToolbarTooltip(() => this.popupController?.isOpen() ?? false);\n\n\t\tcontext.registerService(ToolbarServiceKey, {\n\t\t\trefresh: () => this.updateButtonStates(context.getState()),\n\t\t\tclosePopup: () => this.popupController?.close(),\n\t\t});\n\n\t\tthis.createToolbarElement();\n\t}\n\n\t/** Returns the current overflow behavior. */\n\tgetOverflowBehavior(): ToolbarOverflowBehaviorType {\n\t\treturn this.overflowBehavior;\n\t}\n\n\t/** Switches the overflow behavior at runtime. */\n\tsetOverflowBehavior(behavior: ToolbarOverflowBehaviorType): void {\n\t\tif (behavior === this.overflowBehavior) return;\n\n\t\tthis.overflowBehavior = behavior;\n\t\tthis.applyOverflowBehavior();\n\t\tthis.renderItems();\n\t}\n\n\tonReady(): void {\n\t\tthis.renderItems();\n\t}\n\n\tdestroy(): void {\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\t\tthis.popupController?.destroy();\n\t\tthis.popupController = null;\n\t\tthis.popupManager?.destroy();\n\t\tthis.popupManager = null;\n\t\tthis.tooltip?.destroy();\n\t\tthis.tooltip = null;\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\tthis.toolbarElement = null;\n\t\t}\n\t\tthis.buttons = [];\n\t\tthis.visibleElements = [];\n\t\tthis.context = null;\n\t}\n\n\tonStateChange(_oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tthis.updateButtonStates(newState);\n\t}\n\n\tonReadOnlyChange(readonly: boolean): void {\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.hidden = readonly;\n\t\t}\n\t}\n\n\tonConfigure(config: PluginConfig): void {\n\t\tfor (const [key, value] of Object.entries(config)) {\n\t\t\tif (value === false) {\n\t\t\t\tthis.hiddenItems.add(key);\n\t\t\t} else {\n\t\t\t\tthis.hiddenItems.delete(key);\n\t\t\t}\n\t\t}\n\t\tthis.renderItems();\n\t}\n\n\t// --- Toolbar ---\n\n\tprivate createToolbarElement(): void {\n\t\tif (!this.context) return;\n\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\tthis.toolbarElement = document.createElement('div');\n\t\tthis.toolbarElement.setAttribute('role', 'toolbar');\n\t\tthis.toolbarElement.setAttribute('aria-label', this.locale.formattingOptionsAria);\n\t\tthis.toolbarElement.setAttribute('data-notectl-no-print', '');\n\t\tthis.toolbarElement.className = 'notectl-toolbar';\n\n\t\tthis.toolbarElement.addEventListener('keydown', (e) => this.handleToolbarKeydown(e));\n\n\t\tthis.applyOverflowBehavior();\n\t\tcontainer.appendChild(this.toolbarElement);\n\t}\n\n\t/** Applies the current overflow behavior: creates/destroys the overflow controller and sets the data attribute. */\n\tprivate applyOverflowBehavior(): void {\n\t\tif (!this.toolbarElement || !this.context) return;\n\n\t\t// Tear down existing overflow controller\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\n\t\tthis.toolbarElement.setAttribute('data-overflow', this.overflowBehavior);\n\n\t\tif (this.overflowBehavior === ToolbarOverflowBehavior.BurgerMenu) {\n\t\t\tthis.overflowController = new ToolbarOverflowController({\n\t\t\t\ttoolbar: this.toolbarElement,\n\t\t\t\tariaLabel: this.locale.moreToolsAria,\n\t\t\t\tcontext: this.context,\n\t\t\t\tpopupManager: this.popupManager ?? undefined,\n\t\t\t\tonOverflowChange: (visibleButtons, overflowBtn) => {\n\t\t\t\t\tthis.visibleElements = overflowBtn\n\t\t\t\t\t\t? [...visibleButtons, overflowBtn]\n\t\t\t\t\t\t: [...visibleButtons];\n\t\t\t\t\tthis.initRovingTabindex();\n\t\t\t\t},\n\t\t\t\tonItemActivated: (btn: HTMLButtonElement, item: ToolbarItem) => {\n\t\t\t\t\tthis.activateButton(btn, item);\n\t\t\t\t},\n\t\t\t\tgetActiveElement: () => this.getActiveElement(),\n\t\t\t});\n\t\t} else {\n\t\t\t// Flow and None modes: all buttons are visible for roving tabindex\n\t\t\tthis.visibleElements = [];\n\t\t}\n\t}\n\n\tprivate renderItems(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tfor (const btn of this.buttons) {\n\t\t\tbtn.element.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tfor (const sep of this.toolbarElement.querySelectorAll('.notectl-toolbar-separator')) {\n\t\t\tsep.remove();\n\t\t}\n\n\t\tif (this.layoutConfig) {\n\t\t\tthis.renderItemsByLayout();\n\t\t} else {\n\t\t\tthis.renderItemsByGroup();\n\t\t}\n\n\t\tif (this.buttons.length > 0 && !this.toolbarElement.parentElement) {\n\t\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\t\tcontainer.appendChild(this.toolbarElement);\n\t\t}\n\n\t\tthis.overflowController?.update(this.buttons);\n\t\tthis.initRovingTabindex();\n\t\tthis.updateButtonStates(this.context.getState());\n\t}\n\n\t// --- Roving Tabindex ---\n\n\tprivate getTabElements(): HTMLButtonElement[] {\n\t\treturn this.visibleElements.length > 0\n\t\t\t? this.visibleElements\n\t\t\t: this.buttons.map((b) => b.element);\n\t}\n\n\tprivate initRovingTabindex(): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst first: number = findFirstEnabled(elements);\n\t\tthis.focusedIndex = first >= 0 ? first : 0;\n\t\tapplyRovingTabindex(elements, this.focusedIndex);\n\t}\n\n\tprivate setRovingFocus(index: number): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (index < 0 || index >= elements.length) return;\n\t\tthis.focusedIndex = index;\n\t\tapplyRovingTabindex(elements, index);\n\t\telements[index]?.focus();\n\t}\n\n\t/** Returns the active element, respecting shadow DOM boundaries. */\n\tprivate getActiveElement(): Element | null {\n\t\tconst root: Node | undefined = this.toolbarElement?.getRootNode();\n\t\tif (root instanceof ShadowRoot) {\n\t\t\treturn root.activeElement;\n\t\t}\n\t\treturn document.activeElement;\n\t}\n\n\tprivate syncFocusedIndex(): void {\n\t\tconst active: Element | null = this.getActiveElement();\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst idx: number = elements.findIndex((el) => el === active);\n\t\tif (idx >= 0) {\n\t\t\tthis.focusedIndex = idx;\n\t\t}\n\t}\n\n\t// --- Toolbar Keyboard ---\n\n\tprivate handleToolbarKeydown(e: KeyboardEvent): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (elements.length === 0) return;\n\n\t\tthis.syncFocusedIndex();\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowLeft': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst rtl: boolean = this.toolbarElement ? isRtlContext(this.toolbarElement) : false;\n\t\t\t\tconst dir: 1 | -1 = resolveHorizontalDirection(e.key, rtl);\n\t\t\t\tconst next: number = findNextEnabled(elements, this.focusedIndex, dir);\n\t\t\t\tthis.setRovingFocus(next);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Home': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst first: number = findFirstEnabled(elements);\n\t\t\t\tif (first >= 0) this.setRovingFocus(first);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'End': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst last: number = findLastEnabled(elements);\n\t\t\t\tif (last >= 0) this.setRovingFocus(last);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLButtonElement | undefined = elements[this.focusedIndex];\n\t\t\t\tconst btn: ToolbarButton | undefined = this.buttons.find((b) => b.element === focused);\n\t\t\t\tif (btn) this.activateButton(btn.element, btn.item);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Activates a toolbar button (shared between mouse click and keyboard). */\n\tprivate activateButton(btn: HTMLButtonElement, item: ToolbarItem): void {\n\t\tthis.tooltip?.hide();\n\t\tif (item.popupType && this.context) {\n\t\t\tthis.popupController?.toggle(btn, item, this.context);\n\t\t} else {\n\t\t\tthis.context?.executeCommand(item.command);\n\t\t}\n\t}\n\n\t// --- Layout Rendering ---\n\n\tprivate renderItemsByLayout(): void {\n\t\tif (!this.context || !this.toolbarElement || !this.layoutConfig) return;\n\n\t\tconst toolbarReg = this.context.getToolbarRegistry();\n\t\tlet firstGroup = true;\n\n\t\tfor (const groupPluginIds of this.layoutConfig.groups) {\n\t\t\tconst groupItems: ToolbarItem[] = [];\n\t\t\tfor (const pId of groupPluginIds) {\n\t\t\t\tconst items: ToolbarItem[] = toolbarReg\n\t\t\t\t\t.getToolbarItemsByPlugin(pId)\n\t\t\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\t\t\tgroupItems.push(...items);\n\t\t\t}\n\n\t\t\tif (groupItems.length === 0) continue;\n\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\n\t\tif (this.buttons.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t}\n\n\tprivate renderItemsByGroup(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tconst toolbarRegistry = this.context.getToolbarRegistry();\n\t\tconst items: ToolbarItem[] = toolbarRegistry\n\t\t\t.getToolbarItems()\n\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\tif (items.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\treturn;\n\t\t}\n\n\t\tconst groups = new Map<string, ToolbarItem[]>();\n\t\tfor (const item of items) {\n\t\t\tconst list: ToolbarItem[] = groups.get(item.group) ?? [];\n\t\t\tlist.push(item);\n\t\t\tgroups.set(item.group, list);\n\t\t}\n\n\t\tlet firstGroup = true;\n\t\tfor (const [, groupItems] of groups) {\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Button Creation ---\n\n\tprivate createButton(item: ToolbarItem): ToolbarButton {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = `notectl-toolbar-btn notectl-toolbar-btn--${item.id}`;\n\t\tbtn.setAttribute('aria-pressed', 'false');\n\t\tbtn.setAttribute('aria-label', item.label);\n\t\tbtn.setAttribute('data-toolbar-item', item.id);\n\t\tbtn.setAttribute('data-tooltip', item.tooltip ?? item.label);\n\n\t\tlet comboLabelEl: HTMLSpanElement | null = null;\n\n\t\tif (item.popupType === 'combobox') {\n\t\t\tbtn.setAttribute('role', 'combobox');\n\t\t\tbtn.setAttribute('aria-haspopup', 'listbox');\n\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-toolbar-combobox__label';\n\t\t\tconst state: EditorState | undefined = this.context?.getState();\n\t\t\tif (state) {\n\t\t\t\tlabelSpan.textContent = item.getLabel(state);\n\t\t\t}\n\t\t\tbtn.appendChild(labelSpan);\n\t\t\tcomboLabelEl = labelSpan;\n\n\t\t\tconst arrowSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tarrowSpan.className = 'notectl-toolbar-combobox__arrow';\n\t\t\tarrowSpan.setAttribute('aria-hidden', 'true');\n\t\t\tarrowSpan.textContent = '\\u25BE';\n\t\t\tbtn.appendChild(arrowSpan);\n\t\t} else {\n\t\t\tif (item.popupType) {\n\t\t\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\t\t}\n\n\t\t\tconst span: HTMLSpanElement = document.createElement('span');\n\t\t\tspan.className = 'notectl-toolbar-btn__icon';\n\t\t\tspan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(span);\n\t\t}\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.activateButton(btn, item);\n\t\t});\n\n\t\tbtn.addEventListener('mouseenter', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('mouseleave', () => this.tooltip?.hide());\n\t\tbtn.addEventListener('focus', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('blur', () => this.tooltip?.hide());\n\n\t\treturn { element: btn, item, comboLabelEl };\n\t}\n\n\t// --- Button State Updates ---\n\n\tprivate updateButtonStates(state: EditorState): void {\n\t\tfor (const btn of this.buttons) {\n\t\t\tconst active: boolean = btn.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = btn.item.isEnabled?.(state) ?? true;\n\t\t\tbtn.element.setAttribute('aria-pressed', String(active));\n\t\t\tbtn.element.classList.toggle('notectl-toolbar-btn--active', active);\n\t\t\tbtn.element.disabled = !enabled;\n\t\t\tif (!enabled) {\n\t\t\t\tbtn.element.setAttribute('aria-disabled', 'true');\n\t\t\t} else {\n\t\t\t\tbtn.element.removeAttribute('aria-disabled');\n\t\t\t}\n\t\t\tif (btn.comboLabelEl && btn.item.popupType === 'combobox') {\n\t\t\t\tbtn.comboLabelEl.textContent = btn.item.getLabel(state);\n\t\t\t}\n\t\t\tif (btn.item.getIcon) {\n\t\t\t\tconst newIcon: string = btn.item.getIcon(state);\n\t\t\t\tconst iconEl: HTMLSpanElement | null = btn.element.querySelector(\n\t\t\t\t\t'.notectl-toolbar-btn__icon',\n\t\t\t\t);\n\t\t\t\tif (iconEl && iconEl.innerHTML !== newIcon) {\n\t\t\t\t\ticonEl.innerHTML = newIcon;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.overflowController?.updateItemStates(state);\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TypedKeys-CU7aToqY.mjs","names":[],"sources":["../../src/model/TypedKeys.ts"],"sourcesContent":["/**\n * Type-safe nominal keys for dependency injection.\n *\n * `ServiceKey<T>` and `EventKey<T>` are phantom-typed string-id wrappers\n * that allow services and events to be registered/looked up with full\n * type safety. They have no runtime behavior beyond holding the id.\n *\n * Lives in `model/` so any layer (including `i18n/`) can construct typed\n * keys without depending on `plugins/`.\n */\n\n/** Type-safe event key for compile-time payload checking. */\nexport class EventKey<T> {\n\tdeclare readonly _type: T;\n\tconstructor(public readonly id: string) {}\n}\n\n/** Type-safe service key for compile-time type checking. */\nexport class ServiceKey<T> {\n\tdeclare readonly _type: T;\n\tconstructor(public readonly id: string) {}\n}\n"],"mappings":"AAYA,IAAa,EAAb,MAEC,WAAA,CAAY,GAAgB,KAAA,GAAA,IAIhB,EAAb,MAEC,WAAA,CAAY,GAAgB,KAAA,GAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as n,h as e}from"./Document-_qdGR4vh.mjs";var t="undefined"!=typeof Intl&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function r(n,e){if(e>=n.length||0===n.length)return 0;if(t){for(const r of t.segment(n))if(r.index>=e)return r.segment.length;return 0}return 1}function i(n,e){if(e<=0||0===n.length)return 0;if(t){let r=1;for(const i of t.segment(n)){if(i.index+i.segment.length>=e){r=i.segment.length;break}r=i.segment.length}return r}return 1}function f(n,t){let r=t-1;for(;r>=0;){const t=e(n,r);if(!t||"inline"===t.kind)break;if(!/\s/.test(t.char))break;r--}if(r>=0&&"inline"===e(n,r)?.kind)return r;for(;r>=0;){const t=e(n,r);if(!t||"inline"===t.kind)break;if(/\s/.test(t.char))break;r--}return r+1}function s(t,r){const i=n(t);let f=r;for(;f<i;){const n=e(t,f);if(!n||"inline"===n.kind)break;if(/\s/.test(n.char))break;f++}if(f===r&&f<i&&"inline"===e(t,f)?.kind)return f+1;for(;f<i;){const n=e(t,f);if(!n||"inline"===n.kind)break;if(!/\s/.test(n.char))break;f++}return f}export{i,s as n,r,f as t};
|
|
2
|
-
//# sourceMappingURL=WordBoundary-BE2u997Q.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WordBoundary-BE2u997Q.mjs","names":[],"sources":["../../src/model/GraphemeUtils.ts","../../src/model/WordBoundary.ts"],"sourcesContent":["/**\n * Grapheme-cluster utilities for correct character navigation.\n *\n * Uses `Intl.Segmenter` (with `granularity: 'grapheme'`) to correctly\n * handle multi-code-unit characters such as emoji, ZWJ sequences, and\n * combining characters. Falls back to +1/-1 when `Intl.Segmenter` is\n * not available.\n */\n\nconst SEGMENTER_SUPPORTED: boolean = typeof Intl !== 'undefined' && 'Segmenter' in Intl;\nconst SEGMENTER: Intl.Segmenter | null = SEGMENTER_SUPPORTED\n\t? new Intl.Segmenter(undefined, { granularity: 'grapheme' })\n\t: null;\n\n/**\n * Returns the number of UTF-16 code units in the next grapheme cluster\n * starting at `offset`. Returns 0 if `offset` is at or past the end.\n */\nexport function nextGraphemeSize(text: string, offset: number): number {\n\tif (offset >= text.length || text.length === 0) return 0;\n\n\tif (SEGMENTER) {\n\t\tfor (const segment of SEGMENTER.segment(text)) {\n\t\t\tif (segment.index >= offset) {\n\t\t\t\treturn segment.segment.length;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\treturn 1;\n}\n\n/**\n * Returns the number of UTF-16 code units in the grapheme cluster\n * immediately before `offset`. Returns 0 if `offset` is 0 or the\n * string is empty.\n */\nexport function prevGraphemeSize(text: string, offset: number): number {\n\tif (offset <= 0 || text.length === 0) return 0;\n\n\tif (SEGMENTER) {\n\t\tlet lastSize = 1;\n\t\tfor (const segment of SEGMENTER.segment(text)) {\n\t\t\tif (segment.index + segment.segment.length >= offset) {\n\t\t\t\tlastSize = segment.segment.length;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastSize = segment.segment.length;\n\t\t}\n\t\treturn lastSize;\n\t}\n\n\treturn 1;\n}\n","/**\n * Word boundary detection for delete-word and word-movement commands.\n * InlineNodes act as word boundaries.\n */\n\nimport { type BlockNode, getBlockLength, getContentAtOffset } from './Document.js';\n\n/**\n * Finds the word boundary backward from the given offset.\n * InlineNodes act as word boundaries.\n */\nexport function findWordBoundaryBackward(block: BlockNode, offset: number): number {\n\tlet pos = offset - 1;\n\t// Skip trailing whitespace\n\twhile (pos >= 0) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (!/\\s/.test(content.char)) break;\n\t\tpos--;\n\t}\n\t// If at InlineNode, delete just it (treat as word boundary)\n\tif (pos >= 0) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (content?.kind === 'inline') return pos;\n\t}\n\t// Skip word characters until whitespace or InlineNode\n\twhile (pos >= 0) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (/\\s/.test(content.char)) break;\n\t\tpos--;\n\t}\n\treturn pos + 1;\n}\n\n/**\n * Finds the word boundary forward from the given offset.\n * InlineNodes act as word boundaries.\n */\nexport function findWordBoundaryForward(block: BlockNode, offset: number): number {\n\tconst len = getBlockLength(block);\n\tlet pos = offset;\n\t// Skip word characters first\n\twhile (pos < len) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (/\\s/.test(content.char)) break;\n\t\tpos++;\n\t}\n\t// If at InlineNode and haven't moved, delete just the InlineNode\n\tif (pos === offset && pos < len) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (content?.kind === 'inline') return pos + 1;\n\t}\n\t// Skip trailing whitespace\n\twhile (pos < len) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (!/\\s/.test(content.char)) break;\n\t\tpos++;\n\t}\n\treturn pos;\n}\n"],"mappings":"mDAUA,IAAM,EAD+C,oBAAT,MAAwB,cAAe,KAEhF,IAAI,KAAK,eAAU,EAAW,CAAE,YAAa,aAC7C,KAMH,SAAgB,EAAiB,EAAc,GAC9C,GAAI,GAAU,EAAK,QAA0B,IAAhB,EAAK,OAAc,OAAO,EAEvD,GAAI,EAAW,CACd,IAAK,MAAM,KAAW,EAAU,QAAQ,GACvC,GAAI,EAAQ,OAAS,EACpB,OAAO,EAAQ,QAAQ,OAGzB,OAAO,EAGR,OAAO,EAQR,SAAgB,EAAiB,EAAc,GAC9C,GAAI,GAAU,GAAqB,IAAhB,EAAK,OAAc,OAAO,EAE7C,GAAI,EAAW,CACd,IAAI,EAAW,EACf,IAAK,MAAM,KAAW,EAAU,QAAQ,GAAO,CAC9C,GAAI,EAAQ,MAAQ,EAAQ,QAAQ,QAAU,EAAQ,CACrD,EAAW,EAAQ,QAAQ,OAC3B,MAED,EAAW,EAAQ,QAAQ,OAE5B,OAAO,EAGR,OAAO,EC1CR,SAAgB,EAAyB,EAAkB,GAC1D,IAAI,EAAM,EAAS,EAEnB,KAAO,GAAO,GAAG,CAChB,MAAM,EAAU,EAAmB,EAAO,GAC1C,IAAK,GAA4B,WAAjB,EAAQ,KAAmB,MAC3C,IAAK,KAAK,KAAK,EAAQ,MAAO,MAC9B,IAGD,GAAI,GAAO,GAEY,WADN,EAAmB,EAAO,IAC7B,KAAmB,OAAO,EAGxC,KAAO,GAAO,GAAG,CAChB,MAAM,EAAU,EAAmB,EAAO,GAC1C,IAAK,GAA4B,WAAjB,EAAQ,KAAmB,MAC3C,GAAI,KAAK,KAAK,EAAQ,MAAO,MAC7B,IAED,OAAO,EAAM,EAOd,SAAgB,EAAwB,EAAkB,GACzD,MAAM,EAAM,EAAe,GAC3B,IAAI,EAAM,EAEV,KAAO,EAAM,GAAK,CACjB,MAAM,EAAU,EAAmB,EAAO,GAC1C,IAAK,GAA4B,WAAjB,EAAQ,KAAmB,MAC3C,GAAI,KAAK,KAAK,EAAQ,MAAO,MAC7B,IAGD,GAAI,IAAQ,GAAU,EAAM,GAEL,WADN,EAAmB,EAAO,IAC7B,KAAmB,OAAO,EAAM,EAG9C,KAAO,EAAM,GAAK,CACjB,MAAM,EAAU,EAAmB,EAAO,GAC1C,IAAK,GAA4B,WAAjB,EAAQ,KAAmB,MAC3C,IAAK,KAAK,KAAK,EAAQ,MAAO,MAC9B,IAED,OAAO"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as t}from"./TypedKeys-CU7aToqY.mjs";import{n as e,t as s}from"./XmlPatterns-DuP8GWVt.mjs";var n=new t("languageRegistry"),r=/(?:(?:public|private|protected|abstract|final|sealed|non-sealed)\s+)?(?:class|interface|enum|record)\s+\w+/,l=/^package\s+[\w.]+\s*;/m,i=/^import\s+(?:static\s+)?[\w.*]+\s*;/m,a=/(?:public|private|protected|static|final|abstract|synchronized|native)\s+[\w<>\[\]?,][\w<>\[\]?,\s]*\s+\w+\s*\(/,o=/^[ \t]*@\w+/m,c=/;\s*$/gm,u=/\s*[{}]\s*$/gm,m=/public\s+static\s+void\s+main\s*\(\s*String\s*\[\s*\]\s+\w+\s*\)/,g=/\b(?:String|Integer|Boolean|List|Map|Set|Optional|void|int|long|double|boolean|char|byte|float|short)\b/,p=/System\s*\.\s*(?:out|err)\s*\.\s*\w+\s*\(/,h=/\btry\s*\{[\s\S]*?\}\s*catch\s*\(/,f=/\bnew\s+[A-Z]\w*\s*[<(]/,d=class{id="java";detect(t){if(t.length>1e5)return null;const e=t.trim();return e.split("\n").filter(t=>t.trim().length>0).length<2||this.computeScore(e)<3?null:{language:"java",formattedText:e,confidence:.8}}computeScore(t){let e=0;return r.test(t)&&(e+=2),l.test(t)&&(e+=2),i.test(t)&&(e+=2),m.test(t)&&(e+=2),p.test(t)&&(e+=2),h.test(t)&&(e+=2),a.test(t)&&(e+=1),o.test(t)&&(e+=1),g.test(t)&&(e+=1),f.test(t)&&(e+=1),(t.match(c)??[]).length>=2&&(e+=1),(t.match(u)??[]).length>=2&&(e+=1),e}},x=class{id="json";detect(t){const e=t.trim();if(!e.startsWith("{")&&!e.startsWith("["))return null;try{const t=JSON.parse(e);if("object"!=typeof t||null===t)return null;const s=JSON.stringify(t,null,2);return s.length<=5?null:{language:"json",formattedText:s,confidence:.9}}catch{return null}}},w=/^(<\?[\s\S]*?\?>\s*)+/,b=new RegExp(`^<${e}${s}\\/?>`),S=new RegExp(["<\\?[^?]*\\?>","\x3c!--[\\s\\S]*?--\x3e","<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",`<\\/(${e})>`,`<(${e})${s}\\/>`,`<(${e})${s}>`].join("|"),"g"),W=new RegExp(`<\\/${e}>\\s*$`),$=class{id="xml";detect(t){const e=t.trim();if(!e.startsWith("<"))return null;const s=e.replace(w,"");if(!b.test(s))return null;if(!this.isWellFormed(e))return null;const n=this.formatXml(e);return n.length<=10?null:{language:"xml",formattedText:n,confidence:.85}}isWellFormed(t){const e=[];let s=!1;S.lastIndex=0;let n=S.exec(t);for(;n;){const r=n[1],l=n[2],i=n[3];if(r){if(0===e.length||e[e.length-1]!==r)return!1;e.pop(),s=!0}else l?s=!0:i&&(e.push(i),s=!0);n=S.exec(t)}return s&&0===e.length}formatXml(t){const e=this.splitIntoTokens(t),s=[];let n=0;for(const r of e){const t=y[j(r)];"decrease"===t&&(n=Math.max(0,n-1)),s.push(" ".repeat(2*n)+r),"increase"===t&&n++}return s.join("\n")}splitIntoTokens(t){return t.replace(/>\s*</g,">\n<").split("\n").map(t=>t.trim()).filter(t=>t.length>0)}},y={pi:"none",comment:"none",cdata:"none",closing:"decrease",selfClosing:"none",inline:"none",opening:"increase",text:"none"};function j(t){return t.startsWith("<?")?"pi":t.startsWith("\x3c!--")?"comment":t.startsWith("<![CDATA[")?"cdata":t.startsWith("</")?"closing":t.endsWith("/>")?"selfClosing":t.startsWith("<")&&W.test(t)?"inline":t.startsWith("<")?"opening":"text"}export{n as i,x as n,d as r,$ as t};
|
|
2
|
-
//# sourceMappingURL=XmlDetector-BtYxzBDa.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XmlDetector-BtYxzBDa.mjs","names":[],"sources":["../../src/plugins/language/LanguageTypes.ts","../../src/plugins/smart-paste/detectors/JavaDetector.ts","../../src/plugins/smart-paste/detectors/JsonDetector.ts","../../src/plugins/smart-paste/detectors/XmlDetector.ts"],"sourcesContent":["/**\n * Unified language support types for programming language registration.\n *\n * Bundles syntax highlighting and paste detection into a single\n * registration unit so that all artifacts for one language live together.\n */\n\nimport { ServiceKey } from '../Plugin.js';\nimport type { LanguageDefinition } from '../code-block/highlighter/TokenizerTypes.js';\nimport type { ContentDetector } from '../smart-paste/SmartPasteTypes.js';\n\n/**\n * Unified language support bundle grouping all artifacts for one\n * programming language: syntax highlighting, paste detection, and\n * (optionally) code formatting.\n *\n * Pass to `LanguageRegistryService.register()` to make a language\n * available across all participating plugins in a single call.\n */\nexport interface LanguageSupport {\n\t/** Canonical lowercase identifier (e.g. `'java'`, `'python'`). */\n\treadonly id: string;\n\n\t/** Human-readable name shown in the language picker (e.g. `'Java'`). */\n\treadonly displayName: string;\n\n\t/** Alternative names accepted as aliases (e.g. `['py', 'py3']`). */\n\treadonly aliases?: readonly string[];\n\n\t/** Syntax highlighting token patterns for the RegexTokenizer. */\n\treadonly highlighting?: LanguageDefinition;\n\n\t/** Smart-paste detector for auto-detecting this language in pasted text. */\n\treadonly detection?: ContentDetector;\n\n\t/**\n\t * Code formatter for reformatting code block content on demand.\n\t * @experimental Not yet consumed by any built-in plugin.\n\t */\n\treadonly formatter?: CodeFormatter;\n}\n\n/**\n * Formatter that can reformat source code.\n * @experimental Reserved for future use.\n */\nexport interface CodeFormatter {\n\tformat(code: string): string | Promise<string>;\n}\n\n/** Service for registering and querying language support bundles. */\nexport interface LanguageRegistryService {\n\t/** Registers a language bundle. Re-registering the same `id` overwrites. */\n\tregister(support: LanguageSupport): void;\n\n\t/**\n\t * Subscribes to language registrations with replay semantics.\n\t * The listener is immediately called for all already-registered\n\t * bundles, then called for each future registration.\n\t */\n\tonRegister(listener: LanguageRegistryListener): void;\n\n\t/** Returns the bundle for the given language id, or `undefined`. */\n\tget(id: string): LanguageSupport | undefined;\n\n\t/** Returns all registered language support bundles. */\n\tgetAll(): readonly LanguageSupport[];\n}\n\n/** Internal listener type for registry change notifications. */\nexport type LanguageRegistryListener = (support: LanguageSupport) => void;\n\nexport const LANGUAGE_REGISTRY_SERVICE_KEY = new ServiceKey<LanguageRegistryService>(\n\t'languageRegistry',\n);\n","/**\n * Java content detector - identifies Java source code for code block insertion.\n *\n * Uses a scoring system based on structural patterns:\n * - Class/interface/enum/record declarations\n * - Package and import statements\n * - Method signatures with access modifiers\n * - Java-specific keywords and syntax patterns\n *\n * Requires multiple signals to avoid false positives on plain text.\n */\n\nimport type { ContentDetector, DetectionResult } from '../SmartPasteTypes.js';\n\n/** Maximum text length to analyze for Java detection. */\nconst MAX_DETECT_LENGTH = 100_000;\n\n/** Minimum number of non-empty lines to consider as code. */\nconst MIN_LINES = 2;\n\n/** Minimum score to consider the text as Java code. */\nconst MIN_SCORE = 3;\n\n/** Confidence score for detected Java code. */\nconst JAVA_CONFIDENCE = 0.8;\n\n/** Matches class, interface, enum, record declarations. */\nconst CLASS_DECLARATION =\n\t/(?:(?:public|private|protected|abstract|final|sealed|non-sealed)\\s+)?(?:class|interface|enum|record)\\s+\\w+/;\n\n/** Matches package statements. */\nconst PACKAGE_STATEMENT = /^package\\s+[\\w.]+\\s*;/m;\n\n/** Matches import statements. */\nconst IMPORT_STATEMENT = /^import\\s+(?:static\\s+)?[\\w.*]+\\s*;/m;\n\n/** Matches method signatures with return type. */\nconst METHOD_SIGNATURE =\n\t/(?:public|private|protected|static|final|abstract|synchronized|native)\\s+[\\w<>\\[\\]?,][\\w<>\\[\\]?,\\s]*\\s+\\w+\\s*\\(/;\n\n/** Matches annotation usage. */\nconst ANNOTATION = /^[ \\t]*@\\w+/m;\n\n/** Matches lines ending with semicolons (excluding CSS-like patterns). */\nconst SEMICOLON_LINES = /;\\s*$/gm;\n\n/** Matches Java-style braces on their own line or after code. */\nconst BRACE_PATTERN = /\\s*[{}]\\s*$/gm;\n\n/** Matches Java main method. */\nconst MAIN_METHOD = /public\\s+static\\s+void\\s+main\\s*\\(\\s*String\\s*\\[\\s*\\]\\s+\\w+\\s*\\)/;\n\n/** Matches common Java types. */\nconst JAVA_TYPES =\n\t/\\b(?:String|Integer|Boolean|List|Map|Set|Optional|void|int|long|double|boolean|char|byte|float|short)\\b/;\n\n/** Matches System.out or System.err calls. */\nconst SYSTEM_CALL = /System\\s*\\.\\s*(?:out|err)\\s*\\.\\s*\\w+\\s*\\(/;\n\n/** Matches try-catch blocks. */\nconst TRY_CATCH = /\\btry\\s*\\{[\\s\\S]*?\\}\\s*catch\\s*\\(/;\n\n/** Matches new keyword with type. */\nconst NEW_INSTANCE = /\\bnew\\s+[A-Z]\\w*\\s*[<(]/;\n\nexport class JavaDetector implements ContentDetector {\n\treadonly id = 'java';\n\n\tdetect(text: string): DetectionResult | null {\n\t\tif (text.length > MAX_DETECT_LENGTH) return null;\n\t\tconst trimmed: string = text.trim();\n\t\tconst lines: string[] = trimmed.split('\\n').filter((l: string) => l.trim().length > 0);\n\t\tif (lines.length < MIN_LINES) return null;\n\n\t\tconst score: number = this.computeScore(trimmed);\n\t\tif (score < MIN_SCORE) return null;\n\n\t\treturn {\n\t\t\tlanguage: 'java',\n\t\t\tformattedText: trimmed,\n\t\t\tconfidence: JAVA_CONFIDENCE,\n\t\t};\n\t}\n\n\tprivate computeScore(text: string): number {\n\t\tlet score = 0;\n\n\t\t// Strong signals (2 points each)\n\t\tif (CLASS_DECLARATION.test(text)) score += 2;\n\t\tif (PACKAGE_STATEMENT.test(text)) score += 2;\n\t\tif (IMPORT_STATEMENT.test(text)) score += 2;\n\t\tif (MAIN_METHOD.test(text)) score += 2;\n\t\tif (SYSTEM_CALL.test(text)) score += 2;\n\t\tif (TRY_CATCH.test(text)) score += 2;\n\n\t\t// Medium signals (1 point each)\n\t\tif (METHOD_SIGNATURE.test(text)) score += 1;\n\t\tif (ANNOTATION.test(text)) score += 1;\n\t\tif (JAVA_TYPES.test(text)) score += 1;\n\t\tif (NEW_INSTANCE.test(text)) score += 1;\n\n\t\t// Structural signals\n\t\tconst semicolonCount: number = (text.match(SEMICOLON_LINES) ?? []).length;\n\t\tif (semicolonCount >= 2) score += 1;\n\n\t\tconst braceCount: number = (text.match(BRACE_PATTERN) ?? []).length;\n\t\tif (braceCount >= 2) score += 1;\n\n\t\treturn score;\n\t}\n}\n","/**\n * JSON content detector — validates and formats JSON for code block insertion.\n */\n\nimport type { ContentDetector, DetectionResult } from '../SmartPasteTypes.js';\n\n/** Minimum length for formatted JSON to be considered meaningful. */\nconst MIN_FORMATTED_LENGTH = 5;\n\n/** Confidence score for valid JSON detected via JSON.parse. */\nconst JSON_CONFIDENCE = 0.9;\n\nexport class JsonDetector implements ContentDetector {\n\treadonly id = 'json';\n\n\tdetect(text: string): DetectionResult | null {\n\t\tconst trimmed: string = text.trim();\n\t\tif (!trimmed.startsWith('{') && !trimmed.startsWith('[')) return null;\n\n\t\ttry {\n\t\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\t\tif (typeof parsed !== 'object' || parsed === null) return null;\n\n\t\t\tconst formatted: string = JSON.stringify(parsed, null, 2);\n\t\t\tif (formatted.length <= MIN_FORMATTED_LENGTH) return null;\n\n\t\t\treturn { language: 'json', formattedText: formatted, confidence: JSON_CONFIDENCE };\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n","/**\n * XML content detector — validates and formats XML for code block insertion.\n */\n\nimport { XML_ATTRS, XML_TAG_NAME } from '../../shared/XmlPatterns.js';\nimport type { ContentDetector, DetectionResult } from '../SmartPasteTypes.js';\n\n/** Minimum length for formatted XML to be considered meaningful. */\nconst MIN_FORMATTED_LENGTH = 10;\n\n/** Confidence score for valid XML detected via structural analysis. */\nconst XML_CONFIDENCE = 0.85;\n\n/** Matches any leading processing instructions like <?xml ...?> or <?xml-stylesheet ...?> */\nconst LEADING_PIS_PATTERN = /^(<\\?[\\s\\S]*?\\?>\\s*)+/;\n\n/** Matches an opening tag like <root> or <ns:tag attr=\"val\"> */\nconst OPENING_TAG_PATTERN = new RegExp(`^<${XML_TAG_NAME}${XML_ATTRS}\\\\/?>`);\n\n// --- Well-formedness regex (decomposed for readability) ---\n\nconst PI_FRAGMENT = '<\\\\?[^?]*\\\\?>';\nconst COMMENT_FRAGMENT = '<!--[\\\\s\\\\S]*?-->';\nconst CDATA_FRAGMENT = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\nconst CLOSING_TAG_FRAGMENT = `<\\\\/(${XML_TAG_NAME})>`;\nconst SELF_CLOSING_TAG_FRAGMENT = `<(${XML_TAG_NAME})${XML_ATTRS}\\\\/>`;\nconst OPENING_TAG_FRAGMENT = `<(${XML_TAG_NAME})${XML_ATTRS}>`;\n\nconst WELL_FORMED_TAG_PATTERN = new RegExp(\n\t[\n\t\tPI_FRAGMENT,\n\t\tCOMMENT_FRAGMENT,\n\t\tCDATA_FRAGMENT,\n\t\tCLOSING_TAG_FRAGMENT,\n\t\tSELF_CLOSING_TAG_FRAGMENT,\n\t\tOPENING_TAG_FRAGMENT,\n\t].join('|'),\n\t'g',\n);\n\n/** Matches an inline element where open + close tag appear on the same token. */\nconst INLINE_ELEMENT_PATTERN = new RegExp(`<\\\\/${XML_TAG_NAME}>\\\\s*$`);\n\n/**\n * Detects well-formed XML content and formats it with proper indentation.\n *\n * Detection strategy:\n * 1. Text must start with `<` (after trimming)\n * 2. Must begin with an XML declaration, processing instruction, or opening tag\n * 3. All opened tags must be properly closed (basic well-formedness check)\n * 4. Must contain at least one tag pair or self-closing tag\n */\nexport class XmlDetector implements ContentDetector {\n\treadonly id = 'xml';\n\n\tdetect(text: string): DetectionResult | null {\n\t\tconst trimmed: string = text.trim();\n\t\tif (!trimmed.startsWith('<')) return null;\n\n\t\t// Quick structural check: strip leading PIs, then must start with an opening tag\n\t\tconst remainder: string = trimmed.replace(LEADING_PIS_PATTERN, '');\n\t\tif (!OPENING_TAG_PATTERN.test(remainder)) return null;\n\n\t\t// Validate well-formedness via tag balancing\n\t\tif (!this.isWellFormed(trimmed)) return null;\n\n\t\tconst formatted: string = this.formatXml(trimmed);\n\t\tif (formatted.length <= MIN_FORMATTED_LENGTH) return null;\n\n\t\treturn { language: 'xml', formattedText: formatted, confidence: XML_CONFIDENCE };\n\t}\n\n\t/**\n\t * Checks basic XML well-formedness by verifying that all opened tags\n\t * are properly closed in the correct nesting order.\n\t */\n\tprivate isWellFormed(xml: string): boolean {\n\t\tconst tagStack: string[] = [];\n\t\tlet foundTag = false;\n\n\t\t// Reset lastIndex — RegExp with 'g' flag is stateful\n\t\tWELL_FORMED_TAG_PATTERN.lastIndex = 0;\n\t\tlet match: RegExpExecArray | null = WELL_FORMED_TAG_PATTERN.exec(xml);\n\n\t\twhile (match) {\n\t\t\tconst closingTag: string | undefined = match[1];\n\t\t\tconst selfClosingTag: string | undefined = match[2];\n\t\t\tconst openingTag: string | undefined = match[3];\n\n\t\t\tif (closingTag) {\n\t\t\t\tif (tagStack.length === 0 || tagStack[tagStack.length - 1] !== closingTag) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\ttagStack.pop();\n\t\t\t\tfoundTag = true;\n\t\t\t} else if (selfClosingTag) {\n\t\t\t\tfoundTag = true;\n\t\t\t} else if (openingTag) {\n\t\t\t\ttagStack.push(openingTag);\n\t\t\t\tfoundTag = true;\n\t\t\t}\n\n\t\t\tmatch = WELL_FORMED_TAG_PATTERN.exec(xml);\n\t\t}\n\n\t\treturn foundTag && tagStack.length === 0;\n\t}\n\n\t/**\n\t * Formats XML with consistent 2-space indentation.\n\t */\n\tprivate formatXml(xml: string): string {\n\t\tconst tokens: string[] = this.splitIntoTokens(xml);\n\t\tconst parts: string[] = [];\n\t\tlet indent = 0;\n\t\tconst INDENT_STEP = 2;\n\n\t\tfor (const token of tokens) {\n\t\t\tconst kind: XmlTokenKind = classifyXmlToken(token);\n\t\t\tconst indentChange: IndentChange = INDENT_BEHAVIOR[kind];\n\n\t\t\tif (indentChange === 'decrease') {\n\t\t\t\tindent = Math.max(0, indent - 1);\n\t\t\t}\n\n\t\t\tparts.push(' '.repeat(indent * INDENT_STEP) + token);\n\n\t\t\tif (indentChange === 'increase') {\n\t\t\t\tindent++;\n\t\t\t}\n\t\t}\n\n\t\treturn parts.join('\\n');\n\t}\n\n\t/** Splits XML into line-level tokens by breaking between adjacent tags. */\n\tprivate splitIntoTokens(xml: string): string[] {\n\t\treturn xml\n\t\t\t.replace(/>\\s*</g, '>\\n<')\n\t\t\t.split('\\n')\n\t\t\t.map((line: string) => line.trim())\n\t\t\t.filter((line: string) => line.length > 0);\n\t}\n}\n\n// --- Token Classification ---\n\ntype XmlTokenKind =\n\t| 'pi'\n\t| 'comment'\n\t| 'cdata'\n\t| 'closing'\n\t| 'selfClosing'\n\t| 'inline'\n\t| 'opening'\n\t| 'text';\ntype IndentChange = 'increase' | 'decrease' | 'none';\n\nconst INDENT_BEHAVIOR: Readonly<Record<XmlTokenKind, IndentChange>> = {\n\tpi: 'none',\n\tcomment: 'none',\n\tcdata: 'none',\n\tclosing: 'decrease',\n\tselfClosing: 'none',\n\tinline: 'none',\n\topening: 'increase',\n\ttext: 'none',\n};\n\nfunction classifyXmlToken(token: string): XmlTokenKind {\n\tif (token.startsWith('<?')) return 'pi';\n\tif (token.startsWith('<!--')) return 'comment';\n\tif (token.startsWith('<![CDATA[')) return 'cdata';\n\tif (token.startsWith('</')) return 'closing';\n\tif (token.endsWith('/>')) return 'selfClosing';\n\tif (token.startsWith('<') && INLINE_ELEMENT_PATTERN.test(token)) return 'inline';\n\tif (token.startsWith('<')) return 'opening';\n\treturn 'text';\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XmlPatterns-DuP8GWVt.mjs","names":[],"sources":["../../src/plugins/shared/XmlPatterns.ts"],"sourcesContent":["/**\n * Shared XML regex pattern fragments used by XmlDetector and XML language definition.\n *\n * Based on XML 1.0 spec Name production (simplified to ASCII + common extensions).\n */\n\n/** XML tag name pattern (string fragment for RegExp construction). */\nexport const XML_TAG_NAME = '[a-zA-Z_][\\\\w:.-]*';\n\n/** Optional attributes pattern (string fragment for RegExp construction). */\nexport const XML_ATTRS = '(?:\\\\s(?:[^>\"\\']|\"[^\"]*\"|\\'[^\\']*\\')*)?';\n"],"mappings":"AAOA,IAAa,EAAe,qBAGf,EAAY"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as t,r as e,t as n}from"./XmlDetector-BtYxzBDa.mjs";import{n as a}from"./XmlPatterns-DuP8GWVt.mjs";var p={name:"java",aliases:[],patterns:[{type:"comment",pattern:/\/\*[\s\S]*?\*\//y},{type:"comment",pattern:/\/\/[^\n]*/y},{type:"string",pattern:/"""[\s\S]*?"""/y},{type:"string",pattern:/"(?:[^"\\]|\\.)*"/y},{type:"string",pattern:/'(?:[^'\\]|\\.)*'/y},{type:"annotation",pattern:/@[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/y},{type:"keyword",pattern:new RegExp(`(?:${["abstract","assert","break","case","catch","class","const","continue","default","do","else","enum","exports","extends","final","finally","for","goto","if","implements","import","instanceof","interface","module","native","new","non-sealed","open","opens","package","permits","private","protected","provides","public","record","requires","return","sealed","static","strictfp","super","switch","synchronized","this","throw","throws","to","transient","transitive","try","uses","var","void","volatile","when","while","with","yield"].join("|")})\\b`,"y")},{type:"boolean",pattern:/(?:true|false)\b/y},{type:"null",pattern:/null\b/y},{type:"number",pattern:/0[xX][\da-fA-F](?:_*[\da-fA-F])*[lL]?/y},{type:"number",pattern:/0[bB][01](?:_*[01])*[lL]?/y},{type:"number",pattern:/\d(?:_*\d)*(?:\.(?:\d(?:_*\d)*)?)?(?:[eE][+-]?\d(?:_*\d)*)?[fFdDlL]?/y},{type:"function",pattern:/[a-zA-Z_]\w*(?=\s*\()/y},{type:"operator",pattern:/(?:>>>=?|>>=?|<<=?|->|::|\+\+|--|&&|\|\||[+\-*/%&|^~!=<>]=?|\?|:)/y},{type:"punctuation",pattern:/[{}[\]();.,]/y}]},r={id:"java",displayName:"Java",highlighting:p,detection:new e},s={name:"json",aliases:["jsonc"],patterns:[{type:"property",pattern:/"(?:[^"\\]|\\.)*"(?=\s*:)/y},{type:"string",pattern:/"(?:[^"\\]|\\.)*"/y},{type:"number",pattern:/-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/y},{type:"boolean",pattern:/(?:true|false)\b/y},{type:"null",pattern:/null\b/y},{type:"punctuation",pattern:/[{}[\]:,]/y}]},y={id:"json",displayName:"JSON",aliases:["jsonc"],highlighting:s,detection:new t},i={name:"xml",aliases:["html","xhtml","svg","xsl"],patterns:[{type:"comment",pattern:/<!--[\s\S]*?-->/y},{type:"keyword",pattern:/<!\[CDATA\[[\s\S]*?\]\]>/y},{type:"keyword",pattern:/<\?[\s\S]*?\?>/y},{type:"tag",pattern:new RegExp(`<\\/${a}`,"y")},{type:"tag",pattern:new RegExp(`<${a}`,"y")},{type:"punctuation",pattern:/\/>|>|=/y},{type:"attribute",pattern:new RegExp(`${a}(?=\\s*=)`,"y")},{type:"string",pattern:/"[^"]*"/y},{type:"string",pattern:/'[^']*'/y}]},o={id:"xml",displayName:"XML",aliases:["html","xhtml","svg","xsl"],highlighting:i,detection:new n};export{r as a,s as i,i as n,p as o,y as r,o as t};
|
|
2
|
-
//# sourceMappingURL=XmlSupport-D54BdAJZ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XmlSupport-D54BdAJZ.mjs","names":[],"sources":["../../src/plugins/code-block/highlighter/languages/java.ts","../../src/plugins/language/bundles/JavaSupport.ts","../../src/plugins/code-block/highlighter/languages/json.ts","../../src/plugins/language/bundles/JsonSupport.ts","../../src/plugins/code-block/highlighter/languages/xml.ts","../../src/plugins/language/bundles/XmlSupport.ts"],"sourcesContent":["/**\n * Java language definition for regex-based syntax highlighting.\n *\n * Covers Java 21 syntax including sealed classes, records, pattern matching,\n * modules, text blocks, and switch expressions.\n *\n * Token type mapping:\n * - `comment` - line `//`, block, and Javadoc comments\n * - `string` - double-quoted strings, text blocks, char literals\n * - `annotation` - annotations `@Name`, `@java.lang.Override`\n * - `keyword` - Java 21 keywords (including contextual: sealed, record, var, yield, when)\n * - `boolean` - `true`, `false`\n * - `null` - `null`\n * - `number` - decimal, hex, binary, float, scientific, with underscores\n * - `function` - method/function names (identifier followed by `(`)\n * - `operator` - all Java operators including `->`, `::`, `>>>=`\n * - `punctuation` - delimiters `{}[]();.,`\n */\n\nimport type { LanguageDefinition } from '../TokenizerTypes.js';\n\nconst JAVA_KEYWORDS: readonly string[] = [\n\t'abstract',\n\t'assert',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'default',\n\t'do',\n\t'else',\n\t'enum',\n\t'exports',\n\t'extends',\n\t'final',\n\t'finally',\n\t'for',\n\t'goto',\n\t'if',\n\t'implements',\n\t'import',\n\t'instanceof',\n\t'interface',\n\t'module',\n\t'native',\n\t'new',\n\t'non-sealed',\n\t'open',\n\t'opens',\n\t'package',\n\t'permits',\n\t'private',\n\t'protected',\n\t'provides',\n\t'public',\n\t'record',\n\t'requires',\n\t'return',\n\t'sealed',\n\t'static',\n\t'strictfp',\n\t'super',\n\t'switch',\n\t'synchronized',\n\t'this',\n\t'throw',\n\t'throws',\n\t'to',\n\t'transient',\n\t'transitive',\n\t'try',\n\t'uses',\n\t'var',\n\t'void',\n\t'volatile',\n\t'when',\n\t'while',\n\t'with',\n\t'yield',\n];\n\nconst KEYWORD_PATTERN: RegExp = new RegExp(`(?:${JAVA_KEYWORDS.join('|')})\\\\b`, 'y');\n\nexport const JAVA_LANGUAGE: LanguageDefinition = {\n\tname: 'java',\n\taliases: [],\n\tpatterns: [\n\t\t// 1. Block/Javadoc comments — before `/` operator\n\t\t{ type: 'comment', pattern: /\\/\\*[\\s\\S]*?\\*\\//y },\n\t\t// 2. Line comments — before `/` operator\n\t\t{ type: 'comment', pattern: /\\/\\/[^\\n]*/y },\n\t\t// 3. Text blocks `\"\"\"...\"\"\"` — before empty string `\"\"`\n\t\t{ type: 'string', pattern: /\"\"\"[\\s\\S]*?\"\"\"/y },\n\t\t// 4. Double-quoted strings — escape-aware\n\t\t{ type: 'string', pattern: /\"(?:[^\"\\\\]|\\\\.)*\"/y },\n\t\t// 5. Char literals — escape-aware\n\t\t{ type: 'string', pattern: /'(?:[^'\\\\]|\\\\.)*'/y },\n\t\t// 6. Annotations — before operators (captures `@`)\n\t\t{ type: 'annotation', pattern: /@[a-zA-Z_]\\w*(?:\\.[a-zA-Z_]\\w*)*/y },\n\t\t// 7. Keywords — before functions (`if(` = keyword, not function)\n\t\t{ type: 'keyword', pattern: KEYWORD_PATTERN },\n\t\t// 8. Booleans\n\t\t{ type: 'boolean', pattern: /(?:true|false)\\b/y },\n\t\t// 9. Null\n\t\t{ type: 'null', pattern: /null\\b/y },\n\t\t// 10. Hex numbers — before decimal (both can start with `0`)\n\t\t{ type: 'number', pattern: /0[xX][\\da-fA-F](?:_*[\\da-fA-F])*[lL]?/y },\n\t\t// 11. Binary numbers — before decimal\n\t\t{ type: 'number', pattern: /0[bB][01](?:_*[01])*[lL]?/y },\n\t\t// 12. Decimal/float/scientific numbers — with underscore and suffix support\n\t\t{\n\t\t\ttype: 'number',\n\t\t\tpattern: /\\d(?:_*\\d)*(?:\\.(?:\\d(?:_*\\d)*)?)?(?:[eE][+-]?\\d(?:_*\\d)*)?[fFdDlL]?/y,\n\t\t},\n\t\t// 13. Function/method names — identifier followed by `(`\n\t\t{ type: 'function', pattern: /[a-zA-Z_]\\w*(?=\\s*\\()/y },\n\t\t// 14. Operators\n\t\t{\n\t\t\ttype: 'operator',\n\t\t\tpattern: /(?:>>>=?|>>=?|<<=?|->|::|\\+\\+|--|&&|\\|\\||[+\\-*/%&|^~!=<>]=?|\\?|:)/y,\n\t\t},\n\t\t// 15. Punctuation — catch-all delimiters\n\t\t{ type: 'punctuation', pattern: /[{}[\\]();.,]/y },\n\t],\n};\n","/**\n * Built-in Java language support bundle.\n * Includes syntax highlighting (Java 21) and smart-paste detection.\n */\n\nimport { JAVA_LANGUAGE } from '../../code-block/highlighter/languages/java.js';\nimport { JavaDetector } from '../../smart-paste/detectors/JavaDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nexport const JAVA_SUPPORT: LanguageSupport = {\n\tid: 'java',\n\tdisplayName: 'Java',\n\thighlighting: JAVA_LANGUAGE,\n\tdetection: new JavaDetector(),\n};\n","/**\n * JSON language definition for regex-based syntax highlighting.\n */\n\nimport type { LanguageDefinition } from '../TokenizerTypes.js';\n\nexport const JSON_LANGUAGE: LanguageDefinition = {\n\tname: 'json',\n\taliases: ['jsonc'],\n\tpatterns: [\n\t\t{ type: 'property', pattern: /\"(?:[^\"\\\\]|\\\\.)*\"(?=\\s*:)/y },\n\t\t{ type: 'string', pattern: /\"(?:[^\"\\\\]|\\\\.)*\"/y },\n\t\t{ type: 'number', pattern: /-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/y },\n\t\t{ type: 'boolean', pattern: /(?:true|false)\\b/y },\n\t\t{ type: 'null', pattern: /null\\b/y },\n\t\t{ type: 'punctuation', pattern: /[{}[\\]:,]/y },\n\t],\n};\n","/**\n * Built-in JSON language support bundle.\n * Includes syntax highlighting and smart-paste detection.\n */\n\nimport { JSON_LANGUAGE } from '../../code-block/highlighter/languages/json.js';\nimport { JsonDetector } from '../../smart-paste/detectors/JsonDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nexport const JSON_SUPPORT: LanguageSupport = {\n\tid: 'json',\n\tdisplayName: 'JSON',\n\taliases: ['jsonc'],\n\thighlighting: JSON_LANGUAGE,\n\tdetection: new JsonDetector(),\n};\n","/**\n * XML language definition for regex-based syntax highlighting.\n *\n * Token type mapping:\n * - `comment` — XML comments `<!-- ... -->`\n * - `keyword` — processing instructions, CDATA sections\n * - `tag` — tag names (consumed with `<`/`</` prefix)\n * - `attribute` — attribute names (identifier followed by `=`)\n * - `string` — attribute values (double or single quoted)\n * - `punctuation` — delimiters `/>`, `>`, `=`\n *\n * Tag names are combined with their `<` or `</` prefix into a single `tag` token\n * to prevent text content between tags from being incorrectly highlighted.\n */\n\nimport { XML_TAG_NAME } from '../../../shared/XmlPatterns.js';\nimport type { LanguageDefinition } from '../TokenizerTypes.js';\n\nexport const XML_LANGUAGE: LanguageDefinition = {\n\tname: 'xml',\n\taliases: ['html', 'xhtml', 'svg', 'xsl'],\n\tpatterns: [\n\t\t{ type: 'comment', pattern: /<!--[\\s\\S]*?-->/y },\n\t\t{ type: 'keyword', pattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/y },\n\t\t{ type: 'keyword', pattern: /<\\?[\\s\\S]*?\\?>/y },\n\t\t{ type: 'tag', pattern: new RegExp(`<\\\\/${XML_TAG_NAME}`, 'y') },\n\t\t{ type: 'tag', pattern: new RegExp(`<${XML_TAG_NAME}`, 'y') },\n\t\t{ type: 'punctuation', pattern: /\\/>|>|=/y },\n\t\t{ type: 'attribute', pattern: new RegExp(`${XML_TAG_NAME}(?=\\\\s*=)`, 'y') },\n\t\t{ type: 'string', pattern: /\"[^\"]*\"/y },\n\t\t{ type: 'string', pattern: /'[^']*'/y },\n\t],\n};\n","/**\n * Built-in XML language support bundle.\n * Includes syntax highlighting and smart-paste detection.\n */\n\nimport { XML_LANGUAGE } from '../../code-block/highlighter/languages/xml.js';\nimport { XmlDetector } from '../../smart-paste/detectors/XmlDetector.js';\nimport type { LanguageSupport } from '../LanguageTypes.js';\n\nexport const XML_SUPPORT: LanguageSupport = {\n\tid: 'xml',\n\tdisplayName: 'XML',\n\taliases: ['html', 'xhtml', 'svg', 'xsl'],\n\thighlighting: XML_LANGUAGE,\n\tdetection: new XmlDetector(),\n};\n"],"mappings":"4GAmFA,IAEa,EAAoC,CAChD,KAAM,OACN,QAAS,GACT,SAAU,CAET,CAAE,KAAM,UAAW,QAAS,qBAE5B,CAAE,KAAM,UAAW,QAAS,eAE5B,CAAE,KAAM,SAAU,QAAS,mBAE3B,CAAE,KAAM,SAAU,QAAS,sBAE3B,CAAE,KAAM,SAAU,QAAS,sBAE3B,CAAE,KAAM,aAAc,QAAS,qCAE/B,CAAE,KAAM,UAAW,QAnBW,IAAI,OAAO,MA9DF,CACxC,WACA,SACA,QACA,OACA,QACA,QACA,QACA,WACA,UACA,KACA,OACA,OACA,UACA,UACA,QACA,UACA,MACA,OACA,KACA,aACA,SACA,aACA,YACA,SACA,SACA,MACA,aACA,OACA,QACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,SACA,SACA,SACA,WACA,QACA,SACA,eACA,OACA,QACA,SACA,KACA,YACA,aACA,MACA,OACA,MACA,OACA,WACA,OACA,QACA,OACA,SAG8D,KAAK,WAAY,MAqB9E,CAAE,KAAM,UAAW,QAAS,qBAE5B,CAAE,KAAM,OAAQ,QAAS,WAEzB,CAAE,KAAM,SAAU,QAAS,0CAE3B,CAAE,KAAM,SAAU,QAAS,8BAE3B,CACC,KAAM,SACN,QAAS,yEAGV,CAAE,KAAM,WAAY,QAAS,0BAE7B,CACC,KAAM,WACN,QAAS,sEAGV,CAAE,KAAM,cAAe,QAAS,mBCnHrB,EAAgC,CAC5C,GAAI,OACJ,YAAa,OACb,aAAc,EACd,UAAW,IAAI,GCPH,EAAoC,CAChD,KAAM,OACN,QAAS,CAAC,SACV,SAAU,CACT,CAAE,KAAM,WAAY,QAAS,8BAC7B,CAAE,KAAM,SAAU,QAAS,sBAC3B,CAAE,KAAM,SAAU,QAAS,gDAC3B,CAAE,KAAM,UAAW,QAAS,qBAC5B,CAAE,KAAM,OAAQ,QAAS,WACzB,CAAE,KAAM,cAAe,QAAS,gBCNrB,EAAgC,CAC5C,GAAI,OACJ,YAAa,OACb,QAAS,CAAC,SACV,aAAc,EACd,UAAW,IAAI,GCIH,EAAmC,CAC/C,KAAM,MACN,QAAS,CAAC,OAAQ,QAAS,MAAO,OAClC,SAAU,CACT,CAAE,KAAM,UAAW,QAAS,oBAC5B,CAAE,KAAM,UAAW,QAAS,6BAC5B,CAAE,KAAM,UAAW,QAAS,mBAC5B,CAAE,KAAM,MAAO,QAAS,IAAI,OAAO,OAAO,IAAgB,MAC1D,CAAE,KAAM,MAAO,QAAS,IAAI,OAAO,IAAI,IAAgB,MACvD,CAAE,KAAM,cAAe,QAAS,YAChC,CAAE,KAAM,YAAa,QAAS,IAAI,OAAO,GAAG,aAAyB,MACrE,CAAE,KAAM,SAAU,QAAS,YAC3B,CAAE,KAAM,SAAU,QAAS,cCrBhB,EAA+B,CAC3C,GAAI,MACJ,YAAa,MACb,QAAS,CAAC,OAAQ,QAAS,MAAO,OAClC,aAAc,EACd,UAAW,IAAI"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var o={ltr:"من اليسار إلى اليمين",rtl:"من اليمين إلى اليسار",auto:"تلقائي",toolbarLabel:"اتجاه النص",toolbarTooltip:"اتجاه النص",announceLTR:"تم تعيين اتجاه النص من اليسار إلى اليمين",announceRTL:"تم تعيين اتجاه النص من اليمين إلى اليسار",announceAuto:"تم تعيين اتجاه النص إلى تلقائي"};export{o as default};
|
|
2
|
-
//# sourceMappingURL=ar-2Fkz_6nI.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-2Fkz_6nI.mjs","names":[],"sources":["../../src/plugins/text-direction/locales/ar.ts"],"sourcesContent":["import type { TextDirectionLocale } from '../TextDirectionLocale.js';\n\nconst locale: TextDirectionLocale = {\n\tltr: 'من اليسار إلى اليمين',\n\trtl: 'من اليمين إلى اليسار',\n\tauto: 'تلقائي',\n\ttoolbarLabel: 'اتجاه النص',\n\ttoolbarTooltip: 'اتجاه النص',\n\tannounceLTR: 'تم تعيين اتجاه النص من اليسار إلى اليمين',\n\tannounceRTL: 'تم تعيين اتجاه النص من اليمين إلى اليسار',\n\tannounceAuto: 'تم تعيين اتجاه النص إلى تلقائي',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA8B,CACnC,IAAK,uBACL,IAAK,uBACL,KAAM,SACN,aAAc,aACd,eAAgB,aAChB,YAAa,2CACb,YAAa,2CACb,aAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-4ZPC8daa.mjs","names":[],"sources":["../../src/plugins/blockquote/locales/ar.ts"],"sourcesContent":["import type { BlockquoteLocale } from '../BlockquoteLocale.js';\n\nconst locale: BlockquoteLocale = {\n\tlabel: 'اقتباس',\n\ttooltip: (shortcut: string) => `اقتباس (${shortcut})`,\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA2B,CAChC,MAAO,SACP,QAAU,GAAqB,WAAW"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var l={label:"رابط",tooltip:l=>`إدراج رابط (${l})`,removeLink:"إزالة الرابط",removeLinkAria:"إزالة الرابط",urlPlaceholder:"https://...",urlAria:"عنوان الرابط",apply:"تطبيق",applyAria:"تطبيق الرابط",invalidUrl:"يُسمح فقط بـ http(s) و mailto و tel والمراسي والمسارات النسبية."};export{l as default};
|
|
2
|
-
//# sourceMappingURL=ar-6I20_Djq.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-6I20_Djq.mjs","names":[],"sources":["../../src/plugins/link/locales/ar.ts"],"sourcesContent":["import type { LinkLocale } from '../LinkLocale.js';\n\nconst locale: LinkLocale = {\n\tlabel: 'رابط',\n\ttooltip: (shortcut: string) => `إدراج رابط (${shortcut})`,\n\tremoveLink: 'إزالة الرابط',\n\tremoveLinkAria: 'إزالة الرابط',\n\turlPlaceholder: 'https://...',\n\turlAria: 'عنوان الرابط',\n\tapply: 'تطبيق',\n\tapplyAria: 'تطبيق الرابط',\n\tinvalidUrl: 'يُسمح فقط بـ http(s) و mailto و tel والمراسي والمسارات النسبية.',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAAqB,CAC1B,MAAO,OACP,QAAU,GAAqB,eAAe,KAC9C,WAAY,eACZ,eAAgB,eAChB,eAAgB,cAChB,QAAS,eACT,MAAO,QACP,UAAW,eACX,WAAY"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e={detectedAsCodeBlock:e=>`تم اللصق ككتلة كود ${e} مع تمييز بناء الجملة.`,detectedMixedContent:(e,t,o)=>{const d=[];if(e>0&&d.push(`${e} فقر${e>1?"ات":"ة"}`),t>0){const e=o.join("، ");d.push(`${t} كتل${t>1?"ة":""} كود (${e})`)}return`تم اللصق كـ ${d.join(" و ")}.`}};export{e as default};
|
|
2
|
-
//# sourceMappingURL=ar-B7-Dm70S.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-B7-Dm70S.mjs","names":[],"sources":["../../src/plugins/smart-paste/locales/ar.ts"],"sourcesContent":["import type { SmartPasteLocale } from '../SmartPasteLocale.js';\n\nconst locale: SmartPasteLocale = {\n\tdetectedAsCodeBlock: (language: string) => `تم اللصق ككتلة كود ${language} مع تمييز بناء الجملة.`,\n\tdetectedMixedContent: (textCount: number, codeCount: number, languages: readonly string[]) => {\n\t\tconst parts: string[] = [];\n\t\tif (textCount > 0) {\n\t\t\tparts.push(`${textCount} فقر${textCount > 1 ? 'ات' : 'ة'}`);\n\t\t}\n\t\tif (codeCount > 0) {\n\t\t\tconst langList: string = languages.join('، ');\n\t\t\tparts.push(`${codeCount} كتل${codeCount > 1 ? 'ة' : ''} كود (${langList})`);\n\t\t}\n\t\treturn `تم اللصق كـ ${parts.join(' و ')}.`;\n\t},\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA2B,CAChC,oBAAsB,GAAqB,sBAAsB,0BACjE,qBAAA,CAAuB,EAAmB,EAAmB,KAC5D,MAAM,EAAkB,GAIxB,GAHI,EAAY,GACf,EAAM,KAAK,GAAG,QAAgB,EAAY,EAAI,KAAO,OAElD,EAAY,EAAG,CAClB,MAAM,EAAmB,EAAU,KAAK,MACxC,EAAM,KAAK,GAAG,QAAgB,EAAY,EAAI,IAAM,WAAW,MAEhE,MAAO,eAAe,EAAM,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-BRe0t96G.mjs","names":[],"sources":["../../src/plugins/print/locales/ar.ts"],"sourcesContent":["import type { PrintLocale } from '../PrintLocale.js';\n\nconst locale: PrintLocale = {\n\tlabel: '\\u0637\\u0628\\u0627\\u0639\\u0629',\n\ttooltip: (shortcut: string) => `\\u0637\\u0628\\u0627\\u0639\\u0629 (${shortcut})`,\n\tprintingAnnouncement: '\\u062c\\u0627\\u0631\\u064d \\u0627\\u0644\\u0637\\u0628\\u0627\\u0639\\u0629',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAAsB,CAC3B,MAAO,QACP,QAAU,GAAqB,UAAmC,KAClE,qBAAsB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-BnNyrtdi.mjs","names":[],"sources":["../../src/plugins/font-size/locales/ar.ts"],"sourcesContent":["import type { FontSizeLocale } from '../FontSizeLocale.js';\n\nconst locale: FontSizeLocale = {\n\tlabel: 'حجم الخط',\n\ttooltip: 'حجم الخط',\n\tcustomFontSizeAria: 'حجم خط مخصص',\n\tfontSizesAria: 'أحجام الخط',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAAyB,CAC9B,MAAO,WACP,QAAS,WACT,mBAAoB,cACpB,cAAe"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-BsMfhWs5.mjs","names":[],"sources":["../../src/plugins/alignment/locales/ar.ts"],"sourcesContent":["import type { AlignmentLocale } from '../AlignmentLocale.js';\n\nconst locale: AlignmentLocale = {\n\talignStart: 'محاذاة البداية',\n\talignCenter: 'توسيط',\n\talignEnd: 'محاذاة النهاية',\n\tjustify: 'ضبط',\n\ttoolbarLabel: 'المحاذاة',\n\ttoolbarTooltip: 'المحاذاة',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA0B,CAC/B,WAAY,iBACZ,YAAa,QACb,SAAU,iBACV,QAAS,MACT,aAAc,WACd,eAAgB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-Bvja-bjE.mjs","names":[],"sources":["../../src/plugins/inline-code/locales/ar.ts"],"sourcesContent":["import type { InlineCodeLocale } from '../InlineCodeLocale.js';\n\nconst locale: InlineCodeLocale = {\n\tlabel: 'كود مضمّن',\n\ttooltip: (shortcut: string) => `كود مضمّن (${shortcut})`,\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA2B,CAChC,MAAO,YACP,QAAU,GAAqB,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-BxVbBvSa.mjs","names":[],"sources":["../../src/editor/locales/ar.ts"],"sourcesContent":["import type { EditorLocale } from '../EditorLocale.js';\n\nconst locale: EditorLocale = {\n\tariaLabel: '\\u0645\\u062d\\u0631\\u0631 \\u0646\\u0635 \\u0645\\u0646\\u0633\\u0642',\n\tariaDescription:\n\t\t'\\u0627\\u0636\\u063a\\u0637 Escape \\u0644\\u0644\\u062e\\u0631\\u0648\\u062c \\u0645\\u0646 \\u0627\\u0644\\u0645\\u062d\\u0631\\u0631',\n\tdefaultPlaceholder: '\\u0627\\u0628\\u062f\\u0623 \\u0627\\u0644\\u0643\\u062a\\u0627\\u0628\\u0629...',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAAuB,CAC5B,UAAW,eACX,gBACC,+BACD,mBAAoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-C5dW-co3.mjs","names":[],"sources":["../../src/plugins/horizontal-rule/locales/ar.ts"],"sourcesContent":["import type { HorizontalRuleLocale } from '../HorizontalRuleLocale.js';\n\nconst locale: HorizontalRuleLocale = {\n\tlabel: 'خط أفقي',\n\ttooltip: (shortcut: string) => `خط أفقي (${shortcut})`,\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA+B,CACpC,MAAO,UACP,QAAU,GAAqB,YAAY"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-CARMr30L.mjs","names":[],"sources":["../../src/plugins/bidi-isolation/locales/ar.ts"],"sourcesContent":["import type { BidiIsolationLocale } from '../BidiIsolationLocale.js';\n\nconst locale: BidiIsolationLocale = {\n\tinlineLTR: 'سطري من اليسار إلى اليمين',\n\tinlineRTL: 'سطري من اليمين إلى اليسار',\n\tinlineAuto: 'سطري تلقائي',\n\tinlineLabel: 'اتجاه سطري',\n\tinlineTooltip: 'اتجاه سطري',\n\tannounceRemoveBidi: 'تم إزالة عزل الاتجاه السطري',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAA8B,CACnC,UAAW,4BACX,UAAW,4BACX,WAAY,cACZ,YAAa,aACb,cAAe,aACf,mBAAoB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e={insertRowAbove:"إدراج صف أعلى",insertRowBelow:"إدراج صف أسفل",insertColumnLeft:"إدراج عمود على اليسار",insertColumnRight:"إدراج عمود على اليمين",deleteRow:"حذف الصف",deleteColumn:"حذف العمود",borderColorLabel:"لون الحدود…",deleteTable:"حذف الجدول",tableActions:"إجراءات الجدول",menuKeyboardHint:"↑↓ تنقل · Enter تحديد · Esc إغلاق",insertRow:"إدراج صف",insertColumn:"إدراج عمود",addRow:"إضافة صف",addColumn:"إضافة عمود",tableActionsHint:"إجراءات الجدول (انقر بزر الماوس الأيمن أو Shift+F10)",contextMenuHint:"انقر بزر الماوس الأيمن أو Shift+F10 لإجراءات الجدول",borderColor:"لون الحدود",defaultColor:"افتراضي",noBorders:"بدون حدود",borderColorPicker:"منتقي لون الحدود",announceBorderColorSet:e=>`تم تعيين لون حدود الجدول إلى ${e}`,announceBorderReset:"تم إعادة تعيين حدود الجدول إلى الافتراضي",borderSwatchLabel:e=>`حدود ${e}`,announceRowInsertedAbove:"تم إدراج صف أعلى",announceRowInsertedBelow:"تم إدراج صف أسفل",announceColumnInserted:e=>`تم إدراج عمود ${e}`,announceRowDeleted:"تم حذف الصف",announceColumnDeleted:"تم حذف العمود",announceTableDeleted:"تم حذف الجدول",insertTable:"إدراج جدول",tableAriaLabel:(e,n)=>`جدول من ${e} صفوف و ${n} أعمدة`,tableAriaDescription:"انقر بزر الماوس الأيمن أو Shift+F10 لإجراءات الجدول"};export{e as default};
|
|
2
|
-
//# sourceMappingURL=ar-CB-pehGw.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-CB-pehGw.mjs","names":[],"sources":["../../src/plugins/table/locales/ar.ts"],"sourcesContent":["import type { TableLocale } from '../TableLocale.js';\n\nconst locale: TableLocale = {\n\tinsertRowAbove: '\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0623\\u0639\\u0644\\u0649',\n\tinsertRowBelow: '\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0623\\u0633\\u0641\\u0644',\n\tinsertColumnLeft:\n\t\t'\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f \\u0639\\u0644\\u0649 \\u0627\\u0644\\u064a\\u0633\\u0627\\u0631',\n\tinsertColumnRight:\n\t\t'\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f \\u0639\\u0644\\u0649 \\u0627\\u0644\\u064a\\u0645\\u064a\\u0646',\n\tdeleteRow: '\\u062d\\u0630\\u0641 \\u0627\\u0644\\u0635\\u0641',\n\tdeleteColumn: '\\u062d\\u0630\\u0641 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062f',\n\tborderColorLabel: '\\u0644\\u0648\\u0646 \\u0627\\u0644\\u062d\\u062f\\u0648\\u062f\\u2026',\n\tdeleteTable: '\\u062d\\u0630\\u0641 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644',\n\n\ttableActions: '\\u0625\\u062c\\u0631\\u0627\\u0621\\u0627\\u062a \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644',\n\tmenuKeyboardHint:\n\t\t'\\u2191\\u2193 \\u062a\\u0646\\u0642\\u0644 \\u00b7 Enter \\u062a\\u062d\\u062f\\u064a\\u062f \\u00b7 Esc \\u0625\\u063a\\u0644\\u0627\\u0642',\n\n\tinsertRow: '\\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641',\n\tinsertColumn: '\\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f',\n\taddRow: '\\u0625\\u0636\\u0627\\u0641\\u0629 \\u0635\\u0641',\n\taddColumn: '\\u0625\\u0636\\u0627\\u0641\\u0629 \\u0639\\u0645\\u0648\\u062f',\n\ttableActionsHint:\n\t\t'\\u0625\\u062c\\u0631\\u0627\\u0621\\u0627\\u062a \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644 (\\u0627\\u0646\\u0642\\u0631 \\u0628\\u0632\\u0631 \\u0627\\u0644\\u0645\\u0627\\u0648\\u0633 \\u0627\\u0644\\u0623\\u064a\\u0645\\u0646 \\u0623\\u0648 Shift+F10)',\n\tcontextMenuHint:\n\t\t'\\u0627\\u0646\\u0642\\u0631 \\u0628\\u0632\\u0631 \\u0627\\u0644\\u0645\\u0627\\u0648\\u0633 \\u0627\\u0644\\u0623\\u064a\\u0645\\u0646 \\u0623\\u0648 Shift+F10 \\u0644\\u0625\\u062c\\u0631\\u0627\\u0621\\u0627\\u062a \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644',\n\tborderColor: '\\u0644\\u0648\\u0646 \\u0627\\u0644\\u062d\\u062f\\u0648\\u062f',\n\n\tdefaultColor: '\\u0627\\u0641\\u062a\\u0631\\u0627\\u0636\\u064a',\n\tnoBorders: '\\u0628\\u062f\\u0648\\u0646 \\u062d\\u062f\\u0648\\u062f',\n\tborderColorPicker:\n\t\t'\\u0645\\u0646\\u062a\\u0642\\u064a \\u0644\\u0648\\u0646 \\u0627\\u0644\\u062d\\u062f\\u0648\\u062f',\n\tannounceBorderColorSet: (colorName: string) =>\n\t\t`\\u062a\\u0645 \\u062a\\u0639\\u064a\\u064a\\u0646 \\u0644\\u0648\\u0646 \\u062d\\u062f\\u0648\\u062f \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644 \\u0625\\u0644\\u0649 ${colorName}`,\n\tannounceBorderReset:\n\t\t'\\u062a\\u0645 \\u0625\\u0639\\u0627\\u062f\\u0629 \\u062a\\u0639\\u064a\\u064a\\u0646 \\u062d\\u062f\\u0648\\u062f \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644 \\u0625\\u0644\\u0649 \\u0627\\u0644\\u0627\\u0641\\u062a\\u0631\\u0627\\u0636\\u064a',\n\tborderSwatchLabel: (colorName: string) => `\\u062d\\u062f\\u0648\\u062f ${colorName}`,\n\n\tannounceRowInsertedAbove:\n\t\t'\\u062a\\u0645 \\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0623\\u0639\\u0644\\u0649',\n\tannounceRowInsertedBelow:\n\t\t'\\u062a\\u0645 \\u0625\\u062f\\u0631\\u0627\\u062c \\u0635\\u0641 \\u0623\\u0633\\u0641\\u0644',\n\tannounceColumnInserted: (side: string) =>\n\t\t`\\u062a\\u0645 \\u0625\\u062f\\u0631\\u0627\\u062c \\u0639\\u0645\\u0648\\u062f ${side}`,\n\tannounceRowDeleted: '\\u062a\\u0645 \\u062d\\u0630\\u0641 \\u0627\\u0644\\u0635\\u0641',\n\tannounceColumnDeleted: '\\u062a\\u0645 \\u062d\\u0630\\u0641 \\u0627\\u0644\\u0639\\u0645\\u0648\\u062f',\n\tannounceTableDeleted: '\\u062a\\u0645 \\u062d\\u0630\\u0641 \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644',\n\n\tinsertTable: '\\u0625\\u062f\\u0631\\u0627\\u062c \\u062c\\u062f\\u0648\\u0644',\n\n\ttableAriaLabel: (rows: number, cols: number) =>\n\t\t`\\u062c\\u062f\\u0648\\u0644 \\u0645\\u0646 ${rows} \\u0635\\u0641\\u0648\\u0641 \\u0648 ${cols} \\u0623\\u0639\\u0645\\u062f\\u0629`,\n\ttableAriaDescription:\n\t\t'\\u0627\\u0646\\u0642\\u0631 \\u0628\\u0632\\u0631 \\u0627\\u0644\\u0645\\u0627\\u0648\\u0633 \\u0627\\u0644\\u0623\\u064a\\u0645\\u0646 \\u0623\\u0648 Shift+F10 \\u0644\\u0625\\u062c\\u0631\\u0627\\u0621\\u0627\\u062a \\u0627\\u0644\\u062c\\u062f\\u0648\\u0644',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAAsB,CAC3B,eAAgB,gBAChB,eAAgB,gBAChB,iBACC,wBACD,kBACC,wBACD,UAAW,WACX,aAAc,aACd,iBAAkB,cAClB,YAAa,aAEb,aAAc,iBACd,iBACC,oCAED,UAAW,WACX,aAAc,aACd,OAAQ,WACR,UAAW,aACX,iBACC,uDACD,gBACC,sDACD,YAAa,aAEb,aAAc,UACd,UAAW,YACX,kBACC,mBACD,uBAAyB,GACxB,gCAAmJ,IACpJ,oBACC,2CACD,kBAAoB,GAAsB,QAA4B,IAEtE,yBACC,mBACD,yBACC,mBACD,uBAAyB,GACxB,iBAAwE,IACzE,mBAAoB,cACpB,sBAAuB,gBACvB,qBAAsB,gBAEtB,YAAa,aAEb,eAAA,CAAiB,EAAc,IAC9B,WAAyC,YAAwC,UAClF,qBACC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var a={paragraph:"فقرة",title:"عنوان",subtitle:"عنوان فرعي",heading1:"عنوان 1",heading2:"عنوان 2",heading3:"عنوان 3",heading4:"عنوان 4",heading5:"عنوان 5",heading6:"عنوان 6",blockTypeLabel:"نوع الكتلة",blockTypesAria:"أنواع الكتل"};export{a as default};
|
|
2
|
-
//# sourceMappingURL=ar-CEYgAxTM.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ar-CEYgAxTM.mjs","names":[],"sources":["../../src/plugins/heading/locales/ar.ts"],"sourcesContent":["import type { HeadingLocale } from '../HeadingLocale.js';\n\nconst locale: HeadingLocale = {\n\tparagraph: 'فقرة',\n\ttitle: 'عنوان',\n\tsubtitle: 'عنوان فرعي',\n\theading1: 'عنوان 1',\n\theading2: 'عنوان 2',\n\theading3: 'عنوان 3',\n\theading4: 'عنوان 4',\n\theading5: 'عنوان 5',\n\theading6: 'عنوان 6',\n\tblockTypeLabel: 'نوع الكتلة',\n\tblockTypesAria: 'أنواع الكتل',\n};\n\nexport default locale;\n"],"mappings":"AAEA,IAAM,EAAwB,CAC7B,UAAW,OACX,MAAO,QACP,SAAU,aACV,SAAU,UACV,SAAU,UACV,SAAU,UACV,SAAU,UACV,SAAU,UACV,SAAU,UACV,eAAgB,aAChB,eAAgB"}
|