@prolibu-suite/cobalt-core 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/custom-elements.json +19263 -11548
  2. package/dist/cjs/co-accordion.cjs.entry.js +3 -3
  3. package/dist/cjs/co-app-shell.cjs.entry.js +4 -4
  4. package/dist/cjs/co-autocomplete.cjs.entry.js +10 -7
  5. package/dist/cjs/co-avatar-group.cjs.entry.js +77 -0
  6. package/dist/cjs/co-avatar.cjs.entry.js +12 -5
  7. package/dist/cjs/co-badge.cjs.entry.js +2 -2
  8. package/dist/cjs/co-bottom-sheet.cjs.entry.js +325 -0
  9. package/dist/cjs/co-breadcrumb-item.cjs.entry.js +37 -0
  10. package/dist/cjs/co-breadcrumb.cjs.entry.js +55 -0
  11. package/dist/cjs/co-button-group.cjs.entry.js +3 -3
  12. package/dist/cjs/co-button.cjs.entry.js +12 -6
  13. package/dist/cjs/co-calendar-month.cjs.entry.js +381 -0
  14. package/dist/cjs/co-calendar_3.cjs.entry.js +41 -11
  15. package/dist/cjs/co-card.cjs.entry.js +3 -3
  16. package/dist/cjs/co-checkbox-group.cjs.entry.js +5 -5
  17. package/dist/cjs/co-checkbox.cjs.entry.js +18 -6
  18. package/dist/cjs/co-chip.cjs.entry.js +19 -11
  19. package/dist/cjs/co-color-picker.cjs.entry.js +7 -5
  20. package/dist/cjs/co-column-picker.cjs.entry.js +3 -3
  21. package/dist/cjs/co-combobox.cjs.entry.js +7 -7
  22. package/dist/cjs/co-command-search.cjs.entry.js +151 -12
  23. package/dist/cjs/co-data-table-pagination.cjs.entry.js +5 -5
  24. package/dist/cjs/co-data-table.cjs.entry.js +44 -23
  25. package/dist/cjs/co-date-picker.cjs.entry.js +2 -2
  26. package/dist/cjs/co-date-range-picker.cjs.entry.js +3 -3
  27. package/dist/cjs/co-date-range.cjs.entry.js +2 -2
  28. package/dist/cjs/co-drive-card.cjs.entry.js +81 -0
  29. package/dist/cjs/co-drop-zone.cjs.entry.js +63 -0
  30. package/dist/cjs/co-empty-state.cjs.entry.js +13 -3
  31. package/dist/cjs/co-event-calendar.cjs.entry.js +318 -0
  32. package/dist/cjs/co-fab.cjs.entry.js +3 -3
  33. package/dist/cjs/co-file-field.cjs.entry.js +8 -8
  34. package/dist/cjs/co-file-type-tile.cjs.entry.js +78 -0
  35. package/dist/cjs/co-helper-text.cjs.entry.js +3 -3
  36. package/dist/cjs/co-icon-button.cjs.entry.js +24 -8
  37. package/dist/cjs/co-icon.cjs.entry.js +33 -25
  38. package/dist/cjs/co-input.cjs.entry.js +36 -7
  39. package/dist/cjs/co-json-field.cjs.entry.js +10 -6
  40. package/dist/cjs/co-lightbox.cjs.entry.js +5 -5
  41. package/dist/cjs/co-list-footer.cjs.entry.js +25 -0
  42. package/dist/cjs/co-list-item.cjs.entry.js +60 -4
  43. package/dist/cjs/co-loader.cjs.entry.js +2 -2
  44. package/dist/cjs/co-media-thumb.cjs.entry.js +36 -0
  45. package/dist/cjs/co-menu-divider.cjs.entry.js +2 -2
  46. package/dist/cjs/co-menu-item.cjs.entry.js +26 -11
  47. package/dist/cjs/co-menu.cjs.entry.js +3 -3
  48. package/dist/cjs/co-modal.cjs.entry.js +41 -5
  49. package/dist/cjs/co-navbar.cjs.entry.js +3 -3
  50. package/dist/cjs/co-number-field.cjs.entry.js +18 -6
  51. package/dist/cjs/co-option-list.cjs.entry.js +379 -0
  52. package/dist/cjs/co-overlay.cjs.entry.js +243 -3
  53. package/dist/cjs/co-page-header.cjs.entry.js +2 -2
  54. package/dist/cjs/co-phone-field.cjs.entry.js +6 -4
  55. package/dist/cjs/co-popover.cjs.entry.js +45 -14
  56. package/dist/cjs/co-progress-bar.cjs.entry.js +8 -4
  57. package/dist/cjs/co-progress-circle.cjs.entry.js +3 -3
  58. package/dist/cjs/co-radio-group.cjs.entry.js +4 -4
  59. package/dist/cjs/co-radio.cjs.entry.js +4 -4
  60. package/dist/cjs/co-rating.cjs.entry.js +4 -4
  61. package/dist/cjs/co-ref-field.cjs.entry.js +36 -13
  62. package/dist/cjs/co-rich-text-editor.cjs.entry.js +1879 -33
  63. package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +995 -71
  64. package/dist/cjs/co-rich-text-viewer.cjs.entry.js +55 -19
  65. package/dist/cjs/co-row.cjs.entry.js +3 -3
  66. package/dist/cjs/co-segmented-bar.cjs.entry.js +58 -0
  67. package/dist/cjs/co-select.cjs.entry.js +8 -8
  68. package/dist/cjs/co-separator.cjs.entry.js +2 -2
  69. package/dist/cjs/co-sidebar-nav.cjs.entry.js +29 -9
  70. package/dist/cjs/co-sidebar.cjs.entry.js +3 -3
  71. package/dist/cjs/co-skeleton.cjs.entry.js +26 -0
  72. package/dist/cjs/co-slider.cjs.entry.js +3 -3
  73. package/dist/cjs/co-switch.cjs.entry.js +6 -6
  74. package/dist/cjs/co-tab-group.cjs.entry.js +15 -3
  75. package/dist/cjs/co-tab.cjs.entry.js +8 -5
  76. package/dist/cjs/co-tags-field.cjs.entry.js +19 -13
  77. package/dist/cjs/co-textarea.cjs.entry.js +11 -7
  78. package/dist/cjs/co-toast.cjs.entry.js +10 -4
  79. package/dist/cjs/co-toggle-button-group.cjs.entry.js +16 -4
  80. package/dist/cjs/co-toggle-button.cjs.entry.js +9 -5
  81. package/dist/cjs/co-tooltip.cjs.entry.js +51 -16
  82. package/dist/cjs/co-transfer-list.cjs.entry.js +3 -3
  83. package/dist/cjs/co-video.cjs.entry.js +839 -0
  84. package/dist/cjs/cobalt.cjs.js +2 -2
  85. package/dist/cjs/fieldChip-DtYUP0VZ.js +7 -0
  86. package/dist/{esm/index-BjAqSidM.js → cjs/index-4y1Dm145.js} +14436 -6178
  87. package/dist/cjs/{index-DoFnrUVH.js → index-NNvye1ul.js} +105 -21
  88. package/dist/cjs/loader.cjs.js +2 -2
  89. package/dist/cjs/overlayAfterClose-BdeXrhVY.js +12 -0
  90. package/dist/{esm/sanitizer-DcK0GGZC.js → cjs/purify.es-DX41ZWS2.js} +3 -107
  91. package/dist/cjs/{requiredMark-DA6y-4rp.js → requiredMark-DyjZzUCd.js} +1 -1
  92. package/dist/cjs/richTextI18n-B7ktXg3M.js +382 -0
  93. package/dist/cjs/toolbar-config-3PlT-3zm.js +216 -0
  94. package/dist/cjs/tz-Dgom0W69.js +127 -0
  95. package/dist/cobalt/cobalt.css +1 -1
  96. package/dist/cobalt/cobalt.esm.js +1 -1
  97. package/dist/cobalt/p-06c27cc5.entry.js +1 -0
  98. package/dist/cobalt/{p-136bdbd2.entry.js → p-075f6ca4.entry.js} +1 -1
  99. package/dist/cobalt/p-0810ee1e.entry.js +1 -0
  100. package/dist/cobalt/p-08519a7c.entry.js +1 -0
  101. package/dist/cobalt/p-0b41e76e.entry.js +1 -0
  102. package/dist/cobalt/p-0be124d5.entry.js +1 -0
  103. package/dist/cobalt/{p-e8b58332.entry.js → p-0e1afdea.entry.js} +1 -1
  104. package/dist/cobalt/p-1388eac6.entry.js +1 -0
  105. package/dist/cobalt/{p-7f818368.entry.js → p-19f7ee64.entry.js} +1 -1
  106. package/dist/cobalt/p-1af6ef83.entry.js +1 -0
  107. package/dist/cobalt/{p-f2c5cb74.entry.js → p-1cecb9e1.entry.js} +1 -1
  108. package/dist/cobalt/{p-273afd93.entry.js → p-20c68308.entry.js} +1 -1
  109. package/dist/cobalt/p-21916f82.entry.js +1 -0
  110. package/dist/cobalt/p-23c9208a.entry.js +1 -0
  111. package/dist/cobalt/p-2d4e1ca8.entry.js +1 -0
  112. package/dist/cobalt/{p-def448e4.entry.js → p-304c3be1.entry.js} +1 -1
  113. package/dist/cobalt/p-311118cb.entry.js +1 -0
  114. package/dist/cobalt/{p-2b4d8535.entry.js → p-328f0470.entry.js} +1 -1
  115. package/dist/cobalt/p-35c63fdc.entry.js +1 -0
  116. package/dist/cobalt/{p-f97ad9ad.entry.js → p-363a5262.entry.js} +1 -1
  117. package/dist/cobalt/p-376c43b8.entry.js +1 -0
  118. package/dist/cobalt/p-39a29bbb.entry.js +1 -0
  119. package/dist/cobalt/p-3d07e4a9.entry.js +1 -0
  120. package/dist/cobalt/{p-1e0282b8.entry.js → p-3dd6b57b.entry.js} +1 -1
  121. package/dist/cobalt/{p-7ef766c6.entry.js → p-48c5f311.entry.js} +1 -1
  122. package/dist/cobalt/{p-fe9e85b6.entry.js → p-4aeefe3f.entry.js} +1 -1
  123. package/dist/cobalt/p-523cfd98.entry.js +1 -0
  124. package/dist/cobalt/{p-c87285b6.entry.js → p-58aed8d6.entry.js} +1 -1
  125. package/dist/cobalt/p-593fd213.entry.js +1 -0
  126. package/dist/cobalt/p-5eecea26.entry.js +1 -0
  127. package/dist/cobalt/p-64a0b656.entry.js +1 -0
  128. package/dist/cobalt/p-69289e82.entry.js +1 -0
  129. package/dist/cobalt/p-6a3ed174.entry.js +1 -0
  130. package/dist/cobalt/p-6f12e721.entry.js +1 -0
  131. package/dist/cobalt/{p-3f9b3fcb.entry.js → p-7040e4c5.entry.js} +1 -1
  132. package/dist/cobalt/p-755ecee1.entry.js +1 -0
  133. package/dist/cobalt/p-76b46336.entry.js +1 -0
  134. package/dist/cobalt/p-79e49749.entry.js +1 -0
  135. package/dist/cobalt/p-7b5dec05.entry.js +1 -0
  136. package/dist/cobalt/p-7d9f2021.entry.js +1 -0
  137. package/dist/cobalt/p-804d025f.entry.js +1 -0
  138. package/dist/cobalt/p-860a685f.entry.js +1 -0
  139. package/dist/cobalt/p-87289d32.entry.js +1 -0
  140. package/dist/cobalt/{p-b758c2e6.entry.js → p-8ae5da0c.entry.js} +1 -1
  141. package/dist/cobalt/{p-ff2690e5.entry.js → p-8fdf2163.entry.js} +1 -1
  142. package/dist/cobalt/p-9310739f.entry.js +1 -0
  143. package/dist/cobalt/{p-522fcdb7.entry.js → p-96baec0e.entry.js} +1 -1
  144. package/dist/cobalt/p-B-ckjCUA.js +1 -0
  145. package/dist/cobalt/p-B2QLgWrz.js +2 -0
  146. package/dist/cobalt/p-B6JZk8fL.js +1 -0
  147. package/dist/cobalt/p-BUgUTjOB.js +1 -0
  148. package/dist/cobalt/p-Bgxofdfb.js +1 -0
  149. package/dist/cobalt/p-BxzuCRMr.js +1 -0
  150. package/dist/cobalt/p-Ch1jfwZ2.js +1 -0
  151. package/dist/cobalt/p-ChibIpZv.js +1 -0
  152. package/dist/cobalt/p-Es9IUmmt.js +2 -0
  153. package/dist/cobalt/p-a0749d7b.entry.js +1 -0
  154. package/dist/cobalt/p-a71fd4f1.entry.js +1 -0
  155. package/dist/cobalt/p-aa1ad9fa.entry.js +1 -0
  156. package/dist/cobalt/p-af0495d8.entry.js +1 -0
  157. package/dist/cobalt/p-b045d680.entry.js +1 -0
  158. package/dist/cobalt/p-b3c8fc9a.entry.js +1 -0
  159. package/dist/cobalt/p-b4dcc260.entry.js +1 -0
  160. package/dist/cobalt/p-b8200f7f.entry.js +1 -0
  161. package/dist/cobalt/p-b8f36f12.entry.js +1 -0
  162. package/dist/cobalt/p-ba6f0f90.entry.js +1 -0
  163. package/dist/cobalt/p-bae82095.entry.js +1 -0
  164. package/dist/cobalt/p-be3e61f4.entry.js +1 -0
  165. package/dist/cobalt/p-c1abc74b.entry.js +1 -0
  166. package/dist/cobalt/{p-bb07da22.entry.js → p-c23a2ff6.entry.js} +1 -1
  167. package/dist/cobalt/p-c682453a.entry.js +1 -0
  168. package/dist/cobalt/{p-97c20011.entry.js → p-c857b9ff.entry.js} +1 -1
  169. package/dist/cobalt/{p-54f26e95.entry.js → p-c85a6a9e.entry.js} +1 -1
  170. package/dist/cobalt/p-ca108c6d.entry.js +1 -0
  171. package/dist/cobalt/p-cf239452.entry.js +1 -0
  172. package/dist/cobalt/p-d2507f04.entry.js +1 -0
  173. package/dist/cobalt/p-d403d9c4.entry.js +1 -0
  174. package/dist/cobalt/{p-aa63812a.entry.js → p-d4086c34.entry.js} +1 -1
  175. package/dist/cobalt/p-d55652f2.entry.js +1 -0
  176. package/dist/cobalt/p-d7c9cf93.entry.js +1 -0
  177. package/dist/cobalt/p-d7cbb4c7.entry.js +1 -0
  178. package/dist/cobalt/p-da211abf.entry.js +1 -0
  179. package/dist/cobalt/p-dcc7fc95.entry.js +1 -0
  180. package/dist/cobalt/p-dd03c00b.entry.js +1 -0
  181. package/dist/cobalt/p-e55fb916.entry.js +1 -0
  182. package/dist/cobalt/p-e8e752f9.entry.js +1 -0
  183. package/dist/cobalt/p-e93644cb.entry.js +1 -0
  184. package/dist/cobalt/{p-f0e8fa7d.entry.js → p-f6b93f17.entry.js} +1 -1
  185. package/dist/cobalt/p-f72f0e38.entry.js +1 -0
  186. package/dist/cobalt/{p-beb9c11d.entry.js → p-fb86cdb9.entry.js} +1 -1
  187. package/dist/cobalt/p-ff6be242.entry.js +1 -0
  188. package/dist/cobalt/{p-CyYF8IJE.js → p-tPYikBRJ.js} +1 -1
  189. package/dist/collection/collection-manifest.json +18 -3
  190. package/dist/collection/components/co-accordion/co-accordion.js +2 -2
  191. package/dist/collection/components/co-app-shell/co-app-shell.css +79 -6
  192. package/dist/collection/components/co-app-shell/co-app-shell.js +2 -2
  193. package/dist/collection/components/co-autocomplete/co-autocomplete.css +28 -1
  194. package/dist/collection/components/co-autocomplete/co-autocomplete.js +27 -4
  195. package/dist/collection/components/co-avatar/co-avatar.css +38 -1
  196. package/dist/collection/components/co-avatar/co-avatar.js +48 -3
  197. package/dist/collection/components/co-avatar-group/co-avatar-group.css +86 -0
  198. package/dist/collection/components/co-avatar-group/co-avatar-group.js +224 -0
  199. package/dist/collection/components/co-badge/co-badge.js +1 -1
  200. package/dist/collection/components/co-bottom-sheet/co-bottom-sheet.css +136 -0
  201. package/dist/collection/components/co-bottom-sheet/co-bottom-sheet.js +507 -0
  202. package/dist/collection/components/co-breadcrumb/co-breadcrumb.css +6 -0
  203. package/dist/collection/components/co-breadcrumb/co-breadcrumb.js +111 -0
  204. package/dist/collection/components/co-breadcrumb-item/co-breadcrumb-item.css +66 -0
  205. package/dist/collection/components/co-breadcrumb-item/co-breadcrumb-item.js +169 -0
  206. package/dist/collection/components/co-button/co-button.css +63 -7
  207. package/dist/collection/components/co-button/co-button.js +72 -7
  208. package/dist/collection/components/co-button-group/co-button-group.js +2 -2
  209. package/dist/collection/components/co-calendar/co-calendar.js +1 -1
  210. package/dist/collection/components/co-calendar-month/co-calendar-month.css +231 -0
  211. package/dist/collection/components/co-calendar-month/co-calendar-month.js +594 -0
  212. package/dist/collection/components/co-card/co-card.js +2 -2
  213. package/dist/collection/components/co-checkbox/co-checkbox.css +70 -1
  214. package/dist/collection/components/co-checkbox/co-checkbox.js +58 -7
  215. package/dist/collection/components/co-checkbox-group/co-checkbox-group.css +7 -1
  216. package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +3 -3
  217. package/dist/collection/components/co-chip/co-chip.css +82 -7
  218. package/dist/collection/components/co-chip/co-chip.js +102 -17
  219. package/dist/collection/components/co-color-picker/co-color-picker.css +35 -1
  220. package/dist/collection/components/co-color-picker/co-color-picker.js +24 -2
  221. package/dist/collection/components/co-column-picker/co-column-picker.js +2 -2
  222. package/dist/collection/components/co-combobox/co-combobox.css +7 -47
  223. package/dist/collection/components/co-combobox/co-combobox.js +4 -4
  224. package/dist/collection/components/co-command-search/co-command-search.css +163 -1
  225. package/dist/collection/components/co-command-search/co-command-search.js +355 -14
  226. package/dist/collection/components/co-command-search/commandSearchGroup.js +17 -0
  227. package/dist/collection/components/co-command-search/commandSearchLogic.js +27 -0
  228. package/dist/collection/components/co-data-table/co-data-table.css +42 -2
  229. package/dist/collection/components/co-data-table/co-data-table.js +116 -23
  230. package/dist/collection/components/co-data-table-pagination/co-data-table-pagination.js +4 -4
  231. package/dist/collection/components/co-date-field/co-date-field.css +7 -1
  232. package/dist/collection/components/co-date-field/co-date-field.js +4 -4
  233. package/dist/collection/components/co-date-range/co-date-range.js +1 -1
  234. package/dist/collection/components/co-date-range-picker/co-date-range-picker.css +7 -1
  235. package/dist/collection/components/co-drawer/co-drawer.css +21 -3
  236. package/dist/collection/components/co-drawer/co-drawer.js +52 -2
  237. package/dist/collection/components/co-drive-card/co-drive-card.css +285 -0
  238. package/dist/collection/components/co-drive-card/co-drive-card.js +329 -0
  239. package/dist/collection/components/co-drop-zone/co-drop-zone.css +49 -0
  240. package/dist/collection/components/co-drop-zone/co-drop-zone.js +197 -0
  241. package/dist/collection/components/co-empty-state/co-empty-state.css +38 -0
  242. package/dist/collection/components/co-empty-state/co-empty-state.js +72 -1
  243. package/dist/collection/components/co-event-calendar/co-event-calendar.css +146 -0
  244. package/dist/collection/components/co-event-calendar/co-event-calendar.js +620 -0
  245. package/dist/collection/components/co-fab/co-fab.js +2 -2
  246. package/dist/collection/components/co-file-field/co-file-field.css +7 -1
  247. package/dist/collection/components/co-file-field/co-file-field.js +5 -5
  248. package/dist/collection/components/co-file-type-tile/co-file-type-tile.css +14 -0
  249. package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +164 -0
  250. package/dist/collection/components/co-helper-text/co-helper-text.js +2 -2
  251. package/dist/collection/components/co-icon/co-icon.js +7 -37
  252. package/dist/collection/components/co-icon/iconLoader.js +39 -0
  253. package/dist/collection/components/co-icon-button/co-icon-button.css +26 -8
  254. package/dist/collection/components/co-icon-button/co-icon-button.js +82 -8
  255. package/dist/collection/components/co-input/co-input.css +65 -1
  256. package/dist/collection/components/co-input/co-input.js +54 -5
  257. package/dist/collection/components/co-json-field/co-json-field.css +25 -1
  258. package/dist/collection/components/co-json-field/co-json-field.js +27 -3
  259. package/dist/collection/components/co-lightbox/co-lightbox.js +4 -4
  260. package/dist/collection/components/co-list-footer/co-list-footer.css +50 -0
  261. package/dist/collection/components/co-list-footer/co-list-footer.js +149 -0
  262. package/dist/collection/components/co-list-item/co-list-item.css +7 -0
  263. package/dist/collection/components/co-list-item/co-list-item.js +65 -2
  264. package/dist/collection/components/co-loader/co-loader.css +9 -0
  265. package/dist/collection/components/co-media-thumb/co-media-thumb.css +43 -0
  266. package/dist/collection/components/co-media-thumb/co-media-thumb.js +148 -0
  267. package/dist/collection/components/co-menu/co-menu.css +6 -4
  268. package/dist/collection/components/co-menu/co-menu.js +20 -1
  269. package/dist/collection/components/co-menu-divider/co-menu-divider.js +1 -1
  270. package/dist/collection/components/co-menu-item/co-menu-item.css +44 -8
  271. package/dist/collection/components/co-menu-item/co-menu-item.js +84 -10
  272. package/dist/collection/components/co-modal/co-modal.css +59 -2
  273. package/dist/collection/components/co-modal/co-modal.js +99 -6
  274. package/dist/collection/components/co-navbar/co-navbar.js +2 -2
  275. package/dist/collection/components/co-number-field/co-number-field.css +19 -1
  276. package/dist/collection/components/co-number-field/co-number-field.js +34 -3
  277. package/dist/collection/components/co-option-list/co-option-list.css +228 -0
  278. package/dist/collection/components/co-option-list/co-option-list.js +860 -0
  279. package/dist/collection/components/co-option-list/optionListLogic.js +100 -0
  280. package/dist/collection/components/co-overlay/co-overlay.css +15 -1
  281. package/dist/collection/components/co-overlay/co-overlay.js +266 -1
  282. package/dist/collection/components/co-overlay/focusTrap.js +53 -0
  283. package/dist/collection/components/co-overlay/overlayAfterClose.js +8 -0
  284. package/dist/collection/components/co-page-header/co-page-header.js +1 -1
  285. package/dist/collection/components/co-phone-field/co-phone-field.css +30 -2
  286. package/dist/collection/components/co-phone-field/co-phone-field.js +23 -1
  287. package/dist/collection/components/co-popover/co-popover.css +9 -0
  288. package/dist/collection/components/co-popover/co-popover.js +43 -12
  289. package/dist/collection/components/co-progress-bar/co-progress-bar.css +22 -0
  290. package/dist/collection/components/co-progress-bar/co-progress-bar.js +26 -2
  291. package/dist/collection/components/co-progress-circle/co-progress-circle.js +2 -2
  292. package/dist/collection/components/co-radio/co-radio.js +3 -3
  293. package/dist/collection/components/co-radio-group/co-radio-group.js +3 -3
  294. package/dist/collection/components/co-rating/co-rating.js +3 -3
  295. package/dist/collection/components/co-ref-field/co-ref-field.css +64 -6
  296. package/dist/collection/components/co-ref-field/co-ref-field.js +0 -0
  297. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.css +1125 -41
  298. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +2008 -53
  299. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.css +791 -9
  300. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +1071 -71
  301. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.css +78 -0
  302. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +46 -41
  303. package/dist/collection/components/co-row/co-row.js +2 -2
  304. package/dist/collection/components/co-segmented-bar/co-segmented-bar.css +36 -0
  305. package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +176 -0
  306. package/dist/collection/components/co-select/co-select.css +7 -1
  307. package/dist/collection/components/co-select/co-select.js +5 -5
  308. package/dist/collection/components/co-separator/co-separator.js +1 -1
  309. package/dist/collection/components/co-sidebar/co-sidebar.js +2 -2
  310. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.css +99 -12
  311. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +28 -8
  312. package/dist/collection/components/co-skeleton/co-skeleton.css +28 -0
  313. package/dist/collection/components/co-skeleton/co-skeleton.js +97 -0
  314. package/dist/collection/components/co-slider/co-slider.js +2 -2
  315. package/dist/collection/components/co-switch/co-switch.css +9 -1
  316. package/dist/collection/components/co-switch/co-switch.js +3 -3
  317. package/dist/collection/components/co-tab/co-tab.css +54 -3
  318. package/dist/collection/components/co-tab/co-tab.js +45 -3
  319. package/dist/collection/components/co-tab-group/co-tab-group.css +8 -0
  320. package/dist/collection/components/co-tab-group/co-tab-group.js +35 -1
  321. package/dist/collection/components/co-tags-field/co-tags-field.css +39 -1
  322. package/dist/collection/components/co-tags-field/co-tags-field.js +36 -10
  323. package/dist/collection/components/co-textarea/co-textarea.css +26 -1
  324. package/dist/collection/components/co-textarea/co-textarea.js +28 -4
  325. package/dist/collection/components/co-toast/co-toast.css +56 -2
  326. package/dist/collection/components/co-toast/co-toast.js +27 -2
  327. package/dist/collection/components/co-toggle-button/co-toggle-button.css +64 -4
  328. package/dist/collection/components/co-toggle-button/co-toggle-button.js +47 -4
  329. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.css +32 -12
  330. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +34 -2
  331. package/dist/collection/components/co-tooltip/co-tooltip.css +8 -0
  332. package/dist/collection/components/co-tooltip/co-tooltip.js +69 -14
  333. package/dist/collection/components/co-transfer-list/co-transfer-list.js +2 -2
  334. package/dist/collection/components/co-video/co-video.css +497 -0
  335. package/dist/collection/components/co-video/co-video.js +1772 -0
  336. package/dist/collection/utils/fieldChip.js +2 -0
  337. package/dist/collection/utils/icon-config.js +12 -0
  338. package/dist/collection/utils/richTextI18n.js +378 -0
  339. package/dist/collection/utils/sheetGesture.js +53 -0
  340. package/dist/components/co-accordion.js +1 -1
  341. package/dist/components/co-app-shell.js +1 -1
  342. package/dist/components/co-autocomplete.js +1 -1
  343. package/dist/components/co-avatar-group.d.ts +11 -0
  344. package/dist/components/co-avatar-group.js +1 -0
  345. package/dist/components/co-avatar.js +1 -1
  346. package/dist/components/co-badge.js +1 -1
  347. package/dist/components/co-bottom-sheet.d.ts +11 -0
  348. package/dist/components/co-bottom-sheet.js +1 -0
  349. package/dist/components/co-breadcrumb-item.d.ts +11 -0
  350. package/dist/components/co-breadcrumb-item.js +1 -0
  351. package/dist/components/co-breadcrumb.d.ts +11 -0
  352. package/dist/components/co-breadcrumb.js +1 -0
  353. package/dist/components/co-button-group.js +1 -1
  354. package/dist/components/co-button.js +1 -1
  355. package/dist/components/co-calendar-month.d.ts +11 -0
  356. package/dist/components/co-calendar-month.js +1 -0
  357. package/dist/components/co-calendar.js +1 -1
  358. package/dist/components/co-card.js +1 -1
  359. package/dist/components/co-checkbox-group.js +1 -1
  360. package/dist/components/co-checkbox.js +1 -1
  361. package/dist/components/co-chip.js +1 -1
  362. package/dist/components/co-color-picker.js +1 -1
  363. package/dist/components/co-column-picker.js +1 -1
  364. package/dist/components/co-combobox.js +1 -1
  365. package/dist/components/co-command-search.js +1 -1
  366. package/dist/components/co-data-table-pagination.js +1 -1
  367. package/dist/components/co-data-table.js +1 -1
  368. package/dist/components/co-date-field.js +1 -1
  369. package/dist/components/co-date-picker.js +1 -1
  370. package/dist/components/co-date-range-picker.js +1 -1
  371. package/dist/components/co-date-range.js +1 -1
  372. package/dist/components/co-drawer.js +1 -1
  373. package/dist/components/co-drive-card.d.ts +11 -0
  374. package/dist/components/co-drive-card.js +1 -0
  375. package/dist/components/co-drop-zone.d.ts +11 -0
  376. package/dist/components/co-drop-zone.js +1 -0
  377. package/dist/components/co-empty-state.js +1 -1
  378. package/dist/components/co-event-calendar.d.ts +11 -0
  379. package/dist/components/co-event-calendar.js +1 -0
  380. package/dist/components/co-fab.js +1 -1
  381. package/dist/components/co-file-field.js +1 -1
  382. package/dist/components/co-file-type-tile.d.ts +11 -0
  383. package/dist/components/co-file-type-tile.js +1 -0
  384. package/dist/components/co-helper-text.js +1 -1
  385. package/dist/components/co-icon-button.js +1 -1
  386. package/dist/components/co-icon.js +1 -1
  387. package/dist/components/co-input.js +1 -1
  388. package/dist/components/co-json-field.js +1 -1
  389. package/dist/components/co-lightbox.js +1 -1
  390. package/dist/components/co-list-footer.d.ts +11 -0
  391. package/dist/components/co-list-footer.js +1 -0
  392. package/dist/components/co-list-item.js +1 -1
  393. package/dist/components/co-loader.js +1 -1
  394. package/dist/components/co-media-thumb.d.ts +11 -0
  395. package/dist/components/co-media-thumb.js +1 -0
  396. package/dist/components/co-menu-divider.js +1 -1
  397. package/dist/components/co-menu-item.js +1 -1
  398. package/dist/components/co-menu.js +1 -1
  399. package/dist/components/co-modal.js +1 -1
  400. package/dist/components/co-navbar.js +1 -1
  401. package/dist/components/co-number-field.js +1 -1
  402. package/dist/components/co-option-list.d.ts +11 -0
  403. package/dist/components/co-option-list.js +1 -0
  404. package/dist/components/co-overlay.js +1 -1
  405. package/dist/components/co-page-header.js +1 -1
  406. package/dist/components/co-phone-field.js +1 -1
  407. package/dist/components/co-popover.js +1 -1
  408. package/dist/components/co-progress-bar.js +1 -1
  409. package/dist/components/co-progress-circle.js +1 -1
  410. package/dist/components/co-radio-group.js +1 -1
  411. package/dist/components/co-radio.js +1 -1
  412. package/dist/components/co-rating.js +1 -1
  413. package/dist/components/co-ref-field.js +1 -1
  414. package/dist/components/co-rich-text-editor.js +1 -1
  415. package/dist/components/co-rich-text-toolbar.js +1 -1
  416. package/dist/components/co-rich-text-viewer.js +1 -1
  417. package/dist/components/co-row.js +1 -1
  418. package/dist/components/co-segmented-bar.d.ts +11 -0
  419. package/dist/components/co-segmented-bar.js +1 -0
  420. package/dist/components/co-select.js +1 -1
  421. package/dist/components/co-separator.js +1 -1
  422. package/dist/components/co-sidebar-nav.js +1 -1
  423. package/dist/components/co-sidebar.js +1 -1
  424. package/dist/components/co-skeleton.d.ts +11 -0
  425. package/dist/components/co-skeleton.js +1 -0
  426. package/dist/components/co-slider.js +1 -1
  427. package/dist/components/co-switch.js +1 -1
  428. package/dist/components/co-tab-group.js +1 -1
  429. package/dist/components/co-tab.js +1 -1
  430. package/dist/components/co-tags-field.js +1 -1
  431. package/dist/components/co-textarea.js +1 -1
  432. package/dist/components/co-toast.js +1 -1
  433. package/dist/components/co-toggle-button-group.js +1 -1
  434. package/dist/components/co-toggle-button.js +1 -1
  435. package/dist/components/co-tooltip.js +1 -1
  436. package/dist/components/co-transfer-list.js +1 -1
  437. package/dist/components/co-video.d.ts +11 -0
  438. package/dist/components/co-video.js +1 -0
  439. package/dist/components/index.js +1 -1
  440. package/dist/components/p-B0buzt_E.js +1 -0
  441. package/dist/components/p-B2QLgWrz.js +2 -0
  442. package/dist/components/p-B3igDRut.js +1 -0
  443. package/dist/components/p-Bgxofdfb.js +1 -0
  444. package/dist/components/p-BhSJcOUS.js +1 -0
  445. package/dist/components/{p-DObrQi5F.js → p-BnTTeIFH.js} +1 -1
  446. package/dist/components/{p-C9tHLXKS.js → p-Bx1OwdIV.js} +1 -1
  447. package/dist/components/p-BxiKVtk4.js +1 -0
  448. package/dist/components/p-C7tPadNy.js +1 -0
  449. package/dist/components/p-CBzpUqwG.js +1 -0
  450. package/dist/components/p-CUvAZhuM.js +1 -0
  451. package/dist/components/p-CZKHHCdL.js +1 -0
  452. package/dist/components/p-ChibIpZv.js +1 -0
  453. package/dist/components/p-CybHxq25.js +1 -0
  454. package/dist/components/p-CzkeIavk.js +1 -0
  455. package/dist/components/p-D7dk2gM7.js +1 -0
  456. package/dist/components/p-DTS-dgEe.js +1 -0
  457. package/dist/components/p-DvhR3H61.js +1 -0
  458. package/dist/components/{p-OGpfa9Yd.js → p-DzoNGEDU.js} +1 -1
  459. package/dist/components/{p-BeWXpX8I.js → p-HXlAaApx.js} +1 -1
  460. package/dist/components/p-K6LC1Hz4.js +1 -0
  461. package/dist/components/p-LAxCvyJl.js +1 -0
  462. package/dist/components/p-vLFwJ77w.js +1 -0
  463. package/dist/esm/co-accordion.entry.js +3 -3
  464. package/dist/esm/co-app-shell.entry.js +4 -4
  465. package/dist/esm/co-autocomplete.entry.js +10 -7
  466. package/dist/esm/co-avatar-group.entry.js +75 -0
  467. package/dist/esm/co-avatar.entry.js +12 -5
  468. package/dist/esm/co-badge.entry.js +2 -2
  469. package/dist/esm/co-bottom-sheet.entry.js +323 -0
  470. package/dist/esm/co-breadcrumb-item.entry.js +35 -0
  471. package/dist/esm/co-breadcrumb.entry.js +53 -0
  472. package/dist/esm/co-button-group.entry.js +3 -3
  473. package/dist/esm/co-button.entry.js +12 -6
  474. package/dist/esm/co-calendar-month.entry.js +379 -0
  475. package/dist/esm/co-calendar_3.entry.js +42 -12
  476. package/dist/esm/co-card.entry.js +3 -3
  477. package/dist/esm/co-checkbox-group.entry.js +5 -5
  478. package/dist/esm/co-checkbox.entry.js +18 -6
  479. package/dist/esm/co-chip.entry.js +19 -11
  480. package/dist/esm/co-color-picker.entry.js +7 -5
  481. package/dist/esm/co-column-picker.entry.js +3 -3
  482. package/dist/esm/co-combobox.entry.js +7 -7
  483. package/dist/esm/co-command-search.entry.js +151 -12
  484. package/dist/esm/co-data-table-pagination.entry.js +5 -5
  485. package/dist/esm/co-data-table.entry.js +44 -23
  486. package/dist/esm/co-date-picker.entry.js +2 -2
  487. package/dist/esm/co-date-range-picker.entry.js +4 -4
  488. package/dist/esm/co-date-range.entry.js +2 -2
  489. package/dist/esm/co-drive-card.entry.js +79 -0
  490. package/dist/esm/co-drop-zone.entry.js +61 -0
  491. package/dist/esm/co-empty-state.entry.js +13 -3
  492. package/dist/esm/co-event-calendar.entry.js +316 -0
  493. package/dist/esm/co-fab.entry.js +3 -3
  494. package/dist/esm/co-file-field.entry.js +8 -8
  495. package/dist/esm/co-file-type-tile.entry.js +76 -0
  496. package/dist/esm/co-helper-text.entry.js +3 -3
  497. package/dist/esm/co-icon-button.entry.js +24 -8
  498. package/dist/esm/co-icon.entry.js +33 -25
  499. package/dist/esm/co-input.entry.js +36 -7
  500. package/dist/esm/co-json-field.entry.js +10 -6
  501. package/dist/esm/co-lightbox.entry.js +5 -5
  502. package/dist/esm/co-list-footer.entry.js +23 -0
  503. package/dist/esm/co-list-item.entry.js +60 -4
  504. package/dist/esm/co-loader.entry.js +2 -2
  505. package/dist/esm/co-media-thumb.entry.js +34 -0
  506. package/dist/esm/co-menu-divider.entry.js +2 -2
  507. package/dist/esm/co-menu-item.entry.js +26 -11
  508. package/dist/esm/co-menu.entry.js +3 -3
  509. package/dist/esm/co-modal.entry.js +41 -5
  510. package/dist/esm/co-navbar.entry.js +3 -3
  511. package/dist/esm/co-number-field.entry.js +18 -6
  512. package/dist/esm/co-option-list.entry.js +377 -0
  513. package/dist/esm/co-overlay.entry.js +243 -3
  514. package/dist/esm/co-page-header.entry.js +2 -2
  515. package/dist/esm/co-phone-field.entry.js +6 -4
  516. package/dist/esm/co-popover.entry.js +45 -14
  517. package/dist/esm/co-progress-bar.entry.js +8 -4
  518. package/dist/esm/co-progress-circle.entry.js +3 -3
  519. package/dist/esm/co-radio-group.entry.js +4 -4
  520. package/dist/esm/co-radio.entry.js +4 -4
  521. package/dist/esm/co-rating.entry.js +4 -4
  522. package/dist/esm/co-ref-field.entry.js +36 -13
  523. package/dist/esm/co-rich-text-editor.entry.js +1879 -33
  524. package/dist/esm/co-rich-text-toolbar.entry.js +995 -71
  525. package/dist/esm/co-rich-text-viewer.entry.js +55 -19
  526. package/dist/esm/co-row.entry.js +3 -3
  527. package/dist/esm/co-segmented-bar.entry.js +56 -0
  528. package/dist/esm/co-select.entry.js +8 -8
  529. package/dist/esm/co-separator.entry.js +2 -2
  530. package/dist/esm/co-sidebar-nav.entry.js +29 -9
  531. package/dist/esm/co-sidebar.entry.js +3 -3
  532. package/dist/esm/co-skeleton.entry.js +24 -0
  533. package/dist/esm/co-slider.entry.js +3 -3
  534. package/dist/esm/co-switch.entry.js +6 -6
  535. package/dist/esm/co-tab-group.entry.js +15 -3
  536. package/dist/esm/co-tab.entry.js +8 -5
  537. package/dist/esm/co-tags-field.entry.js +19 -13
  538. package/dist/esm/co-textarea.entry.js +11 -7
  539. package/dist/esm/co-toast.entry.js +10 -4
  540. package/dist/esm/co-toggle-button-group.entry.js +16 -4
  541. package/dist/esm/co-toggle-button.entry.js +9 -5
  542. package/dist/esm/co-tooltip.entry.js +51 -16
  543. package/dist/esm/co-transfer-list.entry.js +3 -3
  544. package/dist/esm/co-video.entry.js +837 -0
  545. package/dist/esm/cobalt.js +3 -3
  546. package/dist/esm/{dates-CyYF8IJE.js → dates-tPYikBRJ.js} +1 -1
  547. package/dist/esm/fieldChip-BBu4ukje.js +5 -0
  548. package/dist/{cjs/index-CaEJnpZe.js → esm/index-Cyrxk8Qq.js} +14437 -6194
  549. package/dist/esm/{index-BKmfyPZK.js → index-Es9IUmmt.js} +105 -21
  550. package/dist/esm/loader.js +3 -3
  551. package/dist/esm/overlayAfterClose-Ch1jfwZ2.js +10 -0
  552. package/dist/{cjs/sanitizer-CjHZAkOm.js → esm/purify.es-B2QLgWrz.js} +1 -110
  553. package/dist/esm/{requiredMark-DFvtYtkE.js → requiredMark-Bg25QWFn.js} +1 -1
  554. package/dist/esm/richTextI18n-B-ckjCUA.js +380 -0
  555. package/dist/esm/toolbar-config-ChibIpZv.js +212 -0
  556. package/dist/esm/tz-B6JZk8fL.js +119 -0
  557. package/dist/types/components/co-autocomplete/co-autocomplete.d.ts +2 -0
  558. package/dist/types/components/co-avatar/co-avatar.d.ts +4 -0
  559. package/dist/types/components/co-avatar-group/co-avatar-group.d.ts +33 -0
  560. package/dist/types/components/co-bottom-sheet/co-bottom-sheet.d.ts +81 -0
  561. package/dist/types/components/co-breadcrumb/co-breadcrumb.d.ts +27 -0
  562. package/dist/types/components/co-breadcrumb-item/co-breadcrumb-item.d.ts +33 -0
  563. package/dist/types/components/co-button/co-button.d.ts +7 -1
  564. package/dist/types/components/co-calendar-month/co-calendar-month.d.ts +83 -0
  565. package/dist/types/components/co-checkbox/co-checkbox.d.ts +10 -2
  566. package/dist/types/components/co-chip/co-chip.d.ts +22 -5
  567. package/dist/types/components/co-color-picker/co-color-picker.d.ts +2 -0
  568. package/dist/types/components/co-command-search/co-command-search.d.ts +39 -6
  569. package/dist/types/components/co-command-search/commandSearchGroup.d.ts +20 -0
  570. package/dist/types/components/co-command-search/commandSearchLogic.d.ts +17 -0
  571. package/dist/types/components/co-data-table/co-data-table.d.ts +15 -2
  572. package/dist/types/components/co-drawer/co-drawer.d.ts +12 -0
  573. package/dist/types/components/co-drive-card/co-drive-card.d.ts +52 -0
  574. package/dist/types/components/co-drop-zone/co-drop-zone.d.ts +38 -0
  575. package/dist/types/components/co-empty-state/co-empty-state.d.ts +6 -0
  576. package/dist/types/components/co-event-calendar/co-event-calendar.d.ts +110 -0
  577. package/dist/types/components/co-file-type-tile/co-file-type-tile.d.ts +11 -0
  578. package/dist/types/components/co-icon/co-icon.d.ts +1 -1
  579. package/dist/types/components/co-icon/iconLoader.d.ts +6 -0
  580. package/dist/types/components/co-icon-button/co-icon-button.d.ts +18 -1
  581. package/dist/types/components/co-input/co-input.d.ts +13 -1
  582. package/dist/types/components/co-json-field/co-json-field.d.ts +3 -0
  583. package/dist/types/components/co-list-footer/co-list-footer.d.ts +26 -0
  584. package/dist/types/components/co-list-item/co-list-item.d.ts +11 -0
  585. package/dist/types/components/co-media-thumb/co-media-thumb.d.ts +21 -0
  586. package/dist/types/components/co-menu/co-menu.d.ts +4 -0
  587. package/dist/types/components/co-menu-item/co-menu-item.d.ts +10 -1
  588. package/dist/types/components/co-modal/co-modal.d.ts +26 -2
  589. package/dist/types/components/co-number-field/co-number-field.d.ts +13 -0
  590. package/dist/types/components/co-option-list/co-option-list.d.ts +101 -0
  591. package/dist/types/components/co-option-list/optionListLogic.d.ts +69 -0
  592. package/dist/types/components/co-overlay/co-overlay.d.ts +45 -0
  593. package/dist/types/components/co-overlay/focusTrap.d.ts +20 -0
  594. package/dist/types/components/co-overlay/overlayAfterClose.d.ts +5 -0
  595. package/dist/types/components/co-phone-field/co-phone-field.d.ts +2 -0
  596. package/dist/types/components/co-popover/co-popover.d.ts +9 -0
  597. package/dist/types/components/co-progress-bar/co-progress-bar.d.ts +2 -0
  598. package/dist/types/components/co-ref-field/co-ref-field.d.ts +17 -2
  599. package/dist/types/components/co-rich-text-editor/co-rich-text-editor.d.ts +161 -9
  600. package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +119 -13
  601. package/dist/types/components/co-rich-text-viewer/co-rich-text-viewer.d.ts +1 -14
  602. package/dist/types/components/co-segmented-bar/co-segmented-bar.d.ts +32 -0
  603. package/dist/types/components/co-skeleton/co-skeleton.d.ts +13 -0
  604. package/dist/types/components/co-tab/co-tab.d.ts +4 -0
  605. package/dist/types/components/co-tab-group/co-tab-group.d.ts +3 -0
  606. package/dist/types/components/co-tags-field/co-tags-field.d.ts +2 -0
  607. package/dist/types/components/co-textarea/co-textarea.d.ts +3 -0
  608. package/dist/types/components/co-toast/co-toast.d.ts +7 -0
  609. package/dist/types/components/co-toggle-button/co-toggle-button.d.ts +6 -0
  610. package/dist/types/components/co-toggle-button-group/co-toggle-button-group.d.ts +5 -0
  611. package/dist/types/components/co-tooltip/co-tooltip.d.ts +12 -0
  612. package/dist/types/components/co-video/co-video.d.ts +203 -0
  613. package/dist/types/components.d.ts +3184 -221
  614. package/dist/types/utils/fieldChip.d.ts +37 -0
  615. package/dist/types/utils/icon-config.d.ts +11 -0
  616. package/dist/types/utils/richTextI18n.d.ts +130 -0
  617. package/dist/types/utils/sheetGesture.d.ts +31 -0
  618. package/package.json +5 -4
  619. package/dist/cobalt/p-01fc77c4.entry.js +0 -1
  620. package/dist/cobalt/p-0a6d8061.entry.js +0 -1
  621. package/dist/cobalt/p-0bf288cd.entry.js +0 -1
  622. package/dist/cobalt/p-15708d32.entry.js +0 -1
  623. package/dist/cobalt/p-1578b019.entry.js +0 -1
  624. package/dist/cobalt/p-23d48581.entry.js +0 -1
  625. package/dist/cobalt/p-2718ff27.entry.js +0 -1
  626. package/dist/cobalt/p-3190d715.entry.js +0 -1
  627. package/dist/cobalt/p-41228dce.entry.js +0 -1
  628. package/dist/cobalt/p-44672953.entry.js +0 -1
  629. package/dist/cobalt/p-53ce9023.entry.js +0 -1
  630. package/dist/cobalt/p-5d01bd4d.entry.js +0 -1
  631. package/dist/cobalt/p-5e7141aa.entry.js +0 -1
  632. package/dist/cobalt/p-5f905739.entry.js +0 -1
  633. package/dist/cobalt/p-6404bd21.entry.js +0 -1
  634. package/dist/cobalt/p-654bbc2a.entry.js +0 -1
  635. package/dist/cobalt/p-6678ac0a.entry.js +0 -1
  636. package/dist/cobalt/p-66a912dd.entry.js +0 -1
  637. package/dist/cobalt/p-6759ee1c.entry.js +0 -1
  638. package/dist/cobalt/p-69a40bfd.entry.js +0 -1
  639. package/dist/cobalt/p-6a6a62cb.entry.js +0 -1
  640. package/dist/cobalt/p-6d43b6cd.entry.js +0 -1
  641. package/dist/cobalt/p-759c3dd0.entry.js +0 -1
  642. package/dist/cobalt/p-782f729f.entry.js +0 -1
  643. package/dist/cobalt/p-83b89bf8.entry.js +0 -1
  644. package/dist/cobalt/p-88dc561a.entry.js +0 -1
  645. package/dist/cobalt/p-8c27aff7.entry.js +0 -1
  646. package/dist/cobalt/p-95d14878.entry.js +0 -1
  647. package/dist/cobalt/p-996179f7.entry.js +0 -1
  648. package/dist/cobalt/p-9c533830.entry.js +0 -1
  649. package/dist/cobalt/p-9d89bf47.entry.js +0 -1
  650. package/dist/cobalt/p-BKmfyPZK.js +0 -2
  651. package/dist/cobalt/p-BchB6Hdr.js +0 -1
  652. package/dist/cobalt/p-DcK0GGZC.js +0 -2
  653. package/dist/cobalt/p-Qqq8fysz.js +0 -1
  654. package/dist/cobalt/p-aa17c70b.entry.js +0 -1
  655. package/dist/cobalt/p-ad4c1b41.entry.js +0 -1
  656. package/dist/cobalt/p-ae4d3207.entry.js +0 -1
  657. package/dist/cobalt/p-af64da37.entry.js +0 -1
  658. package/dist/cobalt/p-c6a242e4.entry.js +0 -1
  659. package/dist/cobalt/p-cd57e8b4.entry.js +0 -1
  660. package/dist/cobalt/p-ce3a535f.entry.js +0 -1
  661. package/dist/cobalt/p-d17e1444.entry.js +0 -1
  662. package/dist/cobalt/p-d958566a.entry.js +0 -1
  663. package/dist/cobalt/p-dd873bf8.entry.js +0 -1
  664. package/dist/cobalt/p-e4de8865.entry.js +0 -1
  665. package/dist/cobalt/p-eba0bf7f.entry.js +0 -1
  666. package/dist/cobalt/p-f8728b21.entry.js +0 -1
  667. package/dist/cobalt/p-fad3605d.entry.js +0 -1
  668. package/dist/components/p-BXdfh__-.js +0 -1
  669. package/dist/components/p-BchB6Hdr.js +0 -1
  670. package/dist/components/p-BiW0ubLs.js +0 -1
  671. package/dist/components/p-CaMgu2_g.js +0 -1
  672. package/dist/components/p-DBhNS7JD.js +0 -1
  673. package/dist/components/p-DPi_U-Kl.js +0 -1
  674. package/dist/components/p-DcK0GGZC.js +0 -2
  675. package/dist/components/p-MiSJXuBx.js +0 -1
  676. package/dist/components/p-Sgn-2g8m.js +0 -1
  677. package/dist/components/p-jDjfGZJp.js +0 -1
  678. package/dist/components/p-o8hrDIKe.js +0 -1
@@ -1,26 +1,72 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DoFnrUVH.js');
3
+ var index = require('./index-NNvye1ul.js');
4
+ var richTextI18n = require('./richTextI18n-B7ktXg3M.js');
5
+ var toolbarConfig = require('./toolbar-config-3PlT-3zm.js');
4
6
 
5
- const coRichTextToolbarCss = () => `:host{display:block;font-family:var(--co-font-family-primary)}.co-rich-text-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--co-spacing-xxs, 2px);padding:var(--co-spacing-xs) var(--co-spacing-sm);border-bottom:1px solid var(--co-semantic-border-subtle);background:var(--co-semantic-surface-secondary)}.co-rich-text-toolbar__btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:var(--co-border-radius-xxs);background:transparent;color:var(--co-semantic-text-secondary);cursor:pointer;transition:background 0.12s ease, color 0.12s ease}.co-rich-text-toolbar__btn:hover:not(:disabled){background:var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));color:var(--co-semantic-text-default)}.co-rich-text-toolbar__btn--active{background:var(--co-semantic-surface-hover, rgba(37, 99, 235, 0.12));color:var(--co-color-primary-azul)}.co-rich-text-toolbar__btn:disabled{opacity:0.4;cursor:not-allowed}.co-rich-text-toolbar__btn:focus-visible{outline:2px solid var(--co-semantic-border-focus, var(--co-color-primary-azul));outline-offset:1px}`;
7
+ const coRichTextToolbarCss = () => `:host{display:block;font-family:var(--co-font-family-primary);z-index:10;flex-shrink:0;background:var(--co-semantic-surface-secondary, #fff);overflow:visible}.co-rich-text-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--co-spacing-xxs, 2px);padding:var(--co-spacing-xs) var(--co-spacing-sm);border-bottom:1px solid var(--co-semantic-border-subtle);background:var(--co-semantic-surface-secondary)}.co-rich-text-toolbar__btn-wrap,.co-rich-text-toolbar__split-wrap{overflow:visible}[data-tooltip]{position:relative}[data-tooltip]::after{content:attr(data-tooltip);position:absolute;top:calc(100% + 4px);left:50%;transform:translateX(-50%);padding:4px 8px;background:var(--co-color-base-negro, #1a1a1a);color:var(--co-color-base-blanco, #fff);font-size:11px;font-weight:500;line-height:1.3;white-space:nowrap;border-radius:4px;pointer-events:none;opacity:0;transition:opacity 0.15s ease;z-index:9999}[data-tooltip]:hover::after{opacity:1;transition-delay:0.4s}[data-tooltip]:active::after,[data-tooltip][aria-expanded="true"]::after{opacity:0 !important;transition-delay:0s}.co-rich-text-toolbar__btn-wrap{position:relative;display:inline-flex}.co-rich-text-toolbar__btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:var(--co-border-radius-xxs);background:transparent;color:var(--co-semantic-text-default, #333);cursor:pointer;transition:background 0.12s ease, color 0.12s ease}.co-rich-text-toolbar__btn:hover:not(:disabled):not(.co-rich-text-toolbar__btn--active){background:var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.08));color:var(--co-semantic-text-default, #1a1a1a)}.co-rich-text-toolbar__btn--active{background:var(--co-color-base-negro, #1a1a1a);color:var(--co-color-base-blanco, #fff)}.co-rich-text-toolbar__btn--active:hover{background:var(--co-color-base-negro, #333);color:var(--co-color-base-blanco, #fff)}.co-rich-text-toolbar__btn:disabled{opacity:0.4;cursor:not-allowed}.co-rich-text-toolbar__btn:focus-visible{outline:2px solid var(--co-semantic-border-focus, var(--co-color-base-negro, #1a1a1a));outline-offset:1px}.co-rich-text-toolbar__select-btn{display:inline-flex;align-items:center;gap:2px;height:30px;padding:0 6px;border:1px solid transparent;border-radius:var(--co-border-radius-xxs, 4px);background:transparent;color:var(--co-semantic-text-default, #333);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12, 12px);cursor:pointer;white-space:nowrap;transition:background 0.12s, border-color 0.12s}.co-rich-text-toolbar__select-btn:hover:not(:disabled){background:var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));border-color:var(--co-semantic-border-default, #e0e0e0)}.co-rich-text-toolbar__select-btn--open{background:var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));border-color:var(--co-semantic-border-default, #e0e0e0)}.co-rich-text-toolbar__select-btn:disabled{opacity:0.4;cursor:not-allowed}.co-rich-text-toolbar__select-label{max-width:100px;overflow:hidden;text-overflow:ellipsis}.co-rich-text-toolbar__sep{display:inline-block;width:1px;height:20px;margin:0 var(--co-spacing-xs, 4px);background:var(--co-semantic-border-subtle, rgba(0, 0, 0, 0.12))}.co-rich-text-toolbar__popover{position:absolute;top:100%;left:0;z-index:100;display:flex;flex-direction:column;gap:var(--co-spacing-xs, 4px);min-width:280px;padding:var(--co-spacing-sm, 8px);background:var(--co-semantic-surface-secondary, #fff);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xs, 8px);box-shadow:0 4px 16px rgba(0, 0, 0, 0.12);margin-top:var(--co-spacing-xs, 4px)}.co-rich-text-toolbar__popover-input{width:100%;padding:6px 10px;border:1px solid var(--co-semantic-border-default, #ccc);border-radius:var(--co-border-radius-xxs, 4px);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14, 14px);outline:none;box-sizing:border-box}.co-rich-text-toolbar__popover-input:focus{border-color:var(--co-color-base-negro, #1a1a1a);box-shadow:0 0 0 2px rgba(0, 0, 0, 0.1)}.co-rich-text-toolbar__popover-actions{display:flex;gap:var(--co-spacing-xs, 4px)}.co-rich-text-toolbar__popover-btn{padding:4px 12px;border:1px solid var(--co-semantic-border-default, #ccc);border-radius:var(--co-border-radius-xxs, 4px);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12, 12px);cursor:pointer;background:var(--co-semantic-surface-secondary, #fff);color:var(--co-semantic-text-default, #333);transition:background 0.12s}.co-rich-text-toolbar__popover-btn:hover:not(.co-rich-text-toolbar__popover-btn--primary){background:var(--co-semantic-surface-hover, #f5f5f5)}.co-rich-text-toolbar__popover-btn--primary{background:var(--co-color-base-negro, #1a1a1a);color:#fff;border-color:var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__popover-btn--primary:hover{background:var(--co-color-base-negro, #333);color:#fff}.co-rich-text-toolbar__popover-btn--danger{color:var(--co-color-status-error, #aa2e1b);border-color:var(--co-color-status-error, #aa2e1b)}.co-rich-text-toolbar__popover-option{display:flex;align-items:center;gap:var(--co-spacing-sm, 8px);width:100%;padding:8px 10px;border:none;border-radius:var(--co-border-radius-xxs, 4px);background:transparent;color:var(--co-semantic-text-default, #333);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14, 14px);cursor:pointer;text-align:left;transition:background 0.1s}.co-rich-text-toolbar__popover-option:hover{background:var(--co-semantic-surface-hover, #f5f5f5)}.co-rich-text-toolbar__dropdown{position:absolute;top:100%;left:0;z-index:100;display:flex;flex-direction:column;min-width:180px;max-height:360px;overflow-y:auto;padding:var(--co-spacing-xs, 4px);background:var(--co-semantic-surface-secondary, #fff);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xs, 8px);box-shadow:0 4px 16px rgba(0, 0, 0, 0.12);margin-top:var(--co-spacing-xs, 4px)}.co-rich-text-toolbar__dropdown-item{display:flex;align-items:center;gap:var(--co-spacing-sm, 8px);padding:6px 10px;border:none;border-radius:var(--co-border-radius-xxs, 4px);background:transparent;color:var(--co-semantic-text-default, #333);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14, 14px);cursor:pointer;text-align:left;transition:background 0.12s}.co-rich-text-toolbar__dropdown-item:hover{background:var(--co-semantic-surface-hover, #f5f5f5)}.co-rich-text-toolbar__dropdown-sep{height:1px;margin:4px 0;background:var(--co-semantic-border-default, #e0e0e0)}.co-rich-text-toolbar__dropdown-sep-label{padding:6px 10px 2px;font-family:var(--co-font-family-primary);font-size:11px;font-weight:600;color:var(--co-semantic-text-muted, #999);letter-spacing:0.03em;border-top:1px solid var(--co-semantic-border-default, #e0e0e0);margin-top:2px}.co-rich-text-toolbar__dropdown-input-wrap{padding:6px 8px;border-bottom:1px solid var(--co-semantic-border-default, #e0e0e0)}.co-rich-text-toolbar__dropdown-input{width:100%;padding:4px 8px;border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:4px;font-size:13px;font-family:var(--co-font-family-primary);outline:none;box-sizing:border-box}.co-rich-text-toolbar__dropdown-input:focus{border-color:var(--co-color-base-negro, #1a1a1a);box-shadow:0 0 0 2px rgba(0, 0, 0, 0.1)}.co-rich-text-toolbar__color-picker{position:absolute;top:100%;left:0;z-index:100;display:flex;flex-direction:column;gap:var(--co-spacing-xs, 4px);padding:var(--co-spacing-sm, 8px);background:var(--co-semantic-surface-secondary, #fff);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xs, 8px);box-shadow:0 4px 16px rgba(0, 0, 0, 0.12);margin-top:var(--co-spacing-xs, 4px)}.co-rich-text-toolbar__color-grid{display:grid;grid-template-columns:repeat(10, 1fr);gap:2px}.co-rich-text-toolbar__color-swatch{width:22px;height:22px;padding:0;border:none;border-radius:3px;cursor:pointer;transition:transform 0.1s, box-shadow 0.1s}.co-rich-text-toolbar__color-swatch:hover{transform:scale(1.2);box-shadow:0 0 0 2px var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__color-clear{display:flex;align-items:center;gap:var(--co-spacing-xs, 4px);padding:4px 8px;border:none;background:transparent;color:var(--co-semantic-text-secondary, #666);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12, 12px);cursor:pointer;border-radius:var(--co-border-radius-xxs, 4px);margin-top:var(--co-spacing-xxs, 2px)}.co-rich-text-toolbar__color-clear:hover{background:var(--co-semantic-surface-hover, #f5f5f5);color:var(--co-semantic-text-default, #333)}.co-rich-text-toolbar__table-picker{position:absolute;top:100%;left:0;z-index:100;display:flex;flex-direction:column;width:280px;padding:var(--co-spacing-lg, 16px);background:var(--co-semantic-surface-secondary, #fff);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xs, 8px);box-shadow:0 8px 24px rgba(0, 0, 0, 0.12);margin-top:var(--co-spacing-xs, 4px)}.co-rich-text-toolbar__table-header{display:flex;align-items:center;gap:var(--co-spacing-sm, 8px);margin-bottom:var(--co-spacing-md, 12px)}.co-rich-text-toolbar__table-title{flex:1;font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12, 12px);font-weight:600;letter-spacing:0.06em;color:var(--co-semantic-text-secondary, #666)}.co-rich-text-toolbar__table-close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:var(--co-border-radius-xxs, 4px);background:transparent;color:var(--co-semantic-text-secondary, #666);cursor:pointer}.co-rich-text-toolbar__table-close:hover{background:var(--co-semantic-surface-hover, #f0f0f0)}.co-rich-text-toolbar__table-tabs{display:flex;gap:0;margin-bottom:var(--co-spacing-md, 12px);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xxs, 4px);overflow:hidden}.co-rich-text-toolbar__table-tab{flex:1;padding:var(--co-spacing-sm, 8px) var(--co-spacing-md, 12px);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-13, 13px);font-weight:500;border:none;background:transparent;color:var(--co-semantic-text-secondary, #666);cursor:pointer;transition:background 0.12s, color 0.12s}.co-rich-text-toolbar__table-tab:hover{background:var(--co-semantic-surface-hover, #f5f5f5)}.co-rich-text-toolbar__table-tab--active{background:var(--co-color-base-negro, #1a1a1a);color:var(--co-color-base-blanco, #fff)}.co-rich-text-toolbar__grid-container{display:flex;flex-direction:column;gap:var(--co-spacing-sm, 8px);margin-bottom:var(--co-spacing-md, 12px)}.co-rich-text-toolbar__grid{display:grid;gap:3px}.co-rich-text-toolbar__grid-cell{width:24px;height:24px;border:1px solid var(--co-semantic-border-default, #d0d0d0);border-radius:3px;background:transparent;cursor:pointer;transition:background 0.08s, border-color 0.08s}.co-rich-text-toolbar__grid-cell:hover,.co-rich-text-toolbar__grid-cell--active{background:var(--co-color-base-negro, #1a1a1a);border-color:var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__grid-footer{display:flex;align-items:center;justify-content:space-between}.co-rich-text-toolbar__grid-label{font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12, 12px);color:var(--co-semantic-text-muted, #999)}.co-rich-text-toolbar__grid-reset{font-family:var(--co-font-family-primary);font-size:var(--co-font-size-12, 12px);color:var(--co-semantic-text-default, #333);text-decoration:underline;border:none;background:transparent;cursor:pointer;padding:0}.co-rich-text-toolbar__table-manual{display:flex;flex-direction:column;gap:var(--co-spacing-md, 12px);margin-bottom:var(--co-spacing-md, 12px)}.co-rich-text-toolbar__table-field{display:flex;align-items:center;gap:var(--co-spacing-md, 12px)}.co-rich-text-toolbar__table-field label{font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14, 14px);color:var(--co-semantic-text-default, #333);min-width:70px}.co-rich-text-toolbar__table-field input{flex:1;padding:var(--co-spacing-sm, 8px) var(--co-spacing-md, 12px);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14, 14px);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xxs, 4px);background:var(--co-semantic-surface-secondary, #fff);outline:none}.co-rich-text-toolbar__table-field input:focus{border-color:var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__table-check{display:flex;align-items:center;gap:var(--co-spacing-sm, 8px);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-14, 14px);color:var(--co-semantic-text-default, #333);cursor:pointer;margin-bottom:var(--co-spacing-md, 12px)}.co-rich-text-toolbar__table-check input{width:18px;height:18px;cursor:pointer;accent-color:var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__table-actions{display:flex;gap:var(--co-spacing-sm, 8px);justify-content:flex-end}.co-rich-text-toolbar__table-btn{padding:var(--co-spacing-sm, 8px) var(--co-spacing-lg, 16px);font-family:var(--co-font-family-primary);font-size:var(--co-font-size-13, 13px);font-weight:500;border:none;border-radius:var(--co-border-radius-xxs, 4px);cursor:pointer;transition:opacity 0.12s}.co-rich-text-toolbar__table-btn--primary{background:var(--co-color-base-negro, #1a1a1a);color:var(--co-color-base-blanco, #fff)}.co-rich-text-toolbar__table-btn--primary:hover{opacity:0.85}.co-rich-text-toolbar__table-btn--secondary{background:transparent;color:var(--co-semantic-text-default, #333)}.co-rich-text-toolbar__table-btn--secondary:hover{background:var(--co-semantic-surface-hover, #f5f5f5)}.co-rich-text-toolbar__split-wrap{position:relative;display:inline-flex;align-items:center}.co-rich-text-toolbar__split-main{border-top-right-radius:0;border-bottom-right-radius:0;width:28px}.co-rich-text-toolbar__split-caret{display:inline-flex;align-items:center;justify-content:center;width:16px;height:30px;padding:0;border:none;border-radius:var(--co-border-radius-xxs);border-top-left-radius:0;border-bottom-left-radius:0;background:transparent;color:var(--co-semantic-text-default, #333);cursor:pointer;transition:background 0.12s ease}.co-rich-text-toolbar__split-caret:hover:not(:disabled),.co-rich-text-toolbar__split-caret--open{background:var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.08))}.co-rich-text-toolbar__split-caret:disabled{opacity:0.4;cursor:not-allowed}.co-rich-text-toolbar__listpicker{position:absolute;top:100%;left:0;z-index:100;display:grid;grid-template-columns:repeat(3, 1fr);gap:14px;padding:16px;background:var(--co-semantic-surface-secondary, #fff);border:1px solid var(--co-semantic-border-default, #e0e0e0);border-radius:var(--co-border-radius-xs, 8px);box-shadow:0 8px 24px rgba(0, 0, 0, 0.14);margin-top:var(--co-spacing-xs, 4px)}.co-rich-text-toolbar__listpicker-item{display:flex;align-items:center;justify-content:flex-start;width:76px;height:60px;padding:0;border:1px solid var(--co-semantic-border-default, #e3e3e3);border-radius:8px;background:var(--co-semantic-surface-secondary, #fff);cursor:pointer;transition:border-color 0.12s, box-shadow 0.12s, background 0.12s}.co-rich-text-toolbar__listpicker-item:hover{border-color:var(--co-color-base-negro, #1a1a1a);background:var(--co-semantic-surface-hover, #fafafa)}.co-rich-text-toolbar__listpicker-item--active{border-color:var(--co-color-base-negro, #1a1a1a);box-shadow:0 0 0 1.5px var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__listpicker-preview{margin:0;padding:0 0 0 22px;list-style-position:outside;pointer-events:none}.co-rich-text-toolbar__listpicker-preview li{height:3px;width:30px;margin:7px 0;background:var(--co-semantic-border-default, #cfcfcf);border-radius:2px}.co-rich-text-toolbar__listpicker-preview li::marker{color:var(--co-color-base-negro, #1a1a1a);font-size:11px;font-weight:600}.co-rich-text-toolbar__listpicker--task{grid-template-columns:repeat(2, 1fr)}.co-rich-text-toolbar__listpicker-item--task{width:92px;justify-content:center}.co-rich-text-toolbar__taskpreview{display:flex;flex-direction:column;gap:9px}.co-rich-text-toolbar__taskpreview-row{display:flex;align-items:center;gap:7px}.co-rich-text-toolbar__taskpreview-box{flex:0 0 auto;width:11px;height:11px;border:1.5px solid var(--co-color-base-negro, #1a1a1a);border-radius:3px;box-sizing:border-box}.co-rich-text-toolbar__taskpreview-box--checked{position:relative;background:var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__taskpreview-box--checked::after{content:'';position:absolute;left:3px;top:0.5px;width:3px;height:6px;border:solid #fff;border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}.co-rich-text-toolbar__taskpreview-line{position:relative;width:34px;height:3px;background:var(--co-semantic-border-default, #cfcfcf);border-radius:2px}.co-rich-text-toolbar__taskpreview[data-variant="strike"] .co-rich-text-toolbar__taskpreview-row--checked .co-rich-text-toolbar__taskpreview-line::after{content:'';position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);height:1.5px;background:var(--co-color-base-negro, #1a1a1a)}.co-rich-text-toolbar__dropdown-check{display:inline-flex;align-items:center;justify-content:center;width:18px;flex-shrink:0}.co-rich-text-toolbar__dropdown-item--active{background:var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.04));font-weight:600}.co-rich-text-toolbar__align-group{display:inline-flex;align-items:center;gap:0}.co-rich-text-toolbar__color-indicator{display:flex;flex-direction:column;align-items:center;gap:1px;line-height:1}.co-rich-text-toolbar__color-letter{font-family:var(--co-font-family-primary);font-size:14px;font-weight:700;color:var(--co-semantic-text-default, #333);line-height:1}.co-rich-text-toolbar__color-bar{width:14px;height:3px;border-radius:1px}.co-rich-text-toolbar__color-hex{display:flex;align-items:center;gap:4px;margin-top:6px}.co-rich-text-toolbar__color-hex-input{width:100%;padding:3px 6px;border:1px solid var(--co-semantic-border-default, #ccc);border-radius:3px;background:var(--co-semantic-surface-secondary, #fff);color:var(--co-semantic-text-default, #333);font-family:var(--co-font-family-mono, monospace);font-size:11px;outline:none;box-sizing:border-box}.co-rich-text-toolbar__color-hex-input:focus{border-color:var(--co-color-base-negro, #1a1a1a);box-shadow:0 0 0 2px rgba(0, 0, 0, 0.1)}`;
6
8
 
7
9
  const CoRichTextToolbar = class {
8
10
  constructor(hostRef) {
9
11
  index.registerInstance(this, hostRef);
10
12
  this.coAction = index.createEvent(this, "coAction", 7);
13
+ this.coPopoverChange = index.createEvent(this, "coPopoverChange", 7);
11
14
  /** Toolbar layout variant. */
12
15
  this.variant = 'basic';
13
16
  this.disabled = false;
17
+ /** BCP-47 locale for UI strings (e.g. 'en', 'es-CO', 'pt-BR'). Default English. */
18
+ this.locale = 'en';
14
19
  this.items = [];
15
20
  /** Bumped on every editor transaction to refresh active state. */
16
21
  this.tick = 0;
17
- this.onTransaction = () => { this.tick++; };
22
+ /** Currently open popover/dropdown (action id) or null. */
23
+ this.openPopover = null;
24
+ /** Input value for popover forms (link URL, image URL, etc.). */
25
+ this.popoverInput = '';
26
+ /** Table grid picker state. */
27
+ this.gridHoverRows = 0;
28
+ this.gridHoverCols = 0;
29
+ this.gridLockedRows = 0;
30
+ this.gridLockedCols = 0;
31
+ this.tableTab = 'grid';
32
+ this.tableManualRows = 3;
33
+ this.tableManualCols = 3;
34
+ this.tableWithHeader = false;
35
+ /** Table context items shown when cursor is inside a table. */
36
+ this.tableContextItems = [];
37
+ /** Image popover sub-view: 'menu' shows options, 'url' shows URL input. */
38
+ this.imagePopoverMode = 'menu';
39
+ /** Hex input for toolbar color picker. */
40
+ this.colorHexInput = '';
41
+ this.onTransaction = () => {
42
+ this.tick++;
43
+ // Show/hide table context buttons based on whether cursor is in a table
44
+ this.updateTableContext();
45
+ };
46
+ this.colorPalette = [];
47
+ this._tableContextItems = [];
48
+ /**
49
+ * Prevent toolbar clicks from stealing focus from the editor.
50
+ * This handler is on the HOST element (light DOM), which reliably
51
+ * prevents focus change even when Shadow DOM retargets events.
52
+ */
53
+ this.handleHostMouseDown = (e) => {
54
+ const path = e.composedPath();
55
+ const isInput = path.some(n => n instanceof HTMLElement && n.tagName === 'INPUT');
56
+ if (!isInput)
57
+ e.preventDefault();
58
+ };
59
+ this.handleDocumentClick = (e) => {
60
+ if (!this.openPopover)
61
+ return;
62
+ if (this.el.contains(e.target))
63
+ return;
64
+ this.closePopover();
65
+ };
18
66
  this.run = (item) => {
19
67
  const editor = this.editor;
20
68
  if (!editor || this.disabled)
21
69
  return;
22
- // Cast: link/undo/redo command types are registered by their extensions,
23
- // which are bundled via StarterKit and not visible to core's TS view.
24
70
  const chain = editor.chain().focus();
25
71
  switch (item.action) {
26
72
  case 'bold':
@@ -44,141 +90,1019 @@ const CoRichTextToolbar = class {
44
90
  case 'orderedList':
45
91
  chain.toggleOrderedList().run();
46
92
  break;
93
+ // Split-button main area: toggle the list on/off (caret opens styles)
94
+ case 'bulletListMenu':
95
+ chain.toggleBulletList().run();
96
+ break;
97
+ case 'orderedListMenu':
98
+ chain.toggleOrderedList().run();
99
+ break;
100
+ case 'taskListMenu':
101
+ chain.toggleTaskList().run();
102
+ break;
47
103
  case 'blockquote':
48
104
  chain.toggleBlockquote().run();
49
105
  break;
106
+ case 'codeBlock':
107
+ chain.toggleCodeBlock().run();
108
+ break;
50
109
  case 'heading':
51
110
  chain.toggleHeading(item.payload).run();
52
111
  break;
112
+ case 'horizontalRule':
113
+ chain.setHorizontalRule().run();
114
+ break;
115
+ case 'textAlign':
116
+ chain.setTextAlign(item.payload).run();
117
+ break;
53
118
  case 'undo':
54
119
  chain.undo().run();
55
120
  break;
56
121
  case 'redo':
57
122
  chain.redo().run();
58
123
  break;
59
- case 'link':
60
- this.toggleLink();
124
+ // Table context operations
125
+ case 'addColumnAfter':
126
+ chain.addColumnAfter().run();
61
127
  break;
62
- case 'image':
63
- this.insertImage();
128
+ case 'addColumnBefore':
129
+ chain.addColumnBefore().run();
130
+ break;
131
+ case 'deleteColumn':
132
+ chain.deleteColumn().run();
133
+ break;
134
+ case 'addRowAfter':
135
+ chain.addRowAfter().run();
136
+ break;
137
+ case 'addRowBefore':
138
+ chain.addRowBefore().run();
139
+ break;
140
+ case 'deleteRow':
141
+ chain.deleteRow().run();
142
+ break;
143
+ case 'deleteTable':
144
+ chain.deleteTable().run();
145
+ break;
146
+ case 'mergeCells':
147
+ chain.mergeCells().run();
148
+ break;
149
+ case 'splitCell':
150
+ chain.splitCell().run();
151
+ break;
152
+ case 'toggleHeaderRow':
153
+ chain.toggleHeaderRow().run();
154
+ break;
155
+ // popover/dropdown/color/grid actions are handled via toggle
156
+ case 'indentIncrease':
157
+ if (editor.isActive('bulletList') || editor.isActive('orderedList')) {
158
+ chain.sinkListItem('listItem').run();
159
+ }
160
+ else {
161
+ chain.indent().run();
162
+ }
64
163
  break;
164
+ case 'indentDecrease':
165
+ if (editor.isActive('bulletList') || editor.isActive('orderedList')) {
166
+ chain.liftListItem('listItem').run();
167
+ }
168
+ else {
169
+ chain.outdent().run();
170
+ }
171
+ break;
172
+ case 'link':
173
+ case 'image':
174
+ case 'youtube':
175
+ case 'iframe':
176
+ case 'callout':
177
+ case 'fontSize':
178
+ case 'fontFamily':
179
+ case 'headingStyle':
180
+ case 'lineSpacing':
181
+ case 'letterSpacing':
182
+ case 'table':
183
+ case 'textColor':
184
+ case 'highlight':
185
+ this.togglePopover(item.action);
186
+ return; // don't emit action yet
65
187
  default: chain.run();
66
188
  }
67
189
  this.coAction.emit({ action: item.action, payload: item.payload });
68
190
  };
69
191
  }
70
- async componentWillLoad() {
71
- const rt = await Promise.resolve().then(function () { return require('./index-CaEJnpZe.js'); });
72
- this.items = rt.toolbarItems(this.variant === 'none' ? 'compact' : this.variant);
192
+ get s() {
193
+ return richTextI18n.getRichTextStrings(this.locale);
73
194
  }
74
- async onVariantChange(v) {
75
- const rt = await Promise.resolve().then(function () { return require('./index-CaEJnpZe.js'); });
76
- this.items = rt.toolbarItems((v === 'none' ? 'compact' : v));
195
+ tItem(item) {
196
+ var _a;
197
+ const s = this.s;
198
+ const map = {
199
+ bold: s.bold, italic: s.italic, underline: s.underline,
200
+ strike: s.strikethrough, code: s.code, headingStyle: s.styles,
201
+ fontSize: s.fontSize, fontFamily: s.font,
202
+ bulletList: s.bulletList, orderedList: s.orderedList,
203
+ bulletListMenu: s.bulletList, orderedListMenu: s.orderedList,
204
+ taskListMenu: s.taskList,
205
+ blockquote: s.quote, codeBlock: s.codeBlock,
206
+ horizontalRule: s.horizontalRule,
207
+ link: s.link, image: s.image, youtube: s.youtubeVideo, iframe: s.iframeEmbed,
208
+ table: s.table, textColor: s.textColor, highlight: s.highlight,
209
+ alignment: s.alignment, lineSpacing: s.lineSpacing,
210
+ letterSpacing: s.letterSpacing,
211
+ indentIncrease: s.increaseIndent, indentDecrease: s.decreaseIndent,
212
+ callout: s.callout, undo: s.undo, redo: s.redo,
213
+ addColumnAfter: s.addColumnAfter, addColumnBefore: s.addColumnBefore,
214
+ deleteColumn: s.deleteColumn, addRowAfter: s.addRowAfter,
215
+ addRowBefore: s.addRowBefore, deleteRow: s.deleteRow,
216
+ deleteTable: s.deleteTable, mergeCells: s.mergeCells,
217
+ splitCell: s.splitCell, toggleHeaderRow: s.headerRow,
218
+ };
219
+ return (_a = map[item.action]) !== null && _a !== void 0 ? _a : item.label;
220
+ }
221
+ tOpt(opt) {
222
+ var _a, _b, _c, _d, _e;
223
+ const s = this.s;
224
+ if (opt.action === 'separator')
225
+ return `─── ${s.systemFonts} ───`;
226
+ if (opt.action === 'paragraph')
227
+ return s.normalText;
228
+ if (opt.action === 'heading') {
229
+ const level = (_a = opt.payload) === null || _a === void 0 ? void 0 : _a.level;
230
+ if (level === 1)
231
+ return s.title;
232
+ if (level === 2)
233
+ return s.subtitle;
234
+ if (level === 3)
235
+ return s.heading3;
236
+ }
237
+ if (opt.action === 'bulletStyle') {
238
+ const m = { disc: s.disc, circle: s.circle, square: s.square };
239
+ return (_b = m[opt.payload]) !== null && _b !== void 0 ? _b : opt.label;
240
+ }
241
+ if (opt.action === 'taskStyle') {
242
+ if (opt.payload === 'strike')
243
+ return s.strikeOnComplete;
244
+ if (opt.payload === 'plain')
245
+ return s.noStrikethrough;
246
+ }
247
+ if (opt.action === 'textAlign') {
248
+ const m = { left: s.left, center: s.center, right: s.right, justify: s.justify };
249
+ return (_c = m[opt.payload]) !== null && _c !== void 0 ? _c : opt.label;
250
+ }
251
+ if (opt.action === 'lineHeight') {
252
+ if (opt.payload === '1')
253
+ return s.single;
254
+ if (opt.payload === '2')
255
+ return s.double;
256
+ }
257
+ if (opt.action === 'letterSpacing') {
258
+ const m = { normal: s.normal, '-0.05em': s.tight, '0.05em': s.light, '0.1em': s.wide, '0.2em': s.veryWide };
259
+ return (_d = m[opt.payload]) !== null && _d !== void 0 ? _d : opt.label;
260
+ }
261
+ if (opt.action === 'callout') {
262
+ const m = { info: s.info, warning: s.warning, success: s.success, error: s.error };
263
+ return (_e = m[opt.payload]) !== null && _e !== void 0 ? _e : opt.label;
264
+ }
265
+ return opt.label;
266
+ }
267
+ connectedCallback() {
268
+ this.el.addEventListener('mousedown', this.handleHostMouseDown);
269
+ document.addEventListener('click', this.handleDocumentClick, true);
270
+ }
271
+ componentWillLoad() {
272
+ this.items = this.resolveItems(this.variant);
273
+ this.colorPalette = toolbarConfig.COLOR_PALETTE;
274
+ this._tableContextItems = toolbarConfig.TABLE_CONTEXT_ITEMS;
275
+ }
276
+ onVariantChange(v) {
277
+ this.items = this.resolveItems(v);
77
278
  }
78
279
  onEditorChange(next, prev) {
79
280
  prev === null || prev === void 0 ? void 0 : prev.off('transaction', this.onTransaction);
80
281
  next === null || next === void 0 ? void 0 : next.on('transaction', this.onTransaction);
282
+ // The active preset decides which extensions are loaded; re-filter now that
283
+ // we can inspect the editor so a toolbar variant wider than the schema
284
+ // (e.g. `full` on a preset without tables/images) drops the dead buttons.
285
+ this.items = this.resolveItems(this.variant);
81
286
  this.tick++;
82
287
  }
288
+ /**
289
+ * Resolve a variant to the items actually usable in the current editor:
290
+ * hide any control whose extension the active preset didn't load, then
291
+ * collapse the separators left dangling by the removals. Until the editor is
292
+ * wired we can't inspect the schema, so the full variant is shown and
293
+ * re-filtered from `onEditorChange`.
294
+ */
295
+ resolveItems(variant) {
296
+ const base = toolbarConfig.toolbarItems((variant === 'none' ? 'compact' : variant));
297
+ const editor = this.editor;
298
+ if (!editor)
299
+ return base;
300
+ const available = (cmd) => {
301
+ try {
302
+ return typeof editor.can()[cmd] === 'function';
303
+ }
304
+ catch (_a) {
305
+ return true; // never hide a control because a probe threw
306
+ }
307
+ };
308
+ const kept = base.filter((entry) => {
309
+ if (this.isSeparator(entry))
310
+ return true;
311
+ const cmd = CoRichTextToolbar.ITEM_COMMAND[entry.action];
312
+ return cmd ? available(cmd) : true;
313
+ });
314
+ // Drop separators that ended up leading, trailing, or doubled-up.
315
+ const out = [];
316
+ for (const entry of kept) {
317
+ if (this.isSeparator(entry) && (!out.length || this.isSeparator(out[out.length - 1])))
318
+ continue;
319
+ out.push(entry);
320
+ }
321
+ if (out.length && this.isSeparator(out[out.length - 1]))
322
+ out.pop();
323
+ return out;
324
+ }
325
+ onOpenPopoverChange(next, prev) {
326
+ if (!!next === !!prev)
327
+ return;
328
+ this.coPopoverChange.emit({ open: !!next });
329
+ }
83
330
  disconnectedCallback() {
84
331
  var _a;
85
332
  (_a = this.editor) === null || _a === void 0 ? void 0 : _a.off('transaction', this.onTransaction);
333
+ this.el.removeEventListener('mousedown', this.handleHostMouseDown);
334
+ document.removeEventListener('click', this.handleDocumentClick, true);
335
+ }
336
+ updateTableContext() {
337
+ if (!this.editor) {
338
+ if (this.tableContextItems.length)
339
+ this.tableContextItems = [];
340
+ return;
341
+ }
342
+ const isInTable = this.editor.isActive('table');
343
+ if (isInTable && !this.tableContextItems.length) {
344
+ this.tableContextItems = this._tableContextItems;
345
+ }
346
+ else if (!isInTable && this.tableContextItems.length) {
347
+ this.tableContextItems = [];
348
+ }
349
+ }
350
+ isSeparator(entry) {
351
+ return entry.type === 'separator';
86
352
  }
87
353
  isActive(item) {
88
354
  if (!this.editor)
89
355
  return false;
90
- if (item.type !== 'toggle')
91
- return false;
92
356
  try {
93
- return this.editor.isActive(item.action, item.payload);
357
+ if (item.action === 'textAlign')
358
+ return this.editor.isActive({ textAlign: item.payload });
359
+ if (item.action === 'heading')
360
+ return this.editor.isActive('heading', item.payload);
361
+ if (item.action === 'bulletListMenu')
362
+ return this.editor.isActive('bulletList');
363
+ if (item.action === 'orderedListMenu')
364
+ return this.editor.isActive('orderedList');
365
+ if (item.action === 'taskListMenu')
366
+ return this.editor.isActive('taskList');
367
+ if (item.action === 'iframe')
368
+ return this.editor.isActive('iframe');
369
+ if (item.action === 'youtube')
370
+ return this.editor.isActive('youtube');
371
+ if (item.type === 'toggle')
372
+ return this.editor.isActive(item.action);
373
+ }
374
+ catch ( /* ignore */_a) { /* ignore */ }
375
+ return false;
376
+ }
377
+ /** Toolbar icon that reflects current state (e.g. alignment shows the active alignment). */
378
+ getDynamicIcon(item) {
379
+ if (item.action === 'alignment' && this.editor) {
380
+ if (this.editor.isActive({ textAlign: 'center' }))
381
+ return 'text-align-center';
382
+ if (this.editor.isActive({ textAlign: 'right' }))
383
+ return 'text-align-right';
384
+ if (this.editor.isActive({ textAlign: 'justify' }))
385
+ return 'text-align-justify';
386
+ return 'text-align-left';
387
+ }
388
+ return item.icon;
389
+ }
390
+ togglePopover(action) {
391
+ var _a, _b;
392
+ if (this.openPopover === action) {
393
+ this.openPopover = null;
394
+ this.popoverInput = '';
395
+ }
396
+ else {
397
+ this.openPopover = action;
398
+ this.popoverInput = '';
399
+ // Pre-fill URL if editing existing link or iframe
400
+ if (action === 'link' && ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.isActive('link'))) {
401
+ this.popoverInput = this.editor.getAttributes('link').href || '';
402
+ }
403
+ else if (action === 'iframe' && ((_b = this.editor) === null || _b === void 0 ? void 0 : _b.isActive('iframe'))) {
404
+ this.popoverInput = this.editor.getAttributes('iframe').src || '';
405
+ }
406
+ }
407
+ }
408
+ closePopover() {
409
+ this.openPopover = null;
410
+ this.popoverInput = '';
411
+ this.colorHexInput = '';
412
+ this.imagePopoverMode = 'menu';
413
+ this.gridLockedRows = 0;
414
+ this.gridLockedCols = 0;
415
+ this.gridHoverRows = 0;
416
+ this.gridHoverCols = 0;
417
+ }
418
+ submitPopover(action) {
419
+ const editor = this.editor;
420
+ if (!editor || !this.popoverInput.trim()) {
421
+ this.closePopover();
422
+ return;
423
+ }
424
+ const url = this.popoverInput.trim();
425
+ const isEmbed = action === 'youtube' || action === 'iframe';
426
+ if (isEmbed) {
427
+ editor.view.focus();
428
+ }
429
+ const chain = isEmbed
430
+ ? editor.chain()
431
+ : editor.chain().focus();
432
+ switch (action) {
433
+ case 'link':
434
+ chain.setLink({ href: url }).run();
435
+ break;
436
+ case 'image':
437
+ chain.setImage({ src: url }).run();
438
+ break;
439
+ case 'youtube':
440
+ chain.setYoutubeVideo({ src: url }).run();
441
+ break;
442
+ case 'iframe':
443
+ if (editor.isActive('iframe')) {
444
+ chain.updateIframe({ src: url }).run();
445
+ }
446
+ else {
447
+ chain.setIframe({ src: url }).run();
448
+ }
449
+ break;
450
+ }
451
+ this.coAction.emit({ action, payload: url });
452
+ this.closePopover();
453
+ if (isEmbed)
454
+ this.smoothScrollToInserted();
455
+ }
456
+ smoothScrollToInserted() {
457
+ requestAnimationFrame(() => {
458
+ const editor = this.editor;
459
+ if (!editor)
460
+ return;
461
+ const dom = editor.view.dom;
462
+ const selected = dom.querySelector('.ProseMirror-selectednode');
463
+ if (selected) {
464
+ selected.scrollIntoView({ behavior: 'smooth', block: 'center' });
465
+ return;
466
+ }
467
+ const { from } = editor.state.selection;
468
+ const resolved = editor.state.doc.resolve(from);
469
+ if (resolved.nodeBefore) {
470
+ try {
471
+ const nodeDom = editor.view.nodeDOM(from - resolved.nodeBefore.nodeSize);
472
+ if (nodeDom instanceof HTMLElement) {
473
+ nodeDom.scrollIntoView({ behavior: 'smooth', block: 'center' });
474
+ }
475
+ }
476
+ catch ( /* ignore */_a) { /* ignore */ }
477
+ }
478
+ });
479
+ }
480
+ removeLink() {
481
+ const editor = this.editor;
482
+ if (!editor)
483
+ return;
484
+ editor.chain().focus().unsetLink().run();
485
+ this.coAction.emit({ action: 'link', payload: null });
486
+ this.closePopover();
487
+ }
488
+ removeIframe() {
489
+ const editor = this.editor;
490
+ if (!editor)
491
+ return;
492
+ editor.chain().focus().deleteSelection().run();
493
+ this.coAction.emit({ action: 'iframe', payload: null });
494
+ this.closePopover();
495
+ }
496
+ selectColor(action, color) {
497
+ const editor = this.editor;
498
+ if (!editor)
499
+ return;
500
+ const chain = editor.chain().focus();
501
+ if (action === 'textColor') {
502
+ chain.setColor(color).run();
503
+ }
504
+ else if (action === 'highlight') {
505
+ chain.setHighlight({ color }).run();
506
+ }
507
+ this.coAction.emit({ action, payload: color });
508
+ this.closePopover();
509
+ }
510
+ clearColor(action) {
511
+ const editor = this.editor;
512
+ if (!editor)
513
+ return;
514
+ const chain = editor.chain().focus();
515
+ if (action === 'textColor') {
516
+ chain.unsetColor().run();
517
+ }
518
+ else if (action === 'highlight') {
519
+ chain.unsetHighlight().run();
94
520
  }
95
- catch (_a) {
521
+ this.coAction.emit({ action, payload: null });
522
+ this.closePopover();
523
+ }
524
+ /**
525
+ * Whether an action is allowed in the current selection. Beyond undo/redo,
526
+ * this disables commands that would produce content the editor can't
527
+ * represent — most importantly the Table button while the cursor is already
528
+ * inside a table, since nested tables are invalid and corrupt the document
529
+ * when it's reloaded (tiptap throws "Invalid HTML content" on such markup).
530
+ *
531
+ * Each command is probed through tiptap's `can()` dry-run, so a button also
532
+ * disables automatically anywhere ProseMirror's schema would reject it (e.g.
533
+ * marks inside a code block). The probe defaults to enabled on any error or
534
+ * unknown command so a quirk never makes a control silently disappear.
535
+ */
536
+ /**
537
+ * Whether an action can run *right now*. Extension availability is already
538
+ * handled by `resolveItems` (unavailable controls aren't rendered), so this
539
+ * only covers the dynamic, cursor-dependent cases: the hard "no table inside
540
+ * a table" rule, and position validity (e.g. marks inside a code block) via
541
+ * tiptap's `can()` dry-run. A thrown dry-run defaults to enabled so a quirk
542
+ * never makes a visible control silently lock up.
543
+ */
544
+ canRun(item) {
545
+ if (!this.editor || this.disabled)
96
546
  return false;
547
+ const editor = this.editor;
548
+ const can = editor.can();
549
+ const probe = (name, ...args) => {
550
+ if (typeof can[name] !== 'function')
551
+ return true;
552
+ try {
553
+ return can[name](...args);
554
+ }
555
+ catch (_a) {
556
+ return true;
557
+ }
558
+ };
559
+ switch (item.action) {
560
+ case 'undo': return probe('undo');
561
+ case 'redo': return probe('redo');
562
+ // Hard rule: a table can never nest inside another table.
563
+ case 'table': return !editor.isActive('table');
564
+ case 'bold': return probe('toggleBold');
565
+ case 'italic': return probe('toggleItalic');
566
+ case 'underline': return probe('toggleUnderline');
567
+ case 'strike': return probe('toggleStrike');
568
+ case 'code': return probe('toggleCode');
569
+ case 'blockquote': return probe('toggleBlockquote');
570
+ case 'codeBlock': return probe('toggleCodeBlock');
571
+ case 'horizontalRule': return probe('setHorizontalRule');
572
+ case 'bulletList':
573
+ case 'bulletListMenu': return probe('toggleBulletList');
574
+ case 'orderedList':
575
+ case 'orderedListMenu': return probe('toggleOrderedList');
576
+ case 'taskListMenu': return probe('toggleTaskList');
577
+ default: return true;
578
+ }
579
+ }
580
+ getDropdownLabel(item) {
581
+ if (!this.editor)
582
+ return null;
583
+ const s = this.s;
584
+ if (item.action === 'headingStyle') {
585
+ if (this.editor.isActive('heading', { level: 1 }))
586
+ return s.title;
587
+ if (this.editor.isActive('heading', { level: 2 }))
588
+ return s.subtitle;
589
+ if (this.editor.isActive('heading', { level: 3 }))
590
+ return s.headingAbbr3;
591
+ return s.normal;
97
592
  }
593
+ if (item.action === 'fontSize') {
594
+ const attrs = this.editor.getAttributes('textStyle');
595
+ const fs = attrs === null || attrs === void 0 ? void 0 : attrs.fontSize;
596
+ return fs ? fs.replace('px', '') : '16';
597
+ }
598
+ if (item.action === 'fontFamily') {
599
+ const attrs = this.editor.getAttributes('textStyle');
600
+ const ff = attrs === null || attrs === void 0 ? void 0 : attrs.fontFamily;
601
+ if (!ff)
602
+ return 'Sans-serif';
603
+ const match = ff.replace(/['"]/g, '').split(',')[0].trim();
604
+ return match.length > 10 ? match.substring(0, 10) + '…' : match;
605
+ }
606
+ return null;
607
+ }
608
+ getActiveColor(action) {
609
+ var _a, _b;
610
+ if (!this.editor)
611
+ return action === 'textColor' ? '#000000' : 'transparent';
612
+ const attrs = this.editor.getAttributes('textStyle');
613
+ if (action === 'textColor')
614
+ return (_a = attrs === null || attrs === void 0 ? void 0 : attrs.color) !== null && _a !== void 0 ? _a : '#000000';
615
+ const hlAttrs = this.editor.getAttributes('highlight');
616
+ return (_b = hlAttrs === null || hlAttrs === void 0 ? void 0 : hlAttrs.color) !== null && _b !== void 0 ? _b : 'transparent';
98
617
  }
99
- /** Accept only fetchable URL schemes from the prompt (no javascript: etc.). */
100
- static safeUrl(raw, schemes) {
618
+ renderButton(item) {
101
619
  var _a, _b;
102
- const url = raw === null || raw === void 0 ? void 0 : raw.trim();
103
- if (!url)
620
+ const isPopoverType = item.type === 'popover' || item.type === 'dropdown' || item.type === 'color' || item.type === 'grid';
621
+ const isOpen = this.openPopover === item.action;
622
+ const isLabelDropdown = item.action === 'headingStyle' || item.action === 'fontSize' || item.action === 'fontFamily';
623
+ const dropdownLabel = isLabelDropdown ? this.getDropdownLabel(item) : null;
624
+ // Alignment: render as icon-only button group (Google Docs style)
625
+ if (item.action === 'alignment' && ((_a = item.options) === null || _a === void 0 ? void 0 : _a.length)) {
626
+ return this.renderAlignmentGroup(item);
627
+ }
628
+ // Split button: main area toggles, caret opens the marker-style grid.
629
+ if (item.type === 'listpicker') {
630
+ const active = this.isActive(item);
631
+ const label = this.tItem(item);
632
+ return (index.h("div", { class: "co-rich-text-toolbar__split-wrap", key: item.action }, index.h("button", { type: "button", class: {
633
+ 'co-rich-text-toolbar__btn': true,
634
+ 'co-rich-text-toolbar__split-main': true,
635
+ 'co-rich-text-toolbar__btn--active': active,
636
+ }, "data-tooltip": label, "aria-label": label, "aria-pressed": String(active), disabled: !this.canRun(item), onMouseDown: (e) => e.preventDefault(), onClick: () => this.run(item), part: "button" }, index.h("co-icon", { name: item.icon, size: 18 })), index.h("button", { type: "button", class: {
637
+ 'co-rich-text-toolbar__split-caret': true,
638
+ 'co-rich-text-toolbar__split-caret--open': isOpen,
639
+ }, "data-tooltip": `${this.s.stylesPrefix} ${label}`, "aria-label": `${this.s.stylesPrefix} ${label}`, "aria-expanded": String(isOpen), disabled: !this.canRun(item), onMouseDown: (e) => e.preventDefault(), onClick: () => this.togglePopover(item.action) }, index.h("co-icon", { name: "caret-down", size: 10 })), isOpen && this.renderListPicker(item)));
640
+ }
641
+ // Color buttons: render with color indicator bar
642
+ if (item.type === 'color') {
643
+ return this.renderColorButton(item);
644
+ }
645
+ const itemLabel = this.tItem(item);
646
+ return (index.h("div", { class: "co-rich-text-toolbar__btn-wrap", key: `${item.action}-${JSON.stringify((_b = item.payload) !== null && _b !== void 0 ? _b : '')}` }, isLabelDropdown ? (index.h("button", { type: "button", class: {
647
+ 'co-rich-text-toolbar__select-btn': true,
648
+ 'co-rich-text-toolbar__select-btn--open': isOpen,
649
+ }, "data-tooltip": itemLabel, "aria-label": itemLabel, "aria-expanded": String(isOpen), disabled: !this.canRun(item), onMouseDown: (e) => e.preventDefault(), onClick: () => this.run(item), part: "button" }, index.h("span", { class: "co-rich-text-toolbar__select-label" }, dropdownLabel), index.h("co-icon", { name: "caret-down", size: 10 }))) : (index.h("button", { type: "button", class: {
650
+ 'co-rich-text-toolbar__btn': true,
651
+ 'co-rich-text-toolbar__btn--active': this.isActive(item) || isOpen,
652
+ }, "data-tooltip": itemLabel, "aria-label": itemLabel, "aria-pressed": item.type === 'toggle' ? String(this.isActive(item)) : undefined, "aria-expanded": isPopoverType ? String(isOpen) : undefined, disabled: !this.canRun(item), onMouseDown: (e) => e.preventDefault(), onClick: () => this.run(item), part: "button" }, index.h("co-icon", { name: this.getDynamicIcon(item), size: 18 }))), isOpen && item.type === 'popover' && this.renderInputPopover(item), isOpen && item.type === 'dropdown' && this.renderDropdown(item), isOpen && item.type === 'grid' && this.renderTableGrid()));
653
+ }
654
+ renderAlignmentGroup(item) {
655
+ const s = this.s;
656
+ const alignLabels = {
657
+ left: s.alignLeft, center: s.center, right: s.alignRight, justify: s.justify,
658
+ };
659
+ return (index.h("div", { class: "co-rich-text-toolbar__align-group", key: item.action }, item.options.map((opt) => {
660
+ var _a, _b, _c;
661
+ const active = (_b = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.isActive({ textAlign: opt.payload })) !== null && _b !== void 0 ? _b : false;
662
+ const label = (_c = alignLabels[opt.payload]) !== null && _c !== void 0 ? _c : opt.label;
663
+ return (index.h("button", { type: "button", class: {
664
+ 'co-rich-text-toolbar__btn': true,
665
+ 'co-rich-text-toolbar__btn--active': active,
666
+ }, "data-tooltip": label, "aria-label": label, "aria-pressed": String(active), disabled: !this.editor || this.disabled, onMouseDown: (e) => e.preventDefault(), onClick: () => {
667
+ if (!this.editor)
668
+ return;
669
+ this.editor.chain().focus().setTextAlign(opt.payload).run();
670
+ this.coAction.emit({ action: 'textAlign', payload: opt.payload });
671
+ }, part: "button" }, index.h("co-icon", { name: opt.icon, size: 18 })));
672
+ })));
673
+ }
674
+ renderColorButton(item) {
675
+ const isOpen = this.openPopover === item.action;
676
+ const itemLabel = this.tItem(item);
677
+ const activeColor = this.getActiveColor(item.action);
678
+ const isTextColor = item.action === 'textColor';
679
+ return (index.h("div", { class: "co-rich-text-toolbar__btn-wrap", key: item.action }, index.h("button", { type: "button", class: {
680
+ 'co-rich-text-toolbar__btn': true,
681
+ 'co-rich-text-toolbar__btn--active': isOpen,
682
+ }, "data-tooltip": itemLabel, "aria-label": itemLabel, "aria-expanded": String(isOpen), disabled: !this.canRun(item), onMouseDown: (e) => e.preventDefault(), onClick: () => this.run(item), part: "button" }, isTextColor ? (index.h("span", { class: "co-rich-text-toolbar__color-indicator" }, index.h("span", { class: "co-rich-text-toolbar__color-letter" }, "A"), index.h("span", { class: "co-rich-text-toolbar__color-bar", style: { background: activeColor } }))) : (index.h("span", { class: "co-rich-text-toolbar__color-indicator" }, index.h("co-icon", { name: item.icon, size: 16 }), index.h("span", { class: "co-rich-text-toolbar__color-bar", style: { background: activeColor === 'transparent' ? '#cccccc' : activeColor } })))), isOpen && this.renderColorPicker(item)));
683
+ }
684
+ /** Visual grid of list-marker styles (Google-Docs style). */
685
+ renderListPicker(item) {
686
+ var _a, _b;
687
+ if (!((_a = item.options) === null || _a === void 0 ? void 0 : _a.length))
104
688
  return null;
105
- const scheme = (_b = (_a = /^([a-z][a-z0-9+.-]*):/i.exec(url)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.toLowerCase();
106
- if (!scheme)
107
- return url; // relative URL
108
- return schemes.includes(scheme) ? url : null;
689
+ if (item.action === 'taskListMenu')
690
+ return this.renderTaskListPicker(item);
691
+ const isOrdered = item.action === 'orderedListMenu';
692
+ const activeStyle = this.editor
693
+ ? (_b = this.editor.getAttributes(isOrdered ? 'orderedList' : 'bulletList')) === null || _b === void 0 ? void 0 : _b.listStyleType
694
+ : null;
695
+ return (index.h("div", { class: "co-rich-text-toolbar__listpicker", onMouseDown: (e) => { e.preventDefault(); e.stopPropagation(); } }, item.options.map((opt) => {
696
+ const isActive = activeStyle === opt.payload;
697
+ return (index.h("button", { type: "button", class: {
698
+ 'co-rich-text-toolbar__listpicker-item': true,
699
+ 'co-rich-text-toolbar__listpicker-item--active': isActive,
700
+ }, "data-tooltip": opt.label, onMouseDown: (e) => e.preventDefault(), onClick: () => this.applyListStyle(isOrdered, opt.payload) }, index.h("ol", { class: {
701
+ 'co-rich-text-toolbar__listpicker-preview': true,
702
+ 'co-rich-text-toolbar__listpicker-preview--ordered': isOrdered,
703
+ }, style: { 'list-style-type': opt.payload } }, index.h("li", null), index.h("li", null), index.h("li", null))));
704
+ })));
705
+ }
706
+ /** Visual picker for task-list variants (checkboxes; strike vs plain). */
707
+ renderTaskListPicker(item) {
708
+ var _a, _b;
709
+ const activeVariant = this.editor && this.editor.isActive('taskList')
710
+ ? ((_b = (_a = this.editor.getAttributes('taskList')) === null || _a === void 0 ? void 0 : _a.variant) !== null && _b !== void 0 ? _b : 'strike')
711
+ : null;
712
+ return (index.h("div", { class: "co-rich-text-toolbar__listpicker co-rich-text-toolbar__listpicker--task", onMouseDown: (e) => { e.preventDefault(); e.stopPropagation(); } }, item.options.map((opt) => {
713
+ const variant = opt.payload;
714
+ const isActive = activeVariant === variant;
715
+ return (index.h("button", { type: "button", class: {
716
+ 'co-rich-text-toolbar__listpicker-item': true,
717
+ 'co-rich-text-toolbar__listpicker-item--task': true,
718
+ 'co-rich-text-toolbar__listpicker-item--active': isActive,
719
+ }, "data-tooltip": opt.label, onMouseDown: (e) => e.preventDefault(), onClick: () => this.applyTaskStyle(variant) }, index.h("span", { class: "co-rich-text-toolbar__taskpreview", "data-variant": variant }, index.h("span", { class: "co-rich-text-toolbar__taskpreview-row" }, index.h("span", { class: "co-rich-text-toolbar__taskpreview-box" }), index.h("span", { class: "co-rich-text-toolbar__taskpreview-line" })), index.h("span", { class: "co-rich-text-toolbar__taskpreview-row co-rich-text-toolbar__taskpreview-row--checked" }, index.h("span", { class: "co-rich-text-toolbar__taskpreview-box co-rich-text-toolbar__taskpreview-box--checked" }), index.h("span", { class: "co-rich-text-toolbar__taskpreview-line" })))));
720
+ })));
109
721
  }
110
- toggleLink() {
722
+ applyListStyle(isOrdered, style) {
111
723
  const editor = this.editor;
112
724
  if (!editor)
113
725
  return;
114
726
  const chain = editor.chain().focus();
115
- if (editor.isActive('link')) {
116
- chain.unsetLink().run();
727
+ // Ensure the right list type is active, then apply the marker style.
728
+ if (isOrdered) {
729
+ if (!editor.isActive('orderedList'))
730
+ chain.toggleOrderedList();
731
+ }
732
+ else {
733
+ if (!editor.isActive('bulletList'))
734
+ chain.toggleBulletList();
735
+ }
736
+ chain.setListStyleType(style).run();
737
+ this.coAction.emit({ action: isOrdered ? 'orderedStyle' : 'bulletStyle', payload: style });
738
+ this.closePopover();
739
+ }
740
+ applyTaskStyle(variant) {
741
+ const editor = this.editor;
742
+ if (!editor)
743
+ return;
744
+ const chain = editor.chain().focus();
745
+ if (!editor.isActive('taskList'))
746
+ chain.toggleTaskList();
747
+ chain.setTaskListVariant(variant).run();
748
+ this.coAction.emit({ action: 'taskStyle', payload: variant });
749
+ this.closePopover();
750
+ }
751
+ renderInputPopover(item) {
752
+ var _a, _b;
753
+ if (item.action === 'image')
754
+ return this.renderImagePopover();
755
+ const isLink = item.action === 'link';
756
+ const isIframe = item.action === 'iframe';
757
+ const hasExisting = (isLink && ((_a = this.editor) === null || _a === void 0 ? void 0 : _a.isActive('link'))) || (isIframe && ((_b = this.editor) === null || _b === void 0 ? void 0 : _b.isActive('iframe')));
758
+ const placeholder = item.action === 'iframe'
759
+ ? this.s.iframeUrlPlaceholder
760
+ : item.action === 'link'
761
+ ? 'https://...'
762
+ : this.s.youtubeUrlPlaceholder;
763
+ return (index.h("div", { class: "co-rich-text-toolbar__popover", onMouseDown: (e) => {
764
+ if (e.target.tagName !== 'INPUT')
765
+ e.preventDefault();
766
+ e.stopPropagation();
767
+ } }, index.h("input", { type: "url", class: "co-rich-text-toolbar__popover-input", placeholder: placeholder, value: this.popoverInput, onInput: (e) => { this.popoverInput = e.target.value; }, onKeyDown: (e) => {
768
+ if (e.key === 'Enter')
769
+ this.submitPopover(item.action);
770
+ if (e.key === 'Escape')
771
+ this.closePopover();
772
+ }, ref: (el) => el && setTimeout(() => el.focus(), 0) }), index.h("div", { class: "co-rich-text-toolbar__popover-actions" }, index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-btn co-rich-text-toolbar__popover-btn--primary", onMouseDown: (e) => e.preventDefault(), onClick: () => this.submitPopover(item.action) }, this.s.add), hasExisting && (index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-btn co-rich-text-toolbar__popover-btn--danger", onMouseDown: (e) => e.preventDefault(), onClick: () => isLink ? this.removeLink() : this.removeIframe() }, this.s.remove)), index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-btn", onMouseDown: (e) => e.preventDefault(), onClick: () => this.closePopover() }, this.s.cancel))));
773
+ }
774
+ renderImagePopover() {
775
+ if (this.imagePopoverMode === 'url') {
776
+ return (index.h("div", { class: "co-rich-text-toolbar__popover", onMouseDown: (e) => {
777
+ if (e.target.tagName !== 'INPUT')
778
+ e.preventDefault();
779
+ e.stopPropagation();
780
+ } }, index.h("input", { type: "url", class: "co-rich-text-toolbar__popover-input", placeholder: this.s.imageUrlPlaceholder, value: this.popoverInput, onInput: (e) => { this.popoverInput = e.target.value; }, onKeyDown: (e) => {
781
+ if (e.key === 'Enter')
782
+ this.submitPopover('image');
783
+ if (e.key === 'Escape') {
784
+ this.imagePopoverMode = 'menu';
785
+ }
786
+ }, ref: (el) => el && setTimeout(() => el.focus(), 0) }), index.h("div", { class: "co-rich-text-toolbar__popover-actions" }, index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-btn co-rich-text-toolbar__popover-btn--primary", onMouseDown: (e) => e.preventDefault(), onClick: () => this.submitPopover('image') }, this.s.add), index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-btn", onMouseDown: (e) => e.preventDefault(), onClick: () => { this.imagePopoverMode = 'menu'; } }, this.s.back))));
787
+ }
788
+ return (index.h("div", { class: "co-rich-text-toolbar__popover", onMouseDown: (e) => { e.preventDefault(); e.stopPropagation(); } }, index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-option", onMouseDown: (e) => e.preventDefault(), onClick: () => this.triggerImageFileUpload() }, index.h("co-icon", { name: "upload-simple", size: 16 }), index.h("span", null, this.s.uploadFromComputer)), index.h("button", { type: "button", class: "co-rich-text-toolbar__popover-option", onMouseDown: (e) => e.preventDefault(), onClick: () => { this.imagePopoverMode = 'url'; } }, index.h("co-icon", { name: "link", size: 16 }), index.h("span", null, this.s.viaUrl))));
789
+ }
790
+ triggerImageFileUpload() {
791
+ const input = document.createElement('input');
792
+ input.type = 'file';
793
+ input.accept = 'image/*';
794
+ input.onchange = () => {
795
+ var _a;
796
+ const file = (_a = input.files) === null || _a === void 0 ? void 0 : _a[0];
797
+ if (!file || !this.editor)
798
+ return;
799
+ const reader = new FileReader();
800
+ reader.onload = () => {
801
+ const base64 = reader.result;
802
+ this.editor.chain().focus().setImage({ src: base64 }).run();
803
+ if (this.imageUpload) {
804
+ this.imageUpload(file).then((result) => {
805
+ var _a;
806
+ const newAttrs = typeof result === 'string'
807
+ ? { src: result }
808
+ : { src: result.src, dataFileId: (_a = result.fileId) !== null && _a !== void 0 ? _a : null };
809
+ const { state } = this.editor.view;
810
+ state.doc.descendants((node, pos) => {
811
+ if (node.type.name === 'image' && node.attrs.src === base64) {
812
+ const tr = this.editor.view.state.tr.setNodeMarkup(pos, undefined, Object.assign(Object.assign({}, node.attrs), newAttrs));
813
+ this.editor.view.dispatch(tr);
814
+ return false;
815
+ }
816
+ });
817
+ }).catch(() => { });
818
+ }
819
+ this.coAction.emit({ action: 'image', payload: base64 });
820
+ };
821
+ reader.readAsDataURL(file);
822
+ this.closePopover();
823
+ };
824
+ input.click();
825
+ }
826
+ isDropdownOptionActive(opt) {
827
+ var _a, _b, _c;
828
+ if (!this.editor)
829
+ return false;
830
+ try {
831
+ if (opt.action === 'textAlign')
832
+ return this.editor.isActive({ textAlign: opt.payload });
833
+ if (opt.action === 'lineHeight') {
834
+ const attrs = this.editor.getAttributes('paragraph');
835
+ return ((_a = attrs === null || attrs === void 0 ? void 0 : attrs.lineHeight) !== null && _a !== void 0 ? _a : null) === ((_b = opt.payload) !== null && _b !== void 0 ? _b : null);
836
+ }
837
+ if (opt.action === 'letterSpacing') {
838
+ const attrs = this.editor.getAttributes('textStyle');
839
+ const cur = (_c = attrs === null || attrs === void 0 ? void 0 : attrs.letterSpacing) !== null && _c !== void 0 ? _c : null;
840
+ if (opt.payload === 'normal')
841
+ return cur === null || cur === 'normal';
842
+ return cur === opt.payload;
843
+ }
844
+ if (opt.action === 'heading')
845
+ return this.editor.isActive('heading', opt.payload);
846
+ if (opt.action === 'paragraph')
847
+ return !this.editor.isActive('heading');
848
+ }
849
+ catch ( /* ignore */_d) { /* ignore */ }
850
+ return false;
851
+ }
852
+ /** Apply a free-form value typed into a dropdown's custom input. */
853
+ applyDropdownCustom(action, raw) {
854
+ const editor = this.editor;
855
+ const value = raw.trim();
856
+ if (!editor || !value)
117
857
  return;
858
+ const chain = editor.chain().focus();
859
+ if (action === 'fontSize') {
860
+ const n = parseFloat(value);
861
+ if (!(n > 0))
862
+ return;
863
+ chain.setFontSize(/^\d+(\.\d+)?$/.test(value) ? `${n}px` : value).run();
118
864
  }
119
- const raw = typeof window !== 'undefined' ? window.prompt('Enter URL') : null;
120
- const url = CoRichTextToolbar.safeUrl(raw, ['http', 'https', 'mailto', 'tel']);
121
- if (url)
122
- chain.setLink({ href: url }).run();
865
+ else if (action === 'lineSpacing') {
866
+ chain.setLineHeight(value).run();
867
+ }
868
+ else if (action === 'letterSpacing') {
869
+ if (value === 'normal')
870
+ chain.unsetLetterSpacing().run();
871
+ else
872
+ chain.setLetterSpacing(value).run();
873
+ }
874
+ this.closePopover();
123
875
  }
124
- insertImage() {
876
+ renderDropdown(item) {
877
+ var _a;
878
+ if (!((_a = item.options) === null || _a === void 0 ? void 0 : _a.length))
879
+ return null;
880
+ const isFontSize = item.action === 'fontSize';
881
+ const isFontFamily = item.action === 'fontFamily';
882
+ const isHeadingStyle = item.action === 'headingStyle';
883
+ const isAlignment = item.action === 'alignment';
884
+ const isLineSpacing = item.action === 'lineSpacing';
885
+ const isLetterSpacing = item.action === 'letterSpacing';
886
+ const showCheckmarks = isAlignment || isLineSpacing || isLetterSpacing || isHeadingStyle;
887
+ const customInput = isFontSize
888
+ ? { placeholder: this.s.sizePlaceholder }
889
+ : isLineSpacing
890
+ ? { placeholder: this.s.lineSpacingPlaceholder }
891
+ : isLetterSpacing
892
+ ? { placeholder: this.s.letterSpacingPlaceholder }
893
+ : null;
894
+ return (index.h("div", { class: "co-rich-text-toolbar__dropdown", onMouseDown: (e) => { e.preventDefault(); e.stopPropagation(); } }, customInput && (index.h("div", { class: "co-rich-text-toolbar__dropdown-input-wrap" }, index.h("input", { type: "text", class: "co-rich-text-toolbar__dropdown-input", placeholder: customInput.placeholder, onMouseDown: (e) => e.stopPropagation(), onKeyDown: (e) => {
895
+ if (e.key === 'Enter') {
896
+ this.applyDropdownCustom(item.action, e.target.value);
897
+ e.target.value = '';
898
+ }
899
+ else if (e.key === 'Escape') {
900
+ this.closePopover();
901
+ }
902
+ } }))), item.options.map((opt) => {
903
+ var _a;
904
+ if (opt.action === 'separator') {
905
+ return (index.h("div", { class: "co-rich-text-toolbar__dropdown-sep-label" }, index.h("span", null, this.tOpt(opt))));
906
+ }
907
+ const style = {};
908
+ const active = showCheckmarks && this.isDropdownOptionActive(opt);
909
+ if (isHeadingStyle) {
910
+ if (opt.action === 'heading') {
911
+ const lvl = (_a = opt.payload) === null || _a === void 0 ? void 0 : _a.level;
912
+ style.fontSize = lvl === 1 ? '20px' : lvl === 2 ? '16px' : '14px';
913
+ style.fontWeight = '600';
914
+ }
915
+ }
916
+ if (isFontFamily && opt.payload) {
917
+ style.fontFamily = opt.payload;
918
+ }
919
+ return (index.h("button", { type: "button", class: {
920
+ 'co-rich-text-toolbar__dropdown-item': true,
921
+ 'co-rich-text-toolbar__dropdown-item--active': active,
922
+ }, style: style, onMouseDown: (e) => e.preventDefault(), onClick: () => this.handleDropdownSelect(item, opt) }, showCheckmarks && (index.h("span", { class: "co-rich-text-toolbar__dropdown-check" }, active ? index.h("co-icon", { name: "check", size: 14 }) : null)), opt.icon && index.h("co-icon", { name: opt.icon, size: 16 }), index.h("span", null, this.tOpt(opt))));
923
+ })));
924
+ }
925
+ handleDropdownSelect(item, opt) {
125
926
  const editor = this.editor;
126
- if (!(editor === null || editor === void 0 ? void 0 : editor.schema.nodes.image))
927
+ if (!editor)
127
928
  return;
128
- const raw = typeof window !== 'undefined' ? window.prompt('Image URL') : null;
129
- const url = CoRichTextToolbar.safeUrl(raw, ['http', 'https']);
130
- if (url)
131
- editor.chain().focus().setImage({ src: url }).run();
132
- }
133
- /** Hide buttons whose node/mark isn't in the editor's schema — e.g. the
134
- * image button on the `full` toolbar with a preset that has no image node
135
- * (clicking it would call an unregistered command and throw). */
136
- supportedBySchema(item) {
929
+ const chain = editor.chain().focus();
930
+ switch (opt.action) {
931
+ case 'heading':
932
+ chain.toggleHeading(opt.payload).run();
933
+ break;
934
+ case 'paragraph':
935
+ chain.setParagraph().run();
936
+ break;
937
+ case 'fontSize':
938
+ chain.setFontSize(opt.payload).run();
939
+ break;
940
+ case 'fontFamily':
941
+ chain.setFontFamily(opt.payload).run();
942
+ break;
943
+ case 'textAlign':
944
+ chain.setTextAlign(opt.payload).run();
945
+ break;
946
+ case 'lineHeight':
947
+ chain.setLineHeight(opt.payload).run();
948
+ break;
949
+ case 'letterSpacing':
950
+ if (opt.payload === 'normal')
951
+ chain.unsetLetterSpacing().run();
952
+ else
953
+ chain.setLetterSpacing(opt.payload).run();
954
+ break;
955
+ case 'callout':
956
+ chain.insertCallout(opt.payload).run();
957
+ break;
958
+ }
959
+ this.coAction.emit({ action: opt.action, payload: opt.payload });
960
+ this.closePopover();
961
+ }
962
+ renderTableGrid() {
963
+ return (index.h("div", { class: "co-rich-text-toolbar__table-picker", onMouseDown: (e) => {
964
+ if (e.target.tagName !== 'INPUT')
965
+ e.preventDefault();
966
+ e.stopPropagation();
967
+ } }, index.h("div", { class: "co-rich-text-toolbar__table-header" }, index.h("co-icon", { name: "table", size: 16 }), index.h("span", { class: "co-rich-text-toolbar__table-title" }, this.s.configureTable), index.h("button", { type: "button", class: "co-rich-text-toolbar__table-close", onMouseDown: (e) => e.preventDefault(), onClick: () => this.closePopover() }, index.h("co-icon", { name: "x", size: 16 }))), index.h("div", { class: "co-rich-text-toolbar__table-tabs" }, index.h("button", { type: "button", class: { 'co-rich-text-toolbar__table-tab': true, 'co-rich-text-toolbar__table-tab--active': this.tableTab === 'grid' }, onMouseDown: (e) => e.preventDefault(), onClick: () => { this.tableTab = 'grid'; } }, this.s.grid), index.h("button", { type: "button", class: { 'co-rich-text-toolbar__table-tab': true, 'co-rich-text-toolbar__table-tab--active': this.tableTab === 'manual' }, onMouseDown: (e) => e.preventDefault(), onClick: () => { this.tableTab = 'manual'; } }, this.s.manual)), this.tableTab === 'grid' && this.renderGridTab(), this.tableTab === 'manual' && this.renderManualTab(), index.h("label", { class: "co-rich-text-toolbar__table-check" }, index.h("input", { type: "checkbox", checked: this.tableWithHeader, onChange: (e) => { this.tableWithHeader = e.target.checked; } }), index.h("span", null, this.s.includeHeaderRow)), this.tableTab === 'manual' && (index.h("div", { class: "co-rich-text-toolbar__table-actions" }, index.h("button", { type: "button", class: "co-rich-text-toolbar__table-btn co-rich-text-toolbar__table-btn--secondary", onMouseDown: (e) => e.preventDefault(), onClick: () => this.closePopover() }, this.s.cancel), index.h("button", { type: "button", class: "co-rich-text-toolbar__table-btn co-rich-text-toolbar__table-btn--primary", onMouseDown: (e) => e.preventDefault(), onClick: () => this.insertTable(this.tableManualRows, this.tableManualCols) }, this.s.createTable)))));
968
+ }
969
+ renderGridTab() {
970
+ const ROWS = 8;
971
+ const COLS = 8;
972
+ const cells = [];
973
+ const isLocked = this.gridLockedRows > 0;
974
+ const displayRows = isLocked ? this.gridLockedRows : this.gridHoverRows;
975
+ const displayCols = isLocked ? this.gridLockedCols : this.gridHoverCols;
976
+ for (let r = 1; r <= ROWS; r++) {
977
+ for (let c = 1; c <= COLS; c++) {
978
+ const isHighlighted = r <= displayRows && c <= displayCols;
979
+ cells.push(index.h("div", { class: { 'co-rich-text-toolbar__grid-cell': true, 'co-rich-text-toolbar__grid-cell--active': isHighlighted }, onMouseEnter: () => {
980
+ if (!isLocked) {
981
+ this.gridHoverRows = r;
982
+ this.gridHoverCols = c;
983
+ }
984
+ }, onMouseDown: (e) => e.preventDefault(), onClick: () => { this.gridLockedRows = r; this.gridLockedCols = c; } }));
985
+ }
986
+ }
987
+ const s = this.s;
988
+ const label = displayRows > 0
989
+ ? `${displayCols} × ${displayRows} (${displayCols} ${s.columns.toLowerCase()} × ${displayRows} ${s.rows.toLowerCase()})`
990
+ : s.selectSize;
991
+ return (index.h("div", { class: "co-rich-text-toolbar__grid-container", onMouseLeave: () => {
992
+ if (!isLocked) {
993
+ this.gridHoverRows = 0;
994
+ this.gridHoverCols = 0;
995
+ }
996
+ } }, index.h("div", { class: "co-rich-text-toolbar__grid", style: { 'grid-template-columns': `repeat(${COLS}, 1fr)` } }, cells), index.h("div", { class: "co-rich-text-toolbar__grid-footer" }, index.h("span", { class: "co-rich-text-toolbar__grid-label" }, label), isLocked && (index.h("button", { type: "button", class: "co-rich-text-toolbar__grid-reset", onMouseDown: (e) => e.preventDefault(), onClick: () => { this.gridLockedRows = 0; this.gridLockedCols = 0; this.gridHoverRows = 0; this.gridHoverCols = 0; } }, s.changeSelection))), isLocked && (index.h("div", { class: "co-rich-text-toolbar__table-actions" }, index.h("button", { type: "button", class: "co-rich-text-toolbar__table-btn co-rich-text-toolbar__table-btn--secondary", onMouseDown: (e) => e.preventDefault(), onClick: () => this.closePopover() }, s.cancel), index.h("button", { type: "button", class: "co-rich-text-toolbar__table-btn co-rich-text-toolbar__table-btn--primary", onMouseDown: (e) => e.preventDefault(), onClick: () => this.insertTable(this.gridLockedRows, this.gridLockedCols) }, s.createTable)))));
997
+ }
998
+ renderManualTab() {
999
+ return (index.h("div", { class: "co-rich-text-toolbar__table-manual" }, index.h("div", { class: "co-rich-text-toolbar__table-field" }, index.h("label", null, this.s.columns, ":"), index.h("input", { type: "number", min: "1", max: "20", value: this.tableManualCols, onInput: (e) => { this.tableManualCols = Math.max(1, parseInt(e.target.value) || 1); } })), index.h("div", { class: "co-rich-text-toolbar__table-field" }, index.h("label", null, this.s.rows, ":"), index.h("input", { type: "number", min: "1", max: "50", value: this.tableManualRows, onInput: (e) => { this.tableManualRows = Math.max(1, parseInt(e.target.value) || 1); } }))));
1000
+ }
1001
+ insertTable(rows, cols) {
137
1002
  const editor = this.editor;
138
1003
  if (!editor)
139
- return true; // optimistic until the editor is wired
140
- const { nodes, marks } = editor.schema;
141
- switch (item.action) {
142
- case 'image': return !!nodes.image;
143
- case 'bulletList': return !!nodes.bulletList;
144
- case 'orderedList': return !!nodes.orderedList;
145
- case 'blockquote': return !!nodes.blockquote;
146
- case 'heading': return !!nodes.heading;
147
- case 'code': return !!marks.code;
148
- case 'underline': return !!marks.underline;
149
- case 'strike': return !!marks.strike;
150
- case 'link': return !!marks.link;
151
- default: return true;
1004
+ return;
1005
+ // Defense in depth: never nest a table inside a table cell. The toolbar
1006
+ // button is already disabled in this case, but guard the insert itself so
1007
+ // no other caller can produce the invalid markup.
1008
+ if (editor.isActive('table')) {
1009
+ this.closePopover();
1010
+ return;
1011
+ }
1012
+ const withHeader = this.tableWithHeader;
1013
+ // Build the table node by hand so a header row can ship with placeholder
1014
+ // titles ("Header 1", "Header 2", …) instead of empty header cells. Tiptap's
1015
+ // insertTable() only toggles header cells on, it can't seed their content.
1016
+ const emptyCell = () => ({ type: 'tableCell', content: [{ type: 'paragraph' }] });
1017
+ const headerCell = (i) => ({
1018
+ type: 'tableHeader',
1019
+ content: [{ type: 'paragraph', content: [{ type: 'text', text: `${this.s.tableHeaderLabel} ${i + 1}` }] }],
1020
+ });
1021
+ const content = [];
1022
+ if (withHeader) {
1023
+ content.push({
1024
+ type: 'tableRow',
1025
+ content: Array.from({ length: cols }, (_, i) => headerCell(i)),
1026
+ });
152
1027
  }
1028
+ const bodyRows = withHeader ? rows - 1 : rows;
1029
+ for (let r = 0; r < bodyRows; r++) {
1030
+ content.push({
1031
+ type: 'tableRow',
1032
+ content: Array.from({ length: cols }, () => emptyCell()),
1033
+ });
1034
+ }
1035
+ editor.chain().focus().insertContent({ type: 'table', content }).run();
1036
+ this.coAction.emit({ action: 'table', payload: { rows, cols, withHeaderRow: withHeader } });
1037
+ this.closePopover();
153
1038
  }
154
- canRun(item) {
155
- var _a, _b, _c, _d;
156
- if (!this.editor || this.disabled)
157
- return false;
158
- const can = this.editor.can();
159
- if (item.action === 'undo')
160
- return (_b = (_a = can.undo) === null || _a === void 0 ? void 0 : _a.call(can)) !== null && _b !== void 0 ? _b : true;
161
- if (item.action === 'redo')
162
- return (_d = (_c = can.redo) === null || _c === void 0 ? void 0 : _c.call(can)) !== null && _d !== void 0 ? _d : true;
163
- return true;
1039
+ renderColorPicker(item) {
1040
+ return (index.h("div", { class: "co-rich-text-toolbar__color-picker", onMouseDown: (e) => {
1041
+ if (e.target.tagName !== 'INPUT')
1042
+ e.preventDefault();
1043
+ e.stopPropagation();
1044
+ } }, index.h("div", { class: "co-rich-text-toolbar__color-grid" }, this.colorPalette.map((color) => (index.h("button", { type: "button", class: "co-rich-text-toolbar__color-swatch", style: Object.assign({ background: color }, (color === '#ffffff' ? { border: '1px solid #ccc' } : {})), title: color, onMouseDown: (e) => e.preventDefault(), onClick: () => this.selectColor(item.action, color) })))), index.h("div", { class: "co-rich-text-toolbar__color-hex" }, index.h("input", { type: "text", class: "co-rich-text-toolbar__color-hex-input", placeholder: "#hex", maxLength: 7, value: this.colorHexInput, onInput: (e) => { this.colorHexInput = e.target.value; }, onKeyDown: (e) => {
1045
+ if (e.key === 'Enter') {
1046
+ const val = this.colorHexInput.trim();
1047
+ if (/^#[0-9a-fA-F]{3,6}$/.test(val)) {
1048
+ this.selectColor(item.action, val);
1049
+ this.colorHexInput = '';
1050
+ }
1051
+ }
1052
+ else if (e.key === 'Escape') {
1053
+ this.closePopover();
1054
+ }
1055
+ } })), index.h("button", { type: "button", class: "co-rich-text-toolbar__color-clear", onMouseDown: (e) => e.preventDefault(), onClick: () => this.clearColor(item.action) }, index.h("co-icon", { name: "x", size: 12 }), index.h("span", null, this.s.removeColor))));
164
1056
  }
165
1057
  render() {
166
1058
  if (this.variant === 'none' || this.items.length === 0)
167
1059
  return null;
168
- return (index.h("div", { class: "co-rich-text-toolbar", role: "toolbar", "aria-label": "Formatting", part: "toolbar" }, this.items.filter((item) => this.supportedBySchema(item)).map((item) => {
169
- var _a;
170
- return (index.h("button", { key: `${item.action}-${JSON.stringify((_a = item.payload) !== null && _a !== void 0 ? _a : '')}`, type: "button", class: { 'co-rich-text-toolbar__btn': true, 'co-rich-text-toolbar__btn--active': this.isActive(item) }, title: item.label, "aria-label": item.label, "aria-pressed": item.type === 'toggle' ? String(this.isActive(item)) : undefined, disabled: !this.canRun(item), onMouseDown: (e) => e.preventDefault(), onClick: () => this.run(item), part: "button" }, index.h("co-icon", { name: item.icon, size: 18 })));
1060
+ return (index.h("div", { class: "co-rich-text-toolbar", role: "toolbar", "aria-label": "Formatting", part: "toolbar" }, this.items.map((entry) => {
1061
+ if (this.isSeparator(entry)) {
1062
+ return index.h("span", { class: "co-rich-text-toolbar__sep" });
1063
+ }
1064
+ return this.renderButton(entry);
171
1065
  })));
172
1066
  }
1067
+ get el() { return index.getElement(this); }
173
1068
  static get watchers() { return {
174
1069
  "variant": [{
175
1070
  "onVariantChange": 0
176
1071
  }],
177
1072
  "editor": [{
178
1073
  "onEditorChange": 0
1074
+ }],
1075
+ "openPopover": [{
1076
+ "onOpenPopoverChange": 0
179
1077
  }]
180
1078
  }; }
181
1079
  };
1080
+ /**
1081
+ * Command whose presence in the schema proves an item's extension is loaded.
1082
+ * Items without an entry have no extension dependency (separators, core marks,
1083
+ * link, paragraph/heading, undo/redo, text color) and are always shown.
1084
+ */
1085
+ CoRichTextToolbar.ITEM_COMMAND = {
1086
+ table: 'insertTable',
1087
+ image: 'setImage',
1088
+ youtube: 'setYoutubeVideo',
1089
+ iframe: 'setIframe',
1090
+ callout: 'insertCallout',
1091
+ fontFamily: 'setFontFamily',
1092
+ fontSize: 'setFontSize',
1093
+ highlight: 'toggleHighlight',
1094
+ alignment: 'setTextAlign',
1095
+ lineSpacing: 'setLineHeight',
1096
+ letterSpacing: 'setLetterSpacing',
1097
+ taskListMenu: 'toggleTaskList',
1098
+ indentIncrease: 'indent',
1099
+ indentDecrease: 'outdent',
1100
+ codeBlock: 'toggleCodeBlock',
1101
+ blockquote: 'toggleBlockquote',
1102
+ horizontalRule: 'setHorizontalRule',
1103
+ bulletListMenu: 'toggleBulletList',
1104
+ orderedListMenu: 'toggleOrderedList',
1105
+ };
182
1106
  CoRichTextToolbar.style = coRichTextToolbarCss();
183
1107
 
184
1108
  exports.co_rich_text_toolbar = CoRichTextToolbar;