@notectl/core 1.7.2 → 2.0.0
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/LICENSE +21 -0
- package/README.md +56 -31
- package/custom-elements.json +350 -6
- package/dist/chunks/AttrRegistry-B2AGfTE0.mjs +2 -0
- package/dist/chunks/AttrRegistry-B2AGfTE0.mjs.map +1 -0
- package/dist/chunks/AttributedMarkCommands-BB7lzFct.mjs +2 -0
- package/dist/chunks/{AttributedMarkCommands-BtLea72z.mjs.map → AttributedMarkCommands-BB7lzFct.mjs.map} +1 -1
- package/dist/chunks/BlockTypePickerRegistry-DcSE6IXB.mjs +2 -0
- package/dist/chunks/BlockTypePickerRegistry-DcSE6IXB.mjs.map +1 -0
- package/dist/chunks/ColorGrid-CpkbKfXg.mjs +2 -0
- package/dist/chunks/ColorGrid-CpkbKfXg.mjs.map +1 -0
- package/dist/chunks/ColorPickerPopup-DRzFvt7o.mjs +2 -0
- package/dist/chunks/ColorPickerPopup-DRzFvt7o.mjs.map +1 -0
- package/dist/chunks/ColorValidation-DCSKq9B2.mjs +2 -0
- package/dist/chunks/{ColorValidation-CV4f1wu6.mjs.map → ColorValidation-DCSKq9B2.mjs.map} +1 -1
- package/dist/chunks/Commands-P9wS8qtN.mjs +2 -0
- package/dist/chunks/Commands-P9wS8qtN.mjs.map +1 -0
- package/dist/chunks/Decoration-D49mFXrH.mjs +2 -0
- package/dist/chunks/Decoration-D49mFXrH.mjs.map +1 -0
- package/dist/chunks/Document-BFYAonMF.mjs +2 -0
- package/dist/chunks/Document-BFYAonMF.mjs.map +1 -0
- package/dist/chunks/DocumentParser-DFcvVMGY.mjs +2 -0
- package/dist/chunks/DocumentParser-DFcvVMGY.mjs.map +1 -0
- package/dist/chunks/DomUtils-Cdz1eDKM.mjs +2 -0
- package/dist/chunks/DomUtils-Cdz1eDKM.mjs.map +1 -0
- package/dist/chunks/HTMLUtils-CCvQ5f83.mjs +2 -0
- package/dist/chunks/HTMLUtils-CCvQ5f83.mjs.map +1 -0
- package/dist/chunks/HeadingPlugin-DYy3IoT_.mjs +2 -0
- package/dist/chunks/HeadingPlugin-DYy3IoT_.mjs.map +1 -0
- package/dist/chunks/KeyboardNav-DsYhKKuV.mjs +2 -0
- package/dist/chunks/KeyboardNav-DsYhKKuV.mjs.map +1 -0
- package/dist/chunks/LocaleService-B6Z-wyAF.mjs +2 -0
- package/dist/chunks/LocaleService-B6Z-wyAF.mjs.map +1 -0
- package/dist/chunks/MarkCommands-B_erV7zz.mjs +2 -0
- package/dist/chunks/MarkCommands-B_erV7zz.mjs.map +1 -0
- package/dist/chunks/NavigationQueries-ogQuObz7.mjs +2 -0
- package/dist/chunks/NavigationQueries-ogQuObz7.mjs.map +1 -0
- package/dist/chunks/NotectlEditor-4NFnXLyD.mjs +2 -0
- package/dist/chunks/NotectlEditor-4NFnXLyD.mjs.map +1 -0
- package/dist/chunks/Platform-CU6itXZo.mjs +2 -0
- package/dist/chunks/Platform-CU6itXZo.mjs.map +1 -0
- package/dist/chunks/Plugin-OzM8Oxm_.mjs +2 -0
- package/dist/chunks/Plugin-OzM8Oxm_.mjs.map +1 -0
- package/dist/chunks/PluginHelpers-DjZt0pQi.mjs +2 -0
- package/dist/chunks/PluginHelpers-DjZt0pQi.mjs.map +1 -0
- package/dist/chunks/PopupManager-BM8IT6M7.mjs +2 -0
- package/dist/chunks/PopupManager-BM8IT6M7.mjs.map +1 -0
- package/dist/chunks/PopupPositioning-DtvqMSop.mjs +2 -0
- package/dist/chunks/PopupPositioning-DtvqMSop.mjs.map +1 -0
- package/dist/chunks/PrintTypes-ehbL7ipA.mjs +2 -0
- package/dist/chunks/PrintTypes-ehbL7ipA.mjs.map +1 -0
- package/dist/chunks/RangeIterator-CNI6smOg.mjs +2 -0
- package/dist/chunks/{RangeIterator-Bh4Vl_6D.mjs.map → RangeIterator-CNI6smOg.mjs.map} +1 -1
- package/dist/chunks/Selection-6-W6Flxc.mjs +2 -0
- package/dist/chunks/{Selection-BRTab5hO.mjs.map → Selection-6-W6Flxc.mjs.map} +1 -1
- package/dist/chunks/SelectionTransactions-q71GEzgE.mjs +2 -0
- package/dist/chunks/SelectionTransactions-q71GEzgE.mjs.map +1 -0
- package/dist/chunks/ShortcutFormatting-BLKS0Gys.mjs +2 -0
- package/dist/chunks/ShortcutFormatting-BLKS0Gys.mjs.map +1 -0
- package/dist/chunks/StyleRuntime-BmsLoEa8.mjs +2 -0
- package/dist/chunks/StyleRuntime-BmsLoEa8.mjs.map +1 -0
- package/dist/chunks/TextDirectionLocale-DB_aqrMg.mjs +2 -0
- package/dist/chunks/TextDirectionLocale-DB_aqrMg.mjs.map +1 -0
- package/dist/chunks/TypeBrands-Bp_Z_o5Y.mjs +2 -0
- package/dist/chunks/{TypeBrands-C09nE2qO.mjs.map → TypeBrands-Bp_Z_o5Y.mjs.map} +1 -1
- package/dist/chunks/ar-B93SPJT7.mjs +2 -0
- package/dist/chunks/ar-B93SPJT7.mjs.map +1 -0
- package/dist/chunks/ar-BAmGa08u.mjs +2 -0
- package/dist/chunks/ar-BAmGa08u.mjs.map +1 -0
- package/dist/chunks/ar-BYNFEVLc.mjs +2 -0
- package/dist/chunks/ar-BYNFEVLc.mjs.map +1 -0
- package/dist/chunks/ar-Bnc7y8BP.mjs +2 -0
- package/dist/chunks/ar-Bnc7y8BP.mjs.map +1 -0
- package/dist/chunks/ar-Bp3rDZky.mjs +2 -0
- package/dist/chunks/ar-Bp3rDZky.mjs.map +1 -0
- package/dist/chunks/ar-BtOQ7lro.mjs +2 -0
- package/dist/chunks/ar-BtOQ7lro.mjs.map +1 -0
- package/dist/chunks/ar-C5JEHhw9.mjs +2 -0
- package/dist/chunks/ar-C5JEHhw9.mjs.map +1 -0
- package/dist/chunks/ar-CL3QL0tw.mjs +2 -0
- package/dist/chunks/ar-CL3QL0tw.mjs.map +1 -0
- package/dist/chunks/ar-CYtG-XlN.mjs +2 -0
- package/dist/chunks/ar-CYtG-XlN.mjs.map +1 -0
- package/dist/chunks/ar-CzVj8p__.mjs +2 -0
- package/dist/chunks/ar-CzVj8p__.mjs.map +1 -0
- package/dist/chunks/ar-D7PS3e2g.mjs +2 -0
- package/dist/chunks/ar-D7PS3e2g.mjs.map +1 -0
- package/dist/chunks/ar-D8adM2Uy.mjs +2 -0
- package/dist/chunks/ar-D8adM2Uy.mjs.map +1 -0
- package/dist/chunks/ar-D9jyShaB.mjs +2 -0
- package/dist/chunks/ar-D9jyShaB.mjs.map +1 -0
- package/dist/chunks/ar-DR6OA3ZO.mjs +2 -0
- package/dist/chunks/ar-DR6OA3ZO.mjs.map +1 -0
- package/dist/chunks/ar-Deibepjm.mjs +2 -0
- package/dist/chunks/ar-Deibepjm.mjs.map +1 -0
- package/dist/chunks/ar-Dlb5riUN.mjs +2 -0
- package/dist/chunks/ar-Dlb5riUN.mjs.map +1 -0
- package/dist/chunks/ar-DmmxE2W7.mjs +2 -0
- package/dist/chunks/ar-DmmxE2W7.mjs.map +1 -0
- package/dist/chunks/ar-Ds6Z2Gzf.mjs +2 -0
- package/dist/chunks/ar-Ds6Z2Gzf.mjs.map +1 -0
- package/dist/chunks/ar-DtIHQ8nU.mjs +2 -0
- package/dist/chunks/ar-DtIHQ8nU.mjs.map +1 -0
- package/dist/chunks/ar-J8B-on-0.mjs +2 -0
- package/dist/chunks/ar-J8B-on-0.mjs.map +1 -0
- package/dist/chunks/ar-iU02mRe5.mjs +2 -0
- package/dist/chunks/ar-iU02mRe5.mjs.map +1 -0
- package/dist/chunks/ar-mSCYQYnL.mjs +2 -0
- package/dist/chunks/ar-mSCYQYnL.mjs.map +1 -0
- package/dist/chunks/color-picker-Byjl_xr9.mjs +2 -0
- package/dist/chunks/color-picker-Byjl_xr9.mjs.map +1 -0
- package/dist/chunks/de-8aCC5jBM.mjs +2 -0
- package/dist/chunks/de-8aCC5jBM.mjs.map +1 -0
- package/dist/chunks/de-B4y4ndUw.mjs +2 -0
- package/dist/chunks/de-B4y4ndUw.mjs.map +1 -0
- package/dist/chunks/de-B5fcZ0FQ.mjs +2 -0
- package/dist/chunks/de-B5fcZ0FQ.mjs.map +1 -0
- package/dist/chunks/de-BT9VmwoJ.mjs +2 -0
- package/dist/chunks/de-BT9VmwoJ.mjs.map +1 -0
- package/dist/chunks/de-BZWSyJTG.mjs +2 -0
- package/dist/chunks/de-BZWSyJTG.mjs.map +1 -0
- package/dist/chunks/de-CFD_Wgik.mjs +2 -0
- package/dist/chunks/de-CFD_Wgik.mjs.map +1 -0
- package/dist/chunks/de-CLYtb6kD.mjs +2 -0
- package/dist/chunks/de-CLYtb6kD.mjs.map +1 -0
- package/dist/chunks/de-CP5v-98M.mjs +2 -0
- package/dist/chunks/de-CP5v-98M.mjs.map +1 -0
- package/dist/chunks/de-CYJ6uWno.mjs +2 -0
- package/dist/chunks/de-CYJ6uWno.mjs.map +1 -0
- package/dist/chunks/de-ChcKkF7A.mjs +2 -0
- package/dist/chunks/de-ChcKkF7A.mjs.map +1 -0
- package/dist/chunks/de-CicoU066.mjs +2 -0
- package/dist/chunks/de-CicoU066.mjs.map +1 -0
- package/dist/chunks/de-CjLAdBt2.mjs +2 -0
- package/dist/chunks/de-CjLAdBt2.mjs.map +1 -0
- package/dist/chunks/de-CtFvAXwF.mjs +2 -0
- package/dist/chunks/de-CtFvAXwF.mjs.map +1 -0
- package/dist/chunks/de-D1OAXtxJ.mjs +2 -0
- package/dist/chunks/de-D1OAXtxJ.mjs.map +1 -0
- package/dist/chunks/de-DBbzCQrm.mjs +2 -0
- package/dist/chunks/de-DBbzCQrm.mjs.map +1 -0
- package/dist/chunks/de-DOLwx_M7.mjs +2 -0
- package/dist/chunks/de-DOLwx_M7.mjs.map +1 -0
- package/dist/chunks/de-De2miMxo.mjs +2 -0
- package/dist/chunks/de-De2miMxo.mjs.map +1 -0
- package/dist/chunks/de-OTfhhinm.mjs +2 -0
- package/dist/chunks/de-OTfhhinm.mjs.map +1 -0
- package/dist/chunks/de-PZ9-LlBp.mjs +2 -0
- package/dist/chunks/de-PZ9-LlBp.mjs.map +1 -0
- package/dist/chunks/de-UREymH-5.mjs +2 -0
- package/dist/chunks/de-UREymH-5.mjs.map +1 -0
- package/dist/chunks/de-chYdoK9q.mjs +2 -0
- package/dist/chunks/de-chYdoK9q.mjs.map +1 -0
- package/dist/chunks/de-xJh5C_pk.mjs +2 -0
- package/dist/chunks/de-xJh5C_pk.mjs.map +1 -0
- package/dist/chunks/es-B9UhsaEI.mjs +2 -0
- package/dist/chunks/es-B9UhsaEI.mjs.map +1 -0
- package/dist/chunks/es-BHGwPgrP.mjs +2 -0
- package/dist/chunks/es-BHGwPgrP.mjs.map +1 -0
- package/dist/chunks/es-BbGOZGS_.mjs +2 -0
- package/dist/chunks/es-BbGOZGS_.mjs.map +1 -0
- package/dist/chunks/es-BjPsub0k.mjs +2 -0
- package/dist/chunks/es-BjPsub0k.mjs.map +1 -0
- package/dist/chunks/es-Bk0bRDFE.mjs +2 -0
- package/dist/chunks/es-Bk0bRDFE.mjs.map +1 -0
- package/dist/chunks/es-BkS6DsrM.mjs +2 -0
- package/dist/chunks/es-BkS6DsrM.mjs.map +1 -0
- package/dist/chunks/es-BzEpr4Bk.mjs +2 -0
- package/dist/chunks/es-BzEpr4Bk.mjs.map +1 -0
- package/dist/chunks/es-C2lnWyA0.mjs +2 -0
- package/dist/chunks/es-C2lnWyA0.mjs.map +1 -0
- package/dist/chunks/es-C7e35Muh.mjs +2 -0
- package/dist/chunks/es-C7e35Muh.mjs.map +1 -0
- package/dist/chunks/es-CBk43isB.mjs +2 -0
- package/dist/chunks/es-CBk43isB.mjs.map +1 -0
- package/dist/chunks/es-CE8t9fuM.mjs +2 -0
- package/dist/chunks/es-CE8t9fuM.mjs.map +1 -0
- package/dist/chunks/es-CFjzqIbS.mjs +2 -0
- package/dist/chunks/es-CFjzqIbS.mjs.map +1 -0
- package/dist/chunks/es-Ce-AEYxc.mjs +2 -0
- package/dist/chunks/es-Ce-AEYxc.mjs.map +1 -0
- package/dist/chunks/es-Co4AJr8Y.mjs +2 -0
- package/dist/chunks/es-Co4AJr8Y.mjs.map +1 -0
- package/dist/chunks/es-Cu5_OA4X.mjs +2 -0
- package/dist/chunks/es-Cu5_OA4X.mjs.map +1 -0
- package/dist/chunks/es-Cud6JXHf.mjs +2 -0
- package/dist/chunks/es-Cud6JXHf.mjs.map +1 -0
- package/dist/chunks/es-D-II7LZC.mjs +2 -0
- package/dist/chunks/es-D-II7LZC.mjs.map +1 -0
- package/dist/chunks/es-DBBSeOaD.mjs +2 -0
- package/dist/chunks/es-DBBSeOaD.mjs.map +1 -0
- package/dist/chunks/es-DCwjeUUu.mjs +2 -0
- package/dist/chunks/es-DCwjeUUu.mjs.map +1 -0
- package/dist/chunks/es-DvgH3-WZ.mjs +2 -0
- package/dist/chunks/es-DvgH3-WZ.mjs.map +1 -0
- package/dist/chunks/es-MgguVgIs.mjs +2 -0
- package/dist/chunks/es-MgguVgIs.mjs.map +1 -0
- package/dist/chunks/es-yXjjcxgb.mjs +2 -0
- package/dist/chunks/es-yXjjcxgb.mjs.map +1 -0
- package/dist/chunks/fr-B-_yKIAY.mjs +2 -0
- package/dist/chunks/fr-B-_yKIAY.mjs.map +1 -0
- package/dist/chunks/fr-BGyF2ym0.mjs +2 -0
- package/dist/chunks/fr-BGyF2ym0.mjs.map +1 -0
- package/dist/chunks/fr-BoRJ3B2-.mjs +2 -0
- package/dist/chunks/fr-BoRJ3B2-.mjs.map +1 -0
- package/dist/chunks/fr-BrKk4SPg.mjs +2 -0
- package/dist/chunks/fr-BrKk4SPg.mjs.map +1 -0
- package/dist/chunks/fr-C-y09LKg.mjs +2 -0
- package/dist/chunks/fr-C-y09LKg.mjs.map +1 -0
- package/dist/chunks/fr-C1W7jyd6.mjs +2 -0
- package/dist/chunks/fr-C1W7jyd6.mjs.map +1 -0
- package/dist/chunks/fr-C8CtmWBj.mjs +2 -0
- package/dist/chunks/fr-C8CtmWBj.mjs.map +1 -0
- package/dist/chunks/fr-C9oiPW0k.mjs +2 -0
- package/dist/chunks/fr-C9oiPW0k.mjs.map +1 -0
- package/dist/chunks/fr-CEkk4UyZ.mjs +2 -0
- package/dist/chunks/fr-CEkk4UyZ.mjs.map +1 -0
- package/dist/chunks/fr-Ccaetiwi.mjs +2 -0
- package/dist/chunks/fr-Ccaetiwi.mjs.map +1 -0
- package/dist/chunks/fr-Ccku5KzA.mjs +2 -0
- package/dist/chunks/fr-Ccku5KzA.mjs.map +1 -0
- package/dist/chunks/fr-CfUg1FxU.mjs +2 -0
- package/dist/chunks/fr-CfUg1FxU.mjs.map +1 -0
- package/dist/chunks/fr-DDkBcjmO.mjs +2 -0
- package/dist/chunks/fr-DDkBcjmO.mjs.map +1 -0
- package/dist/chunks/fr-DNwLChcm.mjs +2 -0
- package/dist/chunks/fr-DNwLChcm.mjs.map +1 -0
- package/dist/chunks/fr-DvneSjCf.mjs +2 -0
- package/dist/chunks/fr-DvneSjCf.mjs.map +1 -0
- package/dist/chunks/fr-Dx4Qqimj.mjs +2 -0
- package/dist/chunks/fr-Dx4Qqimj.mjs.map +1 -0
- package/dist/chunks/fr-RHXmueoO.mjs +2 -0
- package/dist/chunks/fr-RHXmueoO.mjs.map +1 -0
- package/dist/chunks/fr-Wiobfk5s.mjs +2 -0
- package/dist/chunks/fr-Wiobfk5s.mjs.map +1 -0
- package/dist/chunks/fr-YMiDtWuG.mjs +2 -0
- package/dist/chunks/fr-YMiDtWuG.mjs.map +1 -0
- package/dist/chunks/fr-_Oxf0k66.mjs +2 -0
- package/dist/chunks/fr-_Oxf0k66.mjs.map +1 -0
- package/dist/chunks/fr-gurfH-7T.mjs +2 -0
- package/dist/chunks/fr-gurfH-7T.mjs.map +1 -0
- package/dist/chunks/fr-zP7EjxDL.mjs +2 -0
- package/dist/chunks/fr-zP7EjxDL.mjs.map +1 -0
- package/dist/chunks/hi-B2W8pFqK.mjs +2 -0
- package/dist/chunks/hi-B2W8pFqK.mjs.map +1 -0
- package/dist/chunks/hi-B2m69ZCq.mjs +2 -0
- package/dist/chunks/hi-B2m69ZCq.mjs.map +1 -0
- package/dist/chunks/hi-BMIt3y_-.mjs +2 -0
- package/dist/chunks/hi-BMIt3y_-.mjs.map +1 -0
- package/dist/chunks/hi-BmkfaZpg.mjs +2 -0
- package/dist/chunks/hi-BmkfaZpg.mjs.map +1 -0
- package/dist/chunks/hi-C-l_R2SO.mjs +2 -0
- package/dist/chunks/hi-C-l_R2SO.mjs.map +1 -0
- package/dist/chunks/hi-C1LhM-oY.mjs +2 -0
- package/dist/chunks/hi-C1LhM-oY.mjs.map +1 -0
- package/dist/chunks/hi-CGEbGI1l.mjs +2 -0
- package/dist/chunks/hi-CGEbGI1l.mjs.map +1 -0
- package/dist/chunks/hi-CPuhj7IA.mjs +2 -0
- package/dist/chunks/hi-CPuhj7IA.mjs.map +1 -0
- package/dist/chunks/hi-CT5WERqi.mjs +2 -0
- package/dist/chunks/hi-CT5WERqi.mjs.map +1 -0
- package/dist/chunks/hi-CbLPPQ0b.mjs +2 -0
- package/dist/chunks/hi-CbLPPQ0b.mjs.map +1 -0
- package/dist/chunks/hi-ClvEtEKe.mjs +2 -0
- package/dist/chunks/hi-ClvEtEKe.mjs.map +1 -0
- package/dist/chunks/hi-CpBWHmYH.mjs +2 -0
- package/dist/chunks/hi-CpBWHmYH.mjs.map +1 -0
- package/dist/chunks/hi-DAfl8nU_.mjs +2 -0
- package/dist/chunks/hi-DAfl8nU_.mjs.map +1 -0
- package/dist/chunks/hi-DVof3w0y.mjs +2 -0
- package/dist/chunks/hi-DVof3w0y.mjs.map +1 -0
- package/dist/chunks/hi-DtlvSQkD.mjs +2 -0
- package/dist/chunks/hi-DtlvSQkD.mjs.map +1 -0
- package/dist/chunks/hi-FH3CAJuR.mjs +2 -0
- package/dist/chunks/hi-FH3CAJuR.mjs.map +1 -0
- package/dist/chunks/hi-Ga9h9a_1.mjs +2 -0
- package/dist/chunks/hi-Ga9h9a_1.mjs.map +1 -0
- package/dist/chunks/hi-Zc17M1T-.mjs +2 -0
- package/dist/chunks/hi-Zc17M1T-.mjs.map +1 -0
- package/dist/chunks/hi-g7i0bmig.mjs +2 -0
- package/dist/chunks/hi-g7i0bmig.mjs.map +1 -0
- package/dist/chunks/hi-js2P6byR.mjs +2 -0
- package/dist/chunks/hi-js2P6byR.mjs.map +1 -0
- package/dist/chunks/hi-ntUsOspQ.mjs +2 -0
- package/dist/chunks/hi-ntUsOspQ.mjs.map +1 -0
- package/dist/chunks/hi-yxAcR3w6.mjs +2 -0
- package/dist/chunks/hi-yxAcR3w6.mjs.map +1 -0
- package/dist/chunks/index-C8xtb3SM.mjs +2 -0
- package/dist/chunks/index-C8xtb3SM.mjs.map +1 -0
- package/dist/chunks/index-DAoSt12h.mjs +2 -0
- package/dist/chunks/index-DAoSt12h.mjs.map +1 -0
- package/dist/chunks/pt--IiroJQw.mjs +2 -0
- package/dist/chunks/pt--IiroJQw.mjs.map +1 -0
- package/dist/chunks/pt-BF72W8M5.mjs +2 -0
- package/dist/chunks/pt-BF72W8M5.mjs.map +1 -0
- package/dist/chunks/pt-BX_t4luI.mjs +2 -0
- package/dist/chunks/pt-BX_t4luI.mjs.map +1 -0
- package/dist/chunks/pt-B_XJ2s9X.mjs +2 -0
- package/dist/chunks/pt-B_XJ2s9X.mjs.map +1 -0
- package/dist/chunks/pt-C-Vp7Rxj.mjs +2 -0
- package/dist/chunks/pt-C-Vp7Rxj.mjs.map +1 -0
- package/dist/chunks/pt-CD2aCZXf.mjs +2 -0
- package/dist/chunks/pt-CD2aCZXf.mjs.map +1 -0
- package/dist/chunks/pt-CFjzqIbS.mjs +2 -0
- package/dist/chunks/pt-CFjzqIbS.mjs.map +1 -0
- package/dist/chunks/pt-CHjmBegF.mjs +2 -0
- package/dist/chunks/pt-CHjmBegF.mjs.map +1 -0
- package/dist/chunks/pt-CQRzEocL.mjs +2 -0
- package/dist/chunks/pt-CQRzEocL.mjs.map +1 -0
- package/dist/chunks/pt-Cem2WxUk.mjs +2 -0
- package/dist/chunks/pt-Cem2WxUk.mjs.map +1 -0
- package/dist/chunks/pt-D6kdF3fH.mjs +2 -0
- package/dist/chunks/pt-D6kdF3fH.mjs.map +1 -0
- package/dist/chunks/pt-DJfJVeY8.mjs +2 -0
- package/dist/chunks/pt-DJfJVeY8.mjs.map +1 -0
- package/dist/chunks/pt-DfB-IaYi.mjs +2 -0
- package/dist/chunks/pt-DfB-IaYi.mjs.map +1 -0
- package/dist/chunks/pt-DlNdH9pu.mjs +2 -0
- package/dist/chunks/pt-DlNdH9pu.mjs.map +1 -0
- package/dist/chunks/pt-DrJ0-8Yo.mjs +2 -0
- package/dist/chunks/pt-DrJ0-8Yo.mjs.map +1 -0
- package/dist/chunks/pt-DsBJpgpe.mjs +2 -0
- package/dist/chunks/pt-DsBJpgpe.mjs.map +1 -0
- package/dist/chunks/pt-DwdSYJzC.mjs +2 -0
- package/dist/chunks/pt-DwdSYJzC.mjs.map +1 -0
- package/dist/chunks/pt-Dx9UkZ3j.mjs +2 -0
- package/dist/chunks/pt-Dx9UkZ3j.mjs.map +1 -0
- package/dist/chunks/pt-TuA3_GDM.mjs +2 -0
- package/dist/chunks/pt-TuA3_GDM.mjs.map +1 -0
- package/dist/chunks/pt-cN6r-f7f.mjs +2 -0
- package/dist/chunks/pt-cN6r-f7f.mjs.map +1 -0
- package/dist/chunks/pt-uNGpVM3D.mjs +2 -0
- package/dist/chunks/pt-uNGpVM3D.mjs.map +1 -0
- package/dist/chunks/pt-v1E9u-Jx.mjs +2 -0
- package/dist/chunks/pt-v1E9u-Jx.mjs.map +1 -0
- package/dist/chunks/ru-0h51zrqE.mjs +2 -0
- package/dist/chunks/ru-0h51zrqE.mjs.map +1 -0
- package/dist/chunks/ru-4S8w6UN_.mjs +2 -0
- package/dist/chunks/ru-4S8w6UN_.mjs.map +1 -0
- package/dist/chunks/ru-B0cRw90L.mjs +2 -0
- package/dist/chunks/ru-B0cRw90L.mjs.map +1 -0
- package/dist/chunks/ru-B3O7WXNM.mjs +2 -0
- package/dist/chunks/ru-B3O7WXNM.mjs.map +1 -0
- package/dist/chunks/ru-B6zVAzvI.mjs +2 -0
- package/dist/chunks/ru-B6zVAzvI.mjs.map +1 -0
- package/dist/chunks/ru-B8teJin_.mjs +2 -0
- package/dist/chunks/ru-B8teJin_.mjs.map +1 -0
- package/dist/chunks/ru-BCriPw-8.mjs +2 -0
- package/dist/chunks/ru-BCriPw-8.mjs.map +1 -0
- package/dist/chunks/ru-BNOU16E5.mjs +2 -0
- package/dist/chunks/ru-BNOU16E5.mjs.map +1 -0
- package/dist/chunks/ru-BO6BIS5W.mjs +2 -0
- package/dist/chunks/ru-BO6BIS5W.mjs.map +1 -0
- package/dist/chunks/ru-Bdy1lLuc.mjs +2 -0
- package/dist/chunks/ru-Bdy1lLuc.mjs.map +1 -0
- package/dist/chunks/ru-BgBctNVm.mjs +2 -0
- package/dist/chunks/ru-BgBctNVm.mjs.map +1 -0
- package/dist/chunks/ru-CNLx7T3O.mjs +2 -0
- package/dist/chunks/ru-CNLx7T3O.mjs.map +1 -0
- package/dist/chunks/ru-CVSCT776.mjs +2 -0
- package/dist/chunks/ru-CVSCT776.mjs.map +1 -0
- package/dist/chunks/ru-CZvkdGnf.mjs +2 -0
- package/dist/chunks/ru-CZvkdGnf.mjs.map +1 -0
- package/dist/chunks/ru-CegMPuML.mjs +2 -0
- package/dist/chunks/ru-CegMPuML.mjs.map +1 -0
- package/dist/chunks/ru-CiLrD2Nz.mjs +2 -0
- package/dist/chunks/ru-CiLrD2Nz.mjs.map +1 -0
- package/dist/chunks/ru-ClEM6OKY.mjs +2 -0
- package/dist/chunks/ru-ClEM6OKY.mjs.map +1 -0
- package/dist/chunks/ru-CrbxCeQf.mjs +2 -0
- package/dist/chunks/ru-CrbxCeQf.mjs.map +1 -0
- package/dist/chunks/ru-D3j2x2xu.mjs +2 -0
- package/dist/chunks/ru-D3j2x2xu.mjs.map +1 -0
- package/dist/chunks/ru-DdHqb4Mh.mjs +2 -0
- package/dist/chunks/ru-DdHqb4Mh.mjs.map +1 -0
- package/dist/chunks/ru-DjgNdOdJ.mjs +2 -0
- package/dist/chunks/ru-DjgNdOdJ.mjs.map +1 -0
- package/dist/chunks/ru-XKNCzkR2.mjs +2 -0
- package/dist/chunks/ru-XKNCzkR2.mjs.map +1 -0
- package/dist/chunks/zh--oNSMazK.mjs +2 -0
- package/dist/chunks/zh--oNSMazK.mjs.map +1 -0
- package/dist/chunks/zh-BfeWdPIz.mjs +2 -0
- package/dist/chunks/zh-BfeWdPIz.mjs.map +1 -0
- package/dist/chunks/zh-BnOxGKxF.mjs +2 -0
- package/dist/chunks/zh-BnOxGKxF.mjs.map +1 -0
- package/dist/chunks/zh-BqMtE-jN.mjs +2 -0
- package/dist/chunks/zh-BqMtE-jN.mjs.map +1 -0
- package/dist/chunks/zh-C3aI7A2o.mjs +2 -0
- package/dist/chunks/zh-C3aI7A2o.mjs.map +1 -0
- package/dist/chunks/zh-C6YALJZt.mjs +2 -0
- package/dist/chunks/zh-C6YALJZt.mjs.map +1 -0
- package/dist/chunks/zh-CWdTbUOP.mjs +2 -0
- package/dist/chunks/zh-CWdTbUOP.mjs.map +1 -0
- package/dist/chunks/zh-CY01pMD4.mjs +2 -0
- package/dist/chunks/zh-CY01pMD4.mjs.map +1 -0
- package/dist/chunks/zh-Cmt7n9FY.mjs +2 -0
- package/dist/chunks/zh-Cmt7n9FY.mjs.map +1 -0
- package/dist/chunks/zh-CpP2kee3.mjs +2 -0
- package/dist/chunks/zh-CpP2kee3.mjs.map +1 -0
- package/dist/chunks/zh-Cpbg4evx.mjs +2 -0
- package/dist/chunks/zh-Cpbg4evx.mjs.map +1 -0
- package/dist/chunks/zh-Cqb55JWa.mjs +2 -0
- package/dist/chunks/zh-Cqb55JWa.mjs.map +1 -0
- package/dist/chunks/zh-DCQZ6gss.mjs +2 -0
- package/dist/chunks/zh-DCQZ6gss.mjs.map +1 -0
- package/dist/chunks/zh-DG2CNTUU.mjs +2 -0
- package/dist/chunks/zh-DG2CNTUU.mjs.map +1 -0
- package/dist/chunks/zh-DTiTJbzz.mjs +2 -0
- package/dist/chunks/zh-DTiTJbzz.mjs.map +1 -0
- package/dist/chunks/zh-Da1z6qbB.mjs +2 -0
- package/dist/chunks/zh-Da1z6qbB.mjs.map +1 -0
- package/dist/chunks/zh-DlBt06Pr.mjs +2 -0
- package/dist/chunks/zh-DlBt06Pr.mjs.map +1 -0
- package/dist/chunks/zh-Dt-wVrNr.mjs +2 -0
- package/dist/chunks/zh-Dt-wVrNr.mjs.map +1 -0
- package/dist/chunks/zh-ND6vW2M-.mjs +2 -0
- package/dist/chunks/zh-ND6vW2M-.mjs.map +1 -0
- package/dist/chunks/zh-Yd3GNsa0.mjs +2 -0
- package/dist/chunks/zh-Yd3GNsa0.mjs.map +1 -0
- package/dist/chunks/zh-lhynyH6Q.mjs +2 -0
- package/dist/chunks/zh-lhynyH6Q.mjs.map +1 -0
- package/dist/chunks/zh-v9NmlEIN.mjs +2 -0
- package/dist/chunks/zh-v9NmlEIN.mjs.map +1 -0
- package/dist/commands/Commands.d.ts +9 -3
- package/dist/commands/Commands.d.ts.map +1 -1
- package/dist/commands/GapCursorCommands.d.ts.map +1 -1
- package/dist/commands/MarkCommands.d.ts +3 -3
- package/dist/commands/MarkCommands.d.ts.map +1 -1
- package/dist/commands/MovementCommands.d.ts +1 -4
- package/dist/commands/MovementCommands.d.ts.map +1 -1
- package/dist/commands/NodeSelectionCommands.d.ts +3 -1
- package/dist/commands/NodeSelectionCommands.d.ts.map +1 -1
- package/dist/commands/WordBoundary.d.ts +4 -9
- package/dist/commands/WordBoundary.d.ts.map +1 -1
- package/dist/editor/Announcer.d.ts +1 -2
- package/dist/editor/Announcer.d.ts.map +1 -1
- package/dist/{model → editor}/BuiltinSpecs.d.ts +1 -1
- package/dist/editor/BuiltinSpecs.d.ts.map +1 -0
- package/dist/editor/ContentSerializer.d.ts +24 -0
- package/dist/editor/ContentSerializer.d.ts.map +1 -0
- package/dist/editor/ContentStyleInjector.d.ts +69 -0
- package/dist/editor/ContentStyleInjector.d.ts.map +1 -0
- package/dist/editor/EditorConfigController.d.ts +38 -0
- package/dist/editor/EditorConfigController.d.ts.map +1 -0
- package/dist/editor/EditorDOM.d.ts +3 -4
- package/dist/editor/EditorDOM.d.ts.map +1 -1
- package/dist/editor/EditorEventEmitter.d.ts +30 -0
- package/dist/editor/EditorEventEmitter.d.ts.map +1 -0
- package/dist/editor/EditorLifecycleCoordinator.d.ts +24 -0
- package/dist/editor/EditorLifecycleCoordinator.d.ts.map +1 -0
- package/dist/editor/EditorLocale.d.ts +9 -0
- package/dist/editor/EditorLocale.d.ts.map +1 -0
- package/dist/editor/EditorStyleCoordinator.d.ts +9 -0
- package/dist/editor/EditorStyleCoordinator.d.ts.map +1 -0
- package/dist/editor/NotectlEditor.d.ts +24 -61
- package/dist/editor/NotectlEditor.d.ts.map +1 -1
- package/dist/editor/PaperLayoutController.d.ts +1 -1
- package/dist/editor/PaperLayoutController.d.ts.map +1 -1
- package/dist/editor/PluginBootstrapper.d.ts +18 -0
- package/dist/editor/PluginBootstrapper.d.ts.map +1 -0
- package/dist/editor/locales/ar.d.ts +4 -0
- package/dist/editor/locales/ar.d.ts.map +1 -0
- package/dist/editor/locales/de.d.ts +4 -0
- package/dist/editor/locales/de.d.ts.map +1 -0
- package/dist/editor/locales/es.d.ts +4 -0
- package/dist/editor/locales/es.d.ts.map +1 -0
- package/dist/editor/locales/fr.d.ts +4 -0
- package/dist/editor/locales/fr.d.ts.map +1 -0
- package/dist/editor/locales/hi.d.ts +4 -0
- package/dist/editor/locales/hi.d.ts.map +1 -0
- package/dist/editor/locales/pt.d.ts +4 -0
- package/dist/editor/locales/pt.d.ts.map +1 -0
- package/dist/editor/locales/ru.d.ts +4 -0
- package/dist/editor/locales/ru.d.ts.map +1 -0
- package/dist/editor/locales/zh.d.ts +4 -0
- package/dist/editor/locales/zh.d.ts.map +1 -0
- package/dist/editor/styles/base.d.ts +1 -1
- package/dist/editor/styles/base.d.ts.map +1 -1
- package/dist/editor/styles/code-block.d.ts +1 -1
- package/dist/editor/styles/code-block.d.ts.map +1 -1
- package/dist/editor/styles/font-select.d.ts +1 -1
- package/dist/editor/styles/font-select.d.ts.map +1 -1
- package/dist/editor/styles/font-size-select.d.ts +1 -1
- package/dist/editor/styles/font-size-select.d.ts.map +1 -1
- package/dist/editor/styles/heading-select.d.ts +1 -1
- package/dist/editor/styles/heading-select.d.ts.map +1 -1
- package/dist/editor/styles/image.d.ts +1 -1
- package/dist/editor/styles/image.d.ts.map +1 -1
- package/dist/editor/styles/list.d.ts +1 -1
- package/dist/editor/styles/list.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.mjs +1 -6
- package/dist/fonts.mjs.map +1 -1
- package/dist/full.d.ts +45 -0
- package/dist/full.d.ts.map +1 -0
- package/dist/full.mjs +2 -0
- package/dist/full.mjs.map +1 -0
- package/dist/html.d.ts +16 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.mjs +2 -0
- package/dist/html.mjs.map +1 -0
- package/dist/i18n/Locale.d.ts +1 -0
- package/dist/i18n/Locale.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +0 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/index.d.ts +33 -100
- package/dist/index.d.ts.map +1 -1
- package/dist/input/BlockInsertion.d.ts +51 -0
- package/dist/input/BlockInsertion.d.ts.map +1 -0
- package/dist/input/ClipboardHandler.d.ts +22 -0
- package/dist/input/ClipboardHandler.d.ts.map +1 -1
- package/dist/input/CompositionTracker.d.ts +2 -1
- package/dist/input/CompositionTracker.d.ts.map +1 -1
- package/dist/{model → input}/HTMLParser.d.ts +3 -3
- package/dist/input/HTMLParser.d.ts.map +1 -0
- package/dist/input/InputHandler.d.ts +1 -1
- package/dist/input/InputHandler.d.ts.map +1 -1
- package/dist/input/InputManager.d.ts +35 -0
- package/dist/input/InputManager.d.ts.map +1 -0
- package/dist/input/InternalClipboard.d.ts +11 -1
- package/dist/input/InternalClipboard.d.ts.map +1 -1
- package/dist/input/KeyboardHandler.d.ts +12 -1
- package/dist/input/KeyboardHandler.d.ts.map +1 -1
- package/dist/input/PasteHandler.d.ts +21 -17
- package/dist/input/PasteHandler.d.ts.map +1 -1
- package/dist/model/AttrRegistry.d.ts +1 -1
- package/dist/model/AttrRegistry.d.ts.map +1 -1
- package/dist/model/BlockAlignment.d.ts +8 -0
- package/dist/model/BlockAlignment.d.ts.map +1 -0
- package/dist/model/BlockTypeLabels.d.ts +7 -0
- package/dist/model/BlockTypeLabels.d.ts.map +1 -0
- package/dist/model/CompositionState.d.ts +8 -0
- package/dist/model/CompositionState.d.ts.map +1 -0
- package/dist/model/Document.d.ts +0 -4
- package/dist/model/Document.d.ts.map +1 -1
- package/dist/{input → model}/FileHandlerRegistry.d.ts +1 -1
- package/dist/{input → model}/FileHandlerRegistry.d.ts.map +1 -1
- package/dist/model/HTMLUtils.d.ts +6 -0
- package/dist/model/HTMLUtils.d.ts.map +1 -1
- package/dist/{input → model}/InputRule.d.ts.map +1 -1
- package/dist/{input → model}/InputRuleRegistry.d.ts.map +1 -1
- package/dist/{input → model}/Keymap.d.ts.map +1 -1
- package/dist/{input → model}/KeymapRegistry.d.ts.map +1 -1
- package/dist/model/MarkSpec.d.ts +2 -2
- package/dist/model/MarkSpec.d.ts.map +1 -1
- package/dist/model/NodeSpec.d.ts +19 -5
- package/dist/model/NodeSpec.d.ts.map +1 -1
- package/dist/model/PaperSize.d.ts.map +1 -0
- package/dist/model/WordBoundary.d.ts +12 -0
- package/dist/model/WordBoundary.d.ts.map +1 -0
- package/dist/notectl-core.mjs +1 -3764
- package/dist/notectl-core.mjs.map +1 -1
- package/dist/notectl-core.umd.js +1 -9434
- package/dist/notectl-core.umd.js.map +1 -1
- package/dist/{view → platform}/Platform.d.ts +2 -0
- package/dist/platform/Platform.d.ts.map +1 -0
- package/dist/plugins/Plugin.d.ts +5 -5
- package/dist/plugins/Plugin.d.ts.map +1 -1
- package/dist/plugins/PluginManager.d.ts +3 -3
- package/dist/plugins/alignment/AlignmentLocale.d.ts +3 -10
- package/dist/plugins/alignment/AlignmentLocale.d.ts.map +1 -1
- package/dist/plugins/alignment/AlignmentPlugin.d.ts +3 -13
- package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
- package/dist/plugins/alignment/index.d.ts +3 -1
- package/dist/plugins/alignment/index.d.ts.map +1 -1
- package/dist/plugins/alignment/locales/ar.d.ts +4 -0
- package/dist/plugins/alignment/locales/ar.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/de.d.ts +4 -0
- package/dist/plugins/alignment/locales/de.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/es.d.ts +4 -0
- package/dist/plugins/alignment/locales/es.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/fr.d.ts +4 -0
- package/dist/plugins/alignment/locales/fr.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/hi.d.ts +4 -0
- package/dist/plugins/alignment/locales/hi.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/pt.d.ts +4 -0
- package/dist/plugins/alignment/locales/pt.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/ru.d.ts +4 -0
- package/dist/plugins/alignment/locales/ru.d.ts.map +1 -0
- package/dist/plugins/alignment/locales/zh.d.ts +4 -0
- package/dist/plugins/alignment/locales/zh.d.ts.map +1 -0
- package/dist/plugins/alignment.mjs +1 -5
- package/dist/plugins/alignment.mjs.map +1 -1
- package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts +4 -0
- package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts.map +1 -0
- package/dist/plugins/blockquote/BlockquoteLocale.d.ts +1 -8
- package/dist/plugins/blockquote/BlockquoteLocale.d.ts.map +1 -1
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts +1 -3
- package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
- package/dist/plugins/blockquote/BlockquoteStyles.d.ts +3 -0
- package/dist/plugins/blockquote/BlockquoteStyles.d.ts.map +1 -0
- package/dist/plugins/blockquote/index.d.ts +2 -0
- package/dist/plugins/blockquote/index.d.ts.map +1 -1
- package/dist/plugins/blockquote/locales/ar.d.ts +4 -0
- package/dist/plugins/blockquote/locales/ar.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/de.d.ts +4 -0
- package/dist/plugins/blockquote/locales/de.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/es.d.ts +4 -0
- package/dist/plugins/blockquote/locales/es.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/fr.d.ts +4 -0
- package/dist/plugins/blockquote/locales/fr.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/hi.d.ts +4 -0
- package/dist/plugins/blockquote/locales/hi.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/pt.d.ts +4 -0
- package/dist/plugins/blockquote/locales/pt.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/ru.d.ts +4 -0
- package/dist/plugins/blockquote/locales/ru.d.ts.map +1 -0
- package/dist/plugins/blockquote/locales/zh.d.ts +4 -0
- package/dist/plugins/blockquote/locales/zh.d.ts.map +1 -0
- package/dist/plugins/blockquote.mjs +1 -4
- package/dist/plugins/blockquote.mjs.map +1 -1
- package/dist/plugins/caret-navigation/CaretNavigationLocale.d.ts +21 -0
- package/dist/plugins/caret-navigation/CaretNavigationLocale.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts +2 -1
- package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts.map +1 -1
- package/dist/plugins/caret-navigation/index.d.ts +2 -0
- package/dist/plugins/caret-navigation/index.d.ts.map +1 -1
- package/dist/plugins/caret-navigation/locales/ar.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/ar.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/de.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/de.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/es.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/es.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/fr.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/fr.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/hi.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/hi.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/pt.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/pt.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/ru.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/ru.d.ts.map +1 -0
- package/dist/plugins/caret-navigation/locales/zh.d.ts +4 -0
- package/dist/plugins/caret-navigation/locales/zh.d.ts.map +1 -0
- package/dist/plugins/caret-navigation.mjs +1 -4
- package/dist/plugins/caret-navigation.mjs.map +1 -1
- package/dist/plugins/code-block/CodeBlockLocale.d.ts +5 -8
- package/dist/plugins/code-block/CodeBlockLocale.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockNodeView.d.ts +2 -1
- package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts +2 -3
- package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockService.d.ts.map +1 -1
- package/dist/plugins/code-block/CodeBlockTypes.d.ts +0 -1
- package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -1
- package/dist/plugins/code-block/index.d.ts +4 -1
- package/dist/plugins/code-block/index.d.ts.map +1 -1
- package/dist/plugins/code-block/locales/ar.d.ts +4 -0
- package/dist/plugins/code-block/locales/ar.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/de.d.ts +4 -0
- package/dist/plugins/code-block/locales/de.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/es.d.ts +4 -0
- package/dist/plugins/code-block/locales/es.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/fr.d.ts +4 -0
- package/dist/plugins/code-block/locales/fr.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/hi.d.ts +4 -0
- package/dist/plugins/code-block/locales/hi.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/pt.d.ts +4 -0
- package/dist/plugins/code-block/locales/pt.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/ru.d.ts +4 -0
- package/dist/plugins/code-block/locales/ru.d.ts.map +1 -0
- package/dist/plugins/code-block/locales/zh.d.ts +4 -0
- package/dist/plugins/code-block/locales/zh.d.ts.map +1 -0
- package/dist/plugins/code-block.mjs +1 -5
- package/dist/plugins/code-block.mjs.map +1 -1
- package/dist/plugins/font/FontLocale.d.ts +1 -8
- package/dist/plugins/font/FontLocale.d.ts.map +1 -1
- package/dist/plugins/font/FontPlugin.d.ts +1 -4
- package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
- package/dist/plugins/font/index.d.ts +2 -0
- package/dist/plugins/font/index.d.ts.map +1 -1
- package/dist/plugins/font/locales/ar.d.ts +4 -0
- package/dist/plugins/font/locales/ar.d.ts.map +1 -0
- package/dist/plugins/font/locales/de.d.ts +4 -0
- package/dist/plugins/font/locales/de.d.ts.map +1 -0
- package/dist/plugins/font/locales/es.d.ts +4 -0
- package/dist/plugins/font/locales/es.d.ts.map +1 -0
- package/dist/plugins/font/locales/fr.d.ts +4 -0
- package/dist/plugins/font/locales/fr.d.ts.map +1 -0
- package/dist/plugins/font/locales/hi.d.ts +4 -0
- package/dist/plugins/font/locales/hi.d.ts.map +1 -0
- package/dist/plugins/font/locales/pt.d.ts +4 -0
- package/dist/plugins/font/locales/pt.d.ts.map +1 -0
- package/dist/plugins/font/locales/ru.d.ts +4 -0
- package/dist/plugins/font/locales/ru.d.ts.map +1 -0
- package/dist/plugins/font/locales/zh.d.ts +4 -0
- package/dist/plugins/font/locales/zh.d.ts.map +1 -0
- package/dist/plugins/font-size/FontSizeLocale.d.ts +1 -8
- package/dist/plugins/font-size/FontSizeLocale.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePlugin.d.ts +1 -5
- package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePopup.d.ts +4 -2
- package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -1
- package/dist/plugins/font-size/index.d.ts +2 -0
- package/dist/plugins/font-size/index.d.ts.map +1 -1
- package/dist/plugins/font-size/locales/ar.d.ts +4 -0
- package/dist/plugins/font-size/locales/ar.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/de.d.ts +4 -0
- package/dist/plugins/font-size/locales/de.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/es.d.ts +4 -0
- package/dist/plugins/font-size/locales/es.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/fr.d.ts +4 -0
- package/dist/plugins/font-size/locales/fr.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/hi.d.ts +4 -0
- package/dist/plugins/font-size/locales/hi.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/pt.d.ts +4 -0
- package/dist/plugins/font-size/locales/pt.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/ru.d.ts +4 -0
- package/dist/plugins/font-size/locales/ru.d.ts.map +1 -0
- package/dist/plugins/font-size/locales/zh.d.ts +4 -0
- package/dist/plugins/font-size/locales/zh.d.ts.map +1 -0
- package/dist/plugins/font-size.mjs +1 -4
- package/dist/plugins/font-size.mjs.map +1 -1
- package/dist/plugins/font.mjs +1 -4
- package/dist/plugins/font.mjs.map +1 -1
- package/dist/plugins/gap-cursor/GapCursorLocale.d.ts +7 -0
- package/dist/plugins/gap-cursor/GapCursorLocale.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts +7 -3
- package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts.map +1 -1
- package/dist/plugins/gap-cursor/locales/ar.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/ar.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/de.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/de.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/es.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/es.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/fr.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/fr.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/hi.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/hi.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/pt.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/pt.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/ru.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/ru.d.ts.map +1 -0
- package/dist/plugins/gap-cursor/locales/zh.d.ts +4 -0
- package/dist/plugins/gap-cursor/locales/zh.d.ts.map +1 -0
- package/dist/plugins/gap-cursor.mjs +1 -64
- package/dist/plugins/gap-cursor.mjs.map +1 -1
- package/dist/plugins/hard-break.mjs +1 -4
- package/dist/plugins/hard-break.mjs.map +1 -1
- package/dist/plugins/heading/HeadingBlockTypePicker.d.ts +1 -1
- package/dist/plugins/heading/HeadingBlockTypePicker.d.ts.map +1 -1
- package/dist/plugins/heading/HeadingLocale.d.ts +1 -8
- package/dist/plugins/heading/HeadingLocale.d.ts.map +1 -1
- package/dist/plugins/heading/HeadingPlugin.d.ts +2 -4
- package/dist/plugins/heading/HeadingPlugin.d.ts.map +1 -1
- package/dist/plugins/heading/index.d.ts +3 -0
- package/dist/plugins/heading/index.d.ts.map +1 -1
- package/dist/plugins/heading/locales/ar.d.ts +4 -0
- package/dist/plugins/heading/locales/ar.d.ts.map +1 -0
- package/dist/plugins/heading/locales/de.d.ts +4 -0
- package/dist/plugins/heading/locales/de.d.ts.map +1 -0
- package/dist/plugins/heading/locales/es.d.ts +4 -0
- package/dist/plugins/heading/locales/es.d.ts.map +1 -0
- package/dist/plugins/heading/locales/fr.d.ts +4 -0
- package/dist/plugins/heading/locales/fr.d.ts.map +1 -0
- package/dist/plugins/heading/locales/hi.d.ts +4 -0
- package/dist/plugins/heading/locales/hi.d.ts.map +1 -0
- package/dist/plugins/heading/locales/pt.d.ts +4 -0
- package/dist/plugins/heading/locales/pt.d.ts.map +1 -0
- package/dist/plugins/heading/locales/ru.d.ts +4 -0
- package/dist/plugins/heading/locales/ru.d.ts.map +1 -0
- package/dist/plugins/heading/locales/zh.d.ts +4 -0
- package/dist/plugins/heading/locales/zh.d.ts.map +1 -0
- package/dist/plugins/heading.mjs +1 -4
- package/dist/plugins/heading.mjs.map +1 -1
- package/dist/plugins/highlight/HighlightLocale.d.ts +1 -8
- package/dist/plugins/highlight/HighlightLocale.d.ts.map +1 -1
- package/dist/plugins/highlight/HighlightPlugin.d.ts +1 -3
- package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
- package/dist/plugins/highlight/index.d.ts +2 -0
- package/dist/plugins/highlight/index.d.ts.map +1 -1
- package/dist/plugins/highlight/locales/ar.d.ts +4 -0
- package/dist/plugins/highlight/locales/ar.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/de.d.ts +4 -0
- package/dist/plugins/highlight/locales/de.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/es.d.ts +4 -0
- package/dist/plugins/highlight/locales/es.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/fr.d.ts +4 -0
- package/dist/plugins/highlight/locales/fr.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/hi.d.ts +4 -0
- package/dist/plugins/highlight/locales/hi.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/pt.d.ts +4 -0
- package/dist/plugins/highlight/locales/pt.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/ru.d.ts +4 -0
- package/dist/plugins/highlight/locales/ru.d.ts.map +1 -0
- package/dist/plugins/highlight/locales/zh.d.ts +4 -0
- package/dist/plugins/highlight/locales/zh.d.ts.map +1 -0
- package/dist/plugins/highlight.mjs +1 -4
- package/dist/plugins/highlight.mjs.map +1 -1
- package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts +1 -8
- package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts.map +1 -1
- package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts +1 -3
- package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
- package/dist/plugins/horizontal-rule/index.d.ts +2 -0
- package/dist/plugins/horizontal-rule/index.d.ts.map +1 -1
- package/dist/plugins/horizontal-rule/locales/ar.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/ar.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/de.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/de.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/es.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/es.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/fr.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/fr.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/hi.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/hi.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/pt.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/pt.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/ru.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/ru.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule/locales/zh.d.ts +4 -0
- package/dist/plugins/horizontal-rule/locales/zh.d.ts.map +1 -0
- package/dist/plugins/horizontal-rule.mjs +1 -4
- package/dist/plugins/horizontal-rule.mjs.map +1 -1
- package/dist/plugins/image/ImageLocale.d.ts +9 -8
- package/dist/plugins/image/ImageLocale.d.ts.map +1 -1
- package/dist/plugins/image/ImageNodeView.d.ts +8 -1
- package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
- package/dist/plugins/image/ImagePlugin.d.ts +2 -2
- package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
- package/dist/plugins/image/ImageUpload.d.ts +1 -2
- package/dist/plugins/image/ImageUpload.d.ts.map +1 -1
- package/dist/plugins/image/index.d.ts +2 -0
- package/dist/plugins/image/index.d.ts.map +1 -1
- package/dist/plugins/image/locales/ar.d.ts +4 -0
- package/dist/plugins/image/locales/ar.d.ts.map +1 -0
- package/dist/plugins/image/locales/de.d.ts +4 -0
- package/dist/plugins/image/locales/de.d.ts.map +1 -0
- package/dist/plugins/image/locales/es.d.ts +4 -0
- package/dist/plugins/image/locales/es.d.ts.map +1 -0
- package/dist/plugins/image/locales/fr.d.ts +4 -0
- package/dist/plugins/image/locales/fr.d.ts.map +1 -0
- package/dist/plugins/image/locales/hi.d.ts +4 -0
- package/dist/plugins/image/locales/hi.d.ts.map +1 -0
- package/dist/plugins/image/locales/pt.d.ts +4 -0
- package/dist/plugins/image/locales/pt.d.ts.map +1 -0
- package/dist/plugins/image/locales/ru.d.ts +4 -0
- package/dist/plugins/image/locales/ru.d.ts.map +1 -0
- package/dist/plugins/image/locales/zh.d.ts +4 -0
- package/dist/plugins/image/locales/zh.d.ts.map +1 -0
- package/dist/plugins/image.mjs +1 -6
- package/dist/plugins/image.mjs.map +1 -1
- package/dist/plugins/link/LinkLocale.d.ts +1 -8
- package/dist/plugins/link/LinkLocale.d.ts.map +1 -1
- package/dist/plugins/link/LinkPlugin.d.ts +1 -3
- package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
- package/dist/plugins/link/index.d.ts +2 -0
- package/dist/plugins/link/index.d.ts.map +1 -1
- package/dist/plugins/link/locales/ar.d.ts +4 -0
- package/dist/plugins/link/locales/ar.d.ts.map +1 -0
- package/dist/plugins/link/locales/de.d.ts +4 -0
- package/dist/plugins/link/locales/de.d.ts.map +1 -0
- package/dist/plugins/link/locales/es.d.ts +4 -0
- package/dist/plugins/link/locales/es.d.ts.map +1 -0
- package/dist/plugins/link/locales/fr.d.ts +4 -0
- package/dist/plugins/link/locales/fr.d.ts.map +1 -0
- package/dist/plugins/link/locales/hi.d.ts +4 -0
- package/dist/plugins/link/locales/hi.d.ts.map +1 -0
- package/dist/plugins/link/locales/pt.d.ts +4 -0
- package/dist/plugins/link/locales/pt.d.ts.map +1 -0
- package/dist/plugins/link/locales/ru.d.ts +4 -0
- package/dist/plugins/link/locales/ru.d.ts.map +1 -0
- package/dist/plugins/link/locales/zh.d.ts +4 -0
- package/dist/plugins/link/locales/zh.d.ts.map +1 -0
- package/dist/plugins/link.mjs +1 -4
- package/dist/plugins/link.mjs.map +1 -1
- package/dist/plugins/list/ListLocale.d.ts +1 -8
- package/dist/plugins/list/ListLocale.d.ts.map +1 -1
- package/dist/plugins/list/ListPlugin.d.ts +1 -3
- package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
- package/dist/plugins/list/index.d.ts +2 -0
- package/dist/plugins/list/index.d.ts.map +1 -1
- package/dist/plugins/list/locales/ar.d.ts +4 -0
- package/dist/plugins/list/locales/ar.d.ts.map +1 -0
- package/dist/plugins/list/locales/de.d.ts +4 -0
- package/dist/plugins/list/locales/de.d.ts.map +1 -0
- package/dist/plugins/list/locales/es.d.ts +4 -0
- package/dist/plugins/list/locales/es.d.ts.map +1 -0
- package/dist/plugins/list/locales/fr.d.ts +4 -0
- package/dist/plugins/list/locales/fr.d.ts.map +1 -0
- package/dist/plugins/list/locales/hi.d.ts +4 -0
- package/dist/plugins/list/locales/hi.d.ts.map +1 -0
- package/dist/plugins/list/locales/pt.d.ts +4 -0
- package/dist/plugins/list/locales/pt.d.ts.map +1 -0
- package/dist/plugins/list/locales/ru.d.ts +4 -0
- package/dist/plugins/list/locales/ru.d.ts.map +1 -0
- package/dist/plugins/list/locales/zh.d.ts +4 -0
- package/dist/plugins/list/locales/zh.d.ts.map +1 -0
- package/dist/plugins/list.mjs +1 -4
- package/dist/plugins/list.mjs.map +1 -1
- package/dist/plugins/print/PrintLocale.d.ts +1 -8
- package/dist/plugins/print/PrintLocale.d.ts.map +1 -1
- package/dist/plugins/print/PrintPlugin.d.ts +1 -1
- package/dist/plugins/print/PrintPlugin.d.ts.map +1 -1
- package/dist/plugins/print/PrintServiceImpl.d.ts.map +1 -1
- package/dist/plugins/print/PrintStyleCollector.d.ts.map +1 -1
- package/dist/plugins/print/PrintTypes.d.ts +1 -1
- package/dist/plugins/print/PrintTypes.d.ts.map +1 -1
- package/dist/plugins/print/index.d.ts +5 -0
- package/dist/plugins/print/index.d.ts.map +1 -0
- package/dist/plugins/print/locales/ar.d.ts +4 -0
- package/dist/plugins/print/locales/ar.d.ts.map +1 -0
- package/dist/plugins/print/locales/de.d.ts +4 -0
- package/dist/plugins/print/locales/de.d.ts.map +1 -0
- package/dist/plugins/print/locales/es.d.ts +4 -0
- package/dist/plugins/print/locales/es.d.ts.map +1 -0
- package/dist/plugins/print/locales/fr.d.ts +4 -0
- package/dist/plugins/print/locales/fr.d.ts.map +1 -0
- package/dist/plugins/print/locales/hi.d.ts +4 -0
- package/dist/plugins/print/locales/hi.d.ts.map +1 -0
- package/dist/plugins/print/locales/pt.d.ts +4 -0
- package/dist/plugins/print/locales/pt.d.ts.map +1 -0
- package/dist/plugins/print/locales/ru.d.ts +4 -0
- package/dist/plugins/print/locales/ru.d.ts.map +1 -0
- package/dist/plugins/print/locales/zh.d.ts +4 -0
- package/dist/plugins/print/locales/zh.d.ts.map +1 -0
- package/dist/plugins/print.mjs +2 -0
- package/dist/plugins/print.mjs.map +1 -0
- package/dist/plugins/shared/ColorGrid.d.ts.map +1 -1
- package/dist/plugins/shared/ColorPickerPopup.d.ts +2 -1
- package/dist/plugins/shared/ColorPickerPopup.d.ts.map +1 -1
- package/dist/plugins/shared/KeyboardNav.d.ts +17 -0
- package/dist/plugins/shared/KeyboardNav.d.ts.map +1 -0
- package/dist/plugins/shared/PluginHelpers.d.ts +10 -0
- package/dist/plugins/shared/PluginHelpers.d.ts.map +1 -0
- package/dist/plugins/shared/PopupKeyboardPatterns.d.ts +1 -1
- package/dist/plugins/shared/PopupKeyboardPatterns.d.ts.map +1 -1
- package/dist/plugins/shared/PopupManager.d.ts +14 -2
- package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
- package/dist/plugins/shared/PopupPositioning.d.ts +1 -0
- package/dist/plugins/shared/PopupPositioning.d.ts.map +1 -1
- package/dist/plugins/shared/ShortcutFormatting.d.ts +9 -0
- package/dist/plugins/shared/ShortcutFormatting.d.ts.map +1 -0
- package/dist/plugins/shared/index.d.ts +12 -0
- package/dist/plugins/shared/index.d.ts.map +1 -0
- package/dist/plugins/shared.mjs +2 -0
- package/dist/plugins/shared.mjs.map +1 -0
- package/dist/plugins/strikethrough/StrikethroughLocale.d.ts +1 -8
- package/dist/plugins/strikethrough/StrikethroughLocale.d.ts.map +1 -1
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts +1 -3
- package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
- package/dist/plugins/strikethrough/index.d.ts +2 -0
- package/dist/plugins/strikethrough/index.d.ts.map +1 -1
- package/dist/plugins/strikethrough/locales/ar.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/ar.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/de.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/de.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/es.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/es.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/fr.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/fr.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/hi.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/hi.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/pt.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/pt.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/ru.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/ru.d.ts.map +1 -0
- package/dist/plugins/strikethrough/locales/zh.d.ts +4 -0
- package/dist/plugins/strikethrough/locales/zh.d.ts.map +1 -0
- package/dist/plugins/strikethrough.mjs +1 -4
- package/dist/plugins/strikethrough.mjs.map +1 -1
- package/dist/plugins/super-sub/SuperSubLocale.d.ts +1 -8
- package/dist/plugins/super-sub/SuperSubLocale.d.ts.map +1 -1
- package/dist/plugins/super-sub/SuperSubPlugin.d.ts +1 -3
- package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
- package/dist/plugins/super-sub/index.d.ts +2 -0
- package/dist/plugins/super-sub/index.d.ts.map +1 -1
- package/dist/plugins/super-sub/locales/ar.d.ts +4 -0
- package/dist/plugins/super-sub/locales/ar.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/de.d.ts +4 -0
- package/dist/plugins/super-sub/locales/de.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/es.d.ts +4 -0
- package/dist/plugins/super-sub/locales/es.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/fr.d.ts +4 -0
- package/dist/plugins/super-sub/locales/fr.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/hi.d.ts +4 -0
- package/dist/plugins/super-sub/locales/hi.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/pt.d.ts +4 -0
- package/dist/plugins/super-sub/locales/pt.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/ru.d.ts +4 -0
- package/dist/plugins/super-sub/locales/ru.d.ts.map +1 -0
- package/dist/plugins/super-sub/locales/zh.d.ts +4 -0
- package/dist/plugins/super-sub/locales/zh.d.ts.map +1 -0
- package/dist/plugins/super-sub.mjs +1 -4
- package/dist/plugins/super-sub.mjs.map +1 -1
- package/dist/plugins/table/TableCommands.d.ts +8 -8
- package/dist/plugins/table/TableCommands.d.ts.map +1 -1
- package/dist/plugins/table/TableContextMenu.d.ts.map +1 -1
- package/dist/plugins/table/TableControlsDOM.d.ts +4 -4
- package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
- package/dist/plugins/table/TableLocale.d.ts +1 -8
- package/dist/plugins/table/TableLocale.d.ts.map +1 -1
- package/dist/plugins/table/TableNavigation.d.ts +1 -1
- package/dist/plugins/table/TableNavigation.d.ts.map +1 -1
- package/dist/plugins/table/TablePlugin.d.ts +3 -5
- package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
- package/dist/plugins/table/TableSelection.d.ts +2 -0
- package/dist/plugins/table/TableSelection.d.ts.map +1 -1
- package/dist/plugins/table/index.d.ts +0 -5
- package/dist/plugins/table/index.d.ts.map +1 -1
- package/dist/plugins/table/locales/ar.d.ts +4 -0
- package/dist/plugins/table/locales/ar.d.ts.map +1 -0
- package/dist/plugins/table/locales/de.d.ts +4 -0
- package/dist/plugins/table/locales/de.d.ts.map +1 -0
- package/dist/plugins/table/locales/es.d.ts +4 -0
- package/dist/plugins/table/locales/es.d.ts.map +1 -0
- package/dist/plugins/table/locales/fr.d.ts +4 -0
- package/dist/plugins/table/locales/fr.d.ts.map +1 -0
- package/dist/plugins/table/locales/hi.d.ts +4 -0
- package/dist/plugins/table/locales/hi.d.ts.map +1 -0
- package/dist/plugins/table/locales/pt.d.ts +4 -0
- package/dist/plugins/table/locales/pt.d.ts.map +1 -0
- package/dist/plugins/table/locales/ru.d.ts +4 -0
- package/dist/plugins/table/locales/ru.d.ts.map +1 -0
- package/dist/plugins/table/locales/zh.d.ts +4 -0
- package/dist/plugins/table/locales/zh.d.ts.map +1 -0
- package/dist/plugins/table.mjs +1 -20
- package/dist/plugins/table.mjs.map +1 -1
- package/dist/plugins/text-color/TextColorLocale.d.ts +1 -8
- package/dist/plugins/text-color/TextColorLocale.d.ts.map +1 -1
- package/dist/plugins/text-color/TextColorPlugin.d.ts +1 -3
- package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
- package/dist/plugins/text-color/index.d.ts +2 -0
- package/dist/plugins/text-color/index.d.ts.map +1 -1
- package/dist/plugins/text-color/locales/ar.d.ts +4 -0
- package/dist/plugins/text-color/locales/ar.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/de.d.ts +4 -0
- package/dist/plugins/text-color/locales/de.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/es.d.ts +4 -0
- package/dist/plugins/text-color/locales/es.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/fr.d.ts +4 -0
- package/dist/plugins/text-color/locales/fr.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/hi.d.ts +4 -0
- package/dist/plugins/text-color/locales/hi.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/pt.d.ts +4 -0
- package/dist/plugins/text-color/locales/pt.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/ru.d.ts +4 -0
- package/dist/plugins/text-color/locales/ru.d.ts.map +1 -0
- package/dist/plugins/text-color/locales/zh.d.ts +4 -0
- package/dist/plugins/text-color/locales/zh.d.ts.map +1 -0
- package/dist/plugins/text-color.mjs +1 -4
- package/dist/plugins/text-color.mjs.map +1 -1
- package/dist/plugins/text-direction/DirectionDetection.d.ts +17 -0
- package/dist/plugins/text-direction/DirectionDetection.d.ts.map +1 -0
- package/dist/plugins/text-direction/ShiftDirectionHandler.d.ts +12 -0
- package/dist/plugins/text-direction/ShiftDirectionHandler.d.ts.map +1 -0
- package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts +35 -0
- package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts.map +1 -0
- package/dist/plugins/text-direction/TextDirectionLocale.d.ts +20 -0
- package/dist/plugins/text-direction/TextDirectionLocale.d.ts.map +1 -0
- package/dist/plugins/text-direction/TextDirectionMiddleware.d.ts +18 -0
- package/dist/plugins/text-direction/TextDirectionMiddleware.d.ts.map +1 -0
- package/dist/plugins/text-direction/TextDirectionPlugin.d.ts +59 -0
- package/dist/plugins/text-direction/TextDirectionPlugin.d.ts.map +1 -0
- package/dist/plugins/text-direction/index.d.ts +5 -0
- package/dist/plugins/text-direction/index.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/ar.d.ts +4 -0
- package/dist/plugins/text-direction/locales/ar.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/de.d.ts +4 -0
- package/dist/plugins/text-direction/locales/de.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/es.d.ts +4 -0
- package/dist/plugins/text-direction/locales/es.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/fr.d.ts +4 -0
- package/dist/plugins/text-direction/locales/fr.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/hi.d.ts +4 -0
- package/dist/plugins/text-direction/locales/hi.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/pt.d.ts +4 -0
- package/dist/plugins/text-direction/locales/pt.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/ru.d.ts +4 -0
- package/dist/plugins/text-direction/locales/ru.d.ts.map +1 -0
- package/dist/plugins/text-direction/locales/zh.d.ts +4 -0
- package/dist/plugins/text-direction/locales/zh.d.ts.map +1 -0
- package/dist/plugins/text-direction-advanced/index.d.ts +5 -0
- package/dist/plugins/text-direction-advanced/index.d.ts.map +1 -0
- package/dist/plugins/text-direction-advanced.mjs +2 -0
- package/dist/plugins/text-direction-advanced.mjs.map +1 -0
- package/dist/plugins/text-direction.mjs +2 -0
- package/dist/plugins/text-direction.mjs.map +1 -0
- package/dist/plugins/text-formatting/TextFormattingLocale.d.ts +1 -8
- package/dist/plugins/text-formatting/TextFormattingLocale.d.ts.map +1 -1
- package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts +1 -3
- package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
- package/dist/plugins/text-formatting/index.d.ts +2 -0
- package/dist/plugins/text-formatting/index.d.ts.map +1 -1
- package/dist/plugins/text-formatting/locales/ar.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/ar.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/de.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/de.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/es.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/es.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/fr.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/fr.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/hi.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/hi.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/pt.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/pt.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/ru.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/ru.d.ts.map +1 -0
- package/dist/plugins/text-formatting/locales/zh.d.ts +4 -0
- package/dist/plugins/text-formatting/locales/zh.d.ts.map +1 -0
- package/dist/plugins/text-formatting.mjs +1 -4
- package/dist/plugins/text-formatting.mjs.map +1 -1
- package/dist/plugins/toolbar/ToolbarItem.d.ts +5 -20
- package/dist/plugins/toolbar/ToolbarItem.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarKeyboardNav.d.ts +5 -11
- package/dist/plugins/toolbar/ToolbarKeyboardNav.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarLocale.d.ts +2 -8
- package/dist/plugins/toolbar/ToolbarLocale.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts +2 -2
- package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarPopupController.d.ts +3 -4
- package/dist/plugins/toolbar/ToolbarPopupController.d.ts.map +1 -1
- package/dist/plugins/toolbar/ToolbarRenderers.d.ts +2 -1
- package/dist/plugins/toolbar/ToolbarRenderers.d.ts.map +1 -1
- package/dist/plugins/toolbar/index.d.ts +4 -1
- package/dist/plugins/toolbar/index.d.ts.map +1 -1
- package/dist/plugins/toolbar/locales/ar.d.ts +4 -0
- package/dist/plugins/toolbar/locales/ar.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/de.d.ts +4 -0
- package/dist/plugins/toolbar/locales/de.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/es.d.ts +4 -0
- package/dist/plugins/toolbar/locales/es.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/fr.d.ts +4 -0
- package/dist/plugins/toolbar/locales/fr.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/hi.d.ts +4 -0
- package/dist/plugins/toolbar/locales/hi.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/pt.d.ts +4 -0
- package/dist/plugins/toolbar/locales/pt.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/ru.d.ts +4 -0
- package/dist/plugins/toolbar/locales/ru.d.ts.map +1 -0
- package/dist/plugins/toolbar/locales/zh.d.ts +4 -0
- package/dist/plugins/toolbar/locales/zh.d.ts.map +1 -0
- package/dist/plugins/toolbar.mjs +1 -7
- package/dist/plugins/toolbar.mjs.map +1 -1
- package/dist/presets/FullPreset.d.ts +4 -1
- package/dist/presets/FullPreset.d.ts.map +1 -1
- package/dist/presets/MinimalPreset.d.ts +3 -0
- package/dist/presets/MinimalPreset.d.ts.map +1 -1
- package/dist/presets/PresetTypes.d.ts +3 -1
- package/dist/presets/PresetTypes.d.ts.map +1 -1
- package/dist/presets/full.d.ts +17 -0
- package/dist/presets/full.d.ts.map +1 -0
- package/dist/presets/full.mjs +2 -0
- package/dist/presets/full.mjs.map +1 -0
- package/dist/presets/minimal.d.ts +17 -0
- package/dist/presets/minimal.d.ts.map +1 -0
- package/dist/presets/minimal.mjs +2 -0
- package/dist/presets/minimal.mjs.map +1 -0
- package/dist/presets.d.ts +20 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.mjs +2 -0
- package/dist/presets.mjs.map +1 -0
- package/dist/serialization/CSSClassCollector.d.ts +36 -0
- package/dist/serialization/CSSClassCollector.d.ts.map +1 -0
- package/dist/serialization/ContentHTMLTypes.d.ts +29 -0
- package/dist/serialization/ContentHTMLTypes.d.ts.map +1 -0
- package/dist/serialization/DocumentParser.d.ts +13 -0
- package/dist/serialization/DocumentParser.d.ts.map +1 -0
- package/dist/serialization/DocumentSerializer.d.ts +15 -0
- package/dist/serialization/DocumentSerializer.d.ts.map +1 -0
- package/dist/serialization/MarkSerializer.d.ts +19 -0
- package/dist/serialization/MarkSerializer.d.ts.map +1 -0
- package/dist/serialization/index.d.ts +12 -0
- package/dist/serialization/index.d.ts.map +1 -0
- package/dist/state/BlockBoundaryMovement.d.ts +7 -0
- package/dist/state/BlockBoundaryMovement.d.ts.map +1 -0
- package/dist/{model/NavigationUtils.d.ts → state/NavigationQueries.d.ts} +3 -3
- package/dist/state/NavigationQueries.d.ts.map +1 -0
- package/dist/style/StyleRuntime.d.ts +3 -7
- package/dist/style/StyleRuntime.d.ts.map +1 -1
- package/dist/test/PluginTestUtils.d.ts +0 -2
- package/dist/test/PluginTestUtils.d.ts.map +1 -1
- package/dist/test/TestUtils.d.ts +2 -2
- package/dist/test/TestUtils.d.ts.map +1 -1
- package/dist/view/BlockRendering.d.ts +10 -0
- package/dist/view/BlockRendering.d.ts.map +1 -0
- package/dist/view/BlockWrapperManagement.d.ts +27 -0
- package/dist/view/BlockWrapperManagement.d.ts.map +1 -0
- package/dist/view/CaretNavigation.d.ts +1 -8
- package/dist/view/CaretNavigation.d.ts.map +1 -1
- package/dist/view/CursorWrapper.d.ts.map +1 -1
- package/dist/view/DecorationRendering.d.ts +17 -0
- package/dist/view/DecorationRendering.d.ts.map +1 -0
- package/dist/view/DomUtils.d.ts +4 -0
- package/dist/view/DomUtils.d.ts.map +1 -0
- package/dist/view/EditorView.d.ts +7 -10
- package/dist/view/EditorView.d.ts.map +1 -1
- package/dist/view/GapCursorNavigation.d.ts +12 -0
- package/dist/view/GapCursorNavigation.d.ts.map +1 -0
- package/dist/view/InlineRendering.d.ts +11 -0
- package/dist/view/InlineRendering.d.ts.map +1 -0
- package/dist/view/MarkRendering.d.ts +5 -0
- package/dist/view/MarkRendering.d.ts.map +1 -1
- package/dist/view/Reconciler.d.ts +2 -6
- package/dist/view/Reconciler.d.ts.map +1 -1
- package/dist/view/SelectionSync.d.ts +41 -2
- package/dist/view/SelectionSync.d.ts.map +1 -1
- package/dist/view/ViewMovementCommands.d.ts.map +1 -1
- package/package.json +208 -8
- package/dist/chunks/AttrRegistry-D9Jx_RVb.mjs +0 -16
- package/dist/chunks/AttrRegistry-D9Jx_RVb.mjs.map +0 -1
- package/dist/chunks/AttributedMarkCommands-BtLea72z.mjs +0 -80
- package/dist/chunks/CaretNavigation-7JYpIKbs.mjs +0 -311
- package/dist/chunks/CaretNavigation-7JYpIKbs.mjs.map +0 -1
- package/dist/chunks/ColorGrid-Dneqb8if.mjs +0 -81
- package/dist/chunks/ColorGrid-Dneqb8if.mjs.map +0 -1
- package/dist/chunks/ColorPickerPopup-CiCLBbe9.mjs +0 -37
- package/dist/chunks/ColorPickerPopup-CiCLBbe9.mjs.map +0 -1
- package/dist/chunks/ColorValidation-CV4f1wu6.mjs +0 -39
- package/dist/chunks/Document-Brtw2jL1.mjs +0 -190
- package/dist/chunks/Document-Brtw2jL1.mjs.map +0 -1
- package/dist/chunks/HTMLUtils-DTqQzcKR.mjs +0 -35
- package/dist/chunks/HTMLUtils-DTqQzcKR.mjs.map +0 -1
- package/dist/chunks/MarkCommands-6RUJ4L3r.mjs +0 -94
- package/dist/chunks/MarkCommands-6RUJ4L3r.mjs.map +0 -1
- package/dist/chunks/NavigationUtils-Cspt2ZrK.mjs +0 -47
- package/dist/chunks/NavigationUtils-Cspt2ZrK.mjs.map +0 -1
- package/dist/chunks/NodeResolver-C2XYkeOi.mjs +0 -81
- package/dist/chunks/NodeResolver-C2XYkeOi.mjs.map +0 -1
- package/dist/chunks/NodeSpec-NZVvcCuH.mjs +0 -8
- package/dist/chunks/NodeSpec-NZVvcCuH.mjs.map +0 -1
- package/dist/chunks/Platform-S_xqIqcM.mjs +0 -26
- package/dist/chunks/Platform-S_xqIqcM.mjs.map +0 -1
- package/dist/chunks/PopupPositioning-BTT-_pQ3.mjs +0 -32
- package/dist/chunks/PopupPositioning-BTT-_pQ3.mjs.map +0 -1
- package/dist/chunks/RangeIterator-Bh4Vl_6D.mjs +0 -16
- package/dist/chunks/Selection-BRTab5hO.mjs +0 -52
- package/dist/chunks/StyleRuntime-ChRjVQwL.mjs +0 -239
- package/dist/chunks/StyleRuntime-ChRjVQwL.mjs.map +0 -1
- package/dist/chunks/ToolbarItem-BpZggUGo.mjs +0 -8
- package/dist/chunks/ToolbarItem-BpZggUGo.mjs.map +0 -1
- package/dist/chunks/ToolbarKeyboardNav-DhpL8zNV.mjs +0 -46
- package/dist/chunks/ToolbarKeyboardNav-DhpL8zNV.mjs.map +0 -1
- package/dist/chunks/ToolbarPlugin-DpLVJ71w.mjs +0 -1031
- package/dist/chunks/ToolbarPlugin-DpLVJ71w.mjs.map +0 -1
- package/dist/chunks/TypeBrands-C09nE2qO.mjs +0 -27
- package/dist/chunks/index--n1RGpq-.mjs +0 -171
- package/dist/chunks/index--n1RGpq-.mjs.map +0 -1
- package/dist/chunks/index-4or5UzNO.mjs +0 -168
- package/dist/chunks/index-4or5UzNO.mjs.map +0 -1
- package/dist/chunks/index-ABlTDvEX.mjs +0 -101
- package/dist/chunks/index-ABlTDvEX.mjs.map +0 -1
- package/dist/chunks/index-BAke7kNL.mjs +0 -467
- package/dist/chunks/index-BAke7kNL.mjs.map +0 -1
- package/dist/chunks/index-BXtw5PNN.mjs +0 -39
- package/dist/chunks/index-BXtw5PNN.mjs.map +0 -1
- package/dist/chunks/index-BhDXjueu.mjs +0 -924
- package/dist/chunks/index-BhDXjueu.mjs.map +0 -1
- package/dist/chunks/index-BqNUfq-y.mjs +0 -228
- package/dist/chunks/index-BqNUfq-y.mjs.map +0 -1
- package/dist/chunks/index-BvqkuEY1.mjs +0 -50
- package/dist/chunks/index-BvqkuEY1.mjs.map +0 -1
- package/dist/chunks/index-C1opJocO.mjs +0 -92
- package/dist/chunks/index-C1opJocO.mjs.map +0 -1
- package/dist/chunks/index-CWltg1wK.mjs +0 -124
- package/dist/chunks/index-CWltg1wK.mjs.map +0 -1
- package/dist/chunks/index-Cd3uJLP3.mjs +0 -73
- package/dist/chunks/index-Cd3uJLP3.mjs.map +0 -1
- package/dist/chunks/index-CluzpB2b.mjs +0 -63
- package/dist/chunks/index-CluzpB2b.mjs.map +0 -1
- package/dist/chunks/index-D3NlpmT1.mjs +0 -50
- package/dist/chunks/index-D3NlpmT1.mjs.map +0 -1
- package/dist/chunks/index-D515iymW.mjs +0 -542
- package/dist/chunks/index-D515iymW.mjs.map +0 -1
- package/dist/chunks/index-Dk49P9N4.mjs +0 -62
- package/dist/chunks/index-Dk49P9N4.mjs.map +0 -1
- package/dist/chunks/index-DyzigvbZ.mjs +0 -410
- package/dist/chunks/index-DyzigvbZ.mjs.map +0 -1
- package/dist/chunks/index-ErZ5_a1o.mjs +0 -296
- package/dist/chunks/index-ErZ5_a1o.mjs.map +0 -1
- package/dist/chunks/index-fsVJLutn.mjs +0 -118
- package/dist/chunks/index-fsVJLutn.mjs.map +0 -1
- package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs +0 -34
- package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs.map +0 -1
- package/dist/editor/DocumentParser.d.ts +0 -5
- package/dist/editor/DocumentParser.d.ts.map +0 -1
- package/dist/editor/DocumentSerializer.d.ts +0 -7
- package/dist/editor/DocumentSerializer.d.ts.map +0 -1
- package/dist/editor/MarkSerializer.d.ts +0 -11
- package/dist/editor/MarkSerializer.d.ts.map +0 -1
- package/dist/editor/PaperSize.d.ts.map +0 -1
- package/dist/i18n/resolvePluginLocale.d.ts +0 -3
- package/dist/i18n/resolvePluginLocale.d.ts.map +0 -1
- package/dist/model/BuiltinSpecs.d.ts.map +0 -1
- package/dist/model/HTMLParser.d.ts.map +0 -1
- package/dist/model/NavigationUtils.d.ts.map +0 -1
- package/dist/view/Platform.d.ts.map +0 -1
- /package/dist/{input → model}/InputRule.d.ts +0 -0
- /package/dist/{input → model}/InputRuleRegistry.d.ts +0 -0
- /package/dist/{input → model}/Keymap.d.ts +0 -0
- /package/dist/{input → model}/KeymapRegistry.d.ts +0 -0
- /package/dist/{editor → model}/PaperSize.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarPlugin-DpLVJ71w.mjs","sources":["../../src/plugins/shared/PopupManager.ts","../../src/editor/styles/toolbar.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 * Central popup lifecycle manager. Handles creation, positioning,\n * click-outside closing, Escape key, focus restoration, and popup stacking\n * for submenus/nested popups.\n */\n\nimport { ServiceKey } from '../Plugin.js';\nimport { type PopupPosition, appendToRoot, positionPopup } from './PopupPositioning.js';\n\n// --- Types ---\n\nexport interface PopupConfig {\n\treadonly anchor: HTMLElement | DOMRect;\n\treadonly content: (container: HTMLElement, close: () => void) => void;\n\treadonly className?: string;\n\treadonly ariaRole?: 'menu' | 'listbox' | 'grid' | 'dialog';\n\treadonly ariaLabel?: string;\n\treadonly restoreFocusTo?: HTMLElement;\n\treadonly onClose?: () => void;\n\treadonly position?: PopupPosition;\n\treadonly parent?: PopupHandle;\n\treadonly referenceNode?: Node;\n}\n\nexport interface PopupHandle {\n\tclose(): void;\n\tgetElement(): HTMLElement;\n}\n\nexport interface PopupServiceAPI {\n\topen(config: PopupConfig): PopupHandle;\n\tclose(): void;\n\tcloseAll(): void;\n\tisOpen(): boolean;\n}\n\nexport const PopupServiceKey = new ServiceKey<PopupServiceAPI>('popup');\n\n// --- Internal Entry ---\n\ninterface PopupEntry {\n\treadonly element: HTMLElement;\n\treadonly config: PopupConfig;\n\treadonly clickOutsideHandler: (e: MouseEvent) => void;\n\treadonly parent: PopupEntry | null;\n}\n\n// --- Manager ---\n\nexport class PopupManager implements PopupServiceAPI {\n\tprivate readonly stack: PopupEntry[] = [];\n\tprivate readonly referenceNode: Node;\n\n\tconstructor(referenceNode: Node) {\n\t\tthis.referenceNode = referenceNode;\n\t}\n\n\t/** Opens a popup with the given configuration. Returns a handle for closing it. */\n\topen(config: PopupConfig): PopupHandle {\n\t\tconst popup: HTMLDivElement = document.createElement('div');\n\t\tpopup.className = config.className ? `notectl-popup ${config.className}` : 'notectl-popup';\n\n\t\tif (config.ariaRole) {\n\t\t\tpopup.setAttribute('role', config.ariaRole);\n\t\t}\n\t\tif (config.ariaLabel) {\n\t\t\tpopup.setAttribute('aria-label', config.ariaLabel);\n\t\t}\n\n\t\tconst handle: PopupHandle = {\n\t\t\tclose: () => this.closeEntry(entry),\n\t\t\tgetElement: () => popup,\n\t\t};\n\n\t\tconfig.content(popup, () => this.closeEntry(entry));\n\n\t\tconst refNode: Node = config.referenceNode ?? this.referenceNode;\n\t\tappendToRoot(popup, refNode);\n\n\t\tconst anchorRect: DOMRect =\n\t\t\tconfig.anchor instanceof HTMLElement ? config.anchor.getBoundingClientRect() : config.anchor;\n\t\tpositionPopup(popup, anchorRect, {\n\t\t\tposition: config.position ?? 'below-start',\n\t\t});\n\n\t\tconst parentEntry: PopupEntry | null = config.parent\n\t\t\t? this.findEntryByHandle(config.parent)\n\t\t\t: null;\n\n\t\tconst clickOutsideHandler = (e: MouseEvent): void => {\n\t\t\tconst path: EventTarget[] = e.composedPath();\n\t\t\tif (path.includes(popup)) return;\n\n\t\t\t// Don't close if click is inside any ancestor popup in the stack\n\t\t\tfor (const stackEntry of this.stack) {\n\t\t\t\tif (path.includes(stackEntry.element)) return;\n\t\t\t}\n\n\t\t\t// Don't close if click is on the anchor element\n\t\t\tif (config.anchor instanceof HTMLElement && path.includes(config.anchor)) return;\n\n\t\t\tthis.closeEntry(entry);\n\t\t};\n\n\t\tconst entry: PopupEntry = {\n\t\t\telement: popup,\n\t\t\tconfig,\n\t\t\tclickOutsideHandler,\n\t\t\tparent: parentEntry,\n\t\t};\n\n\t\tthis.stack.push(entry);\n\n\t\tsetTimeout(() => {\n\t\t\tdocument.addEventListener('mousedown', clickOutsideHandler);\n\t\t}, 0);\n\n\t\tthis.focusFirstItem(popup);\n\n\t\treturn handle;\n\t}\n\n\t/** Closes the topmost popup in the stack. */\n\tclose(): void {\n\t\tconst top: PopupEntry | undefined = this.stack[this.stack.length - 1];\n\t\tif (top) {\n\t\t\tthis.closeEntry(top);\n\t\t}\n\t}\n\n\t/** Closes all open popups. */\n\tcloseAll(): void {\n\t\twhile (this.stack.length > 0) {\n\t\t\tconst top: PopupEntry | undefined = this.stack[this.stack.length - 1];\n\t\t\tif (top) {\n\t\t\t\tthis.closeEntry(top);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns true if any popup is currently open. */\n\tisOpen(): boolean {\n\t\treturn this.stack.length > 0;\n\t}\n\n\t/** Cleans up all popups and event listeners. */\n\tdestroy(): void {\n\t\tthis.closeAll();\n\t}\n\n\t// --- Internal ---\n\n\tprivate closeEntry(entry: PopupEntry): void {\n\t\tconst index: number = this.stack.indexOf(entry);\n\t\tif (index === -1) return;\n\n\t\t// Close all child popups first (anything above this entry in the stack)\n\t\twhile (this.stack.length > index + 1) {\n\t\t\tconst child: PopupEntry | undefined = this.stack[this.stack.length - 1];\n\t\t\tif (child) {\n\t\t\t\tthis.removeEntry(child);\n\t\t\t}\n\t\t}\n\n\t\tthis.removeEntry(entry);\n\n\t\tif (entry.config.restoreFocusTo) {\n\t\t\tentry.config.restoreFocusTo.focus();\n\t\t}\n\t\tentry.config.onClose?.();\n\t}\n\n\tprivate removeEntry(entry: PopupEntry): void {\n\t\tconst index: number = this.stack.indexOf(entry);\n\t\tif (index === -1) return;\n\n\t\tthis.stack.splice(index, 1);\n\t\tentry.element.remove();\n\t\tdocument.removeEventListener('mousedown', entry.clickOutsideHandler);\n\t}\n\n\tprivate findEntryByHandle(handle: PopupHandle): PopupEntry | null {\n\t\tconst element: HTMLElement = handle.getElement();\n\t\treturn this.stack.find((e) => e.element === element) ?? null;\n\t}\n\n\tprivate focusFirstItem(popup: HTMLElement): void {\n\t\trequestAnimationFrame(() => {\n\t\t\tconst firstFocusable: HTMLElement | null =\n\t\t\t\tpopup.querySelector('[role=\"menuitem\"]') ??\n\t\t\t\tpopup.querySelector('[role=\"option\"]') ??\n\t\t\t\tpopup.querySelector('[role=\"gridcell\"]') ??\n\t\t\t\tpopup.querySelector('input') ??\n\t\t\t\tpopup.querySelector('button');\n\t\t\tfirstFocusable?.focus();\n\t\t});\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}\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.notectl-toolbar-btn:hover {\n\tbackground: var(--notectl-hover-bg);\n\tborder-color: var(--notectl-border);\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.notectl-toolbar-btn:disabled:hover {\n\tbackground: transparent;\n\tborder-color: transparent;\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\tposition: fixed;\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: left;\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.notectl-dropdown__item:hover,\n.notectl-dropdown__item:focus-visible {\n\tbackground: var(--notectl-hover-bg);\n}\n\n.notectl-dropdown__item:focus-visible {\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-left: auto;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n.notectl-toolbar-overflow-btn:hover {\n\tbackground: var(--notectl-hover-bg);\n\tborder-color: var(--notectl-border);\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.notectl-dropdown__item:disabled:hover {\n\tbackground: none;\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-bg);\n}\n\n.notectl-toolbar-btn[role=\"combobox\"]:hover {\n\tbackground: var(--notectl-hover-bg);\n\tborder-color: var(--notectl-fg-muted);\n}\n\n.notectl-toolbar-btn[role=\"combobox\"].notectl-toolbar-btn--active {\n\tbackground: var(--notectl-bg);\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: left;\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-bg);\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-bg);\n\tcolor: var(--notectl-fg);\n\tfont-size: 13px;\n}\n\n.notectl-link-popup__button--apply {\n\tmargin-top: 4px;\n}\n\n.notectl-link-popup__button:hover {\n\tbackground: var(--notectl-hover-bg);\n}\n\n.notectl-link-popup__button:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n`;\n","/** Locale interface and default English locale for the ToolbarPlugin. */\n\n// --- Locale Interface ---\n\nexport interface ToolbarLocale {\n\treadonly formattingOptionsAria: string;\n\treadonly moreToolsAria: string;\n}\n\n// --- Default English Locale ---\n\nexport const TOOLBAR_LOCALE_EN: ToolbarLocale = {\n\tformattingOptionsAria: 'Formatting options',\n\tmoreToolsAria: 'More tools',\n};\n\n// --- German Locale ---\n\nexport const TOOLBAR_LOCALE_DE: ToolbarLocale = {\n\tformattingOptionsAria: 'Formatierungsoptionen',\n\tmoreToolsAria: 'Weitere Werkzeuge',\n};\n\n// --- Spanish Locale ---\n\nexport const TOOLBAR_LOCALE_ES: ToolbarLocale = {\n\tformattingOptionsAria: 'Opciones de formato',\n\tmoreToolsAria: 'Más herramientas',\n};\n\n// --- French Locale ---\n\nexport const TOOLBAR_LOCALE_FR: ToolbarLocale = {\n\tformattingOptionsAria: 'Options de mise en forme',\n\tmoreToolsAria: \"Plus d'outils\",\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const TOOLBAR_LOCALE_ZH: ToolbarLocale = {\n\tformattingOptionsAria: '格式选项',\n\tmoreToolsAria: '更多工具',\n};\n\n// --- Russian Locale ---\n\nexport const TOOLBAR_LOCALE_RU: ToolbarLocale = {\n\tformattingOptionsAria: 'Параметры форматирования',\n\tmoreToolsAria: 'Другие инструменты',\n};\n\n// --- Arabic Locale ---\n\nexport const TOOLBAR_LOCALE_AR: ToolbarLocale = {\n\tformattingOptionsAria: 'خيارات التنسيق',\n\tmoreToolsAria: 'أدوات إضافية',\n};\n\n// --- Hindi Locale ---\n\nexport const TOOLBAR_LOCALE_HI: ToolbarLocale = {\n\tformattingOptionsAria: 'फ़ॉर्मेटिंग विकल्प',\n\tmoreToolsAria: 'और उपकरण',\n};\n\n// --- Locale Map ---\n\nexport const TOOLBAR_LOCALES: Record<string, ToolbarLocale> = {\n\ten: TOOLBAR_LOCALE_EN,\n\tde: TOOLBAR_LOCALE_DE,\n\tes: TOOLBAR_LOCALE_ES,\n\tfr: TOOLBAR_LOCALE_FR,\n\tzh: TOOLBAR_LOCALE_ZH,\n\tru: TOOLBAR_LOCALE_RU,\n\tar: TOOLBAR_LOCALE_AR,\n\thi: TOOLBAR_LOCALE_HI,\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 type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport { appendToRoot } from '../shared/PopupPositioning.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport { findNextDropdownItem } from './ToolbarKeyboardNav.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\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}\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 rightEdge: number = window.innerWidth - rect.right;\n\n\t\tsetStyleProperties(dropdown, {\n\t\t\tposition: 'fixed',\n\t\t\ttop: `${rect.bottom + 2}px`,\n\t\t\tright: `${rightEdge}px`,\n\t\t\tleft: 'auto',\n\t\t\tzIndex: '10000',\n\t\t});\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\tsetTimeout(() => {\n\t\t\tif (this.closeHandler) {\n\t\t\t\tdocument.addEventListener('mousedown', this.closeHandler);\n\t\t\t}\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\tdocument.removeEventListener('mousedown', this.closeHandler);\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';\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): 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 = '1 x 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', `${r} x ${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 = `${r} x ${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\tconfig.onSelect(r, c);\n\t\t\t\tonClose();\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\texecuteCommand(item.command);\n\t\t\tonClose();\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 { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport { findNextDropdownItem, navigateGrid } from './ToolbarKeyboardNav.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 popupManager: PopupManager | null = null;\n\n\tconstructor(getActiveElement: () => Element | null) {\n\t\tthis.getActiveElement = getActiveElement;\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\tif (this.popupManager) {\n\t\t\tthis.openViaManager(button, item, context);\n\t\t} else {\n\t\t\tthis.openLegacy(button, item, context);\n\t\t}\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: () => 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// --- Legacy path (no PopupManager available) ---\n\n\tprivate openLegacy(button: HTMLButtonElement, item: ToolbarItem, context: PluginContext): void {\n\t\tconst popup: HTMLDivElement = document.createElement('div');\n\t\tpopup.className = 'notectl-toolbar-popup';\n\n\t\tthis.renderPopupContent(popup, item, context, () => this.close());\n\n\t\tthis.positionAndAppend(popup, button);\n\n\t\tthis.activePopup = popup;\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.focusFirstItem(popup);\n\n\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handlePopupKeydown(e));\n\n\t\tconst closePopupHandler = (e: MouseEvent): void => {\n\t\t\tconst path: EventTarget[] = e.composedPath();\n\t\t\tif (!path.includes(popup) && !path.includes(button)) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t};\n\t\tsetTimeout(() => {\n\t\t\tdocument.addEventListener('mousedown', closePopupHandler);\n\t\t}, 0);\n\n\t\t// Store handler for cleanup in close\n\t\tpopup.dataset.legacyClose = 'true';\n\t\tconst origClose = this.close.bind(this);\n\t\tthis.close = () => {\n\t\t\tdocument.removeEventListener('mousedown', closePopupHandler);\n\t\t\tthis.close = origClose;\n\t\t\torigClose();\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: () => void,\n\t): void {\n\t\tswitch (item.popupType) {\n\t\t\tcase 'gridPicker':\n\t\t\t\trenderGridPicker(popup, item.popupConfig, close);\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\tclose,\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// --- Legacy Positioning ---\n\n\tprivate positionAndAppend(popup: HTMLElement, button: HTMLButtonElement): void {\n\t\tconst rect: DOMRect = button.getBoundingClientRect();\n\t\tsetStyleProperties(popup, {\n\t\t\tposition: 'fixed',\n\t\t\ttop: `${rect.bottom + 2}px`,\n\t\t\tleft: `${rect.left}px`,\n\t\t\tzIndex: '10000',\n\t\t});\n\n\t\tconst root: Node = button.getRootNode();\n\t\tif (root instanceof ShadowRoot) {\n\t\t\troot.appendChild(popup);\n\t\t} else {\n\t\t\tdocument.body.appendChild(popup);\n\t\t}\n\t}\n\n\t// --- Focus ---\n\n\tprivate focusFirstItem(popup: HTMLElement): void {\n\t\trequestAnimationFrame(() => {\n\t\t\tconst firstItem: HTMLElement | null =\n\t\t\t\tpopup.querySelector('[role=\"menuitem\"]') ??\n\t\t\t\tpopup.querySelector('.notectl-grid-picker__cell') ??\n\t\t\t\tpopup.querySelector('button');\n\t\t\tfirstItem?.focus();\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);\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 = `${newRow} x ${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';\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\tsetStyleProperties(this.element, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: `${rect.bottom + 6}px`,\n\t\t\t\tleft: `${rect.left + rect.width / 2}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 { resolvePluginLocale } from '../../i18n/resolvePluginLocale.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 { PopupManager, PopupServiceKey } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport {\n\tapplyRovingTabindex,\n\tfindFirstEnabled,\n\tfindLastEnabled,\n\tfindNextEnabled,\n} from './ToolbarKeyboardNav.js';\nimport { TOOLBAR_LOCALES, type ToolbarLocale } 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\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(TOOLBAR_LOCALES, context);\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());\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.renderItemsByPriority();\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\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextEnabled(elements, this.focusedIndex, 1);\n\t\t\t\tthis.setRovingFocus(next);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowLeft': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextEnabled(elements, this.focusedIndex, -1);\n\t\t\t\tthis.setRovingFocus(prev);\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\titems.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\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 renderItemsByPriority(): 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 sorted: ToolbarItem[] = [...items].sort(\n\t\t\t(a, b) => (a.priority ?? 100) - (b.priority ?? 100),\n\t\t);\n\n\t\tconst hasSeparatorAfter: boolean = sorted.some((item) => item.separatorAfter);\n\n\t\tif (hasSeparatorAfter) {\n\t\t\tfor (let i = 0; i < sorted.length; i++) {\n\t\t\t\tconst item: ToolbarItem | undefined = sorted[i];\n\t\t\t\tif (!item) continue;\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\n\t\t\t\tif (item.separatorAfter && i < sorted.length - 1) {\n\t\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst groups = new Map<string, ToolbarItem[]>();\n\t\t\tfor (const item of sorted) {\n\t\t\t\tconst list: ToolbarItem[] = groups.get(item.group) ?? [];\n\t\t\t\tlist.push(item);\n\t\t\t\tgroups.set(item.group, list);\n\t\t\t}\n\n\t\t\tlet firstGroup = true;\n\t\t\tfor (const [, groupItems] of groups) {\n\t\t\t\tif (!firstGroup) {\n\t\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t\t}\n\t\t\t\tfirstGroup = false;\n\n\t\t\t\tfor (const item of groupItems) {\n\t\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\t\tthis.buttons.push(btn);\n\t\t\t\t}\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}\n\t\tthis.overflowController?.updateItemStates(state);\n\t}\n}\n"],"names":["PopupServiceKey","ServiceKey","PopupManager","stack","referenceNode","this","config","popup","document","createElement","className","ariaRole","setAttribute","ariaLabel","handle","close","closeEntry","entry","getElement","content","refNode","appendToRoot","anchorRect","anchor","HTMLElement","getBoundingClientRect","positionPopup","position","parentEntry","parent","findEntryByHandle","clickOutsideHandler","e","path","composedPath","includes","stackEntry","element","push","setTimeout","addEventListener","focusFirstItem","top","length","closeAll","isOpen","destroy","index","indexOf","child","removeEntry","restoreFocusTo","focus","onClose","splice","remove","removeEventListener","find","requestAnimationFrame","firstFocusable","querySelector","TOOLBAR_LOCALE_EN","formattingOptionsAria","moreToolsAria","TOOLBAR_LOCALES","en","de","es","fr","zh","ru","ar","hi","ToolbarOverflowBehavior","BurgerMenu","Flow","None","HIDDEN_BTN_CLASS","HIDDEN_SEP_CLASS","ToolbarOverflowController","toolbar","context","onOverflowChange","onItemActivated","getActiveElement","popupManager","entries","overflowButton","overflowDropdown","overflowHandle","overflowEntries","resizeObserver","closeHandler","ResizeObserver","recalculate","observe","buttons","map","b","item","closeDropdown","resetVisibility","ensureOverflowButton","setOverflowButtonVisible","availableWidth","measureAvailableWidth","children","Array","from","childWidths","measureChildWidths","maxWidth","usedWidth","overflowing","overflowList","classList","contains","add","sepWidth","get","oe","btnWidth","hideTrailingSeparators","notifyChange","state","menuItems","querySelectorAll","menuItem","itemId","getAttribute","id","active","isActive","enabled","isEnabled","toggle","disabled","popupType","labelEl","textContent","getLabel","disconnect","widths","Map","set","offsetWidth","toolbarStyle","getComputedStyle","paddingLeft","Number","parseFloat","paddingRight","clientWidth","separators","sep","visible","removeAttribute","btn","type","innerHTML","preventDefault","toggleDropdown","appendChild","openDropdown","dropdown","renderDropdownItems","getState","open","handleDropdownKeydown","positionDropdown","first","registerCloseHandler","lastGroup","group","menuBtn","iconSpan","icon","labelSpan","tooltip","label","ev","stopPropagation","activateOverflowItem","rect","rightEdge","window","innerWidth","right","setStyleProperties","bottom","left","zIndex","executeCommand","command","key","items","current","next","findNextDropdownItem","prev","focusedItem","i","filter","highlightCells","grid","targetRow","targetCol","cells","cell","r","c","createSeparator","ToolbarPopupController","activePopup","activePopupButton","activeHandle","manager","button","openViaManager","openLegacy","clearButtonState","closeAndRestoreFocus","triggerBtn","renderPopupContent","handlePopupKeydown","positionAndAppend","closePopupHandler","dataset","legacyClose","origClose","bind","container","display","gridTemplateColumns","maxCols","gap","padding","textAlign","fontSize","maxRows","width","height","border","cursor","String","onSelect","popupConfig","cmd","renderPopup","root","getRootNode","ShadowRoot","body","firstItem","handleGridKeydown","handleCustomPopupKeydown","itemArr","focused","click","row","col","lastCell","newRow","newCol","navigateGrid","target","currentIdx","dispatchEvent","MouseEvent","bubbles","cancelable","ToolbarTooltip","timer","isPopupActive","static","TOOLTIP_ID","setStyleProperty","hide","text","parentNode","transform","clearTimeout","ToolbarServiceKey","ToolbarPlugin","name","priority","toolbarElement","hiddenItems","Set","layoutConfig","overflowBehavior","focusedIndex","popupController","overflowController","visibleElements","locale","overflow","resolvePluginLocale","registerStyleSheet","getContainer","registerService","setPopupManager","refresh","updateButtonStates","closePopup","createToolbarElement","getOverflowBehavior","behavior","applyOverflowBehavior","renderItems","onReady","_oldState","newState","_tr","readonly","hidden","value","Object","delete","getPluginContainer","handleToolbarKeydown","visibleButtons","overflowBtn","initRovingTabindex","activateButton","renderItemsByLayout","renderItemsByPriority","parentElement","update","getTabElements","elements","findFirstEnabled","applyRovingTabindex","activeElement","syncFocusedIndex","idx","findIndex","el","findNextEnabled","setRovingFocus","last","findLastEnabled","toolbarReg","getToolbarRegistry","firstGroup","groupPluginIds","groups","groupItems","pId","getToolbarItemsByPlugin","has","sort","a","createButton","getToolbarItems","sorted","some","separatorAfter","list","comboLabelEl","arrowSpan","span","show","updateItemStates"],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
function n(n2) {
|
|
2
|
-
return n2;
|
|
3
|
-
}
|
|
4
|
-
function r(n2) {
|
|
5
|
-
return n2;
|
|
6
|
-
}
|
|
7
|
-
function t(n2) {
|
|
8
|
-
return n2;
|
|
9
|
-
}
|
|
10
|
-
function u(n2) {
|
|
11
|
-
return n2;
|
|
12
|
-
}
|
|
13
|
-
function c(n2) {
|
|
14
|
-
return n2;
|
|
15
|
-
}
|
|
16
|
-
function e(n2) {
|
|
17
|
-
return n2;
|
|
18
|
-
}
|
|
19
|
-
export {
|
|
20
|
-
n as b,
|
|
21
|
-
c,
|
|
22
|
-
e as i,
|
|
23
|
-
t as m,
|
|
24
|
-
r as n,
|
|
25
|
-
u as p
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=TypeBrands-C09nE2qO.mjs.map
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { r as e } from "./resolvePluginLocale-B4w1OkPy.mjs";
|
|
2
|
-
import { c as t } from "./NodeSpec-NZVvcCuH.mjs";
|
|
3
|
-
import { i as n, a as i, b as o, d as a } from "./Selection-BRTab5hO.mjs";
|
|
4
|
-
import { s as r } from "./StyleRuntime-ChRjVQwL.mjs";
|
|
5
|
-
import { a as c } from "./ToolbarPlugin-DpLVJ71w.mjs";
|
|
6
|
-
import { c as l, a as s, i as g, m as d, u as h } from "./Document-Brtw2jL1.mjs";
|
|
7
|
-
import { n as p } from "./TypeBrands-C09nE2qO.mjs";
|
|
8
|
-
function u(e2, t2, n2, i2) {
|
|
9
|
-
const o2 = document.createElement("button");
|
|
10
|
-
o2.type = "button", o2.className = "notectl-heading-picker__item", o2.setAttribute("role", "option"), o2.setAttribute("aria-selected", String(t2)), t2 && o2.classList.add("notectl-heading-picker__item--active");
|
|
11
|
-
const a2 = document.createElement("span");
|
|
12
|
-
a2.className = "notectl-heading-picker__check", a2.textContent = t2 ? "✓" : "", o2.appendChild(a2);
|
|
13
|
-
const c2 = document.createElement("span");
|
|
14
|
-
return c2.className = "notectl-heading-picker__label", c2.textContent = e2, i2 && r(c2, { fontSize: i2.fontSize, fontWeight: i2.fontWeight }), o2.appendChild(c2), o2.addEventListener("mousedown", n2), o2;
|
|
15
|
-
}
|
|
16
|
-
function b(e2, t2) {
|
|
17
|
-
return e2[`heading${t2}`];
|
|
18
|
-
}
|
|
19
|
-
function f(e2, t2) {
|
|
20
|
-
const o2 = e2.getState();
|
|
21
|
-
if (n(o2.selection) || i(o2.selection)) return false;
|
|
22
|
-
const a2 = o2.getBlock(o2.selection.anchor.blockId);
|
|
23
|
-
return !!a2 && (a2.type === t2 ? m(e2, p("paragraph")) : m(e2, p(t2)));
|
|
24
|
-
}
|
|
25
|
-
function k(e2, t2) {
|
|
26
|
-
const o2 = e2.getState(), a2 = o2.selection;
|
|
27
|
-
if (n(a2) || i(a2)) return false;
|
|
28
|
-
const r2 = o2.getBlock(a2.anchor.blockId);
|
|
29
|
-
return !!r2 && ("heading" === r2.type && r2.attrs?.level === t2 ? m(e2, p("paragraph")) : m(e2, p("heading"), { level: t2 }));
|
|
30
|
-
}
|
|
31
|
-
function m(e2, t2, o2) {
|
|
32
|
-
const a2 = e2.getState(), r2 = a2.selection;
|
|
33
|
-
if (n(r2) || i(r2)) return false;
|
|
34
|
-
const c2 = a2.getBlock(r2.anchor.blockId);
|
|
35
|
-
if (!c2) return false;
|
|
36
|
-
const d2 = a2.transaction("command"), h2 = e2.getSchemaRegistry().getNodeSpec(t2);
|
|
37
|
-
h2?.excludeMarks && h2.excludeMarks.length > 0 && ((function(e3, t3, n2) {
|
|
38
|
-
if (0 === l(t3)) return;
|
|
39
|
-
const i2 = new Set(n2), o3 = s(t3);
|
|
40
|
-
let a3 = 0;
|
|
41
|
-
for (const n3 of o3) if (g(n3)) {
|
|
42
|
-
if (n3.text.length > 0) for (const o4 of n3.marks) i2.has(o4.type) && e3.removeMark(t3.id, a3, a3 + n3.text.length, o4);
|
|
43
|
-
a3 += n3.text.length;
|
|
44
|
-
} else a3 += 1;
|
|
45
|
-
})(d2, c2, h2.excludeMarks), (function(e3, t3, n2) {
|
|
46
|
-
if (!t3.storedMarks) return;
|
|
47
|
-
const i2 = new Set(n2), o3 = t3.storedMarks.filter((e4) => !i2.has(e4.type));
|
|
48
|
-
o3.length !== t3.storedMarks.length && e3.setStoredMarks(o3.length > 0 ? o3 : null, t3.storedMarks);
|
|
49
|
-
})(d2, a2, h2.excludeMarks));
|
|
50
|
-
const p2 = d2.setBlockType(r2.anchor.blockId, t2, o2).setSelection(r2).build();
|
|
51
|
-
return e2.dispatch(p2), true;
|
|
52
|
-
}
|
|
53
|
-
const y = /* @__PURE__ */ new Set(["heading", "title", "subtitle"]);
|
|
54
|
-
const T = { paragraph: "Paragraph", title: "Title", subtitle: "Subtitle", heading1: "Heading 1", heading2: "Heading 2", heading3: "Heading 3", heading4: "Heading 4", heading5: "Heading 5", heading6: "Heading 6", blockTypeLabel: "Block Type", blockTypesAria: "Block types" }, v = { en: T, de: { paragraph: "Absatz", title: "Titel", subtitle: "Untertitel", heading1: "Überschrift 1", heading2: "Überschrift 2", heading3: "Überschrift 3", heading4: "Überschrift 4", heading5: "Überschrift 5", heading6: "Überschrift 6", blockTypeLabel: "Blocktyp", blockTypesAria: "Blocktypen" }, es: { paragraph: "Párrafo", title: "Título", subtitle: "Subtítulo", heading1: "Encabezado 1", heading2: "Encabezado 2", heading3: "Encabezado 3", heading4: "Encabezado 4", heading5: "Encabezado 5", heading6: "Encabezado 6", blockTypeLabel: "Tipo de bloque", blockTypesAria: "Tipos de bloque" }, fr: { paragraph: "Paragraphe", title: "Titre", subtitle: "Sous-titre", heading1: "Titre 1", heading2: "Titre 2", heading3: "Titre 3", heading4: "Titre 4", heading5: "Titre 5", heading6: "Titre 6", blockTypeLabel: "Type de bloc", blockTypesAria: "Types de bloc" }, zh: { paragraph: "正文", title: "标题", subtitle: "副标题", heading1: "一级标题", heading2: "二级标题", heading3: "三级标题", heading4: "四级标题", heading5: "五级标题", heading6: "六级标题", blockTypeLabel: "块类型", blockTypesAria: "块类型列表" }, ru: { paragraph: "Абзац", title: "Заголовок", subtitle: "Подзаголовок", heading1: "Заголовок 1", heading2: "Заголовок 2", heading3: "Заголовок 3", heading4: "Заголовок 4", heading5: "Заголовок 5", heading6: "Заголовок 6", blockTypeLabel: "Тип блока", blockTypesAria: "Типы блоков" }, ar: { paragraph: "فقرة", title: "عنوان", subtitle: "عنوان فرعي", heading1: "عنوان 1", heading2: "عنوان 2", heading3: "عنوان 3", heading4: "عنوان 4", heading5: "عنوان 5", heading6: "عنوان 6", blockTypeLabel: "نوع الكتلة", blockTypesAria: "أنواع الكتل" }, hi: { paragraph: "अनुच्छेद", title: "शीर्षक", subtitle: "उपशीर्षक", heading1: "शीर्षक 1", heading2: "शीर्षक 2", heading3: "शीर्षक 3", heading4: "शीर्षक 4", heading5: "शीर्षक 5", heading6: "शीर्षक 6", blockTypeLabel: "ब्लॉक प्रकार", blockTypesAria: "ब्लॉक प्रकार सूची" } }, S = { levels: [1, 2, 3, 4, 5, 6] }, x = { 1: "h1", 2: "h2", 3: "h3", 4: "h4", 5: "h5", 6: "h6" };
|
|
55
|
-
class A {
|
|
56
|
-
id = "heading";
|
|
57
|
-
name = "Heading";
|
|
58
|
-
priority = 30;
|
|
59
|
-
config;
|
|
60
|
-
locale;
|
|
61
|
-
constructor(e2) {
|
|
62
|
-
this.config = { ...S, ...e2 };
|
|
63
|
-
}
|
|
64
|
-
init(t2) {
|
|
65
|
-
this.locale = e(v, t2, this.config.locale), t2.registerStyleSheet("\n/* Heading Select — Width overrides for combobox button */\n.notectl-toolbar-btn--heading {\n min-width: 100px;\n max-width: 160px;\n}\n\n/* Heading Picker Popup */\n.notectl-heading-picker {\n min-width: 200px;\n max-height: 320px;\n overflow-y: auto;\n}\n\n.notectl-heading-picker__list {\n padding: 4px 0;\n}\n\n.notectl-heading-picker__item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 14px;\n color: var(--notectl-fg);\n text-align: left;\n white-space: nowrap;\n font-family: inherit;\n transition: background 0.1s;\n}\n\n.notectl-heading-picker__item:hover {\n background: var(--notectl-hover-bg);\n}\n\n.notectl-heading-picker__item--active {\n background: var(--notectl-active-bg);\n color: var(--notectl-primary-fg);\n}\n\n.notectl-heading-picker__item--active:hover {\n background: var(--notectl-active-bg);\n}\n\n.notectl-heading-picker__check {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n flex-shrink: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--notectl-primary-fg);\n}\n\n.notectl-heading-picker__label {\n flex: 1;\n}\n"), this.registerNodeSpecs(t2), (function(e2, t3) {
|
|
66
|
-
e2.registerCommand("setTitle", () => f(e2, "title")), e2.registerCommand("setSubtitle", () => f(e2, "subtitle"));
|
|
67
|
-
for (const n2 of t3.levels) e2.registerCommand(`setHeading${n2}`, () => k(e2, n2));
|
|
68
|
-
e2.registerCommand("toggleHeading", () => k(e2, 1)), e2.registerCommand("setParagraph", () => m(e2, p("paragraph")));
|
|
69
|
-
})(t2, this.config), (function(e2, t3) {
|
|
70
|
-
const r2 = { Enter: () => (function(e3) {
|
|
71
|
-
return (function(e4, t4) {
|
|
72
|
-
const a2 = e4.getState();
|
|
73
|
-
if (n(a2.selection) || i(a2.selection)) return false;
|
|
74
|
-
const r3 = a2.selection;
|
|
75
|
-
if (!o(r3)) return false;
|
|
76
|
-
const c2 = a2.getBlock(r3.anchor.blockId);
|
|
77
|
-
return !(!c2 || !y.has(c2.type)) && t4({ state: a2, block: c2, blockId: r3.anchor.blockId, offset: r3.anchor.offset });
|
|
78
|
-
})(e3, (t4) => {
|
|
79
|
-
if ("" === d(t4.block)) {
|
|
80
|
-
const n3 = t4.state.transaction("input").setBlockType(t4.blockId, p("paragraph")).setSelection(t4.state.selection).build();
|
|
81
|
-
return e3.dispatch(n3), true;
|
|
82
|
-
}
|
|
83
|
-
const n2 = l(t4.block);
|
|
84
|
-
if (t4.offset >= n2) {
|
|
85
|
-
const n3 = h(), i2 = t4.state.transaction("input").splitBlock(t4.blockId, t4.offset, n3).setBlockType(n3, p("paragraph")).setSelection(a(n3, 0)).build();
|
|
86
|
-
return e3.dispatch(i2), true;
|
|
87
|
-
}
|
|
88
|
-
return false;
|
|
89
|
-
});
|
|
90
|
-
})(e2) };
|
|
91
|
-
for (const n2 of t3.levels) n2 <= 6 && (r2[`Mod-Shift-${n2}`] = () => e2.executeCommand(`setHeading${n2}`));
|
|
92
|
-
e2.registerKeymap(r2);
|
|
93
|
-
})(t2, this.config), (function(e2, t3) {
|
|
94
|
-
for (const r2 of t3.levels) {
|
|
95
|
-
const t4 = "#".repeat(r2), c2 = new RegExp(`^${t4} $`);
|
|
96
|
-
e2.registerInputRule({ pattern: c2, handler(e3, t5, c3, l2) {
|
|
97
|
-
const s2 = e3.selection;
|
|
98
|
-
if (n(s2) || i(s2)) return null;
|
|
99
|
-
if (!o(s2)) return null;
|
|
100
|
-
const g2 = e3.getBlock(s2.anchor.blockId);
|
|
101
|
-
return g2 && "paragraph" === g2.type ? e3.transaction("input").deleteTextAt(s2.anchor.blockId, c3, c3 + r2 + 1).setBlockType(s2.anchor.blockId, p("heading"), { level: r2 }).setSelection(a(s2.anchor.blockId, 0)).build() : null;
|
|
102
|
-
} });
|
|
103
|
-
}
|
|
104
|
-
})(t2, this.config), (function(e2, t3, o2) {
|
|
105
|
-
e2.registerBlockTypePickerEntry({ id: "paragraph", label: o2.paragraph, command: "setParagraph", priority: 10, isActive: (e3) => {
|
|
106
|
-
if (n(e3.selection) || i(e3.selection)) return false;
|
|
107
|
-
const t4 = e3.getBlock(e3.selection.anchor.blockId);
|
|
108
|
-
return "paragraph" === t4?.type;
|
|
109
|
-
} }), e2.registerBlockTypePickerEntry({ id: "title", label: o2.title, command: "setTitle", priority: 20, style: { fontSize: "1.6em", fontWeight: "700" }, isActive: (e3) => {
|
|
110
|
-
if (n(e3.selection) || i(e3.selection)) return false;
|
|
111
|
-
const t4 = e3.getBlock(e3.selection.anchor.blockId);
|
|
112
|
-
return "title" === t4?.type;
|
|
113
|
-
} }), e2.registerBlockTypePickerEntry({ id: "subtitle", label: o2.subtitle, command: "setSubtitle", priority: 30, style: { fontSize: "1.3em", fontWeight: "500" }, isActive: (e3) => {
|
|
114
|
-
if (n(e3.selection) || i(e3.selection)) return false;
|
|
115
|
-
const t4 = e3.getBlock(e3.selection.anchor.blockId);
|
|
116
|
-
return "subtitle" === t4?.type;
|
|
117
|
-
} });
|
|
118
|
-
for (const a2 of t3.levels) e2.registerBlockTypePickerEntry({ id: `heading-${a2}`, label: b(o2, a2), command: `setHeading${a2}`, priority: 100 + a2, style: { fontSize: 1.4 - 0.1 * a2 + "em", fontWeight: "600" }, isActive: (e3) => {
|
|
119
|
-
if (n(e3.selection) || i(e3.selection)) return false;
|
|
120
|
-
const t4 = e3.getBlock(e3.selection.anchor.blockId);
|
|
121
|
-
return "heading" === t4?.type && t4.attrs?.level === a2;
|
|
122
|
-
} });
|
|
123
|
-
})(t2, this.config, this.locale), (function(e2, t3, o2) {
|
|
124
|
-
e2.registerToolbarItem({ id: "heading", group: "block", label: o2.blockTypeLabel, tooltip: o2.blockTypeLabel, command: "setParagraph", priority: 50, popupType: "combobox", separatorAfter: t3.separatorAfter, getLabel: (t4) => (function(e3, t5, o3) {
|
|
125
|
-
if (n(e3.selection) || i(e3.selection)) return o3.paragraph;
|
|
126
|
-
const a2 = t5.getBlockTypePickerRegistry().getBlockTypePickerEntries();
|
|
127
|
-
for (const t6 of a2) if (t6.isActive(e3)) return t6.label;
|
|
128
|
-
return o3.paragraph;
|
|
129
|
-
})(t4, e2, o2), renderPopup: (e3, t4) => {
|
|
130
|
-
!(function(e4, t5, o3) {
|
|
131
|
-
e4.classList.add("notectl-heading-picker");
|
|
132
|
-
const a2 = t5.getState();
|
|
133
|
-
if (n(a2.selection) || i(a2.selection)) return;
|
|
134
|
-
const r2 = document.createElement("div");
|
|
135
|
-
r2.className = "notectl-heading-picker__list", r2.setAttribute("role", "listbox"), r2.setAttribute("aria-label", o3.blockTypesAria);
|
|
136
|
-
const l2 = t5.getBlockTypePickerRegistry().getBlockTypePickerEntries();
|
|
137
|
-
for (const e5 of l2) {
|
|
138
|
-
const n2 = e5.isActive(a2);
|
|
139
|
-
r2.appendChild(u(e5.label, n2, (n3) => {
|
|
140
|
-
n3.preventDefault(), n3.stopPropagation(), t5.executeCommand(e5.command);
|
|
141
|
-
const i2 = t5.getService(c);
|
|
142
|
-
i2?.closePopup();
|
|
143
|
-
}, e5.style));
|
|
144
|
-
}
|
|
145
|
-
e4.appendChild(r2);
|
|
146
|
-
})(e3, t4, o2);
|
|
147
|
-
}, isActive: (t4) => e2.getBlockTypePickerRegistry().getBlockTypePickerEntries().some((e3) => "paragraph" !== e3.id && e3.isActive(t4)) });
|
|
148
|
-
})(t2, this.config, this.locale);
|
|
149
|
-
}
|
|
150
|
-
registerNodeSpecs(e2) {
|
|
151
|
-
e2.registerNodeSpec({ type: "title", group: "block", content: { allow: ["text"] }, excludeMarks: ["fontSize"], toDOM(e3) {
|
|
152
|
-
const n2 = t("h1", e3.id);
|
|
153
|
-
return n2.classList.add("notectl-title"), n2;
|
|
154
|
-
}, toHTML: (e3, t2) => `<h1>${t2 || "<br>"}</h1>`, sanitize: { tags: ["h1"] } }), e2.registerNodeSpec({ type: "subtitle", group: "block", content: { allow: ["text"] }, excludeMarks: ["fontSize"], toDOM(e3) {
|
|
155
|
-
const n2 = t("h2", e3.id);
|
|
156
|
-
return n2.classList.add("notectl-subtitle"), n2;
|
|
157
|
-
}, toHTML: (e3, t2) => `<h2>${t2 || "<br>"}</h2>`, sanitize: { tags: ["h2"] } }), e2.registerNodeSpec({ type: "heading", group: "block", content: { allow: ["text"] }, excludeMarks: ["fontSize"], attrs: { level: { default: 1 } }, toDOM(e3) {
|
|
158
|
-
const n2 = e3.attrs?.level ?? 1;
|
|
159
|
-
return t(x[n2] ?? "h1", e3.id);
|
|
160
|
-
}, toHTML(e3, t2) {
|
|
161
|
-
const n2 = e3.attrs?.level ?? 1, i2 = x[n2] ?? "h1";
|
|
162
|
-
return `<${i2}>${t2 || "<br>"}</${i2}>`;
|
|
163
|
-
}, parseHTML: [{ tag: "h1", getAttrs: () => ({ level: 1 }) }, { tag: "h2", getAttrs: () => ({ level: 2 }) }, { tag: "h3", getAttrs: () => ({ level: 3 }) }, { tag: "h4", getAttrs: () => ({ level: 4 }) }, { tag: "h5", getAttrs: () => ({ level: 5 }) }, { tag: "h6", getAttrs: () => ({ level: 6 }) }], sanitize: { tags: ["h1", "h2", "h3", "h4", "h5", "h6"] } });
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
export {
|
|
167
|
-
A as H,
|
|
168
|
-
v as a,
|
|
169
|
-
T as b
|
|
170
|
-
};
|
|
171
|
-
//# sourceMappingURL=index--n1RGpq-.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index--n1RGpq-.mjs","sources":["../../src/plugins/heading/HeadingBlockTypePicker.ts","../../src/plugins/heading/HeadingCommands.ts","../../src/plugins/heading/HeadingKeyboardHandlers.ts","../../src/plugins/heading/HeadingLocale.ts","../../src/plugins/heading/HeadingPlugin.ts","../../src/editor/styles/heading-select.ts","../../src/plugins/heading/HeadingInputRules.ts"],"sourcesContent":["/**\n * Block type picker entries and toolbar dropdown for heading block types.\n * Registers picker entries for paragraph, title, subtitle, and all heading levels,\n * plus a combobox-style toolbar item with a custom popup.\n */\n\nimport { isGapCursor, isNodeSelection } from '../../model/Selection.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { PluginContext } from '../Plugin.js';\nimport { ToolbarServiceKey } from '../toolbar/ToolbarPlugin.js';\nimport type { PickerEntryStyle } from './BlockTypePickerEntry.js';\nimport type { HeadingLocale } from './HeadingLocale.js';\nimport type { HeadingConfig } from './HeadingPlugin.js';\nimport type { HeadingLevel } from './HeadingPlugin.js';\n\n// --- Picker Entry Registration ---\n\n/** Registers block type picker entries for paragraph, title, subtitle, and heading levels. */\nexport function registerHeadingPickerEntries(\n\tcontext: PluginContext,\n\tconfig: HeadingConfig,\n\tlocale: HeadingLocale,\n): void {\n\tcontext.registerBlockTypePickerEntry({\n\t\tid: 'paragraph',\n\t\tlabel: locale.paragraph,\n\t\tcommand: 'setParagraph',\n\t\tpriority: 10,\n\t\tisActive: (state) => {\n\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\treturn block?.type === 'paragraph';\n\t\t},\n\t});\n\n\tcontext.registerBlockTypePickerEntry({\n\t\tid: 'title',\n\t\tlabel: locale.title,\n\t\tcommand: 'setTitle',\n\t\tpriority: 20,\n\t\tstyle: { fontSize: '1.6em', fontWeight: '700' },\n\t\tisActive: (state) => {\n\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\treturn block?.type === 'title';\n\t\t},\n\t});\n\n\tcontext.registerBlockTypePickerEntry({\n\t\tid: 'subtitle',\n\t\tlabel: locale.subtitle,\n\t\tcommand: 'setSubtitle',\n\t\tpriority: 30,\n\t\tstyle: { fontSize: '1.3em', fontWeight: '500' },\n\t\tisActive: (state) => {\n\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\treturn block?.type === 'subtitle';\n\t\t},\n\t});\n\n\tfor (const level of config.levels) {\n\t\tcontext.registerBlockTypePickerEntry({\n\t\t\tid: `heading-${level}`,\n\t\t\tlabel: getHeadingLabel(locale, level),\n\t\t\tcommand: `setHeading${level}`,\n\t\t\tpriority: 100 + level,\n\t\t\tstyle: { fontSize: `${1.4 - level * 0.1}em`, fontWeight: '600' },\n\t\t\tisActive: (state) => {\n\t\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\t\treturn block?.type === 'heading' && block.attrs?.level === level;\n\t\t\t},\n\t\t});\n\t}\n}\n\n// --- Toolbar Item ---\n\n/** Registers the heading toolbar dropdown with a combobox picker popup. */\nexport function registerHeadingToolbarItem(\n\tcontext: PluginContext,\n\tconfig: HeadingConfig,\n\tlocale: HeadingLocale,\n): void {\n\tcontext.registerToolbarItem({\n\t\tid: 'heading',\n\t\tgroup: 'block',\n\t\tlabel: locale.blockTypeLabel,\n\t\ttooltip: locale.blockTypeLabel,\n\t\tcommand: 'setParagraph',\n\t\tpriority: 50,\n\t\tpopupType: 'combobox',\n\t\tseparatorAfter: config.separatorAfter,\n\t\tgetLabel: (state: EditorState): string => getActiveLabel(state, context, locale),\n\t\trenderPopup: (container, ctx) => {\n\t\t\trenderHeadingPopup(container, ctx, locale);\n\t\t},\n\t\tisActive: (state) => {\n\t\t\tconst entries = context.getBlockTypePickerRegistry().getBlockTypePickerEntries();\n\t\t\treturn entries.some((entry) => entry.id !== 'paragraph' && entry.isActive(state));\n\t\t},\n\t});\n}\n\n// --- Popup Rendering ---\n\nfunction renderHeadingPopup(\n\tcontainer: HTMLElement,\n\tcontext: PluginContext,\n\tlocale: HeadingLocale,\n): void {\n\tcontainer.classList.add('notectl-heading-picker');\n\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return;\n\n\tconst list: HTMLDivElement = document.createElement('div');\n\tlist.className = 'notectl-heading-picker__list';\n\tlist.setAttribute('role', 'listbox');\n\tlist.setAttribute('aria-label', locale.blockTypesAria);\n\n\tconst entries = context.getBlockTypePickerRegistry().getBlockTypePickerEntries();\n\tfor (const entry of entries) {\n\t\tconst active: boolean = entry.isActive(state);\n\t\tlist.appendChild(\n\t\t\tcreatePickerItem(\n\t\t\t\tentry.label,\n\t\t\t\tactive,\n\t\t\t\t(e: MouseEvent) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tcontext.executeCommand(entry.command);\n\t\t\t\t\tconst toolbar = context.getService(ToolbarServiceKey);\n\t\t\t\t\ttoolbar?.closePopup();\n\t\t\t\t},\n\t\t\t\tentry.style,\n\t\t\t),\n\t\t);\n\t}\n\n\tcontainer.appendChild(list);\n}\n\nfunction createPickerItem(\n\tlabel: string,\n\tisActive: boolean,\n\thandler: (e: MouseEvent) => void,\n\tstyle?: PickerEntryStyle,\n): HTMLButtonElement {\n\tconst item: HTMLButtonElement = document.createElement('button');\n\titem.type = 'button';\n\titem.className = 'notectl-heading-picker__item';\n\titem.setAttribute('role', 'option');\n\titem.setAttribute('aria-selected', String(isActive));\n\n\tif (isActive) {\n\t\titem.classList.add('notectl-heading-picker__item--active');\n\t}\n\n\tconst check: HTMLSpanElement = document.createElement('span');\n\tcheck.className = 'notectl-heading-picker__check';\n\tcheck.textContent = isActive ? '\\u2713' : '';\n\titem.appendChild(check);\n\n\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\tlabelSpan.className = 'notectl-heading-picker__label';\n\tlabelSpan.textContent = label;\n\tif (style) {\n\t\tsetStyleProperties(labelSpan, {\n\t\t\tfontSize: style.fontSize,\n\t\t\tfontWeight: style.fontWeight,\n\t\t});\n\t}\n\titem.appendChild(labelSpan);\n\n\titem.addEventListener('mousedown', handler);\n\treturn item;\n}\n\n// --- Helpers ---\n\nfunction getHeadingLabel(locale: HeadingLocale, level: HeadingLevel): string {\n\tconst key = `heading${level}` as keyof HeadingLocale;\n\treturn locale[key] as string;\n}\n\nfunction getActiveLabel(state: EditorState, context: PluginContext, locale: HeadingLocale): string {\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return locale.paragraph;\n\tconst entries = context.getBlockTypePickerRegistry().getBlockTypePickerEntries();\n\tfor (const entry of entries) {\n\t\tif (entry.isActive(state)) return entry.label;\n\t}\n\treturn locale.paragraph;\n}\n","/**\n * Command registration and implementations for heading block types.\n * Handles toggle between heading/title/subtitle and paragraph,\n * plus excluded-mark stripping when switching block types.\n */\n\nimport type { BlockNode, Mark } from '../../model/Document.js';\nimport { getBlockLength, getInlineChildren, isTextNode } from '../../model/Document.js';\nimport { isGapCursor, isNodeSelection } from '../../model/Selection.js';\nimport { type NodeTypeName, nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { TransactionBuilder } from '../../state/Transaction.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { HeadingConfig, HeadingLevel } from './HeadingPlugin.js';\n\n/** Registers all heading commands (setTitle, setSubtitle, setHeadingN, toggleHeading, setParagraph). */\nexport function registerHeadingCommands(context: PluginContext, config: HeadingConfig): void {\n\tcontext.registerCommand('setTitle', () => toggleSpecialBlock(context, 'title'));\n\n\tcontext.registerCommand('setSubtitle', () => toggleSpecialBlock(context, 'subtitle'));\n\n\tfor (const level of config.levels) {\n\t\tcontext.registerCommand(`setHeading${level}`, () => toggleHeading(context, level));\n\t}\n\n\tcontext.registerCommand('toggleHeading', () => toggleHeading(context, 1));\n\n\tcontext.registerCommand('setParagraph', () => setBlockType(context, nodeType('paragraph')));\n}\n\n// --- Command Implementations ---\n\n/**\n * Toggles between a special block type (title/subtitle) and paragraph.\n * If the block is already that type, resets to paragraph.\n */\nfunction toggleSpecialBlock(context: PluginContext, type: string): boolean {\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(state.selection.anchor.blockId);\n\tif (!block) return false;\n\n\tif (block.type === type) {\n\t\treturn setBlockType(context, nodeType('paragraph'));\n\t}\n\n\treturn setBlockType(context, nodeType(type) as NodeTypeName);\n}\n\n/**\n * Toggles between heading (at given level) and paragraph.\n * If the block is already a heading at the same level, resets to paragraph.\n */\nfunction toggleHeading(context: PluginContext, level: HeadingLevel): boolean {\n\tconst state: EditorState = context.getState();\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block) return false;\n\n\tif (block.type === 'heading' && block.attrs?.level === level) {\n\t\treturn setBlockType(context, nodeType('paragraph'));\n\t}\n\n\treturn setBlockType(context, nodeType('heading'), { level });\n}\n\nfunction setBlockType(\n\tcontext: PluginContext,\n\ttype: NodeTypeName,\n\tattrs?: Record<string, string | number | boolean>,\n): boolean {\n\tconst state: EditorState = context.getState();\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block) return false;\n\n\tconst builder: TransactionBuilder = state.transaction('command');\n\n\tconst spec = context.getSchemaRegistry().getNodeSpec(type);\n\tif (spec?.excludeMarks && spec.excludeMarks.length > 0) {\n\t\tstripExcludedMarks(builder, block, spec.excludeMarks);\n\t\tclearExcludedStoredMarks(builder, state, spec.excludeMarks);\n\t}\n\n\tconst tr = builder.setBlockType(sel.anchor.blockId, type, attrs).setSelection(sel).build();\n\tcontext.dispatch(tr);\n\treturn true;\n}\n\n// --- Mark Stripping Helpers ---\n\n/**\n * Adds removeMark steps for each excluded mark type found\n * on the block's inline text content.\n */\nfunction stripExcludedMarks(\n\tbuilder: TransactionBuilder,\n\tblock: BlockNode,\n\texcludeMarks: readonly string[],\n): void {\n\tconst blockLength: number = getBlockLength(block);\n\tif (blockLength === 0) return;\n\n\tconst excludeSet: Set<string> = new Set(excludeMarks);\n\tconst inlineChildren = getInlineChildren(block);\n\tlet offset = 0;\n\n\tfor (const child of inlineChildren) {\n\t\tif (isTextNode(child)) {\n\t\t\tif (child.text.length > 0) {\n\t\t\t\tfor (const mark of child.marks) {\n\t\t\t\t\tif (excludeSet.has(mark.type)) {\n\t\t\t\t\t\tbuilder.removeMark(block.id, offset, offset + child.text.length, mark);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += child.text.length;\n\t\t} else {\n\t\t\toffset += 1;\n\t\t}\n\t}\n}\n\n/**\n * Clears excluded mark types from stored marks so that\n * subsequent typing does not reintroduce them.\n */\nfunction clearExcludedStoredMarks(\n\tbuilder: TransactionBuilder,\n\tstate: EditorState,\n\texcludeMarks: readonly string[],\n): void {\n\tif (!state.storedMarks) return;\n\n\tconst excludeSet: Set<string> = new Set(excludeMarks);\n\tconst filtered: readonly Mark[] = state.storedMarks.filter((m: Mark) => !excludeSet.has(m.type));\n\n\tif (filtered.length !== state.storedMarks.length) {\n\t\tbuilder.setStoredMarks(filtered.length > 0 ? filtered : null, state.storedMarks);\n\t}\n}\n","/**\n * Keyboard handlers for heading block types.\n * Handles Enter key behavior: empty heading → paragraph, cursor at end → split + paragraph.\n */\n\nimport type { BlockNode } from '../../model/Document.js';\nimport { generateBlockId, getBlockLength, getBlockText } from '../../model/Document.js';\nimport {\n\tcreateCollapsedSelection,\n\tisCollapsed,\n\tisGapCursor,\n\tisNodeSelection,\n} from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { HeadingConfig } from './HeadingPlugin.js';\n\n// --- Context Guard ---\n\nconst HEADING_TYPES: ReadonlySet<string> = new Set(['heading', 'title', 'subtitle']);\n\ninterface HeadingContext {\n\treadonly state: EditorState;\n\treadonly block: BlockNode;\n\treadonly blockId: BlockId;\n\treadonly offset: number;\n}\n\n/**\n * Guards against NodeSelection, non-collapsed selections, and non-heading blocks.\n * Returns false (not handled) if the cursor is not inside a heading-type block.\n */\nfunction withHeadingContext(\n\tcontext: PluginContext,\n\thandler: (ctx: HeadingContext) => boolean,\n): boolean {\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\n\tconst sel = state.selection;\n\tif (!isCollapsed(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block || !HEADING_TYPES.has(block.type)) return false;\n\n\treturn handler({\n\t\tstate,\n\t\tblock,\n\t\tblockId: sel.anchor.blockId,\n\t\toffset: sel.anchor.offset,\n\t});\n}\n\n/** Registers all heading keyboard handlers (Enter, Mod-Shift-N shortcuts). */\nexport function registerHeadingKeymaps(context: PluginContext, config: HeadingConfig): void {\n\tconst keymap: Record<string, () => boolean> = {\n\t\tEnter: () => handleEnter(context),\n\t};\n\n\tfor (const level of config.levels) {\n\t\tif (level <= 6) {\n\t\t\tkeymap[`Mod-Shift-${level}`] = () => context.executeCommand(`setHeading${level}`);\n\t\t}\n\t}\n\n\tcontext.registerKeymap(keymap);\n}\n\n// --- Enter Handler ---\n\n/**\n * Handles Enter inside a heading block.\n * Empty heading → convert to paragraph.\n * Cursor at end → split and convert new block to paragraph.\n * Cursor in middle → normal split (both stay heading).\n */\nfunction handleEnter(context: PluginContext): boolean {\n\treturn withHeadingContext(context, (ctx) => {\n\t\tconst text: string = getBlockText(ctx.block);\n\n\t\tif (text === '') {\n\t\t\tconst tr = ctx.state\n\t\t\t\t.transaction('input')\n\t\t\t\t.setBlockType(ctx.blockId, nodeType('paragraph'))\n\t\t\t\t.setSelection(ctx.state.selection)\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst blockLength: number = getBlockLength(ctx.block);\n\n\t\tif (ctx.offset >= blockLength) {\n\t\t\tconst newBlockId = generateBlockId();\n\t\t\tconst tr = ctx.state\n\t\t\t\t.transaction('input')\n\t\t\t\t.splitBlock(ctx.blockId, ctx.offset, newBlockId)\n\t\t\t\t.setBlockType(newBlockId, nodeType('paragraph'))\n\t\t\t\t.setSelection(createCollapsedSelection(newBlockId, 0))\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n","/**\n * Locale interface and default English locale for the HeadingPlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface HeadingLocale {\n\treadonly paragraph: string;\n\treadonly title: string;\n\treadonly subtitle: string;\n\treadonly heading1: string;\n\treadonly heading2: string;\n\treadonly heading3: string;\n\treadonly heading4: string;\n\treadonly heading5: string;\n\treadonly heading6: string;\n\treadonly blockTypeLabel: string;\n\treadonly blockTypesAria: string;\n}\n\n// --- Default English Locale ---\n\nexport const HEADING_LOCALE_EN: HeadingLocale = {\n\tparagraph: 'Paragraph',\n\ttitle: 'Title',\n\tsubtitle: 'Subtitle',\n\theading1: 'Heading 1',\n\theading2: 'Heading 2',\n\theading3: 'Heading 3',\n\theading4: 'Heading 4',\n\theading5: 'Heading 5',\n\theading6: 'Heading 6',\n\tblockTypeLabel: 'Block Type',\n\tblockTypesAria: 'Block types',\n};\n\n// --- German Locale ---\n\nexport const HEADING_LOCALE_DE: HeadingLocale = {\n\tparagraph: 'Absatz',\n\ttitle: 'Titel',\n\tsubtitle: 'Untertitel',\n\theading1: 'Überschrift 1',\n\theading2: 'Überschrift 2',\n\theading3: 'Überschrift 3',\n\theading4: 'Überschrift 4',\n\theading5: 'Überschrift 5',\n\theading6: 'Überschrift 6',\n\tblockTypeLabel: 'Blocktyp',\n\tblockTypesAria: 'Blocktypen',\n};\n\n// --- Spanish Locale ---\n\nexport const HEADING_LOCALE_ES: HeadingLocale = {\n\tparagraph: 'Párrafo',\n\ttitle: 'Título',\n\tsubtitle: 'Subtítulo',\n\theading1: 'Encabezado 1',\n\theading2: 'Encabezado 2',\n\theading3: 'Encabezado 3',\n\theading4: 'Encabezado 4',\n\theading5: 'Encabezado 5',\n\theading6: 'Encabezado 6',\n\tblockTypeLabel: 'Tipo de bloque',\n\tblockTypesAria: 'Tipos de bloque',\n};\n\n// --- French Locale ---\n\nexport const HEADING_LOCALE_FR: HeadingLocale = {\n\tparagraph: 'Paragraphe',\n\ttitle: 'Titre',\n\tsubtitle: 'Sous-titre',\n\theading1: 'Titre 1',\n\theading2: 'Titre 2',\n\theading3: 'Titre 3',\n\theading4: 'Titre 4',\n\theading5: 'Titre 5',\n\theading6: 'Titre 6',\n\tblockTypeLabel: 'Type de bloc',\n\tblockTypesAria: 'Types de bloc',\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const HEADING_LOCALE_ZH: HeadingLocale = {\n\tparagraph: '正文',\n\ttitle: '标题',\n\tsubtitle: '副标题',\n\theading1: '一级标题',\n\theading2: '二级标题',\n\theading3: '三级标题',\n\theading4: '四级标题',\n\theading5: '五级标题',\n\theading6: '六级标题',\n\tblockTypeLabel: '块类型',\n\tblockTypesAria: '块类型列表',\n};\n\n// --- Russian Locale ---\n\nexport const HEADING_LOCALE_RU: 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\n// --- Arabic Locale ---\n\nexport const HEADING_LOCALE_AR: 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\n// --- Hindi Locale ---\n\nexport const HEADING_LOCALE_HI: 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\n// --- Locale Map ---\n\nexport const HEADING_LOCALES: Record<string, HeadingLocale> = {\n\ten: HEADING_LOCALE_EN,\n\tde: HEADING_LOCALE_DE,\n\tes: HEADING_LOCALE_ES,\n\tfr: HEADING_LOCALE_FR,\n\tzh: HEADING_LOCALE_ZH,\n\tru: HEADING_LOCALE_RU,\n\tar: HEADING_LOCALE_AR,\n\thi: HEADING_LOCALE_HI,\n};\n","/**\n * HeadingPlugin: registers Title, Subtitle, and H1–H6 heading block types\n * with NodeSpec, toggle commands, keyboard shortcuts, input rules, and a\n * combobox-style toolbar dropdown that reflects the current block type.\n *\n * This file is a thin orchestrator — command logic, input rules, keyboard\n * handlers, and picker/toolbar rendering are delegated to dedicated modules.\n */\n\nimport { HEADING_SELECT_CSS } from '../../editor/styles/heading-select.js';\nimport { resolvePluginLocale } from '../../i18n/resolvePluginLocale.js';\nimport { createBlockElement } from '../../model/NodeSpec.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport type { BlockAlignment } from '../alignment/AlignmentPlugin.js';\nimport {\n\tregisterHeadingPickerEntries,\n\tregisterHeadingToolbarItem,\n} from './HeadingBlockTypePicker.js';\nimport { registerHeadingCommands } from './HeadingCommands.js';\nimport { registerHeadingInputRules } from './HeadingInputRules.js';\nimport { registerHeadingKeymaps } from './HeadingKeyboardHandlers.js';\nimport { HEADING_LOCALES, type HeadingLocale } from './HeadingLocale.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface NodeAttrRegistry {\n\t\theading: { level: HeadingLevel; align?: BlockAlignment };\n\t\ttitle: { align?: BlockAlignment };\n\t\tsubtitle: { align?: BlockAlignment };\n\t}\n}\n\n// --- Configuration ---\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface HeadingConfig {\n\t/** Which heading levels to enable. Defaults to [1, 2, 3, 4, 5, 6]. */\n\treadonly levels: readonly HeadingLevel[];\n\t/** When true, a separator is rendered after the heading toolbar item. */\n\treadonly separatorAfter?: boolean;\n\treadonly locale?: HeadingLocale;\n}\n\nconst DEFAULT_CONFIG: HeadingConfig = {\n\tlevels: [1, 2, 3, 4, 5, 6],\n};\n\n// --- Heading Tag Mapping ---\n\nconst HEADING_TAGS: Record<HeadingLevel, string> = {\n\t1: 'h1',\n\t2: 'h2',\n\t3: 'h3',\n\t4: 'h4',\n\t5: 'h5',\n\t6: 'h6',\n};\n\n// --- Plugin ---\n\nexport class HeadingPlugin implements Plugin {\n\treadonly id = 'heading';\n\treadonly name = 'Heading';\n\treadonly priority = 30;\n\n\tprivate readonly config: HeadingConfig;\n\tprivate locale!: HeadingLocale;\n\n\tconstructor(config?: Partial<HeadingConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(HEADING_LOCALES, context, this.config.locale);\n\t\tcontext.registerStyleSheet(HEADING_SELECT_CSS);\n\n\t\tthis.registerNodeSpecs(context);\n\t\tregisterHeadingCommands(context, this.config);\n\t\tregisterHeadingKeymaps(context, this.config);\n\t\tregisterHeadingInputRules(context, this.config);\n\t\tregisterHeadingPickerEntries(context, this.config, this.locale);\n\t\tregisterHeadingToolbarItem(context, this.config, this.locale);\n\t}\n\n\tprivate registerNodeSpecs(context: PluginContext): void {\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'title',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\texcludeMarks: ['fontSize'],\n\t\t\ttoDOM(node) {\n\t\t\t\tconst el = createBlockElement('h1', node.id);\n\t\t\t\tel.classList.add('notectl-title');\n\t\t\t\treturn el;\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<h1>${content || '<br>'}</h1>`;\n\t\t\t},\n\t\t\tsanitize: { tags: ['h1'] },\n\t\t});\n\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'subtitle',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\texcludeMarks: ['fontSize'],\n\t\t\ttoDOM(node) {\n\t\t\t\tconst el = createBlockElement('h2', node.id);\n\t\t\t\tel.classList.add('notectl-subtitle');\n\t\t\t\treturn el;\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<h2>${content || '<br>'}</h2>`;\n\t\t\t},\n\t\t\tsanitize: { tags: ['h2'] },\n\t\t});\n\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'heading',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\texcludeMarks: ['fontSize'],\n\t\t\tattrs: {\n\t\t\t\tlevel: { default: 1 },\n\t\t\t},\n\t\t\ttoDOM(node) {\n\t\t\t\tconst level = node.attrs?.level ?? 1;\n\t\t\t\tconst tag = HEADING_TAGS[level] ?? 'h1';\n\t\t\t\treturn createBlockElement(tag, node.id);\n\t\t\t},\n\t\t\ttoHTML(node, content) {\n\t\t\t\tconst level = (node.attrs?.level ?? 1) as HeadingLevel;\n\t\t\t\tconst tag: string = HEADING_TAGS[level] ?? 'h1';\n\t\t\t\treturn `<${tag}>${content || '<br>'}</${tag}>`;\n\t\t\t},\n\t\t\tparseHTML: [\n\t\t\t\t{ tag: 'h1', getAttrs: () => ({ level: 1 }) },\n\t\t\t\t{ tag: 'h2', getAttrs: () => ({ level: 2 }) },\n\t\t\t\t{ tag: 'h3', getAttrs: () => ({ level: 3 }) },\n\t\t\t\t{ tag: 'h4', getAttrs: () => ({ level: 4 }) },\n\t\t\t\t{ tag: 'h5', getAttrs: () => ({ level: 5 }) },\n\t\t\t\t{ tag: 'h6', getAttrs: () => ({ level: 6 }) },\n\t\t\t],\n\t\t\tsanitize: { tags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\t\t});\n\t}\n}\n","/** Heading picker toolbar combobox + popup styles. */\nexport const HEADING_SELECT_CSS = `\n/* Heading Select — Width overrides for combobox button */\n.notectl-toolbar-btn--heading {\n\tmin-width: 100px;\n\tmax-width: 160px;\n}\n\n/* Heading Picker Popup */\n.notectl-heading-picker {\n\tmin-width: 200px;\n\tmax-height: 320px;\n\toverflow-y: auto;\n}\n\n.notectl-heading-picker__list {\n\tpadding: 4px 0;\n}\n\n.notectl-heading-picker__item {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\twidth: 100%;\n\tpadding: 7px 12px;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\ttext-align: left;\n\twhite-space: nowrap;\n\tfont-family: inherit;\n\ttransition: background 0.1s;\n}\n\n.notectl-heading-picker__item:hover {\n\tbackground: var(--notectl-hover-bg);\n}\n\n.notectl-heading-picker__item--active {\n\tbackground: var(--notectl-active-bg);\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-heading-picker__item--active:hover {\n\tbackground: var(--notectl-active-bg);\n}\n\n.notectl-heading-picker__check {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 16px;\n\tflex-shrink: 0;\n\tfont-size: 13px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-heading-picker__label {\n\tflex: 1;\n}\n`;\n","/**\n * Input rule registration for heading block types.\n * Converts `# `, `## `, etc. at the start of a paragraph into headings.\n */\n\nimport {\n\tcreateCollapsedSelection,\n\tisCollapsed,\n\tisGapCursor,\n\tisNodeSelection,\n} from '../../model/Selection.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { HeadingConfig } from './HeadingPlugin.js';\n\n/** Registers markdown-style input rules (e.g. `# ` → H1) for configured heading levels. */\nexport function registerHeadingInputRules(context: PluginContext, config: HeadingConfig): void {\n\tfor (const level of config.levels) {\n\t\tconst hashes: string = '#'.repeat(level);\n\t\tconst pattern: RegExp = new RegExp(`^${hashes} $`);\n\n\t\tcontext.registerInputRule({\n\t\t\tpattern,\n\t\t\thandler(state, _match, start, _end) {\n\t\t\t\tconst sel = state.selection;\n\t\t\t\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\t\t\t\tif (!isCollapsed(sel)) return null;\n\n\t\t\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\t\t\tif (!block || block.type !== 'paragraph') return null;\n\n\t\t\t\treturn state\n\t\t\t\t\t.transaction('input')\n\t\t\t\t\t.deleteTextAt(sel.anchor.blockId, start, start + level + 1)\n\t\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('heading'), { level })\n\t\t\t\t\t.setSelection(createCollapsedSelection(sel.anchor.blockId, 0))\n\t\t\t\t\t.build();\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["createPickerItem","label","isActive","handler","style","item","document","createElement","type","className","setAttribute","String","classList","add","check","textContent","appendChild","labelSpan","setStyleProperties","fontSize","fontWeight","addEventListener","getHeadingLabel","locale","level","toggleSpecialBlock","context","state","getState","isNodeSelection","selection","isGapCursor","block","getBlock","anchor","blockId","setBlockType","nodeType","toggleHeading","sel","attrs","builder","transaction","spec","getSchemaRegistry","getNodeSpec","excludeMarks","length","getBlockLength","excludeSet","Set","inlineChildren","getInlineChildren","offset","child","isTextNode","text","mark","marks","has","removeMark","id","storedMarks","filtered","filter","m","setStoredMarks","tr","setSelection","build","dispatch","HEADING_TYPES","HEADING_LOCALE_EN","paragraph","title","subtitle","heading1","heading2","heading3","heading4","heading5","heading6","blockTypeLabel","blockTypesAria","HEADING_LOCALES","en","de","es","fr","zh","ru","ar","hi","DEFAULT_CONFIG","levels","HEADING_TAGS","HeadingPlugin","name","priority","config","this","resolvePluginLocale","registerStyleSheet","registerNodeSpecs","registerCommand","keymap","Enter","isCollapsed","ctx","getBlockText","blockLength","newBlockId","generateBlockId","splitBlock","createCollapsedSelection","executeCommand","registerKeymap","hashes","repeat","pattern","RegExp","registerInputRule","_match","start","_end","deleteTextAt","registerBlockTypePickerEntry","command","registerToolbarItem","group","tooltip","popupType","separatorAfter","getLabel","entries","getBlockTypePickerRegistry","getBlockTypePickerEntries","entry","renderPopup","container","list","active","e","preventDefault","stopPropagation","toolbar","getService","ToolbarServiceKey","closePopup","some","registerNodeSpec","content","allow","node","el","createBlockElement","toHTML","_node","sanitize","tags","default","tag","parseHTML","getAttrs"],"mappings":"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"}
|