@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.
Files changed (1280) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -31
  3. package/custom-elements.json +350 -6
  4. package/dist/chunks/AttrRegistry-B2AGfTE0.mjs +2 -0
  5. package/dist/chunks/AttrRegistry-B2AGfTE0.mjs.map +1 -0
  6. package/dist/chunks/AttributedMarkCommands-BB7lzFct.mjs +2 -0
  7. package/dist/chunks/{AttributedMarkCommands-BtLea72z.mjs.map → AttributedMarkCommands-BB7lzFct.mjs.map} +1 -1
  8. package/dist/chunks/BlockTypePickerRegistry-DcSE6IXB.mjs +2 -0
  9. package/dist/chunks/BlockTypePickerRegistry-DcSE6IXB.mjs.map +1 -0
  10. package/dist/chunks/ColorGrid-CpkbKfXg.mjs +2 -0
  11. package/dist/chunks/ColorGrid-CpkbKfXg.mjs.map +1 -0
  12. package/dist/chunks/ColorPickerPopup-DRzFvt7o.mjs +2 -0
  13. package/dist/chunks/ColorPickerPopup-DRzFvt7o.mjs.map +1 -0
  14. package/dist/chunks/ColorValidation-DCSKq9B2.mjs +2 -0
  15. package/dist/chunks/{ColorValidation-CV4f1wu6.mjs.map → ColorValidation-DCSKq9B2.mjs.map} +1 -1
  16. package/dist/chunks/Commands-P9wS8qtN.mjs +2 -0
  17. package/dist/chunks/Commands-P9wS8qtN.mjs.map +1 -0
  18. package/dist/chunks/Decoration-D49mFXrH.mjs +2 -0
  19. package/dist/chunks/Decoration-D49mFXrH.mjs.map +1 -0
  20. package/dist/chunks/Document-BFYAonMF.mjs +2 -0
  21. package/dist/chunks/{Document-Brtw2jL1.mjs.map → Document-BFYAonMF.mjs.map} +1 -1
  22. package/dist/chunks/DocumentParser-DFcvVMGY.mjs +2 -0
  23. package/dist/chunks/DocumentParser-DFcvVMGY.mjs.map +1 -0
  24. package/dist/chunks/DomUtils-Cdz1eDKM.mjs +2 -0
  25. package/dist/chunks/DomUtils-Cdz1eDKM.mjs.map +1 -0
  26. package/dist/chunks/HTMLUtils-CCvQ5f83.mjs +2 -0
  27. package/dist/chunks/HTMLUtils-CCvQ5f83.mjs.map +1 -0
  28. package/dist/chunks/HeadingPlugin-DYy3IoT_.mjs +2 -0
  29. package/dist/chunks/HeadingPlugin-DYy3IoT_.mjs.map +1 -0
  30. package/dist/chunks/KeyboardNav-DsYhKKuV.mjs +2 -0
  31. package/dist/chunks/KeyboardNav-DsYhKKuV.mjs.map +1 -0
  32. package/dist/chunks/LocaleService-B6Z-wyAF.mjs +2 -0
  33. package/dist/chunks/LocaleService-B6Z-wyAF.mjs.map +1 -0
  34. package/dist/chunks/MarkCommands-B_erV7zz.mjs +2 -0
  35. package/dist/chunks/{MarkCommands-6RUJ4L3r.mjs.map → MarkCommands-B_erV7zz.mjs.map} +1 -1
  36. package/dist/chunks/NavigationQueries-ogQuObz7.mjs +2 -0
  37. package/dist/chunks/NavigationQueries-ogQuObz7.mjs.map +1 -0
  38. package/dist/chunks/NotectlEditor-4NFnXLyD.mjs +2 -0
  39. package/dist/chunks/NotectlEditor-4NFnXLyD.mjs.map +1 -0
  40. package/dist/chunks/Platform-CU6itXZo.mjs +2 -0
  41. package/dist/chunks/Platform-CU6itXZo.mjs.map +1 -0
  42. package/dist/chunks/Plugin-OzM8Oxm_.mjs +2 -0
  43. package/dist/chunks/Plugin-OzM8Oxm_.mjs.map +1 -0
  44. package/dist/chunks/PluginHelpers-DjZt0pQi.mjs +2 -0
  45. package/dist/chunks/PluginHelpers-DjZt0pQi.mjs.map +1 -0
  46. package/dist/chunks/PopupManager-BM8IT6M7.mjs +2 -0
  47. package/dist/chunks/PopupManager-BM8IT6M7.mjs.map +1 -0
  48. package/dist/chunks/PopupPositioning-DtvqMSop.mjs +2 -0
  49. package/dist/chunks/PopupPositioning-DtvqMSop.mjs.map +1 -0
  50. package/dist/chunks/PrintTypes-ehbL7ipA.mjs +2 -0
  51. package/dist/chunks/PrintTypes-ehbL7ipA.mjs.map +1 -0
  52. package/dist/chunks/RangeIterator-CNI6smOg.mjs +2 -0
  53. package/dist/chunks/{RangeIterator-Bh4Vl_6D.mjs.map → RangeIterator-CNI6smOg.mjs.map} +1 -1
  54. package/dist/chunks/Selection-6-W6Flxc.mjs +2 -0
  55. package/dist/chunks/{Selection-BRTab5hO.mjs.map → Selection-6-W6Flxc.mjs.map} +1 -1
  56. package/dist/chunks/SelectionTransactions-q71GEzgE.mjs +2 -0
  57. package/dist/chunks/SelectionTransactions-q71GEzgE.mjs.map +1 -0
  58. package/dist/chunks/ShortcutFormatting-BLKS0Gys.mjs +2 -0
  59. package/dist/chunks/ShortcutFormatting-BLKS0Gys.mjs.map +1 -0
  60. package/dist/chunks/StyleRuntime-BmsLoEa8.mjs +2 -0
  61. package/dist/chunks/{StyleRuntime-CP4NCwKT.mjs.map → StyleRuntime-BmsLoEa8.mjs.map} +1 -1
  62. package/dist/chunks/TextDirectionLocale-DB_aqrMg.mjs +2 -0
  63. package/dist/chunks/TextDirectionLocale-DB_aqrMg.mjs.map +1 -0
  64. package/dist/chunks/TypeBrands-Bp_Z_o5Y.mjs +2 -0
  65. package/dist/chunks/{TypeBrands-C09nE2qO.mjs.map → TypeBrands-Bp_Z_o5Y.mjs.map} +1 -1
  66. package/dist/chunks/ar-B93SPJT7.mjs +2 -0
  67. package/dist/chunks/ar-B93SPJT7.mjs.map +1 -0
  68. package/dist/chunks/ar-BAmGa08u.mjs +2 -0
  69. package/dist/chunks/ar-BAmGa08u.mjs.map +1 -0
  70. package/dist/chunks/ar-BYNFEVLc.mjs +2 -0
  71. package/dist/chunks/ar-BYNFEVLc.mjs.map +1 -0
  72. package/dist/chunks/ar-Bnc7y8BP.mjs +2 -0
  73. package/dist/chunks/ar-Bnc7y8BP.mjs.map +1 -0
  74. package/dist/chunks/ar-Bp3rDZky.mjs +2 -0
  75. package/dist/chunks/ar-Bp3rDZky.mjs.map +1 -0
  76. package/dist/chunks/ar-BtOQ7lro.mjs +2 -0
  77. package/dist/chunks/ar-BtOQ7lro.mjs.map +1 -0
  78. package/dist/chunks/ar-C5JEHhw9.mjs +2 -0
  79. package/dist/chunks/ar-C5JEHhw9.mjs.map +1 -0
  80. package/dist/chunks/ar-CL3QL0tw.mjs +2 -0
  81. package/dist/chunks/ar-CL3QL0tw.mjs.map +1 -0
  82. package/dist/chunks/ar-CYtG-XlN.mjs +2 -0
  83. package/dist/chunks/ar-CYtG-XlN.mjs.map +1 -0
  84. package/dist/chunks/ar-CzVj8p__.mjs +2 -0
  85. package/dist/chunks/ar-CzVj8p__.mjs.map +1 -0
  86. package/dist/chunks/ar-D7PS3e2g.mjs +2 -0
  87. package/dist/chunks/ar-D7PS3e2g.mjs.map +1 -0
  88. package/dist/chunks/ar-D8adM2Uy.mjs +2 -0
  89. package/dist/chunks/ar-D8adM2Uy.mjs.map +1 -0
  90. package/dist/chunks/ar-D9jyShaB.mjs +2 -0
  91. package/dist/chunks/ar-D9jyShaB.mjs.map +1 -0
  92. package/dist/chunks/ar-DR6OA3ZO.mjs +2 -0
  93. package/dist/chunks/ar-DR6OA3ZO.mjs.map +1 -0
  94. package/dist/chunks/ar-Deibepjm.mjs +2 -0
  95. package/dist/chunks/ar-Deibepjm.mjs.map +1 -0
  96. package/dist/chunks/ar-Dlb5riUN.mjs +2 -0
  97. package/dist/chunks/ar-Dlb5riUN.mjs.map +1 -0
  98. package/dist/chunks/ar-DmmxE2W7.mjs +2 -0
  99. package/dist/chunks/ar-DmmxE2W7.mjs.map +1 -0
  100. package/dist/chunks/ar-Ds6Z2Gzf.mjs +2 -0
  101. package/dist/chunks/ar-Ds6Z2Gzf.mjs.map +1 -0
  102. package/dist/chunks/ar-DtIHQ8nU.mjs +2 -0
  103. package/dist/chunks/ar-DtIHQ8nU.mjs.map +1 -0
  104. package/dist/chunks/ar-J8B-on-0.mjs +2 -0
  105. package/dist/chunks/ar-J8B-on-0.mjs.map +1 -0
  106. package/dist/chunks/ar-iU02mRe5.mjs +2 -0
  107. package/dist/chunks/ar-iU02mRe5.mjs.map +1 -0
  108. package/dist/chunks/ar-mSCYQYnL.mjs +2 -0
  109. package/dist/chunks/ar-mSCYQYnL.mjs.map +1 -0
  110. package/dist/chunks/color-picker-Byjl_xr9.mjs +2 -0
  111. package/dist/chunks/color-picker-Byjl_xr9.mjs.map +1 -0
  112. package/dist/chunks/de-8aCC5jBM.mjs +2 -0
  113. package/dist/chunks/de-8aCC5jBM.mjs.map +1 -0
  114. package/dist/chunks/de-B4y4ndUw.mjs +2 -0
  115. package/dist/chunks/de-B4y4ndUw.mjs.map +1 -0
  116. package/dist/chunks/de-B5fcZ0FQ.mjs +2 -0
  117. package/dist/chunks/de-B5fcZ0FQ.mjs.map +1 -0
  118. package/dist/chunks/de-BT9VmwoJ.mjs +2 -0
  119. package/dist/chunks/de-BT9VmwoJ.mjs.map +1 -0
  120. package/dist/chunks/de-BZWSyJTG.mjs +2 -0
  121. package/dist/chunks/de-BZWSyJTG.mjs.map +1 -0
  122. package/dist/chunks/de-CFD_Wgik.mjs +2 -0
  123. package/dist/chunks/de-CFD_Wgik.mjs.map +1 -0
  124. package/dist/chunks/de-CLYtb6kD.mjs +2 -0
  125. package/dist/chunks/de-CLYtb6kD.mjs.map +1 -0
  126. package/dist/chunks/de-CP5v-98M.mjs +2 -0
  127. package/dist/chunks/de-CP5v-98M.mjs.map +1 -0
  128. package/dist/chunks/de-CYJ6uWno.mjs +2 -0
  129. package/dist/chunks/de-CYJ6uWno.mjs.map +1 -0
  130. package/dist/chunks/de-ChcKkF7A.mjs +2 -0
  131. package/dist/chunks/de-ChcKkF7A.mjs.map +1 -0
  132. package/dist/chunks/de-CicoU066.mjs +2 -0
  133. package/dist/chunks/de-CicoU066.mjs.map +1 -0
  134. package/dist/chunks/de-CjLAdBt2.mjs +2 -0
  135. package/dist/chunks/de-CjLAdBt2.mjs.map +1 -0
  136. package/dist/chunks/de-CtFvAXwF.mjs +2 -0
  137. package/dist/chunks/de-CtFvAXwF.mjs.map +1 -0
  138. package/dist/chunks/de-D1OAXtxJ.mjs +2 -0
  139. package/dist/chunks/de-D1OAXtxJ.mjs.map +1 -0
  140. package/dist/chunks/de-DBbzCQrm.mjs +2 -0
  141. package/dist/chunks/de-DBbzCQrm.mjs.map +1 -0
  142. package/dist/chunks/de-DOLwx_M7.mjs +2 -0
  143. package/dist/chunks/de-DOLwx_M7.mjs.map +1 -0
  144. package/dist/chunks/de-De2miMxo.mjs +2 -0
  145. package/dist/chunks/de-De2miMxo.mjs.map +1 -0
  146. package/dist/chunks/de-OTfhhinm.mjs +2 -0
  147. package/dist/chunks/de-OTfhhinm.mjs.map +1 -0
  148. package/dist/chunks/de-PZ9-LlBp.mjs +2 -0
  149. package/dist/chunks/de-PZ9-LlBp.mjs.map +1 -0
  150. package/dist/chunks/de-UREymH-5.mjs +2 -0
  151. package/dist/chunks/de-UREymH-5.mjs.map +1 -0
  152. package/dist/chunks/de-chYdoK9q.mjs +2 -0
  153. package/dist/chunks/de-chYdoK9q.mjs.map +1 -0
  154. package/dist/chunks/de-xJh5C_pk.mjs +2 -0
  155. package/dist/chunks/de-xJh5C_pk.mjs.map +1 -0
  156. package/dist/chunks/es-B9UhsaEI.mjs +2 -0
  157. package/dist/chunks/es-B9UhsaEI.mjs.map +1 -0
  158. package/dist/chunks/es-BHGwPgrP.mjs +2 -0
  159. package/dist/chunks/es-BHGwPgrP.mjs.map +1 -0
  160. package/dist/chunks/es-BbGOZGS_.mjs +2 -0
  161. package/dist/chunks/es-BbGOZGS_.mjs.map +1 -0
  162. package/dist/chunks/es-BjPsub0k.mjs +2 -0
  163. package/dist/chunks/es-BjPsub0k.mjs.map +1 -0
  164. package/dist/chunks/es-Bk0bRDFE.mjs +2 -0
  165. package/dist/chunks/es-Bk0bRDFE.mjs.map +1 -0
  166. package/dist/chunks/es-BkS6DsrM.mjs +2 -0
  167. package/dist/chunks/es-BkS6DsrM.mjs.map +1 -0
  168. package/dist/chunks/es-BzEpr4Bk.mjs +2 -0
  169. package/dist/chunks/es-BzEpr4Bk.mjs.map +1 -0
  170. package/dist/chunks/es-C2lnWyA0.mjs +2 -0
  171. package/dist/chunks/es-C2lnWyA0.mjs.map +1 -0
  172. package/dist/chunks/es-C7e35Muh.mjs +2 -0
  173. package/dist/chunks/es-C7e35Muh.mjs.map +1 -0
  174. package/dist/chunks/es-CBk43isB.mjs +2 -0
  175. package/dist/chunks/es-CBk43isB.mjs.map +1 -0
  176. package/dist/chunks/es-CE8t9fuM.mjs +2 -0
  177. package/dist/chunks/es-CE8t9fuM.mjs.map +1 -0
  178. package/dist/chunks/es-CFjzqIbS.mjs +2 -0
  179. package/dist/chunks/es-CFjzqIbS.mjs.map +1 -0
  180. package/dist/chunks/es-Ce-AEYxc.mjs +2 -0
  181. package/dist/chunks/es-Ce-AEYxc.mjs.map +1 -0
  182. package/dist/chunks/es-Co4AJr8Y.mjs +2 -0
  183. package/dist/chunks/es-Co4AJr8Y.mjs.map +1 -0
  184. package/dist/chunks/es-Cu5_OA4X.mjs +2 -0
  185. package/dist/chunks/es-Cu5_OA4X.mjs.map +1 -0
  186. package/dist/chunks/es-Cud6JXHf.mjs +2 -0
  187. package/dist/chunks/es-Cud6JXHf.mjs.map +1 -0
  188. package/dist/chunks/es-D-II7LZC.mjs +2 -0
  189. package/dist/chunks/es-D-II7LZC.mjs.map +1 -0
  190. package/dist/chunks/es-DBBSeOaD.mjs +2 -0
  191. package/dist/chunks/es-DBBSeOaD.mjs.map +1 -0
  192. package/dist/chunks/es-DCwjeUUu.mjs +2 -0
  193. package/dist/chunks/es-DCwjeUUu.mjs.map +1 -0
  194. package/dist/chunks/es-DvgH3-WZ.mjs +2 -0
  195. package/dist/chunks/es-DvgH3-WZ.mjs.map +1 -0
  196. package/dist/chunks/es-MgguVgIs.mjs +2 -0
  197. package/dist/chunks/es-MgguVgIs.mjs.map +1 -0
  198. package/dist/chunks/es-yXjjcxgb.mjs +2 -0
  199. package/dist/chunks/es-yXjjcxgb.mjs.map +1 -0
  200. package/dist/chunks/fr-B-_yKIAY.mjs +2 -0
  201. package/dist/chunks/fr-B-_yKIAY.mjs.map +1 -0
  202. package/dist/chunks/fr-BGyF2ym0.mjs +2 -0
  203. package/dist/chunks/fr-BGyF2ym0.mjs.map +1 -0
  204. package/dist/chunks/fr-BoRJ3B2-.mjs +2 -0
  205. package/dist/chunks/fr-BoRJ3B2-.mjs.map +1 -0
  206. package/dist/chunks/fr-BrKk4SPg.mjs +2 -0
  207. package/dist/chunks/fr-BrKk4SPg.mjs.map +1 -0
  208. package/dist/chunks/fr-C-y09LKg.mjs +2 -0
  209. package/dist/chunks/fr-C-y09LKg.mjs.map +1 -0
  210. package/dist/chunks/fr-C1W7jyd6.mjs +2 -0
  211. package/dist/chunks/fr-C1W7jyd6.mjs.map +1 -0
  212. package/dist/chunks/fr-C8CtmWBj.mjs +2 -0
  213. package/dist/chunks/fr-C8CtmWBj.mjs.map +1 -0
  214. package/dist/chunks/fr-C9oiPW0k.mjs +2 -0
  215. package/dist/chunks/fr-C9oiPW0k.mjs.map +1 -0
  216. package/dist/chunks/fr-CEkk4UyZ.mjs +2 -0
  217. package/dist/chunks/fr-CEkk4UyZ.mjs.map +1 -0
  218. package/dist/chunks/fr-Ccaetiwi.mjs +2 -0
  219. package/dist/chunks/fr-Ccaetiwi.mjs.map +1 -0
  220. package/dist/chunks/fr-Ccku5KzA.mjs +2 -0
  221. package/dist/chunks/fr-Ccku5KzA.mjs.map +1 -0
  222. package/dist/chunks/fr-CfUg1FxU.mjs +2 -0
  223. package/dist/chunks/fr-CfUg1FxU.mjs.map +1 -0
  224. package/dist/chunks/fr-DDkBcjmO.mjs +2 -0
  225. package/dist/chunks/fr-DDkBcjmO.mjs.map +1 -0
  226. package/dist/chunks/fr-DNwLChcm.mjs +2 -0
  227. package/dist/chunks/fr-DNwLChcm.mjs.map +1 -0
  228. package/dist/chunks/fr-DvneSjCf.mjs +2 -0
  229. package/dist/chunks/fr-DvneSjCf.mjs.map +1 -0
  230. package/dist/chunks/fr-Dx4Qqimj.mjs +2 -0
  231. package/dist/chunks/fr-Dx4Qqimj.mjs.map +1 -0
  232. package/dist/chunks/fr-RHXmueoO.mjs +2 -0
  233. package/dist/chunks/fr-RHXmueoO.mjs.map +1 -0
  234. package/dist/chunks/fr-Wiobfk5s.mjs +2 -0
  235. package/dist/chunks/fr-Wiobfk5s.mjs.map +1 -0
  236. package/dist/chunks/fr-YMiDtWuG.mjs +2 -0
  237. package/dist/chunks/fr-YMiDtWuG.mjs.map +1 -0
  238. package/dist/chunks/fr-_Oxf0k66.mjs +2 -0
  239. package/dist/chunks/fr-_Oxf0k66.mjs.map +1 -0
  240. package/dist/chunks/fr-gurfH-7T.mjs +2 -0
  241. package/dist/chunks/fr-gurfH-7T.mjs.map +1 -0
  242. package/dist/chunks/fr-zP7EjxDL.mjs +2 -0
  243. package/dist/chunks/fr-zP7EjxDL.mjs.map +1 -0
  244. package/dist/chunks/hi-B2W8pFqK.mjs +2 -0
  245. package/dist/chunks/hi-B2W8pFqK.mjs.map +1 -0
  246. package/dist/chunks/hi-B2m69ZCq.mjs +2 -0
  247. package/dist/chunks/hi-B2m69ZCq.mjs.map +1 -0
  248. package/dist/chunks/hi-BMIt3y_-.mjs +2 -0
  249. package/dist/chunks/hi-BMIt3y_-.mjs.map +1 -0
  250. package/dist/chunks/hi-BmkfaZpg.mjs +2 -0
  251. package/dist/chunks/hi-BmkfaZpg.mjs.map +1 -0
  252. package/dist/chunks/hi-C-l_R2SO.mjs +2 -0
  253. package/dist/chunks/hi-C-l_R2SO.mjs.map +1 -0
  254. package/dist/chunks/hi-C1LhM-oY.mjs +2 -0
  255. package/dist/chunks/hi-C1LhM-oY.mjs.map +1 -0
  256. package/dist/chunks/hi-CGEbGI1l.mjs +2 -0
  257. package/dist/chunks/hi-CGEbGI1l.mjs.map +1 -0
  258. package/dist/chunks/hi-CPuhj7IA.mjs +2 -0
  259. package/dist/chunks/hi-CPuhj7IA.mjs.map +1 -0
  260. package/dist/chunks/hi-CT5WERqi.mjs +2 -0
  261. package/dist/chunks/hi-CT5WERqi.mjs.map +1 -0
  262. package/dist/chunks/hi-CbLPPQ0b.mjs +2 -0
  263. package/dist/chunks/hi-CbLPPQ0b.mjs.map +1 -0
  264. package/dist/chunks/hi-ClvEtEKe.mjs +2 -0
  265. package/dist/chunks/hi-ClvEtEKe.mjs.map +1 -0
  266. package/dist/chunks/hi-CpBWHmYH.mjs +2 -0
  267. package/dist/chunks/hi-CpBWHmYH.mjs.map +1 -0
  268. package/dist/chunks/hi-DAfl8nU_.mjs +2 -0
  269. package/dist/chunks/hi-DAfl8nU_.mjs.map +1 -0
  270. package/dist/chunks/hi-DVof3w0y.mjs +2 -0
  271. package/dist/chunks/hi-DVof3w0y.mjs.map +1 -0
  272. package/dist/chunks/hi-DtlvSQkD.mjs +2 -0
  273. package/dist/chunks/hi-DtlvSQkD.mjs.map +1 -0
  274. package/dist/chunks/hi-FH3CAJuR.mjs +2 -0
  275. package/dist/chunks/hi-FH3CAJuR.mjs.map +1 -0
  276. package/dist/chunks/hi-Ga9h9a_1.mjs +2 -0
  277. package/dist/chunks/hi-Ga9h9a_1.mjs.map +1 -0
  278. package/dist/chunks/hi-Zc17M1T-.mjs +2 -0
  279. package/dist/chunks/hi-Zc17M1T-.mjs.map +1 -0
  280. package/dist/chunks/hi-g7i0bmig.mjs +2 -0
  281. package/dist/chunks/hi-g7i0bmig.mjs.map +1 -0
  282. package/dist/chunks/hi-js2P6byR.mjs +2 -0
  283. package/dist/chunks/hi-js2P6byR.mjs.map +1 -0
  284. package/dist/chunks/hi-ntUsOspQ.mjs +2 -0
  285. package/dist/chunks/hi-ntUsOspQ.mjs.map +1 -0
  286. package/dist/chunks/hi-yxAcR3w6.mjs +2 -0
  287. package/dist/chunks/hi-yxAcR3w6.mjs.map +1 -0
  288. package/dist/chunks/index-C8xtb3SM.mjs +2 -0
  289. package/dist/chunks/index-C8xtb3SM.mjs.map +1 -0
  290. package/dist/chunks/index-DAoSt12h.mjs +2 -0
  291. package/dist/chunks/index-DAoSt12h.mjs.map +1 -0
  292. package/dist/chunks/pt--IiroJQw.mjs +2 -0
  293. package/dist/chunks/pt--IiroJQw.mjs.map +1 -0
  294. package/dist/chunks/pt-BF72W8M5.mjs +2 -0
  295. package/dist/chunks/pt-BF72W8M5.mjs.map +1 -0
  296. package/dist/chunks/pt-BX_t4luI.mjs +2 -0
  297. package/dist/chunks/pt-BX_t4luI.mjs.map +1 -0
  298. package/dist/chunks/pt-B_XJ2s9X.mjs +2 -0
  299. package/dist/chunks/pt-B_XJ2s9X.mjs.map +1 -0
  300. package/dist/chunks/pt-C-Vp7Rxj.mjs +2 -0
  301. package/dist/chunks/pt-C-Vp7Rxj.mjs.map +1 -0
  302. package/dist/chunks/pt-CD2aCZXf.mjs +2 -0
  303. package/dist/chunks/pt-CD2aCZXf.mjs.map +1 -0
  304. package/dist/chunks/pt-CFjzqIbS.mjs +2 -0
  305. package/dist/chunks/pt-CFjzqIbS.mjs.map +1 -0
  306. package/dist/chunks/pt-CHjmBegF.mjs +2 -0
  307. package/dist/chunks/pt-CHjmBegF.mjs.map +1 -0
  308. package/dist/chunks/pt-CQRzEocL.mjs +2 -0
  309. package/dist/chunks/pt-CQRzEocL.mjs.map +1 -0
  310. package/dist/chunks/pt-Cem2WxUk.mjs +2 -0
  311. package/dist/chunks/pt-Cem2WxUk.mjs.map +1 -0
  312. package/dist/chunks/pt-D6kdF3fH.mjs +2 -0
  313. package/dist/chunks/pt-D6kdF3fH.mjs.map +1 -0
  314. package/dist/chunks/pt-DJfJVeY8.mjs +2 -0
  315. package/dist/chunks/pt-DJfJVeY8.mjs.map +1 -0
  316. package/dist/chunks/pt-DfB-IaYi.mjs +2 -0
  317. package/dist/chunks/pt-DfB-IaYi.mjs.map +1 -0
  318. package/dist/chunks/pt-DlNdH9pu.mjs +2 -0
  319. package/dist/chunks/pt-DlNdH9pu.mjs.map +1 -0
  320. package/dist/chunks/pt-DrJ0-8Yo.mjs +2 -0
  321. package/dist/chunks/pt-DrJ0-8Yo.mjs.map +1 -0
  322. package/dist/chunks/pt-DsBJpgpe.mjs +2 -0
  323. package/dist/chunks/pt-DsBJpgpe.mjs.map +1 -0
  324. package/dist/chunks/pt-DwdSYJzC.mjs +2 -0
  325. package/dist/chunks/pt-DwdSYJzC.mjs.map +1 -0
  326. package/dist/chunks/pt-Dx9UkZ3j.mjs +2 -0
  327. package/dist/chunks/pt-Dx9UkZ3j.mjs.map +1 -0
  328. package/dist/chunks/pt-TuA3_GDM.mjs +2 -0
  329. package/dist/chunks/pt-TuA3_GDM.mjs.map +1 -0
  330. package/dist/chunks/pt-cN6r-f7f.mjs +2 -0
  331. package/dist/chunks/pt-cN6r-f7f.mjs.map +1 -0
  332. package/dist/chunks/pt-uNGpVM3D.mjs +2 -0
  333. package/dist/chunks/pt-uNGpVM3D.mjs.map +1 -0
  334. package/dist/chunks/pt-v1E9u-Jx.mjs +2 -0
  335. package/dist/chunks/pt-v1E9u-Jx.mjs.map +1 -0
  336. package/dist/chunks/ru-0h51zrqE.mjs +2 -0
  337. package/dist/chunks/ru-0h51zrqE.mjs.map +1 -0
  338. package/dist/chunks/ru-4S8w6UN_.mjs +2 -0
  339. package/dist/chunks/ru-4S8w6UN_.mjs.map +1 -0
  340. package/dist/chunks/ru-B0cRw90L.mjs +2 -0
  341. package/dist/chunks/ru-B0cRw90L.mjs.map +1 -0
  342. package/dist/chunks/ru-B3O7WXNM.mjs +2 -0
  343. package/dist/chunks/ru-B3O7WXNM.mjs.map +1 -0
  344. package/dist/chunks/ru-B6zVAzvI.mjs +2 -0
  345. package/dist/chunks/ru-B6zVAzvI.mjs.map +1 -0
  346. package/dist/chunks/ru-B8teJin_.mjs +2 -0
  347. package/dist/chunks/ru-B8teJin_.mjs.map +1 -0
  348. package/dist/chunks/ru-BCriPw-8.mjs +2 -0
  349. package/dist/chunks/ru-BCriPw-8.mjs.map +1 -0
  350. package/dist/chunks/ru-BNOU16E5.mjs +2 -0
  351. package/dist/chunks/ru-BNOU16E5.mjs.map +1 -0
  352. package/dist/chunks/ru-BO6BIS5W.mjs +2 -0
  353. package/dist/chunks/ru-BO6BIS5W.mjs.map +1 -0
  354. package/dist/chunks/ru-Bdy1lLuc.mjs +2 -0
  355. package/dist/chunks/ru-Bdy1lLuc.mjs.map +1 -0
  356. package/dist/chunks/ru-BgBctNVm.mjs +2 -0
  357. package/dist/chunks/ru-BgBctNVm.mjs.map +1 -0
  358. package/dist/chunks/ru-CNLx7T3O.mjs +2 -0
  359. package/dist/chunks/ru-CNLx7T3O.mjs.map +1 -0
  360. package/dist/chunks/ru-CVSCT776.mjs +2 -0
  361. package/dist/chunks/ru-CVSCT776.mjs.map +1 -0
  362. package/dist/chunks/ru-CZvkdGnf.mjs +2 -0
  363. package/dist/chunks/ru-CZvkdGnf.mjs.map +1 -0
  364. package/dist/chunks/ru-CegMPuML.mjs +2 -0
  365. package/dist/chunks/ru-CegMPuML.mjs.map +1 -0
  366. package/dist/chunks/ru-CiLrD2Nz.mjs +2 -0
  367. package/dist/chunks/ru-CiLrD2Nz.mjs.map +1 -0
  368. package/dist/chunks/ru-ClEM6OKY.mjs +2 -0
  369. package/dist/chunks/ru-ClEM6OKY.mjs.map +1 -0
  370. package/dist/chunks/ru-CrbxCeQf.mjs +2 -0
  371. package/dist/chunks/ru-CrbxCeQf.mjs.map +1 -0
  372. package/dist/chunks/ru-D3j2x2xu.mjs +2 -0
  373. package/dist/chunks/ru-D3j2x2xu.mjs.map +1 -0
  374. package/dist/chunks/ru-DdHqb4Mh.mjs +2 -0
  375. package/dist/chunks/ru-DdHqb4Mh.mjs.map +1 -0
  376. package/dist/chunks/ru-DjgNdOdJ.mjs +2 -0
  377. package/dist/chunks/ru-DjgNdOdJ.mjs.map +1 -0
  378. package/dist/chunks/ru-XKNCzkR2.mjs +2 -0
  379. package/dist/chunks/ru-XKNCzkR2.mjs.map +1 -0
  380. package/dist/chunks/zh--oNSMazK.mjs +2 -0
  381. package/dist/chunks/zh--oNSMazK.mjs.map +1 -0
  382. package/dist/chunks/zh-BfeWdPIz.mjs +2 -0
  383. package/dist/chunks/zh-BfeWdPIz.mjs.map +1 -0
  384. package/dist/chunks/zh-BnOxGKxF.mjs +2 -0
  385. package/dist/chunks/zh-BnOxGKxF.mjs.map +1 -0
  386. package/dist/chunks/zh-BqMtE-jN.mjs +2 -0
  387. package/dist/chunks/zh-BqMtE-jN.mjs.map +1 -0
  388. package/dist/chunks/zh-C3aI7A2o.mjs +2 -0
  389. package/dist/chunks/zh-C3aI7A2o.mjs.map +1 -0
  390. package/dist/chunks/zh-C6YALJZt.mjs +2 -0
  391. package/dist/chunks/zh-C6YALJZt.mjs.map +1 -0
  392. package/dist/chunks/zh-CWdTbUOP.mjs +2 -0
  393. package/dist/chunks/zh-CWdTbUOP.mjs.map +1 -0
  394. package/dist/chunks/zh-CY01pMD4.mjs +2 -0
  395. package/dist/chunks/zh-CY01pMD4.mjs.map +1 -0
  396. package/dist/chunks/zh-Cmt7n9FY.mjs +2 -0
  397. package/dist/chunks/zh-Cmt7n9FY.mjs.map +1 -0
  398. package/dist/chunks/zh-CpP2kee3.mjs +2 -0
  399. package/dist/chunks/zh-CpP2kee3.mjs.map +1 -0
  400. package/dist/chunks/zh-Cpbg4evx.mjs +2 -0
  401. package/dist/chunks/zh-Cpbg4evx.mjs.map +1 -0
  402. package/dist/chunks/zh-Cqb55JWa.mjs +2 -0
  403. package/dist/chunks/zh-Cqb55JWa.mjs.map +1 -0
  404. package/dist/chunks/zh-DCQZ6gss.mjs +2 -0
  405. package/dist/chunks/zh-DCQZ6gss.mjs.map +1 -0
  406. package/dist/chunks/zh-DG2CNTUU.mjs +2 -0
  407. package/dist/chunks/zh-DG2CNTUU.mjs.map +1 -0
  408. package/dist/chunks/zh-DTiTJbzz.mjs +2 -0
  409. package/dist/chunks/zh-DTiTJbzz.mjs.map +1 -0
  410. package/dist/chunks/zh-Da1z6qbB.mjs +2 -0
  411. package/dist/chunks/zh-Da1z6qbB.mjs.map +1 -0
  412. package/dist/chunks/zh-DlBt06Pr.mjs +2 -0
  413. package/dist/chunks/zh-DlBt06Pr.mjs.map +1 -0
  414. package/dist/chunks/zh-Dt-wVrNr.mjs +2 -0
  415. package/dist/chunks/zh-Dt-wVrNr.mjs.map +1 -0
  416. package/dist/chunks/zh-ND6vW2M-.mjs +2 -0
  417. package/dist/chunks/zh-ND6vW2M-.mjs.map +1 -0
  418. package/dist/chunks/zh-Yd3GNsa0.mjs +2 -0
  419. package/dist/chunks/zh-Yd3GNsa0.mjs.map +1 -0
  420. package/dist/chunks/zh-lhynyH6Q.mjs +2 -0
  421. package/dist/chunks/zh-lhynyH6Q.mjs.map +1 -0
  422. package/dist/chunks/zh-v9NmlEIN.mjs +2 -0
  423. package/dist/chunks/zh-v9NmlEIN.mjs.map +1 -0
  424. package/dist/commands/Commands.d.ts +9 -3
  425. package/dist/commands/Commands.d.ts.map +1 -1
  426. package/dist/commands/GapCursorCommands.d.ts.map +1 -1
  427. package/dist/commands/MovementCommands.d.ts +1 -4
  428. package/dist/commands/MovementCommands.d.ts.map +1 -1
  429. package/dist/commands/NodeSelectionCommands.d.ts +3 -1
  430. package/dist/commands/NodeSelectionCommands.d.ts.map +1 -1
  431. package/dist/commands/WordBoundary.d.ts +4 -9
  432. package/dist/commands/WordBoundary.d.ts.map +1 -1
  433. package/dist/editor/Announcer.d.ts +1 -2
  434. package/dist/editor/Announcer.d.ts.map +1 -1
  435. package/dist/{model → editor}/BuiltinSpecs.d.ts +1 -1
  436. package/dist/editor/BuiltinSpecs.d.ts.map +1 -0
  437. package/dist/editor/ContentSerializer.d.ts +24 -0
  438. package/dist/editor/ContentSerializer.d.ts.map +1 -0
  439. package/dist/editor/EditorConfigController.d.ts +38 -0
  440. package/dist/editor/EditorConfigController.d.ts.map +1 -0
  441. package/dist/editor/EditorDOM.d.ts +3 -4
  442. package/dist/editor/EditorDOM.d.ts.map +1 -1
  443. package/dist/editor/EditorEventEmitter.d.ts +30 -0
  444. package/dist/editor/EditorEventEmitter.d.ts.map +1 -0
  445. package/dist/editor/EditorLifecycleCoordinator.d.ts +24 -0
  446. package/dist/editor/EditorLifecycleCoordinator.d.ts.map +1 -0
  447. package/dist/editor/EditorLocale.d.ts +9 -0
  448. package/dist/editor/EditorLocale.d.ts.map +1 -0
  449. package/dist/editor/EditorStyleCoordinator.d.ts +9 -0
  450. package/dist/editor/EditorStyleCoordinator.d.ts.map +1 -0
  451. package/dist/editor/NotectlEditor.d.ts +20 -54
  452. package/dist/editor/NotectlEditor.d.ts.map +1 -1
  453. package/dist/editor/PaperLayoutController.d.ts +1 -1
  454. package/dist/editor/PaperLayoutController.d.ts.map +1 -1
  455. package/dist/editor/PluginBootstrapper.d.ts +18 -0
  456. package/dist/editor/PluginBootstrapper.d.ts.map +1 -0
  457. package/dist/editor/locales/ar.d.ts +4 -0
  458. package/dist/editor/locales/ar.d.ts.map +1 -0
  459. package/dist/editor/locales/de.d.ts +4 -0
  460. package/dist/editor/locales/de.d.ts.map +1 -0
  461. package/dist/editor/locales/es.d.ts +4 -0
  462. package/dist/editor/locales/es.d.ts.map +1 -0
  463. package/dist/editor/locales/fr.d.ts +4 -0
  464. package/dist/editor/locales/fr.d.ts.map +1 -0
  465. package/dist/editor/locales/hi.d.ts +4 -0
  466. package/dist/editor/locales/hi.d.ts.map +1 -0
  467. package/dist/editor/locales/pt.d.ts +4 -0
  468. package/dist/editor/locales/pt.d.ts.map +1 -0
  469. package/dist/editor/locales/ru.d.ts +4 -0
  470. package/dist/editor/locales/ru.d.ts.map +1 -0
  471. package/dist/editor/locales/zh.d.ts +4 -0
  472. package/dist/editor/locales/zh.d.ts.map +1 -0
  473. package/dist/editor/styles/base.d.ts +1 -1
  474. package/dist/editor/styles/base.d.ts.map +1 -1
  475. package/dist/editor/styles/code-block.d.ts +1 -1
  476. package/dist/editor/styles/code-block.d.ts.map +1 -1
  477. package/dist/editor/styles/font-select.d.ts +1 -1
  478. package/dist/editor/styles/font-select.d.ts.map +1 -1
  479. package/dist/editor/styles/font-size-select.d.ts +1 -1
  480. package/dist/editor/styles/font-size-select.d.ts.map +1 -1
  481. package/dist/editor/styles/heading-select.d.ts +1 -1
  482. package/dist/editor/styles/heading-select.d.ts.map +1 -1
  483. package/dist/editor/styles/image.d.ts +1 -1
  484. package/dist/editor/styles/image.d.ts.map +1 -1
  485. package/dist/editor/styles/list.d.ts +1 -1
  486. package/dist/editor/styles/list.d.ts.map +1 -1
  487. package/dist/editor/styles/table.d.ts +1 -1
  488. package/dist/editor/styles/table.d.ts.map +1 -1
  489. package/dist/editor/styles/toolbar.d.ts +1 -1
  490. package/dist/editor/styles/toolbar.d.ts.map +1 -1
  491. package/dist/fonts.mjs +1 -6
  492. package/dist/fonts.mjs.map +1 -1
  493. package/dist/full.d.ts +45 -0
  494. package/dist/full.d.ts.map +1 -0
  495. package/dist/full.mjs +2 -0
  496. package/dist/full.mjs.map +1 -0
  497. package/dist/html.d.ts +16 -0
  498. package/dist/html.d.ts.map +1 -0
  499. package/dist/html.mjs +2 -0
  500. package/dist/html.mjs.map +1 -0
  501. package/dist/i18n/Locale.d.ts +1 -0
  502. package/dist/i18n/Locale.d.ts.map +1 -1
  503. package/dist/i18n/index.d.ts +0 -1
  504. package/dist/i18n/index.d.ts.map +1 -1
  505. package/dist/index.d.ts +29 -93
  506. package/dist/index.d.ts.map +1 -1
  507. package/dist/input/BlockInsertion.d.ts +51 -0
  508. package/dist/input/BlockInsertion.d.ts.map +1 -0
  509. package/dist/input/ClipboardHandler.d.ts +22 -0
  510. package/dist/input/ClipboardHandler.d.ts.map +1 -1
  511. package/dist/input/CompositionTracker.d.ts +2 -1
  512. package/dist/input/CompositionTracker.d.ts.map +1 -1
  513. package/dist/{model → input}/HTMLParser.d.ts +3 -3
  514. package/dist/input/HTMLParser.d.ts.map +1 -0
  515. package/dist/input/InputHandler.d.ts +1 -1
  516. package/dist/input/InputHandler.d.ts.map +1 -1
  517. package/dist/input/InputManager.d.ts +35 -0
  518. package/dist/input/InputManager.d.ts.map +1 -0
  519. package/dist/input/InternalClipboard.d.ts +11 -1
  520. package/dist/input/InternalClipboard.d.ts.map +1 -1
  521. package/dist/input/KeyboardHandler.d.ts +12 -1
  522. package/dist/input/KeyboardHandler.d.ts.map +1 -1
  523. package/dist/input/PasteHandler.d.ts +21 -17
  524. package/dist/input/PasteHandler.d.ts.map +1 -1
  525. package/dist/model/AttrRegistry.d.ts +1 -1
  526. package/dist/model/AttrRegistry.d.ts.map +1 -1
  527. package/dist/model/BlockAlignment.d.ts +8 -0
  528. package/dist/model/BlockAlignment.d.ts.map +1 -0
  529. package/dist/model/BlockTypeLabels.d.ts +7 -0
  530. package/dist/model/BlockTypeLabels.d.ts.map +1 -0
  531. package/dist/model/CompositionState.d.ts +8 -0
  532. package/dist/model/CompositionState.d.ts.map +1 -0
  533. package/dist/{input → model}/FileHandlerRegistry.d.ts +1 -1
  534. package/dist/{input → model}/FileHandlerRegistry.d.ts.map +1 -1
  535. package/dist/model/HTMLUtils.d.ts +6 -0
  536. package/dist/model/HTMLUtils.d.ts.map +1 -1
  537. package/dist/{input → model}/InputRule.d.ts.map +1 -1
  538. package/dist/{input → model}/InputRuleRegistry.d.ts.map +1 -1
  539. package/dist/{input → model}/Keymap.d.ts.map +1 -1
  540. package/dist/{input → model}/KeymapRegistry.d.ts.map +1 -1
  541. package/dist/model/MarkSpec.d.ts +2 -2
  542. package/dist/model/MarkSpec.d.ts.map +1 -1
  543. package/dist/model/NodeSpec.d.ts +0 -3
  544. package/dist/model/NodeSpec.d.ts.map +1 -1
  545. package/dist/model/PaperSize.d.ts.map +1 -0
  546. package/dist/model/WordBoundary.d.ts +12 -0
  547. package/dist/model/WordBoundary.d.ts.map +1 -0
  548. package/dist/notectl-core.mjs +1 -3888
  549. package/dist/notectl-core.mjs.map +1 -1
  550. package/dist/notectl-core.umd.js +1 -9523
  551. package/dist/notectl-core.umd.js.map +1 -1
  552. package/dist/{view → platform}/Platform.d.ts +2 -0
  553. package/dist/platform/Platform.d.ts.map +1 -0
  554. package/dist/plugins/Plugin.d.ts +5 -5
  555. package/dist/plugins/Plugin.d.ts.map +1 -1
  556. package/dist/plugins/PluginManager.d.ts +3 -3
  557. package/dist/plugins/alignment/AlignmentLocale.d.ts +3 -10
  558. package/dist/plugins/alignment/AlignmentLocale.d.ts.map +1 -1
  559. package/dist/plugins/alignment/AlignmentPlugin.d.ts +3 -13
  560. package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
  561. package/dist/plugins/alignment/index.d.ts +3 -1
  562. package/dist/plugins/alignment/index.d.ts.map +1 -1
  563. package/dist/plugins/alignment/locales/ar.d.ts +4 -0
  564. package/dist/plugins/alignment/locales/ar.d.ts.map +1 -0
  565. package/dist/plugins/alignment/locales/de.d.ts +4 -0
  566. package/dist/plugins/alignment/locales/de.d.ts.map +1 -0
  567. package/dist/plugins/alignment/locales/es.d.ts +4 -0
  568. package/dist/plugins/alignment/locales/es.d.ts.map +1 -0
  569. package/dist/plugins/alignment/locales/fr.d.ts +4 -0
  570. package/dist/plugins/alignment/locales/fr.d.ts.map +1 -0
  571. package/dist/plugins/alignment/locales/hi.d.ts +4 -0
  572. package/dist/plugins/alignment/locales/hi.d.ts.map +1 -0
  573. package/dist/plugins/alignment/locales/pt.d.ts +4 -0
  574. package/dist/plugins/alignment/locales/pt.d.ts.map +1 -0
  575. package/dist/plugins/alignment/locales/ru.d.ts +4 -0
  576. package/dist/plugins/alignment/locales/ru.d.ts.map +1 -0
  577. package/dist/plugins/alignment/locales/zh.d.ts +4 -0
  578. package/dist/plugins/alignment/locales/zh.d.ts.map +1 -0
  579. package/dist/plugins/alignment.mjs +1 -5
  580. package/dist/plugins/alignment.mjs.map +1 -1
  581. package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts +4 -0
  582. package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts.map +1 -0
  583. package/dist/plugins/blockquote/BlockquoteLocale.d.ts +1 -8
  584. package/dist/plugins/blockquote/BlockquoteLocale.d.ts.map +1 -1
  585. package/dist/plugins/blockquote/BlockquotePlugin.d.ts +1 -3
  586. package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
  587. package/dist/plugins/blockquote/BlockquoteStyles.d.ts +3 -0
  588. package/dist/plugins/blockquote/BlockquoteStyles.d.ts.map +1 -0
  589. package/dist/plugins/blockquote/index.d.ts +2 -0
  590. package/dist/plugins/blockquote/index.d.ts.map +1 -1
  591. package/dist/plugins/blockquote/locales/ar.d.ts +4 -0
  592. package/dist/plugins/blockquote/locales/ar.d.ts.map +1 -0
  593. package/dist/plugins/blockquote/locales/de.d.ts +4 -0
  594. package/dist/plugins/blockquote/locales/de.d.ts.map +1 -0
  595. package/dist/plugins/blockquote/locales/es.d.ts +4 -0
  596. package/dist/plugins/blockquote/locales/es.d.ts.map +1 -0
  597. package/dist/plugins/blockquote/locales/fr.d.ts +4 -0
  598. package/dist/plugins/blockquote/locales/fr.d.ts.map +1 -0
  599. package/dist/plugins/blockquote/locales/hi.d.ts +4 -0
  600. package/dist/plugins/blockquote/locales/hi.d.ts.map +1 -0
  601. package/dist/plugins/blockquote/locales/pt.d.ts +4 -0
  602. package/dist/plugins/blockquote/locales/pt.d.ts.map +1 -0
  603. package/dist/plugins/blockquote/locales/ru.d.ts +4 -0
  604. package/dist/plugins/blockquote/locales/ru.d.ts.map +1 -0
  605. package/dist/plugins/blockquote/locales/zh.d.ts +4 -0
  606. package/dist/plugins/blockquote/locales/zh.d.ts.map +1 -0
  607. package/dist/plugins/blockquote.mjs +1 -4
  608. package/dist/plugins/blockquote.mjs.map +1 -1
  609. package/dist/plugins/caret-navigation/CaretNavigationLocale.d.ts +21 -0
  610. package/dist/plugins/caret-navigation/CaretNavigationLocale.d.ts.map +1 -0
  611. package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts +2 -1
  612. package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts.map +1 -1
  613. package/dist/plugins/caret-navigation/index.d.ts +2 -0
  614. package/dist/plugins/caret-navigation/index.d.ts.map +1 -1
  615. package/dist/plugins/caret-navigation/locales/ar.d.ts +4 -0
  616. package/dist/plugins/caret-navigation/locales/ar.d.ts.map +1 -0
  617. package/dist/plugins/caret-navigation/locales/de.d.ts +4 -0
  618. package/dist/plugins/caret-navigation/locales/de.d.ts.map +1 -0
  619. package/dist/plugins/caret-navigation/locales/es.d.ts +4 -0
  620. package/dist/plugins/caret-navigation/locales/es.d.ts.map +1 -0
  621. package/dist/plugins/caret-navigation/locales/fr.d.ts +4 -0
  622. package/dist/plugins/caret-navigation/locales/fr.d.ts.map +1 -0
  623. package/dist/plugins/caret-navigation/locales/hi.d.ts +4 -0
  624. package/dist/plugins/caret-navigation/locales/hi.d.ts.map +1 -0
  625. package/dist/plugins/caret-navigation/locales/pt.d.ts +4 -0
  626. package/dist/plugins/caret-navigation/locales/pt.d.ts.map +1 -0
  627. package/dist/plugins/caret-navigation/locales/ru.d.ts +4 -0
  628. package/dist/plugins/caret-navigation/locales/ru.d.ts.map +1 -0
  629. package/dist/plugins/caret-navigation/locales/zh.d.ts +4 -0
  630. package/dist/plugins/caret-navigation/locales/zh.d.ts.map +1 -0
  631. package/dist/plugins/caret-navigation.mjs +1 -4
  632. package/dist/plugins/caret-navigation.mjs.map +1 -1
  633. package/dist/plugins/code-block/CodeBlockLocale.d.ts +5 -8
  634. package/dist/plugins/code-block/CodeBlockLocale.d.ts.map +1 -1
  635. package/dist/plugins/code-block/CodeBlockNodeView.d.ts +2 -1
  636. package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
  637. package/dist/plugins/code-block/CodeBlockPlugin.d.ts +2 -2
  638. package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
  639. package/dist/plugins/code-block/CodeBlockService.d.ts.map +1 -1
  640. package/dist/plugins/code-block/CodeBlockTypes.d.ts +0 -1
  641. package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -1
  642. package/dist/plugins/code-block/index.d.ts +2 -0
  643. package/dist/plugins/code-block/index.d.ts.map +1 -1
  644. package/dist/plugins/code-block/locales/ar.d.ts +4 -0
  645. package/dist/plugins/code-block/locales/ar.d.ts.map +1 -0
  646. package/dist/plugins/code-block/locales/de.d.ts +4 -0
  647. package/dist/plugins/code-block/locales/de.d.ts.map +1 -0
  648. package/dist/plugins/code-block/locales/es.d.ts +4 -0
  649. package/dist/plugins/code-block/locales/es.d.ts.map +1 -0
  650. package/dist/plugins/code-block/locales/fr.d.ts +4 -0
  651. package/dist/plugins/code-block/locales/fr.d.ts.map +1 -0
  652. package/dist/plugins/code-block/locales/hi.d.ts +4 -0
  653. package/dist/plugins/code-block/locales/hi.d.ts.map +1 -0
  654. package/dist/plugins/code-block/locales/pt.d.ts +4 -0
  655. package/dist/plugins/code-block/locales/pt.d.ts.map +1 -0
  656. package/dist/plugins/code-block/locales/ru.d.ts +4 -0
  657. package/dist/plugins/code-block/locales/ru.d.ts.map +1 -0
  658. package/dist/plugins/code-block/locales/zh.d.ts +4 -0
  659. package/dist/plugins/code-block/locales/zh.d.ts.map +1 -0
  660. package/dist/plugins/code-block.mjs +1 -5
  661. package/dist/plugins/code-block.mjs.map +1 -1
  662. package/dist/plugins/font/FontLocale.d.ts +1 -8
  663. package/dist/plugins/font/FontLocale.d.ts.map +1 -1
  664. package/dist/plugins/font/FontPlugin.d.ts +1 -3
  665. package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
  666. package/dist/plugins/font/index.d.ts +2 -0
  667. package/dist/plugins/font/index.d.ts.map +1 -1
  668. package/dist/plugins/font/locales/ar.d.ts +4 -0
  669. package/dist/plugins/font/locales/ar.d.ts.map +1 -0
  670. package/dist/plugins/font/locales/de.d.ts +4 -0
  671. package/dist/plugins/font/locales/de.d.ts.map +1 -0
  672. package/dist/plugins/font/locales/es.d.ts +4 -0
  673. package/dist/plugins/font/locales/es.d.ts.map +1 -0
  674. package/dist/plugins/font/locales/fr.d.ts +4 -0
  675. package/dist/plugins/font/locales/fr.d.ts.map +1 -0
  676. package/dist/plugins/font/locales/hi.d.ts +4 -0
  677. package/dist/plugins/font/locales/hi.d.ts.map +1 -0
  678. package/dist/plugins/font/locales/pt.d.ts +4 -0
  679. package/dist/plugins/font/locales/pt.d.ts.map +1 -0
  680. package/dist/plugins/font/locales/ru.d.ts +4 -0
  681. package/dist/plugins/font/locales/ru.d.ts.map +1 -0
  682. package/dist/plugins/font/locales/zh.d.ts +4 -0
  683. package/dist/plugins/font/locales/zh.d.ts.map +1 -0
  684. package/dist/plugins/font-size/FontSizeLocale.d.ts +1 -8
  685. package/dist/plugins/font-size/FontSizeLocale.d.ts.map +1 -1
  686. package/dist/plugins/font-size/FontSizePlugin.d.ts +1 -3
  687. package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
  688. package/dist/plugins/font-size/FontSizePopup.d.ts +1 -1
  689. package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -1
  690. package/dist/plugins/font-size/index.d.ts +2 -0
  691. package/dist/plugins/font-size/index.d.ts.map +1 -1
  692. package/dist/plugins/font-size/locales/ar.d.ts +4 -0
  693. package/dist/plugins/font-size/locales/ar.d.ts.map +1 -0
  694. package/dist/plugins/font-size/locales/de.d.ts +4 -0
  695. package/dist/plugins/font-size/locales/de.d.ts.map +1 -0
  696. package/dist/plugins/font-size/locales/es.d.ts +4 -0
  697. package/dist/plugins/font-size/locales/es.d.ts.map +1 -0
  698. package/dist/plugins/font-size/locales/fr.d.ts +4 -0
  699. package/dist/plugins/font-size/locales/fr.d.ts.map +1 -0
  700. package/dist/plugins/font-size/locales/hi.d.ts +4 -0
  701. package/dist/plugins/font-size/locales/hi.d.ts.map +1 -0
  702. package/dist/plugins/font-size/locales/pt.d.ts +4 -0
  703. package/dist/plugins/font-size/locales/pt.d.ts.map +1 -0
  704. package/dist/plugins/font-size/locales/ru.d.ts +4 -0
  705. package/dist/plugins/font-size/locales/ru.d.ts.map +1 -0
  706. package/dist/plugins/font-size/locales/zh.d.ts +4 -0
  707. package/dist/plugins/font-size/locales/zh.d.ts.map +1 -0
  708. package/dist/plugins/font-size.mjs +1 -4
  709. package/dist/plugins/font-size.mjs.map +1 -1
  710. package/dist/plugins/font.mjs +1 -4
  711. package/dist/plugins/font.mjs.map +1 -1
  712. package/dist/plugins/gap-cursor/GapCursorLocale.d.ts +7 -0
  713. package/dist/plugins/gap-cursor/GapCursorLocale.d.ts.map +1 -0
  714. package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts +7 -3
  715. package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts.map +1 -1
  716. package/dist/plugins/gap-cursor/locales/ar.d.ts +4 -0
  717. package/dist/plugins/gap-cursor/locales/ar.d.ts.map +1 -0
  718. package/dist/plugins/gap-cursor/locales/de.d.ts +4 -0
  719. package/dist/plugins/gap-cursor/locales/de.d.ts.map +1 -0
  720. package/dist/plugins/gap-cursor/locales/es.d.ts +4 -0
  721. package/dist/plugins/gap-cursor/locales/es.d.ts.map +1 -0
  722. package/dist/plugins/gap-cursor/locales/fr.d.ts +4 -0
  723. package/dist/plugins/gap-cursor/locales/fr.d.ts.map +1 -0
  724. package/dist/plugins/gap-cursor/locales/hi.d.ts +4 -0
  725. package/dist/plugins/gap-cursor/locales/hi.d.ts.map +1 -0
  726. package/dist/plugins/gap-cursor/locales/pt.d.ts +4 -0
  727. package/dist/plugins/gap-cursor/locales/pt.d.ts.map +1 -0
  728. package/dist/plugins/gap-cursor/locales/ru.d.ts +4 -0
  729. package/dist/plugins/gap-cursor/locales/ru.d.ts.map +1 -0
  730. package/dist/plugins/gap-cursor/locales/zh.d.ts +4 -0
  731. package/dist/plugins/gap-cursor/locales/zh.d.ts.map +1 -0
  732. package/dist/plugins/gap-cursor.mjs +1 -64
  733. package/dist/plugins/gap-cursor.mjs.map +1 -1
  734. package/dist/plugins/hard-break.mjs +1 -4
  735. package/dist/plugins/hard-break.mjs.map +1 -1
  736. package/dist/plugins/heading/HeadingBlockTypePicker.d.ts +1 -1
  737. package/dist/plugins/heading/HeadingBlockTypePicker.d.ts.map +1 -1
  738. package/dist/plugins/heading/HeadingLocale.d.ts +1 -8
  739. package/dist/plugins/heading/HeadingLocale.d.ts.map +1 -1
  740. package/dist/plugins/heading/HeadingPlugin.d.ts +2 -4
  741. package/dist/plugins/heading/HeadingPlugin.d.ts.map +1 -1
  742. package/dist/plugins/heading/index.d.ts +3 -0
  743. package/dist/plugins/heading/index.d.ts.map +1 -1
  744. package/dist/plugins/heading/locales/ar.d.ts +4 -0
  745. package/dist/plugins/heading/locales/ar.d.ts.map +1 -0
  746. package/dist/plugins/heading/locales/de.d.ts +4 -0
  747. package/dist/plugins/heading/locales/de.d.ts.map +1 -0
  748. package/dist/plugins/heading/locales/es.d.ts +4 -0
  749. package/dist/plugins/heading/locales/es.d.ts.map +1 -0
  750. package/dist/plugins/heading/locales/fr.d.ts +4 -0
  751. package/dist/plugins/heading/locales/fr.d.ts.map +1 -0
  752. package/dist/plugins/heading/locales/hi.d.ts +4 -0
  753. package/dist/plugins/heading/locales/hi.d.ts.map +1 -0
  754. package/dist/plugins/heading/locales/pt.d.ts +4 -0
  755. package/dist/plugins/heading/locales/pt.d.ts.map +1 -0
  756. package/dist/plugins/heading/locales/ru.d.ts +4 -0
  757. package/dist/plugins/heading/locales/ru.d.ts.map +1 -0
  758. package/dist/plugins/heading/locales/zh.d.ts +4 -0
  759. package/dist/plugins/heading/locales/zh.d.ts.map +1 -0
  760. package/dist/plugins/heading.mjs +1 -4
  761. package/dist/plugins/heading.mjs.map +1 -1
  762. package/dist/plugins/highlight/HighlightLocale.d.ts +1 -8
  763. package/dist/plugins/highlight/HighlightLocale.d.ts.map +1 -1
  764. package/dist/plugins/highlight/HighlightPlugin.d.ts +1 -3
  765. package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
  766. package/dist/plugins/highlight/index.d.ts +2 -0
  767. package/dist/plugins/highlight/index.d.ts.map +1 -1
  768. package/dist/plugins/highlight/locales/ar.d.ts +4 -0
  769. package/dist/plugins/highlight/locales/ar.d.ts.map +1 -0
  770. package/dist/plugins/highlight/locales/de.d.ts +4 -0
  771. package/dist/plugins/highlight/locales/de.d.ts.map +1 -0
  772. package/dist/plugins/highlight/locales/es.d.ts +4 -0
  773. package/dist/plugins/highlight/locales/es.d.ts.map +1 -0
  774. package/dist/plugins/highlight/locales/fr.d.ts +4 -0
  775. package/dist/plugins/highlight/locales/fr.d.ts.map +1 -0
  776. package/dist/plugins/highlight/locales/hi.d.ts +4 -0
  777. package/dist/plugins/highlight/locales/hi.d.ts.map +1 -0
  778. package/dist/plugins/highlight/locales/pt.d.ts +4 -0
  779. package/dist/plugins/highlight/locales/pt.d.ts.map +1 -0
  780. package/dist/plugins/highlight/locales/ru.d.ts +4 -0
  781. package/dist/plugins/highlight/locales/ru.d.ts.map +1 -0
  782. package/dist/plugins/highlight/locales/zh.d.ts +4 -0
  783. package/dist/plugins/highlight/locales/zh.d.ts.map +1 -0
  784. package/dist/plugins/highlight.mjs +1 -4
  785. package/dist/plugins/highlight.mjs.map +1 -1
  786. package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts +1 -8
  787. package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts.map +1 -1
  788. package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts +1 -3
  789. package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
  790. package/dist/plugins/horizontal-rule/index.d.ts +2 -0
  791. package/dist/plugins/horizontal-rule/index.d.ts.map +1 -1
  792. package/dist/plugins/horizontal-rule/locales/ar.d.ts +4 -0
  793. package/dist/plugins/horizontal-rule/locales/ar.d.ts.map +1 -0
  794. package/dist/plugins/horizontal-rule/locales/de.d.ts +4 -0
  795. package/dist/plugins/horizontal-rule/locales/de.d.ts.map +1 -0
  796. package/dist/plugins/horizontal-rule/locales/es.d.ts +4 -0
  797. package/dist/plugins/horizontal-rule/locales/es.d.ts.map +1 -0
  798. package/dist/plugins/horizontal-rule/locales/fr.d.ts +4 -0
  799. package/dist/plugins/horizontal-rule/locales/fr.d.ts.map +1 -0
  800. package/dist/plugins/horizontal-rule/locales/hi.d.ts +4 -0
  801. package/dist/plugins/horizontal-rule/locales/hi.d.ts.map +1 -0
  802. package/dist/plugins/horizontal-rule/locales/pt.d.ts +4 -0
  803. package/dist/plugins/horizontal-rule/locales/pt.d.ts.map +1 -0
  804. package/dist/plugins/horizontal-rule/locales/ru.d.ts +4 -0
  805. package/dist/plugins/horizontal-rule/locales/ru.d.ts.map +1 -0
  806. package/dist/plugins/horizontal-rule/locales/zh.d.ts +4 -0
  807. package/dist/plugins/horizontal-rule/locales/zh.d.ts.map +1 -0
  808. package/dist/plugins/horizontal-rule.mjs +1 -4
  809. package/dist/plugins/horizontal-rule.mjs.map +1 -1
  810. package/dist/plugins/image/ImageLocale.d.ts +9 -8
  811. package/dist/plugins/image/ImageLocale.d.ts.map +1 -1
  812. package/dist/plugins/image/ImageNodeView.d.ts +8 -1
  813. package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
  814. package/dist/plugins/image/ImagePlugin.d.ts +2 -2
  815. package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
  816. package/dist/plugins/image/ImageUpload.d.ts +1 -2
  817. package/dist/plugins/image/ImageUpload.d.ts.map +1 -1
  818. package/dist/plugins/image/index.d.ts +2 -0
  819. package/dist/plugins/image/index.d.ts.map +1 -1
  820. package/dist/plugins/image/locales/ar.d.ts +4 -0
  821. package/dist/plugins/image/locales/ar.d.ts.map +1 -0
  822. package/dist/plugins/image/locales/de.d.ts +4 -0
  823. package/dist/plugins/image/locales/de.d.ts.map +1 -0
  824. package/dist/plugins/image/locales/es.d.ts +4 -0
  825. package/dist/plugins/image/locales/es.d.ts.map +1 -0
  826. package/dist/plugins/image/locales/fr.d.ts +4 -0
  827. package/dist/plugins/image/locales/fr.d.ts.map +1 -0
  828. package/dist/plugins/image/locales/hi.d.ts +4 -0
  829. package/dist/plugins/image/locales/hi.d.ts.map +1 -0
  830. package/dist/plugins/image/locales/pt.d.ts +4 -0
  831. package/dist/plugins/image/locales/pt.d.ts.map +1 -0
  832. package/dist/plugins/image/locales/ru.d.ts +4 -0
  833. package/dist/plugins/image/locales/ru.d.ts.map +1 -0
  834. package/dist/plugins/image/locales/zh.d.ts +4 -0
  835. package/dist/plugins/image/locales/zh.d.ts.map +1 -0
  836. package/dist/plugins/image.mjs +1 -6
  837. package/dist/plugins/image.mjs.map +1 -1
  838. package/dist/plugins/link/LinkLocale.d.ts +1 -8
  839. package/dist/plugins/link/LinkLocale.d.ts.map +1 -1
  840. package/dist/plugins/link/LinkPlugin.d.ts +1 -3
  841. package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
  842. package/dist/plugins/link/index.d.ts +2 -0
  843. package/dist/plugins/link/index.d.ts.map +1 -1
  844. package/dist/plugins/link/locales/ar.d.ts +4 -0
  845. package/dist/plugins/link/locales/ar.d.ts.map +1 -0
  846. package/dist/plugins/link/locales/de.d.ts +4 -0
  847. package/dist/plugins/link/locales/de.d.ts.map +1 -0
  848. package/dist/plugins/link/locales/es.d.ts +4 -0
  849. package/dist/plugins/link/locales/es.d.ts.map +1 -0
  850. package/dist/plugins/link/locales/fr.d.ts +4 -0
  851. package/dist/plugins/link/locales/fr.d.ts.map +1 -0
  852. package/dist/plugins/link/locales/hi.d.ts +4 -0
  853. package/dist/plugins/link/locales/hi.d.ts.map +1 -0
  854. package/dist/plugins/link/locales/pt.d.ts +4 -0
  855. package/dist/plugins/link/locales/pt.d.ts.map +1 -0
  856. package/dist/plugins/link/locales/ru.d.ts +4 -0
  857. package/dist/plugins/link/locales/ru.d.ts.map +1 -0
  858. package/dist/plugins/link/locales/zh.d.ts +4 -0
  859. package/dist/plugins/link/locales/zh.d.ts.map +1 -0
  860. package/dist/plugins/link.mjs +1 -4
  861. package/dist/plugins/link.mjs.map +1 -1
  862. package/dist/plugins/list/ListLocale.d.ts +1 -8
  863. package/dist/plugins/list/ListLocale.d.ts.map +1 -1
  864. package/dist/plugins/list/ListPlugin.d.ts +1 -3
  865. package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
  866. package/dist/plugins/list/index.d.ts +2 -0
  867. package/dist/plugins/list/index.d.ts.map +1 -1
  868. package/dist/plugins/list/locales/ar.d.ts +4 -0
  869. package/dist/plugins/list/locales/ar.d.ts.map +1 -0
  870. package/dist/plugins/list/locales/de.d.ts +4 -0
  871. package/dist/plugins/list/locales/de.d.ts.map +1 -0
  872. package/dist/plugins/list/locales/es.d.ts +4 -0
  873. package/dist/plugins/list/locales/es.d.ts.map +1 -0
  874. package/dist/plugins/list/locales/fr.d.ts +4 -0
  875. package/dist/plugins/list/locales/fr.d.ts.map +1 -0
  876. package/dist/plugins/list/locales/hi.d.ts +4 -0
  877. package/dist/plugins/list/locales/hi.d.ts.map +1 -0
  878. package/dist/plugins/list/locales/pt.d.ts +4 -0
  879. package/dist/plugins/list/locales/pt.d.ts.map +1 -0
  880. package/dist/plugins/list/locales/ru.d.ts +4 -0
  881. package/dist/plugins/list/locales/ru.d.ts.map +1 -0
  882. package/dist/plugins/list/locales/zh.d.ts +4 -0
  883. package/dist/plugins/list/locales/zh.d.ts.map +1 -0
  884. package/dist/plugins/list.mjs +1 -4
  885. package/dist/plugins/list.mjs.map +1 -1
  886. package/dist/plugins/print/PrintLocale.d.ts +1 -8
  887. package/dist/plugins/print/PrintLocale.d.ts.map +1 -1
  888. package/dist/plugins/print/PrintPlugin.d.ts +1 -1
  889. package/dist/plugins/print/PrintPlugin.d.ts.map +1 -1
  890. package/dist/plugins/print/PrintServiceImpl.d.ts.map +1 -1
  891. package/dist/plugins/print/PrintStyleCollector.d.ts.map +1 -1
  892. package/dist/plugins/print/PrintTypes.d.ts +1 -1
  893. package/dist/plugins/print/PrintTypes.d.ts.map +1 -1
  894. package/dist/plugins/print/index.d.ts +5 -0
  895. package/dist/plugins/print/index.d.ts.map +1 -0
  896. package/dist/plugins/print/locales/ar.d.ts +4 -0
  897. package/dist/plugins/print/locales/ar.d.ts.map +1 -0
  898. package/dist/plugins/print/locales/de.d.ts +4 -0
  899. package/dist/plugins/print/locales/de.d.ts.map +1 -0
  900. package/dist/plugins/print/locales/es.d.ts +4 -0
  901. package/dist/plugins/print/locales/es.d.ts.map +1 -0
  902. package/dist/plugins/print/locales/fr.d.ts +4 -0
  903. package/dist/plugins/print/locales/fr.d.ts.map +1 -0
  904. package/dist/plugins/print/locales/hi.d.ts +4 -0
  905. package/dist/plugins/print/locales/hi.d.ts.map +1 -0
  906. package/dist/plugins/print/locales/pt.d.ts +4 -0
  907. package/dist/plugins/print/locales/pt.d.ts.map +1 -0
  908. package/dist/plugins/print/locales/ru.d.ts +4 -0
  909. package/dist/plugins/print/locales/ru.d.ts.map +1 -0
  910. package/dist/plugins/print/locales/zh.d.ts +4 -0
  911. package/dist/plugins/print/locales/zh.d.ts.map +1 -0
  912. package/dist/plugins/print.mjs +2 -0
  913. package/dist/plugins/print.mjs.map +1 -0
  914. package/dist/plugins/shared/ColorGrid.d.ts.map +1 -1
  915. package/dist/plugins/shared/KeyboardNav.d.ts +17 -0
  916. package/dist/plugins/shared/KeyboardNav.d.ts.map +1 -0
  917. package/dist/plugins/shared/PluginHelpers.d.ts +10 -0
  918. package/dist/plugins/shared/PluginHelpers.d.ts.map +1 -0
  919. package/dist/plugins/shared/PopupKeyboardPatterns.d.ts +1 -1
  920. package/dist/plugins/shared/PopupKeyboardPatterns.d.ts.map +1 -1
  921. package/dist/plugins/shared/PopupManager.d.ts +2 -0
  922. package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
  923. package/dist/plugins/shared/PopupPositioning.d.ts +1 -0
  924. package/dist/plugins/shared/PopupPositioning.d.ts.map +1 -1
  925. package/dist/plugins/shared/ShortcutFormatting.d.ts +9 -0
  926. package/dist/plugins/shared/ShortcutFormatting.d.ts.map +1 -0
  927. package/dist/plugins/shared/index.d.ts +12 -0
  928. package/dist/plugins/shared/index.d.ts.map +1 -0
  929. package/dist/plugins/shared.mjs +2 -0
  930. package/dist/plugins/shared.mjs.map +1 -0
  931. package/dist/plugins/strikethrough/StrikethroughLocale.d.ts +1 -8
  932. package/dist/plugins/strikethrough/StrikethroughLocale.d.ts.map +1 -1
  933. package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts +1 -3
  934. package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
  935. package/dist/plugins/strikethrough/index.d.ts +2 -0
  936. package/dist/plugins/strikethrough/index.d.ts.map +1 -1
  937. package/dist/plugins/strikethrough/locales/ar.d.ts +4 -0
  938. package/dist/plugins/strikethrough/locales/ar.d.ts.map +1 -0
  939. package/dist/plugins/strikethrough/locales/de.d.ts +4 -0
  940. package/dist/plugins/strikethrough/locales/de.d.ts.map +1 -0
  941. package/dist/plugins/strikethrough/locales/es.d.ts +4 -0
  942. package/dist/plugins/strikethrough/locales/es.d.ts.map +1 -0
  943. package/dist/plugins/strikethrough/locales/fr.d.ts +4 -0
  944. package/dist/plugins/strikethrough/locales/fr.d.ts.map +1 -0
  945. package/dist/plugins/strikethrough/locales/hi.d.ts +4 -0
  946. package/dist/plugins/strikethrough/locales/hi.d.ts.map +1 -0
  947. package/dist/plugins/strikethrough/locales/pt.d.ts +4 -0
  948. package/dist/plugins/strikethrough/locales/pt.d.ts.map +1 -0
  949. package/dist/plugins/strikethrough/locales/ru.d.ts +4 -0
  950. package/dist/plugins/strikethrough/locales/ru.d.ts.map +1 -0
  951. package/dist/plugins/strikethrough/locales/zh.d.ts +4 -0
  952. package/dist/plugins/strikethrough/locales/zh.d.ts.map +1 -0
  953. package/dist/plugins/strikethrough.mjs +1 -4
  954. package/dist/plugins/strikethrough.mjs.map +1 -1
  955. package/dist/plugins/super-sub/SuperSubLocale.d.ts +1 -8
  956. package/dist/plugins/super-sub/SuperSubLocale.d.ts.map +1 -1
  957. package/dist/plugins/super-sub/SuperSubPlugin.d.ts +1 -3
  958. package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
  959. package/dist/plugins/super-sub/index.d.ts +2 -0
  960. package/dist/plugins/super-sub/index.d.ts.map +1 -1
  961. package/dist/plugins/super-sub/locales/ar.d.ts +4 -0
  962. package/dist/plugins/super-sub/locales/ar.d.ts.map +1 -0
  963. package/dist/plugins/super-sub/locales/de.d.ts +4 -0
  964. package/dist/plugins/super-sub/locales/de.d.ts.map +1 -0
  965. package/dist/plugins/super-sub/locales/es.d.ts +4 -0
  966. package/dist/plugins/super-sub/locales/es.d.ts.map +1 -0
  967. package/dist/plugins/super-sub/locales/fr.d.ts +4 -0
  968. package/dist/plugins/super-sub/locales/fr.d.ts.map +1 -0
  969. package/dist/plugins/super-sub/locales/hi.d.ts +4 -0
  970. package/dist/plugins/super-sub/locales/hi.d.ts.map +1 -0
  971. package/dist/plugins/super-sub/locales/pt.d.ts +4 -0
  972. package/dist/plugins/super-sub/locales/pt.d.ts.map +1 -0
  973. package/dist/plugins/super-sub/locales/ru.d.ts +4 -0
  974. package/dist/plugins/super-sub/locales/ru.d.ts.map +1 -0
  975. package/dist/plugins/super-sub/locales/zh.d.ts +4 -0
  976. package/dist/plugins/super-sub/locales/zh.d.ts.map +1 -0
  977. package/dist/plugins/super-sub.mjs +1 -4
  978. package/dist/plugins/super-sub.mjs.map +1 -1
  979. package/dist/plugins/table/TableCommands.d.ts +8 -8
  980. package/dist/plugins/table/TableCommands.d.ts.map +1 -1
  981. package/dist/plugins/table/TableContextMenu.d.ts.map +1 -1
  982. package/dist/plugins/table/TableControlsDOM.d.ts +4 -4
  983. package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
  984. package/dist/plugins/table/TableLocale.d.ts +1 -8
  985. package/dist/plugins/table/TableLocale.d.ts.map +1 -1
  986. package/dist/plugins/table/TableNavigation.d.ts +1 -1
  987. package/dist/plugins/table/TableNavigation.d.ts.map +1 -1
  988. package/dist/plugins/table/TablePlugin.d.ts +3 -5
  989. package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
  990. package/dist/plugins/table/TableSelection.d.ts +2 -0
  991. package/dist/plugins/table/TableSelection.d.ts.map +1 -1
  992. package/dist/plugins/table/index.d.ts +0 -5
  993. package/dist/plugins/table/index.d.ts.map +1 -1
  994. package/dist/plugins/table/locales/ar.d.ts +4 -0
  995. package/dist/plugins/table/locales/ar.d.ts.map +1 -0
  996. package/dist/plugins/table/locales/de.d.ts +4 -0
  997. package/dist/plugins/table/locales/de.d.ts.map +1 -0
  998. package/dist/plugins/table/locales/es.d.ts +4 -0
  999. package/dist/plugins/table/locales/es.d.ts.map +1 -0
  1000. package/dist/plugins/table/locales/fr.d.ts +4 -0
  1001. package/dist/plugins/table/locales/fr.d.ts.map +1 -0
  1002. package/dist/plugins/table/locales/hi.d.ts +4 -0
  1003. package/dist/plugins/table/locales/hi.d.ts.map +1 -0
  1004. package/dist/plugins/table/locales/pt.d.ts +4 -0
  1005. package/dist/plugins/table/locales/pt.d.ts.map +1 -0
  1006. package/dist/plugins/table/locales/ru.d.ts +4 -0
  1007. package/dist/plugins/table/locales/ru.d.ts.map +1 -0
  1008. package/dist/plugins/table/locales/zh.d.ts +4 -0
  1009. package/dist/plugins/table/locales/zh.d.ts.map +1 -0
  1010. package/dist/plugins/table.mjs +1 -20
  1011. package/dist/plugins/table.mjs.map +1 -1
  1012. package/dist/plugins/text-color/TextColorLocale.d.ts +1 -8
  1013. package/dist/plugins/text-color/TextColorLocale.d.ts.map +1 -1
  1014. package/dist/plugins/text-color/TextColorPlugin.d.ts +1 -3
  1015. package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
  1016. package/dist/plugins/text-color/index.d.ts +2 -0
  1017. package/dist/plugins/text-color/index.d.ts.map +1 -1
  1018. package/dist/plugins/text-color/locales/ar.d.ts +4 -0
  1019. package/dist/plugins/text-color/locales/ar.d.ts.map +1 -0
  1020. package/dist/plugins/text-color/locales/de.d.ts +4 -0
  1021. package/dist/plugins/text-color/locales/de.d.ts.map +1 -0
  1022. package/dist/plugins/text-color/locales/es.d.ts +4 -0
  1023. package/dist/plugins/text-color/locales/es.d.ts.map +1 -0
  1024. package/dist/plugins/text-color/locales/fr.d.ts +4 -0
  1025. package/dist/plugins/text-color/locales/fr.d.ts.map +1 -0
  1026. package/dist/plugins/text-color/locales/hi.d.ts +4 -0
  1027. package/dist/plugins/text-color/locales/hi.d.ts.map +1 -0
  1028. package/dist/plugins/text-color/locales/pt.d.ts +4 -0
  1029. package/dist/plugins/text-color/locales/pt.d.ts.map +1 -0
  1030. package/dist/plugins/text-color/locales/ru.d.ts +4 -0
  1031. package/dist/plugins/text-color/locales/ru.d.ts.map +1 -0
  1032. package/dist/plugins/text-color/locales/zh.d.ts +4 -0
  1033. package/dist/plugins/text-color/locales/zh.d.ts.map +1 -0
  1034. package/dist/plugins/text-color.mjs +1 -4
  1035. package/dist/plugins/text-color.mjs.map +1 -1
  1036. package/dist/plugins/text-direction/DirectionDetection.d.ts +17 -0
  1037. package/dist/plugins/text-direction/DirectionDetection.d.ts.map +1 -0
  1038. package/dist/plugins/text-direction/ShiftDirectionHandler.d.ts +12 -0
  1039. package/dist/plugins/text-direction/ShiftDirectionHandler.d.ts.map +1 -0
  1040. package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts +35 -0
  1041. package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts.map +1 -0
  1042. package/dist/plugins/text-direction/TextDirectionLocale.d.ts +20 -0
  1043. package/dist/plugins/text-direction/TextDirectionLocale.d.ts.map +1 -0
  1044. package/dist/plugins/text-direction/TextDirectionMiddleware.d.ts +18 -0
  1045. package/dist/plugins/text-direction/TextDirectionMiddleware.d.ts.map +1 -0
  1046. package/dist/plugins/text-direction/TextDirectionPlugin.d.ts +59 -0
  1047. package/dist/plugins/text-direction/TextDirectionPlugin.d.ts.map +1 -0
  1048. package/dist/plugins/text-direction/index.d.ts +5 -0
  1049. package/dist/plugins/text-direction/index.d.ts.map +1 -0
  1050. package/dist/plugins/text-direction/locales/ar.d.ts +4 -0
  1051. package/dist/plugins/text-direction/locales/ar.d.ts.map +1 -0
  1052. package/dist/plugins/text-direction/locales/de.d.ts +4 -0
  1053. package/dist/plugins/text-direction/locales/de.d.ts.map +1 -0
  1054. package/dist/plugins/text-direction/locales/es.d.ts +4 -0
  1055. package/dist/plugins/text-direction/locales/es.d.ts.map +1 -0
  1056. package/dist/plugins/text-direction/locales/fr.d.ts +4 -0
  1057. package/dist/plugins/text-direction/locales/fr.d.ts.map +1 -0
  1058. package/dist/plugins/text-direction/locales/hi.d.ts +4 -0
  1059. package/dist/plugins/text-direction/locales/hi.d.ts.map +1 -0
  1060. package/dist/plugins/text-direction/locales/pt.d.ts +4 -0
  1061. package/dist/plugins/text-direction/locales/pt.d.ts.map +1 -0
  1062. package/dist/plugins/text-direction/locales/ru.d.ts +4 -0
  1063. package/dist/plugins/text-direction/locales/ru.d.ts.map +1 -0
  1064. package/dist/plugins/text-direction/locales/zh.d.ts +4 -0
  1065. package/dist/plugins/text-direction/locales/zh.d.ts.map +1 -0
  1066. package/dist/plugins/text-direction-advanced/index.d.ts +5 -0
  1067. package/dist/plugins/text-direction-advanced/index.d.ts.map +1 -0
  1068. package/dist/plugins/text-direction-advanced.mjs +2 -0
  1069. package/dist/plugins/text-direction-advanced.mjs.map +1 -0
  1070. package/dist/plugins/text-direction.mjs +2 -0
  1071. package/dist/plugins/text-direction.mjs.map +1 -0
  1072. package/dist/plugins/text-formatting/TextFormattingLocale.d.ts +1 -8
  1073. package/dist/plugins/text-formatting/TextFormattingLocale.d.ts.map +1 -1
  1074. package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts +1 -3
  1075. package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
  1076. package/dist/plugins/text-formatting/index.d.ts +2 -0
  1077. package/dist/plugins/text-formatting/index.d.ts.map +1 -1
  1078. package/dist/plugins/text-formatting/locales/ar.d.ts +4 -0
  1079. package/dist/plugins/text-formatting/locales/ar.d.ts.map +1 -0
  1080. package/dist/plugins/text-formatting/locales/de.d.ts +4 -0
  1081. package/dist/plugins/text-formatting/locales/de.d.ts.map +1 -0
  1082. package/dist/plugins/text-formatting/locales/es.d.ts +4 -0
  1083. package/dist/plugins/text-formatting/locales/es.d.ts.map +1 -0
  1084. package/dist/plugins/text-formatting/locales/fr.d.ts +4 -0
  1085. package/dist/plugins/text-formatting/locales/fr.d.ts.map +1 -0
  1086. package/dist/plugins/text-formatting/locales/hi.d.ts +4 -0
  1087. package/dist/plugins/text-formatting/locales/hi.d.ts.map +1 -0
  1088. package/dist/plugins/text-formatting/locales/pt.d.ts +4 -0
  1089. package/dist/plugins/text-formatting/locales/pt.d.ts.map +1 -0
  1090. package/dist/plugins/text-formatting/locales/ru.d.ts +4 -0
  1091. package/dist/plugins/text-formatting/locales/ru.d.ts.map +1 -0
  1092. package/dist/plugins/text-formatting/locales/zh.d.ts +4 -0
  1093. package/dist/plugins/text-formatting/locales/zh.d.ts.map +1 -0
  1094. package/dist/plugins/text-formatting.mjs +1 -4
  1095. package/dist/plugins/text-formatting.mjs.map +1 -1
  1096. package/dist/plugins/toolbar/ToolbarItem.d.ts +2 -18
  1097. package/dist/plugins/toolbar/ToolbarItem.d.ts.map +1 -1
  1098. package/dist/plugins/toolbar/ToolbarKeyboardNav.d.ts +5 -11
  1099. package/dist/plugins/toolbar/ToolbarKeyboardNav.d.ts.map +1 -1
  1100. package/dist/plugins/toolbar/ToolbarLocale.d.ts +2 -8
  1101. package/dist/plugins/toolbar/ToolbarLocale.d.ts.map +1 -1
  1102. package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
  1103. package/dist/plugins/toolbar/ToolbarPlugin.d.ts +2 -2
  1104. package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
  1105. package/dist/plugins/toolbar/ToolbarPopupController.d.ts +3 -1
  1106. package/dist/plugins/toolbar/ToolbarPopupController.d.ts.map +1 -1
  1107. package/dist/plugins/toolbar/ToolbarRenderers.d.ts +2 -1
  1108. package/dist/plugins/toolbar/ToolbarRenderers.d.ts.map +1 -1
  1109. package/dist/plugins/toolbar/index.d.ts +4 -1
  1110. package/dist/plugins/toolbar/index.d.ts.map +1 -1
  1111. package/dist/plugins/toolbar/locales/ar.d.ts +4 -0
  1112. package/dist/plugins/toolbar/locales/ar.d.ts.map +1 -0
  1113. package/dist/plugins/toolbar/locales/de.d.ts +4 -0
  1114. package/dist/plugins/toolbar/locales/de.d.ts.map +1 -0
  1115. package/dist/plugins/toolbar/locales/es.d.ts +4 -0
  1116. package/dist/plugins/toolbar/locales/es.d.ts.map +1 -0
  1117. package/dist/plugins/toolbar/locales/fr.d.ts +4 -0
  1118. package/dist/plugins/toolbar/locales/fr.d.ts.map +1 -0
  1119. package/dist/plugins/toolbar/locales/hi.d.ts +4 -0
  1120. package/dist/plugins/toolbar/locales/hi.d.ts.map +1 -0
  1121. package/dist/plugins/toolbar/locales/pt.d.ts +4 -0
  1122. package/dist/plugins/toolbar/locales/pt.d.ts.map +1 -0
  1123. package/dist/plugins/toolbar/locales/ru.d.ts +4 -0
  1124. package/dist/plugins/toolbar/locales/ru.d.ts.map +1 -0
  1125. package/dist/plugins/toolbar/locales/zh.d.ts +4 -0
  1126. package/dist/plugins/toolbar/locales/zh.d.ts.map +1 -0
  1127. package/dist/plugins/toolbar.mjs +1 -7
  1128. package/dist/plugins/toolbar.mjs.map +1 -1
  1129. package/dist/presets/FullPreset.d.ts +4 -1
  1130. package/dist/presets/FullPreset.d.ts.map +1 -1
  1131. package/dist/presets/MinimalPreset.d.ts +3 -0
  1132. package/dist/presets/MinimalPreset.d.ts.map +1 -1
  1133. package/dist/presets/PresetTypes.d.ts +2 -0
  1134. package/dist/presets/PresetTypes.d.ts.map +1 -1
  1135. package/dist/presets/full.d.ts +17 -0
  1136. package/dist/presets/full.d.ts.map +1 -0
  1137. package/dist/presets/full.mjs +2 -0
  1138. package/dist/presets/full.mjs.map +1 -0
  1139. package/dist/presets/minimal.d.ts +17 -0
  1140. package/dist/presets/minimal.d.ts.map +1 -0
  1141. package/dist/presets/minimal.mjs +2 -0
  1142. package/dist/presets/minimal.mjs.map +1 -0
  1143. package/dist/presets.d.ts +20 -0
  1144. package/dist/presets.d.ts.map +1 -0
  1145. package/dist/presets.mjs +2 -0
  1146. package/dist/presets.mjs.map +1 -0
  1147. package/dist/serialization/CSSClassCollector.d.ts.map +1 -0
  1148. package/dist/serialization/ContentHTMLTypes.d.ts.map +1 -0
  1149. package/dist/serialization/DocumentParser.d.ts.map +1 -0
  1150. package/dist/{editor → serialization}/DocumentSerializer.d.ts +2 -0
  1151. package/dist/serialization/DocumentSerializer.d.ts.map +1 -0
  1152. package/dist/{editor → serialization}/MarkSerializer.d.ts +3 -2
  1153. package/dist/serialization/MarkSerializer.d.ts.map +1 -0
  1154. package/dist/serialization/index.d.ts +12 -0
  1155. package/dist/serialization/index.d.ts.map +1 -0
  1156. package/dist/state/BlockBoundaryMovement.d.ts +7 -0
  1157. package/dist/state/BlockBoundaryMovement.d.ts.map +1 -0
  1158. package/dist/{model/NavigationUtils.d.ts → state/NavigationQueries.d.ts} +3 -3
  1159. package/dist/state/NavigationQueries.d.ts.map +1 -0
  1160. package/dist/test/PluginTestUtils.d.ts +0 -2
  1161. package/dist/test/PluginTestUtils.d.ts.map +1 -1
  1162. package/dist/test/TestUtils.d.ts +2 -2
  1163. package/dist/test/TestUtils.d.ts.map +1 -1
  1164. package/dist/view/BlockRendering.d.ts +10 -0
  1165. package/dist/view/BlockRendering.d.ts.map +1 -0
  1166. package/dist/view/BlockWrapperManagement.d.ts +27 -0
  1167. package/dist/view/BlockWrapperManagement.d.ts.map +1 -0
  1168. package/dist/view/CaretNavigation.d.ts +1 -8
  1169. package/dist/view/CaretNavigation.d.ts.map +1 -1
  1170. package/dist/view/CursorWrapper.d.ts.map +1 -1
  1171. package/dist/view/DecorationRendering.d.ts +17 -0
  1172. package/dist/view/DecorationRendering.d.ts.map +1 -0
  1173. package/dist/view/DomUtils.d.ts +4 -0
  1174. package/dist/view/DomUtils.d.ts.map +1 -0
  1175. package/dist/view/EditorView.d.ts +7 -10
  1176. package/dist/view/EditorView.d.ts.map +1 -1
  1177. package/dist/view/GapCursorNavigation.d.ts +12 -0
  1178. package/dist/view/GapCursorNavigation.d.ts.map +1 -0
  1179. package/dist/view/InlineRendering.d.ts +11 -0
  1180. package/dist/view/InlineRendering.d.ts.map +1 -0
  1181. package/dist/view/MarkRendering.d.ts +5 -0
  1182. package/dist/view/MarkRendering.d.ts.map +1 -1
  1183. package/dist/view/Reconciler.d.ts +2 -6
  1184. package/dist/view/Reconciler.d.ts.map +1 -1
  1185. package/dist/view/SelectionSync.d.ts +41 -2
  1186. package/dist/view/SelectionSync.d.ts.map +1 -1
  1187. package/dist/view/ViewMovementCommands.d.ts.map +1 -1
  1188. package/package.json +208 -8
  1189. package/dist/chunks/AttrRegistry-D9Jx_RVb.mjs +0 -16
  1190. package/dist/chunks/AttrRegistry-D9Jx_RVb.mjs.map +0 -1
  1191. package/dist/chunks/AttributedMarkCommands-BtLea72z.mjs +0 -80
  1192. package/dist/chunks/CaretNavigation-7JYpIKbs.mjs +0 -311
  1193. package/dist/chunks/CaretNavigation-7JYpIKbs.mjs.map +0 -1
  1194. package/dist/chunks/ColorGrid--lBQ7jCK.mjs +0 -81
  1195. package/dist/chunks/ColorGrid--lBQ7jCK.mjs.map +0 -1
  1196. package/dist/chunks/ColorPickerPopup-TpIRlXc8.mjs +0 -37
  1197. package/dist/chunks/ColorPickerPopup-TpIRlXc8.mjs.map +0 -1
  1198. package/dist/chunks/ColorValidation-CV4f1wu6.mjs +0 -39
  1199. package/dist/chunks/Document-Brtw2jL1.mjs +0 -190
  1200. package/dist/chunks/HTMLUtils-DTqQzcKR.mjs +0 -35
  1201. package/dist/chunks/HTMLUtils-DTqQzcKR.mjs.map +0 -1
  1202. package/dist/chunks/MarkCommands-6RUJ4L3r.mjs +0 -94
  1203. package/dist/chunks/NavigationUtils-Cspt2ZrK.mjs +0 -47
  1204. package/dist/chunks/NavigationUtils-Cspt2ZrK.mjs.map +0 -1
  1205. package/dist/chunks/NodeResolver-C2XYkeOi.mjs +0 -81
  1206. package/dist/chunks/NodeResolver-C2XYkeOi.mjs.map +0 -1
  1207. package/dist/chunks/NodeSpec-NZVvcCuH.mjs +0 -8
  1208. package/dist/chunks/NodeSpec-NZVvcCuH.mjs.map +0 -1
  1209. package/dist/chunks/Platform-S_xqIqcM.mjs +0 -26
  1210. package/dist/chunks/Platform-S_xqIqcM.mjs.map +0 -1
  1211. package/dist/chunks/PopupPositioning-CgjgAKjp.mjs +0 -34
  1212. package/dist/chunks/PopupPositioning-CgjgAKjp.mjs.map +0 -1
  1213. package/dist/chunks/RangeIterator-Bh4Vl_6D.mjs +0 -16
  1214. package/dist/chunks/Selection-BRTab5hO.mjs +0 -52
  1215. package/dist/chunks/StyleRuntime-CP4NCwKT.mjs +0 -235
  1216. package/dist/chunks/ToolbarItem-BpZggUGo.mjs +0 -8
  1217. package/dist/chunks/ToolbarItem-BpZggUGo.mjs.map +0 -1
  1218. package/dist/chunks/ToolbarKeyboardNav-DhpL8zNV.mjs +0 -46
  1219. package/dist/chunks/ToolbarKeyboardNav-DhpL8zNV.mjs.map +0 -1
  1220. package/dist/chunks/TypeBrands-C09nE2qO.mjs +0 -27
  1221. package/dist/chunks/index--7pBhSF4.mjs +0 -542
  1222. package/dist/chunks/index--7pBhSF4.mjs.map +0 -1
  1223. package/dist/chunks/index-BXCkjDax.mjs +0 -161
  1224. package/dist/chunks/index-BXCkjDax.mjs.map +0 -1
  1225. package/dist/chunks/index-BXtw5PNN.mjs +0 -39
  1226. package/dist/chunks/index-BXtw5PNN.mjs.map +0 -1
  1227. package/dist/chunks/index-BcDRT4K2.mjs +0 -1019
  1228. package/dist/chunks/index-BcDRT4K2.mjs.map +0 -1
  1229. package/dist/chunks/index-BjFBWBOC.mjs +0 -168
  1230. package/dist/chunks/index-BjFBWBOC.mjs.map +0 -1
  1231. package/dist/chunks/index-C1opJocO.mjs +0 -92
  1232. package/dist/chunks/index-C1opJocO.mjs.map +0 -1
  1233. package/dist/chunks/index-CCyqQ0Dz.mjs +0 -228
  1234. package/dist/chunks/index-CCyqQ0Dz.mjs.map +0 -1
  1235. package/dist/chunks/index-Cd3uJLP3.mjs +0 -73
  1236. package/dist/chunks/index-Cd3uJLP3.mjs.map +0 -1
  1237. package/dist/chunks/index-DSAuGP4n.mjs +0 -410
  1238. package/dist/chunks/index-DSAuGP4n.mjs.map +0 -1
  1239. package/dist/chunks/index-DtRfqsq5.mjs +0 -924
  1240. package/dist/chunks/index-DtRfqsq5.mjs.map +0 -1
  1241. package/dist/chunks/index-Dum8yE_t.mjs +0 -62
  1242. package/dist/chunks/index-Dum8yE_t.mjs.map +0 -1
  1243. package/dist/chunks/index-DxbQirny.mjs +0 -63
  1244. package/dist/chunks/index-DxbQirny.mjs.map +0 -1
  1245. package/dist/chunks/index-ErZ5_a1o.mjs +0 -296
  1246. package/dist/chunks/index-ErZ5_a1o.mjs.map +0 -1
  1247. package/dist/chunks/index-WpbK_s_H.mjs +0 -119
  1248. package/dist/chunks/index-WpbK_s_H.mjs.map +0 -1
  1249. package/dist/chunks/index-WrqH1wG8.mjs +0 -50
  1250. package/dist/chunks/index-WrqH1wG8.mjs.map +0 -1
  1251. package/dist/chunks/index-fsVJLutn.mjs +0 -118
  1252. package/dist/chunks/index-fsVJLutn.mjs.map +0 -1
  1253. package/dist/chunks/index-fx3KIap3.mjs +0 -50
  1254. package/dist/chunks/index-fx3KIap3.mjs.map +0 -1
  1255. package/dist/chunks/index-oOJo-ywB.mjs +0 -467
  1256. package/dist/chunks/index-oOJo-ywB.mjs.map +0 -1
  1257. package/dist/chunks/index-toj88jtL.mjs +0 -101
  1258. package/dist/chunks/index-toj88jtL.mjs.map +0 -1
  1259. package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs +0 -34
  1260. package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs.map +0 -1
  1261. package/dist/editor/CSSClassCollector.d.ts.map +0 -1
  1262. package/dist/editor/ContentHTMLTypes.d.ts.map +0 -1
  1263. package/dist/editor/DocumentParser.d.ts.map +0 -1
  1264. package/dist/editor/DocumentSerializer.d.ts.map +0 -1
  1265. package/dist/editor/MarkSerializer.d.ts.map +0 -1
  1266. package/dist/editor/PaperSize.d.ts.map +0 -1
  1267. package/dist/i18n/resolvePluginLocale.d.ts +0 -3
  1268. package/dist/i18n/resolvePluginLocale.d.ts.map +0 -1
  1269. package/dist/model/BuiltinSpecs.d.ts.map +0 -1
  1270. package/dist/model/HTMLParser.d.ts.map +0 -1
  1271. package/dist/model/NavigationUtils.d.ts.map +0 -1
  1272. package/dist/view/Platform.d.ts.map +0 -1
  1273. /package/dist/{input → model}/InputRule.d.ts +0 -0
  1274. /package/dist/{input → model}/InputRuleRegistry.d.ts +0 -0
  1275. /package/dist/{input → model}/Keymap.d.ts +0 -0
  1276. /package/dist/{input → model}/KeymapRegistry.d.ts +0 -0
  1277. /package/dist/{editor → model}/PaperSize.d.ts +0 -0
  1278. /package/dist/{editor → serialization}/CSSClassCollector.d.ts +0 -0
  1279. /package/dist/{editor → serialization}/ContentHTMLTypes.d.ts +0 -0
  1280. /package/dist/{editor → serialization}/DocumentParser.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BcDRT4K2.mjs","sources":["../../src/plugins/shared/PopupManager.ts","../../src/editor/styles/toolbar.ts","../../src/plugins/toolbar/ToolbarLocale.ts","../../src/plugins/toolbar/ToolbarOverflowBehavior.ts","../../src/plugins/toolbar/ToolbarOverflowController.ts","../../src/plugins/toolbar/ToolbarRenderers.ts","../../src/plugins/toolbar/ToolbarPopupController.ts","../../src/plugins/toolbar/ToolbarTooltip.ts","../../src/plugins/toolbar/ToolbarPlugin.ts"],"sourcesContent":["/**\n * Central popup lifecycle manager. Handles creation, positioning,\n * click-outside closing, Escape key, focus restoration, and popup stacking\n * for submenus/nested popups.\n */\n\nimport { ServiceKey } from '../Plugin.js';\nimport { type PopupPosition, appendToRoot, positionPopup } from './PopupPositioning.js';\n\n// --- Types ---\n\n/** Options for overriding focus restoration when closing a popup. */\nexport interface PopupCloseOptions {\n\t/**\n\t * Override the default focus target on close.\n\t * - `HTMLElement` → focus that element instead of `config.restoreFocusTo`\n\t * - `null` → skip focus restoration entirely\n\t * - `undefined` / omitted → use default `config.restoreFocusTo`\n\t */\n\treadonly restoreFocusTo?: HTMLElement | null;\n}\n\nexport interface PopupConfig {\n\treadonly anchor: HTMLElement | DOMRect;\n\treadonly content: (container: HTMLElement, close: (options?: PopupCloseOptions) => void) => void;\n\treadonly className?: string;\n\treadonly ariaRole?: 'menu' | 'listbox' | 'grid' | 'dialog';\n\treadonly ariaLabel?: string;\n\treadonly restoreFocusTo?: HTMLElement;\n\treadonly onClose?: () => void;\n\treadonly position?: PopupPosition;\n\treadonly parent?: PopupHandle;\n\treadonly referenceNode?: Node;\n}\n\nexport interface PopupHandle {\n\tclose(options?: PopupCloseOptions): void;\n\tgetElement(): HTMLElement;\n}\n\nexport interface PopupServiceAPI {\n\topen(config: PopupConfig): PopupHandle;\n\tclose(): void;\n\tcloseAll(): void;\n\tisOpen(): boolean;\n}\n\nexport const PopupServiceKey = new ServiceKey<PopupServiceAPI>('popup');\n\n// --- Internal Entry ---\n\ninterface PopupEntry {\n\treadonly element: HTMLElement;\n\treadonly config: PopupConfig;\n\treadonly clickOutsideHandler: (e: MouseEvent) => void;\n\treadonly parent: PopupEntry | null;\n}\n\n// --- Manager ---\n\nexport class PopupManager implements PopupServiceAPI {\n\tprivate readonly stack: PopupEntry[] = [];\n\tprivate readonly referenceNode: Node;\n\n\tconstructor(referenceNode: Node) {\n\t\tthis.referenceNode = referenceNode;\n\t}\n\n\t/** Opens a popup with the given configuration. Returns a handle for closing it. */\n\topen(config: PopupConfig): PopupHandle {\n\t\tconst popup: HTMLDivElement = document.createElement('div');\n\t\tpopup.className = config.className ? `notectl-popup ${config.className}` : 'notectl-popup';\n\n\t\tif (config.ariaRole) {\n\t\t\tpopup.setAttribute('role', config.ariaRole);\n\t\t}\n\t\tif (config.ariaLabel) {\n\t\t\tpopup.setAttribute('aria-label', config.ariaLabel);\n\t\t}\n\n\t\tconst handle: PopupHandle = {\n\t\t\tclose: (options?: PopupCloseOptions) => this.closeEntry(entry, options),\n\t\t\tgetElement: () => popup,\n\t\t};\n\n\t\tconfig.content(popup, (options?: PopupCloseOptions) => this.closeEntry(entry, options));\n\n\t\tconst refNode: Node = config.referenceNode ?? this.referenceNode;\n\t\tappendToRoot(popup, refNode);\n\n\t\tconst anchorRect: DOMRect =\n\t\t\tconfig.anchor instanceof HTMLElement ? config.anchor.getBoundingClientRect() : config.anchor;\n\t\tpositionPopup(popup, anchorRect, {\n\t\t\tposition: config.position ?? 'below-start',\n\t\t});\n\n\t\tconst parentEntry: PopupEntry | null = config.parent\n\t\t\t? this.findEntryByHandle(config.parent)\n\t\t\t: null;\n\n\t\tconst clickOutsideHandler = (e: MouseEvent): void => {\n\t\t\tconst path: EventTarget[] = e.composedPath();\n\t\t\tif (path.includes(popup)) return;\n\n\t\t\t// Don't close if click is inside any ancestor popup in the stack\n\t\t\tfor (const stackEntry of this.stack) {\n\t\t\t\tif (path.includes(stackEntry.element)) return;\n\t\t\t}\n\n\t\t\t// Don't close if click is on the anchor element\n\t\t\tif (config.anchor instanceof HTMLElement && path.includes(config.anchor)) return;\n\n\t\t\tthis.closeEntry(entry);\n\t\t};\n\n\t\tconst entry: PopupEntry = {\n\t\t\telement: popup,\n\t\t\tconfig,\n\t\t\tclickOutsideHandler,\n\t\t\tparent: parentEntry,\n\t\t};\n\n\t\tthis.stack.push(entry);\n\n\t\tsetTimeout(() => {\n\t\t\tdocument.addEventListener('mousedown', clickOutsideHandler);\n\t\t}, 0);\n\n\t\tthis.focusFirstItem(popup);\n\n\t\treturn handle;\n\t}\n\n\t/** Closes the topmost popup in the stack. */\n\tclose(): void {\n\t\tconst top: PopupEntry | undefined = this.stack[this.stack.length - 1];\n\t\tif (top) {\n\t\t\tthis.closeEntry(top);\n\t\t}\n\t}\n\n\t/** Closes all open popups. */\n\tcloseAll(): void {\n\t\twhile (this.stack.length > 0) {\n\t\t\tconst top: PopupEntry | undefined = this.stack[this.stack.length - 1];\n\t\t\tif (top) {\n\t\t\t\tthis.closeEntry(top);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns true if any popup is currently open. */\n\tisOpen(): boolean {\n\t\treturn this.stack.length > 0;\n\t}\n\n\t/** Cleans up all popups and event listeners. */\n\tdestroy(): void {\n\t\tthis.closeAll();\n\t}\n\n\t// --- Internal ---\n\n\tprivate closeEntry(entry: PopupEntry, options?: PopupCloseOptions): void {\n\t\tconst index: number = this.stack.indexOf(entry);\n\t\tif (index === -1) return;\n\n\t\t// Close all child popups first (anything above this entry in the stack)\n\t\twhile (this.stack.length > index + 1) {\n\t\t\tconst child: PopupEntry | undefined = this.stack[this.stack.length - 1];\n\t\t\tif (child) {\n\t\t\t\tthis.removeEntry(child);\n\t\t\t}\n\t\t}\n\n\t\tthis.removeEntry(entry);\n\n\t\tif (options !== undefined && 'restoreFocusTo' in options) {\n\t\t\toptions.restoreFocusTo?.focus();\n\t\t} else if (entry.config.restoreFocusTo) {\n\t\t\tentry.config.restoreFocusTo.focus();\n\t\t}\n\t\tentry.config.onClose?.();\n\t}\n\n\tprivate removeEntry(entry: PopupEntry): void {\n\t\tconst index: number = this.stack.indexOf(entry);\n\t\tif (index === -1) return;\n\n\t\tthis.stack.splice(index, 1);\n\t\tentry.element.remove();\n\t\tdocument.removeEventListener('mousedown', entry.clickOutsideHandler);\n\t}\n\n\tprivate findEntryByHandle(handle: PopupHandle): PopupEntry | null {\n\t\tconst element: HTMLElement = handle.getElement();\n\t\treturn this.stack.find((e) => e.element === element) ?? null;\n\t}\n\n\tprivate focusFirstItem(popup: HTMLElement): void {\n\t\trequestAnimationFrame(() => {\n\t\t\tconst firstFocusable: HTMLElement | null =\n\t\t\t\tpopup.querySelector('[role=\"menuitem\"]') ??\n\t\t\t\tpopup.querySelector('[role=\"option\"]') ??\n\t\t\t\tpopup.querySelector('[role=\"gridcell\"]') ??\n\t\t\t\tpopup.querySelector('input') ??\n\t\t\t\tpopup.querySelector('button');\n\t\t\tfirstFocusable?.focus();\n\t\t});\n\t}\n}\n","/** Toolbar styles — buttons, separators, tooltips, popups, dropdowns. */\nexport const TOOLBAR_CSS = `\n/* Toolbar */\n.notectl-plugin-container--top {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\tborder-bottom: 1px solid var(--notectl-border);\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n\tmin-height: 40px;\n}\n\n.notectl-toolbar {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n\tflex: 1;\n\tmin-width: 0;\n\tgap: 2px;\n\tpadding: 4px 8px;\n}\n\n.notectl-toolbar[hidden] {\n\tdisplay: none;\n}\n\n.notectl-toolbar-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 14px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-btn--active {\n\tbackground: var(--notectl-active-bg);\n\tborder-color: var(--notectl-primary-muted);\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-toolbar-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n.notectl-toolbar-btn:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn:disabled:hover {\n\t\tbackground: transparent;\n\t\tborder-color: transparent;\n\t}\n}\n\n.notectl-toolbar-btn__icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpointer-events: none;\n}\n\n.notectl-toolbar-btn__icon svg {\n\tdisplay: block;\n\twidth: 18px;\n\theight: 18px;\n\tfill: currentColor;\n}\n\n/* Tooltip (rendered as fixed-position element in shadow root) */\n.notectl-toolbar-tooltip {\n\tposition: fixed;\n\tpadding: 4px 8px;\n\tborder-radius: 4px;\n\tbackground: var(--notectl-tooltip-bg);\n\tcolor: var(--notectl-tooltip-fg);\n\tfont-size: 11px;\n\tfont-weight: 500;\n\twhite-space: nowrap;\n\tpointer-events: none;\n\tz-index: 10001;\n\tline-height: 1.4;\n\tletter-spacing: 0.01em;\n\tfont-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n.notectl-toolbar-separator {\n\tdisplay: inline-block;\n\twidth: 1px;\n\theight: 20px;\n\tbackground: var(--notectl-border);\n\tmargin: 0 4px;\n\tvertical-align: middle;\n}\n\n/* Toolbar Popups */\n.notectl-toolbar-popup {\n\tbackground: var(--notectl-surface-overlay);\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 12px var(--notectl-shadow);\n\toverflow: hidden;\n}\n\n/* Grid Picker */\n.notectl-grid-picker__cell:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n\n.notectl-grid-picker__cell--highlighted {\n\tbackground: var(--notectl-primary-muted);\n\tborder-color: var(--notectl-primary);\n}\n\n/* Dropdown */\n.notectl-dropdown {\n\tmin-width: 160px;\n\tpadding: 4px 0;\n}\n\n.notectl-dropdown__item {\n\tdisplay: flex;\n\talign-items: center;\n\twidth: 100%;\n\tpadding: 8px 12px;\n\ttext-align: left;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\tline-height: 1.4;\n\tfont-family: inherit;\n\twhite-space: nowrap;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-dropdown__item:focus-visible {\n\tbackground: var(--notectl-hover-bg);\n\toutline: none;\n}\n\n.notectl-dropdown__item-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-fg-muted);\n\tflex-shrink: 0;\n}\n\n.notectl-dropdown__item-label {\n\tflex: 1;\n}\n\n/* Overflow behavior: flow mode — toolbar wraps to additional rows */\n.notectl-toolbar[data-overflow=\"flow\"] {\n\tflex-wrap: wrap;\n\toverflow: visible;\n}\n\n/* Overflow behavior: none — toolbar clips without any responsive behavior */\n.notectl-toolbar[data-overflow=\"none\"] {\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n}\n\n/* Overflow: hidden items (burger-menu mode) */\n.notectl-toolbar-btn--overflow-hidden,\n.notectl-toolbar-separator--overflow-hidden {\n\tdisplay: none;\n}\n\n/* Overflow \"more\" button */\n.notectl-toolbar-overflow-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 16px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\tmargin-left: auto;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-overflow-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-overflow-btn--hidden {\n\tdisplay: none;\n}\n\n.notectl-toolbar-overflow-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n/* Dropdown item states shared by all dropdown menus (including overflow) */\n.notectl-dropdown__item:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:disabled:hover {\n\t\tbackground: none;\n\t}\n}\n\n.notectl-dropdown__item--active {\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-dropdown__item-icon svg {\n\tdisplay: block;\n\twidth: 16px;\n\theight: 16px;\n\tfill: currentColor;\n}\n\n.notectl-dropdown__separator {\n\theight: 1px;\n\tbackground: var(--notectl-border);\n\tmargin: 4px 0;\n}\n\n/* Combobox-style toolbar buttons (shared base for font, fontSize, heading, etc.) */\n.notectl-toolbar-btn[role=\"combobox\"] {\n\twidth: auto;\n\tpadding: 0 8px;\n\tgap: 4px;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-bg);\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-btn[role=\"combobox\"]:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-fg-muted);\n\t}\n}\n\n.notectl-toolbar-btn[role=\"combobox\"].notectl-toolbar-btn--active {\n\tbackground: var(--notectl-bg);\n\tborder-color: var(--notectl-primary-muted);\n}\n\n.notectl-toolbar-combobox__label {\n\tflex: 1;\n\tfont-size: 13px;\n\tfont-weight: 500;\n\tcolor: var(--notectl-fg);\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\ttext-align: left;\n\tline-height: 30px;\n}\n\n.notectl-toolbar-combobox__arrow {\n\tflex-shrink: 0;\n\tfont-size: 11px;\n\tcolor: var(--notectl-fg-muted);\n\tline-height: 30px;\n}\n\n/* Link Popup */\n.notectl-link-popup {\n\tpadding: 8px;\n\tmin-width: 200px;\n}\n\n.notectl-link-popup__input {\n\twidth: 100%;\n\tpadding: 4px;\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tfont-size: 13px;\n\tcolor: var(--notectl-fg);\n\tbackground: var(--notectl-bg);\n}\n\n.notectl-link-popup__input:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n\n.notectl-link-popup__button {\n\twidth: 100%;\n\tpadding: 6px 12px;\n\tcursor: pointer;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-bg);\n\tcolor: var(--notectl-fg);\n\tfont-size: 13px;\n}\n\n.notectl-link-popup__button--apply {\n\tmargin-top: 4px;\n}\n\n@media (hover: hover) {\n\t.notectl-link-popup__button:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-link-popup__button:focus-visible {\n\toutline: 2px solid var(--notectl-focus-ring);\n\toutline-offset: -1px;\n}\n`;\n","/** Locale interface and default English locale for the ToolbarPlugin. */\n\n// --- Locale Interface ---\n\nexport interface ToolbarLocale {\n\treadonly formattingOptionsAria: string;\n\treadonly moreToolsAria: string;\n}\n\n// --- Default English Locale ---\n\nexport const TOOLBAR_LOCALE_EN: ToolbarLocale = {\n\tformattingOptionsAria: 'Formatting options',\n\tmoreToolsAria: 'More tools',\n};\n\n// --- German Locale ---\n\nexport const TOOLBAR_LOCALE_DE: ToolbarLocale = {\n\tformattingOptionsAria: 'Formatierungsoptionen',\n\tmoreToolsAria: 'Weitere Werkzeuge',\n};\n\n// --- Spanish Locale ---\n\nexport const TOOLBAR_LOCALE_ES: ToolbarLocale = {\n\tformattingOptionsAria: 'Opciones de formato',\n\tmoreToolsAria: 'Más herramientas',\n};\n\n// --- French Locale ---\n\nexport const TOOLBAR_LOCALE_FR: ToolbarLocale = {\n\tformattingOptionsAria: 'Options de mise en forme',\n\tmoreToolsAria: \"Plus d'outils\",\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const TOOLBAR_LOCALE_ZH: ToolbarLocale = {\n\tformattingOptionsAria: '格式选项',\n\tmoreToolsAria: '更多工具',\n};\n\n// --- Russian Locale ---\n\nexport const TOOLBAR_LOCALE_RU: ToolbarLocale = {\n\tformattingOptionsAria: 'Параметры форматирования',\n\tmoreToolsAria: 'Другие инструменты',\n};\n\n// --- Arabic Locale ---\n\nexport const TOOLBAR_LOCALE_AR: ToolbarLocale = {\n\tformattingOptionsAria: 'خيارات التنسيق',\n\tmoreToolsAria: 'أدوات إضافية',\n};\n\n// --- Hindi Locale ---\n\nexport const TOOLBAR_LOCALE_HI: ToolbarLocale = {\n\tformattingOptionsAria: 'फ़ॉर्मेटिंग विकल्प',\n\tmoreToolsAria: 'और उपकरण',\n};\n\n// --- Locale Map ---\n\nexport const TOOLBAR_LOCALES: Record<string, ToolbarLocale> = {\n\ten: TOOLBAR_LOCALE_EN,\n\tde: TOOLBAR_LOCALE_DE,\n\tes: TOOLBAR_LOCALE_ES,\n\tfr: TOOLBAR_LOCALE_FR,\n\tzh: TOOLBAR_LOCALE_ZH,\n\tru: TOOLBAR_LOCALE_RU,\n\tar: TOOLBAR_LOCALE_AR,\n\thi: TOOLBAR_LOCALE_HI,\n};\n","/**\n * Controls how the toolbar responds when items exceed the available width.\n *\n * @example\n * ```typescript\n * const editor = await createEditor({\n * toolbar: {\n * groups: [[BoldPlugin, ItalicPlugin], [HeadingPlugin]],\n * overflow: ToolbarOverflowBehavior.Flow,\n * },\n * });\n * ```\n */\nexport const ToolbarOverflowBehavior = {\n\t/** Items that don't fit are hidden behind a \"...\" dropdown button. Default. */\n\tBurgerMenu: 'burger-menu',\n\t/** Toolbar wraps to additional rows when items overflow. Pure CSS, no JS measurement. */\n\tFlow: 'flow',\n\t/** No responsive behavior; the toolbar clips at the container boundary. */\n\tNone: 'none',\n} as const;\n\nexport type ToolbarOverflowBehavior =\n\t(typeof ToolbarOverflowBehavior)[keyof typeof ToolbarOverflowBehavior];\n","/**\n * ToolbarOverflowController: manages responsive toolbar overflow.\n * Uses ResizeObserver to detect when items exceed available width,\n * hides overflow items, and shows a \"more\" dropdown button.\n * Delegates popup lifecycle to PopupManager when available.\n */\n\nimport type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport { appendToRoot } from '../shared/PopupPositioning.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport { findNextDropdownItem } from './ToolbarKeyboardNav.js';\n\n// --- Types ---\n\ninterface OverflowEntry {\n\treadonly element: HTMLButtonElement;\n\treadonly item: ToolbarItem;\n}\n\ntype OnOverflowChange = (\n\tvisibleButtons: readonly HTMLButtonElement[],\n\toverflowButton: HTMLButtonElement | null,\n) => void;\n\ntype OnItemActivated = (overflowButton: HTMLButtonElement, item: ToolbarItem) => void;\n\nexport interface OverflowControllerConfig {\n\treadonly toolbar: HTMLElement;\n\treadonly ariaLabel: string;\n\treadonly context: PluginContext;\n\treadonly onOverflowChange: OnOverflowChange;\n\treadonly onItemActivated: OnItemActivated;\n\treadonly getActiveElement: () => Element | null;\n\treadonly popupManager?: PopupManager;\n}\n\n// --- Constants ---\n\nconst OVERFLOW_BTN_WIDTH = 34;\nconst GAP = 2;\nconst HIDDEN_BTN_CLASS = 'notectl-toolbar-btn--overflow-hidden';\nconst HIDDEN_SEP_CLASS = 'notectl-toolbar-separator--overflow-hidden';\nconst HIDDEN_OVERFLOW_CLASS = 'notectl-toolbar-overflow-btn--hidden';\nconst ELLIPSIS_SVG =\n\t'<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/></svg>';\n\n// --- Controller ---\n\nexport class ToolbarOverflowController {\n\tprivate readonly toolbar: HTMLElement;\n\tprivate readonly context: PluginContext;\n\tprivate readonly onOverflowChange: OnOverflowChange;\n\tprivate readonly onItemActivated: OnItemActivated;\n\tprivate readonly getActiveElement: () => Element | null;\n\tprivate readonly ariaLabel: string;\n\tprivate readonly popupManager: PopupManager | null;\n\n\tprivate entries: OverflowEntry[] = [];\n\tprivate overflowButton: HTMLButtonElement | null = null;\n\tprivate overflowDropdown: HTMLElement | null = null;\n\tprivate overflowHandle: PopupHandle | null = null;\n\tprivate overflowEntries: OverflowEntry[] = [];\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate closeHandler: ((e: MouseEvent) => void) | null = null;\n\n\tconstructor(config: OverflowControllerConfig) {\n\t\tthis.toolbar = config.toolbar;\n\t\tthis.ariaLabel = config.ariaLabel;\n\t\tthis.context = config.context;\n\t\tthis.onOverflowChange = config.onOverflowChange;\n\t\tthis.onItemActivated = config.onItemActivated;\n\t\tthis.getActiveElement = config.getActiveElement;\n\t\tthis.popupManager = config.popupManager ?? null;\n\n\t\tthis.resizeObserver = new ResizeObserver(() => this.recalculate());\n\t\tthis.resizeObserver.observe(this.toolbar);\n\t}\n\n\t/** Called after renderItems() — stores button references and recalculates. */\n\tupdate(buttons: readonly { element: HTMLButtonElement; item: ToolbarItem }[]): void {\n\t\tthis.entries = buttons.map((b) => ({ element: b.element, item: b.item }));\n\t\tthis.recalculate();\n\t}\n\n\t/** Measures toolbar and redistributes items between visible and overflow. */\n\trecalculate(): void {\n\t\tif (this.entries.length === 0) return;\n\n\t\tthis.closeDropdown();\n\t\tthis.resetVisibility();\n\t\tthis.ensureOverflowButton();\n\t\tthis.setOverflowButtonVisible(false);\n\n\t\t// Phase 1 — Measure (reads only): batch all layout reads before any writes\n\t\tconst availableWidth: number = this.measureAvailableWidth();\n\t\tconst children: HTMLElement[] = Array.from(this.toolbar.children) as HTMLElement[];\n\t\tconst childWidths: Map<HTMLElement, number> = this.measureChildWidths(children);\n\n\t\t// Phase 2 — Apply (writes only): use cached widths, no layout reads\n\t\tconst maxWidth: number = availableWidth - OVERFLOW_BTN_WIDTH - GAP;\n\t\tlet usedWidth = 0;\n\t\tlet overflowing = false;\n\t\tconst overflowList: OverflowEntry[] = [];\n\n\t\tfor (const child of children) {\n\t\t\tif (child === this.overflowButton) continue;\n\n\t\t\tif (child.classList.contains('notectl-toolbar-separator')) {\n\t\t\t\tif (overflowing) {\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst sepWidth: number = (childWidths.get(child) ?? 0) + GAP;\n\t\t\t\tif (usedWidth + sepWidth > maxWidth) {\n\t\t\t\t\toverflowing = true;\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t} else {\n\t\t\t\t\tusedWidth += sepWidth;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst entry: OverflowEntry | undefined = this.entries.find((oe) => oe.element === child);\n\t\t\tif (!entry) continue;\n\n\t\t\tif (overflowing) {\n\t\t\t\tentry.element.classList.add(HIDDEN_BTN_CLASS);\n\t\t\t\toverflowList.push(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst btnWidth: number = (childWidths.get(child) ?? 0) + GAP;\n\t\t\tif (usedWidth + btnWidth > maxWidth) {\n\t\t\t\toverflowing = true;\n\t\t\t\tentry.element.classList.add(HIDDEN_BTN_CLASS);\n\t\t\t\toverflowList.push(entry);\n\t\t\t} else {\n\t\t\t\tusedWidth += btnWidth;\n\t\t\t}\n\t\t}\n\n\t\tthis.overflowEntries = overflowList;\n\t\tthis.hideTrailingSeparators();\n\t\tthis.setOverflowButtonVisible(overflowList.length > 0);\n\t\tthis.notifyChange();\n\t}\n\n\t/** Updates active/disabled states for items in the open overflow dropdown. */\n\tupdateItemStates(state: EditorState): void {\n\t\tif (!this.overflowDropdown) return;\n\n\t\tconst menuItems: HTMLButtonElement[] = Array.from(\n\t\t\tthis.overflowDropdown.querySelectorAll('.notectl-dropdown__item'),\n\t\t) as HTMLButtonElement[];\n\n\t\tfor (const menuItem of menuItems) {\n\t\t\tconst itemId: string | null = menuItem.getAttribute('data-toolbar-item');\n\t\t\tconst entry: OverflowEntry | undefined = this.overflowEntries.find(\n\t\t\t\t(oe) => oe.item.id === itemId,\n\t\t\t);\n\t\t\tif (!entry) continue;\n\n\t\t\tconst active: boolean = entry.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = entry.item.isEnabled?.(state) ?? true;\n\t\t\tmenuItem.classList.toggle('notectl-dropdown__item--active', active);\n\t\t\tmenuItem.disabled = !enabled;\n\n\t\t\tif (entry.item.popupType === 'combobox') {\n\t\t\t\tconst labelEl: HTMLSpanElement | null = menuItem.querySelector(\n\t\t\t\t\t'.notectl-dropdown__item-label',\n\t\t\t\t);\n\t\t\t\tif (labelEl) {\n\t\t\t\t\tlabelEl.textContent = entry.item.getLabel(state);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Cleans up ResizeObserver, DOM elements, and event listeners. */\n\tdestroy(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.resizeObserver = null;\n\t\tthis.closeDropdown();\n\t\tthis.overflowButton?.remove();\n\t\tthis.overflowButton = null;\n\t\tthis.entries = [];\n\t\tthis.overflowEntries = [];\n\t}\n\n\t// --- Measurement ---\n\n\tprivate measureChildWidths(children: readonly HTMLElement[]): Map<HTMLElement, number> {\n\t\tconst widths: Map<HTMLElement, number> = new Map();\n\t\tfor (const child of children) {\n\t\t\tif (child === this.overflowButton) continue;\n\t\t\twidths.set(child, child.offsetWidth);\n\t\t}\n\t\treturn widths;\n\t}\n\n\tprivate measureAvailableWidth(): number {\n\t\tconst toolbarStyle: CSSStyleDeclaration = getComputedStyle(this.toolbar);\n\t\tconst paddingLeft: number = Number.parseFloat(toolbarStyle.paddingLeft) || 0;\n\t\tconst paddingRight: number = Number.parseFloat(toolbarStyle.paddingRight) || 0;\n\t\treturn this.toolbar.clientWidth - paddingLeft - paddingRight;\n\t}\n\n\tprivate resetVisibility(): void {\n\t\tfor (const entry of this.entries) {\n\t\t\tentry.element.classList.remove(HIDDEN_BTN_CLASS);\n\t\t}\n\t\tconst separators: HTMLElement[] = Array.from(\n\t\t\tthis.toolbar.querySelectorAll('.notectl-toolbar-separator'),\n\t\t) as HTMLElement[];\n\t\tfor (const sep of separators) {\n\t\t\tsep.classList.remove(HIDDEN_SEP_CLASS);\n\t\t}\n\t}\n\n\t// --- Overflow Button ---\n\n\tprivate setOverflowButtonVisible(visible: boolean): void {\n\t\tif (!this.overflowButton) return;\n\t\tthis.overflowButton.classList.toggle(HIDDEN_OVERFLOW_CLASS, !visible);\n\t\tif (!visible) {\n\t\t\tthis.overflowButton.removeAttribute('tabindex');\n\t\t}\n\t}\n\n\tprivate ensureOverflowButton(): void {\n\t\tif (this.overflowButton) return;\n\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = 'notectl-toolbar-overflow-btn';\n\t\tbtn.setAttribute('aria-label', this.ariaLabel);\n\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\tbtn.innerHTML = ELLIPSIS_SVG;\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.toggleDropdown();\n\t\t});\n\n\t\tthis.toolbar.appendChild(btn);\n\t\tthis.overflowButton = btn;\n\t}\n\n\t// --- Dropdown ---\n\n\tprivate toggleDropdown(): void {\n\t\tif (this.overflowDropdown) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\tprivate openDropdown(): void {\n\t\tif (!this.overflowButton || this.overflowEntries.length === 0) return;\n\n\t\tconst dropdown: HTMLDivElement = document.createElement('div');\n\t\tdropdown.className = 'notectl-toolbar-popup notectl-dropdown';\n\t\tdropdown.setAttribute('role', 'menu');\n\n\t\tthis.renderDropdownItems(dropdown, this.context.getState());\n\n\t\tif (this.popupManager) {\n\t\t\tthis.overflowHandle = this.popupManager.open({\n\t\t\t\tanchor: this.overflowButton,\n\t\t\t\tclassName: 'notectl-toolbar-popup notectl-dropdown',\n\t\t\t\tariaRole: 'menu',\n\t\t\t\tposition: 'below-end',\n\t\t\t\treferenceNode: this.overflowButton,\n\t\t\t\trestoreFocusTo: this.overflowButton,\n\t\t\t\tonClose: () => {\n\t\t\t\t\tthis.overflowHandle = null;\n\t\t\t\t\tthis.overflowDropdown = null;\n\t\t\t\t\tif (this.overflowButton) {\n\t\t\t\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontent: (popup: HTMLElement) => {\n\t\t\t\t\tthis.renderDropdownItems(popup, this.context.getState());\n\t\t\t\t\tthis.overflowDropdown = popup;\n\t\t\t\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handleDropdownKeydown(e));\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'true');\n\t\t} else {\n\t\t\tthis.positionDropdown(dropdown);\n\t\t\tappendToRoot(dropdown, this.overflowButton);\n\t\t\tthis.overflowDropdown = dropdown;\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'true');\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst first: HTMLElement | null = dropdown.querySelector('[role=\"menuitem\"]');\n\t\t\t\tfirst?.focus();\n\t\t\t});\n\n\t\t\tdropdown.addEventListener('keydown', (e: KeyboardEvent) => this.handleDropdownKeydown(e));\n\t\t\tthis.registerCloseHandler();\n\t\t}\n\t}\n\n\tprivate renderDropdownItems(dropdown: HTMLElement, state: EditorState): void {\n\t\tlet lastGroup: string | null = null;\n\n\t\tfor (const entry of this.overflowEntries) {\n\t\t\tif (lastGroup !== null && entry.item.group !== lastGroup) {\n\t\t\t\tconst sep: HTMLDivElement = document.createElement('div');\n\t\t\t\tsep.className = 'notectl-dropdown__separator';\n\t\t\t\tsep.setAttribute('role', 'separator');\n\t\t\t\tdropdown.appendChild(sep);\n\t\t\t}\n\t\t\tlastGroup = entry.item.group;\n\n\t\t\tconst menuBtn: HTMLButtonElement = document.createElement('button');\n\t\t\tmenuBtn.type = 'button';\n\t\t\tmenuBtn.className = 'notectl-dropdown__item';\n\t\t\tmenuBtn.setAttribute('role', 'menuitem');\n\t\t\tmenuBtn.setAttribute('tabindex', '-1');\n\t\t\tmenuBtn.setAttribute('data-toolbar-item', entry.item.id);\n\n\t\t\tconst iconSpan: HTMLSpanElement = document.createElement('span');\n\t\t\ticonSpan.className = 'notectl-dropdown__item-icon';\n\t\t\tif (entry.item.popupType !== 'combobox') {\n\t\t\t\ticonSpan.innerHTML = entry.item.icon;\n\t\t\t}\n\t\t\tmenuBtn.appendChild(iconSpan);\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-dropdown__item-label';\n\t\t\tlabelSpan.textContent =\n\t\t\t\tentry.item.popupType === 'combobox'\n\t\t\t\t\t? entry.item.getLabel(state)\n\t\t\t\t\t: (entry.item.tooltip ?? entry.item.label);\n\t\t\tmenuBtn.appendChild(labelSpan);\n\n\t\t\tmenuBtn.addEventListener('mousedown', (ev: MouseEvent) => {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.activateOverflowItem(entry);\n\t\t\t});\n\n\t\t\tdropdown.appendChild(menuBtn);\n\t\t}\n\t}\n\n\tprivate positionDropdown(dropdown: HTMLElement): void {\n\t\tif (!this.overflowButton) return;\n\n\t\tconst rect: DOMRect = this.overflowButton.getBoundingClientRect();\n\t\tconst rightEdge: number = window.innerWidth - rect.right;\n\n\t\tsetStyleProperties(dropdown, {\n\t\t\tposition: 'fixed',\n\t\t\ttop: `${rect.bottom + 2}px`,\n\t\t\tright: `${rightEdge}px`,\n\t\t\tleft: 'auto',\n\t\t\tzIndex: '10000',\n\t\t});\n\t}\n\n\tprivate registerCloseHandler(): void {\n\t\tthis.closeHandler = (ev: MouseEvent) => {\n\t\t\tconst path: EventTarget[] = ev.composedPath();\n\t\t\tif (\n\t\t\t\tthis.overflowDropdown &&\n\t\t\t\t!path.includes(this.overflowDropdown) &&\n\t\t\t\tthis.overflowButton &&\n\t\t\t\t!path.includes(this.overflowButton)\n\t\t\t) {\n\t\t\t\tthis.closeDropdown();\n\t\t\t}\n\t\t};\n\t\tsetTimeout(() => {\n\t\t\tif (this.closeHandler) {\n\t\t\t\tdocument.addEventListener('mousedown', this.closeHandler);\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\tprivate closeDropdown(): void {\n\t\tif (this.overflowHandle) {\n\t\t\tconst handle: PopupHandle = this.overflowHandle;\n\t\t\tthis.overflowHandle = null;\n\t\t\tthis.overflowDropdown = null;\n\t\t\thandle.close();\n\t\t\tif (this.overflowButton) {\n\t\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.overflowDropdown) {\n\t\t\tthis.overflowDropdown.remove();\n\t\t\tthis.overflowDropdown = null;\n\t\t}\n\t\tif (this.overflowButton) {\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t}\n\t\tif (this.closeHandler) {\n\t\t\tdocument.removeEventListener('mousedown', this.closeHandler);\n\t\t\tthis.closeHandler = null;\n\t\t}\n\t}\n\n\tprivate activateOverflowItem(entry: OverflowEntry): void {\n\t\tthis.closeDropdown();\n\t\tif (entry.item.popupType && this.overflowButton) {\n\t\t\tthis.onItemActivated(this.overflowButton, entry.item);\n\t\t} else {\n\t\t\tthis.context.executeCommand(entry.item.command);\n\t\t}\n\t}\n\n\t// --- Keyboard Navigation ---\n\n\tprivate handleDropdownKeydown(e: KeyboardEvent): void {\n\t\tif (!this.overflowDropdown) return;\n\n\t\tif (e.key === 'Escape' || e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.closeDropdown();\n\t\t\tthis.overflowButton?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tconst items: HTMLElement[] = Array.from(\n\t\t\tthis.overflowDropdown.querySelectorAll('[role=\"menuitem\"]'),\n\t\t) as HTMLElement[];\n\t\tconst current: number = items.indexOf(this.getActiveElement() as HTMLElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(items, current, 1);\n\t\t\t\titems[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(items, current, -1);\n\t\t\t\titems[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focusedItem: HTMLElement | undefined = items[current];\n\t\t\t\tif (!focusedItem) break;\n\t\t\t\tconst itemId: string | null = focusedItem.getAttribute('data-toolbar-item');\n\t\t\t\tconst entry: OverflowEntry | undefined = this.overflowEntries.find(\n\t\t\t\t\t(oe) => oe.item.id === itemId,\n\t\t\t\t);\n\t\t\t\tif (entry) this.activateOverflowItem(entry);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Helpers ---\n\n\tprivate hideTrailingSeparators(): void {\n\t\tconst children: HTMLElement[] = Array.from(this.toolbar.children) as HTMLElement[];\n\t\tfor (let i = children.length - 1; i >= 0; i--) {\n\t\t\tconst child: HTMLElement | undefined = children[i];\n\t\t\tif (!child || child === this.overflowButton) continue;\n\t\t\tif (child.classList.contains('notectl-toolbar-separator')) {\n\t\t\t\tif (!child.classList.contains(HIDDEN_SEP_CLASS)) {\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t}\n\t\t\t} else if (!child.classList.contains(HIDDEN_BTN_CLASS)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate notifyChange(): void {\n\t\tconst visible: HTMLButtonElement[] = this.entries\n\t\t\t.filter((oe) => !oe.element.classList.contains(HIDDEN_BTN_CLASS))\n\t\t\t.map((oe) => oe.element);\n\t\tthis.onOverflowChange(visible, this.overflowEntries.length > 0 ? this.overflowButton : null);\n\t}\n}\n","/**\n * ToolbarRenderers: pure rendering functions for toolbar popup content.\n * Grid pickers, dropdown menus, and separator elements.\n */\n\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { DropdownConfig, GridPickerConfig } from './ToolbarItem.js';\n\nconst HIGHLIGHTED_CLASS = 'notectl-grid-picker__cell--highlighted';\n\n/**\n * Renders a grid picker into the given container.\n * Calls `onClose` after a cell is selected so the popup can be dismissed.\n */\nexport function renderGridPicker(\n\tcontainer: HTMLElement,\n\tconfig: GridPickerConfig,\n\tonClose: () => void,\n): void {\n\tcontainer.className += ' notectl-grid-picker';\n\n\tconst grid: HTMLDivElement = document.createElement('div');\n\tgrid.className = 'notectl-grid-picker__grid';\n\tgrid.setAttribute('role', 'grid');\n\tsetStyleProperties(grid, {\n\t\tdisplay: 'grid',\n\t\tgridTemplateColumns: `repeat(${config.maxCols}, 1fr)`,\n\t\tgap: '2px',\n\t\tpadding: '8px',\n\t});\n\n\tconst label: HTMLDivElement = document.createElement('div');\n\tlabel.className = 'notectl-grid-picker__label';\n\tlabel.textContent = '1 x 1';\n\tsetStyleProperties(label, {\n\t\ttextAlign: 'center',\n\t\tpadding: '4px',\n\t\tfontSize: '12px',\n\t});\n\tlabel.setAttribute('aria-live', 'polite');\n\n\tfor (let r = 1; r <= config.maxRows; r++) {\n\t\tfor (let c = 1; c <= config.maxCols; c++) {\n\t\t\tconst cell: HTMLDivElement = document.createElement('div');\n\t\t\tcell.className = 'notectl-grid-picker__cell';\n\t\t\tcell.setAttribute('role', 'gridcell');\n\t\t\tcell.setAttribute('tabindex', '-1');\n\t\t\tcell.setAttribute('aria-label', `${r} x ${c}`);\n\t\t\tsetStyleProperties(cell, {\n\t\t\t\twidth: '20px',\n\t\t\t\theight: '20px',\n\t\t\t\tborder: '1px solid #ccc',\n\t\t\t\tcursor: 'pointer',\n\t\t\t});\n\t\t\tcell.setAttribute('data-row', String(r));\n\t\t\tcell.setAttribute('data-col', String(c));\n\n\t\t\tcell.addEventListener('mouseenter', () => {\n\t\t\t\thighlightCells(grid, r, c);\n\t\t\t\tlabel.textContent = `${r} x ${c}`;\n\t\t\t});\n\n\t\t\tcell.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tconfig.onSelect(r, c);\n\t\t\t\tonClose();\n\t\t\t});\n\n\t\t\tcell.addEventListener('click', () => {\n\t\t\t\tconfig.onSelect(r, c);\n\t\t\t\tonClose();\n\t\t\t});\n\n\t\t\tgrid.appendChild(cell);\n\t\t}\n\t}\n\n\tcontainer.appendChild(grid);\n\tcontainer.appendChild(label);\n}\n\n/**\n * Highlights grid cells up to the given row/col and updates the label.\n * Used by both mouse hover and keyboard navigation.\n */\nexport function highlightCells(grid: HTMLElement, targetRow: number, targetCol: number): void {\n\tconst cells: NodeListOf<Element> = grid.querySelectorAll('.notectl-grid-picker__cell');\n\tfor (const cell of cells) {\n\t\tconst r: number = Number(cell.getAttribute('data-row'));\n\t\tconst c: number = Number(cell.getAttribute('data-col'));\n\t\tcell.classList.toggle(HIGHLIGHTED_CLASS, r <= targetRow && c <= targetCol);\n\t}\n}\n\n/**\n * Renders a dropdown menu into the given container.\n * Calls `onClose` after an item is activated so the popup can be dismissed.\n */\nexport function renderDropdown(\n\tcontainer: HTMLElement,\n\tconfig: DropdownConfig,\n\texecuteCommand: (command: string) => void,\n\tonClose: () => void,\n): void {\n\tcontainer.classList.add('notectl-dropdown');\n\tcontainer.setAttribute('role', 'menu');\n\n\tfor (const item of config.items) {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = 'notectl-dropdown__item';\n\t\tbtn.setAttribute('role', 'menuitem');\n\t\tbtn.setAttribute('tabindex', '-1');\n\n\t\tif (item.icon) {\n\t\t\tconst iconSpan: HTMLSpanElement = document.createElement('span');\n\t\t\ticonSpan.className = 'notectl-dropdown__item-icon';\n\t\t\ticonSpan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(iconSpan);\n\t\t}\n\n\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\tlabelSpan.className = 'notectl-dropdown__item-label';\n\t\tlabelSpan.textContent = item.label;\n\t\tbtn.appendChild(labelSpan);\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\texecuteCommand(item.command);\n\t\t\tonClose();\n\t\t});\n\n\t\tbtn.addEventListener('click', () => {\n\t\t\texecuteCommand(item.command);\n\t\t\tonClose();\n\t\t});\n\n\t\tcontainer.appendChild(btn);\n\t}\n}\n\n/** Creates a toolbar group separator element. */\nexport function createSeparator(): HTMLSpanElement {\n\tconst sep: HTMLSpanElement = document.createElement('span');\n\tsep.className = 'notectl-toolbar-separator';\n\tsep.setAttribute('role', 'separator');\n\treturn sep;\n}\n","/**\n * ToolbarPopupController: manages popup lifecycle, positioning, keyboard\n * navigation, and auto-close for toolbar popups (grid pickers, dropdowns,\n * and custom popups). Delegates lifecycle to PopupManager.\n */\n\nimport type { PluginContext } from '../Plugin.js';\nimport type { PopupCloseOptions, PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport { findNextDropdownItem, navigateGrid } from './ToolbarKeyboardNav.js';\nimport { highlightCells, renderDropdown, renderGridPicker } from './ToolbarRenderers.js';\n\nexport class ToolbarPopupController {\n\tprivate activePopup: HTMLElement | null = null;\n\tprivate activePopupButton: HTMLButtonElement | null = null;\n\tprivate activeHandle: PopupHandle | null = null;\n\tprivate readonly getActiveElement: () => Element | null;\n\tprivate popupManager: PopupManager | null = null;\n\n\tconstructor(getActiveElement: () => Element | null) {\n\t\tthis.getActiveElement = getActiveElement;\n\t}\n\n\t/** Injects the PopupManager instance (called after service registration). */\n\tsetPopupManager(manager: PopupManager): void {\n\t\tthis.popupManager = manager;\n\t}\n\n\t/** Whether a popup is currently open. */\n\tisOpen(): boolean {\n\t\treturn this.activePopup !== null;\n\t}\n\n\t/** Toggles a popup for the given toolbar button. */\n\ttoggle(button: HTMLButtonElement, item: ToolbarItem, context: PluginContext): void {\n\t\tif (this.activePopup) {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.openViaManager(button, item, context);\n\t}\n\n\t/** Closes the active popup and cleans up event listeners. */\n\tclose(): void {\n\t\tif (this.activeHandle) {\n\t\t\t// Prevent onClose callback from re-entering\n\t\t\tconst handle: PopupHandle = this.activeHandle;\n\t\t\tthis.activeHandle = null;\n\t\t\tthis.clearButtonState();\n\t\t\thandle.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearButtonState();\n\t\tif (this.activePopup) {\n\t\t\tthis.activePopup.remove();\n\t\t\tthis.activePopup = null;\n\t\t}\n\t}\n\n\t/** Closes popup and restores focus to the trigger button. */\n\tcloseAndRestoreFocus(): void {\n\t\tconst triggerBtn: HTMLButtonElement | null = this.activePopupButton;\n\t\tthis.close();\n\t\ttriggerBtn?.focus();\n\t}\n\n\tdestroy(): void {\n\t\tthis.close();\n\t}\n\n\t// --- PopupManager path ---\n\n\tprivate openViaManager(\n\t\tbutton: HTMLButtonElement,\n\t\titem: ToolbarItem,\n\t\tcontext: PluginContext,\n\t): void {\n\t\tif (!this.popupManager) return;\n\n\t\tthis.activePopupButton = button;\n\t\tbutton.classList.add('notectl-toolbar-btn--popup-open');\n\t\tbutton.setAttribute('aria-expanded', 'true');\n\n\t\tthis.activeHandle = this.popupManager.open({\n\t\t\tanchor: button,\n\t\t\tclassName: 'notectl-toolbar-popup',\n\t\t\treferenceNode: button,\n\t\t\trestoreFocusTo: button,\n\t\t\tposition: 'below-start',\n\t\t\tonClose: () => {\n\t\t\t\t// Called when PopupManager closes the popup (click-outside, etc.)\n\t\t\t\tthis.activeHandle = null;\n\t\t\t\tthis.clearButtonState();\n\t\t\t\tthis.activePopup = null;\n\t\t\t},\n\t\t\tcontent: (popup: HTMLElement, close: (options?: PopupCloseOptions) => void) => {\n\t\t\t\tthis.activePopup = popup;\n\t\t\t\tthis.renderPopupContent(popup, item, context, close);\n\t\t\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handlePopupKeydown(e));\n\t\t\t},\n\t\t});\n\t}\n\n\t// --- Shared rendering ---\n\n\tprivate renderPopupContent(\n\t\tpopup: HTMLElement,\n\t\titem: ToolbarItem,\n\t\tcontext: PluginContext,\n\t\tclose: (options?: PopupCloseOptions) => void,\n\t): void {\n\t\tswitch (item.popupType) {\n\t\t\tcase 'gridPicker':\n\t\t\t\trenderGridPicker(popup, item.popupConfig, close);\n\t\t\t\tbreak;\n\t\t\tcase 'dropdown':\n\t\t\t\trenderDropdown(\n\t\t\t\t\tpopup,\n\t\t\t\t\titem.popupConfig,\n\t\t\t\t\t(cmd: string) => context.executeCommand(cmd),\n\t\t\t\t\tclose,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'custom':\n\t\t\t\titem.renderPopup(popup, context, close);\n\t\t\t\tbreak;\n\t\t\tcase 'combobox':\n\t\t\t\titem.renderPopup(popup, context, close);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// --- Button state ---\n\n\tprivate clearButtonState(): void {\n\t\tif (this.activePopupButton) {\n\t\t\tthis.activePopupButton.classList.remove('notectl-toolbar-btn--popup-open');\n\t\t\tthis.activePopupButton.setAttribute('aria-expanded', 'false');\n\t\t\tthis.activePopupButton = null;\n\t\t}\n\t}\n\n\t// --- Keyboard Navigation ---\n\n\tprivate handlePopupKeydown(e: KeyboardEvent): void {\n\t\tif (!this.activePopup) return;\n\n\t\tif (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.closeAndRestoreFocus();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\tthis.closeAndRestoreFocus();\n\t\t\treturn;\n\t\t}\n\n\t\tconst menuItems: NodeListOf<Element> = this.activePopup.querySelectorAll('[role=\"menuitem\"]');\n\t\tif (menuItems.length > 0) {\n\t\t\tthis.handleDropdownKeydown(e, menuItems);\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasGrid: boolean = this.activePopup.querySelector('.notectl-grid-picker__cell') !== null;\n\t\tif (hasGrid) {\n\t\t\tthis.handleGridKeydown(e);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.handleCustomPopupKeydown(e);\n\t}\n\n\tprivate handleDropdownKeydown(e: KeyboardEvent, items: NodeListOf<Element>): void {\n\t\tconst itemArr: HTMLElement[] = Array.from(items) as HTMLElement[];\n\t\tconst current: number = itemArr.indexOf(this.getActiveElement() as HTMLElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(itemArr, current, 1);\n\t\t\t\titemArr[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(itemArr, current, -1);\n\t\t\t\titemArr[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLElement | undefined = itemArr[current];\n\t\t\t\tif (focused) focused.click();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleGridKeydown(e: KeyboardEvent): void {\n\t\tconst focused: HTMLElement = this.getActiveElement() as HTMLElement;\n\t\tconst row: number = Number(focused?.getAttribute('data-row') ?? 1);\n\t\tconst col: number = Number(focused?.getAttribute('data-col') ?? 1);\n\n\t\tconst grid: Element | null =\n\t\t\tthis.activePopup?.querySelector('.notectl-grid-picker__grid') ?? null;\n\t\tif (!grid) return;\n\n\t\tconst lastCell: Element | null = grid.querySelector('.notectl-grid-picker__cell:last-child');\n\t\tconst maxCols: number = Number(lastCell?.getAttribute('data-col') ?? 1);\n\t\tconst maxRows: number = Number(lastCell?.getAttribute('data-row') ?? 1);\n\n\t\tif (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n\t\t\te.preventDefault();\n\t\t\tconst [newRow, newCol]: [number, number] = navigateGrid(\n\t\t\t\trow,\n\t\t\t\tcol,\n\t\t\t\tmaxRows,\n\t\t\t\tmaxCols,\n\t\t\t\te.key as 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight',\n\t\t\t);\n\t\t\tconst target: HTMLElement | null = grid.querySelector(\n\t\t\t\t`.notectl-grid-picker__cell[data-row=\"${newRow}\"][data-col=\"${newCol}\"]`,\n\t\t\t);\n\t\t\ttarget?.focus();\n\n\t\t\thighlightCells(grid as HTMLElement, newRow, newCol);\n\t\t\tconst label: Element | null =\n\t\t\t\tthis.activePopup?.querySelector('.notectl-grid-picker__label') ?? null;\n\t\t\tif (label) label.textContent = `${newRow} x ${newCol}`;\n\t\t}\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\tfocused?.click();\n\t\t}\n\t}\n\n\tprivate handleCustomPopupKeydown(e: KeyboardEvent): void {\n\t\tif (!this.activePopup) return;\n\t\tconst buttons: HTMLButtonElement[] = Array.from(this.activePopup.querySelectorAll('button'));\n\t\tif (buttons.length === 0) return;\n\t\tconst active: HTMLElement = this.getActiveElement() as HTMLElement;\n\t\tconst currentIdx: number = buttons.indexOf(active as HTMLButtonElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(buttons, currentIdx, 1);\n\t\t\t\tbuttons[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(buttons, currentIdx, -1);\n\t\t\t\tbuttons[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (active) {\n\t\t\t\t\tactive.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * ToolbarTooltip: manages the tooltip lifecycle for toolbar buttons.\n * Shows a tooltip after a short delay when hovering or focusing a button,\n * hides it when the cursor leaves or focus moves away.\n */\n\nimport { setStyleProperties, setStyleProperty } from '../../style/StyleRuntime.js';\n\nconst TOOLTIP_DELAY_MS = 500;\n\nexport class ToolbarTooltip {\n\tprivate readonly element: HTMLElement;\n\tprivate timer: ReturnType<typeof setTimeout> | null = null;\n\tprivate target: HTMLButtonElement | null = null;\n\tprivate readonly isPopupActive: () => boolean;\n\n\tstatic readonly TOOLTIP_ID = 'notectl-toolbar-tooltip';\n\n\tconstructor(isPopupActive: () => boolean) {\n\t\tthis.isPopupActive = isPopupActive;\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = 'notectl-toolbar-tooltip';\n\t\tthis.element.id = ToolbarTooltip.TOOLTIP_ID;\n\t\tthis.element.setAttribute('role', 'tooltip');\n\t\tsetStyleProperty(this.element, 'display', 'none');\n\t}\n\n\tshow(button: HTMLButtonElement): void {\n\t\tthis.hide();\n\n\t\tif (this.isPopupActive() || button.disabled) return;\n\n\t\tconst text: string | null = button.getAttribute('data-tooltip');\n\t\tif (!text) return;\n\n\t\tthis.target = button;\n\n\t\tthis.timer = setTimeout(() => {\n\t\t\tif (this.isPopupActive()) return;\n\n\t\t\tthis.element.textContent = text;\n\t\t\tsetStyleProperty(this.element, 'display', '');\n\n\t\t\tconst root: Node = button.getRootNode();\n\t\t\tif (root instanceof ShadowRoot && !this.element.parentNode) {\n\t\t\t\troot.appendChild(this.element);\n\t\t\t} else if (!(root instanceof ShadowRoot) && !this.element.parentNode) {\n\t\t\t\tdocument.body.appendChild(this.element);\n\t\t\t}\n\n\t\t\tbutton.setAttribute('aria-describedby', ToolbarTooltip.TOOLTIP_ID);\n\n\t\t\tconst rect: DOMRect = button.getBoundingClientRect();\n\t\t\tsetStyleProperties(this.element, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: `${rect.bottom + 6}px`,\n\t\t\t\tleft: `${rect.left + rect.width / 2}px`,\n\t\t\t\ttransform: 'translateX(-50%)',\n\t\t\t});\n\t\t}, TOOLTIP_DELAY_MS);\n\t}\n\n\thide(): void {\n\t\tif (this.timer) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = null;\n\t\t}\n\t\tif (this.target) {\n\t\t\tthis.target.removeAttribute('aria-describedby');\n\t\t\tthis.target = null;\n\t\t}\n\t\tsetStyleProperty(this.element, 'display', 'none');\n\t}\n\n\tdestroy(): void {\n\t\tthis.hide();\n\t\tthis.element.remove();\n\t}\n}\n","/**\n * Toolbar plugin: renders toolbar items registered by other plugins.\n * Acts as a pure rendering engine — has no knowledge of specific features.\n * Supports buttons, dropdowns, grid pickers, and custom popups.\n * Implements WAI-ARIA Toolbar pattern with roving tabindex.\n */\n\nimport { TOOLBAR_CSS } from '../../editor/styles/toolbar.js';\nimport { resolvePluginLocale } from '../../i18n/resolvePluginLocale.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { ServiceKey } from '../Plugin.js';\nimport type { Plugin, PluginConfig, PluginContext } from '../Plugin.js';\nimport { PopupManager, PopupServiceKey } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport {\n\tapplyRovingTabindex,\n\tfindFirstEnabled,\n\tfindLastEnabled,\n\tfindNextEnabled,\n} from './ToolbarKeyboardNav.js';\nimport { TOOLBAR_LOCALES, type ToolbarLocale } from './ToolbarLocale.js';\nimport {\n\tToolbarOverflowBehavior,\n\ttype ToolbarOverflowBehavior as ToolbarOverflowBehaviorType,\n} from './ToolbarOverflowBehavior.js';\nimport { ToolbarOverflowController } from './ToolbarOverflowController.js';\nimport { ToolbarPopupController } from './ToolbarPopupController.js';\nimport { createSeparator } from './ToolbarRenderers.js';\nimport { ToolbarTooltip } from './ToolbarTooltip.js';\n\n// --- Layout Config ---\n\nexport interface ToolbarLayoutConfig {\n\treadonly groups: ReadonlyArray<ReadonlyArray<string>>;\n\t/**\n\t * Controls responsive overflow behavior when toolbar items exceed available width.\n\t * Defaults to `ToolbarOverflowBehavior.BurgerMenu`.\n\t */\n\treadonly overflow?: ToolbarOverflowBehaviorType;\n}\n\n// --- Typed Service API ---\n\nexport interface ToolbarServiceAPI {\n\t/** Re-reads isActive/isEnabled from state and updates all buttons. */\n\trefresh(): void;\n\t/** Closes the currently open popup, if any. */\n\tclosePopup(): void;\n}\n\nexport const ToolbarServiceKey = new ServiceKey<ToolbarServiceAPI>('toolbar');\n\n// --- Plugin ---\n\ninterface ToolbarButton {\n\telement: HTMLButtonElement;\n\titem: ToolbarItem;\n\tcomboLabelEl: HTMLSpanElement | null;\n}\n\nexport class ToolbarPlugin implements Plugin {\n\treadonly id = 'toolbar';\n\treadonly name = 'Toolbar';\n\treadonly priority = 10;\n\n\tprivate context: PluginContext | null = null;\n\tprivate toolbarElement: HTMLElement | null = null;\n\tprivate buttons: ToolbarButton[] = [];\n\tprivate readonly hiddenItems = new Set<string>();\n\tprivate readonly layoutConfig: ToolbarLayoutConfig | null;\n\tprivate overflowBehavior: ToolbarOverflowBehaviorType;\n\tprivate focusedIndex = 0;\n\tprivate tooltip: ToolbarTooltip | null = null;\n\tprivate popupController: ToolbarPopupController | null = null;\n\tprivate popupManager: PopupManager | null = null;\n\tprivate overflowController: ToolbarOverflowController | null = null;\n\tprivate visibleElements: HTMLButtonElement[] = [];\n\tprivate locale!: ToolbarLocale;\n\n\tconstructor(layoutConfig?: ToolbarLayoutConfig) {\n\t\tthis.layoutConfig = layoutConfig ?? null;\n\t\tthis.overflowBehavior = layoutConfig?.overflow ?? ToolbarOverflowBehavior.BurgerMenu;\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(TOOLBAR_LOCALES, context);\n\t\tcontext.registerStyleSheet(TOOLBAR_CSS);\n\t\tthis.context = context;\n\n\t\tthis.popupManager = new PopupManager(context.getContainer());\n\t\tcontext.registerService(PopupServiceKey, this.popupManager);\n\n\t\tthis.popupController = new ToolbarPopupController(() => this.getActiveElement());\n\t\tthis.popupController.setPopupManager(this.popupManager);\n\t\tthis.tooltip = new ToolbarTooltip(() => this.popupController?.isOpen() ?? false);\n\n\t\tcontext.registerService(ToolbarServiceKey, {\n\t\t\trefresh: () => this.updateButtonStates(context.getState()),\n\t\t\tclosePopup: () => this.popupController?.close(),\n\t\t});\n\n\t\tthis.createToolbarElement();\n\t}\n\n\t/** Returns the current overflow behavior. */\n\tgetOverflowBehavior(): ToolbarOverflowBehaviorType {\n\t\treturn this.overflowBehavior;\n\t}\n\n\t/** Switches the overflow behavior at runtime. */\n\tsetOverflowBehavior(behavior: ToolbarOverflowBehaviorType): void {\n\t\tif (behavior === this.overflowBehavior) return;\n\n\t\tthis.overflowBehavior = behavior;\n\t\tthis.applyOverflowBehavior();\n\t\tthis.renderItems();\n\t}\n\n\tonReady(): void {\n\t\tthis.renderItems();\n\t}\n\n\tdestroy(): void {\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\t\tthis.popupController?.destroy();\n\t\tthis.popupController = null;\n\t\tthis.popupManager?.destroy();\n\t\tthis.popupManager = null;\n\t\tthis.tooltip?.destroy();\n\t\tthis.tooltip = null;\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\tthis.toolbarElement = null;\n\t\t}\n\t\tthis.buttons = [];\n\t\tthis.visibleElements = [];\n\t\tthis.context = null;\n\t}\n\n\tonStateChange(_oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tthis.updateButtonStates(newState);\n\t}\n\n\tonReadOnlyChange(readonly: boolean): void {\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.hidden = readonly;\n\t\t}\n\t}\n\n\tonConfigure(config: PluginConfig): void {\n\t\tfor (const [key, value] of Object.entries(config)) {\n\t\t\tif (value === false) {\n\t\t\t\tthis.hiddenItems.add(key);\n\t\t\t} else {\n\t\t\t\tthis.hiddenItems.delete(key);\n\t\t\t}\n\t\t}\n\t\tthis.renderItems();\n\t}\n\n\t// --- Toolbar ---\n\n\tprivate createToolbarElement(): void {\n\t\tif (!this.context) return;\n\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\tthis.toolbarElement = document.createElement('div');\n\t\tthis.toolbarElement.setAttribute('role', 'toolbar');\n\t\tthis.toolbarElement.setAttribute('aria-label', this.locale.formattingOptionsAria);\n\t\tthis.toolbarElement.setAttribute('data-notectl-no-print', '');\n\t\tthis.toolbarElement.className = 'notectl-toolbar';\n\n\t\tthis.toolbarElement.addEventListener('keydown', (e) => this.handleToolbarKeydown(e));\n\n\t\tthis.applyOverflowBehavior();\n\t\tcontainer.appendChild(this.toolbarElement);\n\t}\n\n\t/** Applies the current overflow behavior: creates/destroys the overflow controller and sets the data attribute. */\n\tprivate applyOverflowBehavior(): void {\n\t\tif (!this.toolbarElement || !this.context) return;\n\n\t\t// Tear down existing overflow controller\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\n\t\tthis.toolbarElement.setAttribute('data-overflow', this.overflowBehavior);\n\n\t\tif (this.overflowBehavior === ToolbarOverflowBehavior.BurgerMenu) {\n\t\t\tthis.overflowController = new ToolbarOverflowController({\n\t\t\t\ttoolbar: this.toolbarElement,\n\t\t\t\tariaLabel: this.locale.moreToolsAria,\n\t\t\t\tcontext: this.context,\n\t\t\t\tpopupManager: this.popupManager ?? undefined,\n\t\t\t\tonOverflowChange: (visibleButtons, overflowBtn) => {\n\t\t\t\t\tthis.visibleElements = overflowBtn\n\t\t\t\t\t\t? [...visibleButtons, overflowBtn]\n\t\t\t\t\t\t: [...visibleButtons];\n\t\t\t\t\tthis.initRovingTabindex();\n\t\t\t\t},\n\t\t\t\tonItemActivated: (btn: HTMLButtonElement, item: ToolbarItem) => {\n\t\t\t\t\tthis.activateButton(btn, item);\n\t\t\t\t},\n\t\t\t\tgetActiveElement: () => this.getActiveElement(),\n\t\t\t});\n\t\t} else {\n\t\t\t// Flow and None modes: all buttons are visible for roving tabindex\n\t\t\tthis.visibleElements = [];\n\t\t}\n\t}\n\n\tprivate renderItems(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tfor (const btn of this.buttons) {\n\t\t\tbtn.element.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tfor (const sep of this.toolbarElement.querySelectorAll('.notectl-toolbar-separator')) {\n\t\t\tsep.remove();\n\t\t}\n\n\t\tif (this.layoutConfig) {\n\t\t\tthis.renderItemsByLayout();\n\t\t} else {\n\t\t\tthis.renderItemsByPriority();\n\t\t}\n\n\t\tif (this.buttons.length > 0 && !this.toolbarElement.parentElement) {\n\t\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\t\tcontainer.appendChild(this.toolbarElement);\n\t\t}\n\n\t\tthis.overflowController?.update(this.buttons);\n\t\tthis.initRovingTabindex();\n\t\tthis.updateButtonStates(this.context.getState());\n\t}\n\n\t// --- Roving Tabindex ---\n\n\tprivate getTabElements(): HTMLButtonElement[] {\n\t\treturn this.visibleElements.length > 0\n\t\t\t? this.visibleElements\n\t\t\t: this.buttons.map((b) => b.element);\n\t}\n\n\tprivate initRovingTabindex(): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst first: number = findFirstEnabled(elements);\n\t\tthis.focusedIndex = first >= 0 ? first : 0;\n\t\tapplyRovingTabindex(elements, this.focusedIndex);\n\t}\n\n\tprivate setRovingFocus(index: number): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (index < 0 || index >= elements.length) return;\n\t\tthis.focusedIndex = index;\n\t\tapplyRovingTabindex(elements, index);\n\t\telements[index]?.focus();\n\t}\n\n\t/** Returns the active element, respecting shadow DOM boundaries. */\n\tprivate getActiveElement(): Element | null {\n\t\tconst root: Node | undefined = this.toolbarElement?.getRootNode();\n\t\tif (root instanceof ShadowRoot) {\n\t\t\treturn root.activeElement;\n\t\t}\n\t\treturn document.activeElement;\n\t}\n\n\tprivate syncFocusedIndex(): void {\n\t\tconst active: Element | null = this.getActiveElement();\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst idx: number = elements.findIndex((el) => el === active);\n\t\tif (idx >= 0) {\n\t\t\tthis.focusedIndex = idx;\n\t\t}\n\t}\n\n\t// --- Toolbar Keyboard ---\n\n\tprivate handleToolbarKeydown(e: KeyboardEvent): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (elements.length === 0) return;\n\n\t\tthis.syncFocusedIndex();\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowRight': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextEnabled(elements, this.focusedIndex, 1);\n\t\t\t\tthis.setRovingFocus(next);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowLeft': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextEnabled(elements, this.focusedIndex, -1);\n\t\t\t\tthis.setRovingFocus(prev);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Home': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst first: number = findFirstEnabled(elements);\n\t\t\t\tif (first >= 0) this.setRovingFocus(first);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'End': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst last: number = findLastEnabled(elements);\n\t\t\t\tif (last >= 0) this.setRovingFocus(last);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLButtonElement | undefined = elements[this.focusedIndex];\n\t\t\t\tconst btn: ToolbarButton | undefined = this.buttons.find((b) => b.element === focused);\n\t\t\t\tif (btn) this.activateButton(btn.element, btn.item);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Activates a toolbar button (shared between mouse click and keyboard). */\n\tprivate activateButton(btn: HTMLButtonElement, item: ToolbarItem): void {\n\t\tthis.tooltip?.hide();\n\t\tif (item.popupType && this.context) {\n\t\t\tthis.popupController?.toggle(btn, item, this.context);\n\t\t} else {\n\t\t\tthis.context?.executeCommand(item.command);\n\t\t}\n\t}\n\n\t// --- Layout Rendering ---\n\n\tprivate renderItemsByLayout(): void {\n\t\tif (!this.context || !this.toolbarElement || !this.layoutConfig) return;\n\n\t\tconst toolbarReg = this.context.getToolbarRegistry();\n\t\tlet firstGroup = true;\n\n\t\tfor (const groupPluginIds of this.layoutConfig.groups) {\n\t\t\tconst groupItems: ToolbarItem[] = [];\n\t\t\tfor (const pId of groupPluginIds) {\n\t\t\t\tconst items: ToolbarItem[] = toolbarReg\n\t\t\t\t\t.getToolbarItemsByPlugin(pId)\n\t\t\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\t\t\titems.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));\n\t\t\t\tgroupItems.push(...items);\n\t\t\t}\n\n\t\t\tif (groupItems.length === 0) continue;\n\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\n\t\tif (this.buttons.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t}\n\n\tprivate renderItemsByPriority(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tconst toolbarRegistry = this.context.getToolbarRegistry();\n\t\tconst items: ToolbarItem[] = toolbarRegistry\n\t\t\t.getToolbarItems()\n\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\tif (items.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\treturn;\n\t\t}\n\n\t\tconst sorted: ToolbarItem[] = [...items].sort(\n\t\t\t(a, b) => (a.priority ?? 100) - (b.priority ?? 100),\n\t\t);\n\n\t\tconst hasSeparatorAfter: boolean = sorted.some((item) => item.separatorAfter);\n\n\t\tif (hasSeparatorAfter) {\n\t\t\tfor (let i = 0; i < sorted.length; i++) {\n\t\t\t\tconst item: ToolbarItem | undefined = sorted[i];\n\t\t\t\tif (!item) continue;\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\n\t\t\t\tif (item.separatorAfter && i < sorted.length - 1) {\n\t\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst groups = new Map<string, ToolbarItem[]>();\n\t\t\tfor (const item of sorted) {\n\t\t\t\tconst list: ToolbarItem[] = groups.get(item.group) ?? [];\n\t\t\t\tlist.push(item);\n\t\t\t\tgroups.set(item.group, list);\n\t\t\t}\n\n\t\t\tlet firstGroup = true;\n\t\t\tfor (const [, groupItems] of groups) {\n\t\t\t\tif (!firstGroup) {\n\t\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t\t}\n\t\t\t\tfirstGroup = false;\n\n\t\t\t\tfor (const item of groupItems) {\n\t\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\t\tthis.buttons.push(btn);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Button Creation ---\n\n\tprivate createButton(item: ToolbarItem): ToolbarButton {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = `notectl-toolbar-btn notectl-toolbar-btn--${item.id}`;\n\t\tbtn.setAttribute('aria-pressed', 'false');\n\t\tbtn.setAttribute('aria-label', item.label);\n\t\tbtn.setAttribute('data-toolbar-item', item.id);\n\t\tbtn.setAttribute('data-tooltip', item.tooltip ?? item.label);\n\n\t\tlet comboLabelEl: HTMLSpanElement | null = null;\n\n\t\tif (item.popupType === 'combobox') {\n\t\t\tbtn.setAttribute('role', 'combobox');\n\t\t\tbtn.setAttribute('aria-haspopup', 'listbox');\n\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-toolbar-combobox__label';\n\t\t\tconst state: EditorState | undefined = this.context?.getState();\n\t\t\tif (state) {\n\t\t\t\tlabelSpan.textContent = item.getLabel(state);\n\t\t\t}\n\t\t\tbtn.appendChild(labelSpan);\n\t\t\tcomboLabelEl = labelSpan;\n\n\t\t\tconst arrowSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tarrowSpan.className = 'notectl-toolbar-combobox__arrow';\n\t\t\tarrowSpan.setAttribute('aria-hidden', 'true');\n\t\t\tarrowSpan.textContent = '\\u25BE';\n\t\t\tbtn.appendChild(arrowSpan);\n\t\t} else {\n\t\t\tif (item.popupType) {\n\t\t\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\t\t}\n\n\t\t\tconst span: HTMLSpanElement = document.createElement('span');\n\t\t\tspan.className = 'notectl-toolbar-btn__icon';\n\t\t\tspan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(span);\n\t\t}\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.activateButton(btn, item);\n\t\t});\n\n\t\tbtn.addEventListener('mouseenter', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('mouseleave', () => this.tooltip?.hide());\n\t\tbtn.addEventListener('focus', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('blur', () => this.tooltip?.hide());\n\n\t\treturn { element: btn, item, comboLabelEl };\n\t}\n\n\t// --- Button State Updates ---\n\n\tprivate updateButtonStates(state: EditorState): void {\n\t\tfor (const btn of this.buttons) {\n\t\t\tconst active: boolean = btn.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = btn.item.isEnabled?.(state) ?? true;\n\t\t\tbtn.element.setAttribute('aria-pressed', String(active));\n\t\t\tbtn.element.classList.toggle('notectl-toolbar-btn--active', active);\n\t\t\tbtn.element.disabled = !enabled;\n\t\t\tif (!enabled) {\n\t\t\t\tbtn.element.setAttribute('aria-disabled', 'true');\n\t\t\t} else {\n\t\t\t\tbtn.element.removeAttribute('aria-disabled');\n\t\t\t}\n\t\t\tif (btn.comboLabelEl && btn.item.popupType === 'combobox') {\n\t\t\t\tbtn.comboLabelEl.textContent = btn.item.getLabel(state);\n\t\t\t}\n\t\t}\n\t\tthis.overflowController?.updateItemStates(state);\n\t}\n}\n"],"names":["PopupServiceKey","ServiceKey","PopupManager","stack","referenceNode","this","config","popup","document","createElement","className","ariaRole","setAttribute","ariaLabel","handle","close","options","closeEntry","entry","getElement","content","refNode","appendToRoot","anchorRect","anchor","HTMLElement","getBoundingClientRect","positionPopup","position","parentEntry","parent","findEntryByHandle","clickOutsideHandler","e","path","composedPath","includes","stackEntry","element","push","setTimeout","addEventListener","focusFirstItem","top","length","closeAll","isOpen","destroy","index","indexOf","child","removeEntry","restoreFocusTo","focus","onClose","splice","remove","removeEventListener","find","requestAnimationFrame","firstFocusable","querySelector","TOOLBAR_LOCALE_EN","formattingOptionsAria","moreToolsAria","TOOLBAR_LOCALES","en","de","es","fr","zh","ru","ar","hi","ToolbarOverflowBehavior","BurgerMenu","Flow","None","HIDDEN_BTN_CLASS","HIDDEN_SEP_CLASS","ToolbarOverflowController","toolbar","context","onOverflowChange","onItemActivated","getActiveElement","popupManager","entries","overflowButton","overflowDropdown","overflowHandle","overflowEntries","resizeObserver","closeHandler","ResizeObserver","recalculate","observe","buttons","map","b","item","closeDropdown","resetVisibility","ensureOverflowButton","setOverflowButtonVisible","availableWidth","measureAvailableWidth","children","Array","from","childWidths","measureChildWidths","maxWidth","usedWidth","overflowing","overflowList","classList","contains","add","sepWidth","get","oe","btnWidth","hideTrailingSeparators","notifyChange","state","menuItems","querySelectorAll","menuItem","itemId","getAttribute","id","active","isActive","enabled","isEnabled","toggle","disabled","popupType","labelEl","textContent","getLabel","disconnect","widths","Map","set","offsetWidth","toolbarStyle","getComputedStyle","paddingLeft","Number","parseFloat","paddingRight","clientWidth","separators","sep","visible","removeAttribute","btn","type","innerHTML","preventDefault","toggleDropdown","appendChild","openDropdown","dropdown","renderDropdownItems","getState","open","handleDropdownKeydown","positionDropdown","first","registerCloseHandler","lastGroup","group","menuBtn","iconSpan","icon","labelSpan","tooltip","label","ev","stopPropagation","activateOverflowItem","rect","rightEdge","window","innerWidth","right","setStyleProperties","bottom","left","zIndex","executeCommand","command","key","items","current","next","findNextDropdownItem","prev","focusedItem","i","filter","highlightCells","grid","targetRow","targetCol","cells","cell","r","c","createSeparator","ToolbarPopupController","activePopup","activePopupButton","activeHandle","manager","button","openViaManager","clearButtonState","triggerBtn","renderPopupContent","handlePopupKeydown","container","display","gridTemplateColumns","maxCols","gap","padding","textAlign","fontSize","maxRows","width","height","border","cursor","String","onSelect","popupConfig","cmd","renderPopup","closeAndRestoreFocus","handleGridKeydown","handleCustomPopupKeydown","itemArr","focused","click","row","col","lastCell","newRow","newCol","navigateGrid","target","currentIdx","dispatchEvent","MouseEvent","bubbles","cancelable","ToolbarTooltip","timer","isPopupActive","static","TOOLTIP_ID","setStyleProperty","hide","text","root","getRootNode","ShadowRoot","parentNode","body","transform","clearTimeout","ToolbarServiceKey","ToolbarPlugin","name","priority","toolbarElement","hiddenItems","Set","layoutConfig","overflowBehavior","focusedIndex","popupController","overflowController","visibleElements","locale","overflow","resolvePluginLocale","registerStyleSheet","getContainer","registerService","setPopupManager","refresh","updateButtonStates","closePopup","createToolbarElement","getOverflowBehavior","behavior","applyOverflowBehavior","renderItems","onReady","_oldState","newState","_tr","readonly","hidden","value","Object","delete","getPluginContainer","handleToolbarKeydown","visibleButtons","overflowBtn","initRovingTabindex","activateButton","renderItemsByLayout","renderItemsByPriority","parentElement","update","elements","getTabElements","findFirstEnabled","applyRovingTabindex","activeElement","syncFocusedIndex","idx","findIndex","el","findNextEnabled","setRovingFocus","last","findLastEnabled","toolbarReg","getToolbarRegistry","firstGroup","groupPluginIds","groups","groupItems","pId","getToolbarItemsByPlugin","has","sort","a","createButton","getToolbarItems","sorted","some","separatorAfter","list","comboLabelEl","arrowSpan","span","show","updateItemStates"],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- import { r as e } from "./resolvePluginLocale-B4w1OkPy.mjs";
2
- import { c as t } from "./NodeSpec-NZVvcCuH.mjs";
3
- import { i as n, a as i, b as o, d as a } from "./Selection-BRTab5hO.mjs";
4
- import { s as r } from "./StyleRuntime-CP4NCwKT.mjs";
5
- import { c, a as l, i as s, m as g, u as d } from "./Document-Brtw2jL1.mjs";
6
- import { n as h } from "./TypeBrands-C09nE2qO.mjs";
7
- function p(e2, t2, n2, i2) {
8
- const o2 = document.createElement("button");
9
- o2.type = "button", o2.className = "notectl-heading-picker__item", o2.setAttribute("role", "option"), o2.setAttribute("aria-selected", String(t2)), t2 && o2.classList.add("notectl-heading-picker__item--active");
10
- const a2 = document.createElement("span");
11
- a2.className = "notectl-heading-picker__check", a2.textContent = t2 ? "✓" : "", o2.appendChild(a2);
12
- const c2 = document.createElement("span");
13
- return c2.className = "notectl-heading-picker__label", c2.textContent = e2, i2 && r(c2, { fontSize: i2.fontSize, fontWeight: i2.fontWeight }), o2.appendChild(c2), o2.addEventListener("mousedown", n2), o2;
14
- }
15
- function u(e2, t2) {
16
- return e2[`heading${t2}`];
17
- }
18
- function b(e2, t2) {
19
- const o2 = e2.getState();
20
- if (n(o2.selection) || i(o2.selection)) return false;
21
- const a2 = o2.getBlock(o2.selection.anchor.blockId);
22
- return !!a2 && (a2.type === t2 ? f(e2, h("paragraph")) : f(e2, h(t2)));
23
- }
24
- function k(e2, t2) {
25
- const o2 = e2.getState(), a2 = o2.selection;
26
- if (n(a2) || i(a2)) return false;
27
- const r2 = o2.getBlock(a2.anchor.blockId);
28
- return !!r2 && ("heading" === r2.type && r2.attrs?.level === t2 ? f(e2, h("paragraph")) : f(e2, h("heading"), { level: t2 }));
29
- }
30
- function f(e2, t2, o2) {
31
- const a2 = e2.getState(), r2 = a2.selection;
32
- if (n(r2) || i(r2)) return false;
33
- const g2 = a2.getBlock(r2.anchor.blockId);
34
- if (!g2) return false;
35
- const d2 = a2.transaction("command"), h2 = e2.getSchemaRegistry().getNodeSpec(t2);
36
- h2?.excludeMarks && h2.excludeMarks.length > 0 && ((function(e3, t3, n2) {
37
- if (0 === c(t3)) return;
38
- const i2 = new Set(n2), o3 = l(t3);
39
- let a3 = 0;
40
- for (const n3 of o3) if (s(n3)) {
41
- if (n3.text.length > 0) for (const o4 of n3.marks) i2.has(o4.type) && e3.removeMark(t3.id, a3, a3 + n3.text.length, o4);
42
- a3 += n3.text.length;
43
- } else a3 += 1;
44
- })(d2, g2, h2.excludeMarks), (function(e3, t3, n2) {
45
- if (!t3.storedMarks) return;
46
- const i2 = new Set(n2), o3 = t3.storedMarks.filter((e4) => !i2.has(e4.type));
47
- o3.length !== t3.storedMarks.length && e3.setStoredMarks(o3.length > 0 ? o3 : null, t3.storedMarks);
48
- })(d2, a2, h2.excludeMarks));
49
- const p2 = d2.setBlockType(r2.anchor.blockId, t2, o2).setSelection(r2).build();
50
- return e2.dispatch(p2), true;
51
- }
52
- const m = /* @__PURE__ */ new Set(["heading", "title", "subtitle"]);
53
- const y = { paragraph: "Paragraph", title: "Title", subtitle: "Subtitle", heading1: "Heading 1", heading2: "Heading 2", heading3: "Heading 3", heading4: "Heading 4", heading5: "Heading 5", heading6: "Heading 6", blockTypeLabel: "Block Type", blockTypesAria: "Block types" }, T = { en: y, de: { paragraph: "Absatz", title: "Titel", subtitle: "Untertitel", heading1: "Überschrift 1", heading2: "Überschrift 2", heading3: "Überschrift 3", heading4: "Überschrift 4", heading5: "Überschrift 5", heading6: "Überschrift 6", blockTypeLabel: "Blocktyp", blockTypesAria: "Blocktypen" }, es: { paragraph: "Párrafo", title: "Título", subtitle: "Subtítulo", heading1: "Encabezado 1", heading2: "Encabezado 2", heading3: "Encabezado 3", heading4: "Encabezado 4", heading5: "Encabezado 5", heading6: "Encabezado 6", blockTypeLabel: "Tipo de bloque", blockTypesAria: "Tipos de bloque" }, fr: { paragraph: "Paragraphe", title: "Titre", subtitle: "Sous-titre", heading1: "Titre 1", heading2: "Titre 2", heading3: "Titre 3", heading4: "Titre 4", heading5: "Titre 5", heading6: "Titre 6", blockTypeLabel: "Type de bloc", blockTypesAria: "Types de bloc" }, zh: { paragraph: "正文", title: "标题", subtitle: "副标题", heading1: "一级标题", heading2: "二级标题", heading3: "三级标题", heading4: "四级标题", heading5: "五级标题", heading6: "六级标题", blockTypeLabel: "块类型", blockTypesAria: "块类型列表" }, ru: { paragraph: "Абзац", title: "Заголовок", subtitle: "Подзаголовок", heading1: "Заголовок 1", heading2: "Заголовок 2", heading3: "Заголовок 3", heading4: "Заголовок 4", heading5: "Заголовок 5", heading6: "Заголовок 6", blockTypeLabel: "Тип блока", blockTypesAria: "Типы блоков" }, ar: { paragraph: "فقرة", title: "عنوان", subtitle: "عنوان فرعي", heading1: "عنوان 1", heading2: "عنوان 2", heading3: "عنوان 3", heading4: "عنوان 4", heading5: "عنوان 5", heading6: "عنوان 6", blockTypeLabel: "نوع الكتلة", blockTypesAria: "أنواع الكتل" }, hi: { paragraph: "अनुच्छेद", title: "शीर्षक", subtitle: "उपशीर्षक", heading1: "शीर्षक 1", heading2: "शीर्षक 2", heading3: "शीर्षक 3", heading4: "शीर्षक 4", heading5: "शीर्षक 5", heading6: "शीर्षक 6", blockTypeLabel: "ब्लॉक प्रकार", blockTypesAria: "ब्लॉक प्रकार सूची" } }, v = { levels: [1, 2, 3, 4, 5, 6] }, x = { 1: "h1", 2: "h2", 3: "h3", 4: "h4", 5: "h5", 6: "h6" };
54
- class S {
55
- id = "heading";
56
- name = "Heading";
57
- priority = 30;
58
- config;
59
- locale;
60
- constructor(e2) {
61
- this.config = { ...v, ...e2 };
62
- }
63
- init(t2) {
64
- this.locale = e(T, t2, this.config.locale), t2.registerStyleSheet("\n/* Heading Select — Width overrides for combobox button */\n.notectl-toolbar-btn--heading {\n min-width: 100px;\n max-width: 160px;\n}\n\n/* Heading Picker Popup */\n.notectl-heading-picker {\n min-width: 200px;\n max-height: 320px;\n overflow-y: auto;\n}\n\n.notectl-heading-picker__list {\n padding: 4px 0;\n}\n\n.notectl-heading-picker__item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 14px;\n color: var(--notectl-fg);\n text-align: left;\n white-space: nowrap;\n font-family: inherit;\n transition: background 0.1s;\n}\n\n@media (hover: hover) {\n .notectl-heading-picker__item:hover {\n background: var(--notectl-hover-bg);\n }\n}\n\n.notectl-heading-picker__item--active {\n background: var(--notectl-active-bg);\n color: var(--notectl-primary-fg);\n}\n\n@media (hover: hover) {\n .notectl-heading-picker__item--active:hover {\n background: var(--notectl-active-bg);\n }\n}\n\n.notectl-heading-picker__check {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n flex-shrink: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--notectl-primary-fg);\n}\n\n.notectl-heading-picker__label {\n flex: 1;\n}\n"), this.registerNodeSpecs(t2), (function(e2, t3) {
65
- e2.registerCommand("setTitle", () => b(e2, "title")), e2.registerCommand("setSubtitle", () => b(e2, "subtitle"));
66
- for (const n2 of t3.levels) e2.registerCommand(`setHeading${n2}`, () => k(e2, n2));
67
- e2.registerCommand("toggleHeading", () => k(e2, 1)), e2.registerCommand("setParagraph", () => f(e2, h("paragraph")));
68
- })(t2, this.config), (function(e2, t3) {
69
- const r2 = { Enter: () => (function(e3) {
70
- return (function(e4, t4) {
71
- const a2 = e4.getState();
72
- if (n(a2.selection) || i(a2.selection)) return false;
73
- const r3 = a2.selection;
74
- if (!o(r3)) return false;
75
- const c2 = a2.getBlock(r3.anchor.blockId);
76
- return !(!c2 || !m.has(c2.type)) && t4({ state: a2, block: c2, blockId: r3.anchor.blockId, offset: r3.anchor.offset });
77
- })(e3, (t4) => {
78
- if ("" === g(t4.block)) {
79
- const n3 = t4.state.transaction("input").setBlockType(t4.blockId, h("paragraph")).setSelection(t4.state.selection).build();
80
- return e3.dispatch(n3), true;
81
- }
82
- const n2 = c(t4.block);
83
- if (t4.offset >= n2) {
84
- const n3 = d(), i2 = t4.state.transaction("input").splitBlock(t4.blockId, t4.offset, n3).setBlockType(n3, h("paragraph")).setSelection(a(n3, 0)).build();
85
- return e3.dispatch(i2), true;
86
- }
87
- return false;
88
- });
89
- })(e2) };
90
- for (const n2 of t3.levels) n2 <= 6 && (r2[`Mod-Shift-${n2}`] = () => e2.executeCommand(`setHeading${n2}`));
91
- e2.registerKeymap(r2);
92
- })(t2, this.config), (function(e2, t3) {
93
- for (const r2 of t3.levels) {
94
- const t4 = "#".repeat(r2), c2 = new RegExp(`^${t4} $`);
95
- e2.registerInputRule({ pattern: c2, handler(e3, t5, c3, l2) {
96
- const s2 = e3.selection;
97
- if (n(s2) || i(s2)) return null;
98
- if (!o(s2)) return null;
99
- const g2 = e3.getBlock(s2.anchor.blockId);
100
- return g2 && "paragraph" === g2.type ? e3.transaction("input").deleteTextAt(s2.anchor.blockId, c3, c3 + r2 + 1).setBlockType(s2.anchor.blockId, h("heading"), { level: r2 }).setSelection(a(s2.anchor.blockId, 0)).build() : null;
101
- } });
102
- }
103
- })(t2, this.config), (function(e2, t3, o2) {
104
- e2.registerBlockTypePickerEntry({ id: "paragraph", label: o2.paragraph, command: "setParagraph", priority: 10, isActive: (e3) => {
105
- if (n(e3.selection) || i(e3.selection)) return false;
106
- const t4 = e3.getBlock(e3.selection.anchor.blockId);
107
- return "paragraph" === t4?.type;
108
- } }), e2.registerBlockTypePickerEntry({ id: "title", label: o2.title, command: "setTitle", priority: 20, style: { fontSize: "1.6em", fontWeight: "700" }, isActive: (e3) => {
109
- if (n(e3.selection) || i(e3.selection)) return false;
110
- const t4 = e3.getBlock(e3.selection.anchor.blockId);
111
- return "title" === t4?.type;
112
- } }), e2.registerBlockTypePickerEntry({ id: "subtitle", label: o2.subtitle, command: "setSubtitle", priority: 30, style: { fontSize: "1.3em", fontWeight: "500" }, isActive: (e3) => {
113
- if (n(e3.selection) || i(e3.selection)) return false;
114
- const t4 = e3.getBlock(e3.selection.anchor.blockId);
115
- return "subtitle" === t4?.type;
116
- } });
117
- for (const a2 of t3.levels) e2.registerBlockTypePickerEntry({ id: `heading-${a2}`, label: u(o2, a2), command: `setHeading${a2}`, priority: 100 + a2, style: { fontSize: 1.4 - 0.1 * a2 + "em", fontWeight: "600" }, isActive: (e3) => {
118
- if (n(e3.selection) || i(e3.selection)) return false;
119
- const t4 = e3.getBlock(e3.selection.anchor.blockId);
120
- return "heading" === t4?.type && t4.attrs?.level === a2;
121
- } });
122
- })(t2, this.config, this.locale), (function(e2, t3, o2) {
123
- e2.registerToolbarItem({ id: "heading", group: "block", label: o2.blockTypeLabel, tooltip: o2.blockTypeLabel, command: "setParagraph", priority: 50, popupType: "combobox", separatorAfter: t3.separatorAfter, getLabel: (t4) => (function(e3, t5, o3) {
124
- if (n(e3.selection) || i(e3.selection)) return o3.paragraph;
125
- const a2 = t5.getBlockTypePickerRegistry().getBlockTypePickerEntries();
126
- for (const t6 of a2) if (t6.isActive(e3)) return t6.label;
127
- return o3.paragraph;
128
- })(t4, e2, o2), renderPopup: (e3, t4, a2) => {
129
- !(function(e4, t5, o3, a3) {
130
- e4.classList.add("notectl-heading-picker");
131
- const r2 = t5.getState();
132
- if (n(r2.selection) || i(r2.selection)) return;
133
- const c2 = t5.getContainer(), l2 = document.createElement("div");
134
- l2.className = "notectl-heading-picker__list", l2.setAttribute("role", "listbox"), l2.setAttribute("aria-label", o3.blockTypesAria);
135
- const s2 = t5.getBlockTypePickerRegistry().getBlockTypePickerEntries();
136
- for (const e5 of s2) {
137
- const n2 = e5.isActive(r2);
138
- l2.appendChild(p(e5.label, n2, (n3) => {
139
- n3.preventDefault(), n3.stopPropagation(), t5.executeCommand(e5.command), a3({ restoreFocusTo: c2 });
140
- }, e5.style));
141
- }
142
- e4.appendChild(l2);
143
- })(e3, t4, o2, a2);
144
- }, isActive: (t4) => e2.getBlockTypePickerRegistry().getBlockTypePickerEntries().some((e3) => "paragraph" !== e3.id && e3.isActive(t4)) });
145
- })(t2, this.config, this.locale);
146
- }
147
- registerNodeSpecs(e2) {
148
- e2.registerNodeSpec({ type: "title", group: "block", content: { allow: ["text"] }, excludeMarks: ["fontSize"], toDOM(e3) {
149
- const n2 = t("h1", e3.id);
150
- return n2.classList.add("notectl-title"), n2;
151
- }, toHTML: (e3, t2) => `<h1>${t2 || "<br>"}</h1>`, sanitize: { tags: ["h1"] } }), e2.registerNodeSpec({ type: "subtitle", group: "block", content: { allow: ["text"] }, excludeMarks: ["fontSize"], toDOM(e3) {
152
- const n2 = t("h2", e3.id);
153
- return n2.classList.add("notectl-subtitle"), n2;
154
- }, toHTML: (e3, t2) => `<h2>${t2 || "<br>"}</h2>`, sanitize: { tags: ["h2"] } }), e2.registerNodeSpec({ type: "heading", group: "block", content: { allow: ["text"] }, excludeMarks: ["fontSize"], attrs: { level: { default: 1 } }, toDOM(e3) {
155
- const n2 = e3.attrs?.level ?? 1;
156
- return t(x[n2] ?? "h1", e3.id);
157
- }, toHTML(e3, t2) {
158
- const n2 = e3.attrs?.level ?? 1, i2 = x[n2] ?? "h1";
159
- return `<${i2}>${t2 || "<br>"}</${i2}>`;
160
- }, parseHTML: [{ tag: "h1", getAttrs: () => ({ level: 1 }) }, { tag: "h2", getAttrs: () => ({ level: 2 }) }, { tag: "h3", getAttrs: () => ({ level: 3 }) }, { tag: "h4", getAttrs: () => ({ level: 4 }) }, { tag: "h5", getAttrs: () => ({ level: 5 }) }, { tag: "h6", getAttrs: () => ({ level: 6 }) }], sanitize: { tags: ["h1", "h2", "h3", "h4", "h5", "h6"] } });
161
- }
162
- }
163
- export {
164
- S as H,
165
- T as a,
166
- y as b
167
- };
168
- //# sourceMappingURL=index-BjFBWBOC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BjFBWBOC.mjs","sources":["../../src/plugins/heading/HeadingBlockTypePicker.ts","../../src/plugins/heading/HeadingCommands.ts","../../src/plugins/heading/HeadingKeyboardHandlers.ts","../../src/plugins/heading/HeadingLocale.ts","../../src/plugins/heading/HeadingPlugin.ts","../../src/editor/styles/heading-select.ts","../../src/plugins/heading/HeadingInputRules.ts"],"sourcesContent":["/**\n * Block type picker entries and toolbar dropdown for heading block types.\n * Registers picker entries for paragraph, title, subtitle, and all heading levels,\n * plus a combobox-style toolbar item with a custom popup.\n */\n\nimport { isGapCursor, isNodeSelection } from '../../model/Selection.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { PopupCloseOptions } from '../shared/PopupManager.js';\nimport type { PickerEntryStyle } from './BlockTypePickerEntry.js';\nimport type { HeadingLocale } from './HeadingLocale.js';\nimport type { HeadingConfig } from './HeadingPlugin.js';\nimport type { HeadingLevel } from './HeadingPlugin.js';\n\n// --- Picker Entry Registration ---\n\n/** Registers block type picker entries for paragraph, title, subtitle, and heading levels. */\nexport function registerHeadingPickerEntries(\n\tcontext: PluginContext,\n\tconfig: HeadingConfig,\n\tlocale: HeadingLocale,\n): void {\n\tcontext.registerBlockTypePickerEntry({\n\t\tid: 'paragraph',\n\t\tlabel: locale.paragraph,\n\t\tcommand: 'setParagraph',\n\t\tpriority: 10,\n\t\tisActive: (state) => {\n\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\treturn block?.type === 'paragraph';\n\t\t},\n\t});\n\n\tcontext.registerBlockTypePickerEntry({\n\t\tid: 'title',\n\t\tlabel: locale.title,\n\t\tcommand: 'setTitle',\n\t\tpriority: 20,\n\t\tstyle: { fontSize: '1.6em', fontWeight: '700' },\n\t\tisActive: (state) => {\n\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\treturn block?.type === 'title';\n\t\t},\n\t});\n\n\tcontext.registerBlockTypePickerEntry({\n\t\tid: 'subtitle',\n\t\tlabel: locale.subtitle,\n\t\tcommand: 'setSubtitle',\n\t\tpriority: 30,\n\t\tstyle: { fontSize: '1.3em', fontWeight: '500' },\n\t\tisActive: (state) => {\n\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\treturn block?.type === 'subtitle';\n\t\t},\n\t});\n\n\tfor (const level of config.levels) {\n\t\tcontext.registerBlockTypePickerEntry({\n\t\t\tid: `heading-${level}`,\n\t\t\tlabel: getHeadingLabel(locale, level),\n\t\t\tcommand: `setHeading${level}`,\n\t\t\tpriority: 100 + level,\n\t\t\tstyle: { fontSize: `${1.4 - level * 0.1}em`, fontWeight: '600' },\n\t\t\tisActive: (state) => {\n\t\t\t\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\t\t\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\t\t\treturn block?.type === 'heading' && block.attrs?.level === level;\n\t\t\t},\n\t\t});\n\t}\n}\n\n// --- Toolbar Item ---\n\n/** Registers the heading toolbar dropdown with a combobox picker popup. */\nexport function registerHeadingToolbarItem(\n\tcontext: PluginContext,\n\tconfig: HeadingConfig,\n\tlocale: HeadingLocale,\n): void {\n\tcontext.registerToolbarItem({\n\t\tid: 'heading',\n\t\tgroup: 'block',\n\t\tlabel: locale.blockTypeLabel,\n\t\ttooltip: locale.blockTypeLabel,\n\t\tcommand: 'setParagraph',\n\t\tpriority: 50,\n\t\tpopupType: 'combobox',\n\t\tseparatorAfter: config.separatorAfter,\n\t\tgetLabel: (state: EditorState): string => getActiveLabel(state, context, locale),\n\t\trenderPopup: (container, ctx, onClose) => {\n\t\t\trenderHeadingPopup(container, ctx, locale, onClose);\n\t\t},\n\t\tisActive: (state) => {\n\t\t\tconst entries = context.getBlockTypePickerRegistry().getBlockTypePickerEntries();\n\t\t\treturn entries.some((entry) => entry.id !== 'paragraph' && entry.isActive(state));\n\t\t},\n\t});\n}\n\n// --- Popup Rendering ---\n\nfunction renderHeadingPopup(\n\tcontainer: HTMLElement,\n\tcontext: PluginContext,\n\tlocale: HeadingLocale,\n\tonClose: (options?: PopupCloseOptions) => void,\n): void {\n\tcontainer.classList.add('notectl-heading-picker');\n\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return;\n\n\tconst contentElement: HTMLElement = context.getContainer();\n\n\tconst list: HTMLDivElement = document.createElement('div');\n\tlist.className = 'notectl-heading-picker__list';\n\tlist.setAttribute('role', 'listbox');\n\tlist.setAttribute('aria-label', locale.blockTypesAria);\n\n\tconst entries = context.getBlockTypePickerRegistry().getBlockTypePickerEntries();\n\tfor (const entry of entries) {\n\t\tconst active: boolean = entry.isActive(state);\n\t\tlist.appendChild(\n\t\t\tcreatePickerItem(\n\t\t\t\tentry.label,\n\t\t\t\tactive,\n\t\t\t\t(e: MouseEvent) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tcontext.executeCommand(entry.command);\n\t\t\t\t\tonClose({ restoreFocusTo: contentElement });\n\t\t\t\t},\n\t\t\t\tentry.style,\n\t\t\t),\n\t\t);\n\t}\n\n\tcontainer.appendChild(list);\n}\n\nfunction createPickerItem(\n\tlabel: string,\n\tisActive: boolean,\n\thandler: (e: MouseEvent) => void,\n\tstyle?: PickerEntryStyle,\n): HTMLButtonElement {\n\tconst item: HTMLButtonElement = document.createElement('button');\n\titem.type = 'button';\n\titem.className = 'notectl-heading-picker__item';\n\titem.setAttribute('role', 'option');\n\titem.setAttribute('aria-selected', String(isActive));\n\n\tif (isActive) {\n\t\titem.classList.add('notectl-heading-picker__item--active');\n\t}\n\n\tconst check: HTMLSpanElement = document.createElement('span');\n\tcheck.className = 'notectl-heading-picker__check';\n\tcheck.textContent = isActive ? '\\u2713' : '';\n\titem.appendChild(check);\n\n\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\tlabelSpan.className = 'notectl-heading-picker__label';\n\tlabelSpan.textContent = label;\n\tif (style) {\n\t\tsetStyleProperties(labelSpan, {\n\t\t\tfontSize: style.fontSize,\n\t\t\tfontWeight: style.fontWeight,\n\t\t});\n\t}\n\titem.appendChild(labelSpan);\n\n\titem.addEventListener('mousedown', handler);\n\treturn item;\n}\n\n// --- Helpers ---\n\nfunction getHeadingLabel(locale: HeadingLocale, level: HeadingLevel): string {\n\tconst key = `heading${level}` as keyof HeadingLocale;\n\treturn locale[key] as string;\n}\n\nfunction getActiveLabel(state: EditorState, context: PluginContext, locale: HeadingLocale): string {\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return locale.paragraph;\n\tconst entries = context.getBlockTypePickerRegistry().getBlockTypePickerEntries();\n\tfor (const entry of entries) {\n\t\tif (entry.isActive(state)) return entry.label;\n\t}\n\treturn locale.paragraph;\n}\n","/**\n * Command registration and implementations for heading block types.\n * Handles toggle between heading/title/subtitle and paragraph,\n * plus excluded-mark stripping when switching block types.\n */\n\nimport type { BlockNode, Mark } from '../../model/Document.js';\nimport { getBlockLength, getInlineChildren, isTextNode } from '../../model/Document.js';\nimport { isGapCursor, isNodeSelection } from '../../model/Selection.js';\nimport { type NodeTypeName, nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { TransactionBuilder } from '../../state/Transaction.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { HeadingConfig, HeadingLevel } from './HeadingPlugin.js';\n\n/** Registers all heading commands (setTitle, setSubtitle, setHeadingN, toggleHeading, setParagraph). */\nexport function registerHeadingCommands(context: PluginContext, config: HeadingConfig): void {\n\tcontext.registerCommand('setTitle', () => toggleSpecialBlock(context, 'title'));\n\n\tcontext.registerCommand('setSubtitle', () => toggleSpecialBlock(context, 'subtitle'));\n\n\tfor (const level of config.levels) {\n\t\tcontext.registerCommand(`setHeading${level}`, () => toggleHeading(context, level));\n\t}\n\n\tcontext.registerCommand('toggleHeading', () => toggleHeading(context, 1));\n\n\tcontext.registerCommand('setParagraph', () => setBlockType(context, nodeType('paragraph')));\n}\n\n// --- Command Implementations ---\n\n/**\n * Toggles between a special block type (title/subtitle) and paragraph.\n * If the block is already that type, resets to paragraph.\n */\nfunction toggleSpecialBlock(context: PluginContext, type: string): boolean {\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(state.selection.anchor.blockId);\n\tif (!block) return false;\n\n\tif (block.type === type) {\n\t\treturn setBlockType(context, nodeType('paragraph'));\n\t}\n\n\treturn setBlockType(context, nodeType(type) as NodeTypeName);\n}\n\n/**\n * Toggles between heading (at given level) and paragraph.\n * If the block is already a heading at the same level, resets to paragraph.\n */\nfunction toggleHeading(context: PluginContext, level: HeadingLevel): boolean {\n\tconst state: EditorState = context.getState();\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block) return false;\n\n\tif (block.type === 'heading' && block.attrs?.level === level) {\n\t\treturn setBlockType(context, nodeType('paragraph'));\n\t}\n\n\treturn setBlockType(context, nodeType('heading'), { level });\n}\n\nfunction setBlockType(\n\tcontext: PluginContext,\n\ttype: NodeTypeName,\n\tattrs?: Record<string, string | number | boolean>,\n): boolean {\n\tconst state: EditorState = context.getState();\n\tconst sel = state.selection;\n\tif (isNodeSelection(sel) || isGapCursor(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block) return false;\n\n\tconst builder: TransactionBuilder = state.transaction('command');\n\n\tconst spec = context.getSchemaRegistry().getNodeSpec(type);\n\tif (spec?.excludeMarks && spec.excludeMarks.length > 0) {\n\t\tstripExcludedMarks(builder, block, spec.excludeMarks);\n\t\tclearExcludedStoredMarks(builder, state, spec.excludeMarks);\n\t}\n\n\tconst tr = builder.setBlockType(sel.anchor.blockId, type, attrs).setSelection(sel).build();\n\tcontext.dispatch(tr);\n\treturn true;\n}\n\n// --- Mark Stripping Helpers ---\n\n/**\n * Adds removeMark steps for each excluded mark type found\n * on the block's inline text content.\n */\nfunction stripExcludedMarks(\n\tbuilder: TransactionBuilder,\n\tblock: BlockNode,\n\texcludeMarks: readonly string[],\n): void {\n\tconst blockLength: number = getBlockLength(block);\n\tif (blockLength === 0) return;\n\n\tconst excludeSet: Set<string> = new Set(excludeMarks);\n\tconst inlineChildren = getInlineChildren(block);\n\tlet offset = 0;\n\n\tfor (const child of inlineChildren) {\n\t\tif (isTextNode(child)) {\n\t\t\tif (child.text.length > 0) {\n\t\t\t\tfor (const mark of child.marks) {\n\t\t\t\t\tif (excludeSet.has(mark.type)) {\n\t\t\t\t\t\tbuilder.removeMark(block.id, offset, offset + child.text.length, mark);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset += child.text.length;\n\t\t} else {\n\t\t\toffset += 1;\n\t\t}\n\t}\n}\n\n/**\n * Clears excluded mark types from stored marks so that\n * subsequent typing does not reintroduce them.\n */\nfunction clearExcludedStoredMarks(\n\tbuilder: TransactionBuilder,\n\tstate: EditorState,\n\texcludeMarks: readonly string[],\n): void {\n\tif (!state.storedMarks) return;\n\n\tconst excludeSet: Set<string> = new Set(excludeMarks);\n\tconst filtered: readonly Mark[] = state.storedMarks.filter((m: Mark) => !excludeSet.has(m.type));\n\n\tif (filtered.length !== state.storedMarks.length) {\n\t\tbuilder.setStoredMarks(filtered.length > 0 ? filtered : null, state.storedMarks);\n\t}\n}\n","/**\n * Keyboard handlers for heading block types.\n * Handles Enter key behavior: empty heading → paragraph, cursor at end → split + paragraph.\n */\n\nimport type { BlockNode } from '../../model/Document.js';\nimport { generateBlockId, getBlockLength, getBlockText } from '../../model/Document.js';\nimport {\n\tcreateCollapsedSelection,\n\tisCollapsed,\n\tisGapCursor,\n\tisNodeSelection,\n} from '../../model/Selection.js';\nimport type { BlockId } from '../../model/TypeBrands.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { HeadingConfig } from './HeadingPlugin.js';\n\n// --- Context Guard ---\n\nconst HEADING_TYPES: ReadonlySet<string> = new Set(['heading', 'title', 'subtitle']);\n\ninterface HeadingContext {\n\treadonly state: EditorState;\n\treadonly block: BlockNode;\n\treadonly blockId: BlockId;\n\treadonly offset: number;\n}\n\n/**\n * Guards against NodeSelection, non-collapsed selections, and non-heading blocks.\n * Returns false (not handled) if the cursor is not inside a heading-type block.\n */\nfunction withHeadingContext(\n\tcontext: PluginContext,\n\thandler: (ctx: HeadingContext) => boolean,\n): boolean {\n\tconst state: EditorState = context.getState();\n\tif (isNodeSelection(state.selection) || isGapCursor(state.selection)) return false;\n\n\tconst sel = state.selection;\n\tif (!isCollapsed(sel)) return false;\n\n\tconst block: BlockNode | undefined = state.getBlock(sel.anchor.blockId);\n\tif (!block || !HEADING_TYPES.has(block.type)) return false;\n\n\treturn handler({\n\t\tstate,\n\t\tblock,\n\t\tblockId: sel.anchor.blockId,\n\t\toffset: sel.anchor.offset,\n\t});\n}\n\n/** Registers all heading keyboard handlers (Enter, Mod-Shift-N shortcuts). */\nexport function registerHeadingKeymaps(context: PluginContext, config: HeadingConfig): void {\n\tconst keymap: Record<string, () => boolean> = {\n\t\tEnter: () => handleEnter(context),\n\t};\n\n\tfor (const level of config.levels) {\n\t\tif (level <= 6) {\n\t\t\tkeymap[`Mod-Shift-${level}`] = () => context.executeCommand(`setHeading${level}`);\n\t\t}\n\t}\n\n\tcontext.registerKeymap(keymap);\n}\n\n// --- Enter Handler ---\n\n/**\n * Handles Enter inside a heading block.\n * Empty heading → convert to paragraph.\n * Cursor at end → split and convert new block to paragraph.\n * Cursor in middle → normal split (both stay heading).\n */\nfunction handleEnter(context: PluginContext): boolean {\n\treturn withHeadingContext(context, (ctx) => {\n\t\tconst text: string = getBlockText(ctx.block);\n\n\t\tif (text === '') {\n\t\t\tconst tr = ctx.state\n\t\t\t\t.transaction('input')\n\t\t\t\t.setBlockType(ctx.blockId, nodeType('paragraph'))\n\t\t\t\t.setSelection(ctx.state.selection)\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst blockLength: number = getBlockLength(ctx.block);\n\n\t\tif (ctx.offset >= blockLength) {\n\t\t\tconst newBlockId = generateBlockId();\n\t\t\tconst tr = ctx.state\n\t\t\t\t.transaction('input')\n\t\t\t\t.splitBlock(ctx.blockId, ctx.offset, newBlockId)\n\t\t\t\t.setBlockType(newBlockId, nodeType('paragraph'))\n\t\t\t\t.setSelection(createCollapsedSelection(newBlockId, 0))\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t});\n}\n","/**\n * Locale interface and default English locale for the HeadingPlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface HeadingLocale {\n\treadonly paragraph: string;\n\treadonly title: string;\n\treadonly subtitle: string;\n\treadonly heading1: string;\n\treadonly heading2: string;\n\treadonly heading3: string;\n\treadonly heading4: string;\n\treadonly heading5: string;\n\treadonly heading6: string;\n\treadonly blockTypeLabel: string;\n\treadonly blockTypesAria: string;\n}\n\n// --- Default English Locale ---\n\nexport const HEADING_LOCALE_EN: HeadingLocale = {\n\tparagraph: 'Paragraph',\n\ttitle: 'Title',\n\tsubtitle: 'Subtitle',\n\theading1: 'Heading 1',\n\theading2: 'Heading 2',\n\theading3: 'Heading 3',\n\theading4: 'Heading 4',\n\theading5: 'Heading 5',\n\theading6: 'Heading 6',\n\tblockTypeLabel: 'Block Type',\n\tblockTypesAria: 'Block types',\n};\n\n// --- German Locale ---\n\nexport const HEADING_LOCALE_DE: HeadingLocale = {\n\tparagraph: 'Absatz',\n\ttitle: 'Titel',\n\tsubtitle: 'Untertitel',\n\theading1: 'Überschrift 1',\n\theading2: 'Überschrift 2',\n\theading3: 'Überschrift 3',\n\theading4: 'Überschrift 4',\n\theading5: 'Überschrift 5',\n\theading6: 'Überschrift 6',\n\tblockTypeLabel: 'Blocktyp',\n\tblockTypesAria: 'Blocktypen',\n};\n\n// --- Spanish Locale ---\n\nexport const HEADING_LOCALE_ES: HeadingLocale = {\n\tparagraph: 'Párrafo',\n\ttitle: 'Título',\n\tsubtitle: 'Subtítulo',\n\theading1: 'Encabezado 1',\n\theading2: 'Encabezado 2',\n\theading3: 'Encabezado 3',\n\theading4: 'Encabezado 4',\n\theading5: 'Encabezado 5',\n\theading6: 'Encabezado 6',\n\tblockTypeLabel: 'Tipo de bloque',\n\tblockTypesAria: 'Tipos de bloque',\n};\n\n// --- French Locale ---\n\nexport const HEADING_LOCALE_FR: HeadingLocale = {\n\tparagraph: 'Paragraphe',\n\ttitle: 'Titre',\n\tsubtitle: 'Sous-titre',\n\theading1: 'Titre 1',\n\theading2: 'Titre 2',\n\theading3: 'Titre 3',\n\theading4: 'Titre 4',\n\theading5: 'Titre 5',\n\theading6: 'Titre 6',\n\tblockTypeLabel: 'Type de bloc',\n\tblockTypesAria: 'Types de bloc',\n};\n\n// --- Chinese (Simplified) Locale ---\n\nexport const HEADING_LOCALE_ZH: HeadingLocale = {\n\tparagraph: '正文',\n\ttitle: '标题',\n\tsubtitle: '副标题',\n\theading1: '一级标题',\n\theading2: '二级标题',\n\theading3: '三级标题',\n\theading4: '四级标题',\n\theading5: '五级标题',\n\theading6: '六级标题',\n\tblockTypeLabel: '块类型',\n\tblockTypesAria: '块类型列表',\n};\n\n// --- Russian Locale ---\n\nexport const HEADING_LOCALE_RU: HeadingLocale = {\n\tparagraph: 'Абзац',\n\ttitle: 'Заголовок',\n\tsubtitle: 'Подзаголовок',\n\theading1: 'Заголовок 1',\n\theading2: 'Заголовок 2',\n\theading3: 'Заголовок 3',\n\theading4: 'Заголовок 4',\n\theading5: 'Заголовок 5',\n\theading6: 'Заголовок 6',\n\tblockTypeLabel: 'Тип блока',\n\tblockTypesAria: 'Типы блоков',\n};\n\n// --- Arabic Locale ---\n\nexport const HEADING_LOCALE_AR: HeadingLocale = {\n\tparagraph: 'فقرة',\n\ttitle: 'عنوان',\n\tsubtitle: 'عنوان فرعي',\n\theading1: 'عنوان 1',\n\theading2: 'عنوان 2',\n\theading3: 'عنوان 3',\n\theading4: 'عنوان 4',\n\theading5: 'عنوان 5',\n\theading6: 'عنوان 6',\n\tblockTypeLabel: 'نوع الكتلة',\n\tblockTypesAria: 'أنواع الكتل',\n};\n\n// --- Hindi Locale ---\n\nexport const HEADING_LOCALE_HI: HeadingLocale = {\n\tparagraph: 'अनुच्छेद',\n\ttitle: 'शीर्षक',\n\tsubtitle: 'उपशीर्षक',\n\theading1: 'शीर्षक 1',\n\theading2: 'शीर्षक 2',\n\theading3: 'शीर्षक 3',\n\theading4: 'शीर्षक 4',\n\theading5: 'शीर्षक 5',\n\theading6: 'शीर्षक 6',\n\tblockTypeLabel: 'ब्लॉक प्रकार',\n\tblockTypesAria: 'ब्लॉक प्रकार सूची',\n};\n\n// --- Locale Map ---\n\nexport const HEADING_LOCALES: Record<string, HeadingLocale> = {\n\ten: HEADING_LOCALE_EN,\n\tde: HEADING_LOCALE_DE,\n\tes: HEADING_LOCALE_ES,\n\tfr: HEADING_LOCALE_FR,\n\tzh: HEADING_LOCALE_ZH,\n\tru: HEADING_LOCALE_RU,\n\tar: HEADING_LOCALE_AR,\n\thi: HEADING_LOCALE_HI,\n};\n","/**\n * HeadingPlugin: registers Title, Subtitle, and H1–H6 heading block types\n * with NodeSpec, toggle commands, keyboard shortcuts, input rules, and a\n * combobox-style toolbar dropdown that reflects the current block type.\n *\n * This file is a thin orchestrator — command logic, input rules, keyboard\n * handlers, and picker/toolbar rendering are delegated to dedicated modules.\n */\n\nimport { HEADING_SELECT_CSS } from '../../editor/styles/heading-select.js';\nimport { resolvePluginLocale } from '../../i18n/resolvePluginLocale.js';\nimport { createBlockElement } from '../../model/NodeSpec.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport type { BlockAlignment } from '../alignment/AlignmentPlugin.js';\nimport {\n\tregisterHeadingPickerEntries,\n\tregisterHeadingToolbarItem,\n} from './HeadingBlockTypePicker.js';\nimport { registerHeadingCommands } from './HeadingCommands.js';\nimport { registerHeadingInputRules } from './HeadingInputRules.js';\nimport { registerHeadingKeymaps } from './HeadingKeyboardHandlers.js';\nimport { HEADING_LOCALES, type HeadingLocale } from './HeadingLocale.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface NodeAttrRegistry {\n\t\theading: { level: HeadingLevel; align?: BlockAlignment };\n\t\ttitle: { align?: BlockAlignment };\n\t\tsubtitle: { align?: BlockAlignment };\n\t}\n}\n\n// --- Configuration ---\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface HeadingConfig {\n\t/** Which heading levels to enable. Defaults to [1, 2, 3, 4, 5, 6]. */\n\treadonly levels: readonly HeadingLevel[];\n\t/** When true, a separator is rendered after the heading toolbar item. */\n\treadonly separatorAfter?: boolean;\n\treadonly locale?: HeadingLocale;\n}\n\nconst DEFAULT_CONFIG: HeadingConfig = {\n\tlevels: [1, 2, 3, 4, 5, 6],\n};\n\n// --- Heading Tag Mapping ---\n\nconst HEADING_TAGS: Record<HeadingLevel, string> = {\n\t1: 'h1',\n\t2: 'h2',\n\t3: 'h3',\n\t4: 'h4',\n\t5: 'h5',\n\t6: 'h6',\n};\n\n// --- Plugin ---\n\nexport class HeadingPlugin implements Plugin {\n\treadonly id = 'heading';\n\treadonly name = 'Heading';\n\treadonly priority = 30;\n\n\tprivate readonly config: HeadingConfig;\n\tprivate locale!: HeadingLocale;\n\n\tconstructor(config?: Partial<HeadingConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.locale = resolvePluginLocale(HEADING_LOCALES, context, this.config.locale);\n\t\tcontext.registerStyleSheet(HEADING_SELECT_CSS);\n\n\t\tthis.registerNodeSpecs(context);\n\t\tregisterHeadingCommands(context, this.config);\n\t\tregisterHeadingKeymaps(context, this.config);\n\t\tregisterHeadingInputRules(context, this.config);\n\t\tregisterHeadingPickerEntries(context, this.config, this.locale);\n\t\tregisterHeadingToolbarItem(context, this.config, this.locale);\n\t}\n\n\tprivate registerNodeSpecs(context: PluginContext): void {\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'title',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\texcludeMarks: ['fontSize'],\n\t\t\ttoDOM(node) {\n\t\t\t\tconst el = createBlockElement('h1', node.id);\n\t\t\t\tel.classList.add('notectl-title');\n\t\t\t\treturn el;\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<h1>${content || '<br>'}</h1>`;\n\t\t\t},\n\t\t\tsanitize: { tags: ['h1'] },\n\t\t});\n\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'subtitle',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\texcludeMarks: ['fontSize'],\n\t\t\ttoDOM(node) {\n\t\t\t\tconst el = createBlockElement('h2', node.id);\n\t\t\t\tel.classList.add('notectl-subtitle');\n\t\t\t\treturn el;\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<h2>${content || '<br>'}</h2>`;\n\t\t\t},\n\t\t\tsanitize: { tags: ['h2'] },\n\t\t});\n\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'heading',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\texcludeMarks: ['fontSize'],\n\t\t\tattrs: {\n\t\t\t\tlevel: { default: 1 },\n\t\t\t},\n\t\t\ttoDOM(node) {\n\t\t\t\tconst level = node.attrs?.level ?? 1;\n\t\t\t\tconst tag = HEADING_TAGS[level] ?? 'h1';\n\t\t\t\treturn createBlockElement(tag, node.id);\n\t\t\t},\n\t\t\ttoHTML(node, content) {\n\t\t\t\tconst level = (node.attrs?.level ?? 1) as HeadingLevel;\n\t\t\t\tconst tag: string = HEADING_TAGS[level] ?? 'h1';\n\t\t\t\treturn `<${tag}>${content || '<br>'}</${tag}>`;\n\t\t\t},\n\t\t\tparseHTML: [\n\t\t\t\t{ tag: 'h1', getAttrs: () => ({ level: 1 }) },\n\t\t\t\t{ tag: 'h2', getAttrs: () => ({ level: 2 }) },\n\t\t\t\t{ tag: 'h3', getAttrs: () => ({ level: 3 }) },\n\t\t\t\t{ tag: 'h4', getAttrs: () => ({ level: 4 }) },\n\t\t\t\t{ tag: 'h5', getAttrs: () => ({ level: 5 }) },\n\t\t\t\t{ tag: 'h6', getAttrs: () => ({ level: 6 }) },\n\t\t\t],\n\t\t\tsanitize: { tags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] },\n\t\t});\n\t}\n}\n","/** Heading picker toolbar combobox + popup styles. */\nexport const HEADING_SELECT_CSS = `\n/* Heading Select — Width overrides for combobox button */\n.notectl-toolbar-btn--heading {\n\tmin-width: 100px;\n\tmax-width: 160px;\n}\n\n/* Heading Picker Popup */\n.notectl-heading-picker {\n\tmin-width: 200px;\n\tmax-height: 320px;\n\toverflow-y: auto;\n}\n\n.notectl-heading-picker__list {\n\tpadding: 4px 0;\n}\n\n.notectl-heading-picker__item {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\twidth: 100%;\n\tpadding: 7px 12px;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\ttext-align: left;\n\twhite-space: nowrap;\n\tfont-family: inherit;\n\ttransition: background 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-heading-picker__item:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-heading-picker__item--active {\n\tbackground: var(--notectl-active-bg);\n\tcolor: var(--notectl-primary-fg);\n}\n\n@media (hover: hover) {\n\t.notectl-heading-picker__item--active:hover {\n\t\tbackground: var(--notectl-active-bg);\n\t}\n}\n\n.notectl-heading-picker__check {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 16px;\n\tflex-shrink: 0;\n\tfont-size: 13px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-heading-picker__label {\n\tflex: 1;\n}\n`;\n","/**\n * Input rule registration for heading block types.\n * Converts `# `, `## `, etc. at the start of a paragraph into headings.\n */\n\nimport {\n\tcreateCollapsedSelection,\n\tisCollapsed,\n\tisGapCursor,\n\tisNodeSelection,\n} from '../../model/Selection.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { PluginContext } from '../Plugin.js';\nimport type { HeadingConfig } from './HeadingPlugin.js';\n\n/** Registers markdown-style input rules (e.g. `# ` → H1) for configured heading levels. */\nexport function registerHeadingInputRules(context: PluginContext, config: HeadingConfig): void {\n\tfor (const level of config.levels) {\n\t\tconst hashes: string = '#'.repeat(level);\n\t\tconst pattern: RegExp = new RegExp(`^${hashes} $`);\n\n\t\tcontext.registerInputRule({\n\t\t\tpattern,\n\t\t\thandler(state, _match, start, _end) {\n\t\t\t\tconst sel = state.selection;\n\t\t\t\tif (isNodeSelection(sel) || isGapCursor(sel)) return null;\n\t\t\t\tif (!isCollapsed(sel)) return null;\n\n\t\t\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\t\t\tif (!block || block.type !== 'paragraph') return null;\n\n\t\t\t\treturn state\n\t\t\t\t\t.transaction('input')\n\t\t\t\t\t.deleteTextAt(sel.anchor.blockId, start, start + level + 1)\n\t\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('heading'), { level })\n\t\t\t\t\t.setSelection(createCollapsedSelection(sel.anchor.blockId, 0))\n\t\t\t\t\t.build();\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":["createPickerItem","label","isActive","handler","style","item","document","createElement","type","className","setAttribute","String","classList","add","check","textContent","appendChild","labelSpan","setStyleProperties","fontSize","fontWeight","addEventListener","getHeadingLabel","locale","level","toggleSpecialBlock","context","state","getState","isNodeSelection","selection","isGapCursor","block","getBlock","anchor","blockId","setBlockType","nodeType","toggleHeading","sel","attrs","builder","transaction","spec","getSchemaRegistry","getNodeSpec","excludeMarks","length","getBlockLength","excludeSet","Set","inlineChildren","getInlineChildren","offset","child","isTextNode","text","mark","marks","has","removeMark","id","storedMarks","filtered","filter","m","setStoredMarks","tr","setSelection","build","dispatch","HEADING_TYPES","HEADING_LOCALE_EN","paragraph","title","subtitle","heading1","heading2","heading3","heading4","heading5","heading6","blockTypeLabel","blockTypesAria","HEADING_LOCALES","en","de","es","fr","zh","ru","ar","hi","DEFAULT_CONFIG","levels","HEADING_TAGS","HeadingPlugin","name","priority","config","this","resolvePluginLocale","registerStyleSheet","registerNodeSpecs","registerCommand","keymap","Enter","isCollapsed","ctx","getBlockText","blockLength","newBlockId","generateBlockId","splitBlock","createCollapsedSelection","executeCommand","registerKeymap","hashes","repeat","pattern","RegExp","registerInputRule","_match","start","_end","deleteTextAt","registerBlockTypePickerEntry","command","registerToolbarItem","group","tooltip","popupType","separatorAfter","getLabel","entries","getBlockTypePickerRegistry","getBlockTypePickerEntries","entry","renderPopup","container","onClose","contentElement","getContainer","list","active","e","preventDefault","stopPropagation","restoreFocusTo","some","registerNodeSpec","content","allow","node","el","createBlockElement","toHTML","_node","sanitize","tags","default","tag","parseHTML","getAttrs"],"mappings":"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"}