@notectl/core 2.0.1 → 2.0.3

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 (1053) hide show
  1. package/README.md +258 -121
  2. package/dist/chunks/AlignmentPlugin-CIkPaP2h.mjs +2 -0
  3. package/dist/chunks/AlignmentPlugin-CIkPaP2h.mjs.map +1 -0
  4. package/dist/chunks/AttrRegistry-B1iBFcKO.mjs +2 -0
  5. package/dist/chunks/AttrRegistry-B1iBFcKO.mjs.map +1 -0
  6. package/dist/chunks/AttributedMarkCommands-Cmet1IuC.mjs +2 -0
  7. package/dist/chunks/AttributedMarkCommands-Cmet1IuC.mjs.map +1 -0
  8. package/dist/chunks/BlockInsertion-DTIE2BiH.mjs +2 -0
  9. package/dist/chunks/BlockInsertion-DTIE2BiH.mjs.map +1 -0
  10. package/dist/chunks/BlockTypePickerRegistry-U4uY7-lN.mjs +2 -0
  11. package/dist/chunks/BlockTypePickerRegistry-U4uY7-lN.mjs.map +1 -0
  12. package/dist/chunks/BlockquotePlugin-DmbnFmNj.mjs +2 -0
  13. package/dist/chunks/BlockquotePlugin-DmbnFmNj.mjs.map +1 -0
  14. package/dist/chunks/CaretNavigationPlugin-4EaHvYXR.mjs +2 -0
  15. package/dist/chunks/CaretNavigationPlugin-4EaHvYXR.mjs.map +1 -0
  16. package/dist/chunks/CodeBlockPlugin-BP3XaOGj.mjs +2 -0
  17. package/dist/chunks/CodeBlockPlugin-BP3XaOGj.mjs.map +1 -0
  18. package/dist/chunks/ColorGrid-taTKtdsm.mjs +2 -0
  19. package/dist/chunks/ColorGrid-taTKtdsm.mjs.map +1 -0
  20. package/dist/chunks/ColorPickerPopup-JJQ-gMBN.mjs +2 -0
  21. package/dist/chunks/ColorPickerPopup-JJQ-gMBN.mjs.map +1 -0
  22. package/dist/chunks/ColorValidation-3viVw_tK.mjs +2 -0
  23. package/dist/chunks/ColorValidation-3viVw_tK.mjs.map +1 -0
  24. package/dist/chunks/CommandHelpers-D0LIFM4O.mjs +2 -0
  25. package/dist/chunks/CommandHelpers-D0LIFM4O.mjs.map +1 -0
  26. package/dist/chunks/Commands-DJSVqp7b.mjs +2 -0
  27. package/dist/chunks/Commands-DJSVqp7b.mjs.map +1 -0
  28. package/dist/chunks/Decoration-6dhb8k3b.mjs +2 -0
  29. package/dist/chunks/Decoration-6dhb8k3b.mjs.map +1 -0
  30. package/dist/chunks/Document-CkQLx84k.mjs +2 -0
  31. package/dist/chunks/Document-CkQLx84k.mjs.map +1 -0
  32. package/dist/chunks/DocumentParser-QJUmtPp9.mjs +2 -0
  33. package/dist/chunks/DocumentParser-QJUmtPp9.mjs.map +1 -0
  34. package/dist/chunks/DocumentSerializer-bwcxM9WV.mjs +2 -0
  35. package/dist/chunks/DocumentSerializer-bwcxM9WV.mjs.map +1 -0
  36. package/dist/chunks/DomUtils-BkyCg-OO.mjs +2 -0
  37. package/dist/chunks/DomUtils-BkyCg-OO.mjs.map +1 -0
  38. package/dist/chunks/FontPlugin-Cz4qEYGh.mjs +2 -0
  39. package/dist/chunks/FontPlugin-Cz4qEYGh.mjs.map +1 -0
  40. package/dist/chunks/FontSizePlugin-D1WtDqrH.mjs +2 -0
  41. package/dist/chunks/FontSizePlugin-D1WtDqrH.mjs.map +1 -0
  42. package/dist/chunks/GapCursorNavigation-CKKq42kA.mjs +2 -0
  43. package/dist/chunks/GapCursorNavigation-CKKq42kA.mjs.map +1 -0
  44. package/dist/chunks/GapCursorPlugin-0CyOaciK.mjs +2 -0
  45. package/dist/chunks/GapCursorPlugin-0CyOaciK.mjs.map +1 -0
  46. package/dist/chunks/HTMLUtils-BLwp5G4f.mjs +2 -0
  47. package/dist/chunks/HTMLUtils-BLwp5G4f.mjs.map +1 -0
  48. package/dist/chunks/HardBreakPlugin-BOz-L53p.mjs +2 -0
  49. package/dist/chunks/HardBreakPlugin-BOz-L53p.mjs.map +1 -0
  50. package/dist/chunks/HeadingPlugin-C1F-5Ail.mjs +2 -0
  51. package/dist/chunks/HeadingPlugin-C1F-5Ail.mjs.map +1 -0
  52. package/dist/chunks/HighlightPlugin-LYARYuDC.mjs +2 -0
  53. package/dist/chunks/HighlightPlugin-LYARYuDC.mjs.map +1 -0
  54. package/dist/chunks/HorizontalRulePlugin-fmdbzWDQ.mjs +2 -0
  55. package/dist/chunks/HorizontalRulePlugin-fmdbzWDQ.mjs.map +1 -0
  56. package/dist/chunks/ImagePlugin-CrfnT1sD.mjs +2 -0
  57. package/dist/chunks/ImagePlugin-CrfnT1sD.mjs.map +1 -0
  58. package/dist/chunks/KeyboardNav-BZIHDPDV.mjs +2 -0
  59. package/dist/chunks/KeyboardNav-BZIHDPDV.mjs.map +1 -0
  60. package/dist/chunks/LinkPlugin-DzFJLnfQ.mjs +2 -0
  61. package/dist/chunks/LinkPlugin-DzFJLnfQ.mjs.map +1 -0
  62. package/dist/chunks/ListPlugin-C_Rcz3bV.mjs +2 -0
  63. package/dist/chunks/ListPlugin-C_Rcz3bV.mjs.map +1 -0
  64. package/dist/chunks/NavigationQueries-CgYPG6oY.mjs +2 -0
  65. package/dist/chunks/NavigationQueries-CgYPG6oY.mjs.map +1 -0
  66. package/dist/chunks/NodeResolver-CCA8UVRr.mjs +2 -0
  67. package/dist/chunks/NodeResolver-CCA8UVRr.mjs.map +1 -0
  68. package/dist/chunks/NodeSelectionCommands-CE_73CxF.mjs +2 -0
  69. package/dist/chunks/NodeSelectionCommands-CE_73CxF.mjs.map +1 -0
  70. package/dist/chunks/Platform-D9TRT4Mn.mjs +2 -0
  71. package/dist/chunks/Platform-D9TRT4Mn.mjs.map +1 -0
  72. package/dist/chunks/PluginHelpers-DLKHJWJn.mjs +2 -0
  73. package/dist/chunks/PluginHelpers-DLKHJWJn.mjs.map +1 -0
  74. package/dist/chunks/PopupManager-RWOaksC0.mjs +2 -0
  75. package/dist/chunks/PopupManager-RWOaksC0.mjs.map +1 -0
  76. package/dist/chunks/PopupPositioning-a1ADYSmx.mjs +2 -0
  77. package/dist/chunks/PopupPositioning-a1ADYSmx.mjs.map +1 -0
  78. package/dist/chunks/PrintPlugin-CwbEz3eP.mjs +2 -0
  79. package/dist/chunks/PrintPlugin-CwbEz3eP.mjs.map +1 -0
  80. package/dist/chunks/PrintTypes-B2DXeAEG.mjs +2 -0
  81. package/dist/chunks/PrintTypes-B2DXeAEG.mjs.map +1 -0
  82. package/dist/chunks/Selection-B14e7gd0.mjs +2 -0
  83. package/dist/chunks/Selection-B14e7gd0.mjs.map +1 -0
  84. package/dist/chunks/ShortcutFormatting-DQPMvupx.mjs +2 -0
  85. package/dist/chunks/ShortcutFormatting-DQPMvupx.mjs.map +1 -0
  86. package/dist/chunks/SmartPastePlugin-CXqJ0CPO.mjs +2 -0
  87. package/dist/chunks/SmartPastePlugin-CXqJ0CPO.mjs.map +1 -0
  88. package/dist/chunks/StrikethroughPlugin-CRl69jm3.mjs +2 -0
  89. package/dist/chunks/StrikethroughPlugin-CRl69jm3.mjs.map +1 -0
  90. package/dist/chunks/StyleRuntime-0yPPJK9H.mjs +2 -0
  91. package/dist/chunks/StyleRuntime-0yPPJK9H.mjs.map +1 -0
  92. package/dist/chunks/SuperSubPlugin-CAnaTJVm.mjs +2 -0
  93. package/dist/chunks/SuperSubPlugin-CAnaTJVm.mjs.map +1 -0
  94. package/dist/chunks/TablePlugin-D_7bgrqm.mjs +2 -0
  95. package/dist/chunks/TablePlugin-D_7bgrqm.mjs.map +1 -0
  96. package/dist/chunks/TextColorPlugin-Dfhvl1qG.mjs +2 -0
  97. package/dist/chunks/TextColorPlugin-Dfhvl1qG.mjs.map +1 -0
  98. package/dist/chunks/TextDirectionCorePlugin-CyKw-C8X.mjs +2 -0
  99. package/dist/chunks/TextDirectionCorePlugin-CyKw-C8X.mjs.map +1 -0
  100. package/dist/chunks/TextDirectionLocale-rlU1yNly.mjs +2 -0
  101. package/dist/chunks/TextDirectionLocale-rlU1yNly.mjs.map +1 -0
  102. package/dist/chunks/TextFormattingPlugin-xtQczzCs.mjs +2 -0
  103. package/dist/chunks/TextFormattingPlugin-xtQczzCs.mjs.map +1 -0
  104. package/dist/chunks/ToolbarPlugin-BFEniyH-.mjs +2 -0
  105. package/dist/chunks/ToolbarPlugin-BFEniyH-.mjs.map +1 -0
  106. package/dist/chunks/TypeBrands-BQR8dEYU.mjs +2 -0
  107. package/dist/chunks/TypeBrands-BQR8dEYU.mjs.map +1 -0
  108. package/dist/chunks/WordBoundary-iZXLMFyk.mjs +2 -0
  109. package/dist/chunks/WordBoundary-iZXLMFyk.mjs.map +1 -0
  110. package/dist/chunks/XmlPatterns-Ub8I1jdE.mjs +2 -0
  111. package/dist/chunks/XmlPatterns-Ub8I1jdE.mjs.map +1 -0
  112. package/dist/chunks/ar-3-z4mZhh.mjs +2 -0
  113. package/dist/chunks/ar-3-z4mZhh.mjs.map +1 -0
  114. package/dist/chunks/ar-B-l6wR4D.mjs +2 -0
  115. package/dist/chunks/ar-B-l6wR4D.mjs.map +1 -0
  116. package/dist/chunks/ar-B3NByR5H.mjs +2 -0
  117. package/dist/chunks/ar-B3NByR5H.mjs.map +1 -0
  118. package/dist/chunks/ar-BRvm4F78.mjs +2 -0
  119. package/dist/chunks/ar-BRvm4F78.mjs.map +1 -0
  120. package/dist/chunks/ar-BUMXujtS.mjs +2 -0
  121. package/dist/chunks/ar-BUMXujtS.mjs.map +1 -0
  122. package/dist/chunks/ar-BhVHv8Lx.mjs +2 -0
  123. package/dist/chunks/ar-BhVHv8Lx.mjs.map +1 -0
  124. package/dist/chunks/ar-BhwRD9Cg.mjs +2 -0
  125. package/dist/chunks/ar-BhwRD9Cg.mjs.map +1 -0
  126. package/dist/chunks/ar-Bm8ORJ3H.mjs +2 -0
  127. package/dist/chunks/ar-Bm8ORJ3H.mjs.map +1 -0
  128. package/dist/chunks/ar-BpxuRQB2.mjs +2 -0
  129. package/dist/chunks/ar-BpxuRQB2.mjs.map +1 -0
  130. package/dist/chunks/ar-CA0-ysCj.mjs +2 -0
  131. package/dist/chunks/ar-CA0-ysCj.mjs.map +1 -0
  132. package/dist/chunks/ar-CAkFpIju.mjs +2 -0
  133. package/dist/chunks/ar-CAkFpIju.mjs.map +1 -0
  134. package/dist/chunks/ar-CU6qxyFp.mjs +2 -0
  135. package/dist/chunks/ar-CU6qxyFp.mjs.map +1 -0
  136. package/dist/chunks/ar-CXcTrZVc.mjs +2 -0
  137. package/dist/chunks/ar-CXcTrZVc.mjs.map +1 -0
  138. package/dist/chunks/ar-CeO_osWz.mjs +2 -0
  139. package/dist/chunks/ar-CeO_osWz.mjs.map +1 -0
  140. package/dist/chunks/ar-CxRSPJDE.mjs +2 -0
  141. package/dist/chunks/ar-CxRSPJDE.mjs.map +1 -0
  142. package/dist/chunks/ar-DHes6Igy.mjs +2 -0
  143. package/dist/chunks/ar-DHes6Igy.mjs.map +1 -0
  144. package/dist/chunks/ar-DN1aHdqb.mjs +2 -0
  145. package/dist/chunks/ar-DN1aHdqb.mjs.map +1 -0
  146. package/dist/chunks/ar-DNzmHN3q.mjs +2 -0
  147. package/dist/chunks/ar-DNzmHN3q.mjs.map +1 -0
  148. package/dist/chunks/ar-DVdWier2.mjs +2 -0
  149. package/dist/chunks/ar-DVdWier2.mjs.map +1 -0
  150. package/dist/chunks/ar-G_ADWoCx.mjs +2 -0
  151. package/dist/chunks/ar-G_ADWoCx.mjs.map +1 -0
  152. package/dist/chunks/ar-KAaQxKMo.mjs +2 -0
  153. package/dist/chunks/ar-KAaQxKMo.mjs.map +1 -0
  154. package/dist/chunks/ar-MHdV5PAO.mjs +2 -0
  155. package/dist/chunks/ar-MHdV5PAO.mjs.map +1 -0
  156. package/dist/chunks/ar-S2VfgLMv.mjs +2 -0
  157. package/dist/chunks/ar-S2VfgLMv.mjs.map +1 -0
  158. package/dist/chunks/color-picker-DumtHdqh.mjs +2 -0
  159. package/dist/chunks/color-picker-DumtHdqh.mjs.map +1 -0
  160. package/dist/chunks/de-0x8V-vch.mjs +2 -0
  161. package/dist/chunks/de-0x8V-vch.mjs.map +1 -0
  162. package/dist/chunks/de-B5xIP9en.mjs +2 -0
  163. package/dist/chunks/de-B5xIP9en.mjs.map +1 -0
  164. package/dist/chunks/de-BBohFIqw.mjs +2 -0
  165. package/dist/chunks/de-BBohFIqw.mjs.map +1 -0
  166. package/dist/chunks/de-BWPmC-2S.mjs +2 -0
  167. package/dist/chunks/de-BWPmC-2S.mjs.map +1 -0
  168. package/dist/chunks/de-Bo1kM9rb.mjs +2 -0
  169. package/dist/chunks/de-Bo1kM9rb.mjs.map +1 -0
  170. package/dist/chunks/de-BqzR2XMP.mjs +2 -0
  171. package/dist/chunks/de-BqzR2XMP.mjs.map +1 -0
  172. package/dist/chunks/de-CIZibvOC.mjs +2 -0
  173. package/dist/chunks/de-CIZibvOC.mjs.map +1 -0
  174. package/dist/chunks/de-CLToQn0o.mjs +2 -0
  175. package/dist/chunks/de-CLToQn0o.mjs.map +1 -0
  176. package/dist/chunks/de-CNoAAJul.mjs +2 -0
  177. package/dist/chunks/de-CNoAAJul.mjs.map +1 -0
  178. package/dist/chunks/de-CPb7rgkk.mjs +2 -0
  179. package/dist/chunks/de-CPb7rgkk.mjs.map +1 -0
  180. package/dist/chunks/de-CdmBKVDW.mjs +2 -0
  181. package/dist/chunks/de-CdmBKVDW.mjs.map +1 -0
  182. package/dist/chunks/de-DDgeyWgp.mjs +2 -0
  183. package/dist/chunks/de-DDgeyWgp.mjs.map +1 -0
  184. package/dist/chunks/de-DGXQ4OiR.mjs +2 -0
  185. package/dist/chunks/de-DGXQ4OiR.mjs.map +1 -0
  186. package/dist/chunks/de-DJbvKl4E.mjs +2 -0
  187. package/dist/chunks/de-DJbvKl4E.mjs.map +1 -0
  188. package/dist/chunks/de-DKNvYM_G.mjs +2 -0
  189. package/dist/chunks/de-DKNvYM_G.mjs.map +1 -0
  190. package/dist/chunks/de-DOHm_P4A.mjs +2 -0
  191. package/dist/chunks/de-DOHm_P4A.mjs.map +1 -0
  192. package/dist/chunks/de-DTMX75rn.mjs +2 -0
  193. package/dist/chunks/de-DTMX75rn.mjs.map +1 -0
  194. package/dist/chunks/de-DfkQds5F.mjs +2 -0
  195. package/dist/chunks/de-DfkQds5F.mjs.map +1 -0
  196. package/dist/chunks/de-TEQW-F4t.mjs +2 -0
  197. package/dist/chunks/de-TEQW-F4t.mjs.map +1 -0
  198. package/dist/chunks/de-WzdZ_NJ6.mjs +2 -0
  199. package/dist/chunks/de-WzdZ_NJ6.mjs.map +1 -0
  200. package/dist/chunks/de-_vqVfXeo.mjs +2 -0
  201. package/dist/chunks/de-_vqVfXeo.mjs.map +1 -0
  202. package/dist/chunks/de-gR6jt-sS.mjs +2 -0
  203. package/dist/chunks/de-gR6jt-sS.mjs.map +1 -0
  204. package/dist/chunks/de-qOBFRCGL.mjs +2 -0
  205. package/dist/chunks/de-qOBFRCGL.mjs.map +1 -0
  206. package/dist/chunks/es-1udUsTJd.mjs +2 -0
  207. package/dist/chunks/es-1udUsTJd.mjs.map +1 -0
  208. package/dist/chunks/es-3H7h0_G5.mjs +2 -0
  209. package/dist/chunks/es-3H7h0_G5.mjs.map +1 -0
  210. package/dist/chunks/es-4-5iRK0M.mjs +2 -0
  211. package/dist/chunks/es-4-5iRK0M.mjs.map +1 -0
  212. package/dist/chunks/es-89LD3TlT.mjs +2 -0
  213. package/dist/chunks/es-89LD3TlT.mjs.map +1 -0
  214. package/dist/chunks/es-B2KFVoHa.mjs +2 -0
  215. package/dist/chunks/es-B2KFVoHa.mjs.map +1 -0
  216. package/dist/chunks/es-BUP1scLX.mjs +2 -0
  217. package/dist/chunks/es-BUP1scLX.mjs.map +1 -0
  218. package/dist/chunks/es-Bhhj-yh0.mjs +2 -0
  219. package/dist/chunks/es-Bhhj-yh0.mjs.map +1 -0
  220. package/dist/chunks/es-Bo0NTtQH.mjs +2 -0
  221. package/dist/chunks/es-Bo0NTtQH.mjs.map +1 -0
  222. package/dist/chunks/es-Bovw7l2W.mjs +2 -0
  223. package/dist/chunks/es-Bovw7l2W.mjs.map +1 -0
  224. package/dist/chunks/es-C7xAs1yn.mjs +2 -0
  225. package/dist/chunks/es-C7xAs1yn.mjs.map +1 -0
  226. package/dist/chunks/es-CIdF7MzV.mjs +2 -0
  227. package/dist/chunks/es-CIdF7MzV.mjs.map +1 -0
  228. package/dist/chunks/es-CPit7Z6w.mjs +2 -0
  229. package/dist/chunks/es-CPit7Z6w.mjs.map +1 -0
  230. package/dist/chunks/es-CQzgvQI6.mjs +2 -0
  231. package/dist/chunks/es-CQzgvQI6.mjs.map +1 -0
  232. package/dist/chunks/es-CSteuqi5.mjs +2 -0
  233. package/dist/chunks/es-CSteuqi5.mjs.map +1 -0
  234. package/dist/chunks/es-ClJxqhu_.mjs +2 -0
  235. package/dist/chunks/es-ClJxqhu_.mjs.map +1 -0
  236. package/dist/chunks/es-CrmqYoVh.mjs +2 -0
  237. package/dist/chunks/es-CrmqYoVh.mjs.map +1 -0
  238. package/dist/chunks/es-CwRwLkfr.mjs +2 -0
  239. package/dist/chunks/es-CwRwLkfr.mjs.map +1 -0
  240. package/dist/chunks/es-D7DRGnkZ.mjs +2 -0
  241. package/dist/chunks/es-D7DRGnkZ.mjs.map +1 -0
  242. package/dist/chunks/es-DET1uMu-.mjs +2 -0
  243. package/dist/chunks/es-DET1uMu-.mjs.map +1 -0
  244. package/dist/chunks/es-Dj83hJxy.mjs +2 -0
  245. package/dist/chunks/es-Dj83hJxy.mjs.map +1 -0
  246. package/dist/chunks/es-DwYWucI6.mjs +2 -0
  247. package/dist/chunks/es-DwYWucI6.mjs.map +1 -0
  248. package/dist/chunks/es-DwrcpThR.mjs +2 -0
  249. package/dist/chunks/es-DwrcpThR.mjs.map +1 -0
  250. package/dist/chunks/es-z7xjgDdk.mjs +2 -0
  251. package/dist/chunks/es-z7xjgDdk.mjs.map +1 -0
  252. package/dist/chunks/fonts-CG5ZnGux.mjs +2 -0
  253. package/dist/chunks/fonts-CG5ZnGux.mjs.map +1 -0
  254. package/dist/chunks/fr-B73tOEzO.mjs +2 -0
  255. package/dist/chunks/fr-B73tOEzO.mjs.map +1 -0
  256. package/dist/chunks/fr-BEbsFEkX.mjs +2 -0
  257. package/dist/chunks/fr-BEbsFEkX.mjs.map +1 -0
  258. package/dist/chunks/fr-BFCaEBSV.mjs +2 -0
  259. package/dist/chunks/fr-BFCaEBSV.mjs.map +1 -0
  260. package/dist/chunks/fr-BJ69XrDO.mjs +2 -0
  261. package/dist/chunks/fr-BJ69XrDO.mjs.map +1 -0
  262. package/dist/chunks/fr-BdQ_-Iwg.mjs +2 -0
  263. package/dist/chunks/fr-BdQ_-Iwg.mjs.map +1 -0
  264. package/dist/chunks/fr-BhnuBA0i.mjs +2 -0
  265. package/dist/chunks/fr-BhnuBA0i.mjs.map +1 -0
  266. package/dist/chunks/fr-BiLmpXZ9.mjs +2 -0
  267. package/dist/chunks/fr-BiLmpXZ9.mjs.map +1 -0
  268. package/dist/chunks/fr-C1Pak7kS.mjs +2 -0
  269. package/dist/chunks/fr-C1Pak7kS.mjs.map +1 -0
  270. package/dist/chunks/fr-CFDoFELm.mjs +2 -0
  271. package/dist/chunks/fr-CFDoFELm.mjs.map +1 -0
  272. package/dist/chunks/fr-CmsH8BnY.mjs +2 -0
  273. package/dist/chunks/fr-CmsH8BnY.mjs.map +1 -0
  274. package/dist/chunks/fr-Cz2qWiuV.mjs +2 -0
  275. package/dist/chunks/fr-Cz2qWiuV.mjs.map +1 -0
  276. package/dist/chunks/fr-CzTPuD1P.mjs +2 -0
  277. package/dist/chunks/fr-CzTPuD1P.mjs.map +1 -0
  278. package/dist/chunks/fr-D1LQMsjB.mjs +2 -0
  279. package/dist/chunks/fr-D1LQMsjB.mjs.map +1 -0
  280. package/dist/chunks/fr-D84mXQrZ.mjs +2 -0
  281. package/dist/chunks/fr-D84mXQrZ.mjs.map +1 -0
  282. package/dist/chunks/fr-DX7z_ld0.mjs +2 -0
  283. package/dist/chunks/fr-DX7z_ld0.mjs.map +1 -0
  284. package/dist/chunks/fr-DXkQUerf.mjs +2 -0
  285. package/dist/chunks/fr-DXkQUerf.mjs.map +1 -0
  286. package/dist/chunks/fr-Di5gv5P8.mjs +2 -0
  287. package/dist/chunks/fr-Di5gv5P8.mjs.map +1 -0
  288. package/dist/chunks/fr-Dq5MrVWd.mjs +2 -0
  289. package/dist/chunks/fr-Dq5MrVWd.mjs.map +1 -0
  290. package/dist/chunks/fr-DtfEjLSL.mjs +2 -0
  291. package/dist/chunks/fr-DtfEjLSL.mjs.map +1 -0
  292. package/dist/chunks/fr-DvW-dpp3.mjs +2 -0
  293. package/dist/chunks/fr-DvW-dpp3.mjs.map +1 -0
  294. package/dist/chunks/fr-UJFNrn-V.mjs +2 -0
  295. package/dist/chunks/fr-UJFNrn-V.mjs.map +1 -0
  296. package/dist/chunks/fr-hK8X-sM6.mjs +2 -0
  297. package/dist/chunks/fr-hK8X-sM6.mjs.map +1 -0
  298. package/dist/chunks/fr-uuOSXj4L.mjs +2 -0
  299. package/dist/chunks/fr-uuOSXj4L.mjs.map +1 -0
  300. package/dist/chunks/full-216JgIG1.mjs +2 -0
  301. package/dist/chunks/full-216JgIG1.mjs.map +1 -0
  302. package/dist/chunks/hi-B2kXjElO.mjs +2 -0
  303. package/dist/chunks/hi-B2kXjElO.mjs.map +1 -0
  304. package/dist/chunks/hi-B2mEQ5gX.mjs +2 -0
  305. package/dist/chunks/hi-B2mEQ5gX.mjs.map +1 -0
  306. package/dist/chunks/hi-B61lTO2W.mjs +2 -0
  307. package/dist/chunks/hi-B61lTO2W.mjs.map +1 -0
  308. package/dist/chunks/hi-BD5HrbxU.mjs +2 -0
  309. package/dist/chunks/hi-BD5HrbxU.mjs.map +1 -0
  310. package/dist/chunks/hi-BHTvSWXw.mjs +2 -0
  311. package/dist/chunks/hi-BHTvSWXw.mjs.map +1 -0
  312. package/dist/chunks/hi-BYyaOBqY.mjs +2 -0
  313. package/dist/chunks/hi-BYyaOBqY.mjs.map +1 -0
  314. package/dist/chunks/hi-Bhlbz5gX.mjs +2 -0
  315. package/dist/chunks/hi-Bhlbz5gX.mjs.map +1 -0
  316. package/dist/chunks/hi-BniuSk3L.mjs +2 -0
  317. package/dist/chunks/hi-BniuSk3L.mjs.map +1 -0
  318. package/dist/chunks/hi-CBODdhOq.mjs +2 -0
  319. package/dist/chunks/hi-CBODdhOq.mjs.map +1 -0
  320. package/dist/chunks/hi-CKWQCooT.mjs +2 -0
  321. package/dist/chunks/hi-CKWQCooT.mjs.map +1 -0
  322. package/dist/chunks/hi-CkoruGVs.mjs +2 -0
  323. package/dist/chunks/hi-CkoruGVs.mjs.map +1 -0
  324. package/dist/chunks/hi-D6Ge3Lp5.mjs +2 -0
  325. package/dist/chunks/hi-D6Ge3Lp5.mjs.map +1 -0
  326. package/dist/chunks/hi-DEreeBFj.mjs +2 -0
  327. package/dist/chunks/hi-DEreeBFj.mjs.map +1 -0
  328. package/dist/chunks/hi-Dj4JW-9k.mjs +2 -0
  329. package/dist/chunks/hi-Dj4JW-9k.mjs.map +1 -0
  330. package/dist/chunks/hi-DkP4pHSX.mjs +2 -0
  331. package/dist/chunks/hi-DkP4pHSX.mjs.map +1 -0
  332. package/dist/chunks/hi-DknCX8Nx.mjs +2 -0
  333. package/dist/chunks/hi-DknCX8Nx.mjs.map +1 -0
  334. package/dist/chunks/hi-Dm1KJQQ5.mjs +2 -0
  335. package/dist/chunks/hi-Dm1KJQQ5.mjs.map +1 -0
  336. package/dist/chunks/hi-Dx-LTWg-.mjs +2 -0
  337. package/dist/chunks/hi-Dx-LTWg-.mjs.map +1 -0
  338. package/dist/chunks/hi-RDoZtwMm.mjs +2 -0
  339. package/dist/chunks/hi-RDoZtwMm.mjs.map +1 -0
  340. package/dist/chunks/hi-Tq9eDRk7.mjs +2 -0
  341. package/dist/chunks/hi-Tq9eDRk7.mjs.map +1 -0
  342. package/dist/chunks/hi-_vJ_Eo4p.mjs +2 -0
  343. package/dist/chunks/hi-_vJ_Eo4p.mjs.map +1 -0
  344. package/dist/chunks/hi-l8E-czFm.mjs +2 -0
  345. package/dist/chunks/hi-l8E-czFm.mjs.map +1 -0
  346. package/dist/chunks/hi-ydmPh3HB.mjs +2 -0
  347. package/dist/chunks/hi-ydmPh3HB.mjs.map +1 -0
  348. package/dist/chunks/minimal-D-QxXO1C.mjs +2 -0
  349. package/dist/chunks/minimal-D-QxXO1C.mjs.map +1 -0
  350. package/dist/chunks/pt-B4NUSLW8.mjs +2 -0
  351. package/dist/chunks/pt-B4NUSLW8.mjs.map +1 -0
  352. package/dist/chunks/pt-B8VKEboV.mjs +2 -0
  353. package/dist/chunks/pt-B8VKEboV.mjs.map +1 -0
  354. package/dist/chunks/pt-BMDKykEi.mjs +2 -0
  355. package/dist/chunks/pt-BMDKykEi.mjs.map +1 -0
  356. package/dist/chunks/pt-BmWE3xXF.mjs +2 -0
  357. package/dist/chunks/pt-BmWE3xXF.mjs.map +1 -0
  358. package/dist/chunks/pt-CJWKE1SW.mjs +2 -0
  359. package/dist/chunks/pt-CJWKE1SW.mjs.map +1 -0
  360. package/dist/chunks/pt-CKETXoPa.mjs +2 -0
  361. package/dist/chunks/pt-CKETXoPa.mjs.map +1 -0
  362. package/dist/chunks/pt-CKRs16QH.mjs +2 -0
  363. package/dist/chunks/pt-CKRs16QH.mjs.map +1 -0
  364. package/dist/chunks/pt-Cb-1GHq4.mjs +2 -0
  365. package/dist/chunks/pt-Cb-1GHq4.mjs.map +1 -0
  366. package/dist/chunks/pt-CgpU74p4.mjs +2 -0
  367. package/dist/chunks/pt-CgpU74p4.mjs.map +1 -0
  368. package/dist/chunks/pt-CtOdAphq.mjs +2 -0
  369. package/dist/chunks/pt-CtOdAphq.mjs.map +1 -0
  370. package/dist/chunks/pt-CzaPFMSx.mjs +2 -0
  371. package/dist/chunks/pt-CzaPFMSx.mjs.map +1 -0
  372. package/dist/chunks/pt-DGuLcW0m.mjs +2 -0
  373. package/dist/chunks/pt-DGuLcW0m.mjs.map +1 -0
  374. package/dist/chunks/pt-DHzSXzlf.mjs +2 -0
  375. package/dist/chunks/pt-DHzSXzlf.mjs.map +1 -0
  376. package/dist/chunks/pt-DWDdBfLk.mjs +2 -0
  377. package/dist/chunks/pt-DWDdBfLk.mjs.map +1 -0
  378. package/dist/chunks/pt-DZ6Liq_x.mjs +2 -0
  379. package/dist/chunks/pt-DZ6Liq_x.mjs.map +1 -0
  380. package/dist/chunks/pt-D_MD7MJu.mjs +2 -0
  381. package/dist/chunks/pt-D_MD7MJu.mjs.map +1 -0
  382. package/dist/chunks/pt-DgaY_yNG.mjs +2 -0
  383. package/dist/chunks/pt-DgaY_yNG.mjs.map +1 -0
  384. package/dist/chunks/pt-DgzgCxdH.mjs +2 -0
  385. package/dist/chunks/pt-DgzgCxdH.mjs.map +1 -0
  386. package/dist/chunks/pt-Dh7nUcAM.mjs +2 -0
  387. package/dist/chunks/pt-Dh7nUcAM.mjs.map +1 -0
  388. package/dist/chunks/pt-P914L5AX.mjs +2 -0
  389. package/dist/chunks/pt-P914L5AX.mjs.map +1 -0
  390. package/dist/chunks/pt-XT1vsWZj.mjs +2 -0
  391. package/dist/chunks/pt-XT1vsWZj.mjs.map +1 -0
  392. package/dist/chunks/pt-jJ0XXSVz.mjs +2 -0
  393. package/dist/chunks/pt-jJ0XXSVz.mjs.map +1 -0
  394. package/dist/chunks/pt-tuOLwYkM.mjs +2 -0
  395. package/dist/chunks/pt-tuOLwYkM.mjs.map +1 -0
  396. package/dist/chunks/rolldown-runtime-B8Ku5yk6.mjs +1 -0
  397. package/dist/chunks/ru-7m8CMM17.mjs +2 -0
  398. package/dist/chunks/ru-7m8CMM17.mjs.map +1 -0
  399. package/dist/chunks/ru-9Qh1fR-K.mjs +2 -0
  400. package/dist/chunks/ru-9Qh1fR-K.mjs.map +1 -0
  401. package/dist/chunks/ru-B5gK8OLp.mjs +2 -0
  402. package/dist/chunks/ru-B5gK8OLp.mjs.map +1 -0
  403. package/dist/chunks/ru-BRNN6ldH.mjs +2 -0
  404. package/dist/chunks/ru-BRNN6ldH.mjs.map +1 -0
  405. package/dist/chunks/ru-BiyE9o-D.mjs +2 -0
  406. package/dist/chunks/ru-BiyE9o-D.mjs.map +1 -0
  407. package/dist/chunks/ru-BpGTIPbv.mjs +2 -0
  408. package/dist/chunks/ru-BpGTIPbv.mjs.map +1 -0
  409. package/dist/chunks/ru-CAzMaI4y.mjs +2 -0
  410. package/dist/chunks/ru-CAzMaI4y.mjs.map +1 -0
  411. package/dist/chunks/ru-COo6HpcD.mjs +2 -0
  412. package/dist/chunks/ru-COo6HpcD.mjs.map +1 -0
  413. package/dist/chunks/ru-CgEOZsUs.mjs +2 -0
  414. package/dist/chunks/ru-CgEOZsUs.mjs.map +1 -0
  415. package/dist/chunks/ru-CptzezhV.mjs +2 -0
  416. package/dist/chunks/ru-CptzezhV.mjs.map +1 -0
  417. package/dist/chunks/ru-Ct0qNMLS.mjs +2 -0
  418. package/dist/chunks/ru-Ct0qNMLS.mjs.map +1 -0
  419. package/dist/chunks/ru-Ct2IrzbA.mjs +2 -0
  420. package/dist/chunks/ru-Ct2IrzbA.mjs.map +1 -0
  421. package/dist/chunks/ru-CyHnlWLN.mjs +2 -0
  422. package/dist/chunks/ru-CyHnlWLN.mjs.map +1 -0
  423. package/dist/chunks/ru-DF0vhzeC.mjs +2 -0
  424. package/dist/chunks/ru-DF0vhzeC.mjs.map +1 -0
  425. package/dist/chunks/ru-DH6rsOWL.mjs +2 -0
  426. package/dist/chunks/ru-DH6rsOWL.mjs.map +1 -0
  427. package/dist/chunks/ru-DHH8k6G8.mjs +2 -0
  428. package/dist/chunks/ru-DHH8k6G8.mjs.map +1 -0
  429. package/dist/chunks/ru-GVReqjM4.mjs +2 -0
  430. package/dist/chunks/ru-GVReqjM4.mjs.map +1 -0
  431. package/dist/chunks/ru-IzloX5CY.mjs +2 -0
  432. package/dist/chunks/ru-IzloX5CY.mjs.map +1 -0
  433. package/dist/chunks/ru-ZrzXB0f6.mjs +2 -0
  434. package/dist/chunks/ru-ZrzXB0f6.mjs.map +1 -0
  435. package/dist/chunks/ru-asRKygvE.mjs +2 -0
  436. package/dist/chunks/ru-asRKygvE.mjs.map +1 -0
  437. package/dist/chunks/ru-m19l8nRA.mjs +2 -0
  438. package/dist/chunks/ru-m19l8nRA.mjs.map +1 -0
  439. package/dist/chunks/ru-vfQ5Xaz4.mjs +2 -0
  440. package/dist/chunks/ru-vfQ5Xaz4.mjs.map +1 -0
  441. package/dist/chunks/ru-wVOlNily.mjs +2 -0
  442. package/dist/chunks/ru-wVOlNily.mjs.map +1 -0
  443. package/dist/chunks/shared-DxmfXZH7.mjs +2 -0
  444. package/dist/chunks/shared-DxmfXZH7.mjs.map +1 -0
  445. package/dist/chunks/src-DFXIsulM.mjs +2 -0
  446. package/dist/chunks/src-DFXIsulM.mjs.map +1 -0
  447. package/dist/chunks/text-direction-advanced-B5JuIs0P.mjs +2 -0
  448. package/dist/chunks/text-direction-advanced-B5JuIs0P.mjs.map +1 -0
  449. package/dist/chunks/zh-0uhsRxfq.mjs +2 -0
  450. package/dist/chunks/zh-0uhsRxfq.mjs.map +1 -0
  451. package/dist/chunks/zh-1BrLr5Wk.mjs +2 -0
  452. package/dist/chunks/zh-1BrLr5Wk.mjs.map +1 -0
  453. package/dist/chunks/zh-BNHeXa_M.mjs +2 -0
  454. package/dist/chunks/zh-BNHeXa_M.mjs.map +1 -0
  455. package/dist/chunks/zh-BOpBzSX3.mjs +2 -0
  456. package/dist/chunks/zh-BOpBzSX3.mjs.map +1 -0
  457. package/dist/chunks/zh-BV2uDDGf.mjs +2 -0
  458. package/dist/chunks/zh-BV2uDDGf.mjs.map +1 -0
  459. package/dist/chunks/zh-BkoPteNb.mjs +2 -0
  460. package/dist/chunks/zh-BkoPteNb.mjs.map +1 -0
  461. package/dist/chunks/zh-C2z0g7OC.mjs +2 -0
  462. package/dist/chunks/zh-C2z0g7OC.mjs.map +1 -0
  463. package/dist/chunks/zh-CeJw45yo.mjs +2 -0
  464. package/dist/chunks/zh-CeJw45yo.mjs.map +1 -0
  465. package/dist/chunks/zh-CwVkxL4q.mjs +2 -0
  466. package/dist/chunks/zh-CwVkxL4q.mjs.map +1 -0
  467. package/dist/chunks/zh-Cy7mujpx.mjs +2 -0
  468. package/dist/chunks/zh-Cy7mujpx.mjs.map +1 -0
  469. package/dist/chunks/zh-D-P00ENX.mjs +2 -0
  470. package/dist/chunks/zh-D-P00ENX.mjs.map +1 -0
  471. package/dist/chunks/zh-D5d-NAuv.mjs +2 -0
  472. package/dist/chunks/zh-D5d-NAuv.mjs.map +1 -0
  473. package/dist/chunks/zh-D6gTQA2W.mjs +2 -0
  474. package/dist/chunks/zh-D6gTQA2W.mjs.map +1 -0
  475. package/dist/chunks/zh-DLwq4e4-.mjs +2 -0
  476. package/dist/chunks/zh-DLwq4e4-.mjs.map +1 -0
  477. package/dist/chunks/zh-D_Yb8Eg6.mjs +2 -0
  478. package/dist/chunks/zh-D_Yb8Eg6.mjs.map +1 -0
  479. package/dist/chunks/zh-DaNHqNDY.mjs +2 -0
  480. package/dist/chunks/zh-DaNHqNDY.mjs.map +1 -0
  481. package/dist/chunks/zh-De7-Y4O5.mjs +2 -0
  482. package/dist/chunks/zh-De7-Y4O5.mjs.map +1 -0
  483. package/dist/chunks/zh-Dj7kHEcp.mjs +2 -0
  484. package/dist/chunks/zh-Dj7kHEcp.mjs.map +1 -0
  485. package/dist/chunks/zh-Dl0oVWiK.mjs +2 -0
  486. package/dist/chunks/zh-Dl0oVWiK.mjs.map +1 -0
  487. package/dist/chunks/zh-Do0plBjM.mjs +2 -0
  488. package/dist/chunks/zh-Do0plBjM.mjs.map +1 -0
  489. package/dist/chunks/zh-Q0aDk5UA.mjs +2 -0
  490. package/dist/chunks/zh-Q0aDk5UA.mjs.map +1 -0
  491. package/dist/chunks/zh-eSgs8mzc.mjs +2 -0
  492. package/dist/chunks/zh-eSgs8mzc.mjs.map +1 -0
  493. package/dist/chunks/zh-giWyGMSZ.mjs +2 -0
  494. package/dist/chunks/zh-giWyGMSZ.mjs.map +1 -0
  495. package/dist/commands/BlockInsertion.d.ts.map +1 -1
  496. package/dist/commands/CommandHelpers.d.ts +13 -2
  497. package/dist/commands/CommandHelpers.d.ts.map +1 -1
  498. package/dist/commands/NodeSelectionCommands.d.ts +3 -8
  499. package/dist/commands/NodeSelectionCommands.d.ts.map +1 -1
  500. package/dist/editor/ContentSerializer.d.ts.map +1 -1
  501. package/dist/editor/EditorConfig.d.ts +50 -0
  502. package/dist/editor/EditorConfig.d.ts.map +1 -0
  503. package/dist/editor/EditorConfigController.d.ts +1 -1
  504. package/dist/editor/EditorConfigController.d.ts.map +1 -1
  505. package/dist/editor/EditorDOM.d.ts.map +1 -1
  506. package/dist/editor/EditorInitializer.d.ts +37 -0
  507. package/dist/editor/EditorInitializer.d.ts.map +1 -0
  508. package/dist/editor/EditorLifecycleCoordinator.d.ts +6 -1
  509. package/dist/editor/EditorLifecycleCoordinator.d.ts.map +1 -1
  510. package/dist/editor/NotectlEditor.d.ts +13 -51
  511. package/dist/editor/NotectlEditor.d.ts.map +1 -1
  512. package/dist/editor/PluginBootstrapper.d.ts +1 -1
  513. package/dist/editor/PluginBootstrapper.d.ts.map +1 -1
  514. package/dist/fonts.mjs +1 -2
  515. package/dist/full.mjs +1 -2
  516. package/dist/html.mjs +1 -2
  517. package/dist/input/ClipboardHandler.d.ts +5 -0
  518. package/dist/input/ClipboardHandler.d.ts.map +1 -1
  519. package/dist/input/HTMLParser.d.ts +9 -5
  520. package/dist/input/HTMLParser.d.ts.map +1 -1
  521. package/dist/input/InputHandler.d.ts +1 -0
  522. package/dist/input/InputHandler.d.ts.map +1 -1
  523. package/dist/input/PasteHTMLHandler.d.ts +25 -0
  524. package/dist/input/PasteHTMLHandler.d.ts.map +1 -0
  525. package/dist/input/PasteHandler.d.ts +2 -27
  526. package/dist/input/PasteHandler.d.ts.map +1 -1
  527. package/dist/input/PasteRichBlockHandler.d.ts +23 -0
  528. package/dist/input/PasteRichBlockHandler.d.ts.map +1 -0
  529. package/dist/input/SelectionDocument.d.ts +10 -0
  530. package/dist/input/SelectionDocument.d.ts.map +1 -0
  531. package/dist/model/RichBlockData.d.ts +12 -2
  532. package/dist/model/RichBlockData.d.ts.map +1 -1
  533. package/dist/notectl-core.mjs +1 -2
  534. package/dist/notectl-core.umd.js +2 -2
  535. package/dist/notectl-core.umd.js.map +1 -1
  536. package/dist/plugins/PluginContextFactory.d.ts +73 -0
  537. package/dist/plugins/PluginContextFactory.d.ts.map +1 -0
  538. package/dist/plugins/PluginManager.d.ts +5 -0
  539. package/dist/plugins/PluginManager.d.ts.map +1 -1
  540. package/dist/plugins/alignment.mjs +1 -2
  541. package/dist/plugins/blockquote.mjs +1 -2
  542. package/dist/plugins/caret-navigation.mjs +1 -2
  543. package/dist/plugins/code-block.mjs +1 -2
  544. package/dist/plugins/font-size.mjs +1 -2
  545. package/dist/plugins/font.mjs +1 -2
  546. package/dist/plugins/gap-cursor.mjs +1 -2
  547. package/dist/plugins/hard-break.mjs +1 -2
  548. package/dist/plugins/heading.mjs +1 -2
  549. package/dist/plugins/highlight.mjs +1 -2
  550. package/dist/plugins/horizontal-rule.mjs +1 -2
  551. package/dist/plugins/image/ImageCommands.d.ts.map +1 -1
  552. package/dist/plugins/image.mjs +1 -2
  553. package/dist/plugins/link.mjs +1 -2
  554. package/dist/plugins/list.mjs +1 -2
  555. package/dist/plugins/print/PrintContentPreparer.d.ts.map +1 -1
  556. package/dist/plugins/print.mjs +1 -2
  557. package/dist/plugins/shared/PopupManager.d.ts.map +1 -1
  558. package/dist/plugins/shared.mjs +1 -2
  559. package/dist/plugins/smart-paste.mjs +1 -2
  560. package/dist/plugins/strikethrough.mjs +1 -2
  561. package/dist/plugins/super-sub.mjs +1 -2
  562. package/dist/plugins/table/TableCommands.d.ts +1 -0
  563. package/dist/plugins/table/TableCommands.d.ts.map +1 -1
  564. package/dist/plugins/table/TableContextMenu.d.ts.map +1 -1
  565. package/dist/plugins/table/TableSelection.d.ts.map +1 -1
  566. package/dist/plugins/table.mjs +1 -2
  567. package/dist/plugins/text-color.mjs +1 -2
  568. package/dist/plugins/text-direction-advanced.mjs +1 -2
  569. package/dist/plugins/text-direction.mjs +1 -2
  570. package/dist/plugins/text-formatting.mjs +1 -2
  571. package/dist/plugins/toolbar/ToolbarOverflowController.d.ts +2 -0
  572. package/dist/plugins/toolbar/ToolbarOverflowController.d.ts.map +1 -1
  573. package/dist/plugins/toolbar.mjs +1 -2
  574. package/dist/presets/full.mjs +1 -2
  575. package/dist/presets/minimal.mjs +1 -2
  576. package/dist/presets.mjs +1 -2
  577. package/dist/state/StepInversion.d.ts.map +1 -1
  578. package/dist/view/EditorView.d.ts +8 -58
  579. package/dist/view/EditorView.d.ts.map +1 -1
  580. package/dist/view/EditorViewEvents.d.ts +54 -0
  581. package/dist/view/EditorViewEvents.d.ts.map +1 -0
  582. package/dist/view/EditorViewNavigation.d.ts +47 -0
  583. package/dist/view/EditorViewNavigation.d.ts.map +1 -0
  584. package/dist/view/SelectionSync.d.ts.map +1 -1
  585. package/package.json +5 -5
  586. package/dist/chunks/AttrRegistry-Ckj9eCHj.mjs +0 -2
  587. package/dist/chunks/AttrRegistry-Ckj9eCHj.mjs.map +0 -1
  588. package/dist/chunks/AttributedMarkCommands-x7h4Xy7V.mjs +0 -2
  589. package/dist/chunks/AttributedMarkCommands-x7h4Xy7V.mjs.map +0 -1
  590. package/dist/chunks/BlockInsertion-zPxm6oa_.mjs +0 -2
  591. package/dist/chunks/BlockInsertion-zPxm6oa_.mjs.map +0 -1
  592. package/dist/chunks/BlockTypePickerRegistry-DcSE6IXB.mjs +0 -2
  593. package/dist/chunks/BlockTypePickerRegistry-DcSE6IXB.mjs.map +0 -1
  594. package/dist/chunks/ColorGrid-CpkbKfXg.mjs +0 -2
  595. package/dist/chunks/ColorGrid-CpkbKfXg.mjs.map +0 -1
  596. package/dist/chunks/ColorPickerPopup-CDUvkgcK.mjs +0 -2
  597. package/dist/chunks/ColorPickerPopup-CDUvkgcK.mjs.map +0 -1
  598. package/dist/chunks/ColorValidation-DCSKq9B2.mjs +0 -2
  599. package/dist/chunks/ColorValidation-DCSKq9B2.mjs.map +0 -1
  600. package/dist/chunks/Commands-DwXBBVGR.mjs +0 -2
  601. package/dist/chunks/Commands-DwXBBVGR.mjs.map +0 -1
  602. package/dist/chunks/Decoration-D49mFXrH.mjs +0 -2
  603. package/dist/chunks/Decoration-D49mFXrH.mjs.map +0 -1
  604. package/dist/chunks/Document-HC8s50qJ.mjs +0 -2
  605. package/dist/chunks/Document-HC8s50qJ.mjs.map +0 -1
  606. package/dist/chunks/DocumentParser-w70-Axud.mjs +0 -2
  607. package/dist/chunks/DocumentParser-w70-Axud.mjs.map +0 -1
  608. package/dist/chunks/DomUtils-CznMAZZg.mjs +0 -2
  609. package/dist/chunks/DomUtils-CznMAZZg.mjs.map +0 -1
  610. package/dist/chunks/HTMLUtils-Cxy99Ak2.mjs +0 -2
  611. package/dist/chunks/HTMLUtils-Cxy99Ak2.mjs.map +0 -1
  612. package/dist/chunks/HeadingPlugin-B-LF-AMM.mjs +0 -2
  613. package/dist/chunks/HeadingPlugin-B-LF-AMM.mjs.map +0 -1
  614. package/dist/chunks/KeyboardNav-DsYhKKuV.mjs +0 -2
  615. package/dist/chunks/KeyboardNav-DsYhKKuV.mjs.map +0 -1
  616. package/dist/chunks/MarkCommands-CTuVDqnn.mjs +0 -2
  617. package/dist/chunks/MarkCommands-CTuVDqnn.mjs.map +0 -1
  618. package/dist/chunks/NavigationQueries-DCOv4Ca5.mjs +0 -2
  619. package/dist/chunks/NavigationQueries-DCOv4Ca5.mjs.map +0 -1
  620. package/dist/chunks/NotectlEditor-DBBJkPCW.mjs +0 -3
  621. package/dist/chunks/NotectlEditor-DBBJkPCW.mjs.map +0 -1
  622. package/dist/chunks/Platform-CU6itXZo.mjs +0 -2
  623. package/dist/chunks/Platform-CU6itXZo.mjs.map +0 -1
  624. package/dist/chunks/PluginHelpers-CdPR0MuT.mjs +0 -2
  625. package/dist/chunks/PluginHelpers-CdPR0MuT.mjs.map +0 -1
  626. package/dist/chunks/PopupManager-Du3dYnsJ.mjs +0 -2
  627. package/dist/chunks/PopupManager-Du3dYnsJ.mjs.map +0 -1
  628. package/dist/chunks/PopupPositioning-DtvqMSop.mjs +0 -2
  629. package/dist/chunks/PopupPositioning-DtvqMSop.mjs.map +0 -1
  630. package/dist/chunks/PrintTypes-DukwDSWS.mjs +0 -2
  631. package/dist/chunks/PrintTypes-DukwDSWS.mjs.map +0 -1
  632. package/dist/chunks/RangeIterator-CprUbOWv.mjs +0 -2
  633. package/dist/chunks/RangeIterator-CprUbOWv.mjs.map +0 -1
  634. package/dist/chunks/Selection-DhbizDM4.mjs +0 -2
  635. package/dist/chunks/Selection-DhbizDM4.mjs.map +0 -1
  636. package/dist/chunks/SelectionTransactions-DB3YDIEa.mjs +0 -2
  637. package/dist/chunks/SelectionTransactions-DB3YDIEa.mjs.map +0 -1
  638. package/dist/chunks/ShortcutFormatting-BLKS0Gys.mjs +0 -2
  639. package/dist/chunks/ShortcutFormatting-BLKS0Gys.mjs.map +0 -1
  640. package/dist/chunks/StyleRuntime-BmsLoEa8.mjs +0 -2
  641. package/dist/chunks/StyleRuntime-BmsLoEa8.mjs.map +0 -1
  642. package/dist/chunks/TextDirectionLocale-BraFI9JF.mjs +0 -2
  643. package/dist/chunks/TextDirectionLocale-BraFI9JF.mjs.map +0 -1
  644. package/dist/chunks/TypeBrands-Bp_Z_o5Y.mjs +0 -2
  645. package/dist/chunks/TypeBrands-Bp_Z_o5Y.mjs.map +0 -1
  646. package/dist/chunks/XmlPatterns-DxQXGjP8.mjs +0 -2
  647. package/dist/chunks/XmlPatterns-DxQXGjP8.mjs.map +0 -1
  648. package/dist/chunks/ar-B93SPJT7.mjs +0 -2
  649. package/dist/chunks/ar-B93SPJT7.mjs.map +0 -1
  650. package/dist/chunks/ar-BAmGa08u.mjs +0 -2
  651. package/dist/chunks/ar-BAmGa08u.mjs.map +0 -1
  652. package/dist/chunks/ar-BYNFEVLc.mjs +0 -2
  653. package/dist/chunks/ar-BYNFEVLc.mjs.map +0 -1
  654. package/dist/chunks/ar-Bnc7y8BP.mjs +0 -2
  655. package/dist/chunks/ar-Bnc7y8BP.mjs.map +0 -1
  656. package/dist/chunks/ar-Bp3rDZky.mjs +0 -2
  657. package/dist/chunks/ar-Bp3rDZky.mjs.map +0 -1
  658. package/dist/chunks/ar-BtOQ7lro.mjs +0 -2
  659. package/dist/chunks/ar-BtOQ7lro.mjs.map +0 -1
  660. package/dist/chunks/ar-C5JEHhw9.mjs +0 -2
  661. package/dist/chunks/ar-C5JEHhw9.mjs.map +0 -1
  662. package/dist/chunks/ar-CL3QL0tw.mjs +0 -2
  663. package/dist/chunks/ar-CL3QL0tw.mjs.map +0 -1
  664. package/dist/chunks/ar-CYtG-XlN.mjs +0 -2
  665. package/dist/chunks/ar-CYtG-XlN.mjs.map +0 -1
  666. package/dist/chunks/ar-CzVj8p__.mjs +0 -2
  667. package/dist/chunks/ar-CzVj8p__.mjs.map +0 -1
  668. package/dist/chunks/ar-D7PS3e2g.mjs +0 -2
  669. package/dist/chunks/ar-D7PS3e2g.mjs.map +0 -1
  670. package/dist/chunks/ar-D8adM2Uy.mjs +0 -2
  671. package/dist/chunks/ar-D8adM2Uy.mjs.map +0 -1
  672. package/dist/chunks/ar-D9jyShaB.mjs +0 -2
  673. package/dist/chunks/ar-D9jyShaB.mjs.map +0 -1
  674. package/dist/chunks/ar-DR6OA3ZO.mjs +0 -2
  675. package/dist/chunks/ar-DR6OA3ZO.mjs.map +0 -1
  676. package/dist/chunks/ar-Deibepjm.mjs +0 -2
  677. package/dist/chunks/ar-Deibepjm.mjs.map +0 -1
  678. package/dist/chunks/ar-Dlb5riUN.mjs +0 -2
  679. package/dist/chunks/ar-Dlb5riUN.mjs.map +0 -1
  680. package/dist/chunks/ar-DmmxE2W7.mjs +0 -2
  681. package/dist/chunks/ar-DmmxE2W7.mjs.map +0 -1
  682. package/dist/chunks/ar-Ds6Z2Gzf.mjs +0 -2
  683. package/dist/chunks/ar-Ds6Z2Gzf.mjs.map +0 -1
  684. package/dist/chunks/ar-DtIHQ8nU.mjs +0 -2
  685. package/dist/chunks/ar-DtIHQ8nU.mjs.map +0 -1
  686. package/dist/chunks/ar-J8B-on-0.mjs +0 -2
  687. package/dist/chunks/ar-J8B-on-0.mjs.map +0 -1
  688. package/dist/chunks/ar-b6VdnxAs.mjs +0 -2
  689. package/dist/chunks/ar-b6VdnxAs.mjs.map +0 -1
  690. package/dist/chunks/ar-iU02mRe5.mjs +0 -2
  691. package/dist/chunks/ar-iU02mRe5.mjs.map +0 -1
  692. package/dist/chunks/ar-mSCYQYnL.mjs +0 -2
  693. package/dist/chunks/ar-mSCYQYnL.mjs.map +0 -1
  694. package/dist/chunks/color-picker-Byjl_xr9.mjs +0 -2
  695. package/dist/chunks/color-picker-Byjl_xr9.mjs.map +0 -1
  696. package/dist/chunks/de-8aCC5jBM.mjs +0 -2
  697. package/dist/chunks/de-8aCC5jBM.mjs.map +0 -1
  698. package/dist/chunks/de-B4y4ndUw.mjs +0 -2
  699. package/dist/chunks/de-B4y4ndUw.mjs.map +0 -1
  700. package/dist/chunks/de-B5fcZ0FQ.mjs +0 -2
  701. package/dist/chunks/de-B5fcZ0FQ.mjs.map +0 -1
  702. package/dist/chunks/de-BT9VmwoJ.mjs +0 -2
  703. package/dist/chunks/de-BT9VmwoJ.mjs.map +0 -1
  704. package/dist/chunks/de-BZWSyJTG.mjs +0 -2
  705. package/dist/chunks/de-BZWSyJTG.mjs.map +0 -1
  706. package/dist/chunks/de-CFD_Wgik.mjs +0 -2
  707. package/dist/chunks/de-CFD_Wgik.mjs.map +0 -1
  708. package/dist/chunks/de-CLYtb6kD.mjs +0 -2
  709. package/dist/chunks/de-CLYtb6kD.mjs.map +0 -1
  710. package/dist/chunks/de-CP5v-98M.mjs +0 -2
  711. package/dist/chunks/de-CP5v-98M.mjs.map +0 -1
  712. package/dist/chunks/de-CYJ6uWno.mjs +0 -2
  713. package/dist/chunks/de-CYJ6uWno.mjs.map +0 -1
  714. package/dist/chunks/de-ChcKkF7A.mjs +0 -2
  715. package/dist/chunks/de-ChcKkF7A.mjs.map +0 -1
  716. package/dist/chunks/de-CicoU066.mjs +0 -2
  717. package/dist/chunks/de-CicoU066.mjs.map +0 -1
  718. package/dist/chunks/de-CjLAdBt2.mjs +0 -2
  719. package/dist/chunks/de-CjLAdBt2.mjs.map +0 -1
  720. package/dist/chunks/de-CtFvAXwF.mjs +0 -2
  721. package/dist/chunks/de-CtFvAXwF.mjs.map +0 -1
  722. package/dist/chunks/de-D1OAXtxJ.mjs +0 -2
  723. package/dist/chunks/de-D1OAXtxJ.mjs.map +0 -1
  724. package/dist/chunks/de-DBbzCQrm.mjs +0 -2
  725. package/dist/chunks/de-DBbzCQrm.mjs.map +0 -1
  726. package/dist/chunks/de-DOLwx_M7.mjs +0 -2
  727. package/dist/chunks/de-DOLwx_M7.mjs.map +0 -1
  728. package/dist/chunks/de-De2miMxo.mjs +0 -2
  729. package/dist/chunks/de-De2miMxo.mjs.map +0 -1
  730. package/dist/chunks/de-OTfhhinm.mjs +0 -2
  731. package/dist/chunks/de-OTfhhinm.mjs.map +0 -1
  732. package/dist/chunks/de-PZ9-LlBp.mjs +0 -2
  733. package/dist/chunks/de-PZ9-LlBp.mjs.map +0 -1
  734. package/dist/chunks/de-UREymH-5.mjs +0 -2
  735. package/dist/chunks/de-UREymH-5.mjs.map +0 -1
  736. package/dist/chunks/de-chYdoK9q.mjs +0 -2
  737. package/dist/chunks/de-chYdoK9q.mjs.map +0 -1
  738. package/dist/chunks/de-fXvs5vQT.mjs +0 -2
  739. package/dist/chunks/de-fXvs5vQT.mjs.map +0 -1
  740. package/dist/chunks/de-xJh5C_pk.mjs +0 -2
  741. package/dist/chunks/de-xJh5C_pk.mjs.map +0 -1
  742. package/dist/chunks/es-B9UhsaEI.mjs +0 -2
  743. package/dist/chunks/es-B9UhsaEI.mjs.map +0 -1
  744. package/dist/chunks/es-BHGwPgrP.mjs +0 -2
  745. package/dist/chunks/es-BHGwPgrP.mjs.map +0 -1
  746. package/dist/chunks/es-BTqy_aQ4.mjs +0 -2
  747. package/dist/chunks/es-BTqy_aQ4.mjs.map +0 -1
  748. package/dist/chunks/es-BbGOZGS_.mjs +0 -2
  749. package/dist/chunks/es-BbGOZGS_.mjs.map +0 -1
  750. package/dist/chunks/es-BjPsub0k.mjs +0 -2
  751. package/dist/chunks/es-BjPsub0k.mjs.map +0 -1
  752. package/dist/chunks/es-Bk0bRDFE.mjs +0 -2
  753. package/dist/chunks/es-Bk0bRDFE.mjs.map +0 -1
  754. package/dist/chunks/es-BkS6DsrM.mjs +0 -2
  755. package/dist/chunks/es-BkS6DsrM.mjs.map +0 -1
  756. package/dist/chunks/es-BzEpr4Bk.mjs +0 -2
  757. package/dist/chunks/es-BzEpr4Bk.mjs.map +0 -1
  758. package/dist/chunks/es-C2lnWyA0.mjs +0 -2
  759. package/dist/chunks/es-C2lnWyA0.mjs.map +0 -1
  760. package/dist/chunks/es-C7e35Muh.mjs +0 -2
  761. package/dist/chunks/es-C7e35Muh.mjs.map +0 -1
  762. package/dist/chunks/es-CBk43isB.mjs +0 -2
  763. package/dist/chunks/es-CBk43isB.mjs.map +0 -1
  764. package/dist/chunks/es-CE8t9fuM.mjs +0 -2
  765. package/dist/chunks/es-CE8t9fuM.mjs.map +0 -1
  766. package/dist/chunks/es-CFjzqIbS.mjs +0 -2
  767. package/dist/chunks/es-CFjzqIbS.mjs.map +0 -1
  768. package/dist/chunks/es-Ce-AEYxc.mjs +0 -2
  769. package/dist/chunks/es-Ce-AEYxc.mjs.map +0 -1
  770. package/dist/chunks/es-Co4AJr8Y.mjs +0 -2
  771. package/dist/chunks/es-Co4AJr8Y.mjs.map +0 -1
  772. package/dist/chunks/es-Cu5_OA4X.mjs +0 -2
  773. package/dist/chunks/es-Cu5_OA4X.mjs.map +0 -1
  774. package/dist/chunks/es-Cud6JXHf.mjs +0 -2
  775. package/dist/chunks/es-Cud6JXHf.mjs.map +0 -1
  776. package/dist/chunks/es-D-II7LZC.mjs +0 -2
  777. package/dist/chunks/es-D-II7LZC.mjs.map +0 -1
  778. package/dist/chunks/es-DBBSeOaD.mjs +0 -2
  779. package/dist/chunks/es-DBBSeOaD.mjs.map +0 -1
  780. package/dist/chunks/es-DCwjeUUu.mjs +0 -2
  781. package/dist/chunks/es-DCwjeUUu.mjs.map +0 -1
  782. package/dist/chunks/es-DvgH3-WZ.mjs +0 -2
  783. package/dist/chunks/es-DvgH3-WZ.mjs.map +0 -1
  784. package/dist/chunks/es-MgguVgIs.mjs +0 -2
  785. package/dist/chunks/es-MgguVgIs.mjs.map +0 -1
  786. package/dist/chunks/es-yXjjcxgb.mjs +0 -2
  787. package/dist/chunks/es-yXjjcxgb.mjs.map +0 -1
  788. package/dist/chunks/fr-B-_yKIAY.mjs +0 -2
  789. package/dist/chunks/fr-B-_yKIAY.mjs.map +0 -1
  790. package/dist/chunks/fr-BGyF2ym0.mjs +0 -2
  791. package/dist/chunks/fr-BGyF2ym0.mjs.map +0 -1
  792. package/dist/chunks/fr-BoRJ3B2-.mjs +0 -2
  793. package/dist/chunks/fr-BoRJ3B2-.mjs.map +0 -1
  794. package/dist/chunks/fr-BrKk4SPg.mjs +0 -2
  795. package/dist/chunks/fr-BrKk4SPg.mjs.map +0 -1
  796. package/dist/chunks/fr-C-y09LKg.mjs +0 -2
  797. package/dist/chunks/fr-C-y09LKg.mjs.map +0 -1
  798. package/dist/chunks/fr-C1W7jyd6.mjs +0 -2
  799. package/dist/chunks/fr-C1W7jyd6.mjs.map +0 -1
  800. package/dist/chunks/fr-C8CtmWBj.mjs +0 -2
  801. package/dist/chunks/fr-C8CtmWBj.mjs.map +0 -1
  802. package/dist/chunks/fr-C9oiPW0k.mjs +0 -2
  803. package/dist/chunks/fr-C9oiPW0k.mjs.map +0 -1
  804. package/dist/chunks/fr-CEkk4UyZ.mjs +0 -2
  805. package/dist/chunks/fr-CEkk4UyZ.mjs.map +0 -1
  806. package/dist/chunks/fr-Ccaetiwi.mjs +0 -2
  807. package/dist/chunks/fr-Ccaetiwi.mjs.map +0 -1
  808. package/dist/chunks/fr-Ccku5KzA.mjs +0 -2
  809. package/dist/chunks/fr-Ccku5KzA.mjs.map +0 -1
  810. package/dist/chunks/fr-CfUg1FxU.mjs +0 -2
  811. package/dist/chunks/fr-CfUg1FxU.mjs.map +0 -1
  812. package/dist/chunks/fr-DDkBcjmO.mjs +0 -2
  813. package/dist/chunks/fr-DDkBcjmO.mjs.map +0 -1
  814. package/dist/chunks/fr-DNwLChcm.mjs +0 -2
  815. package/dist/chunks/fr-DNwLChcm.mjs.map +0 -1
  816. package/dist/chunks/fr-DvneSjCf.mjs +0 -2
  817. package/dist/chunks/fr-DvneSjCf.mjs.map +0 -1
  818. package/dist/chunks/fr-Dx4Qqimj.mjs +0 -2
  819. package/dist/chunks/fr-Dx4Qqimj.mjs.map +0 -1
  820. package/dist/chunks/fr-RHXmueoO.mjs +0 -2
  821. package/dist/chunks/fr-RHXmueoO.mjs.map +0 -1
  822. package/dist/chunks/fr-VdiCNF4J.mjs +0 -2
  823. package/dist/chunks/fr-VdiCNF4J.mjs.map +0 -1
  824. package/dist/chunks/fr-Wiobfk5s.mjs +0 -2
  825. package/dist/chunks/fr-Wiobfk5s.mjs.map +0 -1
  826. package/dist/chunks/fr-YMiDtWuG.mjs +0 -2
  827. package/dist/chunks/fr-YMiDtWuG.mjs.map +0 -1
  828. package/dist/chunks/fr-_Oxf0k66.mjs +0 -2
  829. package/dist/chunks/fr-_Oxf0k66.mjs.map +0 -1
  830. package/dist/chunks/fr-gurfH-7T.mjs +0 -2
  831. package/dist/chunks/fr-gurfH-7T.mjs.map +0 -1
  832. package/dist/chunks/fr-zP7EjxDL.mjs +0 -2
  833. package/dist/chunks/fr-zP7EjxDL.mjs.map +0 -1
  834. package/dist/chunks/hi-B2W8pFqK.mjs +0 -2
  835. package/dist/chunks/hi-B2W8pFqK.mjs.map +0 -1
  836. package/dist/chunks/hi-B2m69ZCq.mjs +0 -2
  837. package/dist/chunks/hi-B2m69ZCq.mjs.map +0 -1
  838. package/dist/chunks/hi-BMIt3y_-.mjs +0 -2
  839. package/dist/chunks/hi-BMIt3y_-.mjs.map +0 -1
  840. package/dist/chunks/hi-BdtVhAzs.mjs +0 -2
  841. package/dist/chunks/hi-BdtVhAzs.mjs.map +0 -1
  842. package/dist/chunks/hi-BmkfaZpg.mjs +0 -2
  843. package/dist/chunks/hi-BmkfaZpg.mjs.map +0 -1
  844. package/dist/chunks/hi-C-l_R2SO.mjs +0 -2
  845. package/dist/chunks/hi-C-l_R2SO.mjs.map +0 -1
  846. package/dist/chunks/hi-C1LhM-oY.mjs +0 -2
  847. package/dist/chunks/hi-C1LhM-oY.mjs.map +0 -1
  848. package/dist/chunks/hi-CGEbGI1l.mjs +0 -2
  849. package/dist/chunks/hi-CGEbGI1l.mjs.map +0 -1
  850. package/dist/chunks/hi-CPuhj7IA.mjs +0 -2
  851. package/dist/chunks/hi-CPuhj7IA.mjs.map +0 -1
  852. package/dist/chunks/hi-CT5WERqi.mjs +0 -2
  853. package/dist/chunks/hi-CT5WERqi.mjs.map +0 -1
  854. package/dist/chunks/hi-CbLPPQ0b.mjs +0 -2
  855. package/dist/chunks/hi-CbLPPQ0b.mjs.map +0 -1
  856. package/dist/chunks/hi-ClvEtEKe.mjs +0 -2
  857. package/dist/chunks/hi-ClvEtEKe.mjs.map +0 -1
  858. package/dist/chunks/hi-CpBWHmYH.mjs +0 -2
  859. package/dist/chunks/hi-CpBWHmYH.mjs.map +0 -1
  860. package/dist/chunks/hi-DAfl8nU_.mjs +0 -2
  861. package/dist/chunks/hi-DAfl8nU_.mjs.map +0 -1
  862. package/dist/chunks/hi-DVof3w0y.mjs +0 -2
  863. package/dist/chunks/hi-DVof3w0y.mjs.map +0 -1
  864. package/dist/chunks/hi-DtlvSQkD.mjs +0 -2
  865. package/dist/chunks/hi-DtlvSQkD.mjs.map +0 -1
  866. package/dist/chunks/hi-FH3CAJuR.mjs +0 -2
  867. package/dist/chunks/hi-FH3CAJuR.mjs.map +0 -1
  868. package/dist/chunks/hi-Ga9h9a_1.mjs +0 -2
  869. package/dist/chunks/hi-Ga9h9a_1.mjs.map +0 -1
  870. package/dist/chunks/hi-Zc17M1T-.mjs +0 -2
  871. package/dist/chunks/hi-Zc17M1T-.mjs.map +0 -1
  872. package/dist/chunks/hi-g7i0bmig.mjs +0 -2
  873. package/dist/chunks/hi-g7i0bmig.mjs.map +0 -1
  874. package/dist/chunks/hi-js2P6byR.mjs +0 -2
  875. package/dist/chunks/hi-js2P6byR.mjs.map +0 -1
  876. package/dist/chunks/hi-ntUsOspQ.mjs +0 -2
  877. package/dist/chunks/hi-ntUsOspQ.mjs.map +0 -1
  878. package/dist/chunks/hi-yxAcR3w6.mjs +0 -2
  879. package/dist/chunks/hi-yxAcR3w6.mjs.map +0 -1
  880. package/dist/chunks/index-CVwf0cdH.mjs +0 -2
  881. package/dist/chunks/index-CVwf0cdH.mjs.map +0 -1
  882. package/dist/chunks/index-D3BZFsAD.mjs +0 -2
  883. package/dist/chunks/index-D3BZFsAD.mjs.map +0 -1
  884. package/dist/chunks/pt--IiroJQw.mjs +0 -2
  885. package/dist/chunks/pt--IiroJQw.mjs.map +0 -1
  886. package/dist/chunks/pt-BF72W8M5.mjs +0 -2
  887. package/dist/chunks/pt-BF72W8M5.mjs.map +0 -1
  888. package/dist/chunks/pt-BX_t4luI.mjs +0 -2
  889. package/dist/chunks/pt-BX_t4luI.mjs.map +0 -1
  890. package/dist/chunks/pt-B_XJ2s9X.mjs +0 -2
  891. package/dist/chunks/pt-B_XJ2s9X.mjs.map +0 -1
  892. package/dist/chunks/pt-C-Vp7Rxj.mjs +0 -2
  893. package/dist/chunks/pt-C-Vp7Rxj.mjs.map +0 -1
  894. package/dist/chunks/pt-CD2aCZXf.mjs +0 -2
  895. package/dist/chunks/pt-CD2aCZXf.mjs.map +0 -1
  896. package/dist/chunks/pt-CFjzqIbS.mjs +0 -2
  897. package/dist/chunks/pt-CFjzqIbS.mjs.map +0 -1
  898. package/dist/chunks/pt-CHjmBegF.mjs +0 -2
  899. package/dist/chunks/pt-CHjmBegF.mjs.map +0 -1
  900. package/dist/chunks/pt-CQRzEocL.mjs +0 -2
  901. package/dist/chunks/pt-CQRzEocL.mjs.map +0 -1
  902. package/dist/chunks/pt-Cem2WxUk.mjs +0 -2
  903. package/dist/chunks/pt-Cem2WxUk.mjs.map +0 -1
  904. package/dist/chunks/pt-D6kdF3fH.mjs +0 -2
  905. package/dist/chunks/pt-D6kdF3fH.mjs.map +0 -1
  906. package/dist/chunks/pt-DJfJVeY8.mjs +0 -2
  907. package/dist/chunks/pt-DJfJVeY8.mjs.map +0 -1
  908. package/dist/chunks/pt-DfB-IaYi.mjs +0 -2
  909. package/dist/chunks/pt-DfB-IaYi.mjs.map +0 -1
  910. package/dist/chunks/pt-DlNdH9pu.mjs +0 -2
  911. package/dist/chunks/pt-DlNdH9pu.mjs.map +0 -1
  912. package/dist/chunks/pt-DrJ0-8Yo.mjs +0 -2
  913. package/dist/chunks/pt-DrJ0-8Yo.mjs.map +0 -1
  914. package/dist/chunks/pt-DsBJpgpe.mjs +0 -2
  915. package/dist/chunks/pt-DsBJpgpe.mjs.map +0 -1
  916. package/dist/chunks/pt-DwdSYJzC.mjs +0 -2
  917. package/dist/chunks/pt-DwdSYJzC.mjs.map +0 -1
  918. package/dist/chunks/pt-Dx9UkZ3j.mjs +0 -2
  919. package/dist/chunks/pt-Dx9UkZ3j.mjs.map +0 -1
  920. package/dist/chunks/pt-K0BUlM9X.mjs +0 -2
  921. package/dist/chunks/pt-K0BUlM9X.mjs.map +0 -1
  922. package/dist/chunks/pt-TuA3_GDM.mjs +0 -2
  923. package/dist/chunks/pt-TuA3_GDM.mjs.map +0 -1
  924. package/dist/chunks/pt-cN6r-f7f.mjs +0 -2
  925. package/dist/chunks/pt-cN6r-f7f.mjs.map +0 -1
  926. package/dist/chunks/pt-uNGpVM3D.mjs +0 -2
  927. package/dist/chunks/pt-uNGpVM3D.mjs.map +0 -1
  928. package/dist/chunks/pt-v1E9u-Jx.mjs +0 -2
  929. package/dist/chunks/pt-v1E9u-Jx.mjs.map +0 -1
  930. package/dist/chunks/ru-0h51zrqE.mjs +0 -2
  931. package/dist/chunks/ru-0h51zrqE.mjs.map +0 -1
  932. package/dist/chunks/ru-4S8w6UN_.mjs +0 -2
  933. package/dist/chunks/ru-4S8w6UN_.mjs.map +0 -1
  934. package/dist/chunks/ru-B0cRw90L.mjs +0 -2
  935. package/dist/chunks/ru-B0cRw90L.mjs.map +0 -1
  936. package/dist/chunks/ru-B3O7WXNM.mjs +0 -2
  937. package/dist/chunks/ru-B3O7WXNM.mjs.map +0 -1
  938. package/dist/chunks/ru-B6zVAzvI.mjs +0 -2
  939. package/dist/chunks/ru-B6zVAzvI.mjs.map +0 -1
  940. package/dist/chunks/ru-B8teJin_.mjs +0 -2
  941. package/dist/chunks/ru-B8teJin_.mjs.map +0 -1
  942. package/dist/chunks/ru-BCriPw-8.mjs +0 -2
  943. package/dist/chunks/ru-BCriPw-8.mjs.map +0 -1
  944. package/dist/chunks/ru-BNOU16E5.mjs +0 -2
  945. package/dist/chunks/ru-BNOU16E5.mjs.map +0 -1
  946. package/dist/chunks/ru-BO6BIS5W.mjs +0 -2
  947. package/dist/chunks/ru-BO6BIS5W.mjs.map +0 -1
  948. package/dist/chunks/ru-Bdy1lLuc.mjs +0 -2
  949. package/dist/chunks/ru-Bdy1lLuc.mjs.map +0 -1
  950. package/dist/chunks/ru-BgBctNVm.mjs +0 -2
  951. package/dist/chunks/ru-BgBctNVm.mjs.map +0 -1
  952. package/dist/chunks/ru-CNLx7T3O.mjs +0 -2
  953. package/dist/chunks/ru-CNLx7T3O.mjs.map +0 -1
  954. package/dist/chunks/ru-CVSCT776.mjs +0 -2
  955. package/dist/chunks/ru-CVSCT776.mjs.map +0 -1
  956. package/dist/chunks/ru-CZvkdGnf.mjs +0 -2
  957. package/dist/chunks/ru-CZvkdGnf.mjs.map +0 -1
  958. package/dist/chunks/ru-CegMPuML.mjs +0 -2
  959. package/dist/chunks/ru-CegMPuML.mjs.map +0 -1
  960. package/dist/chunks/ru-CiLrD2Nz.mjs +0 -2
  961. package/dist/chunks/ru-CiLrD2Nz.mjs.map +0 -1
  962. package/dist/chunks/ru-ClEM6OKY.mjs +0 -2
  963. package/dist/chunks/ru-ClEM6OKY.mjs.map +0 -1
  964. package/dist/chunks/ru-CrbxCeQf.mjs +0 -2
  965. package/dist/chunks/ru-CrbxCeQf.mjs.map +0 -1
  966. package/dist/chunks/ru-D3j2x2xu.mjs +0 -2
  967. package/dist/chunks/ru-D3j2x2xu.mjs.map +0 -1
  968. package/dist/chunks/ru-DdHqb4Mh.mjs +0 -2
  969. package/dist/chunks/ru-DdHqb4Mh.mjs.map +0 -1
  970. package/dist/chunks/ru-DjgNdOdJ.mjs +0 -2
  971. package/dist/chunks/ru-DjgNdOdJ.mjs.map +0 -1
  972. package/dist/chunks/ru-Tzd5N37W.mjs +0 -2
  973. package/dist/chunks/ru-Tzd5N37W.mjs.map +0 -1
  974. package/dist/chunks/ru-XKNCzkR2.mjs +0 -2
  975. package/dist/chunks/ru-XKNCzkR2.mjs.map +0 -1
  976. package/dist/chunks/zh--oNSMazK.mjs +0 -2
  977. package/dist/chunks/zh--oNSMazK.mjs.map +0 -1
  978. package/dist/chunks/zh-BfeWdPIz.mjs +0 -2
  979. package/dist/chunks/zh-BfeWdPIz.mjs.map +0 -1
  980. package/dist/chunks/zh-BnOxGKxF.mjs +0 -2
  981. package/dist/chunks/zh-BnOxGKxF.mjs.map +0 -1
  982. package/dist/chunks/zh-BqMtE-jN.mjs +0 -2
  983. package/dist/chunks/zh-BqMtE-jN.mjs.map +0 -1
  984. package/dist/chunks/zh-C3aI7A2o.mjs +0 -2
  985. package/dist/chunks/zh-C3aI7A2o.mjs.map +0 -1
  986. package/dist/chunks/zh-C6YALJZt.mjs +0 -2
  987. package/dist/chunks/zh-C6YALJZt.mjs.map +0 -1
  988. package/dist/chunks/zh-CWdTbUOP.mjs +0 -2
  989. package/dist/chunks/zh-CWdTbUOP.mjs.map +0 -1
  990. package/dist/chunks/zh-CY01pMD4.mjs +0 -2
  991. package/dist/chunks/zh-CY01pMD4.mjs.map +0 -1
  992. package/dist/chunks/zh-Cmt7n9FY.mjs +0 -2
  993. package/dist/chunks/zh-Cmt7n9FY.mjs.map +0 -1
  994. package/dist/chunks/zh-CpP2kee3.mjs +0 -2
  995. package/dist/chunks/zh-CpP2kee3.mjs.map +0 -1
  996. package/dist/chunks/zh-Cpbg4evx.mjs +0 -2
  997. package/dist/chunks/zh-Cpbg4evx.mjs.map +0 -1
  998. package/dist/chunks/zh-Cqb55JWa.mjs +0 -2
  999. package/dist/chunks/zh-Cqb55JWa.mjs.map +0 -1
  1000. package/dist/chunks/zh-DCQZ6gss.mjs +0 -2
  1001. package/dist/chunks/zh-DCQZ6gss.mjs.map +0 -1
  1002. package/dist/chunks/zh-DG2CNTUU.mjs +0 -2
  1003. package/dist/chunks/zh-DG2CNTUU.mjs.map +0 -1
  1004. package/dist/chunks/zh-DTiTJbzz.mjs +0 -2
  1005. package/dist/chunks/zh-DTiTJbzz.mjs.map +0 -1
  1006. package/dist/chunks/zh-Da1z6qbB.mjs +0 -2
  1007. package/dist/chunks/zh-Da1z6qbB.mjs.map +0 -1
  1008. package/dist/chunks/zh-Di3WqY4_.mjs +0 -2
  1009. package/dist/chunks/zh-Di3WqY4_.mjs.map +0 -1
  1010. package/dist/chunks/zh-DlBt06Pr.mjs +0 -2
  1011. package/dist/chunks/zh-DlBt06Pr.mjs.map +0 -1
  1012. package/dist/chunks/zh-Dt-wVrNr.mjs +0 -2
  1013. package/dist/chunks/zh-Dt-wVrNr.mjs.map +0 -1
  1014. package/dist/chunks/zh-ND6vW2M-.mjs +0 -2
  1015. package/dist/chunks/zh-ND6vW2M-.mjs.map +0 -1
  1016. package/dist/chunks/zh-Yd3GNsa0.mjs +0 -2
  1017. package/dist/chunks/zh-Yd3GNsa0.mjs.map +0 -1
  1018. package/dist/chunks/zh-lhynyH6Q.mjs +0 -2
  1019. package/dist/chunks/zh-lhynyH6Q.mjs.map +0 -1
  1020. package/dist/chunks/zh-v9NmlEIN.mjs +0 -2
  1021. package/dist/chunks/zh-v9NmlEIN.mjs.map +0 -1
  1022. package/dist/fonts.mjs.map +0 -1
  1023. package/dist/full.mjs.map +0 -1
  1024. package/dist/html.mjs.map +0 -1
  1025. package/dist/notectl-core.mjs.map +0 -1
  1026. package/dist/plugins/alignment.mjs.map +0 -1
  1027. package/dist/plugins/blockquote.mjs.map +0 -1
  1028. package/dist/plugins/caret-navigation.mjs.map +0 -1
  1029. package/dist/plugins/code-block.mjs.map +0 -1
  1030. package/dist/plugins/font-size.mjs.map +0 -1
  1031. package/dist/plugins/font.mjs.map +0 -1
  1032. package/dist/plugins/gap-cursor.mjs.map +0 -1
  1033. package/dist/plugins/hard-break.mjs.map +0 -1
  1034. package/dist/plugins/heading.mjs.map +0 -1
  1035. package/dist/plugins/highlight.mjs.map +0 -1
  1036. package/dist/plugins/horizontal-rule.mjs.map +0 -1
  1037. package/dist/plugins/image.mjs.map +0 -1
  1038. package/dist/plugins/link.mjs.map +0 -1
  1039. package/dist/plugins/list.mjs.map +0 -1
  1040. package/dist/plugins/print.mjs.map +0 -1
  1041. package/dist/plugins/shared.mjs.map +0 -1
  1042. package/dist/plugins/smart-paste.mjs.map +0 -1
  1043. package/dist/plugins/strikethrough.mjs.map +0 -1
  1044. package/dist/plugins/super-sub.mjs.map +0 -1
  1045. package/dist/plugins/table.mjs.map +0 -1
  1046. package/dist/plugins/text-color.mjs.map +0 -1
  1047. package/dist/plugins/text-direction-advanced.mjs.map +0 -1
  1048. package/dist/plugins/text-direction.mjs.map +0 -1
  1049. package/dist/plugins/text-formatting.mjs.map +0 -1
  1050. package/dist/plugins/toolbar.mjs.map +0 -1
  1051. package/dist/presets/full.mjs.map +0 -1
  1052. package/dist/presets/minimal.mjs.map +0 -1
  1053. package/dist/presets.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"text-formatting.mjs","sources":["../../src/plugins/text-formatting/TextFormattingLocale.ts","../../src/plugins/text-formatting/TextFormattingPlugin.ts"],"sourcesContent":["/**\n * Locale interface and default English locale for the TextFormattingPlugin.\n */\n\n// --- Locale Interface ---\n\nexport interface TextFormattingLocale {\n\treadonly boldLabel: string;\n\treadonly italicLabel: string;\n\treadonly underlineLabel: string;\n}\n\n// --- Default English Locale ---\n\nexport const TEXT_FORMATTING_LOCALE_EN: TextFormattingLocale = {\n\tboldLabel: 'Bold',\n\titalicLabel: 'Italic',\n\tunderlineLabel: 'Underline',\n};\n\n// --- Lazy Locale Loader ---\n\nconst localeModules: Record<string, () => Promise<{ default: TextFormattingLocale }>> =\n\timport.meta.glob<{ default: TextFormattingLocale }>('./locales/*.ts', { eager: false });\n\nexport async function loadTextFormattingLocale(lang: string): Promise<TextFormattingLocale> {\n\tif (lang === 'en') return TEXT_FORMATTING_LOCALE_EN;\n\tconst loader = localeModules[`./locales/${lang}.ts`];\n\tif (!loader) return TEXT_FORMATTING_LOCALE_EN;\n\ttry {\n\t\tconst mod = await loader();\n\t\treturn mod.default;\n\t} catch {\n\t\treturn TEXT_FORMATTING_LOCALE_EN;\n\t}\n}\n","/**\n * TextFormattingPlugin: registers inline marks (bold, italic, underline)\n * with their MarkSpecs, toggle commands, keyboard shortcuts, and toolbar items.\n *\n * This plugin is data-driven — each mark type is defined declaratively and\n * all registrations (MarkSpec, command, keymap, toolbar item) are derived\n * from the same definition.\n *\n * Supports two separate config dimensions:\n * - Feature config (bold/italic/underline): controls whether the mark is\n * registered in the schema. When disabled, the keyboard shortcut does nothing.\n * - Toolbar config: controls whether the toolbar button is visible.\n * When a feature is disabled but toolbar is enabled, the button renders as disabled.\n */\n\nimport { isMarkActive, toggleMark } from '../../commands/Commands.js';\nimport type { ParseRule } from '../../model/ParseRule.js';\nimport type { SanitizeConfig } from '../../model/SanitizeConfig.js';\nimport { markType as mkType } from '../../model/TypeBrands.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { resolveLocale, toCommandName } from '../shared/PluginHelpers.js';\nimport { formatShortcut } from '../shared/ShortcutFormatting.js';\nimport {\n\tTEXT_FORMATTING_LOCALE_EN,\n\ttype TextFormattingLocale,\n\tloadTextFormattingLocale,\n} from './TextFormattingLocale.js';\n\n// --- Configuration ---\n\n/** Controls toolbar button visibility per mark. */\nexport interface TextFormattingToolbarConfig {\n\treadonly bold?: boolean;\n\treadonly italic?: boolean;\n\treadonly underline?: boolean;\n}\n\n/** Controls which inline marks are enabled and which toolbar buttons are shown. */\nexport interface TextFormattingConfig {\n\treadonly bold: boolean;\n\treadonly italic: boolean;\n\treadonly underline: boolean;\n\treadonly toolbar?: TextFormattingToolbarConfig;\n\treadonly locale?: TextFormattingLocale;\n}\n\nconst DEFAULT_CONFIG: TextFormattingConfig = {\n\tbold: true,\n\titalic: true,\n\tunderline: true,\n};\n\n// --- Mark Definitions ---\n\ninterface MarkDefinition {\n\treadonly type: string;\n\treadonly configKey: keyof Omit<TextFormattingConfig, 'toolbar' | 'locale'>;\n\treadonly rank: number;\n\treadonly tag: string;\n\treadonly icon: string;\n\treadonly keyBinding: string;\n\treadonly toHTMLString: (content: string) => string;\n\treadonly parseHTML: readonly ParseRule[];\n\treadonly sanitize: SanitizeConfig;\n}\n\nconst BOLD_ICON =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z\"/></svg>';\nconst ITALIC_ICON =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\"/></svg>';\nconst UNDERLINE_ICON =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\"/></svg>';\n\nconst MARK_DEFINITIONS: readonly MarkDefinition[] = [\n\t{\n\t\ttype: 'bold',\n\t\tconfigKey: 'bold',\n\t\trank: 0,\n\t\ttag: 'strong',\n\t\ticon: BOLD_ICON,\n\t\tkeyBinding: 'Mod-B',\n\t\ttoHTMLString: (content) => `<strong>${content}</strong>`,\n\t\tparseHTML: [\n\t\t\t{ tag: 'strong' },\n\t\t\t{\n\t\t\t\ttag: 'b',\n\t\t\t\tgetAttrs: (el: HTMLElement) => {\n\t\t\t\t\tconst fw: string = el.style.fontWeight;\n\t\t\t\t\treturn fw === 'normal' || fw === '400' ? false : {};\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttag: 'span',\n\t\t\t\tgetAttrs: (el: HTMLElement) => {\n\t\t\t\t\tconst fw: string = el.style.fontWeight;\n\t\t\t\t\tif (!fw) return false;\n\t\t\t\t\tif (fw === 'bold') return {};\n\t\t\t\t\tconst numeric: number = Number.parseInt(fw, 10);\n\t\t\t\t\treturn !Number.isNaN(numeric) && numeric >= 700 ? {} : false;\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tsanitize: { tags: ['strong', 'b'] },\n\t},\n\t{\n\t\ttype: 'italic',\n\t\tconfigKey: 'italic',\n\t\trank: 1,\n\t\ttag: 'em',\n\t\ticon: ITALIC_ICON,\n\t\tkeyBinding: 'Mod-I',\n\t\ttoHTMLString: (content) => `<em>${content}</em>`,\n\t\tparseHTML: [\n\t\t\t{ tag: 'em' },\n\t\t\t{ tag: 'i' },\n\t\t\t{\n\t\t\t\ttag: 'span',\n\t\t\t\tgetAttrs: (el: HTMLElement) => {\n\t\t\t\t\treturn el.style.fontStyle === 'italic' ? {} : false;\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tsanitize: { tags: ['em', 'i'] },\n\t},\n\t{\n\t\ttype: 'underline',\n\t\tconfigKey: 'underline',\n\t\trank: 2,\n\t\ttag: 'u',\n\t\ticon: UNDERLINE_ICON,\n\t\tkeyBinding: 'Mod-U',\n\t\ttoHTMLString: (content) => `<u>${content}</u>`,\n\t\tparseHTML: [\n\t\t\t{ tag: 'u' },\n\t\t\t{\n\t\t\t\ttag: 'span',\n\t\t\t\tgetAttrs: (el: HTMLElement) => {\n\t\t\t\t\treturn el.style.textDecoration.includes('underline') ? {} : false;\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tsanitize: { tags: ['u'] },\n\t},\n];\n\n// --- Plugin ---\n\nexport class TextFormattingPlugin implements Plugin {\n\treadonly id = 'text-formatting';\n\treadonly name = 'Text Formatting';\n\treadonly priority = 20;\n\n\tprivate readonly config: TextFormattingConfig;\n\tprivate locale!: TextFormattingLocale;\n\n\tconstructor(config?: Partial<TextFormattingConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(\n\t\t\tcontext,\n\t\t\tthis.config.locale,\n\t\t\tTEXT_FORMATTING_LOCALE_EN,\n\t\t\tloadTextFormattingLocale,\n\t\t);\n\n\t\tconst enabledMarks = MARK_DEFINITIONS.filter((def) => this.config[def.configKey]);\n\n\t\tfor (const def of enabledMarks) {\n\t\t\tthis.registerMark(context, def);\n\t\t}\n\n\t\tthis.registerKeymaps(context, enabledMarks);\n\n\t\t// Register disabled placeholder buttons for marks that are disabled\n\t\t// as features but explicitly requested in the toolbar config\n\t\tthis.registerDisabledToolbarItems(context);\n\t}\n\n\tprivate registerMark(context: PluginContext, def: MarkDefinition): void {\n\t\tconst commandName = toCommandName(def.type);\n\t\tconst toolbarVisible = this.isToolbarVisible(def.configKey);\n\n\t\tcontext.registerMarkSpec({\n\t\t\ttype: def.type,\n\t\t\trank: def.rank,\n\t\t\ttoDOM() {\n\t\t\t\treturn document.createElement(def.tag);\n\t\t\t},\n\t\t\ttoHTMLString: (_mark, content) => def.toHTMLString(content),\n\t\t\tparseHTML: def.parseHTML,\n\t\t\tsanitize: def.sanitize,\n\t\t});\n\n\t\tcontext.registerCommand(commandName, () => {\n\t\t\tconst tr = toggleMark(context.getState(), mkType(def.type));\n\t\t\tif (tr) {\n\t\t\t\tcontext.dispatch(tr);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\n\t\tif (toolbarVisible) {\n\t\t\tconst label: string = this.getMarkLabel(def.type);\n\t\t\tcontext.registerToolbarItem({\n\t\t\t\tid: def.type,\n\t\t\t\tgroup: 'format',\n\t\t\t\ticon: def.icon,\n\t\t\t\tlabel,\n\t\t\t\ttooltip: `${label} (${formatShortcut(def.keyBinding)})`,\n\t\t\t\tcommand: commandName,\n\t\t\t\tisActive: (state) => isMarkActive(state, mkType(def.type)),\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate registerKeymaps(context: PluginContext, marks: readonly MarkDefinition[]): void {\n\t\tconst keymap: Record<string, () => boolean> = {};\n\t\tfor (const def of marks) {\n\t\t\tconst commandName = toCommandName(def.type);\n\t\t\tkeymap[def.keyBinding] = () => context.executeCommand(commandName);\n\t\t}\n\t\tif (Object.keys(keymap).length > 0) {\n\t\t\tcontext.registerKeymap(keymap);\n\t\t}\n\t}\n\n\t/**\n\t * Registers disabled toolbar buttons for marks whose feature is disabled\n\t * but whose toolbar button is explicitly requested.\n\t */\n\tprivate registerDisabledToolbarItems(context: PluginContext): void {\n\t\tif (!this.config.toolbar) return;\n\n\t\tfor (const def of MARK_DEFINITIONS) {\n\t\t\tconst featureEnabled = this.config[def.configKey];\n\t\t\tconst toolbarVisible = this.config.toolbar[def.configKey] ?? true;\n\n\t\t\tif (!featureEnabled && toolbarVisible) {\n\t\t\t\tcontext.registerToolbarItem({\n\t\t\t\t\tid: def.type,\n\t\t\t\t\tgroup: 'format',\n\t\t\t\t\ticon: def.icon,\n\t\t\t\t\tlabel: this.getMarkLabel(def.type),\n\t\t\t\t\tcommand: toCommandName(def.type),\n\t\t\t\t\tisEnabled: () => false,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getMarkLabel(type: string): string {\n\t\tconst key = `${type}Label` as keyof TextFormattingLocale;\n\t\treturn this.locale[key] as string;\n\t}\n\n\t/** Checks if a toolbar button should be visible for a given mark. */\n\tprivate isToolbarVisible(\n\t\tconfigKey: keyof Omit<TextFormattingConfig, 'toolbar' | 'locale'>,\n\t): boolean {\n\t\tif (!this.config.toolbar) return true;\n\t\treturn this.config.toolbar[configKey] ?? true;\n\t}\n}\n"],"names":["TEXT_FORMATTING_LOCALE_EN","boldLabel","italicLabel","underlineLabel","localeModules","assign","import","async","loadTextFormattingLocale","lang","loader","default","DEFAULT_CONFIG","bold","italic","underline","MARK_DEFINITIONS","type","configKey","rank","tag","icon","keyBinding","toHTMLString","content","parseHTML","getAttrs","el","fw","style","fontWeight","numeric","Number","parseInt","isNaN","sanitize","tags","fontStyle","textDecoration","includes","TextFormattingPlugin","id","name","priority","config","locale","constructor","this","init","context","resolveLocale","enabledMarks","filter","def","registerMark","registerKeymaps","registerDisabledToolbarItems","commandName","toCommandName","toolbarVisible","isToolbarVisible","registerMarkSpec","toDOM","document","createElement","_mark","registerCommand","tr","toggleMark","getState","mkType","dispatch","label","getMarkLabel","registerToolbarItem","group","tooltip","formatShortcut","command","isActive","state","isMarkActive","marks","keymap","executeCommand","Object","keys","length","registerKeymap","toolbar","featureEnabled","isEnabled","key"],"mappings":"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"}
@@ -1 +0,0 @@
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 { isRtlContext } from '../../platform/Platform.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Transaction } from '../../state/Transaction.js';\nimport { ServiceKey } from '../Plugin.js';\nimport type { Plugin, PluginConfig, PluginContext } from '../Plugin.js';\nimport { applyRovingTabindex } from '../shared/KeyboardNav.js';\nimport { resolveLocale } from '../shared/PluginHelpers.js';\nimport { PopupManager, PopupServiceKey } from '../shared/PopupManager.js';\nimport type { ToolbarItem } from './ToolbarItem.js';\nimport {\n\tfindFirstEnabled,\n\tfindLastEnabled,\n\tfindNextEnabled,\n\tresolveHorizontalDirection,\n} from './ToolbarKeyboardNav.js';\nimport { TOOLBAR_LOCALE_EN, type ToolbarLocale, loadToolbarLocale } from './ToolbarLocale.js';\nimport {\n\tToolbarOverflowBehavior,\n\ttype ToolbarOverflowBehavior as ToolbarOverflowBehaviorType,\n} from './ToolbarOverflowBehavior.js';\nimport { ToolbarOverflowController } from './ToolbarOverflowController.js';\nimport { ToolbarPopupController } from './ToolbarPopupController.js';\nimport { createSeparator } from './ToolbarRenderers.js';\nimport { ToolbarTooltip } from './ToolbarTooltip.js';\n\n// --- Layout Config ---\n\nexport interface ToolbarLayoutConfig {\n\treadonly groups: ReadonlyArray<ReadonlyArray<string>>;\n\t/**\n\t * Controls responsive overflow behavior when toolbar items exceed available width.\n\t * Defaults to `ToolbarOverflowBehavior.BurgerMenu`.\n\t */\n\treadonly overflow?: ToolbarOverflowBehaviorType;\n}\n\n// --- Typed Service API ---\n\nexport interface ToolbarServiceAPI {\n\t/** Re-reads isActive/isEnabled from state and updates all buttons. */\n\trefresh(): void;\n\t/** Closes the currently open popup, if any. */\n\tclosePopup(): void;\n}\n\nexport const ToolbarServiceKey = new ServiceKey<ToolbarServiceAPI>('toolbar');\n\n// --- Plugin ---\n\ninterface ToolbarButton {\n\telement: HTMLButtonElement;\n\titem: ToolbarItem;\n\tcomboLabelEl: HTMLSpanElement | null;\n}\n\nexport class ToolbarPlugin implements Plugin {\n\treadonly id = 'toolbar';\n\treadonly name = 'Toolbar';\n\treadonly priority = 10;\n\n\tprivate context: PluginContext | null = null;\n\tprivate toolbarElement: HTMLElement | null = null;\n\tprivate buttons: ToolbarButton[] = [];\n\tprivate readonly hiddenItems = new Set<string>();\n\tprivate readonly layoutConfig: ToolbarLayoutConfig | null;\n\tprivate overflowBehavior: ToolbarOverflowBehaviorType;\n\tprivate focusedIndex = 0;\n\tprivate tooltip: ToolbarTooltip | null = null;\n\tprivate popupController: ToolbarPopupController | null = null;\n\tprivate popupManager: PopupManager | null = null;\n\tprivate overflowController: ToolbarOverflowController | null = null;\n\tprivate visibleElements: HTMLButtonElement[] = [];\n\tprivate locale!: ToolbarLocale;\n\n\tconstructor(layoutConfig?: ToolbarLayoutConfig) {\n\t\tthis.layoutConfig = layoutConfig ?? null;\n\t\tthis.overflowBehavior = layoutConfig?.overflow ?? ToolbarOverflowBehavior.BurgerMenu;\n\t}\n\n\tasync init(context: PluginContext): Promise<void> {\n\t\tthis.locale = await resolveLocale(context, undefined, TOOLBAR_LOCALE_EN, loadToolbarLocale);\n\t\tcontext.registerStyleSheet(TOOLBAR_CSS);\n\t\tthis.context = context;\n\n\t\tthis.popupManager = new PopupManager(context.getContainer());\n\t\tcontext.registerService(PopupServiceKey, this.popupManager);\n\n\t\tthis.popupController = new ToolbarPopupController(() => this.getActiveElement(), this.locale);\n\t\tthis.popupController.setPopupManager(this.popupManager);\n\t\tthis.tooltip = new ToolbarTooltip(() => this.popupController?.isOpen() ?? false);\n\n\t\tcontext.registerService(ToolbarServiceKey, {\n\t\t\trefresh: () => this.updateButtonStates(context.getState()),\n\t\t\tclosePopup: () => this.popupController?.close(),\n\t\t});\n\n\t\tthis.createToolbarElement();\n\t}\n\n\t/** Returns the current overflow behavior. */\n\tgetOverflowBehavior(): ToolbarOverflowBehaviorType {\n\t\treturn this.overflowBehavior;\n\t}\n\n\t/** Switches the overflow behavior at runtime. */\n\tsetOverflowBehavior(behavior: ToolbarOverflowBehaviorType): void {\n\t\tif (behavior === this.overflowBehavior) return;\n\n\t\tthis.overflowBehavior = behavior;\n\t\tthis.applyOverflowBehavior();\n\t\tthis.renderItems();\n\t}\n\n\tonReady(): void {\n\t\tthis.renderItems();\n\t}\n\n\tdestroy(): void {\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\t\tthis.popupController?.destroy();\n\t\tthis.popupController = null;\n\t\tthis.popupManager?.destroy();\n\t\tthis.popupManager = null;\n\t\tthis.tooltip?.destroy();\n\t\tthis.tooltip = null;\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\tthis.toolbarElement = null;\n\t\t}\n\t\tthis.buttons = [];\n\t\tthis.visibleElements = [];\n\t\tthis.context = null;\n\t}\n\n\tonStateChange(_oldState: EditorState, newState: EditorState, _tr: Transaction): void {\n\t\tthis.updateButtonStates(newState);\n\t}\n\n\tonReadOnlyChange(readonly: boolean): void {\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.hidden = readonly;\n\t\t}\n\t}\n\n\tonConfigure(config: PluginConfig): void {\n\t\tfor (const [key, value] of Object.entries(config)) {\n\t\t\tif (value === false) {\n\t\t\t\tthis.hiddenItems.add(key);\n\t\t\t} else {\n\t\t\t\tthis.hiddenItems.delete(key);\n\t\t\t}\n\t\t}\n\t\tthis.renderItems();\n\t}\n\n\t// --- Toolbar ---\n\n\tprivate createToolbarElement(): void {\n\t\tif (!this.context) return;\n\n\t\tif (this.toolbarElement) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\tthis.toolbarElement = document.createElement('div');\n\t\tthis.toolbarElement.setAttribute('role', 'toolbar');\n\t\tthis.toolbarElement.setAttribute('aria-label', this.locale.formattingOptionsAria);\n\t\tthis.toolbarElement.setAttribute('data-notectl-no-print', '');\n\t\tthis.toolbarElement.className = 'notectl-toolbar';\n\n\t\tthis.toolbarElement.addEventListener('keydown', (e) => this.handleToolbarKeydown(e));\n\n\t\tthis.applyOverflowBehavior();\n\t\tcontainer.appendChild(this.toolbarElement);\n\t}\n\n\t/** Applies the current overflow behavior: creates/destroys the overflow controller and sets the data attribute. */\n\tprivate applyOverflowBehavior(): void {\n\t\tif (!this.toolbarElement || !this.context) return;\n\n\t\t// Tear down existing overflow controller\n\t\tthis.overflowController?.destroy();\n\t\tthis.overflowController = null;\n\n\t\tthis.toolbarElement.setAttribute('data-overflow', this.overflowBehavior);\n\n\t\tif (this.overflowBehavior === ToolbarOverflowBehavior.BurgerMenu) {\n\t\t\tthis.overflowController = new ToolbarOverflowController({\n\t\t\t\ttoolbar: this.toolbarElement,\n\t\t\t\tariaLabel: this.locale.moreToolsAria,\n\t\t\t\tcontext: this.context,\n\t\t\t\tpopupManager: this.popupManager ?? undefined,\n\t\t\t\tonOverflowChange: (visibleButtons, overflowBtn) => {\n\t\t\t\t\tthis.visibleElements = overflowBtn\n\t\t\t\t\t\t? [...visibleButtons, overflowBtn]\n\t\t\t\t\t\t: [...visibleButtons];\n\t\t\t\t\tthis.initRovingTabindex();\n\t\t\t\t},\n\t\t\t\tonItemActivated: (btn: HTMLButtonElement, item: ToolbarItem) => {\n\t\t\t\t\tthis.activateButton(btn, item);\n\t\t\t\t},\n\t\t\t\tgetActiveElement: () => this.getActiveElement(),\n\t\t\t});\n\t\t} else {\n\t\t\t// Flow and None modes: all buttons are visible for roving tabindex\n\t\t\tthis.visibleElements = [];\n\t\t}\n\t}\n\n\tprivate renderItems(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tfor (const btn of this.buttons) {\n\t\t\tbtn.element.remove();\n\t\t}\n\t\tthis.buttons = [];\n\n\t\tfor (const sep of this.toolbarElement.querySelectorAll('.notectl-toolbar-separator')) {\n\t\t\tsep.remove();\n\t\t}\n\n\t\tif (this.layoutConfig) {\n\t\t\tthis.renderItemsByLayout();\n\t\t} else {\n\t\t\tthis.renderItemsByGroup();\n\t\t}\n\n\t\tif (this.buttons.length > 0 && !this.toolbarElement.parentElement) {\n\t\t\tconst container: HTMLElement = this.context.getPluginContainer('top');\n\t\t\tcontainer.appendChild(this.toolbarElement);\n\t\t}\n\n\t\tthis.overflowController?.update(this.buttons);\n\t\tthis.initRovingTabindex();\n\t\tthis.updateButtonStates(this.context.getState());\n\t}\n\n\t// --- Roving Tabindex ---\n\n\tprivate getTabElements(): HTMLButtonElement[] {\n\t\treturn this.visibleElements.length > 0\n\t\t\t? this.visibleElements\n\t\t\t: this.buttons.map((b) => b.element);\n\t}\n\n\tprivate initRovingTabindex(): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst first: number = findFirstEnabled(elements);\n\t\tthis.focusedIndex = first >= 0 ? first : 0;\n\t\tapplyRovingTabindex(elements, this.focusedIndex);\n\t}\n\n\tprivate setRovingFocus(index: number): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (index < 0 || index >= elements.length) return;\n\t\tthis.focusedIndex = index;\n\t\tapplyRovingTabindex(elements, index);\n\t\telements[index]?.focus();\n\t}\n\n\t/** Returns the active element, respecting shadow DOM boundaries. */\n\tprivate getActiveElement(): Element | null {\n\t\tconst root: Node | undefined = this.toolbarElement?.getRootNode();\n\t\tif (root instanceof ShadowRoot) {\n\t\t\treturn root.activeElement;\n\t\t}\n\t\treturn document.activeElement;\n\t}\n\n\tprivate syncFocusedIndex(): void {\n\t\tconst active: Element | null = this.getActiveElement();\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tconst idx: number = elements.findIndex((el) => el === active);\n\t\tif (idx >= 0) {\n\t\t\tthis.focusedIndex = idx;\n\t\t}\n\t}\n\n\t// --- Toolbar Keyboard ---\n\n\tprivate handleToolbarKeydown(e: KeyboardEvent): void {\n\t\tconst elements: HTMLButtonElement[] = this.getTabElements();\n\t\tif (elements.length === 0) return;\n\n\t\tthis.syncFocusedIndex();\n\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowLeft': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst rtl: boolean = this.toolbarElement ? isRtlContext(this.toolbarElement) : false;\n\t\t\t\tconst dir: 1 | -1 = resolveHorizontalDirection(e.key, rtl);\n\t\t\t\tconst next: number = findNextEnabled(elements, this.focusedIndex, dir);\n\t\t\t\tthis.setRovingFocus(next);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Home': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst first: number = findFirstEnabled(elements);\n\t\t\t\tif (first >= 0) this.setRovingFocus(first);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'End': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst last: number = findLastEnabled(elements);\n\t\t\t\tif (last >= 0) this.setRovingFocus(last);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'Enter':\n\t\t\tcase ' ': {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst focused: HTMLButtonElement | undefined = elements[this.focusedIndex];\n\t\t\t\tconst btn: ToolbarButton | undefined = this.buttons.find((b) => b.element === focused);\n\t\t\t\tif (btn) this.activateButton(btn.element, btn.item);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Activates a toolbar button (shared between mouse click and keyboard). */\n\tprivate activateButton(btn: HTMLButtonElement, item: ToolbarItem): void {\n\t\tthis.tooltip?.hide();\n\t\tif (item.popupType && this.context) {\n\t\t\tthis.popupController?.toggle(btn, item, this.context);\n\t\t} else {\n\t\t\tthis.context?.executeCommand(item.command);\n\t\t}\n\t}\n\n\t// --- Layout Rendering ---\n\n\tprivate renderItemsByLayout(): void {\n\t\tif (!this.context || !this.toolbarElement || !this.layoutConfig) return;\n\n\t\tconst toolbarReg = this.context.getToolbarRegistry();\n\t\tlet firstGroup = true;\n\n\t\tfor (const groupPluginIds of this.layoutConfig.groups) {\n\t\t\tconst groupItems: ToolbarItem[] = [];\n\t\t\tfor (const pId of groupPluginIds) {\n\t\t\t\tconst items: ToolbarItem[] = toolbarReg\n\t\t\t\t\t.getToolbarItemsByPlugin(pId)\n\t\t\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\t\t\tgroupItems.push(...items);\n\t\t\t}\n\n\t\t\tif (groupItems.length === 0) continue;\n\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\n\t\tif (this.buttons.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t}\n\t}\n\n\tprivate renderItemsByGroup(): void {\n\t\tif (!this.context || !this.toolbarElement) return;\n\n\t\tconst toolbarRegistry = this.context.getToolbarRegistry();\n\t\tconst items: ToolbarItem[] = toolbarRegistry\n\t\t\t.getToolbarItems()\n\t\t\t.filter((item) => !this.hiddenItems.has(item.id));\n\t\tif (items.length === 0) {\n\t\t\tthis.toolbarElement.remove();\n\t\t\treturn;\n\t\t}\n\n\t\tconst groups = new Map<string, ToolbarItem[]>();\n\t\tfor (const item of items) {\n\t\t\tconst list: ToolbarItem[] = groups.get(item.group) ?? [];\n\t\t\tlist.push(item);\n\t\t\tgroups.set(item.group, list);\n\t\t}\n\n\t\tlet firstGroup = true;\n\t\tfor (const [, groupItems] of groups) {\n\t\t\tif (!firstGroup) {\n\t\t\t\tthis.toolbarElement.appendChild(createSeparator());\n\t\t\t}\n\t\t\tfirstGroup = false;\n\n\t\t\tfor (const item of groupItems) {\n\t\t\t\tconst btn: ToolbarButton = this.createButton(item);\n\t\t\t\tthis.toolbarElement.appendChild(btn.element);\n\t\t\t\tthis.buttons.push(btn);\n\t\t\t}\n\t\t}\n\t}\n\n\t// --- Button Creation ---\n\n\tprivate createButton(item: ToolbarItem): ToolbarButton {\n\t\tconst btn: HTMLButtonElement = document.createElement('button');\n\t\tbtn.type = 'button';\n\t\tbtn.className = `notectl-toolbar-btn notectl-toolbar-btn--${item.id}`;\n\t\tbtn.setAttribute('aria-pressed', 'false');\n\t\tbtn.setAttribute('aria-label', item.label);\n\t\tbtn.setAttribute('data-toolbar-item', item.id);\n\t\tbtn.setAttribute('data-tooltip', item.tooltip ?? item.label);\n\n\t\tlet comboLabelEl: HTMLSpanElement | null = null;\n\n\t\tif (item.popupType === 'combobox') {\n\t\t\tbtn.setAttribute('role', 'combobox');\n\t\t\tbtn.setAttribute('aria-haspopup', 'listbox');\n\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\n\t\t\tconst labelSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tlabelSpan.className = 'notectl-toolbar-combobox__label';\n\t\t\tconst state: EditorState | undefined = this.context?.getState();\n\t\t\tif (state) {\n\t\t\t\tlabelSpan.textContent = item.getLabel(state);\n\t\t\t}\n\t\t\tbtn.appendChild(labelSpan);\n\t\t\tcomboLabelEl = labelSpan;\n\n\t\t\tconst arrowSpan: HTMLSpanElement = document.createElement('span');\n\t\t\tarrowSpan.className = 'notectl-toolbar-combobox__arrow';\n\t\t\tarrowSpan.setAttribute('aria-hidden', 'true');\n\t\t\tarrowSpan.textContent = '\\u25BE';\n\t\t\tbtn.appendChild(arrowSpan);\n\t\t} else {\n\t\t\tif (item.popupType) {\n\t\t\t\tbtn.setAttribute('aria-haspopup', 'true');\n\t\t\t\tbtn.setAttribute('aria-expanded', 'false');\n\t\t\t}\n\n\t\t\tconst span: HTMLSpanElement = document.createElement('span');\n\t\t\tspan.className = 'notectl-toolbar-btn__icon';\n\t\t\tspan.innerHTML = item.icon;\n\t\t\tbtn.appendChild(span);\n\t\t}\n\n\t\tbtn.addEventListener('mousedown', (e: MouseEvent) => {\n\t\t\te.preventDefault();\n\t\t\tthis.activateButton(btn, item);\n\t\t});\n\n\t\tbtn.addEventListener('mouseenter', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('mouseleave', () => this.tooltip?.hide());\n\t\tbtn.addEventListener('focus', () => this.tooltip?.show(btn));\n\t\tbtn.addEventListener('blur', () => this.tooltip?.hide());\n\n\t\treturn { element: btn, item, comboLabelEl };\n\t}\n\n\t// --- Button State Updates ---\n\n\tprivate updateButtonStates(state: EditorState): void {\n\t\tfor (const btn of this.buttons) {\n\t\t\tconst active: boolean = btn.item.isActive?.(state) ?? false;\n\t\t\tconst enabled: boolean = btn.item.isEnabled?.(state) ?? true;\n\t\t\tbtn.element.setAttribute('aria-pressed', String(active));\n\t\t\tbtn.element.classList.toggle('notectl-toolbar-btn--active', active);\n\t\t\tbtn.element.disabled = !enabled;\n\t\t\tif (!enabled) {\n\t\t\t\tbtn.element.setAttribute('aria-disabled', 'true');\n\t\t\t} else {\n\t\t\t\tbtn.element.removeAttribute('aria-disabled');\n\t\t\t}\n\t\t\tif (btn.comboLabelEl && btn.item.popupType === 'combobox') {\n\t\t\t\tbtn.comboLabelEl.textContent = btn.item.getLabel(state);\n\t\t\t}\n\t\t\tif (btn.item.getIcon) {\n\t\t\t\tconst newIcon: string = btn.item.getIcon(state);\n\t\t\t\tconst iconEl: HTMLSpanElement | null = btn.element.querySelector(\n\t\t\t\t\t'.notectl-toolbar-btn__icon',\n\t\t\t\t);\n\t\t\t\tif (iconEl && iconEl.innerHTML !== newIcon) {\n\t\t\t\t\ticonEl.innerHTML = newIcon;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.overflowController?.updateItemStates(state);\n\t}\n}\n","/** 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","resolveLocale","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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"}
@@ -1 +0,0 @@
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 { SmartPastePlugin } from '../plugins/smart-paste/SmartPastePlugin.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(), new SmartPastePlugin(options?.smartPaste)],\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","SmartPastePlugin","smartPaste"],"mappings":"ipCA0CO,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,EAAmB,IAAIC,EAAiBzC,GAAS0C,aAEjE"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presets.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}