@notectl/core 1.7.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1294) 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-BFYAonMF.mjs.map +1 -0
  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-B_erV7zz.mjs.map +1 -0
  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-BmsLoEa8.mjs.map +1 -0
  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/MarkCommands.d.ts +3 -3
  428. package/dist/commands/MarkCommands.d.ts.map +1 -1
  429. package/dist/commands/MovementCommands.d.ts +1 -4
  430. package/dist/commands/MovementCommands.d.ts.map +1 -1
  431. package/dist/commands/NodeSelectionCommands.d.ts +3 -1
  432. package/dist/commands/NodeSelectionCommands.d.ts.map +1 -1
  433. package/dist/commands/WordBoundary.d.ts +4 -9
  434. package/dist/commands/WordBoundary.d.ts.map +1 -1
  435. package/dist/editor/Announcer.d.ts +1 -2
  436. package/dist/editor/Announcer.d.ts.map +1 -1
  437. package/dist/{model → editor}/BuiltinSpecs.d.ts +1 -1
  438. package/dist/editor/BuiltinSpecs.d.ts.map +1 -0
  439. package/dist/editor/ContentSerializer.d.ts +24 -0
  440. package/dist/editor/ContentSerializer.d.ts.map +1 -0
  441. package/dist/editor/ContentStyleInjector.d.ts +69 -0
  442. package/dist/editor/ContentStyleInjector.d.ts.map +1 -0
  443. package/dist/editor/EditorConfigController.d.ts +38 -0
  444. package/dist/editor/EditorConfigController.d.ts.map +1 -0
  445. package/dist/editor/EditorDOM.d.ts +3 -4
  446. package/dist/editor/EditorDOM.d.ts.map +1 -1
  447. package/dist/editor/EditorEventEmitter.d.ts +30 -0
  448. package/dist/editor/EditorEventEmitter.d.ts.map +1 -0
  449. package/dist/editor/EditorLifecycleCoordinator.d.ts +24 -0
  450. package/dist/editor/EditorLifecycleCoordinator.d.ts.map +1 -0
  451. package/dist/editor/EditorLocale.d.ts +9 -0
  452. package/dist/editor/EditorLocale.d.ts.map +1 -0
  453. package/dist/editor/EditorStyleCoordinator.d.ts +9 -0
  454. package/dist/editor/EditorStyleCoordinator.d.ts.map +1 -0
  455. package/dist/editor/NotectlEditor.d.ts +24 -61
  456. package/dist/editor/NotectlEditor.d.ts.map +1 -1
  457. package/dist/editor/PaperLayoutController.d.ts +1 -1
  458. package/dist/editor/PaperLayoutController.d.ts.map +1 -1
  459. package/dist/editor/PluginBootstrapper.d.ts +18 -0
  460. package/dist/editor/PluginBootstrapper.d.ts.map +1 -0
  461. package/dist/editor/locales/ar.d.ts +4 -0
  462. package/dist/editor/locales/ar.d.ts.map +1 -0
  463. package/dist/editor/locales/de.d.ts +4 -0
  464. package/dist/editor/locales/de.d.ts.map +1 -0
  465. package/dist/editor/locales/es.d.ts +4 -0
  466. package/dist/editor/locales/es.d.ts.map +1 -0
  467. package/dist/editor/locales/fr.d.ts +4 -0
  468. package/dist/editor/locales/fr.d.ts.map +1 -0
  469. package/dist/editor/locales/hi.d.ts +4 -0
  470. package/dist/editor/locales/hi.d.ts.map +1 -0
  471. package/dist/editor/locales/pt.d.ts +4 -0
  472. package/dist/editor/locales/pt.d.ts.map +1 -0
  473. package/dist/editor/locales/ru.d.ts +4 -0
  474. package/dist/editor/locales/ru.d.ts.map +1 -0
  475. package/dist/editor/locales/zh.d.ts +4 -0
  476. package/dist/editor/locales/zh.d.ts.map +1 -0
  477. package/dist/editor/styles/base.d.ts +1 -1
  478. package/dist/editor/styles/base.d.ts.map +1 -1
  479. package/dist/editor/styles/code-block.d.ts +1 -1
  480. package/dist/editor/styles/code-block.d.ts.map +1 -1
  481. package/dist/editor/styles/font-select.d.ts +1 -1
  482. package/dist/editor/styles/font-select.d.ts.map +1 -1
  483. package/dist/editor/styles/font-size-select.d.ts +1 -1
  484. package/dist/editor/styles/font-size-select.d.ts.map +1 -1
  485. package/dist/editor/styles/heading-select.d.ts +1 -1
  486. package/dist/editor/styles/heading-select.d.ts.map +1 -1
  487. package/dist/editor/styles/image.d.ts +1 -1
  488. package/dist/editor/styles/image.d.ts.map +1 -1
  489. package/dist/editor/styles/list.d.ts +1 -1
  490. package/dist/editor/styles/list.d.ts.map +1 -1
  491. package/dist/editor/styles/table.d.ts +1 -1
  492. package/dist/editor/styles/table.d.ts.map +1 -1
  493. package/dist/editor/styles/toolbar.d.ts +1 -1
  494. package/dist/editor/styles/toolbar.d.ts.map +1 -1
  495. package/dist/fonts.mjs +1 -6
  496. package/dist/fonts.mjs.map +1 -1
  497. package/dist/full.d.ts +45 -0
  498. package/dist/full.d.ts.map +1 -0
  499. package/dist/full.mjs +2 -0
  500. package/dist/full.mjs.map +1 -0
  501. package/dist/html.d.ts +16 -0
  502. package/dist/html.d.ts.map +1 -0
  503. package/dist/html.mjs +2 -0
  504. package/dist/html.mjs.map +1 -0
  505. package/dist/i18n/Locale.d.ts +1 -0
  506. package/dist/i18n/Locale.d.ts.map +1 -1
  507. package/dist/i18n/index.d.ts +0 -1
  508. package/dist/i18n/index.d.ts.map +1 -1
  509. package/dist/index.d.ts +33 -100
  510. package/dist/index.d.ts.map +1 -1
  511. package/dist/input/BlockInsertion.d.ts +51 -0
  512. package/dist/input/BlockInsertion.d.ts.map +1 -0
  513. package/dist/input/ClipboardHandler.d.ts +22 -0
  514. package/dist/input/ClipboardHandler.d.ts.map +1 -1
  515. package/dist/input/CompositionTracker.d.ts +2 -1
  516. package/dist/input/CompositionTracker.d.ts.map +1 -1
  517. package/dist/{model → input}/HTMLParser.d.ts +3 -3
  518. package/dist/input/HTMLParser.d.ts.map +1 -0
  519. package/dist/input/InputHandler.d.ts +1 -1
  520. package/dist/input/InputHandler.d.ts.map +1 -1
  521. package/dist/input/InputManager.d.ts +35 -0
  522. package/dist/input/InputManager.d.ts.map +1 -0
  523. package/dist/input/InternalClipboard.d.ts +11 -1
  524. package/dist/input/InternalClipboard.d.ts.map +1 -1
  525. package/dist/input/KeyboardHandler.d.ts +12 -1
  526. package/dist/input/KeyboardHandler.d.ts.map +1 -1
  527. package/dist/input/PasteHandler.d.ts +21 -17
  528. package/dist/input/PasteHandler.d.ts.map +1 -1
  529. package/dist/model/AttrRegistry.d.ts +1 -1
  530. package/dist/model/AttrRegistry.d.ts.map +1 -1
  531. package/dist/model/BlockAlignment.d.ts +8 -0
  532. package/dist/model/BlockAlignment.d.ts.map +1 -0
  533. package/dist/model/BlockTypeLabels.d.ts +7 -0
  534. package/dist/model/BlockTypeLabels.d.ts.map +1 -0
  535. package/dist/model/CompositionState.d.ts +8 -0
  536. package/dist/model/CompositionState.d.ts.map +1 -0
  537. package/dist/model/Document.d.ts +0 -4
  538. package/dist/model/Document.d.ts.map +1 -1
  539. package/dist/{input → model}/FileHandlerRegistry.d.ts +1 -1
  540. package/dist/{input → model}/FileHandlerRegistry.d.ts.map +1 -1
  541. package/dist/model/HTMLUtils.d.ts +6 -0
  542. package/dist/model/HTMLUtils.d.ts.map +1 -1
  543. package/dist/{input → model}/InputRule.d.ts.map +1 -1
  544. package/dist/{input → model}/InputRuleRegistry.d.ts.map +1 -1
  545. package/dist/{input → model}/Keymap.d.ts.map +1 -1
  546. package/dist/{input → model}/KeymapRegistry.d.ts.map +1 -1
  547. package/dist/model/MarkSpec.d.ts +2 -2
  548. package/dist/model/MarkSpec.d.ts.map +1 -1
  549. package/dist/model/NodeSpec.d.ts +19 -5
  550. package/dist/model/NodeSpec.d.ts.map +1 -1
  551. package/dist/model/PaperSize.d.ts.map +1 -0
  552. package/dist/model/WordBoundary.d.ts +12 -0
  553. package/dist/model/WordBoundary.d.ts.map +1 -0
  554. package/dist/notectl-core.mjs +1 -3764
  555. package/dist/notectl-core.mjs.map +1 -1
  556. package/dist/notectl-core.umd.js +1 -9434
  557. package/dist/notectl-core.umd.js.map +1 -1
  558. package/dist/{view → platform}/Platform.d.ts +2 -0
  559. package/dist/platform/Platform.d.ts.map +1 -0
  560. package/dist/plugins/Plugin.d.ts +5 -5
  561. package/dist/plugins/Plugin.d.ts.map +1 -1
  562. package/dist/plugins/PluginManager.d.ts +3 -3
  563. package/dist/plugins/alignment/AlignmentLocale.d.ts +3 -10
  564. package/dist/plugins/alignment/AlignmentLocale.d.ts.map +1 -1
  565. package/dist/plugins/alignment/AlignmentPlugin.d.ts +3 -13
  566. package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
  567. package/dist/plugins/alignment/index.d.ts +3 -1
  568. package/dist/plugins/alignment/index.d.ts.map +1 -1
  569. package/dist/plugins/alignment/locales/ar.d.ts +4 -0
  570. package/dist/plugins/alignment/locales/ar.d.ts.map +1 -0
  571. package/dist/plugins/alignment/locales/de.d.ts +4 -0
  572. package/dist/plugins/alignment/locales/de.d.ts.map +1 -0
  573. package/dist/plugins/alignment/locales/es.d.ts +4 -0
  574. package/dist/plugins/alignment/locales/es.d.ts.map +1 -0
  575. package/dist/plugins/alignment/locales/fr.d.ts +4 -0
  576. package/dist/plugins/alignment/locales/fr.d.ts.map +1 -0
  577. package/dist/plugins/alignment/locales/hi.d.ts +4 -0
  578. package/dist/plugins/alignment/locales/hi.d.ts.map +1 -0
  579. package/dist/plugins/alignment/locales/pt.d.ts +4 -0
  580. package/dist/plugins/alignment/locales/pt.d.ts.map +1 -0
  581. package/dist/plugins/alignment/locales/ru.d.ts +4 -0
  582. package/dist/plugins/alignment/locales/ru.d.ts.map +1 -0
  583. package/dist/plugins/alignment/locales/zh.d.ts +4 -0
  584. package/dist/plugins/alignment/locales/zh.d.ts.map +1 -0
  585. package/dist/plugins/alignment.mjs +1 -5
  586. package/dist/plugins/alignment.mjs.map +1 -1
  587. package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts +4 -0
  588. package/dist/plugins/blockquote/BlockquoteKeyboardHandlers.d.ts.map +1 -0
  589. package/dist/plugins/blockquote/BlockquoteLocale.d.ts +1 -8
  590. package/dist/plugins/blockquote/BlockquoteLocale.d.ts.map +1 -1
  591. package/dist/plugins/blockquote/BlockquotePlugin.d.ts +1 -3
  592. package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
  593. package/dist/plugins/blockquote/BlockquoteStyles.d.ts +3 -0
  594. package/dist/plugins/blockquote/BlockquoteStyles.d.ts.map +1 -0
  595. package/dist/plugins/blockquote/index.d.ts +2 -0
  596. package/dist/plugins/blockquote/index.d.ts.map +1 -1
  597. package/dist/plugins/blockquote/locales/ar.d.ts +4 -0
  598. package/dist/plugins/blockquote/locales/ar.d.ts.map +1 -0
  599. package/dist/plugins/blockquote/locales/de.d.ts +4 -0
  600. package/dist/plugins/blockquote/locales/de.d.ts.map +1 -0
  601. package/dist/plugins/blockquote/locales/es.d.ts +4 -0
  602. package/dist/plugins/blockquote/locales/es.d.ts.map +1 -0
  603. package/dist/plugins/blockquote/locales/fr.d.ts +4 -0
  604. package/dist/plugins/blockquote/locales/fr.d.ts.map +1 -0
  605. package/dist/plugins/blockquote/locales/hi.d.ts +4 -0
  606. package/dist/plugins/blockquote/locales/hi.d.ts.map +1 -0
  607. package/dist/plugins/blockquote/locales/pt.d.ts +4 -0
  608. package/dist/plugins/blockquote/locales/pt.d.ts.map +1 -0
  609. package/dist/plugins/blockquote/locales/ru.d.ts +4 -0
  610. package/dist/plugins/blockquote/locales/ru.d.ts.map +1 -0
  611. package/dist/plugins/blockquote/locales/zh.d.ts +4 -0
  612. package/dist/plugins/blockquote/locales/zh.d.ts.map +1 -0
  613. package/dist/plugins/blockquote.mjs +1 -4
  614. package/dist/plugins/blockquote.mjs.map +1 -1
  615. package/dist/plugins/caret-navigation/CaretNavigationLocale.d.ts +21 -0
  616. package/dist/plugins/caret-navigation/CaretNavigationLocale.d.ts.map +1 -0
  617. package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts +2 -1
  618. package/dist/plugins/caret-navigation/CaretNavigationPlugin.d.ts.map +1 -1
  619. package/dist/plugins/caret-navigation/index.d.ts +2 -0
  620. package/dist/plugins/caret-navigation/index.d.ts.map +1 -1
  621. package/dist/plugins/caret-navigation/locales/ar.d.ts +4 -0
  622. package/dist/plugins/caret-navigation/locales/ar.d.ts.map +1 -0
  623. package/dist/plugins/caret-navigation/locales/de.d.ts +4 -0
  624. package/dist/plugins/caret-navigation/locales/de.d.ts.map +1 -0
  625. package/dist/plugins/caret-navigation/locales/es.d.ts +4 -0
  626. package/dist/plugins/caret-navigation/locales/es.d.ts.map +1 -0
  627. package/dist/plugins/caret-navigation/locales/fr.d.ts +4 -0
  628. package/dist/plugins/caret-navigation/locales/fr.d.ts.map +1 -0
  629. package/dist/plugins/caret-navigation/locales/hi.d.ts +4 -0
  630. package/dist/plugins/caret-navigation/locales/hi.d.ts.map +1 -0
  631. package/dist/plugins/caret-navigation/locales/pt.d.ts +4 -0
  632. package/dist/plugins/caret-navigation/locales/pt.d.ts.map +1 -0
  633. package/dist/plugins/caret-navigation/locales/ru.d.ts +4 -0
  634. package/dist/plugins/caret-navigation/locales/ru.d.ts.map +1 -0
  635. package/dist/plugins/caret-navigation/locales/zh.d.ts +4 -0
  636. package/dist/plugins/caret-navigation/locales/zh.d.ts.map +1 -0
  637. package/dist/plugins/caret-navigation.mjs +1 -4
  638. package/dist/plugins/caret-navigation.mjs.map +1 -1
  639. package/dist/plugins/code-block/CodeBlockLocale.d.ts +5 -8
  640. package/dist/plugins/code-block/CodeBlockLocale.d.ts.map +1 -1
  641. package/dist/plugins/code-block/CodeBlockNodeView.d.ts +2 -1
  642. package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
  643. package/dist/plugins/code-block/CodeBlockPlugin.d.ts +2 -3
  644. package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
  645. package/dist/plugins/code-block/CodeBlockService.d.ts.map +1 -1
  646. package/dist/plugins/code-block/CodeBlockTypes.d.ts +0 -1
  647. package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -1
  648. package/dist/plugins/code-block/index.d.ts +4 -1
  649. package/dist/plugins/code-block/index.d.ts.map +1 -1
  650. package/dist/plugins/code-block/locales/ar.d.ts +4 -0
  651. package/dist/plugins/code-block/locales/ar.d.ts.map +1 -0
  652. package/dist/plugins/code-block/locales/de.d.ts +4 -0
  653. package/dist/plugins/code-block/locales/de.d.ts.map +1 -0
  654. package/dist/plugins/code-block/locales/es.d.ts +4 -0
  655. package/dist/plugins/code-block/locales/es.d.ts.map +1 -0
  656. package/dist/plugins/code-block/locales/fr.d.ts +4 -0
  657. package/dist/plugins/code-block/locales/fr.d.ts.map +1 -0
  658. package/dist/plugins/code-block/locales/hi.d.ts +4 -0
  659. package/dist/plugins/code-block/locales/hi.d.ts.map +1 -0
  660. package/dist/plugins/code-block/locales/pt.d.ts +4 -0
  661. package/dist/plugins/code-block/locales/pt.d.ts.map +1 -0
  662. package/dist/plugins/code-block/locales/ru.d.ts +4 -0
  663. package/dist/plugins/code-block/locales/ru.d.ts.map +1 -0
  664. package/dist/plugins/code-block/locales/zh.d.ts +4 -0
  665. package/dist/plugins/code-block/locales/zh.d.ts.map +1 -0
  666. package/dist/plugins/code-block.mjs +1 -5
  667. package/dist/plugins/code-block.mjs.map +1 -1
  668. package/dist/plugins/font/FontLocale.d.ts +1 -8
  669. package/dist/plugins/font/FontLocale.d.ts.map +1 -1
  670. package/dist/plugins/font/FontPlugin.d.ts +1 -4
  671. package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
  672. package/dist/plugins/font/index.d.ts +2 -0
  673. package/dist/plugins/font/index.d.ts.map +1 -1
  674. package/dist/plugins/font/locales/ar.d.ts +4 -0
  675. package/dist/plugins/font/locales/ar.d.ts.map +1 -0
  676. package/dist/plugins/font/locales/de.d.ts +4 -0
  677. package/dist/plugins/font/locales/de.d.ts.map +1 -0
  678. package/dist/plugins/font/locales/es.d.ts +4 -0
  679. package/dist/plugins/font/locales/es.d.ts.map +1 -0
  680. package/dist/plugins/font/locales/fr.d.ts +4 -0
  681. package/dist/plugins/font/locales/fr.d.ts.map +1 -0
  682. package/dist/plugins/font/locales/hi.d.ts +4 -0
  683. package/dist/plugins/font/locales/hi.d.ts.map +1 -0
  684. package/dist/plugins/font/locales/pt.d.ts +4 -0
  685. package/dist/plugins/font/locales/pt.d.ts.map +1 -0
  686. package/dist/plugins/font/locales/ru.d.ts +4 -0
  687. package/dist/plugins/font/locales/ru.d.ts.map +1 -0
  688. package/dist/plugins/font/locales/zh.d.ts +4 -0
  689. package/dist/plugins/font/locales/zh.d.ts.map +1 -0
  690. package/dist/plugins/font-size/FontSizeLocale.d.ts +1 -8
  691. package/dist/plugins/font-size/FontSizeLocale.d.ts.map +1 -1
  692. package/dist/plugins/font-size/FontSizePlugin.d.ts +1 -5
  693. package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
  694. package/dist/plugins/font-size/FontSizePopup.d.ts +4 -2
  695. package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -1
  696. package/dist/plugins/font-size/index.d.ts +2 -0
  697. package/dist/plugins/font-size/index.d.ts.map +1 -1
  698. package/dist/plugins/font-size/locales/ar.d.ts +4 -0
  699. package/dist/plugins/font-size/locales/ar.d.ts.map +1 -0
  700. package/dist/plugins/font-size/locales/de.d.ts +4 -0
  701. package/dist/plugins/font-size/locales/de.d.ts.map +1 -0
  702. package/dist/plugins/font-size/locales/es.d.ts +4 -0
  703. package/dist/plugins/font-size/locales/es.d.ts.map +1 -0
  704. package/dist/plugins/font-size/locales/fr.d.ts +4 -0
  705. package/dist/plugins/font-size/locales/fr.d.ts.map +1 -0
  706. package/dist/plugins/font-size/locales/hi.d.ts +4 -0
  707. package/dist/plugins/font-size/locales/hi.d.ts.map +1 -0
  708. package/dist/plugins/font-size/locales/pt.d.ts +4 -0
  709. package/dist/plugins/font-size/locales/pt.d.ts.map +1 -0
  710. package/dist/plugins/font-size/locales/ru.d.ts +4 -0
  711. package/dist/plugins/font-size/locales/ru.d.ts.map +1 -0
  712. package/dist/plugins/font-size/locales/zh.d.ts +4 -0
  713. package/dist/plugins/font-size/locales/zh.d.ts.map +1 -0
  714. package/dist/plugins/font-size.mjs +1 -4
  715. package/dist/plugins/font-size.mjs.map +1 -1
  716. package/dist/plugins/font.mjs +1 -4
  717. package/dist/plugins/font.mjs.map +1 -1
  718. package/dist/plugins/gap-cursor/GapCursorLocale.d.ts +7 -0
  719. package/dist/plugins/gap-cursor/GapCursorLocale.d.ts.map +1 -0
  720. package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts +7 -3
  721. package/dist/plugins/gap-cursor/GapCursorPlugin.d.ts.map +1 -1
  722. package/dist/plugins/gap-cursor/locales/ar.d.ts +4 -0
  723. package/dist/plugins/gap-cursor/locales/ar.d.ts.map +1 -0
  724. package/dist/plugins/gap-cursor/locales/de.d.ts +4 -0
  725. package/dist/plugins/gap-cursor/locales/de.d.ts.map +1 -0
  726. package/dist/plugins/gap-cursor/locales/es.d.ts +4 -0
  727. package/dist/plugins/gap-cursor/locales/es.d.ts.map +1 -0
  728. package/dist/plugins/gap-cursor/locales/fr.d.ts +4 -0
  729. package/dist/plugins/gap-cursor/locales/fr.d.ts.map +1 -0
  730. package/dist/plugins/gap-cursor/locales/hi.d.ts +4 -0
  731. package/dist/plugins/gap-cursor/locales/hi.d.ts.map +1 -0
  732. package/dist/plugins/gap-cursor/locales/pt.d.ts +4 -0
  733. package/dist/plugins/gap-cursor/locales/pt.d.ts.map +1 -0
  734. package/dist/plugins/gap-cursor/locales/ru.d.ts +4 -0
  735. package/dist/plugins/gap-cursor/locales/ru.d.ts.map +1 -0
  736. package/dist/plugins/gap-cursor/locales/zh.d.ts +4 -0
  737. package/dist/plugins/gap-cursor/locales/zh.d.ts.map +1 -0
  738. package/dist/plugins/gap-cursor.mjs +1 -64
  739. package/dist/plugins/gap-cursor.mjs.map +1 -1
  740. package/dist/plugins/hard-break.mjs +1 -4
  741. package/dist/plugins/hard-break.mjs.map +1 -1
  742. package/dist/plugins/heading/HeadingBlockTypePicker.d.ts +1 -1
  743. package/dist/plugins/heading/HeadingBlockTypePicker.d.ts.map +1 -1
  744. package/dist/plugins/heading/HeadingLocale.d.ts +1 -8
  745. package/dist/plugins/heading/HeadingLocale.d.ts.map +1 -1
  746. package/dist/plugins/heading/HeadingPlugin.d.ts +2 -4
  747. package/dist/plugins/heading/HeadingPlugin.d.ts.map +1 -1
  748. package/dist/plugins/heading/index.d.ts +3 -0
  749. package/dist/plugins/heading/index.d.ts.map +1 -1
  750. package/dist/plugins/heading/locales/ar.d.ts +4 -0
  751. package/dist/plugins/heading/locales/ar.d.ts.map +1 -0
  752. package/dist/plugins/heading/locales/de.d.ts +4 -0
  753. package/dist/plugins/heading/locales/de.d.ts.map +1 -0
  754. package/dist/plugins/heading/locales/es.d.ts +4 -0
  755. package/dist/plugins/heading/locales/es.d.ts.map +1 -0
  756. package/dist/plugins/heading/locales/fr.d.ts +4 -0
  757. package/dist/plugins/heading/locales/fr.d.ts.map +1 -0
  758. package/dist/plugins/heading/locales/hi.d.ts +4 -0
  759. package/dist/plugins/heading/locales/hi.d.ts.map +1 -0
  760. package/dist/plugins/heading/locales/pt.d.ts +4 -0
  761. package/dist/plugins/heading/locales/pt.d.ts.map +1 -0
  762. package/dist/plugins/heading/locales/ru.d.ts +4 -0
  763. package/dist/plugins/heading/locales/ru.d.ts.map +1 -0
  764. package/dist/plugins/heading/locales/zh.d.ts +4 -0
  765. package/dist/plugins/heading/locales/zh.d.ts.map +1 -0
  766. package/dist/plugins/heading.mjs +1 -4
  767. package/dist/plugins/heading.mjs.map +1 -1
  768. package/dist/plugins/highlight/HighlightLocale.d.ts +1 -8
  769. package/dist/plugins/highlight/HighlightLocale.d.ts.map +1 -1
  770. package/dist/plugins/highlight/HighlightPlugin.d.ts +1 -3
  771. package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
  772. package/dist/plugins/highlight/index.d.ts +2 -0
  773. package/dist/plugins/highlight/index.d.ts.map +1 -1
  774. package/dist/plugins/highlight/locales/ar.d.ts +4 -0
  775. package/dist/plugins/highlight/locales/ar.d.ts.map +1 -0
  776. package/dist/plugins/highlight/locales/de.d.ts +4 -0
  777. package/dist/plugins/highlight/locales/de.d.ts.map +1 -0
  778. package/dist/plugins/highlight/locales/es.d.ts +4 -0
  779. package/dist/plugins/highlight/locales/es.d.ts.map +1 -0
  780. package/dist/plugins/highlight/locales/fr.d.ts +4 -0
  781. package/dist/plugins/highlight/locales/fr.d.ts.map +1 -0
  782. package/dist/plugins/highlight/locales/hi.d.ts +4 -0
  783. package/dist/plugins/highlight/locales/hi.d.ts.map +1 -0
  784. package/dist/plugins/highlight/locales/pt.d.ts +4 -0
  785. package/dist/plugins/highlight/locales/pt.d.ts.map +1 -0
  786. package/dist/plugins/highlight/locales/ru.d.ts +4 -0
  787. package/dist/plugins/highlight/locales/ru.d.ts.map +1 -0
  788. package/dist/plugins/highlight/locales/zh.d.ts +4 -0
  789. package/dist/plugins/highlight/locales/zh.d.ts.map +1 -0
  790. package/dist/plugins/highlight.mjs +1 -4
  791. package/dist/plugins/highlight.mjs.map +1 -1
  792. package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts +1 -8
  793. package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts.map +1 -1
  794. package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts +1 -3
  795. package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
  796. package/dist/plugins/horizontal-rule/index.d.ts +2 -0
  797. package/dist/plugins/horizontal-rule/index.d.ts.map +1 -1
  798. package/dist/plugins/horizontal-rule/locales/ar.d.ts +4 -0
  799. package/dist/plugins/horizontal-rule/locales/ar.d.ts.map +1 -0
  800. package/dist/plugins/horizontal-rule/locales/de.d.ts +4 -0
  801. package/dist/plugins/horizontal-rule/locales/de.d.ts.map +1 -0
  802. package/dist/plugins/horizontal-rule/locales/es.d.ts +4 -0
  803. package/dist/plugins/horizontal-rule/locales/es.d.ts.map +1 -0
  804. package/dist/plugins/horizontal-rule/locales/fr.d.ts +4 -0
  805. package/dist/plugins/horizontal-rule/locales/fr.d.ts.map +1 -0
  806. package/dist/plugins/horizontal-rule/locales/hi.d.ts +4 -0
  807. package/dist/plugins/horizontal-rule/locales/hi.d.ts.map +1 -0
  808. package/dist/plugins/horizontal-rule/locales/pt.d.ts +4 -0
  809. package/dist/plugins/horizontal-rule/locales/pt.d.ts.map +1 -0
  810. package/dist/plugins/horizontal-rule/locales/ru.d.ts +4 -0
  811. package/dist/plugins/horizontal-rule/locales/ru.d.ts.map +1 -0
  812. package/dist/plugins/horizontal-rule/locales/zh.d.ts +4 -0
  813. package/dist/plugins/horizontal-rule/locales/zh.d.ts.map +1 -0
  814. package/dist/plugins/horizontal-rule.mjs +1 -4
  815. package/dist/plugins/horizontal-rule.mjs.map +1 -1
  816. package/dist/plugins/image/ImageLocale.d.ts +9 -8
  817. package/dist/plugins/image/ImageLocale.d.ts.map +1 -1
  818. package/dist/plugins/image/ImageNodeView.d.ts +8 -1
  819. package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
  820. package/dist/plugins/image/ImagePlugin.d.ts +2 -2
  821. package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
  822. package/dist/plugins/image/ImageUpload.d.ts +1 -2
  823. package/dist/plugins/image/ImageUpload.d.ts.map +1 -1
  824. package/dist/plugins/image/index.d.ts +2 -0
  825. package/dist/plugins/image/index.d.ts.map +1 -1
  826. package/dist/plugins/image/locales/ar.d.ts +4 -0
  827. package/dist/plugins/image/locales/ar.d.ts.map +1 -0
  828. package/dist/plugins/image/locales/de.d.ts +4 -0
  829. package/dist/plugins/image/locales/de.d.ts.map +1 -0
  830. package/dist/plugins/image/locales/es.d.ts +4 -0
  831. package/dist/plugins/image/locales/es.d.ts.map +1 -0
  832. package/dist/plugins/image/locales/fr.d.ts +4 -0
  833. package/dist/plugins/image/locales/fr.d.ts.map +1 -0
  834. package/dist/plugins/image/locales/hi.d.ts +4 -0
  835. package/dist/plugins/image/locales/hi.d.ts.map +1 -0
  836. package/dist/plugins/image/locales/pt.d.ts +4 -0
  837. package/dist/plugins/image/locales/pt.d.ts.map +1 -0
  838. package/dist/plugins/image/locales/ru.d.ts +4 -0
  839. package/dist/plugins/image/locales/ru.d.ts.map +1 -0
  840. package/dist/plugins/image/locales/zh.d.ts +4 -0
  841. package/dist/plugins/image/locales/zh.d.ts.map +1 -0
  842. package/dist/plugins/image.mjs +1 -6
  843. package/dist/plugins/image.mjs.map +1 -1
  844. package/dist/plugins/link/LinkLocale.d.ts +1 -8
  845. package/dist/plugins/link/LinkLocale.d.ts.map +1 -1
  846. package/dist/plugins/link/LinkPlugin.d.ts +1 -3
  847. package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
  848. package/dist/plugins/link/index.d.ts +2 -0
  849. package/dist/plugins/link/index.d.ts.map +1 -1
  850. package/dist/plugins/link/locales/ar.d.ts +4 -0
  851. package/dist/plugins/link/locales/ar.d.ts.map +1 -0
  852. package/dist/plugins/link/locales/de.d.ts +4 -0
  853. package/dist/plugins/link/locales/de.d.ts.map +1 -0
  854. package/dist/plugins/link/locales/es.d.ts +4 -0
  855. package/dist/plugins/link/locales/es.d.ts.map +1 -0
  856. package/dist/plugins/link/locales/fr.d.ts +4 -0
  857. package/dist/plugins/link/locales/fr.d.ts.map +1 -0
  858. package/dist/plugins/link/locales/hi.d.ts +4 -0
  859. package/dist/plugins/link/locales/hi.d.ts.map +1 -0
  860. package/dist/plugins/link/locales/pt.d.ts +4 -0
  861. package/dist/plugins/link/locales/pt.d.ts.map +1 -0
  862. package/dist/plugins/link/locales/ru.d.ts +4 -0
  863. package/dist/plugins/link/locales/ru.d.ts.map +1 -0
  864. package/dist/plugins/link/locales/zh.d.ts +4 -0
  865. package/dist/plugins/link/locales/zh.d.ts.map +1 -0
  866. package/dist/plugins/link.mjs +1 -4
  867. package/dist/plugins/link.mjs.map +1 -1
  868. package/dist/plugins/list/ListLocale.d.ts +1 -8
  869. package/dist/plugins/list/ListLocale.d.ts.map +1 -1
  870. package/dist/plugins/list/ListPlugin.d.ts +1 -3
  871. package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
  872. package/dist/plugins/list/index.d.ts +2 -0
  873. package/dist/plugins/list/index.d.ts.map +1 -1
  874. package/dist/plugins/list/locales/ar.d.ts +4 -0
  875. package/dist/plugins/list/locales/ar.d.ts.map +1 -0
  876. package/dist/plugins/list/locales/de.d.ts +4 -0
  877. package/dist/plugins/list/locales/de.d.ts.map +1 -0
  878. package/dist/plugins/list/locales/es.d.ts +4 -0
  879. package/dist/plugins/list/locales/es.d.ts.map +1 -0
  880. package/dist/plugins/list/locales/fr.d.ts +4 -0
  881. package/dist/plugins/list/locales/fr.d.ts.map +1 -0
  882. package/dist/plugins/list/locales/hi.d.ts +4 -0
  883. package/dist/plugins/list/locales/hi.d.ts.map +1 -0
  884. package/dist/plugins/list/locales/pt.d.ts +4 -0
  885. package/dist/plugins/list/locales/pt.d.ts.map +1 -0
  886. package/dist/plugins/list/locales/ru.d.ts +4 -0
  887. package/dist/plugins/list/locales/ru.d.ts.map +1 -0
  888. package/dist/plugins/list/locales/zh.d.ts +4 -0
  889. package/dist/plugins/list/locales/zh.d.ts.map +1 -0
  890. package/dist/plugins/list.mjs +1 -4
  891. package/dist/plugins/list.mjs.map +1 -1
  892. package/dist/plugins/print/PrintLocale.d.ts +1 -8
  893. package/dist/plugins/print/PrintLocale.d.ts.map +1 -1
  894. package/dist/plugins/print/PrintPlugin.d.ts +1 -1
  895. package/dist/plugins/print/PrintPlugin.d.ts.map +1 -1
  896. package/dist/plugins/print/PrintServiceImpl.d.ts.map +1 -1
  897. package/dist/plugins/print/PrintStyleCollector.d.ts.map +1 -1
  898. package/dist/plugins/print/PrintTypes.d.ts +1 -1
  899. package/dist/plugins/print/PrintTypes.d.ts.map +1 -1
  900. package/dist/plugins/print/index.d.ts +5 -0
  901. package/dist/plugins/print/index.d.ts.map +1 -0
  902. package/dist/plugins/print/locales/ar.d.ts +4 -0
  903. package/dist/plugins/print/locales/ar.d.ts.map +1 -0
  904. package/dist/plugins/print/locales/de.d.ts +4 -0
  905. package/dist/plugins/print/locales/de.d.ts.map +1 -0
  906. package/dist/plugins/print/locales/es.d.ts +4 -0
  907. package/dist/plugins/print/locales/es.d.ts.map +1 -0
  908. package/dist/plugins/print/locales/fr.d.ts +4 -0
  909. package/dist/plugins/print/locales/fr.d.ts.map +1 -0
  910. package/dist/plugins/print/locales/hi.d.ts +4 -0
  911. package/dist/plugins/print/locales/hi.d.ts.map +1 -0
  912. package/dist/plugins/print/locales/pt.d.ts +4 -0
  913. package/dist/plugins/print/locales/pt.d.ts.map +1 -0
  914. package/dist/plugins/print/locales/ru.d.ts +4 -0
  915. package/dist/plugins/print/locales/ru.d.ts.map +1 -0
  916. package/dist/plugins/print/locales/zh.d.ts +4 -0
  917. package/dist/plugins/print/locales/zh.d.ts.map +1 -0
  918. package/dist/plugins/print.mjs +2 -0
  919. package/dist/plugins/print.mjs.map +1 -0
  920. package/dist/plugins/shared/ColorGrid.d.ts.map +1 -1
  921. package/dist/plugins/shared/ColorPickerPopup.d.ts +2 -1
  922. package/dist/plugins/shared/ColorPickerPopup.d.ts.map +1 -1
  923. package/dist/plugins/shared/KeyboardNav.d.ts +17 -0
  924. package/dist/plugins/shared/KeyboardNav.d.ts.map +1 -0
  925. package/dist/plugins/shared/PluginHelpers.d.ts +10 -0
  926. package/dist/plugins/shared/PluginHelpers.d.ts.map +1 -0
  927. package/dist/plugins/shared/PopupKeyboardPatterns.d.ts +1 -1
  928. package/dist/plugins/shared/PopupKeyboardPatterns.d.ts.map +1 -1
  929. package/dist/plugins/shared/PopupManager.d.ts +14 -2
  930. package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
  931. package/dist/plugins/shared/PopupPositioning.d.ts +1 -0
  932. package/dist/plugins/shared/PopupPositioning.d.ts.map +1 -1
  933. package/dist/plugins/shared/ShortcutFormatting.d.ts +9 -0
  934. package/dist/plugins/shared/ShortcutFormatting.d.ts.map +1 -0
  935. package/dist/plugins/shared/index.d.ts +12 -0
  936. package/dist/plugins/shared/index.d.ts.map +1 -0
  937. package/dist/plugins/shared.mjs +2 -0
  938. package/dist/plugins/shared.mjs.map +1 -0
  939. package/dist/plugins/strikethrough/StrikethroughLocale.d.ts +1 -8
  940. package/dist/plugins/strikethrough/StrikethroughLocale.d.ts.map +1 -1
  941. package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts +1 -3
  942. package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
  943. package/dist/plugins/strikethrough/index.d.ts +2 -0
  944. package/dist/plugins/strikethrough/index.d.ts.map +1 -1
  945. package/dist/plugins/strikethrough/locales/ar.d.ts +4 -0
  946. package/dist/plugins/strikethrough/locales/ar.d.ts.map +1 -0
  947. package/dist/plugins/strikethrough/locales/de.d.ts +4 -0
  948. package/dist/plugins/strikethrough/locales/de.d.ts.map +1 -0
  949. package/dist/plugins/strikethrough/locales/es.d.ts +4 -0
  950. package/dist/plugins/strikethrough/locales/es.d.ts.map +1 -0
  951. package/dist/plugins/strikethrough/locales/fr.d.ts +4 -0
  952. package/dist/plugins/strikethrough/locales/fr.d.ts.map +1 -0
  953. package/dist/plugins/strikethrough/locales/hi.d.ts +4 -0
  954. package/dist/plugins/strikethrough/locales/hi.d.ts.map +1 -0
  955. package/dist/plugins/strikethrough/locales/pt.d.ts +4 -0
  956. package/dist/plugins/strikethrough/locales/pt.d.ts.map +1 -0
  957. package/dist/plugins/strikethrough/locales/ru.d.ts +4 -0
  958. package/dist/plugins/strikethrough/locales/ru.d.ts.map +1 -0
  959. package/dist/plugins/strikethrough/locales/zh.d.ts +4 -0
  960. package/dist/plugins/strikethrough/locales/zh.d.ts.map +1 -0
  961. package/dist/plugins/strikethrough.mjs +1 -4
  962. package/dist/plugins/strikethrough.mjs.map +1 -1
  963. package/dist/plugins/super-sub/SuperSubLocale.d.ts +1 -8
  964. package/dist/plugins/super-sub/SuperSubLocale.d.ts.map +1 -1
  965. package/dist/plugins/super-sub/SuperSubPlugin.d.ts +1 -3
  966. package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
  967. package/dist/plugins/super-sub/index.d.ts +2 -0
  968. package/dist/plugins/super-sub/index.d.ts.map +1 -1
  969. package/dist/plugins/super-sub/locales/ar.d.ts +4 -0
  970. package/dist/plugins/super-sub/locales/ar.d.ts.map +1 -0
  971. package/dist/plugins/super-sub/locales/de.d.ts +4 -0
  972. package/dist/plugins/super-sub/locales/de.d.ts.map +1 -0
  973. package/dist/plugins/super-sub/locales/es.d.ts +4 -0
  974. package/dist/plugins/super-sub/locales/es.d.ts.map +1 -0
  975. package/dist/plugins/super-sub/locales/fr.d.ts +4 -0
  976. package/dist/plugins/super-sub/locales/fr.d.ts.map +1 -0
  977. package/dist/plugins/super-sub/locales/hi.d.ts +4 -0
  978. package/dist/plugins/super-sub/locales/hi.d.ts.map +1 -0
  979. package/dist/plugins/super-sub/locales/pt.d.ts +4 -0
  980. package/dist/plugins/super-sub/locales/pt.d.ts.map +1 -0
  981. package/dist/plugins/super-sub/locales/ru.d.ts +4 -0
  982. package/dist/plugins/super-sub/locales/ru.d.ts.map +1 -0
  983. package/dist/plugins/super-sub/locales/zh.d.ts +4 -0
  984. package/dist/plugins/super-sub/locales/zh.d.ts.map +1 -0
  985. package/dist/plugins/super-sub.mjs +1 -4
  986. package/dist/plugins/super-sub.mjs.map +1 -1
  987. package/dist/plugins/table/TableCommands.d.ts +8 -8
  988. package/dist/plugins/table/TableCommands.d.ts.map +1 -1
  989. package/dist/plugins/table/TableContextMenu.d.ts.map +1 -1
  990. package/dist/plugins/table/TableControlsDOM.d.ts +4 -4
  991. package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
  992. package/dist/plugins/table/TableLocale.d.ts +1 -8
  993. package/dist/plugins/table/TableLocale.d.ts.map +1 -1
  994. package/dist/plugins/table/TableNavigation.d.ts +1 -1
  995. package/dist/plugins/table/TableNavigation.d.ts.map +1 -1
  996. package/dist/plugins/table/TablePlugin.d.ts +3 -5
  997. package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
  998. package/dist/plugins/table/TableSelection.d.ts +2 -0
  999. package/dist/plugins/table/TableSelection.d.ts.map +1 -1
  1000. package/dist/plugins/table/index.d.ts +0 -5
  1001. package/dist/plugins/table/index.d.ts.map +1 -1
  1002. package/dist/plugins/table/locales/ar.d.ts +4 -0
  1003. package/dist/plugins/table/locales/ar.d.ts.map +1 -0
  1004. package/dist/plugins/table/locales/de.d.ts +4 -0
  1005. package/dist/plugins/table/locales/de.d.ts.map +1 -0
  1006. package/dist/plugins/table/locales/es.d.ts +4 -0
  1007. package/dist/plugins/table/locales/es.d.ts.map +1 -0
  1008. package/dist/plugins/table/locales/fr.d.ts +4 -0
  1009. package/dist/plugins/table/locales/fr.d.ts.map +1 -0
  1010. package/dist/plugins/table/locales/hi.d.ts +4 -0
  1011. package/dist/plugins/table/locales/hi.d.ts.map +1 -0
  1012. package/dist/plugins/table/locales/pt.d.ts +4 -0
  1013. package/dist/plugins/table/locales/pt.d.ts.map +1 -0
  1014. package/dist/plugins/table/locales/ru.d.ts +4 -0
  1015. package/dist/plugins/table/locales/ru.d.ts.map +1 -0
  1016. package/dist/plugins/table/locales/zh.d.ts +4 -0
  1017. package/dist/plugins/table/locales/zh.d.ts.map +1 -0
  1018. package/dist/plugins/table.mjs +1 -20
  1019. package/dist/plugins/table.mjs.map +1 -1
  1020. package/dist/plugins/text-color/TextColorLocale.d.ts +1 -8
  1021. package/dist/plugins/text-color/TextColorLocale.d.ts.map +1 -1
  1022. package/dist/plugins/text-color/TextColorPlugin.d.ts +1 -3
  1023. package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
  1024. package/dist/plugins/text-color/index.d.ts +2 -0
  1025. package/dist/plugins/text-color/index.d.ts.map +1 -1
  1026. package/dist/plugins/text-color/locales/ar.d.ts +4 -0
  1027. package/dist/plugins/text-color/locales/ar.d.ts.map +1 -0
  1028. package/dist/plugins/text-color/locales/de.d.ts +4 -0
  1029. package/dist/plugins/text-color/locales/de.d.ts.map +1 -0
  1030. package/dist/plugins/text-color/locales/es.d.ts +4 -0
  1031. package/dist/plugins/text-color/locales/es.d.ts.map +1 -0
  1032. package/dist/plugins/text-color/locales/fr.d.ts +4 -0
  1033. package/dist/plugins/text-color/locales/fr.d.ts.map +1 -0
  1034. package/dist/plugins/text-color/locales/hi.d.ts +4 -0
  1035. package/dist/plugins/text-color/locales/hi.d.ts.map +1 -0
  1036. package/dist/plugins/text-color/locales/pt.d.ts +4 -0
  1037. package/dist/plugins/text-color/locales/pt.d.ts.map +1 -0
  1038. package/dist/plugins/text-color/locales/ru.d.ts +4 -0
  1039. package/dist/plugins/text-color/locales/ru.d.ts.map +1 -0
  1040. package/dist/plugins/text-color/locales/zh.d.ts +4 -0
  1041. package/dist/plugins/text-color/locales/zh.d.ts.map +1 -0
  1042. package/dist/plugins/text-color.mjs +1 -4
  1043. package/dist/plugins/text-color.mjs.map +1 -1
  1044. package/dist/plugins/text-direction/DirectionDetection.d.ts +17 -0
  1045. package/dist/plugins/text-direction/DirectionDetection.d.ts.map +1 -0
  1046. package/dist/plugins/text-direction/ShiftDirectionHandler.d.ts +12 -0
  1047. package/dist/plugins/text-direction/ShiftDirectionHandler.d.ts.map +1 -0
  1048. package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts +35 -0
  1049. package/dist/plugins/text-direction/TextDirectionCorePlugin.d.ts.map +1 -0
  1050. package/dist/plugins/text-direction/TextDirectionLocale.d.ts +20 -0
  1051. package/dist/plugins/text-direction/TextDirectionLocale.d.ts.map +1 -0
  1052. package/dist/plugins/text-direction/TextDirectionMiddleware.d.ts +18 -0
  1053. package/dist/plugins/text-direction/TextDirectionMiddleware.d.ts.map +1 -0
  1054. package/dist/plugins/text-direction/TextDirectionPlugin.d.ts +59 -0
  1055. package/dist/plugins/text-direction/TextDirectionPlugin.d.ts.map +1 -0
  1056. package/dist/plugins/text-direction/index.d.ts +5 -0
  1057. package/dist/plugins/text-direction/index.d.ts.map +1 -0
  1058. package/dist/plugins/text-direction/locales/ar.d.ts +4 -0
  1059. package/dist/plugins/text-direction/locales/ar.d.ts.map +1 -0
  1060. package/dist/plugins/text-direction/locales/de.d.ts +4 -0
  1061. package/dist/plugins/text-direction/locales/de.d.ts.map +1 -0
  1062. package/dist/plugins/text-direction/locales/es.d.ts +4 -0
  1063. package/dist/plugins/text-direction/locales/es.d.ts.map +1 -0
  1064. package/dist/plugins/text-direction/locales/fr.d.ts +4 -0
  1065. package/dist/plugins/text-direction/locales/fr.d.ts.map +1 -0
  1066. package/dist/plugins/text-direction/locales/hi.d.ts +4 -0
  1067. package/dist/plugins/text-direction/locales/hi.d.ts.map +1 -0
  1068. package/dist/plugins/text-direction/locales/pt.d.ts +4 -0
  1069. package/dist/plugins/text-direction/locales/pt.d.ts.map +1 -0
  1070. package/dist/plugins/text-direction/locales/ru.d.ts +4 -0
  1071. package/dist/plugins/text-direction/locales/ru.d.ts.map +1 -0
  1072. package/dist/plugins/text-direction/locales/zh.d.ts +4 -0
  1073. package/dist/plugins/text-direction/locales/zh.d.ts.map +1 -0
  1074. package/dist/plugins/text-direction-advanced/index.d.ts +5 -0
  1075. package/dist/plugins/text-direction-advanced/index.d.ts.map +1 -0
  1076. package/dist/plugins/text-direction-advanced.mjs +2 -0
  1077. package/dist/plugins/text-direction-advanced.mjs.map +1 -0
  1078. package/dist/plugins/text-direction.mjs +2 -0
  1079. package/dist/plugins/text-direction.mjs.map +1 -0
  1080. package/dist/plugins/text-formatting/TextFormattingLocale.d.ts +1 -8
  1081. package/dist/plugins/text-formatting/TextFormattingLocale.d.ts.map +1 -1
  1082. package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts +1 -3
  1083. package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
  1084. package/dist/plugins/text-formatting/index.d.ts +2 -0
  1085. package/dist/plugins/text-formatting/index.d.ts.map +1 -1
  1086. package/dist/plugins/text-formatting/locales/ar.d.ts +4 -0
  1087. package/dist/plugins/text-formatting/locales/ar.d.ts.map +1 -0
  1088. package/dist/plugins/text-formatting/locales/de.d.ts +4 -0
  1089. package/dist/plugins/text-formatting/locales/de.d.ts.map +1 -0
  1090. package/dist/plugins/text-formatting/locales/es.d.ts +4 -0
  1091. package/dist/plugins/text-formatting/locales/es.d.ts.map +1 -0
  1092. package/dist/plugins/text-formatting/locales/fr.d.ts +4 -0
  1093. package/dist/plugins/text-formatting/locales/fr.d.ts.map +1 -0
  1094. package/dist/plugins/text-formatting/locales/hi.d.ts +4 -0
  1095. package/dist/plugins/text-formatting/locales/hi.d.ts.map +1 -0
  1096. package/dist/plugins/text-formatting/locales/pt.d.ts +4 -0
  1097. package/dist/plugins/text-formatting/locales/pt.d.ts.map +1 -0
  1098. package/dist/plugins/text-formatting/locales/ru.d.ts +4 -0
  1099. package/dist/plugins/text-formatting/locales/ru.d.ts.map +1 -0
  1100. package/dist/plugins/text-formatting/locales/zh.d.ts +4 -0
  1101. package/dist/plugins/text-formatting/locales/zh.d.ts.map +1 -0
  1102. package/dist/plugins/text-formatting.mjs +1 -4
  1103. package/dist/plugins/text-formatting.mjs.map +1 -1
  1104. package/dist/plugins/toolbar/ToolbarItem.d.ts +5 -20
  1105. package/dist/plugins/toolbar/ToolbarItem.d.ts.map +1 -1
  1106. package/dist/plugins/toolbar/ToolbarKeyboardNav.d.ts +5 -11
  1107. package/dist/plugins/toolbar/ToolbarKeyboardNav.d.ts.map +1 -1
  1108. package/dist/plugins/toolbar/ToolbarLocale.d.ts +2 -8
  1109. package/dist/plugins/toolbar/ToolbarLocale.d.ts.map +1 -1
  1110. package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
  1111. package/dist/plugins/toolbar/ToolbarPlugin.d.ts +2 -2
  1112. package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
  1113. package/dist/plugins/toolbar/ToolbarPopupController.d.ts +3 -4
  1114. package/dist/plugins/toolbar/ToolbarPopupController.d.ts.map +1 -1
  1115. package/dist/plugins/toolbar/ToolbarRenderers.d.ts +2 -1
  1116. package/dist/plugins/toolbar/ToolbarRenderers.d.ts.map +1 -1
  1117. package/dist/plugins/toolbar/index.d.ts +4 -1
  1118. package/dist/plugins/toolbar/index.d.ts.map +1 -1
  1119. package/dist/plugins/toolbar/locales/ar.d.ts +4 -0
  1120. package/dist/plugins/toolbar/locales/ar.d.ts.map +1 -0
  1121. package/dist/plugins/toolbar/locales/de.d.ts +4 -0
  1122. package/dist/plugins/toolbar/locales/de.d.ts.map +1 -0
  1123. package/dist/plugins/toolbar/locales/es.d.ts +4 -0
  1124. package/dist/plugins/toolbar/locales/es.d.ts.map +1 -0
  1125. package/dist/plugins/toolbar/locales/fr.d.ts +4 -0
  1126. package/dist/plugins/toolbar/locales/fr.d.ts.map +1 -0
  1127. package/dist/plugins/toolbar/locales/hi.d.ts +4 -0
  1128. package/dist/plugins/toolbar/locales/hi.d.ts.map +1 -0
  1129. package/dist/plugins/toolbar/locales/pt.d.ts +4 -0
  1130. package/dist/plugins/toolbar/locales/pt.d.ts.map +1 -0
  1131. package/dist/plugins/toolbar/locales/ru.d.ts +4 -0
  1132. package/dist/plugins/toolbar/locales/ru.d.ts.map +1 -0
  1133. package/dist/plugins/toolbar/locales/zh.d.ts +4 -0
  1134. package/dist/plugins/toolbar/locales/zh.d.ts.map +1 -0
  1135. package/dist/plugins/toolbar.mjs +1 -7
  1136. package/dist/plugins/toolbar.mjs.map +1 -1
  1137. package/dist/presets/FullPreset.d.ts +4 -1
  1138. package/dist/presets/FullPreset.d.ts.map +1 -1
  1139. package/dist/presets/MinimalPreset.d.ts +3 -0
  1140. package/dist/presets/MinimalPreset.d.ts.map +1 -1
  1141. package/dist/presets/PresetTypes.d.ts +3 -1
  1142. package/dist/presets/PresetTypes.d.ts.map +1 -1
  1143. package/dist/presets/full.d.ts +17 -0
  1144. package/dist/presets/full.d.ts.map +1 -0
  1145. package/dist/presets/full.mjs +2 -0
  1146. package/dist/presets/full.mjs.map +1 -0
  1147. package/dist/presets/minimal.d.ts +17 -0
  1148. package/dist/presets/minimal.d.ts.map +1 -0
  1149. package/dist/presets/minimal.mjs +2 -0
  1150. package/dist/presets/minimal.mjs.map +1 -0
  1151. package/dist/presets.d.ts +20 -0
  1152. package/dist/presets.d.ts.map +1 -0
  1153. package/dist/presets.mjs +2 -0
  1154. package/dist/presets.mjs.map +1 -0
  1155. package/dist/serialization/CSSClassCollector.d.ts +36 -0
  1156. package/dist/serialization/CSSClassCollector.d.ts.map +1 -0
  1157. package/dist/serialization/ContentHTMLTypes.d.ts +29 -0
  1158. package/dist/serialization/ContentHTMLTypes.d.ts.map +1 -0
  1159. package/dist/serialization/DocumentParser.d.ts +13 -0
  1160. package/dist/serialization/DocumentParser.d.ts.map +1 -0
  1161. package/dist/serialization/DocumentSerializer.d.ts +15 -0
  1162. package/dist/serialization/DocumentSerializer.d.ts.map +1 -0
  1163. package/dist/serialization/MarkSerializer.d.ts +19 -0
  1164. package/dist/serialization/MarkSerializer.d.ts.map +1 -0
  1165. package/dist/serialization/index.d.ts +12 -0
  1166. package/dist/serialization/index.d.ts.map +1 -0
  1167. package/dist/state/BlockBoundaryMovement.d.ts +7 -0
  1168. package/dist/state/BlockBoundaryMovement.d.ts.map +1 -0
  1169. package/dist/{model/NavigationUtils.d.ts → state/NavigationQueries.d.ts} +3 -3
  1170. package/dist/state/NavigationQueries.d.ts.map +1 -0
  1171. package/dist/style/StyleRuntime.d.ts +3 -7
  1172. package/dist/style/StyleRuntime.d.ts.map +1 -1
  1173. package/dist/test/PluginTestUtils.d.ts +0 -2
  1174. package/dist/test/PluginTestUtils.d.ts.map +1 -1
  1175. package/dist/test/TestUtils.d.ts +2 -2
  1176. package/dist/test/TestUtils.d.ts.map +1 -1
  1177. package/dist/view/BlockRendering.d.ts +10 -0
  1178. package/dist/view/BlockRendering.d.ts.map +1 -0
  1179. package/dist/view/BlockWrapperManagement.d.ts +27 -0
  1180. package/dist/view/BlockWrapperManagement.d.ts.map +1 -0
  1181. package/dist/view/CaretNavigation.d.ts +1 -8
  1182. package/dist/view/CaretNavigation.d.ts.map +1 -1
  1183. package/dist/view/CursorWrapper.d.ts.map +1 -1
  1184. package/dist/view/DecorationRendering.d.ts +17 -0
  1185. package/dist/view/DecorationRendering.d.ts.map +1 -0
  1186. package/dist/view/DomUtils.d.ts +4 -0
  1187. package/dist/view/DomUtils.d.ts.map +1 -0
  1188. package/dist/view/EditorView.d.ts +7 -10
  1189. package/dist/view/EditorView.d.ts.map +1 -1
  1190. package/dist/view/GapCursorNavigation.d.ts +12 -0
  1191. package/dist/view/GapCursorNavigation.d.ts.map +1 -0
  1192. package/dist/view/InlineRendering.d.ts +11 -0
  1193. package/dist/view/InlineRendering.d.ts.map +1 -0
  1194. package/dist/view/MarkRendering.d.ts +5 -0
  1195. package/dist/view/MarkRendering.d.ts.map +1 -1
  1196. package/dist/view/Reconciler.d.ts +2 -6
  1197. package/dist/view/Reconciler.d.ts.map +1 -1
  1198. package/dist/view/SelectionSync.d.ts +41 -2
  1199. package/dist/view/SelectionSync.d.ts.map +1 -1
  1200. package/dist/view/ViewMovementCommands.d.ts.map +1 -1
  1201. package/package.json +208 -8
  1202. package/dist/chunks/AttrRegistry-D9Jx_RVb.mjs +0 -16
  1203. package/dist/chunks/AttrRegistry-D9Jx_RVb.mjs.map +0 -1
  1204. package/dist/chunks/AttributedMarkCommands-BtLea72z.mjs +0 -80
  1205. package/dist/chunks/CaretNavigation-7JYpIKbs.mjs +0 -311
  1206. package/dist/chunks/CaretNavigation-7JYpIKbs.mjs.map +0 -1
  1207. package/dist/chunks/ColorGrid-Dneqb8if.mjs +0 -81
  1208. package/dist/chunks/ColorGrid-Dneqb8if.mjs.map +0 -1
  1209. package/dist/chunks/ColorPickerPopup-CiCLBbe9.mjs +0 -37
  1210. package/dist/chunks/ColorPickerPopup-CiCLBbe9.mjs.map +0 -1
  1211. package/dist/chunks/ColorValidation-CV4f1wu6.mjs +0 -39
  1212. package/dist/chunks/Document-Brtw2jL1.mjs +0 -190
  1213. package/dist/chunks/Document-Brtw2jL1.mjs.map +0 -1
  1214. package/dist/chunks/HTMLUtils-DTqQzcKR.mjs +0 -35
  1215. package/dist/chunks/HTMLUtils-DTqQzcKR.mjs.map +0 -1
  1216. package/dist/chunks/MarkCommands-6RUJ4L3r.mjs +0 -94
  1217. package/dist/chunks/MarkCommands-6RUJ4L3r.mjs.map +0 -1
  1218. package/dist/chunks/NavigationUtils-Cspt2ZrK.mjs +0 -47
  1219. package/dist/chunks/NavigationUtils-Cspt2ZrK.mjs.map +0 -1
  1220. package/dist/chunks/NodeResolver-C2XYkeOi.mjs +0 -81
  1221. package/dist/chunks/NodeResolver-C2XYkeOi.mjs.map +0 -1
  1222. package/dist/chunks/NodeSpec-NZVvcCuH.mjs +0 -8
  1223. package/dist/chunks/NodeSpec-NZVvcCuH.mjs.map +0 -1
  1224. package/dist/chunks/Platform-S_xqIqcM.mjs +0 -26
  1225. package/dist/chunks/Platform-S_xqIqcM.mjs.map +0 -1
  1226. package/dist/chunks/PopupPositioning-BTT-_pQ3.mjs +0 -32
  1227. package/dist/chunks/PopupPositioning-BTT-_pQ3.mjs.map +0 -1
  1228. package/dist/chunks/RangeIterator-Bh4Vl_6D.mjs +0 -16
  1229. package/dist/chunks/Selection-BRTab5hO.mjs +0 -52
  1230. package/dist/chunks/StyleRuntime-ChRjVQwL.mjs +0 -239
  1231. package/dist/chunks/StyleRuntime-ChRjVQwL.mjs.map +0 -1
  1232. package/dist/chunks/ToolbarItem-BpZggUGo.mjs +0 -8
  1233. package/dist/chunks/ToolbarItem-BpZggUGo.mjs.map +0 -1
  1234. package/dist/chunks/ToolbarKeyboardNav-DhpL8zNV.mjs +0 -46
  1235. package/dist/chunks/ToolbarKeyboardNav-DhpL8zNV.mjs.map +0 -1
  1236. package/dist/chunks/ToolbarPlugin-DpLVJ71w.mjs +0 -1031
  1237. package/dist/chunks/ToolbarPlugin-DpLVJ71w.mjs.map +0 -1
  1238. package/dist/chunks/TypeBrands-C09nE2qO.mjs +0 -27
  1239. package/dist/chunks/index--n1RGpq-.mjs +0 -171
  1240. package/dist/chunks/index--n1RGpq-.mjs.map +0 -1
  1241. package/dist/chunks/index-4or5UzNO.mjs +0 -168
  1242. package/dist/chunks/index-4or5UzNO.mjs.map +0 -1
  1243. package/dist/chunks/index-ABlTDvEX.mjs +0 -101
  1244. package/dist/chunks/index-ABlTDvEX.mjs.map +0 -1
  1245. package/dist/chunks/index-BAke7kNL.mjs +0 -467
  1246. package/dist/chunks/index-BAke7kNL.mjs.map +0 -1
  1247. package/dist/chunks/index-BXtw5PNN.mjs +0 -39
  1248. package/dist/chunks/index-BXtw5PNN.mjs.map +0 -1
  1249. package/dist/chunks/index-BhDXjueu.mjs +0 -924
  1250. package/dist/chunks/index-BhDXjueu.mjs.map +0 -1
  1251. package/dist/chunks/index-BqNUfq-y.mjs +0 -228
  1252. package/dist/chunks/index-BqNUfq-y.mjs.map +0 -1
  1253. package/dist/chunks/index-BvqkuEY1.mjs +0 -50
  1254. package/dist/chunks/index-BvqkuEY1.mjs.map +0 -1
  1255. package/dist/chunks/index-C1opJocO.mjs +0 -92
  1256. package/dist/chunks/index-C1opJocO.mjs.map +0 -1
  1257. package/dist/chunks/index-CWltg1wK.mjs +0 -124
  1258. package/dist/chunks/index-CWltg1wK.mjs.map +0 -1
  1259. package/dist/chunks/index-Cd3uJLP3.mjs +0 -73
  1260. package/dist/chunks/index-Cd3uJLP3.mjs.map +0 -1
  1261. package/dist/chunks/index-CluzpB2b.mjs +0 -63
  1262. package/dist/chunks/index-CluzpB2b.mjs.map +0 -1
  1263. package/dist/chunks/index-D3NlpmT1.mjs +0 -50
  1264. package/dist/chunks/index-D3NlpmT1.mjs.map +0 -1
  1265. package/dist/chunks/index-D515iymW.mjs +0 -542
  1266. package/dist/chunks/index-D515iymW.mjs.map +0 -1
  1267. package/dist/chunks/index-Dk49P9N4.mjs +0 -62
  1268. package/dist/chunks/index-Dk49P9N4.mjs.map +0 -1
  1269. package/dist/chunks/index-DyzigvbZ.mjs +0 -410
  1270. package/dist/chunks/index-DyzigvbZ.mjs.map +0 -1
  1271. package/dist/chunks/index-ErZ5_a1o.mjs +0 -296
  1272. package/dist/chunks/index-ErZ5_a1o.mjs.map +0 -1
  1273. package/dist/chunks/index-fsVJLutn.mjs +0 -118
  1274. package/dist/chunks/index-fsVJLutn.mjs.map +0 -1
  1275. package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs +0 -34
  1276. package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs.map +0 -1
  1277. package/dist/editor/DocumentParser.d.ts +0 -5
  1278. package/dist/editor/DocumentParser.d.ts.map +0 -1
  1279. package/dist/editor/DocumentSerializer.d.ts +0 -7
  1280. package/dist/editor/DocumentSerializer.d.ts.map +0 -1
  1281. package/dist/editor/MarkSerializer.d.ts +0 -11
  1282. package/dist/editor/MarkSerializer.d.ts.map +0 -1
  1283. package/dist/editor/PaperSize.d.ts.map +0 -1
  1284. package/dist/i18n/resolvePluginLocale.d.ts +0 -3
  1285. package/dist/i18n/resolvePluginLocale.d.ts.map +0 -1
  1286. package/dist/model/BuiltinSpecs.d.ts.map +0 -1
  1287. package/dist/model/HTMLParser.d.ts.map +0 -1
  1288. package/dist/model/NavigationUtils.d.ts.map +0 -1
  1289. package/dist/view/Platform.d.ts.map +0 -1
  1290. /package/dist/{input → model}/InputRule.d.ts +0 -0
  1291. /package/dist/{input → model}/InputRuleRegistry.d.ts +0 -0
  1292. /package/dist/{input → model}/Keymap.d.ts +0 -0
  1293. /package/dist/{input → model}/KeymapRegistry.d.ts +0 -0
  1294. /package/dist/{editor → model}/PaperSize.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zh.d.ts","sourceRoot":"","sources":["../../../../src/plugins/toolbar/locales/zh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,QAAA,MAAM,MAAM,EAAE,aAIb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,8 +1,2 @@
1
- import { T, a } from "../chunks/ToolbarPlugin-DpLVJ71w.mjs";
2
- import { f } from "../chunks/ToolbarItem-BpZggUGo.mjs";
3
- export {
4
- T as ToolbarPlugin,
5
- a as ToolbarServiceKey,
6
- f as formatShortcut
7
- };
1
+ import{a as t}from"../chunks/LocaleService-B6Z-wyAF.mjs";import{b as e}from"../chunks/Platform-CU6itXZo.mjs";import{S as o}from"../chunks/Plugin-OzM8Oxm_.mjs";import{f as n,n as r,a as i}from"../chunks/KeyboardNav-DsYhKKuV.mjs";import{P as l,a as s}from"../chunks/PopupManager-BM8IT6M7.mjs";import{s as a,a as c}from"../chunks/StyleRuntime-BmsLoEa8.mjs";import{a as d}from"../chunks/PopupPositioning-DtvqMSop.mjs";class p{_toolbarItems=/* @__PURE__ */new Map;_toolbarItemPluginMap=/* @__PURE__ */new Map;registerToolbarItem(t,e){if(this._toolbarItems.has(t.id))throw new Error(`ToolbarItem with id "${t.id}" is already registered.`);if(this._toolbarItems.set(t.id,t),e){const o=this._toolbarItemPluginMap.get(e)??[];o.push(t.id),this._toolbarItemPluginMap.set(e,o)}}getToolbarItemsByPlugin(t){const e=this._toolbarItemPluginMap.get(t)??[],o=[];for(const n of e){const t=this._toolbarItems.get(n);t&&o.push(t)}return o}getToolbarItem(t){return this._toolbarItems.get(t)}getToolbarItems(){return[...this._toolbarItems.values()]}removeToolbarItem(t){this._toolbarItems.delete(t);for(const[e,o]of this._toolbarItemPluginMap){const n=o.indexOf(t);if(-1!==n){o.splice(n,1),0===o.length&&this._toolbarItemPluginMap.delete(e);break}}}clear(){this._toolbarItems.clear(),this._toolbarItemPluginMap.clear()}}function u(t){for(let e=0;e<t.length;e++)if(!t[e]?.disabled)return e;return-1}const h={formattingOptionsAria:"Formatting options",moreToolsAria:"More tools",gridPickerLabel:(t,e)=>`${t} x ${e}`},b=/* @__PURE__ */Object.assign({"./locales/ar.ts":()=>import("../chunks/ar-D7PS3e2g.mjs"),"./locales/de.ts":()=>import("../chunks/de-BZWSyJTG.mjs"),"./locales/es.ts":()=>import("../chunks/es-Co4AJr8Y.mjs"),"./locales/fr.ts":()=>import("../chunks/fr-CEkk4UyZ.mjs"),"./locales/hi.ts":()=>import("../chunks/hi-CPuhj7IA.mjs"),"./locales/pt.ts":()=>import("../chunks/pt-CQRzEocL.mjs"),"./locales/ru.ts":()=>import("../chunks/ru-ClEM6OKY.mjs"),"./locales/zh.ts":()=>import("../chunks/zh-DCQZ6gss.mjs")});async function m(t){if("en"===t)return h;const e=b[`./locales/${t}.ts`];if(!e)return h;try{return(await e()).default}catch{return h}}const f={BurgerMenu:"burger-menu",Flow:"flow",None:"none"},v="notectl-toolbar-btn--overflow-hidden",g="notectl-toolbar-separator--overflow-hidden";class w{toolbar;context;onOverflowChange;onItemActivated;getActiveElement;ariaLabel;popupManager;entries=[];overflowButton=null;overflowDropdown=null;overflowHandle=null;overflowEntries=[];resizeObserver=null;closeHandler=null;constructor(t){this.toolbar=t.toolbar,this.ariaLabel=t.ariaLabel,this.context=t.context,this.onOverflowChange=t.onOverflowChange,this.onItemActivated=t.onItemActivated,this.getActiveElement=t.getActiveElement,this.popupManager=t.popupManager??null,this.resizeObserver=new ResizeObserver(()=>this.recalculate()),this.resizeObserver.observe(this.toolbar)}update(t){this.entries=t.map(t=>({element:t.element,item:t.item})),this.recalculate()}recalculate(){if(0===this.entries.length)return;this.closeDropdown(),this.resetVisibility(),this.ensureOverflowButton(),this.setOverflowButtonVisible(!1);const t=this.measureAvailableWidth(),e=Array.from(this.toolbar.children),o=this.measureChildWidths(e),n=t-34-2;let r=0,i=!1;const l=[];for(const s of e){if(s===this.overflowButton)continue;if(s.classList.contains("notectl-toolbar-separator")){if(i){s.classList.add(g);continue}const t=(o.get(s)??0)+2;r+t>n?(i=!0,s.classList.add(g)):r+=t;continue}const t=this.entries.find(t=>t.element===s);if(!t)continue;if(i){t.element.classList.add(v),l.push(t);continue}const e=(o.get(s)??0)+2;r+e>n?(i=!0,t.element.classList.add(v),l.push(t)):r+=e}this.overflowEntries=l,this.hideTrailingSeparators(),this.setOverflowButtonVisible(l.length>0),this.notifyChange()}updateItemStates(t){if(!this.overflowDropdown)return;const e=Array.from(this.overflowDropdown.querySelectorAll(".notectl-dropdown__item"));for(const o of e){const e=o.getAttribute("data-toolbar-item"),n=this.overflowEntries.find(t=>t.item.id===e);if(!n)continue;const r=n.item.isActive?.(t)??!1,i=n.item.isEnabled?.(t)??!0;if(o.classList.toggle("notectl-dropdown__item--active",r),o.disabled=!i,"combobox"===n.item.popupType){const e=o.querySelector(".notectl-dropdown__item-label");e&&(e.textContent=n.item.getLabel(t))}if(n.item.getIcon){const e=n.item.getIcon(t),r=o.querySelector(".notectl-dropdown__item-icon");r&&r.innerHTML!==e&&(r.innerHTML=e)}}}destroy(){this.resizeObserver?.disconnect(),this.resizeObserver=null,this.closeDropdown(),this.overflowButton?.remove(),this.overflowButton=null,this.entries=[],this.overflowEntries=[]}measureChildWidths(t){const e=/* @__PURE__ */new Map;for(const o of t)o!==this.overflowButton&&e.set(o,o.offsetWidth);return e}measureAvailableWidth(){const t=getComputedStyle(this.toolbar),e=Number.parseFloat(t.paddingLeft)||0,o=Number.parseFloat(t.paddingRight)||0;return this.toolbar.clientWidth-e-o}resetVisibility(){for(const e of this.entries)e.element.classList.remove(v);const t=Array.from(this.toolbar.querySelectorAll(".notectl-toolbar-separator"));for(const e of t)e.classList.remove(g)}setOverflowButtonVisible(t){this.overflowButton&&(this.overflowButton.classList.toggle("notectl-toolbar-overflow-btn--hidden",!t),t||this.overflowButton.removeAttribute("tabindex"))}ensureOverflowButton(){if(this.overflowButton)return;const t=document.createElement("button");t.type="button",t.className="notectl-toolbar-overflow-btn",t.setAttribute("aria-label",this.ariaLabel),t.setAttribute("aria-haspopup","true"),t.setAttribute("aria-expanded","false"),t.innerHTML='<svg viewBox="0 0 16 16" width="16" height="16"><circle cx="3" cy="8" r="1.5" fill="currentColor"/><circle cx="8" cy="8" r="1.5" fill="currentColor"/><circle cx="13" cy="8" r="1.5" fill="currentColor"/></svg>',t.addEventListener("mousedown",t=>{t.preventDefault(),this.toggleDropdown()}),this.toolbar.appendChild(t),this.overflowButton=t}toggleDropdown(){this.overflowDropdown?this.closeDropdown():this.openDropdown()}openDropdown(){if(!this.overflowButton||0===this.overflowEntries.length)return;const t=document.createElement("div");t.className="notectl-toolbar-popup notectl-dropdown",t.setAttribute("role","menu"),this.renderDropdownItems(t,this.context.getState()),this.popupManager?(this.overflowHandle=this.popupManager.open({anchor:this.overflowButton,className:"notectl-toolbar-popup notectl-dropdown",ariaRole:"menu",position:"below-end",referenceNode:this.overflowButton,restoreFocusTo:this.overflowButton,onClose:()=>{this.overflowHandle=null,this.overflowDropdown=null,this.overflowButton&&this.overflowButton.setAttribute("aria-expanded","false")},content:t=>{this.renderDropdownItems(t,this.context.getState()),this.overflowDropdown=t,t.addEventListener("keydown",t=>this.handleDropdownKeydown(t))}}),this.overflowButton.setAttribute("aria-expanded","true")):(this.positionDropdown(t),d(t,this.overflowButton),this.overflowDropdown=t,this.overflowButton.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{const e=t.querySelector('[role="menuitem"]');e?.focus()}),t.addEventListener("keydown",t=>this.handleDropdownKeydown(t)),this.registerCloseHandler())}renderDropdownItems(t,e){let o=null;for(const n of this.overflowEntries){if(null!==o&&n.item.group!==o){const e=document.createElement("div");e.className="notectl-dropdown__separator",e.setAttribute("role","separator"),t.appendChild(e)}o=n.item.group;const r=document.createElement("button");r.type="button",r.className="notectl-dropdown__item",r.setAttribute("role","menuitem"),r.setAttribute("tabindex","-1"),r.setAttribute("data-toolbar-item",n.item.id);const i=document.createElement("span");i.className="notectl-dropdown__item-icon","combobox"!==n.item.popupType&&(i.innerHTML=n.item.icon),r.appendChild(i);const l=document.createElement("span");l.className="notectl-dropdown__item-label",l.textContent="combobox"===n.item.popupType?n.item.getLabel(e):n.item.tooltip??n.item.label,r.appendChild(l),r.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation(),this.activateOverflowItem(n)}),t.appendChild(r)}}positionDropdown(t){if(!this.overflowButton)return;const o=this.overflowButton.getBoundingClientRect();if(e(this.toolbar))a(t,{position:"fixed",top:`${o.bottom+2}px`,left:`${o.left}px`,right:"auto",zIndex:"10000"});else{const e=window.innerWidth-o.right;a(t,{position:"fixed",top:`${o.bottom+2}px`,right:`${e}px`,left:"auto",zIndex:"10000"})}}registerCloseHandler(){this.closeHandler=t=>{const e=t.composedPath();this.overflowDropdown&&!e.includes(this.overflowDropdown)&&this.overflowButton&&!e.includes(this.overflowButton)&&this.closeDropdown()},setTimeout(()=>{this.closeHandler&&document.addEventListener("mousedown",this.closeHandler)},0)}closeDropdown(){if(this.overflowHandle){const t=this.overflowHandle;return this.overflowHandle=null,this.overflowDropdown=null,t.close(),void(this.overflowButton&&this.overflowButton.setAttribute("aria-expanded","false"))}this.overflowDropdown&&(this.overflowDropdown.remove(),this.overflowDropdown=null),this.overflowButton&&this.overflowButton.setAttribute("aria-expanded","false"),this.closeHandler&&(document.removeEventListener("mousedown",this.closeHandler),this.closeHandler=null)}activateOverflowItem(t){this.closeDropdown(),t.item.popupType&&this.overflowButton?this.onItemActivated(this.overflowButton,t.item):this.context.executeCommand(t.item.command)}handleDropdownKeydown(t){if(!this.overflowDropdown)return;if("Escape"===t.key||"Tab"===t.key)return t.preventDefault(),t.stopPropagation(),this.closeDropdown(),void this.overflowButton?.focus();const e=Array.from(this.overflowDropdown.querySelectorAll('[role="menuitem"]')),o=e.indexOf(this.getActiveElement());switch(t.key){case"ArrowDown":{t.preventDefault();const r=n(e,o,1);e[r]?.focus();break}case"ArrowUp":{t.preventDefault();const r=n(e,o,-1);e[r]?.focus();break}case"Enter":case" ":{t.preventDefault();const n=e[o];if(!n)break;const r=n.getAttribute("data-toolbar-item"),i=this.overflowEntries.find(t=>t.item.id===r);i&&this.activateOverflowItem(i);break}}}hideTrailingSeparators(){const t=Array.from(this.toolbar.children);for(let e=t.length-1;e>=0;e--){const o=t[e];if(o&&o!==this.overflowButton)if(o.classList.contains("notectl-toolbar-separator"))o.classList.contains(g)||o.classList.add(g);else if(!o.classList.contains(v))break}}notifyChange(){const t=this.entries.filter(t=>!t.element.classList.contains(v)).map(t=>t.element);this.onOverflowChange(t,this.overflowEntries.length>0?this.overflowButton:null)}}function x(t,e,o){const n=t.querySelectorAll(".notectl-grid-picker__cell");for(const r of n){const t=Number(r.getAttribute("data-row")),n=Number(r.getAttribute("data-col"));r.classList.toggle("notectl-grid-picker__cell--highlighted",t<=e&&n<=o)}}function y(){const t=document.createElement("span");return t.className="notectl-toolbar-separator",t.setAttribute("role","separator"),t}class E{activePopup=null;activePopupButton=null;activeHandle=null;getActiveElement;locale;popupManager=null;constructor(t,e=h){this.getActiveElement=t,this.locale=e}setPopupManager(t){this.popupManager=t}isOpen(){return null!==this.activePopup}toggle(t,e,o){this.activePopup?this.close():this.openViaManager(t,e,o)}close(){if(this.activeHandle){const t=this.activeHandle;return this.activeHandle=null,this.clearButtonState(),void t.close()}this.clearButtonState(),this.activePopup&&(this.activePopup.remove(),this.activePopup=null)}closeAndRestoreFocus(){const t=this.activePopupButton;this.close(),t?.focus()}destroy(){this.close()}openViaManager(t,e,o){this.popupManager&&(this.activePopupButton=t,t.classList.add("notectl-toolbar-btn--popup-open"),t.setAttribute("aria-expanded","true"),this.activeHandle=this.popupManager.open({anchor:t,className:"notectl-toolbar-popup",referenceNode:t,restoreFocusTo:t,position:"below-start",onClose:()=>{this.activeHandle=null,this.clearButtonState(),this.activePopup=null},content:(t,n)=>{this.activePopup=t,this.renderPopupContent(t,e,o,n),t.addEventListener("keydown",t=>this.handlePopupKeydown(t))}}))}renderPopupContent(t,e,o,n){const r=()=>{n({restoreFocusTo:null}),o.getContainer().focus()};switch(e.popupType){case"gridPicker":!function(t,e,o,n=h){t.className+=" notectl-grid-picker";const r=document.createElement("div");r.className="notectl-grid-picker__grid",r.setAttribute("role","grid"),a(r,{display:"grid",gridTemplateColumns:`repeat(${e.maxCols}, 1fr)`,gap:"2px",padding:"8px"});const i=document.createElement("div");i.className="notectl-grid-picker__label",i.textContent=n.gridPickerLabel(1,1),a(i,{textAlign:"center",padding:"4px",fontSize:"12px"}),i.setAttribute("aria-live","polite");for(let l=1;l<=e.maxRows;l++)for(let t=1;t<=e.maxCols;t++){const s=document.createElement("div");s.className="notectl-grid-picker__cell",s.setAttribute("role","gridcell"),s.setAttribute("tabindex","-1"),s.setAttribute("aria-label",n.gridPickerLabel(l,t)),a(s,{width:"20px",height:"20px",border:"1px solid #ccc",cursor:"pointer"}),s.setAttribute("data-row",String(l)),s.setAttribute("data-col",String(t)),s.addEventListener("mouseenter",()=>{x(r,l,t),i.textContent=n.gridPickerLabel(l,t)}),s.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation()}),s.addEventListener("click",()=>{e.onSelect(l,t),o()}),r.appendChild(s)}t.appendChild(r),t.appendChild(i)}(t,e.popupConfig,r,this.locale);break;case"dropdown":!function(t,e,n,r){t.classList.add("notectl-dropdown"),t.setAttribute("role","menu");for(const i of e.items){const e=document.createElement("button");if(e.type="button",e.className="notectl-dropdown__item",e.setAttribute("role","menuitem"),e.setAttribute("tabindex","-1"),i.icon){const t=document.createElement("span");t.className="notectl-dropdown__item-icon",t.innerHTML=i.icon,e.appendChild(t)}const n=document.createElement("span");n.className="notectl-dropdown__item-label",n.textContent=i.label,e.appendChild(n),e.addEventListener("mousedown",t=>{t.preventDefault(),t.stopPropagation()}),e.addEventListener("click",()=>{var t;t=i.command,o.executeCommand(t),r()}),t.appendChild(e)}}(t,e.popupConfig,0,r);break;case"custom":case"combobox":e.renderPopup(t,o,n)}}clearButtonState(){this.activePopupButton&&(this.activePopupButton.classList.remove("notectl-toolbar-btn--popup-open"),this.activePopupButton.setAttribute("aria-expanded","false"),this.activePopupButton=null)}handlePopupKeydown(t){if(!this.activePopup)return;if("Escape"===t.key)return t.preventDefault(),t.stopPropagation(),void this.closeAndRestoreFocus();if("Tab"===t.key)return t.preventDefault(),void this.closeAndRestoreFocus();const e=this.activePopup.querySelectorAll('[role="menuitem"]');e.length>0?this.handleDropdownKeydown(t,e):null!==this.activePopup.querySelector(".notectl-grid-picker__cell")?this.handleGridKeydown(t):this.handleCustomPopupKeydown(t)}handleDropdownKeydown(t,e){const o=Array.from(e),r=o.indexOf(this.getActiveElement());switch(t.key){case"ArrowDown":{t.preventDefault();const e=n(o,r,1);o[e]?.focus();break}case"ArrowUp":{t.preventDefault();const e=n(o,r,-1);o[e]?.focus();break}case"Enter":case" ":{t.preventDefault();const e=o[r];e&&e.click();break}}}handleGridKeydown(t){const o=this.getActiveElement(),n=Number(o?.getAttribute("data-row")??1),i=Number(o?.getAttribute("data-col")??1),l=this.activePopup?.querySelector(".notectl-grid-picker__grid")??null;if(!l)return;const s=l.querySelector(".notectl-grid-picker__cell:last-child"),a=Number(s?.getAttribute("data-col")??1),c=Number(s?.getAttribute("data-row")??1);if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(t.key)){t.preventDefault();const[o,s]=r(n,i,c,a,t.key,!!this.activePopup&&e(this.activePopup)),d=l.querySelector(`.notectl-grid-picker__cell[data-row="${o}"][data-col="${s}"]`);d?.focus(),x(l,o,s);const p=this.activePopup?.querySelector(".notectl-grid-picker__label")??null;p&&(p.textContent=this.locale.gridPickerLabel(o,s))}"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),o?.click())}handleCustomPopupKeydown(t){if(!this.activePopup)return;const e=Array.from(this.activePopup.querySelectorAll("button"));if(0===e.length)return;const o=this.getActiveElement(),r=e.indexOf(o);switch(t.key){case"ArrowDown":{t.preventDefault();const o=n(e,r,1);e[o]?.focus();break}case"ArrowUp":{t.preventDefault();const o=n(e,r,-1);e[o]?.focus();break}case"Enter":case" ":t.preventDefault(),o&&o.dispatchEvent(new MouseEvent("mousedown",{bubbles:!0,cancelable:!0}))}}}class A{element;timer=null;target=null;isPopupActive;static TOOLTIP_ID="notectl-toolbar-tooltip";constructor(t){this.isPopupActive=t,this.element=document.createElement("div"),this.element.className="notectl-toolbar-tooltip",this.element.id=A.TOOLTIP_ID,this.element.setAttribute("role","tooltip"),c(this.element,"display","none")}show(t){if(this.hide(),this.isPopupActive()||t.disabled)return;const e=t.getAttribute("data-tooltip");e&&(this.target=t,this.timer=setTimeout(()=>{if(this.isPopupActive())return;this.element.textContent=e,c(this.element,"display","");const o=t.getRootNode();o instanceof ShadowRoot&&!this.element.parentNode?o.appendChild(this.element):o instanceof ShadowRoot||this.element.parentNode||document.body.appendChild(this.element),t.setAttribute("aria-describedby",A.TOOLTIP_ID);const n=t.getBoundingClientRect();a(this.element,{position:"fixed",top:`${n.bottom+6}px`,left:`${n.left+n.width/2}px`,transform:"translateX(-50%)"})},500))}hide(){this.timer&&(clearTimeout(this.timer),this.timer=null),this.target&&(this.target.removeAttribute("aria-describedby"),this.target=null),c(this.element,"display","none")}destroy(){this.hide(),this.element.remove()}}const k=new o("toolbar");class _{id="toolbar";name="Toolbar";priority=10;context=null;toolbarElement=null;buttons=[];hiddenItems=/* @__PURE__ */new Set;layoutConfig;overflowBehavior;focusedIndex=0;tooltip=null;popupController=null;popupManager=null;overflowController=null;visibleElements=[];locale;constructor(t){this.layoutConfig=t??null,this.overflowBehavior=t?.overflow??f.BurgerMenu}async init(e){const o=e.getService(t),n=o?.getLocale()??"en";this.locale="en"===n?h:await m(n),e.registerStyleSheet('\n/* Toolbar */\n.notectl-plugin-container--top {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: nowrap;\n\tborder-bottom: 1px solid var(--notectl-border);\n\tbackground: var(--notectl-toolbar-bg, var(--notectl-surface-raised));\n\tmin-height: 40px;\n}\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: start;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\tline-height: 1.4;\n\tfont-family: inherit;\n\twhite-space: nowrap;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-dropdown__item:focus-visible {\n\tbackground: var(--notectl-hover-bg);\n\toutline: none;\n}\n\n.notectl-dropdown__item-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-fg-muted);\n\tflex-shrink: 0;\n}\n\n.notectl-dropdown__item-label {\n\tflex: 1;\n}\n\n/* Overflow behavior: flow mode — toolbar wraps to additional rows */\n.notectl-toolbar[data-overflow="flow"] {\n\tflex-wrap: wrap;\n\toverflow: visible;\n}\n\n/* Overflow behavior: none — toolbar clips without any responsive behavior */\n.notectl-toolbar[data-overflow="none"] {\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n}\n\n/* Overflow: hidden items (burger-menu mode) */\n.notectl-toolbar-btn--overflow-hidden,\n.notectl-toolbar-separator--overflow-hidden {\n\tdisplay: none;\n}\n\n/* Overflow "more" button */\n.notectl-toolbar-overflow-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 16px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\tmargin-inline-start: auto;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-overflow-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-overflow-btn--hidden {\n\tdisplay: none;\n}\n\n.notectl-toolbar-overflow-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n/* Dropdown item states shared by all dropdown menus (including overflow) */\n.notectl-dropdown__item:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:disabled:hover {\n\t\tbackground: none;\n\t}\n}\n\n.notectl-dropdown__item--active {\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-dropdown__item-icon svg {\n\tdisplay: block;\n\twidth: 16px;\n\theight: 16px;\n\tfill: currentColor;\n}\n\n.notectl-dropdown__separator {\n\theight: 1px;\n\tbackground: var(--notectl-border);\n\tmargin: 4px 0;\n}\n\n/* Combobox-style toolbar buttons (shared base for font, fontSize, heading, etc.) */\n.notectl-toolbar-btn[role="combobox"] {\n\twidth: auto;\n\tpadding: 0 8px;\n\tgap: 4px;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-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: start;\n\tline-height: 30px;\n}\n\n.notectl-toolbar-combobox__arrow {\n\tflex-shrink: 0;\n\tfont-size: 11px;\n\tcolor: var(--notectl-fg-muted);\n\tline-height: 30px;\n}\n\n/* Link Popup */\n.notectl-link-popup {\n\tpadding: 8px;\n\tmin-width: 200px;\n}\n\n.notectl-link-popup__input {\n\twidth: 100%;\n\tpadding: 4px;\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tfont-size: 13px;\n\tcolor: var(--notectl-fg);\n\tbackground: var(--notectl-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'),this.context=e,this.popupManager=new l(e.getContainer()),e.registerService(s,this.popupManager),this.popupController=new E(()=>this.getActiveElement(),this.locale),this.popupController.setPopupManager(this.popupManager),this.tooltip=new A(()=>this.popupController?.isOpen()??!1),e.registerService(k,{refresh:()=>this.updateButtonStates(e.getState()),closePopup:()=>this.popupController?.close()}),this.createToolbarElement()}getOverflowBehavior(){return this.overflowBehavior}setOverflowBehavior(t){t!==this.overflowBehavior&&(this.overflowBehavior=t,this.applyOverflowBehavior(),this.renderItems())}onReady(){this.renderItems()}destroy(){this.overflowController?.destroy(),this.overflowController=null,this.popupController?.destroy(),this.popupController=null,this.popupManager?.destroy(),this.popupManager=null,this.tooltip?.destroy(),this.tooltip=null,this.toolbarElement&&(this.toolbarElement.remove(),this.toolbarElement=null),this.buttons=[],this.visibleElements=[],this.context=null}onStateChange(t,e,o){this.updateButtonStates(e)}onReadOnlyChange(t){this.toolbarElement&&(this.toolbarElement.hidden=t)}onConfigure(t){for(const[e,o]of Object.entries(t))!1===o?this.hiddenItems.add(e):this.hiddenItems.delete(e);this.renderItems()}createToolbarElement(){if(!this.context)return;this.toolbarElement&&this.toolbarElement.remove(),this.buttons=[];const t=this.context.getPluginContainer("top");this.toolbarElement=document.createElement("div"),this.toolbarElement.setAttribute("role","toolbar"),this.toolbarElement.setAttribute("aria-label",this.locale.formattingOptionsAria),this.toolbarElement.setAttribute("data-notectl-no-print",""),this.toolbarElement.className="notectl-toolbar",this.toolbarElement.addEventListener("keydown",t=>this.handleToolbarKeydown(t)),this.applyOverflowBehavior(),t.appendChild(this.toolbarElement)}applyOverflowBehavior(){this.toolbarElement&&this.context&&(this.overflowController?.destroy(),this.overflowController=null,this.toolbarElement.setAttribute("data-overflow",this.overflowBehavior),this.overflowBehavior===f.BurgerMenu?this.overflowController=new w({toolbar:this.toolbarElement,ariaLabel:this.locale.moreToolsAria,context:this.context,popupManager:this.popupManager??void 0,onOverflowChange:(t,e)=>{this.visibleElements=e?[...t,e]:[...t],this.initRovingTabindex()},onItemActivated:(t,e)=>{this.activateButton(t,e)},getActiveElement:()=>this.getActiveElement()}):this.visibleElements=[])}renderItems(){if(this.context&&this.toolbarElement){for(const t of this.buttons)t.element.remove();this.buttons=[];for(const t of this.toolbarElement.querySelectorAll(".notectl-toolbar-separator"))t.remove();this.layoutConfig?this.renderItemsByLayout():this.renderItemsByGroup(),this.buttons.length>0&&!this.toolbarElement.parentElement&&this.context.getPluginContainer("top").appendChild(this.toolbarElement),this.overflowController?.update(this.buttons),this.initRovingTabindex(),this.updateButtonStates(this.context.getState())}}getTabElements(){return this.visibleElements.length>0?this.visibleElements:this.buttons.map(t=>t.element)}initRovingTabindex(){const t=this.getTabElements(),e=u(t);this.focusedIndex=e>=0?e:0,i(t,this.focusedIndex)}setRovingFocus(t){const e=this.getTabElements();t<0||t>=e.length||(this.focusedIndex=t,i(e,t),e[t]?.focus())}getActiveElement(){const t=this.toolbarElement?.getRootNode();return t instanceof ShadowRoot?t.activeElement:document.activeElement}syncFocusedIndex(){const t=this.getActiveElement(),e=this.getTabElements().findIndex(e=>e===t);e>=0&&(this.focusedIndex=e)}handleToolbarKeydown(t){const o=this.getTabElements();var n;if(0!==o.length)switch(this.syncFocusedIndex(),t.key){case"ArrowRight":case"ArrowLeft":{t.preventDefault();const r=(n=!!this.toolbarElement&&e(this.toolbarElement),"ArrowRight"===t.key?n?-1:1:n?1:-1),i=function(t,e,o){const n=t.length;if(0===n)return-1;let r=e;for(let i=0;i<n;i++)if(r=(r+o+n)%n,!t[r]?.disabled)return r;return e}(o,this.focusedIndex,r);this.setRovingFocus(i);break}case"Home":{t.preventDefault();const e=u(o);e>=0&&this.setRovingFocus(e);break}case"End":{t.preventDefault();const e=function(t){for(let e=t.length-1;e>=0;e--)if(!t[e]?.disabled)return e;return-1}(o);e>=0&&this.setRovingFocus(e);break}case"Enter":case" ":{t.preventDefault();const e=o[this.focusedIndex],n=this.buttons.find(t=>t.element===e);n&&this.activateButton(n.element,n.item);break}}}activateButton(t,e){this.tooltip?.hide(),e.popupType&&this.context?this.popupController?.toggle(t,e,this.context):this.context?.executeCommand(e.command)}renderItemsByLayout(){if(!this.context||!this.toolbarElement||!this.layoutConfig)return;const t=this.context.getToolbarRegistry();let e=!0;for(const o of this.layoutConfig.groups){const n=[];for(const e of o){const o=t.getToolbarItemsByPlugin(e).filter(t=>!this.hiddenItems.has(t.id));n.push(...o)}if(0!==n.length){e||this.toolbarElement.appendChild(y()),e=!1;for(const t of n){const e=this.createButton(t);this.toolbarElement.appendChild(e.element),this.buttons.push(e)}}}0===this.buttons.length&&this.toolbarElement.remove()}renderItemsByGroup(){if(!this.context||!this.toolbarElement)return;const t=this.context.getToolbarRegistry().getToolbarItems().filter(t=>!this.hiddenItems.has(t.id));if(0===t.length)return void this.toolbarElement.remove();const e=/* @__PURE__ */new Map;for(const n of t){const t=e.get(n.group)??[];t.push(n),e.set(n.group,t)}let o=!0;for(const[,n]of e){o||this.toolbarElement.appendChild(y()),o=!1;for(const t of n){const e=this.createButton(t);this.toolbarElement.appendChild(e.element),this.buttons.push(e)}}}createButton(t){const e=document.createElement("button");e.type="button",e.className=`notectl-toolbar-btn notectl-toolbar-btn--${t.id}`,e.setAttribute("aria-pressed","false"),e.setAttribute("aria-label",t.label),e.setAttribute("data-toolbar-item",t.id),e.setAttribute("data-tooltip",t.tooltip??t.label);let o=null;if("combobox"===t.popupType){e.setAttribute("role","combobox"),e.setAttribute("aria-haspopup","listbox"),e.setAttribute("aria-expanded","false");const n=document.createElement("span");n.className="notectl-toolbar-combobox__label";const r=this.context?.getState();r&&(n.textContent=t.getLabel(r)),e.appendChild(n),o=n;const i=document.createElement("span");i.className="notectl-toolbar-combobox__arrow",i.setAttribute("aria-hidden","true"),i.textContent="▾",e.appendChild(i)}else{t.popupType&&(e.setAttribute("aria-haspopup","true"),e.setAttribute("aria-expanded","false"));const o=document.createElement("span");o.className="notectl-toolbar-btn__icon",o.innerHTML=t.icon,e.appendChild(o)}return e.addEventListener("mousedown",o=>{o.preventDefault(),this.activateButton(e,t)}),e.addEventListener("mouseenter",()=>this.tooltip?.show(e)),e.addEventListener("mouseleave",()=>this.tooltip?.hide()),e.addEventListener("focus",()=>this.tooltip?.show(e)),e.addEventListener("blur",()=>this.tooltip?.hide()),{element:e,item:t,comboLabelEl:o}}updateButtonStates(t){for(const e of this.buttons){const o=e.item.isActive?.(t)??!1,n=e.item.isEnabled?.(t)??!0;if(e.element.setAttribute("aria-pressed",String(o)),e.element.classList.toggle("notectl-toolbar-btn--active",o),e.element.disabled=!n,n?e.element.removeAttribute("aria-disabled"):e.element.setAttribute("aria-disabled","true"),e.comboLabelEl&&"combobox"===e.item.popupType&&(e.comboLabelEl.textContent=e.item.getLabel(t)),e.item.getIcon){const o=e.item.getIcon(t),n=e.element.querySelector(".notectl-toolbar-btn__icon");n&&n.innerHTML!==o&&(n.innerHTML=o)}}this.overflowController?.updateItemStates(t)}}export{h as TOOLBAR_LOCALE_EN,f as ToolbarOverflowBehavior,_ as ToolbarPlugin,p as ToolbarRegistry,k as ToolbarServiceKey,m as loadToolbarLocale};
8
2
  //# sourceMappingURL=toolbar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"toolbar.mjs","sources":["../../src/plugins/toolbar/ToolbarRegistry.ts","../../src/plugins/toolbar/ToolbarKeyboardNav.ts","../../src/plugins/toolbar/ToolbarLocale.ts","../../src/plugins/toolbar/ToolbarOverflowBehavior.ts","../../src/plugins/toolbar/ToolbarOverflowController.ts","../../src/plugins/toolbar/ToolbarRenderers.ts","../../src/plugins/toolbar/ToolbarPopupController.ts","../../src/plugins/toolbar/ToolbarTooltip.ts","../../src/plugins/toolbar/ToolbarPlugin.ts","../../src/editor/styles/toolbar.ts"],"sourcesContent":["/**\n * ToolbarRegistry: manages plugin-registered toolbar items\n * with per-plugin tracking for clean teardown.\n */\n\nimport type { ToolbarItem } from './ToolbarItem.js';\n\nexport class ToolbarRegistry {\n\tprivate readonly _toolbarItems = new Map<string, ToolbarItem>();\n\tprivate readonly _toolbarItemPluginMap = new Map<string, string[]>();\n\n\tregisterToolbarItem(item: ToolbarItem, pluginId?: string): void {\n\t\tif (this._toolbarItems.has(item.id)) {\n\t\t\tthrow new Error(`ToolbarItem with id \"${item.id}\" is already registered.`);\n\t\t}\n\t\tthis._toolbarItems.set(item.id, item);\n\t\tif (pluginId) {\n\t\t\tconst ids = this._toolbarItemPluginMap.get(pluginId) ?? [];\n\t\t\tids.push(item.id);\n\t\t\tthis._toolbarItemPluginMap.set(pluginId, ids);\n\t\t}\n\t}\n\n\tgetToolbarItemsByPlugin(pluginId: string): ToolbarItem[] {\n\t\tconst ids = this._toolbarItemPluginMap.get(pluginId) ?? [];\n\t\tconst items: ToolbarItem[] = [];\n\t\tfor (const id of ids) {\n\t\t\tconst item = this._toolbarItems.get(id);\n\t\t\tif (item) items.push(item);\n\t\t}\n\t\treturn items;\n\t}\n\n\tgetToolbarItem(id: string): ToolbarItem | undefined {\n\t\treturn this._toolbarItems.get(id);\n\t}\n\n\tgetToolbarItems(): ToolbarItem[] {\n\t\treturn [...this._toolbarItems.values()];\n\t}\n\n\tremoveToolbarItem(id: string): void {\n\t\tthis._toolbarItems.delete(id);\n\t\tfor (const [pluginId, ids] of this._toolbarItemPluginMap) {\n\t\t\tconst idx = ids.indexOf(id);\n\t\t\tif (idx !== -1) {\n\t\t\t\tids.splice(idx, 1);\n\t\t\t\tif (ids.length === 0) this._toolbarItemPluginMap.delete(pluginId);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tclear(): void {\n\t\tthis._toolbarItems.clear();\n\t\tthis._toolbarItemPluginMap.clear();\n\t}\n}\n","/**\n * Keyboard navigation helpers for the toolbar (WAI-ARIA Toolbar pattern).\n * Also re-exports generic navigation helpers from `plugins/shared`.\n */\n\n/** Returns indices of all enabled buttons. */\nexport function getEnabledIndices(buttons: readonly HTMLButtonElement[]): number[] {\n\tconst result: number[] = [];\n\tfor (let i = 0; i < buttons.length; i++) {\n\t\tif (!buttons[i]?.disabled) {\n\t\t\tresult.push(i);\n\t\t}\n\t}\n\treturn result;\n}\n\n/** Finds the next enabled button index in the given direction (wraps around). */\nexport function findNextEnabled(\n\tbuttons: readonly HTMLButtonElement[],\n\tcurrent: number,\n\tdirection: 1 | -1,\n): number {\n\tconst len = buttons.length;\n\tif (len === 0) return -1;\n\n\tlet index = current;\n\tfor (let i = 0; i < len; i++) {\n\t\tindex = (index + direction + len) % len;\n\t\tif (!buttons[index]?.disabled) {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn current;\n}\n\n/** Finds the first enabled button index. */\nexport function findFirstEnabled(buttons: readonly HTMLButtonElement[]): number {\n\tfor (let i = 0; i < buttons.length; i++) {\n\t\tif (!buttons[i]?.disabled) return i;\n\t}\n\treturn -1;\n}\n\n/** Finds the last enabled button index. */\nexport function findLastEnabled(buttons: readonly HTMLButtonElement[]): number {\n\tfor (let i = buttons.length - 1; i >= 0; i--) {\n\t\tif (!buttons[i]?.disabled) return i;\n\t}\n\treturn -1;\n}\n\nexport {\n\tapplyRovingTabindex,\n\tfindNextDropdownItem,\n\tnavigateGrid,\n} from '../shared/KeyboardNav.js';\n\n/**\n * Resolves a horizontal navigation direction based on text direction.\n * In RTL, ArrowRight moves backward (-1) and ArrowLeft moves forward (1).\n */\nexport function resolveHorizontalDirection(\n\tkey: 'ArrowRight' | 'ArrowLeft',\n\tisRtl: boolean,\n): 1 | -1 {\n\tif (key === 'ArrowRight') return isRtl ? -1 : 1;\n\treturn isRtl ? 1 : -1;\n}\n","/** Locale interface and default English locale for the ToolbarPlugin. */\n\n// --- Locale Interface ---\n\nexport interface ToolbarLocale {\n\treadonly formattingOptionsAria: string;\n\treadonly moreToolsAria: string;\n\treadonly gridPickerLabel: (rows: number, cols: number) => string;\n}\n\n// --- Default English Locale ---\n\nexport const TOOLBAR_LOCALE_EN: ToolbarLocale = {\n\tformattingOptionsAria: 'Formatting options',\n\tmoreToolsAria: 'More tools',\n\tgridPickerLabel: (rows: number, cols: number) => `${rows} x ${cols}`,\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: ToolbarLocale }>> = import.meta.glob<{\n\tdefault: ToolbarLocale;\n}>('./locales/*.ts', { eager: false });\n\nexport async function loadToolbarLocale(lang: string): Promise<ToolbarLocale> {\n\tif (lang === 'en') return TOOLBAR_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return TOOLBAR_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn TOOLBAR_LOCALE_EN;\n\t}\n}\n","/**\n * Controls how the toolbar responds when items exceed the available width.\n *\n * @example\n * ```typescript\n * const editor = await createEditor({\n * toolbar: {\n * groups: [[BoldPlugin, ItalicPlugin], [HeadingPlugin]],\n * overflow: ToolbarOverflowBehavior.Flow,\n * },\n * });\n * ```\n */\nexport const ToolbarOverflowBehavior = {\n\t/** Items that don't fit are hidden behind a \"...\" dropdown button. Default. */\n\tBurgerMenu: 'burger-menu',\n\t/** Toolbar wraps to additional rows when items overflow. Pure CSS, no JS measurement. */\n\tFlow: 'flow',\n\t/** No responsive behavior; the toolbar clips at the container boundary. */\n\tNone: 'none',\n} as const;\n\nexport type ToolbarOverflowBehavior =\n\t(typeof ToolbarOverflowBehavior)[keyof typeof ToolbarOverflowBehavior];\n","/**\n * ToolbarOverflowController: manages responsive toolbar overflow.\n * Uses ResizeObserver to detect when items exceed available width,\n * hides overflow items, and shows a \"more\" dropdown button.\n * Delegates popup lifecycle to PopupManager when available.\n */\n\nimport { isRtlContext } from '../../platform/Platform.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport { setStyleProperties } from '../../style/StyleRuntime.js';\nimport type { PluginContext } from '../Plugin.js';\nimport { findNextDropdownItem } from '../shared/KeyboardNav.js';\nimport type { PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport { appendToRoot } from '../shared/PopupPositioning.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\n\n// --- Types ---\n\ninterface OverflowEntry {\n\treadonly element: HTMLButtonElement;\n\treadonly item: ToolbarItem;\n}\n\ntype OnOverflowChange = (\n\tvisibleButtons: readonly HTMLButtonElement[],\n\toverflowButton: HTMLButtonElement | null,\n) => void;\n\ntype OnItemActivated = (overflowButton: HTMLButtonElement, item: ToolbarItem) => void;\n\nexport interface OverflowControllerConfig {\n\treadonly toolbar: HTMLElement;\n\treadonly ariaLabel: string;\n\treadonly context: PluginContext;\n\treadonly onOverflowChange: OnOverflowChange;\n\treadonly onItemActivated: OnItemActivated;\n\treadonly getActiveElement: () => Element | null;\n\treadonly popupManager?: PopupManager;\n}\n\n// --- Constants ---\n\nconst OVERFLOW_BTN_WIDTH = 34;\nconst GAP = 2;\nconst HIDDEN_BTN_CLASS = 'notectl-toolbar-btn--overflow-hidden';\nconst HIDDEN_SEP_CLASS = 'notectl-toolbar-separator--overflow-hidden';\nconst HIDDEN_OVERFLOW_CLASS = 'notectl-toolbar-overflow-btn--hidden';\nconst ELLIPSIS_SVG =\n\t'<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/></svg>';\n\n// --- Controller ---\n\nexport class ToolbarOverflowController {\n\tprivate readonly toolbar: HTMLElement;\n\tprivate readonly context: PluginContext;\n\tprivate readonly onOverflowChange: OnOverflowChange;\n\tprivate readonly onItemActivated: OnItemActivated;\n\tprivate readonly getActiveElement: () => Element | null;\n\tprivate readonly ariaLabel: string;\n\tprivate readonly popupManager: PopupManager | null;\n\n\tprivate entries: OverflowEntry[] = [];\n\tprivate overflowButton: HTMLButtonElement | null = null;\n\tprivate overflowDropdown: HTMLElement | null = null;\n\tprivate overflowHandle: PopupHandle | null = null;\n\tprivate overflowEntries: OverflowEntry[] = [];\n\tprivate resizeObserver: ResizeObserver | null = null;\n\tprivate closeHandler: ((e: MouseEvent) => void) | null = null;\n\n\tconstructor(config: OverflowControllerConfig) {\n\t\tthis.toolbar = config.toolbar;\n\t\tthis.ariaLabel = config.ariaLabel;\n\t\tthis.context = config.context;\n\t\tthis.onOverflowChange = config.onOverflowChange;\n\t\tthis.onItemActivated = config.onItemActivated;\n\t\tthis.getActiveElement = config.getActiveElement;\n\t\tthis.popupManager = config.popupManager ?? null;\n\n\t\tthis.resizeObserver = new ResizeObserver(() => this.recalculate());\n\t\tthis.resizeObserver.observe(this.toolbar);\n\t}\n\n\t/** Called after renderItems() — stores button references and recalculates. */\n\tupdate(buttons: readonly { element: HTMLButtonElement; item: ToolbarItem }[]): void {\n\t\tthis.entries = buttons.map((b) => ({ element: b.element, item: b.item }));\n\t\tthis.recalculate();\n\t}\n\n\t/** Measures toolbar and redistributes items between visible and overflow. */\n\trecalculate(): void {\n\t\tif (this.entries.length === 0) return;\n\n\t\tthis.closeDropdown();\n\t\tthis.resetVisibility();\n\t\tthis.ensureOverflowButton();\n\t\tthis.setOverflowButtonVisible(false);\n\n\t\t// Phase 1 — Measure (reads only): batch all layout reads before any writes\n\t\tconst availableWidth: number = this.measureAvailableWidth();\n\t\tconst children: HTMLElement[] = Array.from(this.toolbar.children) as HTMLElement[];\n\t\tconst childWidths: Map<HTMLElement, number> = this.measureChildWidths(children);\n\n\t\t// Phase 2 — Apply (writes only): use cached widths, no layout reads\n\t\tconst maxWidth: number = availableWidth - OVERFLOW_BTN_WIDTH - GAP;\n\t\tlet usedWidth = 0;\n\t\tlet overflowing = false;\n\t\tconst overflowList: OverflowEntry[] = [];\n\n\t\tfor (const child of children) {\n\t\t\tif (child === this.overflowButton) continue;\n\n\t\t\tif (child.classList.contains('notectl-toolbar-separator')) {\n\t\t\t\tif (overflowing) {\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst sepWidth: number = (childWidths.get(child) ?? 0) + GAP;\n\t\t\t\tif (usedWidth + sepWidth > maxWidth) {\n\t\t\t\t\toverflowing = true;\n\t\t\t\t\tchild.classList.add(HIDDEN_SEP_CLASS);\n\t\t\t\t} else {\n\t\t\t\t\tusedWidth += sepWidth;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst entry: OverflowEntry | undefined = this.entries.find((oe) => oe.element === child);\n\t\t\tif (!entry) continue;\n\n\t\t\tif (overflowing) {\n\t\t\t\tentry.element.classList.add(HIDDEN_BTN_CLASS);\n\t\t\t\toverflowList.push(entry);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst btnWidth: number = (childWidths.get(child) ?? 0) + GAP;\n\t\t\tif (usedWidth + btnWidth > maxWidth) {\n\t\t\t\toverflowing = true;\n\t\t\t\tentry.element.classList.add(HIDDEN_BTN_CLASS);\n\t\t\t\toverflowList.push(entry);\n\t\t\t} else {\n\t\t\t\tusedWidth += btnWidth;\n\t\t\t}\n\t\t}\n\n\t\tthis.overflowEntries = overflowList;\n\t\tthis.hideTrailingSeparators();\n\t\tthis.setOverflowButtonVisible(overflowList.length > 0);\n\t\tthis.notifyChange();\n\t}\n\n\t/** Updates active/disabled states for items in the open overflow dropdown. */\n\tupdateItemStates(state: EditorState): void {\n\t\tif (!this.overflowDropdown) return;\n\n\t\tconst menuItems: HTMLButtonElement[] = Array.from(\n\t\t\tthis.overflowDropdown.querySelectorAll('.notectl-dropdown__item'),\n\t\t) as HTMLButtonElement[];\n\n\t\tfor (const menuItem of menuItems) {\n\t\t\tconst itemId: string | null = menuItem.getAttribute('data-toolbar-item');\n\t\t\tconst entry: OverflowEntry | undefined = this.overflowEntries.find(\n\t\t\t\t(oe) => oe.item.id === itemId,\n\t\t\t);\n\t\t\tif (!entry) continue;\n\n\t\t\tconst active: boolean = entry.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = entry.item.isEnabled?.(state) ?? true;\n\t\t\tmenuItem.classList.toggle('notectl-dropdown__item--active', active);\n\t\t\tmenuItem.disabled = !enabled;\n\n\t\t\tif (entry.item.popupType === 'combobox') {\n\t\t\t\tconst labelEl: HTMLSpanElement | null = menuItem.querySelector(\n\t\t\t\t\t'.notectl-dropdown__item-label',\n\t\t\t\t);\n\t\t\t\tif (labelEl) {\n\t\t\t\t\tlabelEl.textContent = entry.item.getLabel(state);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entry.item.getIcon) {\n\t\t\t\tconst newIcon: string = entry.item.getIcon(state);\n\t\t\t\tconst iconEl: HTMLSpanElement | null = menuItem.querySelector(\n\t\t\t\t\t'.notectl-dropdown__item-icon',\n\t\t\t\t);\n\t\t\t\tif (iconEl && iconEl.innerHTML !== newIcon) {\n\t\t\t\t\ticonEl.innerHTML = newIcon;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Cleans up ResizeObserver, DOM elements, and event listeners. */\n\tdestroy(): void {\n\t\tthis.resizeObserver?.disconnect();\n\t\tthis.resizeObserver = null;\n\t\tthis.closeDropdown();\n\t\tthis.overflowButton?.remove();\n\t\tthis.overflowButton = null;\n\t\tthis.entries = [];\n\t\tthis.overflowEntries = [];\n\t}\n\n\t// --- Measurement ---\n\n\tprivate measureChildWidths(children: readonly HTMLElement[]): Map<HTMLElement, number> {\n\t\tconst widths: Map<HTMLElement, number> = new Map();\n\t\tfor (const child of children) {\n\t\t\tif (child === this.overflowButton) continue;\n\t\t\twidths.set(child, child.offsetWidth);\n\t\t}\n\t\treturn widths;\n\t}\n\n\tprivate measureAvailableWidth(): number {\n\t\tconst toolbarStyle: CSSStyleDeclaration = getComputedStyle(this.toolbar);\n\t\tconst paddingLeft: number = Number.parseFloat(toolbarStyle.paddingLeft) || 0;\n\t\tconst paddingRight: number = Number.parseFloat(toolbarStyle.paddingRight) || 0;\n\t\treturn this.toolbar.clientWidth - paddingLeft - paddingRight;\n\t}\n\n\tprivate resetVisibility(): void {\n\t\tfor (const entry of this.entries) {\n\t\t\tentry.element.classList.remove(HIDDEN_BTN_CLASS);\n\t\t}\n\t\tconst separators: HTMLElement[] = Array.from(\n\t\t\tthis.toolbar.querySelectorAll('.notectl-toolbar-separator'),\n\t\t) as HTMLElement[];\n\t\tfor (const sep of separators) {\n\t\t\tsep.classList.remove(HIDDEN_SEP_CLASS);\n\t\t}\n\t}\n\n\t// --- Overflow Button ---\n\n\tprivate setOverflowButtonVisible(visible: boolean): void {\n\t\tif (!this.overflowButton) return;\n\t\tthis.overflowButton.classList.toggle(HIDDEN_OVERFLOW_CLASS, !visible);\n\t\tif (!visible) {\n\t\t\tthis.overflowButton.removeAttribute('tabindex');\n\t\t}\n\t}\n\n\tprivate ensureOverflowButton(): void {\n\t\tif (this.overflowButton) return;\n\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = 'notectl-toolbar-overflow-btn';\n\t\tbtn.setAttribute('aria-label', this.ariaLabel);\n\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\tbtn.innerHTML = ELLIPSIS_SVG;\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.toggleDropdown();\n\t\t});\n\n\t\tthis.toolbar.appendChild(btn);\n\t\tthis.overflowButton = btn;\n\t}\n\n\t// --- Dropdown ---\n\n\tprivate toggleDropdown(): void {\n\t\tif (this.overflowDropdown) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\tprivate openDropdown(): void {\n\t\tif (!this.overflowButton || this.overflowEntries.length === 0) return;\n\n\t\tconst dropdown: HTMLDivElement = document.createElement('div');\n\t\tdropdown.className = 'notectl-toolbar-popup notectl-dropdown';\n\t\tdropdown.setAttribute('role', 'menu');\n\n\t\tthis.renderDropdownItems(dropdown, this.context.getState());\n\n\t\tif (this.popupManager) {\n\t\t\tthis.overflowHandle = this.popupManager.open({\n\t\t\t\tanchor: this.overflowButton,\n\t\t\t\tclassName: 'notectl-toolbar-popup notectl-dropdown',\n\t\t\t\tariaRole: 'menu',\n\t\t\t\tposition: 'below-end',\n\t\t\t\treferenceNode: this.overflowButton,\n\t\t\t\trestoreFocusTo: this.overflowButton,\n\t\t\t\tonClose: () => {\n\t\t\t\t\tthis.overflowHandle = null;\n\t\t\t\t\tthis.overflowDropdown = null;\n\t\t\t\t\tif (this.overflowButton) {\n\t\t\t\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'false');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontent: (popup: HTMLElement) => {\n\t\t\t\t\tthis.renderDropdownItems(popup, this.context.getState());\n\t\t\t\t\tthis.overflowDropdown = popup;\n\t\t\t\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handleDropdownKeydown(e));\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'true');\n\t\t} else {\n\t\t\tthis.positionDropdown(dropdown);\n\t\t\tappendToRoot(dropdown, this.overflowButton);\n\t\t\tthis.overflowDropdown = dropdown;\n\t\t\tthis.overflowButton.setAttribute('aria-expanded', 'true');\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst first: HTMLElement | null = dropdown.querySelector('[role=\"menuitem\"]');\n\t\t\t\tfirst?.focus();\n\t\t\t});\n\n\t\t\tdropdown.addEventListener('keydown', (e: KeyboardEvent) => this.handleDropdownKeydown(e));\n\t\t\tthis.registerCloseHandler();\n\t\t}\n\t}\n\n\tprivate renderDropdownItems(dropdown: HTMLElement, state: EditorState): void {\n\t\tlet lastGroup: string | null = null;\n\n\t\tfor (const entry of this.overflowEntries) {\n\t\t\tif (lastGroup !== null && entry.item.group !== lastGroup) {\n\t\t\t\tconst sep: HTMLDivElement = document.createElement('div');\n\t\t\t\tsep.className = 'notectl-dropdown__separator';\n\t\t\t\tsep.setAttribute('role', 'separator');\n\t\t\t\tdropdown.appendChild(sep);\n\t\t\t}\n\t\t\tlastGroup = entry.item.group;\n\n\t\t\tconst menuBtn: HTMLButtonElement = document.createElement('button');\n\t\t\tmenuBtn.type = 'button';\n\t\t\tmenuBtn.className = 'notectl-dropdown__item';\n\t\t\tmenuBtn.setAttribute('role', 'menuitem');\n\t\t\tmenuBtn.setAttribute('tabindex', '-1');\n\t\t\tmenuBtn.setAttribute('data-toolbar-item', entry.item.id);\n\n\t\t\tconst iconSpan: HTMLSpanElement = document.createElement('span');\n\t\t\ticonSpan.className = 'notectl-dropdown__item-icon';\n\t\t\tif (entry.item.popupType !== 'combobox') {\n\t\t\t\ticonSpan.innerHTML = entry.item.icon;\n\t\t\t}\n\t\t\tmenuBtn.appendChild(iconSpan);\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-dropdown__item-label';\n\t\t\tlabelSpan.textContent =\n\t\t\t\tentry.item.popupType === 'combobox'\n\t\t\t\t\t? entry.item.getLabel(state)\n\t\t\t\t\t: (entry.item.tooltip ?? entry.item.label);\n\t\t\tmenuBtn.appendChild(labelSpan);\n\n\t\t\tmenuBtn.addEventListener('mousedown', (ev: MouseEvent) => {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t\tthis.activateOverflowItem(entry);\n\t\t\t});\n\n\t\t\tdropdown.appendChild(menuBtn);\n\t\t}\n\t}\n\n\tprivate positionDropdown(dropdown: HTMLElement): void {\n\t\tif (!this.overflowButton) return;\n\n\t\tconst rect: DOMRect = this.overflowButton.getBoundingClientRect();\n\t\tconst rtl: boolean = isRtlContext(this.toolbar);\n\n\t\tif (rtl) {\n\t\t\tsetStyleProperties(dropdown, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: `${rect.bottom + 2}px`,\n\t\t\t\tleft: `${rect.left}px`,\n\t\t\t\tright: 'auto',\n\t\t\t\tzIndex: '10000',\n\t\t\t});\n\t\t} else {\n\t\t\tconst rightEdge: number = window.innerWidth - rect.right;\n\t\t\tsetStyleProperties(dropdown, {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: `${rect.bottom + 2}px`,\n\t\t\t\tright: `${rightEdge}px`,\n\t\t\t\tleft: 'auto',\n\t\t\t\tzIndex: '10000',\n\t\t\t});\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';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale } from './ToolbarLocale.js';\n\nconst HIGHLIGHTED_CLASS = 'notectl-grid-picker__cell--highlighted';\n\n/**\n * Renders a grid picker into the given container.\n * Calls `onClose` after a cell is selected so the popup can be dismissed.\n */\nexport function renderGridPicker(\n\tcontainer: HTMLElement,\n\tconfig: GridPickerConfig,\n\tonClose: () => void,\n\tlocale: ToolbarLocale = TOOLBAR_LOCALE_EN,\n): void {\n\tcontainer.className += ' notectl-grid-picker';\n\n\tconst grid: HTMLDivElement = document.createElement('div');\n\tgrid.className = 'notectl-grid-picker__grid';\n\tgrid.setAttribute('role', 'grid');\n\tsetStyleProperties(grid, {\n\t\tdisplay: 'grid',\n\t\tgridTemplateColumns: `repeat(${config.maxCols}, 1fr)`,\n\t\tgap: '2px',\n\t\tpadding: '8px',\n\t});\n\n\tconst label: HTMLDivElement = document.createElement('div');\n\tlabel.className = 'notectl-grid-picker__label';\n\tlabel.textContent = locale.gridPickerLabel(1, 1);\n\tsetStyleProperties(label, {\n\t\ttextAlign: 'center',\n\t\tpadding: '4px',\n\t\tfontSize: '12px',\n\t});\n\tlabel.setAttribute('aria-live', 'polite');\n\n\tfor (let r = 1; r <= config.maxRows; r++) {\n\t\tfor (let c = 1; c <= config.maxCols; c++) {\n\t\t\tconst cell: HTMLDivElement = document.createElement('div');\n\t\t\tcell.className = 'notectl-grid-picker__cell';\n\t\t\tcell.setAttribute('role', 'gridcell');\n\t\t\tcell.setAttribute('tabindex', '-1');\n\t\t\tcell.setAttribute('aria-label', locale.gridPickerLabel(r, c));\n\t\t\tsetStyleProperties(cell, {\n\t\t\t\twidth: '20px',\n\t\t\t\theight: '20px',\n\t\t\t\tborder: '1px solid #ccc',\n\t\t\t\tcursor: 'pointer',\n\t\t\t});\n\t\t\tcell.setAttribute('data-row', String(r));\n\t\t\tcell.setAttribute('data-col', String(c));\n\n\t\t\tcell.addEventListener('mouseenter', () => {\n\t\t\t\thighlightCells(grid, r, c);\n\t\t\t\tlabel.textContent = locale.gridPickerLabel(r, c);\n\t\t\t});\n\n\t\t\tcell.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tcell.addEventListener('click', () => {\n\t\t\t\tconfig.onSelect(r, c);\n\t\t\t\tonClose();\n\t\t\t});\n\n\t\t\tgrid.appendChild(cell);\n\t\t}\n\t}\n\n\tcontainer.appendChild(grid);\n\tcontainer.appendChild(label);\n}\n\n/**\n * Highlights grid cells up to the given row/col and updates the label.\n * Used by both mouse hover and keyboard navigation.\n */\nexport function highlightCells(grid: HTMLElement, targetRow: number, targetCol: number): void {\n\tconst cells: NodeListOf<Element> = grid.querySelectorAll('.notectl-grid-picker__cell');\n\tfor (const cell of cells) {\n\t\tconst r: number = Number(cell.getAttribute('data-row'));\n\t\tconst c: number = Number(cell.getAttribute('data-col'));\n\t\tcell.classList.toggle(HIGHLIGHTED_CLASS, r <= targetRow && c <= targetCol);\n\t}\n}\n\n/**\n * Renders a dropdown menu into the given container.\n * Calls `onClose` after an item is activated so the popup can be dismissed.\n */\nexport function renderDropdown(\n\tcontainer: HTMLElement,\n\tconfig: DropdownConfig,\n\texecuteCommand: (command: string) => void,\n\tonClose: () => void,\n): void {\n\tcontainer.classList.add('notectl-dropdown');\n\tcontainer.setAttribute('role', 'menu');\n\n\tfor (const item of config.items) {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = 'notectl-dropdown__item';\n\t\tbtn.setAttribute('role', 'menuitem');\n\t\tbtn.setAttribute('tabindex', '-1');\n\n\t\tif (item.icon) {\n\t\t\tconst iconSpan: HTMLSpanElement = document.createElement('span');\n\t\t\ticonSpan.className = 'notectl-dropdown__item-icon';\n\t\t\ticonSpan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(iconSpan);\n\t\t}\n\n\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\tlabelSpan.className = 'notectl-dropdown__item-label';\n\t\tlabelSpan.textContent = item.label;\n\t\tbtn.appendChild(labelSpan);\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tbtn.addEventListener('click', () => {\n\t\t\texecuteCommand(item.command);\n\t\t\tonClose();\n\t\t});\n\n\t\tcontainer.appendChild(btn);\n\t}\n}\n\n/** Creates a toolbar group separator element. */\nexport function createSeparator(): HTMLSpanElement {\n\tconst sep: HTMLSpanElement = document.createElement('span');\n\tsep.className = 'notectl-toolbar-separator';\n\tsep.setAttribute('role', 'separator');\n\treturn sep;\n}\n","/**\n * ToolbarPopupController: manages popup lifecycle, positioning, keyboard\n * navigation, and auto-close for toolbar popups (grid pickers, dropdowns,\n * and custom popups). Delegates lifecycle to PopupManager.\n */\n\nimport { isRtlContext } from '../../platform/Platform.js';\nimport type { PluginContext } from '../Plugin.js';\nimport { findNextDropdownItem, navigateGrid } from '../shared/KeyboardNav.js';\nimport type { PopupCloseOptions, PopupHandle, PopupManager } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale } from './ToolbarLocale.js';\nimport { highlightCells, renderDropdown, renderGridPicker } from './ToolbarRenderers.js';\n\nexport class ToolbarPopupController {\n\tprivate activePopup: HTMLElement | null = null;\n\tprivate activePopupButton: HTMLButtonElement | null = null;\n\tprivate activeHandle: PopupHandle | null = null;\n\tprivate readonly getActiveElement: () => Element | null;\n\tprivate readonly locale: ToolbarLocale;\n\tprivate popupManager: PopupManager | null = null;\n\n\tconstructor(getActiveElement: () => Element | null, locale: ToolbarLocale = TOOLBAR_LOCALE_EN) {\n\t\tthis.getActiveElement = getActiveElement;\n\t\tthis.locale = locale;\n\t}\n\n\t/** Injects the PopupManager instance (called after service registration). */\n\tsetPopupManager(manager: PopupManager): void {\n\t\tthis.popupManager = manager;\n\t}\n\n\t/** Whether a popup is currently open. */\n\tisOpen(): boolean {\n\t\treturn this.activePopup !== null;\n\t}\n\n\t/** Toggles a popup for the given toolbar button. */\n\ttoggle(button: HTMLButtonElement, item: ToolbarItem, context: PluginContext): void {\n\t\tif (this.activePopup) {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.openViaManager(button, item, context);\n\t}\n\n\t/** Closes the active popup and cleans up event listeners. */\n\tclose(): void {\n\t\tif (this.activeHandle) {\n\t\t\t// Prevent onClose callback from re-entering\n\t\t\tconst handle: PopupHandle = this.activeHandle;\n\t\t\tthis.activeHandle = null;\n\t\t\tthis.clearButtonState();\n\t\t\thandle.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearButtonState();\n\t\tif (this.activePopup) {\n\t\t\tthis.activePopup.remove();\n\t\t\tthis.activePopup = null;\n\t\t}\n\t}\n\n\t/** Closes popup and restores focus to the trigger button. */\n\tcloseAndRestoreFocus(): void {\n\t\tconst triggerBtn: HTMLButtonElement | null = this.activePopupButton;\n\t\tthis.close();\n\t\ttriggerBtn?.focus();\n\t}\n\n\tdestroy(): void {\n\t\tthis.close();\n\t}\n\n\t// --- PopupManager path ---\n\n\tprivate openViaManager(\n\t\tbutton: HTMLButtonElement,\n\t\titem: ToolbarItem,\n\t\tcontext: PluginContext,\n\t): void {\n\t\tif (!this.popupManager) return;\n\n\t\tthis.activePopupButton = button;\n\t\tbutton.classList.add('notectl-toolbar-btn--popup-open');\n\t\tbutton.setAttribute('aria-expanded', 'true');\n\n\t\tthis.activeHandle = this.popupManager.open({\n\t\t\tanchor: button,\n\t\t\tclassName: 'notectl-toolbar-popup',\n\t\t\treferenceNode: button,\n\t\t\trestoreFocusTo: button,\n\t\t\tposition: 'below-start',\n\t\t\tonClose: () => {\n\t\t\t\t// Called when PopupManager closes the popup (click-outside, etc.)\n\t\t\t\tthis.activeHandle = null;\n\t\t\t\tthis.clearButtonState();\n\t\t\t\tthis.activePopup = null;\n\t\t\t},\n\t\t\tcontent: (popup: HTMLElement, close: (options?: PopupCloseOptions) => void) => {\n\t\t\t\tthis.activePopup = popup;\n\t\t\t\tthis.renderPopupContent(popup, item, context, close);\n\t\t\t\tpopup.addEventListener('keydown', (e: KeyboardEvent) => this.handlePopupKeydown(e));\n\t\t\t},\n\t\t});\n\t}\n\n\t// --- Shared rendering ---\n\n\tprivate renderPopupContent(\n\t\tpopup: HTMLElement,\n\t\titem: ToolbarItem,\n\t\tcontext: PluginContext,\n\t\tclose: (options?: PopupCloseOptions) => void,\n\t): void {\n\t\tconst closeAndFocusEditor = (): void => {\n\t\t\tclose({ restoreFocusTo: null });\n\t\t\tcontext.getContainer().focus();\n\t\t};\n\n\t\tswitch (item.popupType) {\n\t\t\tcase 'gridPicker':\n\t\t\t\trenderGridPicker(popup, item.popupConfig, closeAndFocusEditor, this.locale);\n\t\t\t\tbreak;\n\t\t\tcase 'dropdown':\n\t\t\t\trenderDropdown(\n\t\t\t\t\tpopup,\n\t\t\t\t\titem.popupConfig,\n\t\t\t\t\t(cmd: string) => context.executeCommand(cmd),\n\t\t\t\t\tcloseAndFocusEditor,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'custom':\n\t\t\t\titem.renderPopup(popup, context, close);\n\t\t\t\tbreak;\n\t\t\tcase 'combobox':\n\t\t\t\titem.renderPopup(popup, context, close);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// --- Button state ---\n\n\tprivate clearButtonState(): void {\n\t\tif (this.activePopupButton) {\n\t\t\tthis.activePopupButton.classList.remove('notectl-toolbar-btn--popup-open');\n\t\t\tthis.activePopupButton.setAttribute('aria-expanded', 'false');\n\t\t\tthis.activePopupButton = null;\n\t\t}\n\t}\n\n\t// --- Keyboard Navigation ---\n\n\tprivate handlePopupKeydown(e: KeyboardEvent): void {\n\t\tif (!this.activePopup) return;\n\n\t\tif (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tthis.closeAndRestoreFocus();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === 'Tab') {\n\t\t\te.preventDefault();\n\t\t\tthis.closeAndRestoreFocus();\n\t\t\treturn;\n\t\t}\n\n\t\tconst menuItems: NodeListOf<Element> = this.activePopup.querySelectorAll('[role=\"menuitem\"]');\n\t\tif (menuItems.length > 0) {\n\t\t\tthis.handleDropdownKeydown(e, menuItems);\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasGrid: boolean = this.activePopup.querySelector('.notectl-grid-picker__cell') !== null;\n\t\tif (hasGrid) {\n\t\t\tthis.handleGridKeydown(e);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.handleCustomPopupKeydown(e);\n\t}\n\n\tprivate handleDropdownKeydown(e: KeyboardEvent, items: NodeListOf<Element>): void {\n\t\tconst itemArr: HTMLElement[] = Array.from(items) as HTMLElement[];\n\t\tconst current: number = itemArr.indexOf(this.getActiveElement() as HTMLElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(itemArr, current, 1);\n\t\t\t\titemArr[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(itemArr, current, -1);\n\t\t\t\titemArr[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLElement | undefined = itemArr[current];\n\t\t\t\tif (focused) focused.click();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleGridKeydown(e: KeyboardEvent): void {\n\t\tconst focused: HTMLElement = this.getActiveElement() as HTMLElement;\n\t\tconst row: number = Number(focused?.getAttribute('data-row') ?? 1);\n\t\tconst col: number = Number(focused?.getAttribute('data-col') ?? 1);\n\n\t\tconst grid: Element | null =\n\t\t\tthis.activePopup?.querySelector('.notectl-grid-picker__grid') ?? null;\n\t\tif (!grid) return;\n\n\t\tconst lastCell: Element | null = grid.querySelector('.notectl-grid-picker__cell:last-child');\n\t\tconst maxCols: number = Number(lastCell?.getAttribute('data-col') ?? 1);\n\t\tconst maxRows: number = Number(lastCell?.getAttribute('data-row') ?? 1);\n\n\t\tif (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n\t\t\te.preventDefault();\n\t\t\tconst [newRow, newCol]: [number, number] = navigateGrid(\n\t\t\t\trow,\n\t\t\t\tcol,\n\t\t\t\tmaxRows,\n\t\t\t\tmaxCols,\n\t\t\t\te.key as 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight',\n\t\t\t\tthis.activePopup ? isRtlContext(this.activePopup) : false,\n\t\t\t);\n\t\t\tconst target: HTMLElement | null = grid.querySelector(\n\t\t\t\t`.notectl-grid-picker__cell[data-row=\"${newRow}\"][data-col=\"${newCol}\"]`,\n\t\t\t);\n\t\t\ttarget?.focus();\n\n\t\t\thighlightCells(grid as HTMLElement, newRow, newCol);\n\t\t\tconst label: Element | null =\n\t\t\t\tthis.activePopup?.querySelector('.notectl-grid-picker__label') ?? null;\n\t\t\tif (label) label.textContent = this.locale.gridPickerLabel(newRow, newCol);\n\t\t}\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\tfocused?.click();\n\t\t}\n\t}\n\n\tprivate handleCustomPopupKeydown(e: KeyboardEvent): void {\n\t\tif (!this.activePopup) return;\n\t\tconst buttons: HTMLButtonElement[] = Array.from(this.activePopup.querySelectorAll('button'));\n\t\tif (buttons.length === 0) return;\n\t\tconst active: HTMLElement = this.getActiveElement() as HTMLElement;\n\t\tconst currentIdx: number = buttons.indexOf(active as HTMLButtonElement);\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowDown': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst next: number = findNextDropdownItem(buttons, currentIdx, 1);\n\t\t\t\tbuttons[next]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'ArrowUp': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst prev: number = findNextDropdownItem(buttons, currentIdx, -1);\n\t\t\t\tbuttons[prev]?.focus();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (active) {\n\t\t\t\t\tactive.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, cancelable: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * ToolbarTooltip: manages the tooltip lifecycle for toolbar buttons.\n * Shows a tooltip after a short delay when hovering or focusing a button,\n * hides it when the cursor leaves or focus moves away.\n */\n\nimport { setStyleProperties, setStyleProperty } from '../../style/StyleRuntime.js';\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 { LocaleServiceKey } from '../../i18n/LocaleService.js';\nimport { isRtlContext } from '../../platform/Platform.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { ServiceKey } from '../Plugin.js';\nimport type { Plugin, PluginConfig, PluginContext } from '../Plugin.js';\nimport { applyRovingTabindex } from '../shared/KeyboardNav.js';\nimport { PopupManager, PopupServiceKey } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport {\n\tfindFirstEnabled,\n\tfindLastEnabled,\n\tfindNextEnabled,\n\tresolveHorizontalDirection,\n} from './ToolbarKeyboardNav.js';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale, loadToolbarLocale } from './ToolbarLocale.js';\nimport {\n\tToolbarOverflowBehavior,\n\ttype ToolbarOverflowBehavior as ToolbarOverflowBehaviorType,\n} from './ToolbarOverflowBehavior.js';\nimport { ToolbarOverflowController } from './ToolbarOverflowController.js';\nimport { ToolbarPopupController } from './ToolbarPopupController.js';\nimport { createSeparator } from './ToolbarRenderers.js';\nimport { ToolbarTooltip } from './ToolbarTooltip.js';\n\n// --- Layout Config ---\n\nexport interface ToolbarLayoutConfig {\n\treadonly groups: ReadonlyArray<ReadonlyArray<string>>;\n\t/**\n\t * Controls responsive overflow behavior when toolbar items exceed available width.\n\t * Defaults to `ToolbarOverflowBehavior.BurgerMenu`.\n\t */\n\treadonly overflow?: ToolbarOverflowBehaviorType;\n}\n\n// --- Typed Service API ---\n\nexport interface ToolbarServiceAPI {\n\t/** Re-reads isActive/isEnabled from state and updates all buttons. */\n\trefresh(): void;\n\t/** Closes the currently open popup, if any. */\n\tclosePopup(): void;\n}\n\nexport const ToolbarServiceKey = new ServiceKey<ToolbarServiceAPI>('toolbar');\n\n// --- Plugin ---\n\ninterface ToolbarButton {\n\telement: HTMLButtonElement;\n\titem: ToolbarItem;\n\tcomboLabelEl: HTMLSpanElement | null;\n}\n\nexport class ToolbarPlugin implements Plugin {\n\treadonly id = 'toolbar';\n\treadonly name = 'Toolbar';\n\treadonly priority = 10;\n\n\tprivate context: PluginContext | null = null;\n\tprivate toolbarElement: HTMLElement | null = null;\n\tprivate buttons: ToolbarButton[] = [];\n\tprivate readonly hiddenItems = new Set<string>();\n\tprivate readonly layoutConfig: ToolbarLayoutConfig | null;\n\tprivate overflowBehavior: ToolbarOverflowBehaviorType;\n\tprivate focusedIndex = 0;\n\tprivate tooltip: ToolbarTooltip | null = null;\n\tprivate popupController: ToolbarPopupController | null = null;\n\tprivate popupManager: PopupManager | null = null;\n\tprivate overflowController: ToolbarOverflowController | null = null;\n\tprivate visibleElements: HTMLButtonElement[] = [];\n\tprivate locale!: ToolbarLocale;\n\n\tconstructor(layoutConfig?: ToolbarLayoutConfig) {\n\t\tthis.layoutConfig = layoutConfig ?? null;\n\t\tthis.overflowBehavior = layoutConfig?.overflow ?? ToolbarOverflowBehavior.BurgerMenu;\n\t}\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tconst service = context.getService(LocaleServiceKey);\n\t\tconst lang: string = service?.getLocale() ?? 'en';\n\t\tthis.locale = lang === 'en' ? TOOLBAR_LOCALE_EN : await loadToolbarLocale(lang);\n\t\tcontext.registerStyleSheet(TOOLBAR_CSS);\n\t\tthis.context = context;\n\n\t\tthis.popupManager = new PopupManager(context.getContainer());\n\t\tcontext.registerService(PopupServiceKey, this.popupManager);\n\n\t\tthis.popupController = new ToolbarPopupController(() => this.getActiveElement(), this.locale);\n\t\tthis.popupController.setPopupManager(this.popupManager);\n\t\tthis.tooltip = new ToolbarTooltip(() => this.popupController?.isOpen() ?? false);\n\n\t\tcontext.registerService(ToolbarServiceKey, {\n\t\t\trefresh: () => this.updateButtonStates(context.getState()),\n\t\t\tclosePopup: () => this.popupController?.close(),\n\t\t});\n\n\t\tthis.createToolbarElement();\n\t}\n\n\t/** Returns the current overflow behavior. */\n\tgetOverflowBehavior(): ToolbarOverflowBehaviorType {\n\t\treturn this.overflowBehavior;\n\t}\n\n\t/** Switches the overflow behavior at runtime. */\n\tsetOverflowBehavior(behavior: ToolbarOverflowBehaviorType): void {\n\t\tif (behavior === this.overflowBehavior) return;\n\n\t\tthis.overflowBehavior = behavior;\n\t\tthis.applyOverflowBehavior();\n\t\tthis.renderItems();\n\t}\n\n\tonReady(): void {\n\t\tthis.renderItems();\n\t}\n\n\tdestroy(): void {\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\t\tthis.popupController?.destroy();\n\t\tthis.popupController = null;\n\t\tthis.popupManager?.destroy();\n\t\tthis.popupManager = null;\n\t\tthis.tooltip?.destroy();\n\t\tthis.tooltip = null;\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\tthis.toolbarElement = null;\n\t\t}\n\t\tthis.buttons = [];\n\t\tthis.visibleElements = [];\n\t\tthis.context = null;\n\t}\n\n\tonStateChange(_oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tthis.updateButtonStates(newState);\n\t}\n\n\tonReadOnlyChange(readonly: boolean): void {\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.hidden = readonly;\n\t\t}\n\t}\n\n\tonConfigure(config: PluginConfig): void {\n\t\tfor (const [key, value] of Object.entries(config)) {\n\t\t\tif (value === false) {\n\t\t\t\tthis.hiddenItems.add(key);\n\t\t\t} else {\n\t\t\t\tthis.hiddenItems.delete(key);\n\t\t\t}\n\t\t}\n\t\tthis.renderItems();\n\t}\n\n\t// --- Toolbar ---\n\n\tprivate createToolbarElement(): void {\n\t\tif (!this.context) return;\n\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\tthis.toolbarElement = document.createElement('div');\n\t\tthis.toolbarElement.setAttribute('role', 'toolbar');\n\t\tthis.toolbarElement.setAttribute('aria-label', this.locale.formattingOptionsAria);\n\t\tthis.toolbarElement.setAttribute('data-notectl-no-print', '');\n\t\tthis.toolbarElement.className = 'notectl-toolbar';\n\n\t\tthis.toolbarElement.addEventListener('keydown', (e) => this.handleToolbarKeydown(e));\n\n\t\tthis.applyOverflowBehavior();\n\t\tcontainer.appendChild(this.toolbarElement);\n\t}\n\n\t/** Applies the current overflow behavior: creates/destroys the overflow controller and sets the data attribute. */\n\tprivate applyOverflowBehavior(): void {\n\t\tif (!this.toolbarElement || !this.context) return;\n\n\t\t// Tear down existing overflow controller\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\n\t\tthis.toolbarElement.setAttribute('data-overflow', this.overflowBehavior);\n\n\t\tif (this.overflowBehavior === ToolbarOverflowBehavior.BurgerMenu) {\n\t\t\tthis.overflowController = new ToolbarOverflowController({\n\t\t\t\ttoolbar: this.toolbarElement,\n\t\t\t\tariaLabel: this.locale.moreToolsAria,\n\t\t\t\tcontext: this.context,\n\t\t\t\tpopupManager: this.popupManager ?? undefined,\n\t\t\t\tonOverflowChange: (visibleButtons, overflowBtn) => {\n\t\t\t\t\tthis.visibleElements = overflowBtn\n\t\t\t\t\t\t? [...visibleButtons, overflowBtn]\n\t\t\t\t\t\t: [...visibleButtons];\n\t\t\t\t\tthis.initRovingTabindex();\n\t\t\t\t},\n\t\t\t\tonItemActivated: (btn: HTMLButtonElement, item: ToolbarItem) => {\n\t\t\t\t\tthis.activateButton(btn, item);\n\t\t\t\t},\n\t\t\t\tgetActiveElement: () => this.getActiveElement(),\n\t\t\t});\n\t\t} else {\n\t\t\t// Flow and None modes: all buttons are visible for roving tabindex\n\t\t\tthis.visibleElements = [];\n\t\t}\n\t}\n\n\tprivate renderItems(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tfor (const btn of this.buttons) {\n\t\t\tbtn.element.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tfor (const sep of this.toolbarElement.querySelectorAll('.notectl-toolbar-separator')) {\n\t\t\tsep.remove();\n\t\t}\n\n\t\tif (this.layoutConfig) {\n\t\t\tthis.renderItemsByLayout();\n\t\t} else {\n\t\t\tthis.renderItemsByGroup();\n\t\t}\n\n\t\tif (this.buttons.length > 0 && !this.toolbarElement.parentElement) {\n\t\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\t\tcontainer.appendChild(this.toolbarElement);\n\t\t}\n\n\t\tthis.overflowController?.update(this.buttons);\n\t\tthis.initRovingTabindex();\n\t\tthis.updateButtonStates(this.context.getState());\n\t}\n\n\t// --- Roving Tabindex ---\n\n\tprivate getTabElements(): HTMLButtonElement[] {\n\t\treturn this.visibleElements.length > 0\n\t\t\t? this.visibleElements\n\t\t\t: this.buttons.map((b) => b.element);\n\t}\n\n\tprivate initRovingTabindex(): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst first: number = findFirstEnabled(elements);\n\t\tthis.focusedIndex = first >= 0 ? first : 0;\n\t\tapplyRovingTabindex(elements, this.focusedIndex);\n\t}\n\n\tprivate setRovingFocus(index: number): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (index < 0 || index >= elements.length) return;\n\t\tthis.focusedIndex = index;\n\t\tapplyRovingTabindex(elements, index);\n\t\telements[index]?.focus();\n\t}\n\n\t/** Returns the active element, respecting shadow DOM boundaries. */\n\tprivate getActiveElement(): Element | null {\n\t\tconst root: Node | undefined = this.toolbarElement?.getRootNode();\n\t\tif (root instanceof ShadowRoot) {\n\t\t\treturn root.activeElement;\n\t\t}\n\t\treturn document.activeElement;\n\t}\n\n\tprivate syncFocusedIndex(): void {\n\t\tconst active: Element | null = this.getActiveElement();\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst idx: number = elements.findIndex((el) => el === active);\n\t\tif (idx >= 0) {\n\t\t\tthis.focusedIndex = idx;\n\t\t}\n\t}\n\n\t// --- Toolbar Keyboard ---\n\n\tprivate handleToolbarKeydown(e: KeyboardEvent): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (elements.length === 0) return;\n\n\t\tthis.syncFocusedIndex();\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowLeft': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst rtl: boolean = this.toolbarElement ? isRtlContext(this.toolbarElement) : false;\n\t\t\t\tconst dir: 1 | -1 = resolveHorizontalDirection(e.key, rtl);\n\t\t\t\tconst next: number = findNextEnabled(elements, this.focusedIndex, dir);\n\t\t\t\tthis.setRovingFocus(next);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Home': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst first: number = findFirstEnabled(elements);\n\t\t\t\tif (first >= 0) this.setRovingFocus(first);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'End': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst last: number = findLastEnabled(elements);\n\t\t\t\tif (last >= 0) this.setRovingFocus(last);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLButtonElement | undefined = elements[this.focusedIndex];\n\t\t\t\tconst btn: ToolbarButton | undefined = this.buttons.find((b) => b.element === focused);\n\t\t\t\tif (btn) this.activateButton(btn.element, btn.item);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Activates a toolbar button (shared between mouse click and keyboard). */\n\tprivate activateButton(btn: HTMLButtonElement, item: ToolbarItem): void {\n\t\tthis.tooltip?.hide();\n\t\tif (item.popupType && this.context) {\n\t\t\tthis.popupController?.toggle(btn, item, this.context);\n\t\t} else {\n\t\t\tthis.context?.executeCommand(item.command);\n\t\t}\n\t}\n\n\t// --- Layout Rendering ---\n\n\tprivate renderItemsByLayout(): void {\n\t\tif (!this.context || !this.toolbarElement || !this.layoutConfig) return;\n\n\t\tconst toolbarReg = this.context.getToolbarRegistry();\n\t\tlet firstGroup = true;\n\n\t\tfor (const groupPluginIds of this.layoutConfig.groups) {\n\t\t\tconst groupItems: ToolbarItem[] = [];\n\t\t\tfor (const pId of groupPluginIds) {\n\t\t\t\tconst items: ToolbarItem[] = toolbarReg\n\t\t\t\t\t.getToolbarItemsByPlugin(pId)\n\t\t\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\t\t\tgroupItems.push(...items);\n\t\t\t}\n\n\t\t\tif (groupItems.length === 0) continue;\n\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\n\t\tif (this.buttons.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t}\n\n\tprivate renderItemsByGroup(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tconst toolbarRegistry = this.context.getToolbarRegistry();\n\t\tconst items: ToolbarItem[] = toolbarRegistry\n\t\t\t.getToolbarItems()\n\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\tif (items.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\treturn;\n\t\t}\n\n\t\tconst groups = new Map<string, ToolbarItem[]>();\n\t\tfor (const item of items) {\n\t\t\tconst list: ToolbarItem[] = groups.get(item.group) ?? [];\n\t\t\tlist.push(item);\n\t\t\tgroups.set(item.group, list);\n\t\t}\n\n\t\tlet firstGroup = true;\n\t\tfor (const [, groupItems] of groups) {\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Button Creation ---\n\n\tprivate createButton(item: ToolbarItem): ToolbarButton {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = `notectl-toolbar-btn notectl-toolbar-btn--${item.id}`;\n\t\tbtn.setAttribute('aria-pressed', 'false');\n\t\tbtn.setAttribute('aria-label', item.label);\n\t\tbtn.setAttribute('data-toolbar-item', item.id);\n\t\tbtn.setAttribute('data-tooltip', item.tooltip ?? item.label);\n\n\t\tlet comboLabelEl: HTMLSpanElement | null = null;\n\n\t\tif (item.popupType === 'combobox') {\n\t\t\tbtn.setAttribute('role', 'combobox');\n\t\t\tbtn.setAttribute('aria-haspopup', 'listbox');\n\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-toolbar-combobox__label';\n\t\t\tconst state: EditorState | undefined = this.context?.getState();\n\t\t\tif (state) {\n\t\t\t\tlabelSpan.textContent = item.getLabel(state);\n\t\t\t}\n\t\t\tbtn.appendChild(labelSpan);\n\t\t\tcomboLabelEl = labelSpan;\n\n\t\t\tconst arrowSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tarrowSpan.className = 'notectl-toolbar-combobox__arrow';\n\t\t\tarrowSpan.setAttribute('aria-hidden', 'true');\n\t\t\tarrowSpan.textContent = '\\u25BE';\n\t\t\tbtn.appendChild(arrowSpan);\n\t\t} else {\n\t\t\tif (item.popupType) {\n\t\t\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\t\t}\n\n\t\t\tconst span: HTMLSpanElement = document.createElement('span');\n\t\t\tspan.className = 'notectl-toolbar-btn__icon';\n\t\t\tspan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(span);\n\t\t}\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.activateButton(btn, item);\n\t\t});\n\n\t\tbtn.addEventListener('mouseenter', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('mouseleave', () => this.tooltip?.hide());\n\t\tbtn.addEventListener('focus', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('blur', () => this.tooltip?.hide());\n\n\t\treturn { element: btn, item, comboLabelEl };\n\t}\n\n\t// --- Button State Updates ---\n\n\tprivate updateButtonStates(state: EditorState): void {\n\t\tfor (const btn of this.buttons) {\n\t\t\tconst active: boolean = btn.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = btn.item.isEnabled?.(state) ?? true;\n\t\t\tbtn.element.setAttribute('aria-pressed', String(active));\n\t\t\tbtn.element.classList.toggle('notectl-toolbar-btn--active', active);\n\t\t\tbtn.element.disabled = !enabled;\n\t\t\tif (!enabled) {\n\t\t\t\tbtn.element.setAttribute('aria-disabled', 'true');\n\t\t\t} else {\n\t\t\t\tbtn.element.removeAttribute('aria-disabled');\n\t\t\t}\n\t\t\tif (btn.comboLabelEl && btn.item.popupType === 'combobox') {\n\t\t\t\tbtn.comboLabelEl.textContent = btn.item.getLabel(state);\n\t\t\t}\n\t\t\tif (btn.item.getIcon) {\n\t\t\t\tconst newIcon: string = btn.item.getIcon(state);\n\t\t\t\tconst iconEl: HTMLSpanElement | null = btn.element.querySelector(\n\t\t\t\t\t'.notectl-toolbar-btn__icon',\n\t\t\t\t);\n\t\t\t\tif (iconEl && iconEl.innerHTML !== newIcon) {\n\t\t\t\t\ticonEl.innerHTML = newIcon;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.overflowController?.updateItemStates(state);\n\t}\n}\n","/** 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: start;\n\tborder: none;\n\tbackground: none;\n\tcursor: pointer;\n\tfont-size: 14px;\n\tcolor: var(--notectl-fg);\n\tline-height: 1.4;\n\tfont-family: inherit;\n\twhite-space: nowrap;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t}\n}\n\n.notectl-dropdown__item:focus-visible {\n\tbackground: var(--notectl-hover-bg);\n\toutline: none;\n}\n\n.notectl-dropdown__item-icon {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 28px;\n\tfont-weight: 600;\n\tcolor: var(--notectl-fg-muted);\n\tflex-shrink: 0;\n}\n\n.notectl-dropdown__item-label {\n\tflex: 1;\n}\n\n/* Overflow behavior: flow mode — toolbar wraps to additional rows */\n.notectl-toolbar[data-overflow=\"flow\"] {\n\tflex-wrap: wrap;\n\toverflow: visible;\n}\n\n/* Overflow behavior: none — toolbar clips without any responsive behavior */\n.notectl-toolbar[data-overflow=\"none\"] {\n\tflex-wrap: nowrap;\n\toverflow: hidden;\n}\n\n/* Overflow: hidden items (burger-menu mode) */\n.notectl-toolbar-btn--overflow-hidden,\n.notectl-toolbar-separator--overflow-hidden {\n\tdisplay: none;\n}\n\n/* Overflow \"more\" button */\n.notectl-toolbar-overflow-btn {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder: 1px solid transparent;\n\tborder-radius: 4px;\n\tbackground: transparent;\n\tcursor: pointer;\n\tcolor: var(--notectl-fg);\n\tfont-size: 16px;\n\tline-height: 1;\n\tpadding: 0;\n\tflex-shrink: 0;\n\tmargin-inline-start: auto;\n\ttransition: background 0.1s, border-color 0.1s;\n}\n\n@media (hover: hover) {\n\t.notectl-toolbar-overflow-btn:hover {\n\t\tbackground: var(--notectl-hover-bg);\n\t\tborder-color: var(--notectl-border);\n\t}\n}\n\n.notectl-toolbar-overflow-btn--hidden {\n\tdisplay: none;\n}\n\n.notectl-toolbar-overflow-btn:focus-visible {\n\tbox-shadow: 0 0 0 2px var(--notectl-focus-ring);\n\toutline: none;\n}\n\n/* Dropdown item states shared by all dropdown menus (including overflow) */\n.notectl-dropdown__item:disabled {\n\topacity: 0.4;\n\tcursor: not-allowed;\n}\n\n@media (hover: hover) {\n\t.notectl-dropdown__item:disabled:hover {\n\t\tbackground: none;\n\t}\n}\n\n.notectl-dropdown__item--active {\n\tcolor: var(--notectl-primary-fg);\n}\n\n.notectl-dropdown__item-icon svg {\n\tdisplay: block;\n\twidth: 16px;\n\theight: 16px;\n\tfill: currentColor;\n}\n\n.notectl-dropdown__separator {\n\theight: 1px;\n\tbackground: var(--notectl-border);\n\tmargin: 4px 0;\n}\n\n/* Combobox-style toolbar buttons (shared base for font, fontSize, heading, etc.) */\n.notectl-toolbar-btn[role=\"combobox\"] {\n\twidth: auto;\n\tpadding: 0 8px;\n\tgap: 4px;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tbackground: var(--notectl-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: start;\n\tline-height: 30px;\n}\n\n.notectl-toolbar-combobox__arrow {\n\tflex-shrink: 0;\n\tfont-size: 11px;\n\tcolor: var(--notectl-fg-muted);\n\tline-height: 30px;\n}\n\n/* Link Popup */\n.notectl-link-popup {\n\tpadding: 8px;\n\tmin-width: 200px;\n}\n\n.notectl-link-popup__input {\n\twidth: 100%;\n\tpadding: 4px;\n\tbox-sizing: border-box;\n\tborder: 1px solid var(--notectl-border);\n\tborder-radius: 4px;\n\tfont-size: 13px;\n\tcolor: var(--notectl-fg);\n\tbackground: var(--notectl-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"],"names":["ToolbarRegistry","_toolbarItems","Map","_toolbarItemPluginMap","registerToolbarItem","item","pluginId","this","has","id","Error","set","ids","get","push","getToolbarItemsByPlugin","items","getToolbarItem","getToolbarItems","values","removeToolbarItem","delete","idx","indexOf","splice","length","clear","findFirstEnabled","buttons","i","disabled","TOOLBAR_LOCALE_EN","formattingOptionsAria","moreToolsAria","gridPickerLabel","rows","cols","localeModules","assign","import","async","loadToolbarLocale","lang","loader","default","ToolbarOverflowBehavior","BurgerMenu","Flow","None","HIDDEN_BTN_CLASS","HIDDEN_SEP_CLASS","ToolbarOverflowController","toolbar","context","onOverflowChange","onItemActivated","getActiveElement","ariaLabel","popupManager","entries","overflowButton","overflowDropdown","overflowHandle","overflowEntries","resizeObserver","closeHandler","constructor","config","ResizeObserver","recalculate","observe","update","map","b","element","closeDropdown","resetVisibility","ensureOverflowButton","setOverflowButtonVisible","availableWidth","measureAvailableWidth","children","Array","from","childWidths","measureChildWidths","maxWidth","usedWidth","overflowing","overflowList","child","classList","contains","add","sepWidth","entry","find","oe","btnWidth","hideTrailingSeparators","notifyChange","updateItemStates","state","menuItems","querySelectorAll","menuItem","itemId","getAttribute","active","isActive","enabled","isEnabled","toggle","popupType","labelEl","querySelector","textContent","getLabel","getIcon","newIcon","iconEl","innerHTML","destroy","disconnect","remove","widths","offsetWidth","toolbarStyle","getComputedStyle","paddingLeft","Number","parseFloat","paddingRight","clientWidth","separators","sep","visible","removeAttribute","btn","document","createElement","type","className","setAttribute","addEventListener","e","preventDefault","toggleDropdown","appendChild","openDropdown","dropdown","renderDropdownItems","getState","open","anchor","ariaRole","position","referenceNode","restoreFocusTo","onClose","content","popup","handleDropdownKeydown","positionDropdown","appendToRoot","requestAnimationFrame","first","focus","registerCloseHandler","lastGroup","group","menuBtn","iconSpan","icon","labelSpan","tooltip","label","ev","stopPropagation","activateOverflowItem","rect","getBoundingClientRect","isRtlContext","setStyleProperties","top","bottom","left","right","zIndex","rightEdge","window","innerWidth","path","composedPath","includes","setTimeout","handle","close","removeEventListener","executeCommand","command","key","current","next","findNextDropdownItem","prev","focusedItem","filter","highlightCells","grid","targetRow","targetCol","cells","cell","r","c","createSeparator","ToolbarPopupController","activePopup","activePopupButton","activeHandle","locale","setPopupManager","manager","isOpen","button","openViaManager","clearButtonState","closeAndRestoreFocus","triggerBtn","renderPopupContent","handlePopupKeydown","closeAndFocusEditor","getContainer","container","display","gridTemplateColumns","maxCols","gap","padding","textAlign","fontSize","maxRows","width","height","border","cursor","String","onSelect","renderGridPicker","popupConfig","cmd","renderDropdown","renderPopup","handleGridKeydown","handleCustomPopupKeydown","itemArr","focused","click","row","col","lastCell","newRow","newCol","navigateGrid","target","currentIdx","dispatchEvent","MouseEvent","bubbles","cancelable","ToolbarTooltip","timer","isPopupActive","static","TOOLTIP_ID","setStyleProperty","show","hide","text","root","getRootNode","ShadowRoot","parentNode","body","transform","clearTimeout","ToolbarServiceKey","ServiceKey","ToolbarPlugin","name","priority","toolbarElement","hiddenItems","Set","layoutConfig","overflowBehavior","focusedIndex","popupController","overflowController","visibleElements","overflow","init","service","getService","LocaleServiceKey","getLocale","registerStyleSheet","PopupManager","registerService","PopupServiceKey","refresh","updateButtonStates","closePopup","createToolbarElement","getOverflowBehavior","setOverflowBehavior","behavior","applyOverflowBehavior","renderItems","onReady","onStateChange","_oldState","newState","_tr","onReadOnlyChange","readonly","hidden","onConfigure","value","Object","getPluginContainer","handleToolbarKeydown","visibleButtons","overflowBtn","initRovingTabindex","activateButton","renderItemsByLayout","renderItemsByGroup","parentElement","getTabElements","elements","applyRovingTabindex","setRovingFocus","index","activeElement","syncFocusedIndex","findIndex","el","isRtl","dir","direction","len","findNextEnabled","last","findLastEnabled","toolbarReg","getToolbarRegistry","firstGroup","groupPluginIds","groups","groupItems","pId","createButton","list","comboLabelEl","arrowSpan","span"],"mappings":"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"}
@@ -2,12 +2,15 @@ import { FullPresetOptions, PresetConfig } from './PresetTypes.js';
2
2
  /**
3
3
  * Creates a fully-featured editor preset with all standard plugins.
4
4
  *
5
+ * Pass `font.fonts` to supply font definitions (e.g. `STARTER_FONTS`).
6
+ * Without explicit fonts, the font picker toolbar renders empty.
7
+ *
5
8
  * Toolbar groups:
6
9
  * 1. Typography: Font, FontSize
7
10
  * 2. Inline marks: TextFormatting, Strikethrough, SuperSub
8
11
  * 3. Colors: TextColor, Highlight
9
12
  * 4. Block types: Heading, Blockquote, CodeBlock
10
- * 5. Paragraph layout: Alignment
13
+ * 5. Paragraph layout: Alignment, TextDirection
11
14
  * 6. Lists: List
12
15
  * 7. Insert objects: Link, Table, HorizontalRule, Image
13
16
  * 8. Utility: Print
@@ -1 +1 @@
1
- {"version":3,"file":"FullPreset.d.ts","sourceRoot":"","sources":["../../src/presets/FullPreset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,CA8B1E"}
1
+ {"version":3,"file":"FullPreset.d.ts","sourceRoot":"","sources":["../../src/presets/FullPreset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,YAAY,CA8B1E"}
@@ -2,6 +2,9 @@ import { MinimalPresetOptions, PresetConfig } from './PresetTypes.js';
2
2
  /**
3
3
  * Creates a minimal editor preset with font selection only.
4
4
  * CaretNavigation and GapCursor are auto-registered by the editor.
5
+ *
6
+ * Pass `font.fonts` to supply font definitions (e.g. `STARTER_FONTS`).
7
+ * Without explicit fonts, the font picker toolbar renders empty.
5
8
  */
6
9
  export declare function createMinimalPreset(options?: MinimalPresetOptions): PresetConfig;
7
10
  //# sourceMappingURL=MinimalPreset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MinimalPreset.d.ts","sourceRoot":"","sources":["../../src/presets/MinimalPreset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,YAAY,CAUhF"}
1
+ {"version":3,"file":"MinimalPreset.d.ts","sourceRoot":"","sources":["../../src/presets/MinimalPreset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE3E;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,YAAY,CAUhF"}
@@ -1,7 +1,7 @@
1
1
  import { Plugin } from '../plugins/Plugin.js';
2
2
  import { AlignmentConfig } from '../plugins/alignment/AlignmentPlugin.js';
3
3
  import { BlockquoteConfig } from '../plugins/blockquote/BlockquotePlugin.js';
4
- import { CodeBlockConfig } from '../plugins/code-block/CodeBlockPlugin.js';
4
+ import { CodeBlockConfig } from '../plugins/code-block/CodeBlockTypes.js';
5
5
  import { FontSizeConfig } from '../plugins/font-size/FontSizePlugin.js';
6
6
  import { FontConfig } from '../plugins/font/FontPlugin.js';
7
7
  import { HeadingConfig } from '../plugins/heading/HeadingPlugin.js';
@@ -14,6 +14,7 @@ import { PrintPluginConfig } from '../plugins/print/PrintTypes.js';
14
14
  import { StrikethroughConfig } from '../plugins/strikethrough/StrikethroughPlugin.js';
15
15
  import { SuperSubConfig } from '../plugins/super-sub/SuperSubPlugin.js';
16
16
  import { TextColorConfig } from '../plugins/text-color/TextColorPlugin.js';
17
+ import { TextDirectionConfig } from '../plugins/text-direction/TextDirectionCorePlugin.js';
17
18
  import { TextFormattingConfig } from '../plugins/text-formatting/TextFormattingPlugin.js';
18
19
  /**
19
20
  * Return type of preset factory functions.
@@ -40,6 +41,7 @@ export interface FullPresetOptions {
40
41
  readonly blockquote?: Partial<BlockquoteConfig>;
41
42
  readonly codeBlock?: Partial<CodeBlockConfig>;
42
43
  readonly alignment?: Partial<AlignmentConfig>;
44
+ readonly textDirection?: Partial<TextDirectionConfig>;
43
45
  readonly list?: Partial<ListConfig>;
44
46
  readonly link?: Partial<LinkConfig>;
45
47
  readonly table?: Partial<import('../plugins/table/TablePlugin.js').TableConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"PresetTypes.d.ts","sourceRoot":"","sources":["../../src/presets/PresetTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PresetTypes.d.ts","sourceRoot":"","sources":["../../src/presets/PresetTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Full preset entry point.
3
+ *
4
+ * Import from '@notectl/core/presets/full' to get the full preset
5
+ * with all standard plugins.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { createFullPreset } from '@notectl/core/presets/full';
10
+ * import { STARTER_FONTS } from '@notectl/core/fonts';
11
+ *
12
+ * const preset = createFullPreset({ font: { fonts: STARTER_FONTS } });
13
+ * ```
14
+ */
15
+ export type { PresetConfig, FullPresetOptions } from './PresetTypes.js';
16
+ export { createFullPreset } from './FullPreset.js';
17
+ //# sourceMappingURL=full.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../src/presets/full.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{AlignmentPlugin as i}from"../plugins/alignment.mjs";import{BlockquotePlugin as o}from"../plugins/blockquote.mjs";import{CodeBlockPlugin as n}from"../plugins/code-block.mjs";import{FontSizePlugin as t}from"../plugins/font-size.mjs";import{FontPlugin as m}from"../plugins/font.mjs";import{HardBreakPlugin as r}from"../plugins/hard-break.mjs";import{a as e}from"../chunks/HeadingPlugin-DYy3IoT_.mjs";import{HighlightPlugin as s}from"../plugins/highlight.mjs";import{HorizontalRulePlugin as l}from"../plugins/horizontal-rule.mjs";import{ImagePlugin as p}from"../plugins/image.mjs";import{LinkPlugin as g}from"../plugins/link.mjs";import{ListPlugin as u}from"../plugins/list.mjs";import{PrintPlugin as f}from"../plugins/print.mjs";import{StrikethroughPlugin as j}from"../plugins/strikethrough.mjs";import{SuperSubPlugin as w}from"../plugins/super-sub.mjs";import{TablePlugin as a}from"../plugins/table.mjs";import{TextColorPlugin as h}from"../plugins/text-color.mjs";import{TextDirectionPlugin as c}from"../plugins/text-direction.mjs";import{TextFormattingPlugin as k}from"../plugins/text-formatting.mjs";function b(b){return{toolbar:[[new m({fonts:[],...b?.font}),new t(b?.fontSize)],[new k(b?.textFormatting),new j(b?.strikethrough),new w(b?.superSub)],[new h(b?.textColor),new s(b?.highlight)],[new e(b?.heading),new o(b?.blockquote),new n(b?.codeBlock)],[new i(b?.alignment),new c(b?.textDirection)],[new u(b?.list)],[new g(b?.link),new a(b?.table),new l(b?.horizontalRule),new p(b?.image)],[new f(b?.print)]],plugins:[new r]}}export{b as createFullPreset};
2
+ //# sourceMappingURL=full.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full.mjs","sources":["../../src/presets/FullPreset.ts"],"sourcesContent":["/**\n * Full preset: a fully-featured editor with all standard plugins.\n */\n\nimport { AlignmentPlugin } from '../plugins/alignment/AlignmentPlugin.js';\nimport { BlockquotePlugin } from '../plugins/blockquote/BlockquotePlugin.js';\nimport { CodeBlockPlugin } from '../plugins/code-block/CodeBlockPlugin.js';\nimport { FontSizePlugin } from '../plugins/font-size/FontSizePlugin.js';\nimport { FontPlugin } from '../plugins/font/FontPlugin.js';\nimport { HardBreakPlugin } from '../plugins/hard-break/HardBreakPlugin.js';\nimport { HeadingPlugin } from '../plugins/heading/HeadingPlugin.js';\nimport { HighlightPlugin } from '../plugins/highlight/HighlightPlugin.js';\nimport { HorizontalRulePlugin } from '../plugins/horizontal-rule/HorizontalRulePlugin.js';\nimport { ImagePlugin } from '../plugins/image/ImagePlugin.js';\nimport { LinkPlugin } from '../plugins/link/LinkPlugin.js';\nimport { ListPlugin } from '../plugins/list/ListPlugin.js';\nimport { PrintPlugin } from '../plugins/print/PrintPlugin.js';\nimport { StrikethroughPlugin } from '../plugins/strikethrough/StrikethroughPlugin.js';\nimport { SuperSubPlugin } from '../plugins/super-sub/SuperSubPlugin.js';\nimport { TablePlugin } from '../plugins/table/TablePlugin.js';\nimport { TextColorPlugin } from '../plugins/text-color/TextColorPlugin.js';\nimport { TextDirectionCorePlugin } from '../plugins/text-direction/TextDirectionCorePlugin.js';\nimport { TextFormattingPlugin } from '../plugins/text-formatting/TextFormattingPlugin.js';\nimport type { FullPresetOptions, PresetConfig } from './PresetTypes.js';\n\n/**\n * Creates a fully-featured editor preset with all standard plugins.\n *\n * Pass `font.fonts` to supply font definitions (e.g. `STARTER_FONTS`).\n * Without explicit fonts, the font picker toolbar renders empty.\n *\n * Toolbar groups:\n * 1. Typography: Font, FontSize\n * 2. Inline marks: TextFormatting, Strikethrough, SuperSub\n * 3. Colors: TextColor, Highlight\n * 4. Block types: Heading, Blockquote, CodeBlock\n * 5. Paragraph layout: Alignment, TextDirection\n * 6. Lists: List\n * 7. Insert objects: Link, Table, HorizontalRule, Image\n * 8. Utility: Print\n */\nexport function createFullPreset(options?: FullPresetOptions): PresetConfig {\n\treturn {\n\t\ttoolbar: [\n\t\t\t[new FontPlugin({ fonts: [], ...options?.font }), new FontSizePlugin(options?.fontSize)],\n\t\t\t[\n\t\t\t\tnew TextFormattingPlugin(options?.textFormatting),\n\t\t\t\tnew StrikethroughPlugin(options?.strikethrough),\n\t\t\t\tnew SuperSubPlugin(options?.superSub),\n\t\t\t],\n\t\t\t[new TextColorPlugin(options?.textColor), new HighlightPlugin(options?.highlight)],\n\t\t\t[\n\t\t\t\tnew HeadingPlugin(options?.heading),\n\t\t\t\tnew BlockquotePlugin(options?.blockquote),\n\t\t\t\tnew CodeBlockPlugin(options?.codeBlock),\n\t\t\t],\n\t\t\t[\n\t\t\t\tnew AlignmentPlugin(options?.alignment),\n\t\t\t\tnew TextDirectionCorePlugin(options?.textDirection),\n\t\t\t],\n\t\t\t[new ListPlugin(options?.list)],\n\t\t\t[\n\t\t\t\tnew LinkPlugin(options?.link),\n\t\t\t\tnew TablePlugin(options?.table),\n\t\t\t\tnew HorizontalRulePlugin(options?.horizontalRule),\n\t\t\t\tnew ImagePlugin(options?.image),\n\t\t\t],\n\t\t\t[new PrintPlugin(options?.print)],\n\t\t],\n\t\tplugins: [new HardBreakPlugin()],\n\t};\n}\n"],"names":["createFullPreset","options","toolbar","FontPlugin","fonts","font","FontSizePlugin","fontSize","TextFormattingPlugin","textFormatting","StrikethroughPlugin","strikethrough","SuperSubPlugin","superSub","TextColorPlugin","textColor","HighlightPlugin","highlight","HeadingPlugin","heading","BlockquotePlugin","blockquote","CodeBlockPlugin","codeBlock","AlignmentPlugin","alignment","TextDirectionCorePlugin","textDirection","ListPlugin","list","LinkPlugin","link","TablePlugin","table","HorizontalRulePlugin","horizontalRule","ImagePlugin","image","PrintPlugin","print","plugins","HardBreakPlugin"],"mappings":"mlCAyCO,SAASA,EAAiBC,GAChC,MAAO,CACNC,QAAS,CACR,CAAC,IAAIC,EAAW,CAAEC,MAAO,MAAOH,GAASI,OAAS,IAAIC,EAAeL,GAASM,WAC9E,CACC,IAAIC,EAAqBP,GAASQ,gBAClC,IAAIC,EAAoBT,GAASU,eACjC,IAAIC,EAAeX,GAASY,WAE7B,CAAC,IAAIC,EAAgBb,GAASc,WAAY,IAAIC,EAAgBf,GAASgB,YACvE,CACC,IAAIC,EAAcjB,GAASkB,SAC3B,IAAIC,EAAiBnB,GAASoB,YAC9B,IAAIC,EAAgBrB,GAASsB,YAE9B,CACC,IAAIC,EAAgBvB,GAASwB,WAC7B,IAAIC,EAAwBzB,GAAS0B,gBAEtC,CAAC,IAAIC,EAAW3B,GAAS4B,OACzB,CACC,IAAIC,EAAW7B,GAAS8B,MACxB,IAAIC,EAAY/B,GAASgC,OACzB,IAAIC,EAAqBjC,GAASkC,gBAClC,IAAIC,EAAYnC,GAASoC,QAE1B,CAAC,IAAIC,EAAYrC,GAASsC,SAE3BC,QAAS,CAAC,IAAIC,GAEhB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Minimal preset entry point.
3
+ *
4
+ * Import from '@notectl/core/presets/minimal' to get only the minimal preset
5
+ * without pulling in the full plugin suite.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { createMinimalPreset } from '@notectl/core/presets/minimal';
10
+ * import { STARTER_FONTS } from '@notectl/core/fonts';
11
+ *
12
+ * const preset = createMinimalPreset({ font: { fonts: STARTER_FONTS } });
13
+ * ```
14
+ */
15
+ export type { PresetConfig, MinimalPresetOptions } from './PresetTypes.js';
16
+ export { createMinimalPreset } from './MinimalPreset.js';
17
+ //# sourceMappingURL=minimal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.d.ts","sourceRoot":"","sources":["../../src/presets/minimal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{FontPlugin as n}from"../plugins/font.mjs";function o(o){return{toolbar:[[new n({fonts:[],...o?.font})]],plugins:[]}}export{o as createMinimalPreset};
2
+ //# sourceMappingURL=minimal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.mjs","sources":["../../src/presets/MinimalPreset.ts"],"sourcesContent":["/**\n * Minimal preset: a lightweight editor with only font selection.\n */\n\nimport { FontPlugin } from '../plugins/font/FontPlugin.js';\nimport type { MinimalPresetOptions, PresetConfig } from './PresetTypes.js';\n\n/**\n * Creates a minimal editor preset with font selection only.\n * CaretNavigation and GapCursor are auto-registered by the editor.\n *\n * Pass `font.fonts` to supply font definitions (e.g. `STARTER_FONTS`).\n * Without explicit fonts, the font picker toolbar renders empty.\n */\nexport function createMinimalPreset(options?: MinimalPresetOptions): PresetConfig {\n\tconst fontPlugin: FontPlugin = new FontPlugin({\n\t\tfonts: [],\n\t\t...options?.font,\n\t});\n\n\treturn {\n\t\ttoolbar: [[fontPlugin]],\n\t\tplugins: [],\n\t};\n}\n"],"names":["createMinimalPreset","options","toolbar","FontPlugin","fonts","font","plugins"],"mappings":"iDAcO,SAASA,EAAoBC,GAMnC,MAAO,CACNC,QAAS,CAAC,CANoB,IAAIC,EAAW,CAC7CC,MAAO,MACJH,GAASI,SAKZC,QAAS,GAEX"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Preset factory functions entry point (barrel).
3
+ *
4
+ * For smaller bundles, prefer the granular sub-path imports:
5
+ * - `@notectl/core/presets/minimal` — minimal preset only (~5 KB gzip)
6
+ * - `@notectl/core/presets/full` — full preset with all plugins (~60 KB gzip)
7
+ *
8
+ * This barrel re-exports both for backward compatibility.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createFullPreset } from '@notectl/core/presets';
13
+ * import { STARTER_FONTS } from '@notectl/core/fonts';
14
+ *
15
+ * const preset = createFullPreset({ font: { fonts: STARTER_FONTS } });
16
+ * ```
17
+ */
18
+ export * from './presets/minimal.js';
19
+ export * from './presets/full.js';
20
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{createMinimalPreset as m}from"./presets/minimal.mjs";import{createFullPreset as r}from"./presets/full.mjs";export{r as createFullPreset,m as createMinimalPreset};
2
+ //# sourceMappingURL=presets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * CSSClassCollector: maps CSS declarations to unique class names during serialization.
3
+ * Deduplicates identical declaration sets and produces a minimal stylesheet.
4
+ * Uses content-hash (FNV-1a) for deterministic, document-order-independent class names.
5
+ */
6
+ /**
7
+ * Stateful collector that assigns CSS class names to unique declaration sets.
8
+ * Used during a single serialization pass, then produces the collected stylesheet.
9
+ *
10
+ * Class names are deterministic: the same declarations always produce the same
11
+ * class name, regardless of encounter order across documents.
12
+ */
13
+ export declare class CSSClassCollector {
14
+ /** Maps normalized declarations → class name. */
15
+ private readonly classMap;
16
+ /** Tracks used hashes to handle the (extremely rare) collision case. */
17
+ private readonly usedHashes;
18
+ /**
19
+ * Returns the class name for the given CSS declarations.
20
+ * If the same (normalized) declarations were seen before, returns the existing class.
21
+ */
22
+ getClassName(declarations: string): string;
23
+ /**
24
+ * Returns the semantic alignment class name for a given alignment value.
25
+ * Unlike style classes, alignment classes use descriptive names.
26
+ */
27
+ getAlignmentClassName(alignment: string): string;
28
+ /** Produces CSS rules for all collected classes. Returns empty string if none collected. */
29
+ toCSS(): string;
30
+ /**
31
+ * Returns a map from class name → CSS declarations for round-trip support.
32
+ * Used by `setContentHTML` to rehydrate class-based HTML.
33
+ */
34
+ toStyleMap(): ReadonlyMap<string, string>;
35
+ }
36
+ //# sourceMappingURL=CSSClassCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CSSClassCollector.d.ts","sourceRoot":"","sources":["../../src/serialization/CSSClassCollector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4CH;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC7B,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IAErD;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAoB1C;;;OAGG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAUhD,4FAA4F;IAC5F,KAAK,IAAI,MAAM;IAUf;;;OAGG;IACH,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;CAOzC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Types for class-based CSS serialization of document HTML.
3
+ */
4
+ /** Controls whether exported HTML uses inline `style` attributes or CSS class names. */
5
+ export type CSSMode = 'inline' | 'classes';
6
+ /** Options for {@link NotectlEditor.getContentHTML}. */
7
+ export interface ContentHTMLOptions {
8
+ readonly pretty?: boolean;
9
+ readonly cssMode?: CSSMode;
10
+ }
11
+ /** Result of class-based HTML serialization (`cssMode: 'classes'`). */
12
+ export interface ContentCSSResult {
13
+ readonly html: string;
14
+ readonly css: string;
15
+ /**
16
+ * Maps each generated class name to its CSS declarations.
17
+ * Pass to `setContentHTML(html, { styleMap })` for round-trip re-import.
18
+ */
19
+ readonly styleMap: ReadonlyMap<string, string>;
20
+ }
21
+ /** Options for {@link NotectlEditor.setContentHTML} when importing class-based HTML. */
22
+ export interface SetContentHTMLOptions {
23
+ /**
24
+ * Style map from a previous `getContentHTML({ cssMode: 'classes' })` call.
25
+ * Used to rehydrate class-based HTML back into styled content.
26
+ */
27
+ readonly styleMap?: ReadonlyMap<string, string>;
28
+ }
29
+ //# sourceMappingURL=ContentHTMLTypes.d.ts.map