@notectl/core 1.7.3 → 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-Brtw2jL1.mjs.map → Document-BFYAonMF.mjs.map} +1 -1
- 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-6RUJ4L3r.mjs.map → MarkCommands-B_erV7zz.mjs.map} +1 -1
- 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-CP4NCwKT.mjs.map → StyleRuntime-BmsLoEa8.mjs.map} +1 -1
- 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/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/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 +20 -54
- 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 +29 -93
- 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/{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 +0 -3
- 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 -3888
- package/dist/notectl-core.mjs.map +1 -1
- package/dist/notectl-core.umd.js +1 -9523
- 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 -2
- 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 +2 -0
- 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 -3
- 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 -3
- package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
- package/dist/plugins/font-size/FontSizePopup.d.ts +1 -1
- 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/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 +2 -0
- 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 +2 -18
- 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 -1
- 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 +2 -0
- 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.map +1 -0
- package/dist/serialization/ContentHTMLTypes.d.ts.map +1 -0
- package/dist/serialization/DocumentParser.d.ts.map +1 -0
- package/dist/{editor → serialization}/DocumentSerializer.d.ts +2 -0
- package/dist/serialization/DocumentSerializer.d.ts.map +1 -0
- package/dist/{editor → serialization}/MarkSerializer.d.ts +3 -2
- 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/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--lBQ7jCK.mjs +0 -81
- package/dist/chunks/ColorGrid--lBQ7jCK.mjs.map +0 -1
- package/dist/chunks/ColorPickerPopup-TpIRlXc8.mjs +0 -37
- package/dist/chunks/ColorPickerPopup-TpIRlXc8.mjs.map +0 -1
- package/dist/chunks/ColorValidation-CV4f1wu6.mjs +0 -39
- package/dist/chunks/Document-Brtw2jL1.mjs +0 -190
- 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/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-CgjgAKjp.mjs +0 -34
- package/dist/chunks/PopupPositioning-CgjgAKjp.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-CP4NCwKT.mjs +0 -235
- 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/TypeBrands-C09nE2qO.mjs +0 -27
- package/dist/chunks/index--7pBhSF4.mjs +0 -542
- package/dist/chunks/index--7pBhSF4.mjs.map +0 -1
- package/dist/chunks/index-BXCkjDax.mjs +0 -161
- package/dist/chunks/index-BXCkjDax.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-BcDRT4K2.mjs +0 -1019
- package/dist/chunks/index-BcDRT4K2.mjs.map +0 -1
- package/dist/chunks/index-BjFBWBOC.mjs +0 -168
- package/dist/chunks/index-BjFBWBOC.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-CCyqQ0Dz.mjs +0 -228
- package/dist/chunks/index-CCyqQ0Dz.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-DSAuGP4n.mjs +0 -410
- package/dist/chunks/index-DSAuGP4n.mjs.map +0 -1
- package/dist/chunks/index-DtRfqsq5.mjs +0 -924
- package/dist/chunks/index-DtRfqsq5.mjs.map +0 -1
- package/dist/chunks/index-Dum8yE_t.mjs +0 -62
- package/dist/chunks/index-Dum8yE_t.mjs.map +0 -1
- package/dist/chunks/index-DxbQirny.mjs +0 -63
- package/dist/chunks/index-DxbQirny.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-WpbK_s_H.mjs +0 -119
- package/dist/chunks/index-WpbK_s_H.mjs.map +0 -1
- package/dist/chunks/index-WrqH1wG8.mjs +0 -50
- package/dist/chunks/index-WrqH1wG8.mjs.map +0 -1
- package/dist/chunks/index-fsVJLutn.mjs +0 -118
- package/dist/chunks/index-fsVJLutn.mjs.map +0 -1
- package/dist/chunks/index-fx3KIap3.mjs +0 -50
- package/dist/chunks/index-fx3KIap3.mjs.map +0 -1
- package/dist/chunks/index-oOJo-ywB.mjs +0 -467
- package/dist/chunks/index-oOJo-ywB.mjs.map +0 -1
- package/dist/chunks/index-toj88jtL.mjs +0 -101
- package/dist/chunks/index-toj88jtL.mjs.map +0 -1
- package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs +0 -34
- package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs.map +0 -1
- package/dist/editor/CSSClassCollector.d.ts.map +0 -1
- package/dist/editor/ContentHTMLTypes.d.ts.map +0 -1
- package/dist/editor/DocumentParser.d.ts.map +0 -1
- package/dist/editor/DocumentSerializer.d.ts.map +0 -1
- 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
- /package/dist/{editor → serialization}/CSSClassCollector.d.ts +0 -0
- /package/dist/{editor → serialization}/ContentHTMLTypes.d.ts +0 -0
- /package/dist/{editor → serialization}/DocumentParser.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C8xtb3SM.mjs","sources":["../../src/view/GapCursorNavigation.ts","../../src/plugins/gap-cursor/GapCursorLocale.ts","../../src/plugins/gap-cursor/GapCursorPlugin.ts"],"sourcesContent":["import { getBlockLength } from '../model/Document.js';\nimport { isGapCursor } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport { getTextDirection } from '../platform/Platform.js';\nimport type { EditorState } from '../state/EditorState.js';\nimport { isVoidBlock } from '../state/NavigationQueries.js';\nimport { moveTx, nodeSelTx } from '../state/SelectionTransactions.js';\nimport type { Transaction } from '../state/Transaction.js';\n\nexport type GapCursorDirection = 'left' | 'right' | 'up' | 'down';\n\n/**\n * Navigates from a GapCursor position.\n *\n * - Arrow toward the adjacent void block -> NodeSelection of that block.\n * - Arrow away from the void block -> find next block: void -> NodeSelection,\n * text -> TextSelection, document boundary -> no-op.\n */\nexport function navigateFromGapCursor(\n\tstate: EditorState,\n\tdirection: GapCursorDirection,\n\tcontainer?: HTMLElement,\n): Transaction | null {\n\tconst sel = state.selection;\n\tif (!isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst blockIdx: number = blockOrder.indexOf(sel.blockId);\n\tif (blockIdx < 0) return null;\n\n\t// Resolve effective horizontal direction for RTL blocks\n\tconst effectiveDir: GapCursorDirection = resolveEffectiveDirection(\n\t\tdirection,\n\t\tsel.blockId,\n\t\tcontainer,\n\t);\n\n\tconst towardVoid: boolean =\n\t\t(sel.side === 'before' && (effectiveDir === 'right' || effectiveDir === 'down')) ||\n\t\t(sel.side === 'after' && (effectiveDir === 'left' || effectiveDir === 'up'));\n\n\tif (towardVoid) return nodeSelTx(state, sel.blockId);\n\n\t// Moving away from the void block - find the neighbor in the other direction\n\tconst awayIdx: number = sel.side === 'before' ? blockIdx - 1 : blockIdx + 1;\n\tif (awayIdx < 0 || awayIdx >= blockOrder.length) return null;\n\n\tconst targetId: BlockId | undefined = blockOrder[awayIdx];\n\tif (!targetId) return null;\n\n\tif (isVoidBlock(state, targetId)) return nodeSelTx(state, targetId);\n\n\t// Text block: place cursor at start or end\n\tconst targetBlock = state.getBlock(targetId);\n\tif (!targetBlock) return null;\n\n\tconst targetOffset: number =\n\t\teffectiveDir === 'left' || effectiveDir === 'up' ? getBlockLength(targetBlock) : 0;\n\treturn moveTx(state, targetId, targetOffset);\n}\n\n/**\n * Resolves the effective navigation direction by flipping left/right\n * when the block is RTL. Vertical directions are unaffected.\n */\nfunction resolveEffectiveDirection(\n\tdirection: GapCursorDirection,\n\tblockId: BlockId,\n\tcontainer?: HTMLElement,\n): GapCursorDirection {\n\tif (!container) return direction;\n\tif (direction !== 'left' && direction !== 'right') return direction;\n\n\tconst blockEl: Element | null = container.querySelector(`[data-block-id=\"${blockId}\"]`);\n\tif (!(blockEl instanceof HTMLElement)) return direction;\n\n\tconst isRtl: boolean = getTextDirection(blockEl) === 'rtl';\n\tif (!isRtl) return direction;\n\n\treturn direction === 'left' ? 'right' : 'left';\n}\n","/** Locale interface and default English locale for the GapCursorPlugin. */\n\n// --- Locale Interface ---\n\nexport interface GapCursorLocale {\n\treadonly gapCursorActive: string;\n}\n\n// --- Default English Locale ---\n\nexport const GAP_CURSOR_LOCALE_EN: GapCursorLocale = {\n\tgapCursorActive: 'Gap cursor active. Type to insert new paragraph.',\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: GapCursorLocale }>> =\n\timport.meta.glob<{ default: GapCursorLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadGapCursorLocale(lang: string): Promise<GapCursorLocale> {\n\tif (lang === 'en') return GAP_CURSOR_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return GAP_CURSOR_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn GAP_CURSOR_LOCALE_EN;\n\t}\n}\n","/**\n * GapCursorPlugin: renders a virtual cursor at boundaries of void blocks\n * where no native browser caret can exist (e.g. between two HRs or at\n * the document edge adjacent to a void block).\n */\n\nimport { LocaleServiceKey } from '../../i18n/LocaleService.js';\nimport { isGapCursor } from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { navigateFromGapCursor } from '../../view/GapCursorNavigation.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport {\n\tGAP_CURSOR_LOCALE_EN,\n\ttype GapCursorLocale,\n\tloadGapCursorLocale,\n} from './GapCursorLocale.js';\n\nconst GAP_CURSOR_CSS = `\n.notectl-gap-cursor--before,\n.notectl-gap-cursor--after {\n\tposition: relative;\n}\n.notectl-gap-cursor--before::before {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\theight: 1px;\n\tbackground: currentColor;\n\ttransform: translateY(-50%);\n\tpointer-events: none;\n\tz-index: 1;\n\tanimation: notectl-gap-blink 1.1s step-end infinite;\n}\n.notectl-gap-cursor--after::after {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\tbottom: 0;\n\tinset-inline-start: 0;\n\twidth: 100%;\n\theight: 1px;\n\tbackground: currentColor;\n\ttransform: translateY(50%);\n\tpointer-events: none;\n\tz-index: 1;\n\tanimation: notectl-gap-blink 1.1s step-end infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n\t.notectl-gap-cursor--before::before,\n\t.notectl-gap-cursor--after::after {\n\t\tanimation: none;\n\t}\n}\n@keyframes notectl-gap-blink {\n\t50% { opacity: 0; }\n}\n`;\n\nexport class GapCursorPlugin implements Plugin {\n\treadonly id = 'gap-cursor';\n\treadonly name = 'Gap Cursor';\n\treadonly priority = 5;\n\n\tprivate context: PluginContext | null = null;\n\tprivate activeCursorBlockId: BlockId | null = null;\n\tprivate activeCursorSide: 'before' | 'after' | null = null;\n\tprivate locale: GapCursorLocale = GAP_CURSOR_LOCALE_EN;\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tconst service = context.getService(LocaleServiceKey);\n\t\tconst lang: string = service?.getLocale() ?? 'en';\n\t\tthis.locale = lang === 'en' ? GAP_CURSOR_LOCALE_EN : await loadGapCursorLocale(lang);\n\n\t\tthis.context = context;\n\n\t\tcontext.registerStyleSheet(GAP_CURSOR_CSS);\n\n\t\tconst directions: Record<string, 'left' | 'right' | 'up' | 'down'> = {\n\t\t\tArrowLeft: 'left',\n\t\t\tArrowRight: 'right',\n\t\t\tArrowUp: 'up',\n\t\t\tArrowDown: 'down',\n\t\t};\n\n\t\tconst keymap: Record<string, () => boolean> = {};\n\t\tfor (const [key, dir] of Object.entries(directions)) {\n\t\t\tkeymap[key] = (): boolean => {\n\t\t\t\tconst state: EditorState = context.getState();\n\t\t\t\tif (!isGapCursor(state.selection)) return false;\n\n\t\t\t\tconst container: HTMLElement = context.getContainer();\n\t\t\t\tconst tr: Transaction | null = navigateFromGapCursor(state, dir, container);\n\t\t\t\tif (tr) {\n\t\t\t\t\tcontext.dispatch(tr);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\tcontext.registerKeymap(keymap, { priority: 'navigation' });\n\t}\n\n\tonReady(): void {\n\t\tif (!this.context) return;\n\t\tthis.syncCursorClass(this.context.getState());\n\t}\n\n\tonStateChange(oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tif (!this.context) return;\n\n\t\tthis.syncCursorClass(newState);\n\n\t\tif (!isGapCursor(oldState.selection) && isGapCursor(newState.selection)) {\n\t\t\tthis.context.announce(this.locale.gapCursorActive);\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tthis.clearCursorClass();\n\t\tthis.context = null;\n\t}\n\n\tprivate syncCursorClass(state: EditorState): void {\n\t\tthis.clearCursorClass();\n\t\tif (!isGapCursor(state.selection) || !this.context) return;\n\n\t\tconst className: string =\n\t\t\tstate.selection.side === 'before'\n\t\t\t\t? 'notectl-gap-cursor--before'\n\t\t\t\t: 'notectl-gap-cursor--after';\n\n\t\tconst blockEl: Element | null = this.context\n\t\t\t.getContainer()\n\t\t\t.querySelector(`[data-block-id=\"${state.selection.blockId}\"]`);\n\t\tif (!(blockEl instanceof HTMLElement)) return;\n\n\t\tblockEl.classList.add(className);\n\t\tthis.activeCursorBlockId = state.selection.blockId;\n\t\tthis.activeCursorSide = state.selection.side;\n\t}\n\n\tprivate clearCursorClass(): void {\n\t\tif (!this.context || !this.activeCursorBlockId || !this.activeCursorSide) return;\n\n\t\tconst blockEl: Element | null = this.context\n\t\t\t.getContainer()\n\t\t\t.querySelector(`[data-block-id=\"${this.activeCursorBlockId}\"]`);\n\t\tif (blockEl instanceof HTMLElement) {\n\t\t\tblockEl.classList.remove('notectl-gap-cursor--before', 'notectl-gap-cursor--after');\n\t\t}\n\n\t\tthis.activeCursorBlockId = null;\n\t\tthis.activeCursorSide = null;\n\t}\n}\n"],"names":["navigateFromGapCursor","state","direction","container","sel","selection","isGapCursor","blockOrder","getBlockOrder","blockIdx","indexOf","blockId","effectiveDir","blockEl","querySelector","HTMLElement","getTextDirection","resolveEffectiveDirection","side","nodeSelTx","awayIdx","length","targetId","isVoidBlock","targetBlock","getBlock","targetOffset","getBlockLength","moveTx","GAP_CURSOR_LOCALE_EN","gapCursorActive","localeModules","assign","import","GapCursorPlugin","id","name","priority","context","activeCursorBlockId","activeCursorSide","locale","init","service","getService","LocaleServiceKey","lang","getLocale","this","async","loader","default","loadGapCursorLocale","registerStyleSheet","directions","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","keymap","key","dir","Object","entries","getState","getContainer","tr","dispatch","registerKeymap","onReady","syncCursorClass","onStateChange","oldState","newState","_tr","announce","destroy","clearCursorClass","className","classList","add","remove"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{f as t,j as n,b as e,i as o}from"./Document-BFYAonMF.mjs";import{h as r,g as i,i as l,e as c,d as s}from"./Selection-6-W6Flxc.mjs";import{c as a,e as f}from"./NavigationQueries-ogQuObz7.mjs";import{m as u,e as d,n as h}from"./SelectionTransactions-q71GEzgE.mjs";import{a as m}from"./LocaleService-B6Z-wyAF.mjs";import{g,a as k}from"./Platform-CU6itXZo.mjs";import{b}from"./TypeBrands-Bp_Z_o5Y.mjs";const w="undefined"!=typeof Intl&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function I(t,n){if(n>=t.length||0===t.length)return 0;if(w){for(const e of w.segment(t))if(e.index>=n)return e.segment.length;return 0}return 1}function p(t,n){if(n<=0||0===t.length)return 0;if(w){let e=1;for(const o of w.segment(t)){if(o.index+o.segment.length>=n){e=o.segment.length;break}e=o.segment.length}return e}return 1}function y(t){const n=t.selection;if(r(n)||i(n))return null;const e=l(n)?n.anchor.blockId:n.head.blockId;return 0===(l(n)?n.anchor.offset:n.head.offset)?null:u(t,e,0)}function N(n){const e=n.selection;if(r(e)||i(e))return null;const o=l(e)?e.anchor.blockId:e.head.blockId,c=n.getBlock(o);if(!c)return null;const s=t(c);return(l(e)?e.anchor.offset:e.head.offset)===s?null:u(n,o,s)}function v(t,e){let o=e-1;for(;o>=0;){const e=n(t,o);if(!e||"inline"===e.kind)break;if(!/\s/.test(e.char))break;o--}if(o>=0){const e=n(t,o);if("inline"===e?.kind)return o}for(;o>=0;){const e=n(t,o);if(!e||"inline"===e.kind)break;if(/\s/.test(e.char))break;o--}return o+1}function x(e,o){const r=t(e);let i=o;for(;i<r;){const t=n(e,i);if(!t||"inline"===t.kind)break;if(/\s/.test(t.char))break;i++}if(i===o&&i<r){const t=n(e,i);if("inline"===t?.kind)return i+1}for(;i<r;){const t=n(e,i);if(!t||"inline"===t.kind)break;if(!/\s/.test(t.char))break;i++}return i}function A(t){const n=t.selection;return r(n)||i(n)?null:{blockId:n.head.blockId,offset:n.head.offset}}function E(t,n,e){const o=t.getBlockOrder(),r=o.indexOf(n);if(r<0)return null;const i="forward"===e?r+1:r-1;return i<0||i>=o.length?null:o[i]??null}function T(c){const s=c.selection;if(r(s)||i(s))return null;if(!l(s))return u(c,s.head.blockId,s.head.offset);const d=s.anchor.blockId,m=c.getBlock(d);if(!m)return null;const g=s.anchor.offset;if(g<t(m)){const t=n(m,g);if("inline"===t?.kind)return u(c,d,g+1);const r=I(o(m),e(m,g))||1;return u(c,d,g+r)}const k=E(c,d,"forward");return k&&a(c,d,k)?f(c,k)?h(c,k):u(c,k,0):null}function C(c){const s=c.selection;if(r(s)||i(s))return null;if(!l(s))return u(c,s.head.blockId,s.head.offset);const d=s.anchor.blockId,m=c.getBlock(d);if(!m)return null;const g=s.anchor.offset;if(g>0){const t=n(m,g-1);if("inline"===t?.kind)return u(c,d,g-1);const r=p(o(m),e(m,g))||1;return u(c,d,g-r)}const k=E(c,d,"backward");if(!k)return null;if(!a(c,d,k))return null;if(f(c,k))return h(c,k);const b=c.getBlock(k);return b?u(c,k,t(b)):null}function B(t){const n=t.selection;if(r(n)||i(n))return null;const e=t.getBlockOrder()[0];return e?f(t,e)?h(t,e):u(t,e,0):null}function O(n){const e=n.selection;if(r(e)||i(e))return null;const o=n.getBlockOrder(),l=o[o.length-1];if(!l)return null;if(f(n,l))return h(n,l);const c=n.getBlock(l);return c?u(n,l,t(c)):null}function M(l){const c=A(l);if(!c)return null;const s=l.selection;if(r(s)||i(s))return null;const f=l.getBlock(c.blockId);if(!f)return null;const u=t(f);if(c.offset<u){const t=n(f,c.offset),r="inline"===t?.kind?1:I(o(f),e(f,c.offset))||1;return d(l,s.anchor.blockId,s.anchor.offset,c.blockId,c.offset+r)}const h=E(l,c.blockId,"forward");return h&&a(l,c.blockId,h)?d(l,s.anchor.blockId,s.anchor.offset,h,0):null}function S(l){const c=A(l);if(!c)return null;const s=l.selection;if(r(s)||i(s))return null;if(c.offset>0){const t=l.getBlock(c.blockId);if(!t)return null;const r=n(t,c.offset-1),i="inline"===r?.kind?1:p(o(t),e(t,c.offset))||1;return d(l,s.anchor.blockId,s.anchor.offset,c.blockId,c.offset-i)}const f=E(l,c.blockId,"backward");if(!f)return null;if(!a(l,c.blockId,f))return null;const u=l.getBlock(f);return u?d(l,s.anchor.blockId,s.anchor.offset,f,t(u)):null}function L(t){const n=A(t);if(!n)return null;const e=t.selection;return r(e)||i(e)||0===n.offset?null:d(t,e.anchor.blockId,e.anchor.offset,n.blockId,0)}function R(n){const e=A(n);if(!e)return null;const o=n.selection;if(r(o)||i(o))return null;const l=n.getBlock(e.blockId);if(!l)return null;const c=t(l);return e.offset===c?null:d(n,o.anchor.blockId,o.anchor.offset,e.blockId,c)}function H(t){const n=t.selection;if(r(n)||i(n))return null;const e=t.getBlockOrder()[0];return e?n.head.blockId===e&&0===n.head.offset?null:d(t,n.anchor.blockId,n.anchor.offset,e,0):null}function V(n){const e=n.selection;if(r(e)||i(e))return null;const o=n.getBlockOrder(),l=o[o.length-1];if(!l)return null;const c=n.getBlock(l);if(!c)return null;const s=t(c);return e.head.blockId===l&&e.head.offset===s?null:d(n,e.anchor.blockId,e.anchor.offset,l,s)}function j(t,n,e,o){let r=null,i=0;if("caretPositionFromPoint"in t){const o=t.caretPositionFromPoint(n,e);o&&(r=o.offsetNode,i=o.offset)}if(!r&&"caretRangeFromPoint"in t){const o=t.caretRangeFromPoint(n,e);o&&(r=o.startContainer,i=o.startOffset)}if(!r&&o&&t!==o&&"caretRangeFromPoint"in o){const t=o.caretRangeFromPoint(n,e);t&&(r=t.startContainer,i=t.startOffset)}return r?{node:r,offset:i}:null}function D(){return window.getSelection()}function F(t,n){const e=t.getRootNode();if(!(e instanceof ShadowRoot))return null;if(!("getComposedRanges"in n))return null;let o;try{o=n.getComposedRanges({shadowRoots:[e]})}catch{try{o=n.getComposedRanges(e)}catch{return null}}const r=o[0];if(!r)return null;const i="direction"in n&&"backward"===n.direction;return{anchorNode:i?r.endContainer:r.startContainer,anchorOffset:i?r.endOffset:r.startOffset,focusNode:i?r.startContainer:r.endContainer,focusOffset:i?r.startOffset:r.endOffset}}function _(t,n){const e=F(t,n);if(e)return e;const o=n.anchorNode;if(!o)return null;const r=n.focusNode;return r?{anchorNode:o,anchorOffset:n.anchorOffset,focusNode:r,focusOffset:n.focusOffset}:null}function P(t,n){const e=D();if(!e)return;if(i(n))return void e.removeAllRanges();if(r(n)){const o=t.querySelector(`[data-block-id="${n.nodeId}"]`);if(!o)return;const r=o.parentNode;if(!r)return;const i=K(r,o);try{e.setBaseAndExtent(r,i,r,i+1)}catch{}return}const o=z(t,n.anchor),l=z(t,n.head);if(o&&l)try{e.setBaseAndExtent(o.node,o.offset,l.node,l.offset)}catch{}}function q(t){const n=D();if(!n||0===n.rangeCount)return null;const e=_(t,n);if(!e)return null;if(!t.contains(e.anchorNode)||!t.contains(e.focusNode))return null;const o=$(t,e.anchorNode,e.anchorOffset),r=$(t,e.focusNode,e.focusOffset);return o&&r?c(o,r):null}function z(t,n){let e=null;if(n.path&&n.path.length>0){let o=t;for(const t of n.path){const n=o.querySelector(`:scope [data-block-id="${t}"]`);if(!n)break;o=n}o!==t&&o.getAttribute("data-block-id")===n.blockId&&(e=o)}if(e??=t.querySelector(`[data-block-id="${n.blockId}"]`),!e)return null;const o=J(e);if(1===o.childNodes.length&&"BR"===o.firstChild?.nodeName)return{node:o,offset:0};let r=n.offset;const i=X(o);let l=i.nextNode();for(;l;){if(l.nodeType===Node.TEXT_NODE){const t=l.textContent?.length??0;if(r<=t)return{node:l,offset:r};r-=t}else if(l instanceof HTMLElement&&"false"===l.getAttribute("contenteditable")){if(0===r){const t=l.parentNode;if(t)return{node:t,offset:K(t,l)}}r-=1}l=i.nextNode()}const c=o.lastChild;return c?c.nodeType===Node.TEXT_NODE?{node:c,offset:c.textContent?.length??0}:{node:o,offset:o.childNodes.length}:{node:o,offset:0}}function $(t,n,e){const o=function(t,n){let e=n;for(;e&&e!==t;){if(e instanceof HTMLElement&&e.hasAttribute("data-block-id"))return e;e=e.parentNode}return null}(t,n);if(!o)return null;const r=o.getAttribute("data-block-id");if(!r)return null;const i=b(r),l=function(t,n){const e=[];let o=n;for(;o&&o!==t;)o.hasAttribute("data-block-id")&&e.unshift(b(o.getAttribute("data-block-id")??"")),o=o.parentElement;return e}(t,o),c=J(o);if(n===o||n===c){const t=n===c?c:o;let r=0,a=0;for(const n of Array.from(t.childNodes)){if(a>=e)break;r+=Q(n),a++}return s(i,r,l.length>1?l:void 0)}if(c!==o&&!c.contains(n))return s(i,0,l.length>1?l:void 0);let a=0;const f=X(c);let u=f.nextNode();for(;u;){if(u===n)return u.nodeType===Node.TEXT_NODE?s(i,a+e,l.length>1?l:void 0):s(i,a,l.length>1?l:void 0);u.nodeType===Node.TEXT_NODE?a+=u.textContent?.length??0:u instanceof HTMLElement&&"false"===u.getAttribute("contenteditable")&&(a+=1),u=f.nextNode()}if(n.nodeType===Node.ELEMENT_NODE){let t=0,o=0;for(const r of Array.from(n.childNodes)){if(o>=e)break;t+=Q(r),o++}return s(i,t,l.length>1?l:void 0)}return s(i,0,l.length>1?l:void 0)}function X(t){return document.createTreeWalker(t,NodeFilter.SHOW_ALL,{acceptNode:n=>n instanceof HTMLElement&&n.hasAttribute("data-cursor-wrapper")||function(t,n){let e=t.parentNode;for(;e&&e!==n;){if(e instanceof HTMLElement&&"false"===e.getAttribute("contenteditable"))return!0;e=e.parentNode}return!1}(n,t)||n instanceof HTMLElement&&n.hasAttribute("data-block-id")&&n!==t?NodeFilter.FILTER_REJECT:n.nodeType===Node.TEXT_NODE||n instanceof HTMLElement&&"false"===n.getAttribute("contenteditable")?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP})}function K(t,n){let e=0;for(const o of Array.from(t.childNodes)){if(o===n)return e;e++}return e}function J(t){return t.querySelector("[data-content-dom]")??t}function Q(t){if(t.nodeType===Node.TEXT_NODE)return t.textContent?.length??0;if(t instanceof HTMLElement&&"false"===t.getAttribute("contenteditable"))return 1;let n=0;for(const e of Array.from(t.childNodes))n+=Q(e);return n}function U(n,e,o,c){const s=e.selection;if(r(s)||i(s))return!1;if(!l(s))return!1;const a=e.getBlock(s.anchor.blockId);if(!a)return!1;const f=s.anchor.offset,u=t(a),d=n.querySelector(`[data-block-id="${s.anchor.blockId}"]`),h=d instanceof HTMLElement&&"rtl"===g(d);if("left"===o)return h?f===u:0===f;if("right"===o)return h?0===f:f===u;if("up"===o&&0===f)return!0;if("down"===o&&f===u)return!0;const m=D();return m&&m.modify?function(t,n,e,o){const r=_(t,n);if(!r)return!1;const i=o??Z(n),l="up"===e?"backward":"forward";try{n.modify("move",l,"line");const e=_(t,n);if(!e)return!1;if(nt(t,r.focusNode)!==nt(t,e.focusNode))return!0;if(e.anchorNode===r.anchorNode&&e.anchorOffset===r.anchorOffset&&e.focusNode===r.focusNode&&e.focusOffset===r.focusOffset)return!0;if(i){const t=Z(n);if(t&&Math.abs(t.top-i.top)<1)return!0}return!1}finally{try{n.setBaseAndExtent(r.anchorNode,r.anchorOffset,r.focusNode,r.focusOffset)}catch{}}}(n,m,o,c):"up"===o?0===f:f===u}function W(n,e){const o=tt(n,e);if(!o)return null;if(o.isVoid)return h(n,o.targetId);const r=n.getBlock(o.targetId);if(!r)return null;const i="right"===e||"down"===e?0:t(r);return u(n,o.targetId,i)}function G(n,e,o,r){const i=tt(e,o);if(!i)return null;if(i.isVoid)return h(e,i.targetId);const l=e.getBlock(i.targetId);if(!l)return null;const c=t(l);if(null!==r){const t=function(t,n,e,o){const r=t.querySelector(`[data-block-id="${n}"]`);if(!r)return null;const i=r.getBoundingClientRect(),l="down"===e?i.top+2:i.bottom-2,c=Math.min(Math.max(o,i.left),i.right-1),s=j(t.getRootNode(),c,l,t.ownerDocument);if(!s)return null;if(!r.contains(s.node))return null;const a=$(t,s.node,s.offset);return a?a.blockId!==n?null:a:null}(n,i.targetId,o,r);if(t)return u(e,t.blockId,t.offset)}const s="down"===o?0:c;return u(e,i.targetId,s)}function Y(t,e){if("up"===e||"down"===e)return null;const o=t.selection;if(r(o)||i(o))return null;if(!l(o))return null;const c=o.anchor.blockId,s=t.getBlock(c);if(!s)return null;const a=o.anchor.offset;return"right"===e?function(t,e,o,r){const i=n(o,r);return i&&"inline"===i.kind?u(t,e,r+1):null}(t,c,s,a):function(t,e,o,r){if(0===r)return null;const i=n(o,r-1);return i&&"inline"===i.kind?u(t,e,r-1):null}(t,c,s,a)}function Z(t){if(0===t.rangeCount)return null;const n=t.getRangeAt(0),e=n.getClientRects();return e.length>0?e[0]??null:n.getBoundingClientRect()}function tt(t,n){const e=t.getBlockOrder(),o=t.selection;if(r(o)||i(o))return null;const l=e.indexOf(o.anchor.blockId);if(l<0)return null;const c="left"===n||"up"===n?l-1:l+1;if(c<0||c>=e.length)return null;const s=e[c];return s&&a(t,o.anchor.blockId,s)?{targetId:s,isVoid:f(t,s)}:null}function nt(t,n){let e=n;for(;e&&e!==t;){if(e instanceof HTMLElement&&e.hasAttribute("data-block-id"))return e;e=e.parentNode}return null}function et(e,o,l,c){const s=o.selection;if(r(s)||i(s))return null;const d=D();if(!d?.modify)return rt(o,l,c);const m=_(e,d);if(!m)return rt(o,l,c);try{d.modify("move",l,c);const r=q(e);if(!r)return null;const i=r.anchor.blockId,m=s.anchor.blockId;if(i!==m&&!a(o,m,i))return null;let g=r.anchor.offset;const k=o.getBlock(i);if(k){const e=n(k,g);"inline"===e?.kind&&"forward"===l&&(g=Math.min(g+1,t(k)))}return f(o,i)?h(o,i):u(o,i,g)}finally{try{d.setBaseAndExtent(m.anchorNode,m.anchorOffset,m.focusNode,m.focusOffset)}catch{}}}function ot(e,o,l,c){const s=o.selection;if(r(s)||i(s))return null;const f=D();if(!f?.modify)return it(o,l,c);const u=_(e,f);if(!u)return it(o,l,c);try{f.modify("extend",l,c);const r=q(e);if(!r)return null;const i=s.head.blockId,u=r.head.blockId;if(u!==i&&!a(o,i,u))return null;let h=r.head.offset;const m=o.getBlock(r.head.blockId);if(m){const e=n(m,h);"inline"===e?.kind&&"forward"===l&&(h=Math.min(h+1,t(m)))}return d(o,s.anchor.blockId,s.anchor.offset,r.head.blockId,h)}finally{try{f.setBaseAndExtent(u.anchorNode,u.anchorOffset,u.focusNode,u.focusOffset)}catch{}}}function rt(n,e,o){return"word"===o?function(n,e){const o=n.selection;if(r(o)||i(o))return null;const c=l(o)?o.anchor.blockId:o.head.blockId,s=l(o)?o.anchor.offset:o.head.offset,d=n.getBlock(c);if(!d)return null;const m="forward"===e?x(d,s):v(d,s);return m===s?function(n,e,o){const r=n.getBlockOrder(),i=r.indexOf(e),l="forward"===o?i+1:i-1;if(l<0||l>=r.length)return null;const c=r[l];if(!c)return null;if(!a(n,e,c))return null;if(f(n,c))return h(n,c);const s=n.getBlock(c);if(!s)return null;const d="forward"===o?0:t(s);return u(n,c,d)}(n,c,e):u(n,c,m)}(n,e):"lineboundary"===o?"forward"===e?N(n):y(n):W(n,"forward"===e?"down":"up")}function it(n,e,o){const l=n.selection;if(r(l)||i(l))return null;const c=l.head,s=n.getBlock(c.blockId);if(!s)return null;let u=c.offset;if("word"===o)u="forward"===e?x(s,c.offset):v(s,c.offset);else{if("lineboundary"!==o){const o=n.getBlockOrder(),r=o.indexOf(c.blockId),i="forward"===e?r+1:r-1;if(i<0||i>=o.length)return null;const s=o[i];if(!s)return null;if(!a(n,c.blockId,s))return null;if(f(n,s))return null;const u=n.getBlock(s);if(!u)return null;const h="forward"===e?0:t(u);return d(n,l.anchor.blockId,l.anchor.offset,s,h)}u="forward"===e?t(s):0}return d(n,l.anchor.blockId,l.anchor.offset,c.blockId,u)}function lt(t,n){return et(t,n,"forward","word")}function ct(t,n){return et(t,n,"backward","word")}function st(t,n){return et(t,n,"backward","lineboundary")}function at(t,n){return et(t,n,"forward","lineboundary")}function ft(t,n){return et(t,n,"backward","line")}function ut(t,n){return et(t,n,"forward","line")}function dt(t,n){return ot(t,n,"forward","word")}function ht(t,n){return ot(t,n,"backward","word")}function mt(t,n){return ot(t,n,"backward","lineboundary")}function gt(t,n){return ot(t,n,"forward","lineboundary")}function kt(t,n){return ot(t,n,"backward","line")}function bt(t,n){return ot(t,n,"forward","line")}const wt={paragraph:"Paragraph",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",codeBlock:"Code Block",blockquote:"Block Quote",listItem:"List Item",horizontalRule:"Horizontal Rule",image:"Image",table:"Table"},It={paragraph:"paragraph",code_block:"codeBlock",blockquote:"blockquote",list_item:"listItem",horizontal_rule:"horizontalRule",image:"image",table:"table"},pt=/* @__PURE__ */Object.assign({"./locales/ar.ts":()=>import("./ar-D8adM2Uy.mjs"),"./locales/de.ts":()=>import("./de-BT9VmwoJ.mjs"),"./locales/es.ts":()=>import("./es-yXjjcxgb.mjs"),"./locales/fr.ts":()=>import("./fr-DNwLChcm.mjs"),"./locales/hi.ts":()=>import("./hi-FH3CAJuR.mjs"),"./locales/pt.ts":()=>import("./pt-Cem2WxUk.mjs"),"./locales/ru.ts":()=>import("./ru-Bdy1lLuc.mjs"),"./locales/zh.ts":()=>import("./zh-BnOxGKxF.mjs")});async function yt(t){if("en"===t)return wt;const n=pt[`./locales/${t}.ts`];if(!n)return wt;try{return(await n()).default}catch{return wt}}const Nt={"word:forward":lt,"word:backward":ct,"lineboundary:forward":at,"lineboundary:backward":st,"line:forward":ut,"line:backward":ft},vt={"word:forward":dt,"word:backward":ht,"lineboundary:forward":gt,"lineboundary:backward":mt,"line:forward":bt,"line:backward":kt};class xt{id="caret-navigation";name="Caret Navigation";priority=4;context=null;lastAnnouncedBlockId=null;announceTimer=null;announce=null;locale=wt;async init(t){const n=t.getService(m),e=n?.getLocale()??"en";this.locale="en"===e?wt:await yt(e),this.context=t,this.announce=n=>t.announce(n);const o=k(),r={"Shift-ArrowRight":()=>this.extendCharacterVisual("right"),"Shift-ArrowLeft":()=>this.extendCharacterVisual("left"),"Shift-ArrowUp":()=>this.viewExtendCommand("backward","line"),"Shift-ArrowDown":()=>this.viewExtendCommand("forward","line"),...o?{"Alt-ArrowRight":()=>this.viewMoveVisual("right","word"),"Alt-ArrowLeft":()=>this.viewMoveVisual("left","word"),"Shift-Alt-ArrowRight":()=>this.viewExtendVisual("right","word"),"Shift-Alt-ArrowLeft":()=>this.viewExtendVisual("left","word")}:{"Mod-ArrowRight":()=>this.viewMoveVisual("right","word"),"Mod-ArrowLeft":()=>this.viewMoveVisual("left","word"),"Mod-Shift-ArrowRight":()=>this.viewExtendVisual("right","word"),"Mod-Shift-ArrowLeft":()=>this.viewExtendVisual("left","word")},...o?{"Mod-ArrowLeft":()=>this.viewMoveVisual("left","lineboundary"),"Mod-ArrowRight":()=>this.viewMoveVisual("right","lineboundary"),"Mod-Shift-ArrowLeft":()=>this.viewExtendVisual("left","lineboundary"),"Mod-Shift-ArrowRight":()=>this.viewExtendVisual("right","lineboundary")}:{Home:()=>this.viewMoveCommand("backward","lineboundary"),End:()=>this.viewMoveCommand("forward","lineboundary"),"Shift-Home":()=>this.viewExtendCommand("backward","lineboundary"),"Shift-End":()=>this.viewExtendCommand("forward","lineboundary")},...o?{"Mod-ArrowUp":()=>this.modelCommand(B),"Mod-ArrowDown":()=>this.modelCommand(O),"Mod-Shift-ArrowUp":()=>this.modelCommand(H),"Mod-Shift-ArrowDown":()=>this.modelCommand(V)}:{"Mod-Home":()=>this.modelCommand(B),"Mod-End":()=>this.modelCommand(O),"Mod-Shift-Home":()=>this.modelCommand(H),"Mod-Shift-End":()=>this.modelCommand(V)}};t.registerKeymap(r,{priority:"navigation"})}onStateChange(t,n,e){const o=n.selection;if(!l(o)||r(o)||i(o))return null!==this.announceTimer&&(clearTimeout(this.announceTimer),this.announceTimer=null),void(this.lastAnnouncedBlockId=null);const c=o.anchor.blockId;c!==this.lastAnnouncedBlockId&&(null!==this.lastAnnouncedBlockId?(this.lastAnnouncedBlockId=c,null!==this.announceTimer&&clearTimeout(this.announceTimer),this.announceTimer=setTimeout(()=>{if(this.announceTimer=null,this.context?.hasAnnouncement())return;const t=n.getBlock(c);if(!t)return;const e=function(t,n,e){if("heading"===n&&e?.level){const n=`heading${e.level}`;if(n in t)return t[n]}const o=It[n];return o?t[o]:n}(this.locale,t.type,t.attrs);this.announce?.(e)},150)):this.lastAnnouncedBlockId=c)}destroy(){null!==this.announceTimer&&clearTimeout(this.announceTimer),this.announceTimer=null,this.announce=null,this.context=null}modelCommand(t){if(!this.context)return!1;const n=t(this.context.getState());return!!n&&(this.context.dispatch(n),!0)}extendCharacterVisual(t){if(!this.context)return!1;const n=this.context.getState(),e="forward"===this.resolveLogicalHorizontalDirection(n,t)?M(n):S(n);return!!e&&(this.context.dispatch(e),!0)}viewMoveCommand(t,n){return this.dispatchViewCommand(Nt,t,n)}viewMoveVisual(t,n){if(!this.context)return!1;const e=this.resolveLogicalHorizontalDirection(this.context.getState(),t);return this.viewMoveCommand(e,n)}viewExtendCommand(t,n){return this.dispatchViewCommand(vt,t,n)}dispatchViewCommand(t,n,e){if(!this.context)return!1;const o=t[`${e}:${n}`];if(!o)return!1;const r=o(this.context.getContainer(),this.context.getState());return!!r&&(this.context.dispatch(r),!0)}viewExtendVisual(t,n){if(!this.context)return!1;const e=this.resolveLogicalHorizontalDirection(this.context.getState(),t);return this.viewExtendCommand(e,n)}resolveLogicalHorizontalDirection(t,n){const e=t.selection;if(r(e)||i(e))return"left"===n?"backward":"forward";const o=this.context?.getContainer();if(!o)return"left"===n?"backward":"forward";const l=o.querySelector(`[data-block-id="${e.head.blockId}"]`);return l instanceof HTMLElement&&"rtl"===g(l)?"left"===n?"forward":"backward":"left"===n?"backward":"forward"}}export{ct as A,lt as B,W as C,G as D,I as E,p as F,Y as G,ot as H,et as I,wt as J,xt as K,yt as L,D as M,F as N,P as O,q as P,j as Q,$ as R,S as a,M as b,bt as c,kt as d,U as e,R as f,L as g,V as h,H as i,gt as j,mt as k,ht as l,dt as m,v as n,x as o,Z as p,C as q,T as r,ut as s,ft as t,N as u,y as v,O as w,B as x,at as y,st as z};
|
|
2
|
+
//# sourceMappingURL=index-DAoSt12h.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DAoSt12h.mjs","sources":["../../src/model/GraphemeUtils.ts","../../src/state/BlockBoundaryMovement.ts","../../src/model/WordBoundary.ts","../../src/commands/MovementCommands.ts","../../src/view/DomPointUtils.ts","../../src/view/SelectionSync.ts","../../src/view/CaretNavigation.ts","../../src/view/ViewMovementCommands.ts","../../src/plugins/caret-navigation/CaretNavigationLocale.ts","../../src/plugins/caret-navigation/CaretNavigationPlugin.ts"],"sourcesContent":["/**\n * Grapheme-cluster utilities for correct character navigation.\n *\n * Uses `Intl.Segmenter` (with `granularity: 'grapheme'`) to correctly\n * handle multi-code-unit characters such as emoji, ZWJ sequences, and\n * combining characters. Falls back to +1/-1 when `Intl.Segmenter` is\n * not available.\n */\n\nconst SEGMENTER_SUPPORTED: boolean = typeof Intl !== 'undefined' && 'Segmenter' in Intl;\nconst SEGMENTER: Intl.Segmenter | null = SEGMENTER_SUPPORTED\n\t? new Intl.Segmenter(undefined, { granularity: 'grapheme' })\n\t: null;\n\n/**\n * Returns the number of UTF-16 code units in the next grapheme cluster\n * starting at `offset`. Returns 0 if `offset` is at or past the end.\n */\nexport function nextGraphemeSize(text: string, offset: number): number {\n\tif (offset >= text.length || text.length === 0) return 0;\n\n\tif (SEGMENTER) {\n\t\tfor (const segment of SEGMENTER.segment(text)) {\n\t\t\tif (segment.index >= offset) {\n\t\t\t\treturn segment.segment.length;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\treturn 1;\n}\n\n/**\n * Returns the number of UTF-16 code units in the grapheme cluster\n * immediately before `offset`. Returns 0 if `offset` is 0 or the\n * string is empty.\n */\nexport function prevGraphemeSize(text: string, offset: number): number {\n\tif (offset <= 0 || text.length === 0) return 0;\n\n\tif (SEGMENTER) {\n\t\tlet lastSize = 1;\n\t\tfor (const segment of SEGMENTER.segment(text)) {\n\t\t\tif (segment.index + segment.segment.length >= offset) {\n\t\t\t\tlastSize = segment.segment.length;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastSize = segment.segment.length;\n\t\t}\n\t\treturn lastSize;\n\t}\n\n\treturn 1;\n}\n","/**\n * Block boundary movement: pure state-level functions for moving\n * the cursor to the start or end of the current block.\n *\n * These only depend on model/ and state/ types, so they belong\n * at the state layer rather than in commands/.\n */\n\nimport { getBlockLength } from '../model/Document.js';\nimport { isCollapsed, isGapCursor, isNodeSelection } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport type { EditorState } from './EditorState.js';\nimport { moveTx } from './SelectionTransactions.js';\nimport type { Transaction } from './Transaction.js';\n\n/** Moves the cursor to the start of the current block. */\nexport function moveToBlockStart(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockId: BlockId = isCollapsed(sel) ? sel.anchor.blockId : sel.head.blockId;\n\tconst offset: number = isCollapsed(sel) ? sel.anchor.offset : sel.head.offset;\n\n\tif (offset === 0) return null;\n\treturn moveTx(state, blockId, 0);\n}\n\n/** Moves the cursor to the end of the current block. */\nexport function moveToBlockEnd(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockId: BlockId = isCollapsed(sel) ? sel.anchor.blockId : sel.head.blockId;\n\tconst block = state.getBlock(blockId);\n\tif (!block) return null;\n\n\tconst blockLen: number = getBlockLength(block);\n\tconst offset: number = isCollapsed(sel) ? sel.anchor.offset : sel.head.offset;\n\n\tif (offset === blockLen) return null;\n\treturn moveTx(state, blockId, blockLen);\n}\n","/**\n * Word boundary detection for delete-word and word-movement commands.\n * InlineNodes act as word boundaries.\n */\n\nimport { type BlockNode, getBlockLength, getContentAtOffset } from './Document.js';\n\n/**\n * Finds the word boundary backward from the given offset.\n * InlineNodes act as word boundaries.\n */\nexport function findWordBoundaryBackward(block: BlockNode, offset: number): number {\n\tlet pos = offset - 1;\n\t// Skip trailing whitespace\n\twhile (pos >= 0) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (!/\\s/.test(content.char)) break;\n\t\tpos--;\n\t}\n\t// If at InlineNode, delete just it (treat as word boundary)\n\tif (pos >= 0) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (content?.kind === 'inline') return pos;\n\t}\n\t// Skip word characters until whitespace or InlineNode\n\twhile (pos >= 0) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (/\\s/.test(content.char)) break;\n\t\tpos--;\n\t}\n\treturn pos + 1;\n}\n\n/**\n * Finds the word boundary forward from the given offset.\n * InlineNodes act as word boundaries.\n */\nexport function findWordBoundaryForward(block: BlockNode, offset: number): number {\n\tconst len = getBlockLength(block);\n\tlet pos = offset;\n\t// Skip word characters first\n\twhile (pos < len) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (/\\s/.test(content.char)) break;\n\t\tpos++;\n\t}\n\t// If at InlineNode and haven't moved, delete just the InlineNode\n\tif (pos === offset && pos < len) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (content?.kind === 'inline') return pos + 1;\n\t}\n\t// Skip trailing whitespace\n\twhile (pos < len) {\n\t\tconst content = getContentAtOffset(block, pos);\n\t\tif (!content || content.kind === 'inline') break;\n\t\tif (!/\\s/.test(content.char)) break;\n\t\tpos++;\n\t}\n\treturn pos;\n}\n","/**\n * Model-based movement commands for programmatic cursor navigation.\n *\n * All functions are pure: they take an EditorState and return a Transaction\n * or `null` (when the movement is not applicable). None touch the DOM.\n *\n * Move commands produce a collapsed cursor. Extend commands keep the anchor\n * and move the head, producing a range selection. All clear storedMarks.\n */\n\nimport {\n\tblockOffsetToTextOffset,\n\tgetBlockLength,\n\tgetBlockText,\n\tgetContentAtOffset,\n} from '../model/Document.js';\nimport { nextGraphemeSize, prevGraphemeSize } from '../model/GraphemeUtils.js';\nimport { isCollapsed, isGapCursor, isNodeSelection } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport type { EditorState } from '../state/EditorState.js';\nimport { canCrossBlockBoundary, isVoidBlock } from '../state/NavigationQueries.js';\nimport { extendTx, moveTx, nodeSelTx } from '../state/SelectionTransactions.js';\nimport type { Transaction } from '../state/Transaction.js';\n\n// Re-export block boundary movement from state layer\nexport { moveToBlockEnd, moveToBlockStart } from '../state/BlockBoundaryMovement.js';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Resolves the effective head position from any text selection. */\nfunction resolveHead(state: EditorState): { blockId: BlockId; offset: number } | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\treturn { blockId: sel.head.blockId, offset: sel.head.offset };\n}\n\n/** Returns the adjacent block ID in the given direction, or `null`. */\nfunction adjacentBlockId(\n\tstate: EditorState,\n\tcurrentBlockId: BlockId,\n\tdirection: 'forward' | 'backward',\n): BlockId | null {\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst idx: number = blockOrder.indexOf(currentBlockId);\n\tif (idx < 0) return null;\n\tconst targetIdx: number = direction === 'forward' ? idx + 1 : idx - 1;\n\tif (targetIdx < 0 || targetIdx >= blockOrder.length) return null;\n\treturn blockOrder[targetIdx] ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// Character Movement\n// ---------------------------------------------------------------------------\n\n/** Moves the cursor one character forward, skipping InlineNodes atomically. */\nexport function moveCharacterForward(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\t// If range selection, collapse to head\n\tif (!isCollapsed(sel)) {\n\t\treturn moveTx(state, sel.head.blockId, sel.head.offset);\n\t}\n\n\tconst blockId: BlockId = sel.anchor.blockId;\n\tconst block = state.getBlock(blockId);\n\tif (!block) return null;\n\n\tconst offset: number = sel.anchor.offset;\n\tconst blockLen: number = getBlockLength(block);\n\n\tif (offset < blockLen) {\n\t\t// InlineNode: skip atomically (+1)\n\t\tconst content = getContentAtOffset(block, offset);\n\t\tif (content?.kind === 'inline') {\n\t\t\treturn moveTx(state, blockId, offset + 1);\n\t\t}\n\t\t// Text: advance by one grapheme cluster\n\t\tconst text: string = getBlockText(block);\n\t\tconst textOffset: number = blockOffsetToTextOffset(block, offset);\n\t\tconst step: number = nextGraphemeSize(text, textOffset) || 1;\n\t\treturn moveTx(state, blockId, offset + step);\n\t}\n\n\t// At block end → cross-block\n\tconst nextId: BlockId | null = adjacentBlockId(state, blockId, 'forward');\n\tif (!nextId) return null;\n\tif (!canCrossBlockBoundary(state, blockId, nextId)) return null;\n\n\tif (isVoidBlock(state, nextId)) return nodeSelTx(state, nextId);\n\n\treturn moveTx(state, nextId, 0);\n}\n\n/** Moves the cursor one character backward, skipping InlineNodes atomically. */\nexport function moveCharacterBackward(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\t// If range selection, collapse to head\n\tif (!isCollapsed(sel)) {\n\t\treturn moveTx(state, sel.head.blockId, sel.head.offset);\n\t}\n\n\tconst blockId: BlockId = sel.anchor.blockId;\n\tconst block = state.getBlock(blockId);\n\tif (!block) return null;\n\n\tconst offset: number = sel.anchor.offset;\n\n\tif (offset > 0) {\n\t\t// InlineNode: skip atomically (-1)\n\t\tconst content = getContentAtOffset(block, offset - 1);\n\t\tif (content?.kind === 'inline') {\n\t\t\treturn moveTx(state, blockId, offset - 1);\n\t\t}\n\t\t// Text: retreat by one grapheme cluster\n\t\tconst text: string = getBlockText(block);\n\t\tconst textOffset: number = blockOffsetToTextOffset(block, offset);\n\t\tconst step: number = prevGraphemeSize(text, textOffset) || 1;\n\t\treturn moveTx(state, blockId, offset - step);\n\t}\n\n\t// At block start → cross-block\n\tconst prevId: BlockId | null = adjacentBlockId(state, blockId, 'backward');\n\tif (!prevId) return null;\n\tif (!canCrossBlockBoundary(state, blockId, prevId)) return null;\n\n\tif (isVoidBlock(state, prevId)) return nodeSelTx(state, prevId);\n\n\tconst prevBlock = state.getBlock(prevId);\n\tif (!prevBlock) return null;\n\treturn moveTx(state, prevId, getBlockLength(prevBlock));\n}\n\n// ---------------------------------------------------------------------------\n// Document Boundary Movement\n// ---------------------------------------------------------------------------\n\n/** Moves the cursor to the beginning of the document. */\nexport function moveToDocumentStart(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst firstId: BlockId | undefined = blockOrder[0];\n\tif (!firstId) return null;\n\n\tif (isVoidBlock(state, firstId)) return nodeSelTx(state, firstId);\n\n\treturn moveTx(state, firstId, 0);\n}\n\n/** Moves the cursor to the end of the document. */\nexport function moveToDocumentEnd(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst lastId: BlockId | undefined = blockOrder[blockOrder.length - 1];\n\tif (!lastId) return null;\n\n\tif (isVoidBlock(state, lastId)) return nodeSelTx(state, lastId);\n\n\tconst lastBlock = state.getBlock(lastId);\n\tif (!lastBlock) return null;\n\treturn moveTx(state, lastId, getBlockLength(lastBlock));\n}\n\n// ---------------------------------------------------------------------------\n// Extend (Selection Extension) Commands\n// ---------------------------------------------------------------------------\n\n/** Extends the selection one character forward. */\nexport function extendCharacterForward(state: EditorState): Transaction | null {\n\tconst head = resolveHead(state);\n\tif (!head) return null;\n\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst block = state.getBlock(head.blockId);\n\tif (!block) return null;\n\n\tconst blockLen: number = getBlockLength(block);\n\n\tif (head.offset < blockLen) {\n\t\tconst content = getContentAtOffset(block, head.offset);\n\t\tconst step: number =\n\t\t\tcontent?.kind === 'inline'\n\t\t\t\t? 1\n\t\t\t\t: nextGraphemeSize(getBlockText(block), blockOffsetToTextOffset(block, head.offset)) || 1;\n\t\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, head.blockId, head.offset + step);\n\t}\n\n\t// Cross-block\n\tconst nextId: BlockId | null = adjacentBlockId(state, head.blockId, 'forward');\n\tif (!nextId) return null;\n\tif (!canCrossBlockBoundary(state, head.blockId, nextId)) return null;\n\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, nextId, 0);\n}\n\n/** Extends the selection one character backward. */\nexport function extendCharacterBackward(state: EditorState): Transaction | null {\n\tconst head = resolveHead(state);\n\tif (!head) return null;\n\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tif (head.offset > 0) {\n\t\tconst block = state.getBlock(head.blockId);\n\t\tif (!block) return null;\n\t\tconst content = getContentAtOffset(block, head.offset - 1);\n\t\tconst step: number =\n\t\t\tcontent?.kind === 'inline'\n\t\t\t\t? 1\n\t\t\t\t: prevGraphemeSize(getBlockText(block), blockOffsetToTextOffset(block, head.offset)) || 1;\n\t\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, head.blockId, head.offset - step);\n\t}\n\n\t// Cross-block\n\tconst prevId: BlockId | null = adjacentBlockId(state, head.blockId, 'backward');\n\tif (!prevId) return null;\n\tif (!canCrossBlockBoundary(state, head.blockId, prevId)) return null;\n\n\tconst prevBlock = state.getBlock(prevId);\n\tif (!prevBlock) return null;\n\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, prevId, getBlockLength(prevBlock));\n}\n\n/** Extends the selection to the start of the current block. */\nexport function extendToBlockStart(state: EditorState): Transaction | null {\n\tconst head = resolveHead(state);\n\tif (!head) return null;\n\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tif (head.offset === 0) return null;\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, head.blockId, 0);\n}\n\n/** Extends the selection to the end of the current block. */\nexport function extendToBlockEnd(state: EditorState): Transaction | null {\n\tconst head = resolveHead(state);\n\tif (!head) return null;\n\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst block = state.getBlock(head.blockId);\n\tif (!block) return null;\n\n\tconst blockLen: number = getBlockLength(block);\n\tif (head.offset === blockLen) return null;\n\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, head.blockId, blockLen);\n}\n\n/** Extends the selection to the start of the document. */\nexport function extendToDocumentStart(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst firstId: BlockId | undefined = blockOrder[0];\n\tif (!firstId) return null;\n\n\t// No-op if head is already at document start\n\tif (sel.head.blockId === firstId && sel.head.offset === 0) return null;\n\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, firstId, 0);\n}\n\n/** Extends the selection to the end of the document. */\nexport function extendToDocumentEnd(state: EditorState): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst lastId: BlockId | undefined = blockOrder[blockOrder.length - 1];\n\tif (!lastId) return null;\n\n\tconst lastBlock = state.getBlock(lastId);\n\tif (!lastBlock) return null;\n\n\tconst lastBlockLen: number = getBlockLength(lastBlock);\n\n\t// No-op if head is already at document end\n\tif (sel.head.blockId === lastId && sel.head.offset === lastBlockLen) return null;\n\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, lastId, lastBlockLen);\n}\n","/**\n * Utilities for resolving a DOM position from screen coordinates.\n *\n * Provides a fallback chain: `caretPositionFromPoint` → `caretRangeFromPoint`\n * → document fallback (when root is a ShadowRoot).\n */\n\n/** Result of resolving a DOM position from screen coordinates. */\nexport interface DomPoint {\n\treadonly node: Node;\n\treadonly offset: number;\n}\n\n/**\n * Resolves a DOM position from screen coordinates using the best available API.\n *\n * Tries `caretPositionFromPoint` first (standard), then `caretRangeFromPoint`\n * (WebKit fallback), and finally tries the ownerDocument when the root is\n * a ShadowRoot and the first two returned nothing.\n */\nexport function domPositionFromPoint(\n\troot: Document | ShadowRoot,\n\tx: number,\n\ty: number,\n\townerDoc?: Document,\n): DomPoint | null {\n\tlet domNode: Node | null = null;\n\tlet domOffset = 0;\n\n\t// Standard API\n\tif ('caretPositionFromPoint' in root) {\n\t\tconst cp = (root as Document).caretPositionFromPoint(x, y);\n\t\tif (cp) {\n\t\t\tdomNode = cp.offsetNode;\n\t\t\tdomOffset = cp.offset;\n\t\t}\n\t}\n\n\t// Fallback\n\tif (!domNode && 'caretRangeFromPoint' in root) {\n\t\tconst range = (root as Document).caretRangeFromPoint(x, y);\n\t\tif (range) {\n\t\t\tdomNode = range.startContainer;\n\t\t\tdomOffset = range.startOffset;\n\t\t}\n\t}\n\n\t// Also try on the document when the root is a ShadowRoot and returned nothing\n\tif (!domNode && ownerDoc && root !== ownerDoc) {\n\t\tif ('caretRangeFromPoint' in ownerDoc) {\n\t\t\tconst range = ownerDoc.caretRangeFromPoint(x, y);\n\t\t\tif (range) {\n\t\t\t\tdomNode = range.startContainer;\n\t\t\t\tdomOffset = range.startOffset;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!domNode) return null;\n\treturn { node: domNode, offset: domOffset };\n}\n","/**\n * Selection synchronization between editor state and DOM.\n */\n\nimport type { EditorSelection, Position, Selection } from '../model/Selection.js';\nimport {\n\tcreatePosition,\n\tcreateSelection,\n\tisGapCursor,\n\tisNodeSelection,\n} from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport { blockId as toBlockId } from '../model/TypeBrands.js';\n\ninterface DOMPosition {\n\tnode: Node;\n\toffset: number;\n}\n\n/** Gets the selection object for writing (collapse, setBaseAndExtent). */\nexport function getSelection(): globalThis.Selection | null {\n\treturn window.getSelection();\n}\n\n/**\n * Endpoints returned by reading selection via getComposedRanges().\n * Used to correctly read selection inside Shadow DOM on Safari 17+,\n * Chrome 137+, and Firefox 142+.\n */\nexport interface SelectionEndpoints {\n\tanchorNode: Node;\n\tanchorOffset: number;\n\tfocusNode: Node;\n\tfocusOffset: number;\n}\n\n/**\n * Reads the selection endpoints using getComposedRanges() when inside a\n * Shadow DOM. Returns null if not in a shadow root or the API is unavailable.\n *\n * Handles two call signatures:\n * - Modern (Chrome 137+, Firefox 142+): sel.getComposedRanges({ shadowRoots: [root] })\n * - Legacy (Safari 17+): sel.getComposedRanges(root)\n *\n * StaticRange always uses document order. When `Selection.direction` is\n * `\"backward\"`, anchor/focus are swapped to reconstruct the correct\n * directional endpoints. When direction is `\"none\"` or absent the\n * forward (document-order) mapping is used.\n *\n * Note: Safari 17–18 supports getComposedRanges but not\n * Selection.direction — backward selections will be read as forward.\n */\nexport function readComposedSelection(\n\tcontainer: HTMLElement,\n\tsel: globalThis.Selection,\n): SelectionEndpoints | null {\n\tconst root = container.getRootNode();\n\tif (!(root instanceof ShadowRoot)) return null;\n\tif (!('getComposedRanges' in sel)) return null;\n\n\tlet ranges: StaticRange[];\n\ttry {\n\t\t// Modern syntax (Chrome 137+, Firefox 142+)\n\t\tranges = (\n\t\t\tsel as unknown as {\n\t\t\t\tgetComposedRanges(opts: { shadowRoots: ShadowRoot[] }): StaticRange[];\n\t\t\t}\n\t\t).getComposedRanges({ shadowRoots: [root] });\n\t} catch {\n\t\ttry {\n\t\t\t// Legacy syntax (Safari 17+)\n\t\t\tranges = (\n\t\t\t\tsel as unknown as {\n\t\t\t\t\tgetComposedRanges(...roots: ShadowRoot[]): StaticRange[];\n\t\t\t\t}\n\t\t\t).getComposedRanges(root);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tconst range = ranges[0];\n\tif (!range) return null;\n\n\tconst isBackward: boolean =\n\t\t'direction' in sel && (sel as unknown as { direction: string }).direction === 'backward';\n\n\treturn {\n\t\tanchorNode: isBackward ? range.endContainer : range.startContainer,\n\t\tanchorOffset: isBackward ? range.endOffset : range.startOffset,\n\t\tfocusNode: isBackward ? range.startContainer : range.endContainer,\n\t\tfocusOffset: isBackward ? range.startOffset : range.endOffset,\n\t};\n}\n\n/**\n * Reads the DOM selection endpoints, preferring `getComposedRanges()` when\n * the container is inside a Shadow DOM.\n *\n * Returns `null` when `anchorNode` is unavailable (no selection).\n *\n * In Shadow DOM mode the endpoints come from a `StaticRange` which uses\n * document order. `Selection.direction` is used to reconstruct anchor/focus\n * for backward selections.\n */\nexport function readDOMSelectionEndpoints(\n\tcontainer: HTMLElement,\n\tdomSel: globalThis.Selection,\n): SelectionEndpoints | null {\n\tconst composed: SelectionEndpoints | null = readComposedSelection(container, domSel);\n\tif (composed) return composed;\n\n\tconst anchorNode: Node | null = domSel.anchorNode;\n\tif (!anchorNode) return null;\n\tconst focusNode: Node | null = domSel.focusNode;\n\tif (!focusNode) return null;\n\n\treturn {\n\t\tanchorNode,\n\t\tanchorOffset: domSel.anchorOffset,\n\t\tfocusNode,\n\t\tfocusOffset: domSel.focusOffset,\n\t};\n}\n\n/** Syncs the editor state selection to the DOM. */\nexport function syncSelectionToDOM(container: HTMLElement, selection: EditorSelection): void {\n\tconst domSel = getSelection();\n\tif (!domSel) return;\n\n\t// GapCursor: clear browser selection (gap cursor has no DOM equivalent)\n\tif (isGapCursor(selection)) {\n\t\tdomSel.removeAllRanges();\n\t\treturn;\n\t}\n\n\t// NodeSelection: select the entire block element\n\tif (isNodeSelection(selection)) {\n\t\tconst blockEl = container.querySelector(`[data-block-id=\"${selection.nodeId}\"]`);\n\t\tif (!blockEl) return;\n\t\tconst parent = blockEl.parentNode;\n\t\tif (!parent) return;\n\t\tconst childIdx = childIndexOf(parent, blockEl);\n\t\ttry {\n\t\t\tdomSel.setBaseAndExtent(parent, childIdx, parent, childIdx + 1);\n\t\t} catch {\n\t\t\t// Selection may fail if DOM is not yet rendered\n\t\t}\n\t\treturn;\n\t}\n\n\tconst anchorPos = statePositionToDOM(container, selection.anchor);\n\tconst headPos = statePositionToDOM(container, selection.head);\n\n\tif (!anchorPos || !headPos) return;\n\n\ttry {\n\t\tdomSel.setBaseAndExtent(anchorPos.node, anchorPos.offset, headPos.node, headPos.offset);\n\t} catch {\n\t\t// Selection may fail if DOM is not yet rendered\n\t}\n}\n\n/** Reads the current DOM selection and converts it to a state selection. */\nexport function readSelectionFromDOM(container: HTMLElement): Selection | null {\n\tconst domSel = getSelection();\n\tif (!domSel || domSel.rangeCount === 0) return null;\n\n\tconst endpoints: SelectionEndpoints | null = readDOMSelectionEndpoints(container, domSel);\n\tif (!endpoints) return null;\n\n\tif (!container.contains(endpoints.anchorNode) || !container.contains(endpoints.focusNode)) {\n\t\treturn null;\n\t}\n\n\tconst anchor = domPositionToState(container, endpoints.anchorNode, endpoints.anchorOffset);\n\tconst head = domPositionToState(container, endpoints.focusNode, endpoints.focusOffset);\n\n\tif (!anchor || !head) return null;\n\n\treturn createSelection(anchor, head);\n}\n\n/** Converts a state position (blockId + offset) to a DOM position (node + offset). */\nfunction statePositionToDOM(container: HTMLElement, pos: Position): DOMPosition | null {\n\t// If path is available, navigate directly to the leaf block\n\tlet blockEl: Element | null = null;\n\tif (pos.path && pos.path.length > 0) {\n\t\tlet current: Element = container;\n\t\tfor (const id of pos.path) {\n\t\t\tconst found = current.querySelector(`:scope [data-block-id=\"${id}\"]`);\n\t\t\tif (!found) break;\n\t\t\tcurrent = found;\n\t\t}\n\t\tif (current !== container && current.getAttribute('data-block-id') === pos.blockId) {\n\t\t\tblockEl = current;\n\t\t}\n\t}\n\tblockEl ??= container.querySelector(`[data-block-id=\"${pos.blockId}\"]`);\n\tif (!blockEl) return null;\n\n\t// Use contentDOM if available (NodeView blocks like code_block)\n\tconst contentEl: Element = resolveContentRoot(blockEl);\n\n\t// Handle empty paragraphs with <br>\n\tif (contentEl.childNodes.length === 1 && contentEl.firstChild?.nodeName === 'BR') {\n\t\treturn { node: contentEl, offset: 0 };\n\t}\n\n\t// Walk through text nodes and inline elements to find the correct position\n\tlet remaining = pos.offset;\n\tconst walker = createInlineContentWalker(contentEl);\n\n\tlet current = walker.nextNode();\n\twhile (current) {\n\t\tif (current.nodeType === Node.TEXT_NODE) {\n\t\t\tconst len = current.textContent?.length ?? 0;\n\t\t\tif (remaining <= len) {\n\t\t\t\treturn { node: current, offset: remaining };\n\t\t\t}\n\t\t\tremaining -= len;\n\t\t} else if (\n\t\t\tcurrent instanceof HTMLElement &&\n\t\t\tcurrent.getAttribute('contenteditable') === 'false'\n\t\t) {\n\t\t\t// InlineNode element — width 1 in state offset space\n\t\t\tif (remaining === 0) {\n\t\t\t\t// Position before this inline element\n\t\t\t\tconst parent = current.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tconst childIndex = childIndexOf(parent, current);\n\t\t\t\t\treturn { node: parent, offset: childIndex };\n\t\t\t\t}\n\t\t\t}\n\t\t\tremaining -= 1;\n\t\t}\n\t\tcurrent = walker.nextNode();\n\t}\n\n\t// Fallback: position at end of block\n\tconst lastChild = contentEl.lastChild;\n\tif (lastChild) {\n\t\tif (lastChild.nodeType === Node.TEXT_NODE) {\n\t\t\treturn { node: lastChild, offset: lastChild.textContent?.length ?? 0 };\n\t\t}\n\t\treturn { node: contentEl, offset: contentEl.childNodes.length };\n\t}\n\n\treturn { node: contentEl, offset: 0 };\n}\n\n/** Converts a DOM position to a state position, including nested path. */\nexport function domPositionToState(\n\tcontainer: HTMLElement,\n\tnode: Node,\n\tdomOffset: number,\n): Position | null {\n\t// Find the innermost block element\n\tconst blockEl = findBlockElement(container, node);\n\tif (!blockEl) return null;\n\n\tconst rawBlockId = blockEl.getAttribute('data-block-id');\n\tif (!rawBlockId) return null;\n\tconst bid = toBlockId(rawBlockId);\n\n\t// Build path by collecting all data-block-id ancestors from leaf to root\n\tconst path = buildBlockPath(container, blockEl);\n\n\t// Use contentDOM if available (NodeView blocks like code_block)\n\tconst contentEl: Element = resolveContentRoot(blockEl);\n\n\t// Handle clicks on the block or content element itself (e.g. empty paragraph with <br>)\n\tif (node === blockEl || node === contentEl) {\n\t\tconst targetEl: Element = node === contentEl ? contentEl : blockEl;\n\t\tlet childOffset = 0;\n\t\tlet childIdx = 0;\n\t\tfor (const child of Array.from(targetEl.childNodes)) {\n\t\t\tif (childIdx >= domOffset) break;\n\t\t\tchildOffset += inlineContentWidth(child);\n\t\t\tchildIdx++;\n\t\t}\n\t\treturn createPosition(bid, childOffset, path.length > 1 ? path : undefined);\n\t}\n\n\t// If node is outside the contentDOM (e.g. in NodeView header), map to offset 0\n\tif (contentEl !== blockEl && !contentEl.contains(node)) {\n\t\treturn createPosition(bid, 0, path.length > 1 ? path : undefined);\n\t}\n\n\t// Calculate offset by walking text nodes and inline elements\n\tlet offset = 0;\n\tconst walker = createInlineContentWalker(contentEl);\n\n\tlet walkerNode = walker.nextNode();\n\twhile (walkerNode) {\n\t\tif (walkerNode === node) {\n\t\t\tif (walkerNode.nodeType === Node.TEXT_NODE) {\n\t\t\t\treturn createPosition(bid, offset + domOffset, path.length > 1 ? path : undefined);\n\t\t\t}\n\t\t\t// Node is an inline element — return offset at its start\n\t\t\treturn createPosition(bid, offset, path.length > 1 ? path : undefined);\n\t\t}\n\t\tif (walkerNode.nodeType === Node.TEXT_NODE) {\n\t\t\toffset += walkerNode.textContent?.length ?? 0;\n\t\t} else if (\n\t\t\twalkerNode instanceof HTMLElement &&\n\t\t\twalkerNode.getAttribute('contenteditable') === 'false'\n\t\t) {\n\t\t\toffset += 1;\n\t\t}\n\t\twalkerNode = walker.nextNode();\n\t}\n\n\t// If the node is not a text node, try to find the offset from element context\n\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\tlet childOffset = 0;\n\t\tlet childIdx = 0;\n\n\t\tfor (const child of Array.from(node.childNodes)) {\n\t\t\tif (childIdx >= domOffset) break;\n\t\t\tchildOffset += inlineContentWidth(child);\n\t\t\tchildIdx++;\n\t\t}\n\n\t\treturn createPosition(bid, childOffset, path.length > 1 ? path : undefined);\n\t}\n\n\treturn createPosition(bid, 0, path.length > 1 ? path : undefined);\n}\n\n/** Builds an array of block IDs from root to leaf by walking up from a block element. */\nfunction buildBlockPath(container: HTMLElement, leafBlockEl: HTMLElement): BlockId[] {\n\tconst path: BlockId[] = [];\n\tlet current: HTMLElement | null = leafBlockEl;\n\n\twhile (current && current !== container) {\n\t\tif (current.hasAttribute('data-block-id')) {\n\t\t\tpath.unshift(toBlockId(current.getAttribute('data-block-id') ?? ''));\n\t\t}\n\t\tcurrent = current.parentElement;\n\t}\n\n\treturn path;\n}\n\n/** Finds the closest block element ancestor. */\nfunction findBlockElement(container: HTMLElement, node: Node): HTMLElement | null {\n\tlet current: Node | null = node;\n\twhile (current && current !== container) {\n\t\tif (current instanceof HTMLElement && current.hasAttribute('data-block-id')) {\n\t\t\treturn current;\n\t\t}\n\t\tcurrent = current.parentNode;\n\t}\n\treturn null;\n}\n\n/** Checks if a node is inside a contentEditable=\"false\" inline element. */\nfunction isInsideInlineElement(node: Node, root: Element): boolean {\n\tlet parent: Node | null = node.parentNode;\n\twhile (parent && parent !== root) {\n\t\tif (parent instanceof HTMLElement && parent.getAttribute('contenteditable') === 'false') {\n\t\t\treturn true;\n\t\t}\n\t\tparent = parent.parentNode;\n\t}\n\treturn false;\n}\n\n/**\n * Creates a TreeWalker that visits text nodes and contentEditable=\"false\"\n * inline elements within a block, skipping mark wrappers and nested blocks.\n */\nfunction createInlineContentWalker(blockEl: Element): TreeWalker {\n\treturn document.createTreeWalker(blockEl, NodeFilter.SHOW_ALL, {\n\t\tacceptNode: (n: Node) => {\n\t\t\t// Skip cursor wrapper (ZWS for stored marks during IME composition)\n\t\t\tif (n instanceof HTMLElement && n.hasAttribute('data-cursor-wrapper')) {\n\t\t\t\treturn NodeFilter.FILTER_REJECT;\n\t\t\t}\n\t\t\t// Skip anything inside an inline element (contentEditable=\"false\")\n\t\t\tif (isInsideInlineElement(n, blockEl)) return NodeFilter.FILTER_REJECT;\n\t\t\t// Skip nested block elements and their descendants\n\t\t\tif (n instanceof HTMLElement && n.hasAttribute('data-block-id') && n !== blockEl) {\n\t\t\t\treturn NodeFilter.FILTER_REJECT;\n\t\t\t}\n\t\t\t// Accept text nodes\n\t\t\tif (n.nodeType === Node.TEXT_NODE) return NodeFilter.FILTER_ACCEPT;\n\t\t\t// Accept inline elements (contentEditable=\"false\")\n\t\t\tif (n instanceof HTMLElement && n.getAttribute('contenteditable') === 'false') {\n\t\t\t\treturn NodeFilter.FILTER_ACCEPT;\n\t\t\t}\n\t\t\t// Skip other elements (mark wrappers, decoration wrappers) — descend\n\t\t\treturn NodeFilter.FILTER_SKIP;\n\t\t},\n\t});\n}\n\n/** Returns the child index of a node within its parent. */\nfunction childIndexOf(parent: Node, child: Node): number {\n\tlet idx = 0;\n\tfor (const c of Array.from(parent.childNodes)) {\n\t\tif (c === child) return idx;\n\t\tidx++;\n\t}\n\treturn idx;\n}\n\n/**\n * Resolves the content root for inline content walking.\n * If the block element has a contentDOM (marked with data-content-dom),\n * returns it so the walker skips NodeView structural elements (headers, etc.).\n */\nfunction resolveContentRoot(blockEl: Element): Element {\n\tconst contentDOM: Element | null = blockEl.querySelector('[data-content-dom]');\n\treturn contentDOM ?? blockEl;\n}\n\n/** Counts the inline content width of a DOM node (text length + 1 per inline element). */\nfunction inlineContentWidth(node: Node): number {\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\treturn node.textContent?.length ?? 0;\n\t}\n\tif (node instanceof HTMLElement && node.getAttribute('contenteditable') === 'false') {\n\t\treturn 1;\n\t}\n\t// Mark wrapper or other element — sum children\n\tlet width = 0;\n\tfor (const child of Array.from(node.childNodes)) {\n\t\twidth += inlineContentWidth(child);\n\t}\n\treturn width;\n}\n","/**\n * Caret navigation utilities for layout-aware cursor movement.\n *\n * Provides `endOfTextblock()` for detecting visual block boundaries,\n * `navigateAcrossBlocks()` for cross-block cursor transitions, and\n * `navigateVerticalWithGoalColumn()` for column-preserving vertical nav.\n */\n\nimport { type BlockNode, getBlockLength, getContentAtOffset } from '../model/Document.js';\nimport { isCollapsed, isGapCursor, isNodeSelection } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport type { EditorState } from '../state/EditorState.js';\nimport { canCrossBlockBoundary, isVoidBlock } from '../state/NavigationQueries.js';\nimport { moveTx, nodeSelTx } from '../state/SelectionTransactions.js';\nimport type { Transaction } from '../state/Transaction.js';\nimport { domPositionFromPoint } from './DomPointUtils.js';\nexport { navigateFromGapCursor } from './GapCursorNavigation.js';\n\n/** Inset in pixels from block edge for vertical goal-column probing. */\nconst BLOCK_EDGE_INSET_PX = 2;\n\n/** Minimum vertical movement (pixels) for a Selection.modify probe to be considered a real move. */\nconst VERTICAL_MOVEMENT_THRESHOLD_PX = 1;\nimport { getTextDirection } from '../platform/Platform.js';\nimport type { SelectionEndpoints } from './SelectionSync.js';\nimport { domPositionToState, getSelection, readDOMSelectionEndpoints } from './SelectionSync.js';\n\nexport type CaretDirection = 'left' | 'right' | 'up' | 'down';\n\n/** Result of resolving the adjacent block for vertical navigation. */\ninterface NavigationTarget {\n\treadonly targetId: BlockId;\n\treadonly isVoid: boolean;\n}\n\n/**\n * Checks whether the cursor is at the visual edge of its text block.\n *\n * For horizontal directions (left/right), uses a pure offset check.\n * For vertical directions (up/down), tries `Selection.modify` probing\n * to detect visual line boundaries, falling back to offset heuristic.\n *\n * An optional `caretRect` parameter avoids redundant `getBoundingClientRect`\n * calls when the caller already measured the caret position.\n */\nexport function endOfTextblock(\n\tcontainer: HTMLElement,\n\tstate: EditorState,\n\tdirection: CaretDirection,\n\tcaretRect?: DOMRect | null,\n): boolean {\n\tconst sel = state.selection;\n\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return false;\n\tif (!isCollapsed(sel)) return false;\n\n\tconst block = state.getBlock(sel.anchor.blockId);\n\tif (!block) return false;\n\n\tconst offset: number = sel.anchor.offset;\n\tconst blockLength: number = getBlockLength(block);\n\n\t// Horizontal: direction-aware offset check\n\tconst blockEl: Element | null = container.querySelector(\n\t\t`[data-block-id=\"${sel.anchor.blockId}\"]`,\n\t);\n\tconst isRtl: boolean = blockEl instanceof HTMLElement && getTextDirection(blockEl) === 'rtl';\n\n\tif (direction === 'left') return isRtl ? offset === blockLength : offset === 0;\n\tif (direction === 'right') return isRtl ? offset === 0 : offset === blockLength;\n\n\t// Vertical: quick offset check first\n\tif (direction === 'up' && offset === 0) return true;\n\tif (direction === 'down' && offset === blockLength) return true;\n\n\t// Vertical: try Selection.modify probing for multi-line blocks\n\tconst domSel: globalThis.Selection | null = getSelection();\n\tif (!domSel || !domSel.modify) {\n\t\t// Fallback: offset heuristic (no Selection.modify in test environments)\n\t\treturn direction === 'up' ? offset === 0 : offset === blockLength;\n\t}\n\n\treturn probeVerticalBoundary(container, domSel, direction, caretRect);\n}\n\n/**\n * Creates a transaction to move the cursor to an adjacent block.\n *\n * Returns `null` if navigation is not possible (document boundary,\n * isolating boundary, or no adjacent block).\n */\nexport function navigateAcrossBlocks(\n\tstate: EditorState,\n\tdirection: CaretDirection,\n): Transaction | null {\n\tconst target: NavigationTarget | null = resolveNavigationTarget(state, direction);\n\tif (!target) return null;\n\n\tif (target.isVoid) return nodeSelTx(state, target.targetId);\n\n\t// Target is text → collapsed selection at start or end\n\tconst targetBlock = state.getBlock(target.targetId);\n\tif (!targetBlock) return null;\n\n\tconst targetOffset: number =\n\t\tdirection === 'right' || direction === 'down' ? 0 : getBlockLength(targetBlock);\n\n\treturn moveTx(state, target.targetId, targetOffset);\n}\n\n/**\n * Navigates vertically using a goal column for visual column preservation.\n *\n * Uses `caretPositionFromPoint` / `caretRangeFromPoint` to find the offset\n * in the target block that is closest to the given goalColumn X coordinate.\n * Falls back to start/end offset when goal column positioning is unavailable.\n */\nexport function navigateVerticalWithGoalColumn(\n\tcontainer: HTMLElement,\n\tstate: EditorState,\n\tdirection: 'up' | 'down',\n\tgoalColumn: number | null,\n): Transaction | null {\n\tconst target: NavigationTarget | null = resolveNavigationTarget(state, direction);\n\tif (!target) return null;\n\n\t// Void → NodeSelection (goalColumn irrelevant)\n\tif (target.isVoid) return nodeSelTx(state, target.targetId);\n\n\tconst targetBlock = state.getBlock(target.targetId);\n\tif (!targetBlock) return null;\n\tconst blockLen: number = getBlockLength(targetBlock);\n\n\t// Try to resolve position using goalColumn\n\tif (goalColumn !== null) {\n\t\tconst position = resolveGoalColumnPosition(container, target.targetId, direction, goalColumn);\n\t\tif (position) return moveTx(state, position.blockId, position.offset);\n\t}\n\n\t// Fallback: start (down) or end (up)\n\tconst fallbackOffset: number = direction === 'down' ? 0 : blockLen;\n\treturn moveTx(state, target.targetId, fallbackOffset);\n}\n\n/**\n * Skips over an InlineNode atomically when arrowing left/right.\n *\n * Returns a transaction moving the cursor past the InlineNode,\n * or `null` if the adjacent content is not an InlineNode (or\n * the direction is vertical).\n */\nexport function skipInlineNode(state: EditorState, direction: CaretDirection): Transaction | null {\n\tif (direction === 'up' || direction === 'down') return null;\n\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\tif (!isCollapsed(sel)) return null;\n\n\tconst blockId: BlockId = sel.anchor.blockId;\n\tconst block = state.getBlock(blockId);\n\tif (!block) return null;\n\n\tconst offset: number = sel.anchor.offset;\n\n\treturn direction === 'right'\n\t\t? skipInlineNodeRight(state, blockId, block, offset)\n\t\t: skipInlineNodeLeft(state, blockId, block, offset);\n}\n\nfunction skipInlineNodeRight(\n\tstate: EditorState,\n\tblockId: BlockId,\n\tblock: BlockNode,\n\toffset: number,\n): Transaction | null {\n\tconst content = getContentAtOffset(block, offset);\n\tif (!content || content.kind !== 'inline') return null;\n\treturn moveTx(state, blockId, offset + 1);\n}\n\nfunction skipInlineNodeLeft(\n\tstate: EditorState,\n\tblockId: BlockId,\n\tblock: BlockNode,\n\toffset: number,\n): Transaction | null {\n\tif (offset === 0) return null;\n\tconst content = getContentAtOffset(block, offset - 1);\n\tif (!content || content.kind !== 'inline') return null;\n\treturn moveTx(state, blockId, offset - 1);\n}\n\n/** Returns the bounding rect of the current caret position, or null. */\nexport function getCaretRectFromSelection(domSel: globalThis.Selection): DOMRect | null {\n\tif (domSel.rangeCount === 0) return null;\n\tconst range: Range = domSel.getRangeAt(0);\n\tconst rects: DOMRectList = range.getClientRects();\n\tif (rects.length > 0) return rects[0] ?? null;\n\treturn range.getBoundingClientRect();\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Resolves the adjacent block in the given direction for cross-block navigation.\n * Performs boundary checks, isolating checks, and void detection.\n */\nfunction resolveNavigationTarget(\n\tstate: EditorState,\n\tdirection: CaretDirection,\n): NavigationTarget | null {\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst currentIdx: number = blockOrder.indexOf(sel.anchor.blockId);\n\tif (currentIdx < 0) return null;\n\n\tconst targetIdx: number =\n\t\tdirection === 'left' || direction === 'up' ? currentIdx - 1 : currentIdx + 1;\n\n\tif (targetIdx < 0 || targetIdx >= blockOrder.length) return null;\n\n\tconst targetId: BlockId | undefined = blockOrder[targetIdx];\n\tif (!targetId) return null;\n\n\tif (!canCrossBlockBoundary(state, sel.anchor.blockId, targetId)) return null;\n\n\treturn { targetId, isVoid: isVoidBlock(state, targetId) };\n}\n\n/**\n * Resolves an editor position in the target block by using the goalColumn\n * X coordinate and `caretPositionFromPoint` / `caretRangeFromPoint`.\n *\n * Returns `null` when the point-to-caret API is unavailable, when the\n * resolved DOM node falls outside the target block, or when the resulting\n * position doesn't belong to the target block — triggering the fallback\n * (block-end for up, block-start for down) in `navigateVerticalWithGoalColumn`.\n */\nfunction resolveGoalColumnPosition(\n\tcontainer: HTMLElement,\n\ttargetId: BlockId,\n\tdirection: 'up' | 'down',\n\tgoalColumn: number,\n): { blockId: BlockId; offset: number } | null {\n\tconst blockEl: Element | null = container.querySelector(`[data-block-id=\"${targetId}\"]`);\n\tif (!blockEl) return null;\n\n\tconst rect: DOMRect = blockEl.getBoundingClientRect();\n\t// Small inset to ensure we hit inside the line, not on the border\n\tconst y: number =\n\t\tdirection === 'down' ? rect.top + BLOCK_EDGE_INSET_PX : rect.bottom - BLOCK_EDGE_INSET_PX;\n\t// Clamp goalColumn within the block's horizontal bounds to avoid\n\t// caretPositionFromPoint returning unexpected results for out-of-bounds X.\n\tconst clampedX: number = Math.min(Math.max(goalColumn, rect.left), rect.right - 1);\n\n\tconst root: Document | ShadowRoot = container.getRootNode() as Document | ShadowRoot;\n\tconst domPoint = domPositionFromPoint(root, clampedX, y, container.ownerDocument);\n\tif (!domPoint) return null;\n\n\t// Verify the DOM node is inside the target block\n\tif (!blockEl.contains(domPoint.node)) return null;\n\n\tconst position = domPositionToState(container, domPoint.node, domPoint.offset);\n\tif (!position) return null;\n\n\t// Ensure the resolved position is in the target block\n\tif (position.blockId !== targetId) return null;\n\n\treturn position;\n}\n\n/**\n * Probes whether the cursor is at the top/bottom visual line of a block.\n *\n * Strategy:\n * 1. `Selection.modify('move', direction, 'line')` — moves one visual line.\n * 2. If the cursor left the block or didn't move, it's at the boundary.\n * 3. Cross-check with `getBoundingClientRect`: compare the caret rect before\n * and after the probe. If the vertical position didn't change, the probe\n * hit the block edge even though `Selection.modify` reported movement\n * (can happen with certain inline element layouts).\n *\n * Original DOM selection is always restored before returning.\n */\nfunction probeVerticalBoundary(\n\tcontainer: HTMLElement,\n\tdomSel: globalThis.Selection,\n\tdirection: 'up' | 'down',\n\tpreReadRect?: DOMRect | null,\n): boolean {\n\t// Save original DOM selection (using composed ranges for Shadow DOM)\n\tconst origEndpoints: SelectionEndpoints | null = readDOMSelectionEndpoints(container, domSel);\n\n\t// Cannot determine position → safe default: not at boundary (let browser handle)\n\tif (!origEndpoints) return false;\n\n\tconst origRect: DOMRect | null = preReadRect ?? getCaretRectFromSelection(domSel);\n\tconst dirStr: string = direction === 'up' ? 'backward' : 'forward';\n\n\ttry {\n\t\tdomSel.modify('move', dirStr, 'line');\n\n\t\t// Read post-modify endpoints via composed ranges\n\t\tconst postEndpoints: SelectionEndpoints | null = readDOMSelectionEndpoints(container, domSel);\n\t\tif (!postEndpoints) return false;\n\n\t\t// Check if the new position is still within the same block\n\t\tconst origBlock: HTMLElement | null = findBlockAncestor(container, origEndpoints.focusNode);\n\t\tconst newBlock: HTMLElement | null = findBlockAncestor(container, postEndpoints.focusNode);\n\n\t\t// Moved to a different block → definitely at boundary\n\t\tif (origBlock !== newBlock) return true;\n\n\t\t// Selection didn't move at all → at boundary\n\t\tconst didNotMove: boolean =\n\t\t\tpostEndpoints.anchorNode === origEndpoints.anchorNode &&\n\t\t\tpostEndpoints.anchorOffset === origEndpoints.anchorOffset &&\n\t\t\tpostEndpoints.focusNode === origEndpoints.focusNode &&\n\t\t\tpostEndpoints.focusOffset === origEndpoints.focusOffset;\n\t\tif (didNotMove) return true;\n\n\t\t// Cross-check with getBoundingClientRect: if vertical position unchanged,\n\t\t// the probe was a no-op visually (edge case with inline elements)\n\t\tif (origRect) {\n\t\t\tconst newRect: DOMRect | null = getCaretRectFromSelection(domSel);\n\t\t\tif (newRect) {\n\t\t\t\tconst verticalDelta: number = Math.abs(newRect.top - origRect.top);\n\t\t\t\tif (verticalDelta < VERTICAL_MOVEMENT_THRESHOLD_PX) return true;\n\t\t\t}\n\t\t}\n\n\t\t// Stayed in same block and moved vertically → not at boundary\n\t\treturn false;\n\t} finally {\n\t\t// Restore original selection\n\t\ttry {\n\t\t\tdomSel.setBaseAndExtent(\n\t\t\t\torigEndpoints.anchorNode,\n\t\t\t\torigEndpoints.anchorOffset,\n\t\t\t\torigEndpoints.focusNode,\n\t\t\t\torigEndpoints.focusOffset,\n\t\t\t);\n\t\t} catch {\n\t\t\t// Selection restore may fail if DOM changed\n\t\t}\n\t}\n}\n\n/** Finds the closest ancestor element with `data-block-id`. */\nfunction findBlockAncestor(container: HTMLElement, node: Node): HTMLElement | null {\n\tlet current: Node | null = node;\n\twhile (current && current !== container) {\n\t\tif (current instanceof HTMLElement && current.hasAttribute('data-block-id')) {\n\t\t\treturn current;\n\t\t}\n\t\tcurrent = current.parentNode;\n\t}\n\treturn null;\n}\n","/**\n * View-based movement commands that use the browser's `Selection.modify()` API\n * for word, line-boundary, and line granularity movement.\n *\n * Falls back to model-based commands when `Selection.modify` is unavailable\n * (e.g. in happy-dom test environments).\n */\n\nimport { getBlockLength, getContentAtOffset } from '../model/Document.js';\nimport { isCollapsed, isGapCursor, isNodeSelection } from '../model/Selection.js';\nimport type { BlockId } from '../model/TypeBrands.js';\nimport { findWordBoundaryBackward, findWordBoundaryForward } from '../model/WordBoundary.js';\nimport { moveToBlockEnd, moveToBlockStart } from '../state/BlockBoundaryMovement.js';\nimport type { EditorState } from '../state/EditorState.js';\nimport { canCrossBlockBoundary, isVoidBlock } from '../state/NavigationQueries.js';\nimport { extendTx, moveTx, nodeSelTx } from '../state/SelectionTransactions.js';\nimport type { Transaction } from '../state/Transaction.js';\nimport { navigateAcrossBlocks } from './CaretNavigation.js';\nimport type { SelectionEndpoints } from './SelectionSync.js';\nimport { getSelection, readDOMSelectionEndpoints, readSelectionFromDOM } from './SelectionSync.js';\n\ntype Direction = 'forward' | 'backward';\ntype Granularity = 'word' | 'lineboundary' | 'line';\n\n// ---------------------------------------------------------------------------\n// Core view movement\n// ---------------------------------------------------------------------------\n\n/**\n * Moves the cursor using `Selection.modify('move', direction, granularity)`.\n * Falls back to model-based movement when the API is unavailable.\n */\nexport function viewMove(\n\tcontainer: HTMLElement,\n\tstate: EditorState,\n\tdirection: Direction,\n\tgranularity: Granularity,\n): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst domSel: globalThis.Selection | null = getSelection();\n\tif (!domSel?.modify) {\n\t\treturn fallbackMove(state, direction, granularity);\n\t}\n\n\t// Save original DOM selection (using composed ranges for Shadow DOM)\n\tconst origEndpoints: SelectionEndpoints | null = readDOMSelectionEndpoints(container, domSel);\n\tif (!origEndpoints) return fallbackMove(state, direction, granularity);\n\n\ttry {\n\t\tdomSel.modify('move', direction, granularity);\n\n\t\tconst newSel = readSelectionFromDOM(container);\n\t\tif (!newSel) return null;\n\n\t\tconst newBlockId: BlockId = newSel.anchor.blockId;\n\t\tconst oldBlockId: BlockId = sel.anchor.blockId;\n\n\t\t// Validate isolating boundary crossing\n\t\tif (newBlockId !== oldBlockId && !canCrossBlockBoundary(state, oldBlockId, newBlockId)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet newOffset: number = newSel.anchor.offset;\n\n\t\t// InlineNode boundary correction\n\t\tconst block = state.getBlock(newBlockId);\n\t\tif (block) {\n\t\t\tconst content = getContentAtOffset(block, newOffset);\n\t\t\tif (content?.kind === 'inline') {\n\t\t\t\t// Prefer landing after the InlineNode when moving forward\n\t\t\t\tif (direction === 'forward') {\n\t\t\t\t\tnewOffset = Math.min(newOffset + 1, getBlockLength(block));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Void block → NodeSelection\n\t\tif (isVoidBlock(state, newBlockId)) return nodeSelTx(state, newBlockId);\n\n\t\treturn moveTx(state, newBlockId, newOffset);\n\t} finally {\n\t\t// Restore original DOM selection (dispatch cycle will set the correct one)\n\t\ttry {\n\t\t\tdomSel.setBaseAndExtent(\n\t\t\t\torigEndpoints.anchorNode,\n\t\t\t\torigEndpoints.anchorOffset,\n\t\t\t\torigEndpoints.focusNode,\n\t\t\t\torigEndpoints.focusOffset,\n\t\t\t);\n\t\t} catch {\n\t\t\t// Restore may fail if DOM changed\n\t\t}\n\t}\n}\n\n/**\n * Extends the selection using `Selection.modify('extend', direction, granularity)`.\n * Falls back to model-based extension when the API is unavailable.\n */\nexport function viewExtend(\n\tcontainer: HTMLElement,\n\tstate: EditorState,\n\tdirection: Direction,\n\tgranularity: Granularity,\n): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst domSel: globalThis.Selection | null = getSelection();\n\tif (!domSel?.modify) {\n\t\treturn fallbackExtend(state, direction, granularity);\n\t}\n\n\tconst origEndpoints: SelectionEndpoints | null = readDOMSelectionEndpoints(container, domSel);\n\tif (!origEndpoints) return fallbackExtend(state, direction, granularity);\n\n\ttry {\n\t\tdomSel.modify('extend', direction, granularity);\n\n\t\tconst newSel = readSelectionFromDOM(container);\n\t\tif (!newSel) return null;\n\n\t\t// Validate isolating boundary crossing for head\n\t\tconst oldHeadBlockId: BlockId = sel.head.blockId;\n\t\tconst newHeadBlockId: BlockId = newSel.head.blockId;\n\n\t\tif (\n\t\t\tnewHeadBlockId !== oldHeadBlockId &&\n\t\t\t!canCrossBlockBoundary(state, oldHeadBlockId, newHeadBlockId)\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet newHeadOffset: number = newSel.head.offset;\n\n\t\t// InlineNode boundary correction for head position\n\t\tconst headBlock = state.getBlock(newSel.head.blockId);\n\t\tif (headBlock) {\n\t\t\tconst content = getContentAtOffset(headBlock, newHeadOffset);\n\t\t\tif (content?.kind === 'inline') {\n\t\t\t\tif (direction === 'forward') {\n\t\t\t\t\tnewHeadOffset = Math.min(newHeadOffset + 1, getBlockLength(headBlock));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn extendTx(\n\t\t\tstate,\n\t\t\tsel.anchor.blockId,\n\t\t\tsel.anchor.offset,\n\t\t\tnewSel.head.blockId,\n\t\t\tnewHeadOffset,\n\t\t);\n\t} finally {\n\t\ttry {\n\t\t\tdomSel.setBaseAndExtent(\n\t\t\t\torigEndpoints.anchorNode,\n\t\t\t\torigEndpoints.anchorOffset,\n\t\t\t\torigEndpoints.focusNode,\n\t\t\t\torigEndpoints.focusOffset,\n\t\t\t);\n\t\t} catch {\n\t\t\t// Restore may fail\n\t\t}\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Fallback (model-based) when Selection.modify is unavailable\n// ---------------------------------------------------------------------------\n\nfunction fallbackMove(\n\tstate: EditorState,\n\tdirection: Direction,\n\tgranularity: Granularity,\n): Transaction | null {\n\tif (granularity === 'word') {\n\t\treturn fallbackWordMove(state, direction);\n\t}\n\tif (granularity === 'lineboundary') {\n\t\treturn direction === 'forward' ? moveToBlockEnd(state) : moveToBlockStart(state);\n\t}\n\t// granularity === 'line' → cross-block\n\tconst caretDir = direction === 'forward' ? 'down' : 'up';\n\treturn navigateAcrossBlocks(state, caretDir);\n}\n\nfunction fallbackExtend(\n\tstate: EditorState,\n\tdirection: Direction,\n\tgranularity: Granularity,\n): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst head = sel.head;\n\tconst block = state.getBlock(head.blockId);\n\tif (!block) return null;\n\n\tlet newOffset: number = head.offset;\n\n\tif (granularity === 'word') {\n\t\tnewOffset =\n\t\t\tdirection === 'forward'\n\t\t\t\t? findWordBoundaryForward(block, head.offset)\n\t\t\t\t: findWordBoundaryBackward(block, head.offset);\n\t} else if (granularity === 'lineboundary') {\n\t\tnewOffset = direction === 'forward' ? getBlockLength(block) : 0;\n\t} else {\n\t\t// line: extend to next block boundary\n\t\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\t\tconst idx: number = blockOrder.indexOf(head.blockId);\n\t\tconst targetIdx: number = direction === 'forward' ? idx + 1 : idx - 1;\n\n\t\tif (targetIdx < 0 || targetIdx >= blockOrder.length) return null;\n\n\t\tconst targetId: BlockId | undefined = blockOrder[targetIdx];\n\t\tif (!targetId) return null;\n\t\tif (!canCrossBlockBoundary(state, head.blockId, targetId)) return null;\n\n\t\tif (isVoidBlock(state, targetId)) {\n\t\t\t// Cannot extend a text selection into a void block\n\t\t\treturn null;\n\t\t}\n\n\t\tconst targetBlock = state.getBlock(targetId);\n\t\tif (!targetBlock) return null;\n\n\t\tconst targetOffset: number = direction === 'forward' ? 0 : getBlockLength(targetBlock);\n\t\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, targetId, targetOffset);\n\t}\n\n\treturn extendTx(state, sel.anchor.blockId, sel.anchor.offset, head.blockId, newOffset);\n}\n\nfunction fallbackWordMove(state: EditorState, direction: Direction): Transaction | null {\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\n\tconst blockId: BlockId = isCollapsed(sel) ? sel.anchor.blockId : sel.head.blockId;\n\tconst offset: number = isCollapsed(sel) ? sel.anchor.offset : sel.head.offset;\n\tconst block = state.getBlock(blockId);\n\tif (!block) return null;\n\n\tconst newOffset: number =\n\t\tdirection === 'forward'\n\t\t\t? findWordBoundaryForward(block, offset)\n\t\t\t: findWordBoundaryBackward(block, offset);\n\n\tif (newOffset === offset) {\n\t\t// At block boundary — try crossing blocks\n\t\treturn fallbackCrossBlock(state, blockId, direction);\n\t}\n\n\treturn moveTx(state, blockId, newOffset);\n}\n\n/**\n * Crosses a block boundary from `blockId` in the given direction.\n * Checks `canCrossBlockBoundary` and handles void blocks (→ NodeSelection).\n */\nfunction fallbackCrossBlock(\n\tstate: EditorState,\n\tblockId: BlockId,\n\tdirection: Direction,\n): Transaction | null {\n\tconst blockOrder: readonly BlockId[] = state.getBlockOrder();\n\tconst idx: number = blockOrder.indexOf(blockId);\n\tconst targetIdx: number = direction === 'forward' ? idx + 1 : idx - 1;\n\n\tif (targetIdx < 0 || targetIdx >= blockOrder.length) return null;\n\n\tconst targetId: BlockId | undefined = blockOrder[targetIdx];\n\tif (!targetId) return null;\n\tif (!canCrossBlockBoundary(state, blockId, targetId)) return null;\n\n\tif (isVoidBlock(state, targetId)) return nodeSelTx(state, targetId);\n\n\tconst targetBlock = state.getBlock(targetId);\n\tif (!targetBlock) return null;\n\n\tconst targetOffset: number = direction === 'forward' ? 0 : getBlockLength(targetBlock);\n\treturn moveTx(state, targetId, targetOffset);\n}\n\n// ---------------------------------------------------------------------------\n// Convenience wrappers\n// ---------------------------------------------------------------------------\n\n/** Moves the cursor one word forward. */\nexport function moveWordForward(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewMove(container, state, 'forward', 'word');\n}\n\n/** Moves the cursor one word backward. */\nexport function moveWordBackward(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewMove(container, state, 'backward', 'word');\n}\n\n/** Moves the cursor to the start of the line (visual). */\nexport function moveToLineStart(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewMove(container, state, 'backward', 'lineboundary');\n}\n\n/** Moves the cursor to the end of the line (visual). */\nexport function moveToLineEnd(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewMove(container, state, 'forward', 'lineboundary');\n}\n\n/** Moves the cursor one visual line up. */\nexport function moveLineUp(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewMove(container, state, 'backward', 'line');\n}\n\n/** Moves the cursor one visual line down. */\nexport function moveLineDown(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewMove(container, state, 'forward', 'line');\n}\n\n/** Extends the selection one word forward. */\nexport function extendWordForward(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewExtend(container, state, 'forward', 'word');\n}\n\n/** Extends the selection one word backward. */\nexport function extendWordBackward(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewExtend(container, state, 'backward', 'word');\n}\n\n/** Extends the selection to the start of the line. */\nexport function extendToLineStart(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewExtend(container, state, 'backward', 'lineboundary');\n}\n\n/** Extends the selection to the end of the line. */\nexport function extendToLineEnd(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewExtend(container, state, 'forward', 'lineboundary');\n}\n\n/** Extends the selection one visual line up. */\nexport function extendLineUp(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewExtend(container, state, 'backward', 'line');\n}\n\n/** Extends the selection one visual line down. */\nexport function extendLineDown(container: HTMLElement, state: EditorState): Transaction | null {\n\treturn viewExtend(container, state, 'forward', 'line');\n}\n","/** Locale interface and default English locale for the CaretNavigationPlugin. */\n\n// --- Locale Interface ---\n\nexport interface CaretNavigationLocale {\n\treadonly paragraph: 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 codeBlock: string;\n\treadonly blockquote: string;\n\treadonly listItem: string;\n\treadonly horizontalRule: string;\n\treadonly image: string;\n\treadonly table: string;\n}\n\n// --- Default English Locale ---\n\nexport const CARET_NAVIGATION_LOCALE_EN: CaretNavigationLocale = {\n\tparagraph: 'Paragraph',\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\tcodeBlock: 'Code Block',\n\tblockquote: 'Block Quote',\n\tlistItem: 'List Item',\n\thorizontalRule: 'Horizontal Rule',\n\timage: 'Image',\n\ttable: 'Table',\n};\n\n// --- Block Type → Locale Key Mapping ---\n\nconst BLOCK_TYPE_KEY_MAP: Readonly<Record<string, keyof CaretNavigationLocale>> = {\n\tparagraph: 'paragraph',\n\tcode_block: 'codeBlock',\n\tblockquote: 'blockquote',\n\tlist_item: 'listItem',\n\thorizontal_rule: 'horizontalRule',\n\timage: 'image',\n\ttable: 'table',\n};\n\n/** Resolves a block type + attrs to a localized label string. */\nexport function resolveBlockLabel(\n\tlocale: CaretNavigationLocale,\n\ttypeName: string,\n\tattrs?: Record<string, unknown>,\n): string {\n\tif (typeName === 'heading' && attrs?.level) {\n\t\tconst key = `heading${attrs.level}` as keyof CaretNavigationLocale;\n\t\tif (key in locale) return locale[key];\n\t}\n\tconst key: keyof CaretNavigationLocale | undefined = BLOCK_TYPE_KEY_MAP[typeName];\n\treturn key ? locale[key] : typeName;\n}\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: CaretNavigationLocale }>> =\n\timport.meta.glob<{ default: CaretNavigationLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadCaretNavigationLocale(lang: string): Promise<CaretNavigationLocale> {\n\tif (lang === 'en') return CARET_NAVIGATION_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return CARET_NAVIGATION_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn CARET_NAVIGATION_LOCALE_EN;\n\t}\n}\n","/**\n * CaretNavigationPlugin: registers platform-aware keymaps for all\n * programmatic movement commands (character, word, line, document).\n *\n * Movement priorities use 'navigation' to match GapCursorPlugin.\n * Also announces block-type changes to screen readers on cross-block navigation.\n */\n\nimport {\n\textendCharacterBackward,\n\textendCharacterForward,\n\textendToDocumentEnd,\n\textendToDocumentStart,\n\tmoveToDocumentEnd,\n\tmoveToDocumentStart,\n} from '../../commands/MovementCommands.js';\nimport { LocaleServiceKey } from '../../i18n/LocaleService.js';\nimport { isCollapsed, isGapCursor, isNodeSelection } from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport { getTextDirection, isMac } from '../../platform/Platform.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport {\n\textendLineDown,\n\textendLineUp,\n\textendToLineEnd,\n\textendToLineStart,\n\textendWordBackward,\n\textendWordForward,\n\tmoveLineDown,\n\tmoveLineUp,\n\tmoveToLineEnd,\n\tmoveToLineStart,\n\tmoveWordBackward,\n\tmoveWordForward,\n} from '../../view/ViewMovementCommands.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport {\n\tCARET_NAVIGATION_LOCALE_EN,\n\ttype CaretNavigationLocale,\n\tloadCaretNavigationLocale,\n\tresolveBlockLabel,\n} from './CaretNavigationLocale.js';\n\ntype ViewCommandFn = (container: HTMLElement, state: EditorState) => Transaction | null;\ntype ViewCommandKey = `${'word' | 'lineboundary' | 'line'}:${'forward' | 'backward'}`;\ntype ViewCommandLookup = Readonly<Record<ViewCommandKey, ViewCommandFn>>;\n\nconst VIEW_MOVE_FNS: ViewCommandLookup = {\n\t'word:forward': moveWordForward,\n\t'word:backward': moveWordBackward,\n\t'lineboundary:forward': moveToLineEnd,\n\t'lineboundary:backward': moveToLineStart,\n\t'line:forward': moveLineDown,\n\t'line:backward': moveLineUp,\n};\n\nconst VIEW_EXTEND_FNS: ViewCommandLookup = {\n\t'word:forward': extendWordForward,\n\t'word:backward': extendWordBackward,\n\t'lineboundary:forward': extendToLineEnd,\n\t'lineboundary:backward': extendToLineStart,\n\t'line:forward': extendLineDown,\n\t'line:backward': extendLineUp,\n};\n\n/** Debounce delay for block-type announcements (ms). */\nconst ANNOUNCE_DEBOUNCE_MS = 150;\n\nexport class CaretNavigationPlugin implements Plugin {\n\treadonly id = 'caret-navigation';\n\treadonly name = 'Caret Navigation';\n\treadonly priority = 4;\n\n\tprivate context: PluginContext | null = null;\n\tprivate lastAnnouncedBlockId: BlockId | null = null;\n\tprivate announceTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate announce: ((text: string) => void) | null = null;\n\tprivate locale: CaretNavigationLocale = CARET_NAVIGATION_LOCALE_EN;\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tconst service = context.getService(LocaleServiceKey);\n\t\tconst lang: string = service?.getLocale() ?? 'en';\n\t\tthis.locale =\n\t\t\tlang === 'en' ? CARET_NAVIGATION_LOCALE_EN : await loadCaretNavigationLocale(lang);\n\n\t\tthis.context = context;\n\t\tthis.announce = (text: string) => context.announce(text);\n\t\tconst mac: boolean = isMac();\n\n\t\tconst keymap: Record<string, () => boolean> = {\n\t\t\t// --- Character movement (no modifier) ---\n\t\t\t// Handled natively by browser for basic cases, but Shift+Arrow\n\t\t\t// needs programmatic extend to correctly clear storedMarks.\n\n\t\t\t// --- Character extend ---\n\t\t\t'Shift-ArrowRight': () => this.extendCharacterVisual('right'),\n\t\t\t'Shift-ArrowLeft': () => this.extendCharacterVisual('left'),\n\n\t\t\t// --- Line extend ---\n\t\t\t'Shift-ArrowUp': () => this.viewExtendCommand('backward', 'line'),\n\t\t\t'Shift-ArrowDown': () => this.viewExtendCommand('forward', 'line'),\n\n\t\t\t// --- Word movement (platform-aware) ---\n\t\t\t...(mac\n\t\t\t\t? {\n\t\t\t\t\t\t'Alt-ArrowRight': () => this.viewMoveVisual('right', 'word'),\n\t\t\t\t\t\t'Alt-ArrowLeft': () => this.viewMoveVisual('left', 'word'),\n\t\t\t\t\t\t'Shift-Alt-ArrowRight': () => this.viewExtendVisual('right', 'word'),\n\t\t\t\t\t\t'Shift-Alt-ArrowLeft': () => this.viewExtendVisual('left', 'word'),\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\t'Mod-ArrowRight': () => this.viewMoveVisual('right', 'word'),\n\t\t\t\t\t\t'Mod-ArrowLeft': () => this.viewMoveVisual('left', 'word'),\n\t\t\t\t\t\t'Mod-Shift-ArrowRight': () => this.viewExtendVisual('right', 'word'),\n\t\t\t\t\t\t'Mod-Shift-ArrowLeft': () => this.viewExtendVisual('left', 'word'),\n\t\t\t\t\t}),\n\n\t\t\t// --- Line boundary movement (platform-aware) ---\n\t\t\t...(mac\n\t\t\t\t? {\n\t\t\t\t\t\t'Mod-ArrowLeft': () => this.viewMoveVisual('left', 'lineboundary'),\n\t\t\t\t\t\t'Mod-ArrowRight': () => this.viewMoveVisual('right', 'lineboundary'),\n\t\t\t\t\t\t'Mod-Shift-ArrowLeft': () => this.viewExtendVisual('left', 'lineboundary'),\n\t\t\t\t\t\t'Mod-Shift-ArrowRight': () => this.viewExtendVisual('right', 'lineboundary'),\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tHome: () => this.viewMoveCommand('backward', 'lineboundary'),\n\t\t\t\t\t\tEnd: () => this.viewMoveCommand('forward', 'lineboundary'),\n\t\t\t\t\t\t'Shift-Home': () => this.viewExtendCommand('backward', 'lineboundary'),\n\t\t\t\t\t\t'Shift-End': () => this.viewExtendCommand('forward', 'lineboundary'),\n\t\t\t\t\t}),\n\n\t\t\t// --- Document boundary movement (platform-aware) ---\n\t\t\t...(mac\n\t\t\t\t? {\n\t\t\t\t\t\t'Mod-ArrowUp': () => this.modelCommand(moveToDocumentStart),\n\t\t\t\t\t\t'Mod-ArrowDown': () => this.modelCommand(moveToDocumentEnd),\n\t\t\t\t\t\t'Mod-Shift-ArrowUp': () => this.modelCommand(extendToDocumentStart),\n\t\t\t\t\t\t'Mod-Shift-ArrowDown': () => this.modelCommand(extendToDocumentEnd),\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\t'Mod-Home': () => this.modelCommand(moveToDocumentStart),\n\t\t\t\t\t\t'Mod-End': () => this.modelCommand(moveToDocumentEnd),\n\t\t\t\t\t\t'Mod-Shift-Home': () => this.modelCommand(extendToDocumentStart),\n\t\t\t\t\t\t'Mod-Shift-End': () => this.modelCommand(extendToDocumentEnd),\n\t\t\t\t\t}),\n\t\t};\n\n\t\tcontext.registerKeymap(keymap, { priority: 'navigation' });\n\t}\n\n\t/** Announces block-type on cross-block cursor movement (debounced). */\n\tonStateChange(_oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tconst newSel = newState.selection;\n\n\t\t// Only announce for collapsed text selections\n\t\tif (!isCollapsed(newSel) || isNodeSelection(newSel) || isGapCursor(newSel)) {\n\t\t\tif (this.announceTimer !== null) {\n\t\t\t\tclearTimeout(this.announceTimer);\n\t\t\t\tthis.announceTimer = null;\n\t\t\t}\n\t\t\tthis.lastAnnouncedBlockId = null;\n\t\t\treturn;\n\t\t}\n\n\t\tconst newBlockId: BlockId = newSel.anchor.blockId;\n\t\tif (newBlockId === this.lastAnnouncedBlockId) return;\n\n\t\t// First observed block (initial focus) — remember but don't announce\n\t\tif (this.lastAnnouncedBlockId === null) {\n\t\t\tthis.lastAnnouncedBlockId = newBlockId;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastAnnouncedBlockId = newBlockId;\n\n\t\t// Debounce rapid navigation\n\t\tif (this.announceTimer !== null) clearTimeout(this.announceTimer);\n\t\tthis.announceTimer = setTimeout(() => {\n\t\t\tthis.announceTimer = null;\n\t\t\t// Skip if another plugin already announced (e.g. CodeBlockPlugin's \"Left code block\")\n\t\t\tif (this.context?.hasAnnouncement()) return;\n\t\t\tconst block = newState.getBlock(newBlockId);\n\t\t\tif (!block) return;\n\t\t\tconst label: string = resolveBlockLabel(\n\t\t\t\tthis.locale,\n\t\t\t\tblock.type,\n\t\t\t\tblock.attrs as Record<string, unknown> | undefined,\n\t\t\t);\n\t\t\tthis.announce?.(label);\n\t\t}, ANNOUNCE_DEBOUNCE_MS);\n\t}\n\n\tdestroy(): void {\n\t\tif (this.announceTimer !== null) clearTimeout(this.announceTimer);\n\t\tthis.announceTimer = null;\n\t\tthis.announce = null;\n\t\tthis.context = null;\n\t}\n\n\t/** Dispatches a model-based movement command (no DOM needed). */\n\tprivate modelCommand(fn: (state: EditorState) => Transaction | null): boolean {\n\t\tif (!this.context) return false;\n\t\tconst tr: Transaction | null = fn(this.context.getState());\n\t\tif (tr) {\n\t\t\tthis.context.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Extends selection by one character based on visual left/right intent. */\n\tprivate extendCharacterVisual(visual: 'left' | 'right'): boolean {\n\t\tif (!this.context) return false;\n\t\tconst state: EditorState = this.context.getState();\n\t\tconst dir: 'forward' | 'backward' = this.resolveLogicalHorizontalDirection(state, visual);\n\t\tconst tr: Transaction | null =\n\t\t\tdir === 'forward' ? extendCharacterForward(state) : extendCharacterBackward(state);\n\t\tif (tr) {\n\t\t\tthis.context.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Dispatches a view-based movement command (uses container + Selection.modify). */\n\tprivate viewMoveCommand(\n\t\tdirection: 'forward' | 'backward',\n\t\tgranularity: 'word' | 'lineboundary' | 'line',\n\t): boolean {\n\t\treturn this.dispatchViewCommand(VIEW_MOVE_FNS, direction, granularity);\n\t}\n\n\t/** Dispatches a view-based move command with visual direction mapping for RTL. */\n\tprivate viewMoveVisual(visual: 'left' | 'right', granularity: 'word' | 'lineboundary'): boolean {\n\t\tif (!this.context) return false;\n\t\tconst dir: 'forward' | 'backward' = this.resolveLogicalHorizontalDirection(\n\t\t\tthis.context.getState(),\n\t\t\tvisual,\n\t\t);\n\t\treturn this.viewMoveCommand(dir, granularity);\n\t}\n\n\t/** Dispatches a view-based extend command. */\n\tprivate viewExtendCommand(\n\t\tdirection: 'forward' | 'backward',\n\t\tgranularity: 'word' | 'lineboundary' | 'line',\n\t): boolean {\n\t\treturn this.dispatchViewCommand(VIEW_EXTEND_FNS, direction, granularity);\n\t}\n\n\tprivate dispatchViewCommand(\n\t\tlookup: ViewCommandLookup,\n\t\tdirection: 'forward' | 'backward',\n\t\tgranularity: 'word' | 'lineboundary' | 'line',\n\t): boolean {\n\t\tif (!this.context) return false;\n\t\tconst fn: ViewCommandFn | undefined = lookup[`${granularity}:${direction}`];\n\t\tif (!fn) return false;\n\t\tconst tr: Transaction | null = fn(this.context.getContainer(), this.context.getState());\n\t\tif (tr) {\n\t\t\tthis.context.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Dispatches a view-based extend command with visual direction mapping for RTL. */\n\tprivate viewExtendVisual(\n\t\tvisual: 'left' | 'right',\n\t\tgranularity: 'word' | 'lineboundary',\n\t): boolean {\n\t\tif (!this.context) return false;\n\t\tconst dir: 'forward' | 'backward' = this.resolveLogicalHorizontalDirection(\n\t\t\tthis.context.getState(),\n\t\t\tvisual,\n\t\t);\n\t\treturn this.viewExtendCommand(dir, granularity);\n\t}\n\n\t/**\n\t * Resolves logical movement direction from visual left/right intent.\n\t * In RTL blocks, visual directions are mirrored in offset space.\n\t */\n\tprivate resolveLogicalHorizontalDirection(\n\t\tstate: EditorState,\n\t\tvisual: 'left' | 'right',\n\t): 'forward' | 'backward' {\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel) || isGapCursor(sel)) {\n\t\t\treturn visual === 'left' ? 'backward' : 'forward';\n\t\t}\n\t\tconst container: HTMLElement | undefined = this.context?.getContainer();\n\t\tif (!container) return visual === 'left' ? 'backward' : 'forward';\n\t\tconst blockEl: Element | null = container.querySelector(\n\t\t\t`[data-block-id=\"${sel.head.blockId}\"]`,\n\t\t);\n\t\tconst isRtl: boolean = blockEl instanceof HTMLElement && getTextDirection(blockEl) === 'rtl';\n\t\tif (!isRtl) return visual === 'left' ? 'backward' : 'forward';\n\t\treturn visual === 'left' ? 'forward' : 'backward';\n\t}\n}\n"],"names":["SEGMENTER","Intl","Segmenter","granularity","nextGraphemeSize","text","offset","length","segment","index","prevGraphemeSize","lastSize","moveToBlockStart","state","sel","selection","isNodeSelection","isGapCursor","blockId","isCollapsed","anchor","head","moveTx","moveToBlockEnd","block","getBlock","blockLen","getBlockLength","findWordBoundaryBackward","pos","content","getContentAtOffset","kind","test","char","findWordBoundaryForward","len","resolveHead","adjacentBlockId","currentBlockId","direction","blockOrder","getBlockOrder","idx","indexOf","targetIdx","moveCharacterForward","step","getBlockText","blockOffsetToTextOffset","nextId","canCrossBlockBoundary","isVoidBlock","nodeSelTx","moveCharacterBackward","prevId","prevBlock","moveToDocumentStart","firstId","moveToDocumentEnd","lastId","lastBlock","extendCharacterForward","extendTx","extendCharacterBackward","extendToBlockStart","extendToBlockEnd","extendToDocumentStart","extendToDocumentEnd","lastBlockLen","domPositionFromPoint","root","x","y","ownerDoc","domNode","domOffset","cp","caretPositionFromPoint","offsetNode","range","caretRangeFromPoint","startContainer","startOffset","node","getSelection","window","readComposedSelection","container","getRootNode","ShadowRoot","ranges","getComposedRanges","shadowRoots","isBackward","anchorNode","endContainer","anchorOffset","endOffset","focusNode","focusOffset","readDOMSelectionEndpoints","domSel","composed","syncSelectionToDOM","removeAllRanges","blockEl","querySelector","nodeId","parent","parentNode","childIdx","childIndexOf","setBaseAndExtent","anchorPos","statePositionToDOM","headPos","readSelectionFromDOM","rangeCount","endpoints","contains","domPositionToState","createSelection","path","current","id","found","getAttribute","contentEl","resolveContentRoot","childNodes","firstChild","nodeName","remaining","walker","createInlineContentWalker","nextNode","nodeType","Node","TEXT_NODE","textContent","HTMLElement","lastChild","hasAttribute","findBlockElement","rawBlockId","bid","toBlockId","leafBlockEl","unshift","parentElement","buildBlockPath","targetEl","childOffset","child","Array","from","inlineContentWidth","createPosition","walkerNode","ELEMENT_NODE","document","createTreeWalker","NodeFilter","SHOW_ALL","acceptNode","n","isInsideInlineElement","FILTER_REJECT","FILTER_ACCEPT","FILTER_SKIP","c","width","endOfTextblock","caretRect","blockLength","isRtl","getTextDirection","modify","preReadRect","origEndpoints","origRect","getCaretRectFromSelection","dirStr","postEndpoints","findBlockAncestor","newRect","Math","abs","top","probeVerticalBoundary","navigateAcrossBlocks","target","resolveNavigationTarget","isVoid","targetId","targetBlock","targetOffset","navigateVerticalWithGoalColumn","goalColumn","position","rect","getBoundingClientRect","bottom","clampedX","min","max","left","right","domPoint","ownerDocument","resolveGoalColumnPosition","fallbackOffset","skipInlineNode","skipInlineNodeRight","skipInlineNodeLeft","getRangeAt","rects","getClientRects","currentIdx","viewMove","fallbackMove","newSel","newBlockId","oldBlockId","newOffset","viewExtend","fallbackExtend","oldHeadBlockId","newHeadBlockId","newHeadOffset","headBlock","fallbackCrossBlock","fallbackWordMove","moveWordForward","moveWordBackward","moveToLineStart","moveToLineEnd","moveLineUp","moveLineDown","extendWordForward","extendWordBackward","extendToLineStart","extendToLineEnd","extendLineUp","extendLineDown","CARET_NAVIGATION_LOCALE_EN","paragraph","heading1","heading2","heading3","heading4","heading5","heading6","codeBlock","blockquote","listItem","horizontalRule","image","table","BLOCK_TYPE_KEY_MAP","code_block","list_item","horizontal_rule","localeModules","assign","import","async","loadCaretNavigationLocale","lang","loader","default","VIEW_MOVE_FNS","VIEW_EXTEND_FNS","CaretNavigationPlugin","name","priority","context","lastAnnouncedBlockId","announceTimer","announce","locale","init","service","getService","LocaleServiceKey","getLocale","this","mac","isMac","keymap","extendCharacterVisual","viewExtendCommand","viewMoveVisual","viewExtendVisual","Home","viewMoveCommand","End","modelCommand","registerKeymap","onStateChange","_oldState","newState","_tr","clearTimeout","setTimeout","hasAnnouncement","label","typeName","attrs","level","key","resolveBlockLabel","type","destroy","fn","tr","getState","dispatch","visual","resolveLogicalHorizontalDirection","dispatchViewCommand","dir","lookup","getContainer"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt--IiroJQw.mjs","sources":["../../src/plugins/super-sub/locales/pt.ts"],"sourcesContent":["import type { SuperSubLocale } from '../SuperSubLocale.js';\n\nconst locale: SuperSubLocale = {\n\tsuperscriptLabel: 'Sobrescrito',\n\tsuperscriptTooltip: (shortcut: string) => `Sobrescrito (${shortcut})`,\n\tsubscriptLabel: 'Subscrito',\n\tsubscriptTooltip: (shortcut: string) => `Subscrito (${shortcut})`,\n};\n\nexport default locale;\n"],"names":["locale","superscriptLabel","superscriptTooltip","shortcut","subscriptLabel","subscriptTooltip"],"mappings":"AAEA,MAAMA,EAAyB,CAC9BC,iBAAkB,cAClBC,mBAAqBC,GAAqB,gBAAgBA,KAC1DC,eAAgB,YAChBC,iBAAmBF,GAAqB,cAAcA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-BF72W8M5.mjs","sources":["../../src/plugins/list/locales/pt.ts"],"sourcesContent":["import type { ListLocale } from '../ListLocale.js';\n\nconst locale: ListLocale = {\n\tbulletList: 'Lista com Marcadores',\n\tnumberedList: 'Lista Numerada',\n\tchecklist: 'Lista de Verificação',\n};\n\nexport default locale;\n"],"names":["locale","bulletList","numberedList","checklist"],"mappings":"AAEA,MAAMA,EAAqB,CAC1BC,WAAY,uBACZC,aAAc,iBACdC,UAAW"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const o={label:"Bloco de Código",tooltip:o=>o?`Bloco de Código (${o})`:"Bloco de Código",enteredCodeBlock:"Entrou no bloco de código. Pressione Escape para sair.",leftCodeBlock:"Saiu do bloco de código.",copyCodeAria:"Copiar código",escToExit:"Esc para sair",codeBlockAriaLabel:o=>`Bloco de código ${o}. Pressione Escape para sair.`,copiedToClipboard:"Copiado para a área de transferência"};export{o as default};
|
|
2
|
+
//# sourceMappingURL=pt-BX_t4luI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-BX_t4luI.mjs","sources":["../../src/plugins/code-block/locales/pt.ts"],"sourcesContent":["import type { CodeBlockLocale } from '../CodeBlockLocale.js';\n\nconst locale: CodeBlockLocale = {\n\tlabel: 'Bloco de Código',\n\ttooltip: (shortcut?: string) => (shortcut ? `Bloco de Código (${shortcut})` : 'Bloco de Código'),\n\tenteredCodeBlock: 'Entrou no bloco de código. Pressione Escape para sair.',\n\tleftCodeBlock: 'Saiu do bloco de código.',\n\tcopyCodeAria: 'Copiar código',\n\tescToExit: 'Esc para sair',\n\tcodeBlockAriaLabel: (lang: string) => `Bloco de código ${lang}. Pressione Escape para sair.`,\n\tcopiedToClipboard: 'Copiado para a área de transferência',\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","shortcut","enteredCodeBlock","leftCodeBlock","copyCodeAria","escToExit","codeBlockAriaLabel","lang","copiedToClipboard"],"mappings":"AAEA,MAAMA,EAA0B,CAC/BC,MAAO,kBACPC,QAAUC,GAAuBA,EAAW,oBAAoBA,KAAc,kBAC9EC,iBAAkB,yDAClBC,cAAe,2BACfC,aAAc,gBACdC,UAAW,gBACXC,mBAAqBC,GAAiB,mBAAmBA,iCACzDC,kBAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-B_XJ2s9X.mjs","sources":["../../src/plugins/horizontal-rule/locales/pt.ts"],"sourcesContent":["import type { HorizontalRuleLocale } from '../HorizontalRuleLocale.js';\n\nconst locale: HorizontalRuleLocale = {\n\tlabel: 'Linha Horizontal',\n\ttooltip: (shortcut: string) => `Linha Horizontal (${shortcut})`,\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","shortcut"],"mappings":"AAEA,MAAMA,EAA+B,CACpCC,MAAO,mBACPC,QAAUC,GAAqB,qBAAqBA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-C-Vp7Rxj.mjs","sources":["../../src/plugins/text-color/locales/pt.ts"],"sourcesContent":["import type { TextColorLocale } from '../TextColorLocale.js';\n\nconst locale: TextColorLocale = {\n\tlabel: 'Cor do Texto',\n\ttooltip: 'Cor do Texto',\n\tresetLabel: 'Padrão',\n\tariaLabelPrefix: 'Cor do texto',\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","resetLabel","ariaLabelPrefix"],"mappings":"AAEA,MAAMA,EAA0B,CAC/BC,MAAO,eACPC,QAAS,eACTC,WAAY,SACZC,gBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-CD2aCZXf.mjs","sources":["../../src/plugins/gap-cursor/locales/pt.ts"],"sourcesContent":["import type { GapCursorLocale } from '../GapCursorLocale.js';\n\nconst locale: GapCursorLocale = {\n\tgapCursorActive: 'Cursor de lacuna ativo. Digite para inserir um novo par\\u00e1grafo.',\n};\n\nexport default locale;\n"],"names":["locale","gapCursorActive"],"mappings":"AAEA,MAAMA,EAA0B,CAC/BC,gBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-CFjzqIbS.mjs","sources":["../../src/plugins/strikethrough/locales/pt.ts"],"sourcesContent":["import type { StrikethroughLocale } from '../StrikethroughLocale.js';\n\nconst locale: StrikethroughLocale = {\n\tlabel: 'Tachado',\n\ttooltip: (shortcut: string) => `Tachado (${shortcut})`,\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","shortcut"],"mappings":"AAEA,MAAMA,EAA8B,CACnCC,MAAO,UACPC,QAAUC,GAAqB,YAAYA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-CHjmBegF.mjs","sources":["../../src/plugins/font-size/locales/pt.ts"],"sourcesContent":["import type { FontSizeLocale } from '../FontSizeLocale.js';\n\nconst locale: FontSizeLocale = {\n\tlabel: 'Tamanho da Fonte',\n\ttooltip: 'Tamanho da Fonte',\n\tcustomFontSizeAria: 'Tamanho de fonte personalizado',\n\tfontSizesAria: 'Tamanhos de fonte',\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","customFontSizeAria","fontSizesAria"],"mappings":"AAEA,MAAMA,EAAyB,CAC9BC,MAAO,mBACPC,QAAS,mBACTC,mBAAoB,iCACpBC,cAAe"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-CQRzEocL.mjs","sources":["../../src/plugins/toolbar/locales/pt.ts"],"sourcesContent":["import type { ToolbarLocale } from '../ToolbarLocale.js';\n\nconst locale: ToolbarLocale = {\n\tformattingOptionsAria: 'Op\\u00e7\\u00f5es de formata\\u00e7\\u00e3o',\n\tmoreToolsAria: 'Mais ferramentas',\n\tgridPickerLabel: (rows: number, cols: number) => `${rows} x ${cols}`,\n};\n\nexport default locale;\n"],"names":["locale","formattingOptionsAria","moreToolsAria","gridPickerLabel","rows","cols"],"mappings":"AAEA,MAAMA,EAAwB,CAC7BC,sBAAuB,uBACvBC,cAAe,mBACfC,gBAAiB,CAACC,EAAcC,IAAiB,GAAGD,OAAUC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const a={paragraph:"Parágrafo",heading1:"Título 1",heading2:"Título 2",heading3:"Título 3",heading4:"Título 4",heading5:"Título 5",heading6:"Título 6",codeBlock:"Bloco de código",blockquote:"Citação",listItem:"Item de lista",horizontalRule:"Linha horizontal",image:"Imagem",table:"Tabela"};export{a as default};
|
|
2
|
+
//# sourceMappingURL=pt-Cem2WxUk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-Cem2WxUk.mjs","sources":["../../src/plugins/caret-navigation/locales/pt.ts"],"sourcesContent":["import type { CaretNavigationLocale } from '../CaretNavigationLocale.js';\n\nconst locale: CaretNavigationLocale = {\n\tparagraph: 'Parágrafo',\n\theading1: 'Título 1',\n\theading2: 'Título 2',\n\theading3: 'Título 3',\n\theading4: 'Título 4',\n\theading5: 'Título 5',\n\theading6: 'Título 6',\n\tcodeBlock: 'Bloco de código',\n\tblockquote: 'Citação',\n\tlistItem: 'Item de lista',\n\thorizontalRule: 'Linha horizontal',\n\timage: 'Imagem',\n\ttable: 'Tabela',\n};\n\nexport default locale;\n"],"names":["locale","paragraph","heading1","heading2","heading3","heading4","heading5","heading6","codeBlock","blockquote","listItem","horizontalRule","image","table"],"mappings":"AAEA,MAAMA,EAAgC,CACrCC,UAAW,YACXC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,UAAW,kBACXC,WAAY,UACZC,SAAU,gBACVC,eAAgB,mBAChBC,MAAO,SACPC,MAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-D6kdF3fH.mjs","sources":["../../src/plugins/print/locales/pt.ts"],"sourcesContent":["import type { PrintLocale } from '../PrintLocale.js';\n\nconst locale: PrintLocale = {\n\tlabel: 'Imprimir',\n\ttooltip: (shortcut: string) => `Imprimir (${shortcut})`,\n\tprintingAnnouncement: 'Imprimindo',\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","shortcut","printingAnnouncement"],"mappings":"AAEA,MAAMA,EAAsB,CAC3BC,MAAO,WACPC,QAAUC,GAAqB,aAAaA,KAC5CC,qBAAsB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e={insertRowAbove:"Inserir Linha Acima",insertRowBelow:"Inserir Linha Abaixo",insertColumnLeft:"Inserir Coluna à Esquerda",insertColumnRight:"Inserir Coluna à Direita",deleteRow:"Excluir Linha",deleteColumn:"Excluir Coluna",borderColorLabel:"Cor da Borda...",deleteTable:"Excluir Tabela",tableActions:"Ações da tabela",menuKeyboardHint:"↑↓ Navegar · Enter Selecionar · Esc Fechar",insertRow:"Inserir linha",insertColumn:"Inserir coluna",addRow:"Adicionar linha",addColumn:"Adicionar coluna",tableActionsHint:"Ações da tabela (Clique direito ou Shift+F10)",contextMenuHint:"Clique direito ou Shift+F10 para ações da tabela",borderColor:"Cor da borda",defaultColor:"Padrão",noBorders:"Sem bordas",borderColorPicker:"Seletor de cor da borda",announceBorderColorSet:e=>`Cor da borda da tabela definida para ${e}`,announceBorderReset:"Bordas da tabela redefinidas para o padrão",borderSwatchLabel:e=>`Borda ${e}`,announceRowInsertedAbove:"Linha inserida acima",announceRowInsertedBelow:"Linha inserida abaixo",announceColumnInserted:e=>`Coluna inserida à ${e}`,announceRowDeleted:"Linha excluída",announceColumnDeleted:"Coluna excluída",announceTableDeleted:"Tabela excluída",insertTable:"Inserir Tabela",tableAriaLabel:(e,a)=>`Tabela com ${e} linhas e ${a} colunas`,tableAriaDescription:"Clique direito ou pressione Shift+F10 para ações da tabela"};export{e as default};
|
|
2
|
+
//# sourceMappingURL=pt-DJfJVeY8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-DJfJVeY8.mjs","sources":["../../src/plugins/table/locales/pt.ts"],"sourcesContent":["import type { TableLocale } from '../TableLocale.js';\n\nconst locale: TableLocale = {\n\t// Context Menu\n\tinsertRowAbove: 'Inserir Linha Acima',\n\tinsertRowBelow: 'Inserir Linha Abaixo',\n\tinsertColumnLeft: 'Inserir Coluna à Esquerda',\n\tinsertColumnRight: 'Inserir Coluna à Direita',\n\tdeleteRow: 'Excluir Linha',\n\tdeleteColumn: 'Excluir Coluna',\n\tborderColorLabel: 'Cor da Borda...',\n\tdeleteTable: 'Excluir Tabela',\n\n\t// Menu A11y\n\ttableActions: 'Ações da tabela',\n\tmenuKeyboardHint: '\\u2191\\u2193 Navegar \\u00b7 Enter Selecionar \\u00b7 Esc Fechar',\n\n\t// Controls\n\tinsertRow: 'Inserir linha',\n\tinsertColumn: 'Inserir coluna',\n\taddRow: 'Adicionar linha',\n\taddColumn: 'Adicionar coluna',\n\ttableActionsHint: 'Ações da tabela (Clique direito ou Shift+F10)',\n\tcontextMenuHint: 'Clique direito ou Shift+F10 para ações da tabela',\n\tborderColor: 'Cor da borda',\n\n\t// Border Color Picker\n\tdefaultColor: 'Padrão',\n\tnoBorders: 'Sem bordas',\n\tborderColorPicker: 'Seletor de cor da borda',\n\tannounceBorderColorSet: (colorName: string) =>\n\t\t`Cor da borda da tabela definida para ${colorName}`,\n\tannounceBorderReset: 'Bordas da tabela redefinidas para o padrão',\n\tborderSwatchLabel: (colorName: string) => `Borda ${colorName}`,\n\n\t// Command Announcements\n\tannounceRowInsertedAbove: 'Linha inserida acima',\n\tannounceRowInsertedBelow: 'Linha inserida abaixo',\n\tannounceColumnInserted: (side: string) => `Coluna inserida à ${side}`,\n\tannounceRowDeleted: 'Linha excluída',\n\tannounceColumnDeleted: 'Coluna excluída',\n\tannounceTableDeleted: 'Tabela excluída',\n\n\t// Toolbar\n\tinsertTable: 'Inserir Tabela',\n\n\t// NodeView ARIA\n\ttableAriaLabel: (rows: number, cols: number) => `Tabela com ${rows} linhas e ${cols} colunas`,\n\ttableAriaDescription: 'Clique direito ou pressione Shift+F10 para ações da tabela',\n};\n\nexport default locale;\n"],"names":["locale","insertRowAbove","insertRowBelow","insertColumnLeft","insertColumnRight","deleteRow","deleteColumn","borderColorLabel","deleteTable","tableActions","menuKeyboardHint","insertRow","insertColumn","addRow","addColumn","tableActionsHint","contextMenuHint","borderColor","defaultColor","noBorders","borderColorPicker","announceBorderColorSet","colorName","announceBorderReset","borderSwatchLabel","announceRowInsertedAbove","announceRowInsertedBelow","announceColumnInserted","side","announceRowDeleted","announceColumnDeleted","announceTableDeleted","insertTable","tableAriaLabel","rows","cols","tableAriaDescription"],"mappings":"AAEA,MAAMA,EAAsB,CAE3BC,eAAgB,sBAChBC,eAAgB,uBAChBC,iBAAkB,4BAClBC,kBAAmB,2BACnBC,UAAW,gBACXC,aAAc,iBACdC,iBAAkB,kBAClBC,YAAa,iBAGbC,aAAc,kBACdC,iBAAkB,6CAGlBC,UAAW,gBACXC,aAAc,iBACdC,OAAQ,kBACRC,UAAW,mBACXC,iBAAkB,gDAClBC,gBAAiB,mDACjBC,YAAa,eAGbC,aAAc,SACdC,UAAW,aACXC,kBAAmB,0BACnBC,uBAAyBC,GACxB,wCAAwCA,IACzCC,oBAAqB,6CACrBC,kBAAoBF,GAAsB,SAASA,IAGnDG,yBAA0B,uBAC1BC,yBAA0B,wBAC1BC,uBAAyBC,GAAiB,qBAAqBA,IAC/DC,mBAAoB,iBACpBC,sBAAuB,kBACvBC,qBAAsB,kBAGtBC,YAAa,iBAGbC,eAAgB,CAACC,EAAcC,IAAiB,cAAcD,cAAiBC,YAC/EC,qBAAsB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-DfB-IaYi.mjs","sources":["../../src/plugins/font/locales/pt.ts"],"sourcesContent":["import type { FontLocale } from '../FontLocale.js';\n\nconst locale: FontLocale = {\n\tlabel: 'Fonte',\n\ttooltip: 'Família da Fonte',\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip"],"mappings":"AAEA,MAAMA,EAAqB,CAC1BC,MAAO,QACPC,QAAS"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e={insertImage:"Inserir Imagem",insertImageTooltip:"Inserir Imagem",uploadFromComputer:"Enviar do computador",uploadAria:"Enviar imagem do computador",separator:"ou",urlPlaceholder:"https://...",urlAria:"URL da imagem",insertButton:"Inserir",insertAria:"Inserir imagem",imageAria:(e,a,r)=>{const i=[e||"Imagem"];return void 0!==a&&void 0!==r&&i.push(`${a} por ${r} pixels`),i.join(", ")},resetToNaturalSize:"Imagem redefinida para o tamanho natural.",uploadFailed:"Falha ao enviar a imagem.",uploading:"Enviando...",resizeHandleLabel:e=>`Redimensionar ${{"top-left":"superior esquerdo","top-right":"superior direito","bottom-left":"inferior esquerdo","bottom-right":"inferior direito"}[e]??e}`,imageSelected:"Imagem selecionada.",altTextPrefix:"Texto alternativo: ",imageSizeAnnounce:(e,a)=>`Tamanho: ${e} por ${a} pixels.`,resizeHint:(e,a)=>`${e} / ${a} para redimensionar.`,imageResized:(e,a)=>`Imagem redimensionada para ${e} por ${a} pixels.`,keyboardResizeHint:(e,a)=>`${e} / ${a} para redimensionar`};export{e as default};
|
|
2
|
+
//# sourceMappingURL=pt-DlNdH9pu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-DlNdH9pu.mjs","sources":["../../src/plugins/image/locales/pt.ts"],"sourcesContent":["import type { ImageLocale } from '../ImageLocale.js';\n\nconst locale: ImageLocale = {\n\tinsertImage: 'Inserir Imagem',\n\tinsertImageTooltip: 'Inserir Imagem',\n\tuploadFromComputer: 'Enviar do computador',\n\tuploadAria: 'Enviar imagem do computador',\n\tseparator: 'ou',\n\turlPlaceholder: 'https://...',\n\turlAria: 'URL da imagem',\n\tinsertButton: 'Inserir',\n\tinsertAria: 'Inserir imagem',\n\timageAria: (alt: string, width?: number, height?: number) => {\n\t\tconst parts: string[] = [alt || 'Imagem'];\n\t\tif (width !== undefined && height !== undefined) {\n\t\t\tparts.push(`${width} por ${height} pixels`);\n\t\t}\n\t\treturn parts.join(', ');\n\t},\n\tresetToNaturalSize: 'Imagem redefinida para o tamanho natural.',\n\tuploadFailed: 'Falha ao enviar a imagem.',\n\tuploading: 'Enviando...',\n\tresizeHandleLabel: (position: string) => {\n\t\tconst positions: Record<string, string> = {\n\t\t\t'top-left': 'superior esquerdo',\n\t\t\t'top-right': 'superior direito',\n\t\t\t'bottom-left': 'inferior esquerdo',\n\t\t\t'bottom-right': 'inferior direito',\n\t\t};\n\t\treturn `Redimensionar ${positions[position] ?? position}`;\n\t},\n\timageSelected: 'Imagem selecionada.',\n\taltTextPrefix: 'Texto alternativo: ',\n\timageSizeAnnounce: (w: number, h: number) => `Tamanho: ${w} por ${h} pixels.`,\n\tresizeHint: (shrink: string, grow: string) => `${shrink} / ${grow} para redimensionar.`,\n\timageResized: (w: number, h: number) => `Imagem redimensionada para ${w} por ${h} pixels.`,\n\tkeyboardResizeHint: (shrink: string, grow: string) => `${shrink} / ${grow} para redimensionar`,\n};\n\nexport default locale;\n"],"names":["locale","insertImage","insertImageTooltip","uploadFromComputer","uploadAria","separator","urlPlaceholder","urlAria","insertButton","insertAria","imageAria","alt","width","height","parts","push","join","resetToNaturalSize","uploadFailed","uploading","resizeHandleLabel","position","imageSelected","altTextPrefix","imageSizeAnnounce","w","h","resizeHint","shrink","grow","imageResized","keyboardResizeHint"],"mappings":"AAEA,MAAMA,EAAsB,CAC3BC,YAAa,iBACbC,mBAAoB,iBACpBC,mBAAoB,uBACpBC,WAAY,8BACZC,UAAW,KACXC,eAAgB,cAChBC,QAAS,gBACTC,aAAc,UACdC,WAAY,iBACZC,UAAW,CAACC,EAAaC,EAAgBC,KACxC,MAAMC,EAAkB,CAACH,GAAO,UAIhC,YAHc,IAAVC,QAAkC,IAAXC,GAC1BC,EAAMC,KAAK,GAAGH,SAAaC,YAErBC,EAAME,KAAK,OAEnBC,mBAAoB,4CACpBC,aAAc,4BACdC,UAAW,cACXC,kBAAoBC,GAOZ,iBANmC,CACzC,WAAY,oBACZ,YAAa,mBACb,cAAe,oBACf,eAAgB,oBAEiBA,IAAaA,IAEhDC,cAAe,sBACfC,cAAe,sBACfC,kBAAmB,CAACC,EAAWC,IAAc,YAAYD,SAASC,YAClEC,WAAY,CAACC,EAAgBC,IAAiB,GAAGD,OAAYC,wBAC7DC,aAAc,CAACL,EAAWC,IAAc,8BAA8BD,SAASC,YAC/EK,mBAAoB,CAACH,EAAgBC,IAAiB,GAAGD,OAAYC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-DrJ0-8Yo.mjs","sources":["../../src/plugins/alignment/locales/pt.ts"],"sourcesContent":["import type { AlignmentLocale } from '../AlignmentLocale.js';\n\nconst locale: AlignmentLocale = {\n\talignStart: 'Alinhar ao Início',\n\talignCenter: 'Centralizar',\n\talignEnd: 'Alinhar ao Final',\n\tjustify: 'Justificar',\n\ttoolbarLabel: 'Alinhamento',\n\ttoolbarTooltip: 'Alinhamento',\n};\n\nexport default locale;\n"],"names":["locale","alignStart","alignCenter","alignEnd","justify","toolbarLabel","toolbarTooltip"],"mappings":"AAEA,MAAMA,EAA0B,CAC/BC,WAAY,oBACZC,YAAa,cACbC,SAAU,mBACVC,QAAS,aACTC,aAAc,cACdC,eAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-DsBJpgpe.mjs","sources":["../../src/plugins/link/locales/pt.ts"],"sourcesContent":["import type { LinkLocale } from '../LinkLocale.js';\n\nconst locale: LinkLocale = {\n\tlabel: 'Link',\n\ttooltip: (shortcut: string) => `Inserir Link (${shortcut})`,\n\tremoveLink: 'Remover Link',\n\tremoveLinkAria: 'Remover link',\n\turlPlaceholder: 'https://...',\n\turlAria: 'URL do link',\n\tapply: 'Aplicar',\n\tapplyAria: 'Aplicar link',\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","shortcut","removeLink","removeLinkAria","urlPlaceholder","urlAria","apply","applyAria"],"mappings":"AAEA,MAAMA,EAAqB,CAC1BC,MAAO,OACPC,QAAUC,GAAqB,iBAAiBA,KAChDC,WAAY,eACZC,eAAgB,eAChBC,eAAgB,cAChBC,QAAS,cACTC,MAAO,UACPC,UAAW"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-DwdSYJzC.mjs","sources":["../../src/plugins/blockquote/locales/pt.ts"],"sourcesContent":["import type { BlockquoteLocale } from '../BlockquoteLocale.js';\n\nconst locale: BlockquoteLocale = {\n\tlabel: 'Citação',\n\ttooltip: (shortcut: string) => `Citação (${shortcut})`,\n};\n\nexport default locale;\n"],"names":["locale","label","tooltip","shortcut"],"mappings":"AAEA,MAAMA,EAA2B,CAChCC,MAAO,UACPC,QAAUC,GAAqB,YAAYA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-Dx9UkZ3j.mjs","sources":["../../src/plugins/text-formatting/locales/pt.ts"],"sourcesContent":["import type { TextFormattingLocale } from '../TextFormattingLocale.js';\n\nconst locale: TextFormattingLocale = {\n\tboldLabel: 'Negrito',\n\titalicLabel: 'Itálico',\n\tunderlineLabel: 'Sublinhado',\n};\n\nexport default locale;\n"],"names":["locale","boldLabel","italicLabel","underlineLabel"],"mappings":"AAEA,MAAMA,EAA+B,CACpCC,UAAW,UACXC,YAAa,UACbC,eAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const o={paragraph:"Parágrafo",title:"Título",subtitle:"Subtítulo",heading1:"Título 1",heading2:"Título 2",heading3:"Título 3",heading4:"Título 4",heading5:"Título 5",heading6:"Título 6",blockTypeLabel:"Tipo de Bloco",blockTypesAria:"Tipos de bloco"};export{o as default};
|
|
2
|
+
//# sourceMappingURL=pt-TuA3_GDM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-TuA3_GDM.mjs","sources":["../../src/plugins/heading/locales/pt.ts"],"sourcesContent":["import type { HeadingLocale } from '../HeadingLocale.js';\n\nconst locale: HeadingLocale = {\n\tparagraph: 'Parágrafo',\n\ttitle: 'Título',\n\tsubtitle: 'Subtítulo',\n\theading1: 'Título 1',\n\theading2: 'Título 2',\n\theading3: 'Título 3',\n\theading4: 'Título 4',\n\theading5: 'Título 5',\n\theading6: 'Título 6',\n\tblockTypeLabel: 'Tipo de Bloco',\n\tblockTypesAria: 'Tipos de bloco',\n};\n\nexport default locale;\n"],"names":["locale","paragraph","title","subtitle","heading1","heading2","heading3","heading4","heading5","heading6","blockTypeLabel","blockTypesAria"],"mappings":"AAEA,MAAMA,EAAwB,CAC7BC,UAAW,YACXC,MAAO,SACPC,SAAU,YACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,SAAU,WACVC,eAAgB,gBAChBC,eAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt-cN6r-f7f.mjs","sources":["../../src/editor/locales/pt.ts"],"sourcesContent":["import type { EditorLocale } from '../EditorLocale.js';\n\nconst locale: EditorLocale = {\n\tariaLabel: 'Editor de texto formatado',\n\tariaDescription: 'Pressione Escape para sair do editor',\n\tdefaultPlaceholder: 'Comece a digitar...',\n};\n\nexport default locale;\n"],"names":["locale","ariaLabel","ariaDescription","defaultPlaceholder"],"mappings":"AAEA,MAAMA,EAAuB,CAC5BC,UAAW,4BACXC,gBAAiB,uCACjBC,mBAAoB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e={ltr:"Esquerda para Direita",rtl:"Direita para Esquerda",auto:"Automático",toolbarLabel:"Direção do Texto",toolbarTooltip:"Direção do Texto",announceLTR:"Direção do texto definida da esquerda para a direita",announceRTL:"Direção do texto definida da direita para a esquerda",announceAuto:"Direção do texto definida como automática",inlineLTR:"Em linha EpD",inlineRTL:"Em linha DpE",inlineAuto:"Em linha Auto",inlineLabel:"Direção em linha",inlineTooltip:"Direção em linha",announceRemoveBidi:"Isolamento de direção em linha removido"};export{e as default};
|
|
2
|
+
//# sourceMappingURL=pt-uNGpVM3D.mjs.map
|