@prolibu-suite/cobalt-core 0.2.0 → 0.3.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 (590) hide show
  1. package/custom-elements.json +15675 -11199
  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 +6 -4
  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-button-group.cjs.entry.js +3 -3
  10. package/dist/cjs/co-button.cjs.entry.js +6 -6
  11. package/dist/cjs/co-calendar-month.cjs.entry.js +381 -0
  12. package/dist/cjs/co-calendar_3.cjs.entry.js +11 -11
  13. package/dist/cjs/co-card.cjs.entry.js +3 -3
  14. package/dist/cjs/co-checkbox-group.cjs.entry.js +5 -5
  15. package/dist/cjs/co-checkbox.cjs.entry.js +5 -5
  16. package/dist/cjs/co-chip.cjs.entry.js +11 -8
  17. package/dist/cjs/co-color-picker.cjs.entry.js +7 -5
  18. package/dist/cjs/co-column-picker.cjs.entry.js +3 -3
  19. package/dist/cjs/co-combobox.cjs.entry.js +7 -7
  20. package/dist/cjs/co-command-search.cjs.entry.js +151 -12
  21. package/dist/cjs/co-data-table-pagination.cjs.entry.js +5 -5
  22. package/dist/cjs/co-data-table.cjs.entry.js +25 -11
  23. package/dist/cjs/co-date-picker.cjs.entry.js +2 -2
  24. package/dist/cjs/co-date-range-picker.cjs.entry.js +3 -3
  25. package/dist/cjs/co-date-range.cjs.entry.js +2 -2
  26. package/dist/cjs/co-empty-state.cjs.entry.js +2 -2
  27. package/dist/cjs/co-event-calendar.cjs.entry.js +318 -0
  28. package/dist/cjs/co-fab.cjs.entry.js +3 -3
  29. package/dist/cjs/co-file-field.cjs.entry.js +8 -8
  30. package/dist/cjs/co-helper-text.cjs.entry.js +3 -3
  31. package/dist/cjs/co-icon-button.cjs.entry.js +5 -5
  32. package/dist/cjs/co-icon.cjs.entry.js +33 -25
  33. package/dist/cjs/co-input.cjs.entry.js +6 -6
  34. package/dist/cjs/co-json-field.cjs.entry.js +10 -6
  35. package/dist/cjs/co-lightbox.cjs.entry.js +5 -5
  36. package/dist/cjs/co-list-footer.cjs.entry.js +25 -0
  37. package/dist/cjs/co-list-item.cjs.entry.js +60 -4
  38. package/dist/cjs/co-loader_2.cjs.entry.js +293 -0
  39. package/dist/cjs/co-menu-divider.cjs.entry.js +2 -2
  40. package/dist/cjs/co-menu-item.cjs.entry.js +17 -10
  41. package/dist/cjs/co-menu.cjs.entry.js +2 -2
  42. package/dist/cjs/co-modal.cjs.entry.js +16 -4
  43. package/dist/cjs/co-navbar.cjs.entry.js +3 -3
  44. package/dist/cjs/co-number-field.cjs.entry.js +18 -6
  45. package/dist/cjs/co-page-header.cjs.entry.js +2 -2
  46. package/dist/cjs/co-phone-field.cjs.entry.js +6 -4
  47. package/dist/cjs/co-popover.cjs.entry.js +45 -14
  48. package/dist/cjs/co-progress-bar.cjs.entry.js +8 -4
  49. package/dist/cjs/co-progress-circle.cjs.entry.js +3 -3
  50. package/dist/cjs/co-radio-group.cjs.entry.js +4 -4
  51. package/dist/cjs/co-radio.cjs.entry.js +4 -4
  52. package/dist/cjs/co-rating.cjs.entry.js +4 -4
  53. package/dist/cjs/co-ref-field.cjs.entry.js +36 -13
  54. package/dist/cjs/co-rich-text-editor.cjs.entry.js +1879 -33
  55. package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +995 -71
  56. package/dist/cjs/co-rich-text-viewer.cjs.entry.js +55 -19
  57. package/dist/cjs/co-row.cjs.entry.js +3 -3
  58. package/dist/cjs/co-select.cjs.entry.js +8 -8
  59. package/dist/cjs/co-separator.cjs.entry.js +2 -2
  60. package/dist/cjs/co-sidebar-nav.cjs.entry.js +29 -9
  61. package/dist/cjs/co-sidebar.cjs.entry.js +3 -3
  62. package/dist/cjs/co-skeleton.cjs.entry.js +26 -0
  63. package/dist/cjs/co-slider.cjs.entry.js +3 -3
  64. package/dist/cjs/co-switch.cjs.entry.js +6 -6
  65. package/dist/cjs/co-tab-group.cjs.entry.js +2 -2
  66. package/dist/cjs/co-tab.cjs.entry.js +3 -3
  67. package/dist/cjs/co-tags-field.cjs.entry.js +19 -13
  68. package/dist/cjs/co-textarea.cjs.entry.js +11 -7
  69. package/dist/cjs/co-toast.cjs.entry.js +2 -2
  70. package/dist/cjs/co-toggle-button-group.cjs.entry.js +4 -4
  71. package/dist/cjs/co-toggle-button.cjs.entry.js +4 -4
  72. package/dist/cjs/co-tooltip.cjs.entry.js +51 -16
  73. package/dist/cjs/co-transfer-list.cjs.entry.js +3 -3
  74. package/dist/cjs/co-video.cjs.entry.js +839 -0
  75. package/dist/cjs/cobalt.cjs.js +2 -2
  76. package/dist/cjs/fieldChip-CDIMz_Y6.js +7 -0
  77. package/dist/cjs/{index-CaEJnpZe.js → index-5NdsiFjZ.js} +14509 -6317
  78. package/dist/cjs/{index-DoFnrUVH.js → index-BumlM92r.js} +45 -21
  79. package/dist/cjs/loader.cjs.js +2 -2
  80. package/dist/cjs/overlayAfterClose-BdeXrhVY.js +12 -0
  81. package/dist/{esm/sanitizer-DcK0GGZC.js → cjs/purify.es-DX41ZWS2.js} +3 -107
  82. package/dist/cjs/{requiredMark-DA6y-4rp.js → requiredMark-CqMGt1H1.js} +1 -1
  83. package/dist/cjs/richTextI18n-B7ktXg3M.js +382 -0
  84. package/dist/cjs/toolbar-config-3PlT-3zm.js +216 -0
  85. package/dist/cjs/tz-Dgom0W69.js +127 -0
  86. package/dist/cobalt/cobalt.css +1 -1
  87. package/dist/cobalt/cobalt.esm.js +1 -1
  88. package/dist/cobalt/p-0a506c9d.entry.js +1 -0
  89. package/dist/cobalt/p-0bb55163.entry.js +1 -0
  90. package/dist/cobalt/{p-6404bd21.entry.js → p-0e8c0d87.entry.js} +1 -1
  91. package/dist/cobalt/p-12e2c2c4.entry.js +1 -0
  92. package/dist/cobalt/p-136ad468.entry.js +1 -0
  93. package/dist/cobalt/{p-654bbc2a.entry.js → p-14b59277.entry.js} +1 -1
  94. package/dist/cobalt/p-1531d3c9.entry.js +1 -0
  95. package/dist/cobalt/p-1774d211.entry.js +1 -0
  96. package/dist/cobalt/p-180e1106.entry.js +1 -0
  97. package/dist/cobalt/p-1a07c23c.entry.js +1 -0
  98. package/dist/cobalt/p-1dc9c49e.entry.js +1 -0
  99. package/dist/cobalt/p-1f747e45.entry.js +1 -0
  100. package/dist/cobalt/p-201eaf35.entry.js +1 -0
  101. package/dist/cobalt/p-260101ab.entry.js +1 -0
  102. package/dist/cobalt/p-279bf91c.entry.js +1 -0
  103. package/dist/cobalt/p-29be61a9.entry.js +1 -0
  104. package/dist/cobalt/p-2d2ce434.entry.js +1 -0
  105. package/dist/cobalt/{p-aa63812a.entry.js → p-2f86e1e0.entry.js} +1 -1
  106. package/dist/cobalt/{p-522fcdb7.entry.js → p-31ab9a46.entry.js} +1 -1
  107. package/dist/cobalt/{p-fe9e85b6.entry.js → p-37595103.entry.js} +1 -1
  108. package/dist/cobalt/{p-def448e4.entry.js → p-377c2ccc.entry.js} +1 -1
  109. package/dist/cobalt/p-3863ea91.entry.js +1 -0
  110. package/dist/cobalt/p-3a257cb0.entry.js +1 -0
  111. package/dist/cobalt/p-3e187456.entry.js +1 -0
  112. package/dist/cobalt/{p-5d01bd4d.entry.js → p-4431faac.entry.js} +1 -1
  113. package/dist/cobalt/{p-54f26e95.entry.js → p-4504f7b0.entry.js} +1 -1
  114. package/dist/cobalt/{p-f8728b21.entry.js → p-456fa86f.entry.js} +1 -1
  115. package/dist/cobalt/{p-3f9b3fcb.entry.js → p-4871690e.entry.js} +1 -1
  116. package/dist/cobalt/{p-d17e1444.entry.js → p-4c01d984.entry.js} +1 -1
  117. package/dist/cobalt/p-51a53177.entry.js +1 -0
  118. package/dist/cobalt/p-52de17da.entry.js +1 -0
  119. package/dist/cobalt/p-5890e4d1.entry.js +1 -0
  120. package/dist/cobalt/{p-f2c5cb74.entry.js → p-58a53421.entry.js} +1 -1
  121. package/dist/cobalt/p-62274eba.entry.js +1 -0
  122. package/dist/cobalt/p-635b03d5.entry.js +1 -0
  123. package/dist/cobalt/p-64ddee92.entry.js +1 -0
  124. package/dist/cobalt/p-65af5017.entry.js +1 -0
  125. package/dist/cobalt/p-69d4c0c8.entry.js +1 -0
  126. package/dist/cobalt/p-6c480916.entry.js +1 -0
  127. package/dist/cobalt/p-6d1217c3.entry.js +1 -0
  128. package/dist/cobalt/{p-f0e8fa7d.entry.js → p-6e808b3a.entry.js} +1 -1
  129. package/dist/cobalt/{p-f97ad9ad.entry.js → p-70b14b05.entry.js} +1 -1
  130. package/dist/cobalt/{p-97c20011.entry.js → p-790d384e.entry.js} +1 -1
  131. package/dist/cobalt/p-8012e152.entry.js +1 -0
  132. package/dist/cobalt/p-80b27203.entry.js +1 -0
  133. package/dist/cobalt/p-867c1465.entry.js +1 -0
  134. package/dist/cobalt/p-86a143d7.entry.js +1 -0
  135. package/dist/cobalt/{p-e8b58332.entry.js → p-8d59f5ad.entry.js} +1 -1
  136. package/dist/cobalt/p-8d7fdb9d.entry.js +1 -0
  137. package/dist/cobalt/{p-7f818368.entry.js → p-8dc1dab8.entry.js} +1 -1
  138. package/dist/cobalt/{p-beb9c11d.entry.js → p-8e1dc062.entry.js} +1 -1
  139. package/dist/cobalt/p-929e647f.entry.js +1 -0
  140. package/dist/cobalt/p-92bd9b29.entry.js +1 -0
  141. package/dist/cobalt/p-93046365.entry.js +1 -0
  142. package/dist/cobalt/p-98ab5f3f.entry.js +1 -0
  143. package/dist/cobalt/{p-c87285b6.entry.js → p-9a04ca90.entry.js} +1 -1
  144. package/dist/cobalt/{p-7ef766c6.entry.js → p-9a088515.entry.js} +1 -1
  145. package/dist/cobalt/p-9abbd436.entry.js +1 -0
  146. package/dist/cobalt/p-9d69c067.entry.js +1 -0
  147. package/dist/cobalt/p-B-ckjCUA.js +1 -0
  148. package/dist/cobalt/p-B2QLgWrz.js +2 -0
  149. package/dist/cobalt/p-B6JZk8fL.js +1 -0
  150. package/dist/cobalt/p-BZJ7NCm5.js +1 -0
  151. package/dist/cobalt/p-CYsftTKf.js +2 -0
  152. package/dist/cobalt/p-CegCk7FL.js +1 -0
  153. package/dist/cobalt/p-Ch1jfwZ2.js +1 -0
  154. package/dist/cobalt/p-ChibIpZv.js +1 -0
  155. package/dist/cobalt/p-afb7e19e.entry.js +1 -0
  156. package/dist/cobalt/{p-b758c2e6.entry.js → p-b6f20268.entry.js} +1 -1
  157. package/dist/cobalt/{p-bb07da22.entry.js → p-ba90e871.entry.js} +1 -1
  158. package/dist/cobalt/p-c10697e1.entry.js +1 -0
  159. package/dist/cobalt/p-c4f59532.entry.js +1 -0
  160. package/dist/cobalt/{p-1e0282b8.entry.js → p-cb235aa7.entry.js} +1 -1
  161. package/dist/cobalt/p-cfb36943.entry.js +1 -0
  162. package/dist/cobalt/p-d809bd44.entry.js +1 -0
  163. package/dist/cobalt/p-e53861e4.entry.js +1 -0
  164. package/dist/cobalt/p-e54dd404.entry.js +1 -0
  165. package/dist/cobalt/{p-01fc77c4.entry.js → p-eb18fdbf.entry.js} +1 -1
  166. package/dist/cobalt/{p-95d14878.entry.js → p-eb73052a.entry.js} +1 -1
  167. package/dist/cobalt/{p-273afd93.entry.js → p-ef7d4ae3.entry.js} +1 -1
  168. package/dist/cobalt/p-f4063c41.entry.js +1 -0
  169. package/dist/cobalt/p-oImf-7fN.js +1 -0
  170. package/dist/cobalt/{p-CyYF8IJE.js → p-tPYikBRJ.js} +1 -1
  171. package/dist/collection/collection-manifest.json +10 -3
  172. package/dist/collection/components/co-accordion/co-accordion.js +2 -2
  173. package/dist/collection/components/co-app-shell/co-app-shell.css +79 -6
  174. package/dist/collection/components/co-app-shell/co-app-shell.js +2 -2
  175. package/dist/collection/components/co-autocomplete/co-autocomplete.css +28 -1
  176. package/dist/collection/components/co-autocomplete/co-autocomplete.js +27 -4
  177. package/dist/collection/components/co-avatar/co-avatar.css +38 -1
  178. package/dist/collection/components/co-avatar/co-avatar.js +23 -2
  179. package/dist/collection/components/co-avatar-group/co-avatar-group.css +86 -0
  180. package/dist/collection/components/co-avatar-group/co-avatar-group.js +224 -0
  181. package/dist/collection/components/co-badge/co-badge.js +1 -1
  182. package/dist/collection/components/co-bottom-sheet/co-bottom-sheet.css +136 -0
  183. package/dist/collection/components/co-bottom-sheet/co-bottom-sheet.js +507 -0
  184. package/dist/collection/components/co-button/co-button.css +40 -7
  185. package/dist/collection/components/co-button/co-button.js +26 -7
  186. package/dist/collection/components/co-button-group/co-button-group.js +2 -2
  187. package/dist/collection/components/co-calendar/co-calendar.js +1 -1
  188. package/dist/collection/components/co-calendar-month/co-calendar-month.css +231 -0
  189. package/dist/collection/components/co-calendar-month/co-calendar-month.js +594 -0
  190. package/dist/collection/components/co-card/co-card.js +2 -2
  191. package/dist/collection/components/co-checkbox/co-checkbox.css +7 -1
  192. package/dist/collection/components/co-checkbox/co-checkbox.js +3 -3
  193. package/dist/collection/components/co-checkbox-group/co-checkbox-group.css +7 -1
  194. package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +3 -3
  195. package/dist/collection/components/co-chip/co-chip.css +27 -7
  196. package/dist/collection/components/co-chip/co-chip.js +52 -10
  197. package/dist/collection/components/co-color-picker/co-color-picker.css +35 -1
  198. package/dist/collection/components/co-color-picker/co-color-picker.js +24 -2
  199. package/dist/collection/components/co-column-picker/co-column-picker.js +2 -2
  200. package/dist/collection/components/co-combobox/co-combobox.css +7 -47
  201. package/dist/collection/components/co-combobox/co-combobox.js +4 -4
  202. package/dist/collection/components/co-command-search/co-command-search.css +163 -1
  203. package/dist/collection/components/co-command-search/co-command-search.js +355 -14
  204. package/dist/collection/components/co-command-search/commandSearchGroup.js +17 -0
  205. package/dist/collection/components/co-command-search/commandSearchLogic.js +27 -0
  206. package/dist/collection/components/co-data-table/co-data-table.css +37 -1
  207. package/dist/collection/components/co-data-table/co-data-table.js +25 -11
  208. package/dist/collection/components/co-data-table-pagination/co-data-table-pagination.js +4 -4
  209. package/dist/collection/components/co-date-field/co-date-field.css +7 -1
  210. package/dist/collection/components/co-date-field/co-date-field.js +4 -4
  211. package/dist/collection/components/co-date-range/co-date-range.js +1 -1
  212. package/dist/collection/components/co-date-range-picker/co-date-range-picker.css +7 -1
  213. package/dist/collection/components/co-drawer/co-drawer.css +1 -0
  214. package/dist/collection/components/co-drawer/co-drawer.js +2 -2
  215. package/dist/collection/components/co-empty-state/co-empty-state.js +1 -1
  216. package/dist/collection/components/co-event-calendar/co-event-calendar.css +146 -0
  217. package/dist/collection/components/co-event-calendar/co-event-calendar.js +620 -0
  218. package/dist/collection/components/co-fab/co-fab.js +2 -2
  219. package/dist/collection/components/co-file-field/co-file-field.css +7 -1
  220. package/dist/collection/components/co-file-field/co-file-field.js +5 -5
  221. package/dist/collection/components/co-helper-text/co-helper-text.js +2 -2
  222. package/dist/collection/components/co-icon/co-icon.js +7 -37
  223. package/dist/collection/components/co-icon/iconLoader.js +39 -0
  224. package/dist/collection/components/co-icon-button/co-icon-button.css +19 -8
  225. package/dist/collection/components/co-icon-button/co-icon-button.js +23 -4
  226. package/dist/collection/components/co-input/co-input.css +7 -1
  227. package/dist/collection/components/co-input/co-input.js +3 -3
  228. package/dist/collection/components/co-json-field/co-json-field.css +25 -1
  229. package/dist/collection/components/co-json-field/co-json-field.js +27 -3
  230. package/dist/collection/components/co-lightbox/co-lightbox.js +4 -4
  231. package/dist/collection/components/co-list-footer/co-list-footer.css +50 -0
  232. package/dist/collection/components/co-list-footer/co-list-footer.js +149 -0
  233. package/dist/collection/components/co-list-item/co-list-item.css +7 -0
  234. package/dist/collection/components/co-list-item/co-list-item.js +65 -2
  235. package/dist/collection/components/co-loader/co-loader.css +9 -0
  236. package/dist/collection/components/co-menu/co-menu.js +1 -1
  237. package/dist/collection/components/co-menu-divider/co-menu-divider.js +1 -1
  238. package/dist/collection/components/co-menu-item/co-menu-item.css +18 -0
  239. package/dist/collection/components/co-menu-item/co-menu-item.js +15 -8
  240. package/dist/collection/components/co-modal/co-modal.css +42 -2
  241. package/dist/collection/components/co-modal/co-modal.js +42 -2
  242. package/dist/collection/components/co-navbar/co-navbar.js +2 -2
  243. package/dist/collection/components/co-number-field/co-number-field.css +19 -1
  244. package/dist/collection/components/co-number-field/co-number-field.js +34 -3
  245. package/dist/collection/components/co-overlay/co-overlay.css +15 -1
  246. package/dist/collection/components/co-overlay/co-overlay.js +266 -1
  247. package/dist/collection/components/co-overlay/focusTrap.js +53 -0
  248. package/dist/collection/components/co-overlay/overlayAfterClose.js +8 -0
  249. package/dist/collection/components/co-page-header/co-page-header.js +1 -1
  250. package/dist/collection/components/co-phone-field/co-phone-field.css +30 -2
  251. package/dist/collection/components/co-phone-field/co-phone-field.js +23 -1
  252. package/dist/collection/components/co-popover/co-popover.css +9 -0
  253. package/dist/collection/components/co-popover/co-popover.js +43 -12
  254. package/dist/collection/components/co-progress-bar/co-progress-bar.css +22 -0
  255. package/dist/collection/components/co-progress-bar/co-progress-bar.js +26 -2
  256. package/dist/collection/components/co-progress-circle/co-progress-circle.js +2 -2
  257. package/dist/collection/components/co-radio/co-radio.js +3 -3
  258. package/dist/collection/components/co-radio-group/co-radio-group.js +3 -3
  259. package/dist/collection/components/co-rating/co-rating.js +3 -3
  260. package/dist/collection/components/co-ref-field/co-ref-field.css +64 -6
  261. package/dist/collection/components/co-ref-field/co-ref-field.js +0 -0
  262. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.css +1125 -41
  263. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +2008 -53
  264. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.css +791 -9
  265. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +1071 -71
  266. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.css +78 -0
  267. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +46 -41
  268. package/dist/collection/components/co-row/co-row.js +2 -2
  269. package/dist/collection/components/co-select/co-select.css +7 -1
  270. package/dist/collection/components/co-select/co-select.js +5 -5
  271. package/dist/collection/components/co-separator/co-separator.js +1 -1
  272. package/dist/collection/components/co-sidebar/co-sidebar.js +2 -2
  273. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.css +99 -12
  274. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +28 -8
  275. package/dist/collection/components/co-skeleton/co-skeleton.css +28 -0
  276. package/dist/collection/components/co-skeleton/co-skeleton.js +97 -0
  277. package/dist/collection/components/co-slider/co-slider.js +2 -2
  278. package/dist/collection/components/co-switch/co-switch.css +9 -1
  279. package/dist/collection/components/co-switch/co-switch.js +3 -3
  280. package/dist/collection/components/co-tab/co-tab.js +2 -2
  281. package/dist/collection/components/co-tab-group/co-tab-group.js +1 -1
  282. package/dist/collection/components/co-tags-field/co-tags-field.css +39 -1
  283. package/dist/collection/components/co-tags-field/co-tags-field.js +36 -10
  284. package/dist/collection/components/co-textarea/co-textarea.css +26 -1
  285. package/dist/collection/components/co-textarea/co-textarea.js +28 -4
  286. package/dist/collection/components/co-toast/co-toast.js +1 -1
  287. package/dist/collection/components/co-toggle-button/co-toggle-button.css +26 -4
  288. package/dist/collection/components/co-toggle-button/co-toggle-button.js +3 -3
  289. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.css +16 -12
  290. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +2 -2
  291. package/dist/collection/components/co-tooltip/co-tooltip.css +8 -0
  292. package/dist/collection/components/co-tooltip/co-tooltip.js +69 -14
  293. package/dist/collection/components/co-transfer-list/co-transfer-list.js +2 -2
  294. package/dist/collection/components/co-video/co-video.css +497 -0
  295. package/dist/collection/components/co-video/co-video.js +1772 -0
  296. package/dist/collection/utils/fieldChip.js +2 -0
  297. package/dist/collection/utils/icon-config.js +12 -0
  298. package/dist/collection/utils/richTextI18n.js +378 -0
  299. package/dist/collection/utils/sheetGesture.js +53 -0
  300. package/dist/components/co-accordion.js +1 -1
  301. package/dist/components/co-app-shell.js +1 -1
  302. package/dist/components/co-autocomplete.js +1 -1
  303. package/dist/components/co-avatar-group.d.ts +11 -0
  304. package/dist/components/co-avatar-group.js +1 -0
  305. package/dist/components/co-avatar.js +1 -1
  306. package/dist/components/co-badge.js +1 -1
  307. package/dist/components/co-bottom-sheet.d.ts +11 -0
  308. package/dist/components/co-bottom-sheet.js +1 -0
  309. package/dist/components/co-button-group.js +1 -1
  310. package/dist/components/co-button.js +1 -1
  311. package/dist/components/co-calendar-month.d.ts +11 -0
  312. package/dist/components/co-calendar-month.js +1 -0
  313. package/dist/components/co-calendar.js +1 -1
  314. package/dist/components/co-card.js +1 -1
  315. package/dist/components/co-checkbox-group.js +1 -1
  316. package/dist/components/co-checkbox.js +1 -1
  317. package/dist/components/co-chip.js +1 -1
  318. package/dist/components/co-color-picker.js +1 -1
  319. package/dist/components/co-column-picker.js +1 -1
  320. package/dist/components/co-combobox.js +1 -1
  321. package/dist/components/co-command-search.js +1 -1
  322. package/dist/components/co-data-table-pagination.js +1 -1
  323. package/dist/components/co-data-table.js +1 -1
  324. package/dist/components/co-date-field.js +1 -1
  325. package/dist/components/co-date-picker.js +1 -1
  326. package/dist/components/co-date-range-picker.js +1 -1
  327. package/dist/components/co-date-range.js +1 -1
  328. package/dist/components/co-drawer.js +1 -1
  329. package/dist/components/co-empty-state.js +1 -1
  330. package/dist/components/co-event-calendar.d.ts +11 -0
  331. package/dist/components/co-event-calendar.js +1 -0
  332. package/dist/components/co-fab.js +1 -1
  333. package/dist/components/co-file-field.js +1 -1
  334. package/dist/components/co-helper-text.js +1 -1
  335. package/dist/components/co-icon-button.js +1 -1
  336. package/dist/components/co-icon.js +1 -1
  337. package/dist/components/co-input.js +1 -1
  338. package/dist/components/co-json-field.js +1 -1
  339. package/dist/components/co-lightbox.js +1 -1
  340. package/dist/components/co-list-footer.d.ts +11 -0
  341. package/dist/components/co-list-footer.js +1 -0
  342. package/dist/components/co-list-item.js +1 -1
  343. package/dist/components/co-loader.js +1 -1
  344. package/dist/components/co-menu-divider.js +1 -1
  345. package/dist/components/co-menu-item.js +1 -1
  346. package/dist/components/co-menu.js +1 -1
  347. package/dist/components/co-modal.js +1 -1
  348. package/dist/components/co-navbar.js +1 -1
  349. package/dist/components/co-number-field.js +1 -1
  350. package/dist/components/co-overlay.js +1 -1
  351. package/dist/components/co-page-header.js +1 -1
  352. package/dist/components/co-phone-field.js +1 -1
  353. package/dist/components/co-popover.js +1 -1
  354. package/dist/components/co-progress-bar.js +1 -1
  355. package/dist/components/co-progress-circle.js +1 -1
  356. package/dist/components/co-radio-group.js +1 -1
  357. package/dist/components/co-radio.js +1 -1
  358. package/dist/components/co-rating.js +1 -1
  359. package/dist/components/co-ref-field.js +1 -1
  360. package/dist/components/co-rich-text-editor.js +1 -1
  361. package/dist/components/co-rich-text-toolbar.js +1 -1
  362. package/dist/components/co-rich-text-viewer.js +1 -1
  363. package/dist/components/co-row.js +1 -1
  364. package/dist/components/co-select.js +1 -1
  365. package/dist/components/co-separator.js +1 -1
  366. package/dist/components/co-sidebar-nav.js +1 -1
  367. package/dist/components/co-sidebar.js +1 -1
  368. package/dist/components/co-skeleton.d.ts +11 -0
  369. package/dist/components/co-skeleton.js +1 -0
  370. package/dist/components/co-slider.js +1 -1
  371. package/dist/components/co-switch.js +1 -1
  372. package/dist/components/co-tab-group.js +1 -1
  373. package/dist/components/co-tab.js +1 -1
  374. package/dist/components/co-tags-field.js +1 -1
  375. package/dist/components/co-textarea.js +1 -1
  376. package/dist/components/co-toast.js +1 -1
  377. package/dist/components/co-toggle-button-group.js +1 -1
  378. package/dist/components/co-toggle-button.js +1 -1
  379. package/dist/components/co-tooltip.js +1 -1
  380. package/dist/components/co-transfer-list.js +1 -1
  381. package/dist/components/co-video.d.ts +11 -0
  382. package/dist/components/co-video.js +1 -0
  383. package/dist/components/index.js +1 -1
  384. package/dist/components/p-B2QLgWrz.js +2 -0
  385. package/dist/components/{p-BeWXpX8I.js → p-B7vGYFbO.js} +1 -1
  386. package/dist/components/p-BB2OaYKF.js +1 -0
  387. package/dist/components/p-BFeE_fiq.js +1 -0
  388. package/dist/components/p-BNKz39GA.js +1 -0
  389. package/dist/components/p-Ba4v1NXo.js +1 -0
  390. package/dist/components/p-C_ULDaks.js +1 -0
  391. package/dist/components/p-CegCk7FL.js +1 -0
  392. package/dist/components/p-ChibIpZv.js +1 -0
  393. package/dist/components/p-D3Y_ti3Q.js +1 -0
  394. package/dist/components/{p-DObrQi5F.js → p-DKh8ZK4U.js} +1 -1
  395. package/dist/components/{p-C9tHLXKS.js → p-DeZxp9vb.js} +1 -1
  396. package/dist/components/p-DvhR3H61.js +1 -0
  397. package/dist/components/p-DxCFMMfY.js +1 -0
  398. package/dist/components/{p-OGpfa9Yd.js → p-DzoNGEDU.js} +1 -1
  399. package/dist/components/p-EPZfLt5l.js +1 -0
  400. package/dist/components/p-FMnqPWcM.js +1 -0
  401. package/dist/components/p-Hzh9U2cM.js +1 -0
  402. package/dist/components/p-WZ06pT2Y.js +1 -0
  403. package/dist/components/p-tloAgDin.js +1 -0
  404. package/dist/esm/co-accordion.entry.js +3 -3
  405. package/dist/esm/co-app-shell.entry.js +4 -4
  406. package/dist/esm/co-autocomplete.entry.js +10 -7
  407. package/dist/esm/co-avatar-group.entry.js +75 -0
  408. package/dist/esm/co-avatar.entry.js +6 -4
  409. package/dist/esm/co-badge.entry.js +2 -2
  410. package/dist/esm/co-bottom-sheet.entry.js +323 -0
  411. package/dist/esm/co-button-group.entry.js +3 -3
  412. package/dist/esm/co-button.entry.js +6 -6
  413. package/dist/esm/co-calendar-month.entry.js +379 -0
  414. package/dist/esm/co-calendar_3.entry.js +12 -12
  415. package/dist/esm/co-card.entry.js +3 -3
  416. package/dist/esm/co-checkbox-group.entry.js +5 -5
  417. package/dist/esm/co-checkbox.entry.js +5 -5
  418. package/dist/esm/co-chip.entry.js +11 -8
  419. package/dist/esm/co-color-picker.entry.js +7 -5
  420. package/dist/esm/co-column-picker.entry.js +3 -3
  421. package/dist/esm/co-combobox.entry.js +7 -7
  422. package/dist/esm/co-command-search.entry.js +151 -12
  423. package/dist/esm/co-data-table-pagination.entry.js +5 -5
  424. package/dist/esm/co-data-table.entry.js +25 -11
  425. package/dist/esm/co-date-picker.entry.js +2 -2
  426. package/dist/esm/co-date-range-picker.entry.js +4 -4
  427. package/dist/esm/co-date-range.entry.js +2 -2
  428. package/dist/esm/co-empty-state.entry.js +2 -2
  429. package/dist/esm/co-event-calendar.entry.js +316 -0
  430. package/dist/esm/co-fab.entry.js +3 -3
  431. package/dist/esm/co-file-field.entry.js +8 -8
  432. package/dist/esm/co-helper-text.entry.js +3 -3
  433. package/dist/esm/co-icon-button.entry.js +5 -5
  434. package/dist/esm/co-icon.entry.js +33 -25
  435. package/dist/esm/co-input.entry.js +6 -6
  436. package/dist/esm/co-json-field.entry.js +10 -6
  437. package/dist/esm/co-lightbox.entry.js +5 -5
  438. package/dist/esm/co-list-footer.entry.js +23 -0
  439. package/dist/esm/co-list-item.entry.js +60 -4
  440. package/dist/esm/co-loader_2.entry.js +290 -0
  441. package/dist/esm/co-menu-divider.entry.js +2 -2
  442. package/dist/esm/co-menu-item.entry.js +17 -10
  443. package/dist/esm/co-menu.entry.js +2 -2
  444. package/dist/esm/co-modal.entry.js +16 -4
  445. package/dist/esm/co-navbar.entry.js +3 -3
  446. package/dist/esm/co-number-field.entry.js +18 -6
  447. package/dist/esm/co-page-header.entry.js +2 -2
  448. package/dist/esm/co-phone-field.entry.js +6 -4
  449. package/dist/esm/co-popover.entry.js +45 -14
  450. package/dist/esm/co-progress-bar.entry.js +8 -4
  451. package/dist/esm/co-progress-circle.entry.js +3 -3
  452. package/dist/esm/co-radio-group.entry.js +4 -4
  453. package/dist/esm/co-radio.entry.js +4 -4
  454. package/dist/esm/co-rating.entry.js +4 -4
  455. package/dist/esm/co-ref-field.entry.js +36 -13
  456. package/dist/esm/co-rich-text-editor.entry.js +1879 -33
  457. package/dist/esm/co-rich-text-toolbar.entry.js +995 -71
  458. package/dist/esm/co-rich-text-viewer.entry.js +55 -19
  459. package/dist/esm/co-row.entry.js +3 -3
  460. package/dist/esm/co-select.entry.js +8 -8
  461. package/dist/esm/co-separator.entry.js +2 -2
  462. package/dist/esm/co-sidebar-nav.entry.js +29 -9
  463. package/dist/esm/co-sidebar.entry.js +3 -3
  464. package/dist/esm/co-skeleton.entry.js +24 -0
  465. package/dist/esm/co-slider.entry.js +3 -3
  466. package/dist/esm/co-switch.entry.js +6 -6
  467. package/dist/esm/co-tab-group.entry.js +2 -2
  468. package/dist/esm/co-tab.entry.js +3 -3
  469. package/dist/esm/co-tags-field.entry.js +19 -13
  470. package/dist/esm/co-textarea.entry.js +11 -7
  471. package/dist/esm/co-toast.entry.js +2 -2
  472. package/dist/esm/co-toggle-button-group.entry.js +4 -4
  473. package/dist/esm/co-toggle-button.entry.js +4 -4
  474. package/dist/esm/co-tooltip.entry.js +51 -16
  475. package/dist/esm/co-transfer-list.entry.js +3 -3
  476. package/dist/esm/co-video.entry.js +837 -0
  477. package/dist/esm/cobalt.js +3 -3
  478. package/dist/esm/{dates-CyYF8IJE.js → dates-tPYikBRJ.js} +1 -1
  479. package/dist/esm/fieldChip-GPikjpYw.js +5 -0
  480. package/dist/esm/{index-BKmfyPZK.js → index-CYsftTKf.js} +45 -21
  481. package/dist/esm/{index-BjAqSidM.js → index-w_Wxgclf.js} +14508 -6305
  482. package/dist/esm/loader.js +3 -3
  483. package/dist/esm/overlayAfterClose-Ch1jfwZ2.js +10 -0
  484. package/dist/{cjs/sanitizer-CjHZAkOm.js → esm/purify.es-B2QLgWrz.js} +1 -110
  485. package/dist/esm/{requiredMark-DFvtYtkE.js → requiredMark-CEbXKHcU.js} +1 -1
  486. package/dist/esm/richTextI18n-B-ckjCUA.js +380 -0
  487. package/dist/esm/toolbar-config-ChibIpZv.js +212 -0
  488. package/dist/esm/tz-B6JZk8fL.js +119 -0
  489. package/dist/types/components/co-autocomplete/co-autocomplete.d.ts +2 -0
  490. package/dist/types/components/co-avatar/co-avatar.d.ts +2 -0
  491. package/dist/types/components/co-avatar-group/co-avatar-group.d.ts +33 -0
  492. package/dist/types/components/co-bottom-sheet/co-bottom-sheet.d.ts +81 -0
  493. package/dist/types/components/co-button/co-button.d.ts +3 -1
  494. package/dist/types/components/co-calendar-month/co-calendar-month.d.ts +83 -0
  495. package/dist/types/components/co-chip/co-chip.d.ts +7 -2
  496. package/dist/types/components/co-color-picker/co-color-picker.d.ts +2 -0
  497. package/dist/types/components/co-command-search/co-command-search.d.ts +39 -6
  498. package/dist/types/components/co-command-search/commandSearchGroup.d.ts +20 -0
  499. package/dist/types/components/co-command-search/commandSearchLogic.d.ts +17 -0
  500. package/dist/types/components/co-data-table/co-data-table.d.ts +2 -1
  501. package/dist/types/components/co-event-calendar/co-event-calendar.d.ts +110 -0
  502. package/dist/types/components/co-icon/co-icon.d.ts +1 -1
  503. package/dist/types/components/co-icon/iconLoader.d.ts +6 -0
  504. package/dist/types/components/co-icon-button/co-icon-button.d.ts +2 -0
  505. package/dist/types/components/co-json-field/co-json-field.d.ts +3 -0
  506. package/dist/types/components/co-list-footer/co-list-footer.d.ts +26 -0
  507. package/dist/types/components/co-list-item/co-list-item.d.ts +11 -0
  508. package/dist/types/components/co-modal/co-modal.d.ts +6 -0
  509. package/dist/types/components/co-number-field/co-number-field.d.ts +13 -0
  510. package/dist/types/components/co-overlay/co-overlay.d.ts +45 -0
  511. package/dist/types/components/co-overlay/focusTrap.d.ts +20 -0
  512. package/dist/types/components/co-overlay/overlayAfterClose.d.ts +5 -0
  513. package/dist/types/components/co-phone-field/co-phone-field.d.ts +2 -0
  514. package/dist/types/components/co-popover/co-popover.d.ts +9 -0
  515. package/dist/types/components/co-progress-bar/co-progress-bar.d.ts +2 -0
  516. package/dist/types/components/co-ref-field/co-ref-field.d.ts +17 -2
  517. package/dist/types/components/co-rich-text-editor/co-rich-text-editor.d.ts +161 -9
  518. package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +119 -13
  519. package/dist/types/components/co-rich-text-viewer/co-rich-text-viewer.d.ts +1 -14
  520. package/dist/types/components/co-skeleton/co-skeleton.d.ts +13 -0
  521. package/dist/types/components/co-tags-field/co-tags-field.d.ts +2 -0
  522. package/dist/types/components/co-textarea/co-textarea.d.ts +3 -0
  523. package/dist/types/components/co-tooltip/co-tooltip.d.ts +12 -0
  524. package/dist/types/components/co-video/co-video.d.ts +203 -0
  525. package/dist/types/components.d.ts +1729 -72
  526. package/dist/types/utils/fieldChip.d.ts +37 -0
  527. package/dist/types/utils/icon-config.d.ts +11 -0
  528. package/dist/types/utils/richTextI18n.d.ts +130 -0
  529. package/dist/types/utils/sheetGesture.d.ts +31 -0
  530. package/package.json +3 -2
  531. package/dist/cjs/co-loader.cjs.entry.js +0 -34
  532. package/dist/cjs/co-overlay.cjs.entry.js +0 -23
  533. package/dist/cobalt/p-0a6d8061.entry.js +0 -1
  534. package/dist/cobalt/p-0bf288cd.entry.js +0 -1
  535. package/dist/cobalt/p-136bdbd2.entry.js +0 -1
  536. package/dist/cobalt/p-15708d32.entry.js +0 -1
  537. package/dist/cobalt/p-1578b019.entry.js +0 -1
  538. package/dist/cobalt/p-23d48581.entry.js +0 -1
  539. package/dist/cobalt/p-2718ff27.entry.js +0 -1
  540. package/dist/cobalt/p-2b4d8535.entry.js +0 -1
  541. package/dist/cobalt/p-3190d715.entry.js +0 -1
  542. package/dist/cobalt/p-41228dce.entry.js +0 -1
  543. package/dist/cobalt/p-44672953.entry.js +0 -1
  544. package/dist/cobalt/p-53ce9023.entry.js +0 -1
  545. package/dist/cobalt/p-5e7141aa.entry.js +0 -1
  546. package/dist/cobalt/p-5f905739.entry.js +0 -1
  547. package/dist/cobalt/p-6678ac0a.entry.js +0 -1
  548. package/dist/cobalt/p-66a912dd.entry.js +0 -1
  549. package/dist/cobalt/p-6759ee1c.entry.js +0 -1
  550. package/dist/cobalt/p-69a40bfd.entry.js +0 -1
  551. package/dist/cobalt/p-6a6a62cb.entry.js +0 -1
  552. package/dist/cobalt/p-6d43b6cd.entry.js +0 -1
  553. package/dist/cobalt/p-759c3dd0.entry.js +0 -1
  554. package/dist/cobalt/p-782f729f.entry.js +0 -1
  555. package/dist/cobalt/p-83b89bf8.entry.js +0 -1
  556. package/dist/cobalt/p-88dc561a.entry.js +0 -1
  557. package/dist/cobalt/p-8c27aff7.entry.js +0 -1
  558. package/dist/cobalt/p-996179f7.entry.js +0 -1
  559. package/dist/cobalt/p-9c533830.entry.js +0 -1
  560. package/dist/cobalt/p-9d89bf47.entry.js +0 -1
  561. package/dist/cobalt/p-BKmfyPZK.js +0 -2
  562. package/dist/cobalt/p-BchB6Hdr.js +0 -1
  563. package/dist/cobalt/p-DcK0GGZC.js +0 -2
  564. package/dist/cobalt/p-Qqq8fysz.js +0 -1
  565. package/dist/cobalt/p-aa17c70b.entry.js +0 -1
  566. package/dist/cobalt/p-ad4c1b41.entry.js +0 -1
  567. package/dist/cobalt/p-ae4d3207.entry.js +0 -1
  568. package/dist/cobalt/p-af64da37.entry.js +0 -1
  569. package/dist/cobalt/p-c6a242e4.entry.js +0 -1
  570. package/dist/cobalt/p-cd57e8b4.entry.js +0 -1
  571. package/dist/cobalt/p-ce3a535f.entry.js +0 -1
  572. package/dist/cobalt/p-d958566a.entry.js +0 -1
  573. package/dist/cobalt/p-dd873bf8.entry.js +0 -1
  574. package/dist/cobalt/p-e4de8865.entry.js +0 -1
  575. package/dist/cobalt/p-eba0bf7f.entry.js +0 -1
  576. package/dist/cobalt/p-fad3605d.entry.js +0 -1
  577. package/dist/cobalt/p-ff2690e5.entry.js +0 -1
  578. package/dist/components/p-BXdfh__-.js +0 -1
  579. package/dist/components/p-BchB6Hdr.js +0 -1
  580. package/dist/components/p-BiW0ubLs.js +0 -1
  581. package/dist/components/p-CaMgu2_g.js +0 -1
  582. package/dist/components/p-DBhNS7JD.js +0 -1
  583. package/dist/components/p-DPi_U-Kl.js +0 -1
  584. package/dist/components/p-DcK0GGZC.js +0 -2
  585. package/dist/components/p-MiSJXuBx.js +0 -1
  586. package/dist/components/p-Sgn-2g8m.js +0 -1
  587. package/dist/components/p-jDjfGZJp.js +0 -1
  588. package/dist/components/p-o8hrDIKe.js +0 -1
  589. package/dist/esm/co-loader.entry.js +0 -32
  590. package/dist/esm/co-overlay.entry.js +0 -21
@@ -33,31 +33,45 @@ co-rich-text-editor {
33
33
  line-height: 1;
34
34
  }
35
35
 
36
- /* ---- Box (toolbar + content) ---- */
37
- .co-rich-text-editor__box {
36
+ /* ---- Frame (toolbar + box — visual container) ---- */
37
+ .co-rich-text-editor__frame {
38
38
  display: flex;
39
39
  flex-direction: column;
40
40
  background: var(--co-semantic-surface-secondary);
41
41
  border: 1px solid var(--co-semantic-border-subtle);
42
42
  border-radius: var(--co-border-radius-xs);
43
43
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
44
- overflow: hidden;
44
+ min-height: 0;
45
+ flex: 1;
46
+ position: relative;
47
+ overflow: visible;
48
+ }
49
+
50
+ /* ---- Box (scrollable content area) ---- */
51
+ .co-rich-text-editor__box {
52
+ display: flex;
53
+ flex-direction: column;
54
+ min-height: 0;
55
+ flex: 1;
56
+ position: relative;
57
+ overflow-y: auto;
58
+ overflow-x: hidden;
45
59
  }
46
60
 
47
- .co-rich-text-editor--focused .co-rich-text-editor__box {
48
- border-color: var(--co-semantic-border-focus, var(--co-color-primary-azul));
61
+ .co-rich-text-editor--focused .co-rich-text-editor__frame {
62
+ border-color: var(--co-semantic-border-focus, var(--co-color-base-negro, #1a1a1a));
49
63
  box-shadow: 0 0 0 3px var(--co-semantic-border-focus-ring, rgba(37, 99, 235, 0.15));
50
64
  }
51
65
 
52
- .co-rich-text-editor--error .co-rich-text-editor__box {
66
+ .co-rich-text-editor--error .co-rich-text-editor__frame {
53
67
  border-color: var(--co-color-status-error);
54
68
  }
55
- .co-rich-text-editor--success .co-rich-text-editor__box {
69
+ .co-rich-text-editor--success .co-rich-text-editor__frame {
56
70
  border-color: var(--co-color-status-success);
57
71
  }
58
72
 
59
- .co-rich-text-editor--disabled .co-rich-text-editor__box,
60
- .co-rich-text-editor--readonly .co-rich-text-editor__box {
73
+ .co-rich-text-editor--disabled .co-rich-text-editor__frame,
74
+ .co-rich-text-editor--readonly .co-rich-text-editor__frame {
61
75
  opacity: 0.7;
62
76
  cursor: not-allowed;
63
77
  }
@@ -78,16 +92,28 @@ co-rich-text-editor {
78
92
  }
79
93
 
80
94
  /* ---- Editable surface ---- */
95
+ .co-rich-text-editor__toolbar {
96
+ position: relative;
97
+ flex-shrink: 0;
98
+ /* Must sit above the selection bubble (z-index 50) so toolbar dropdowns,
99
+ color pickers and panels render on top of it instead of being crossed. */
100
+ z-index: 60;
101
+ }
102
+
81
103
  .co-rte-content {
82
- padding: var(--co-spacing-md) var(--co-spacing-md);
83
104
  min-height: 96px;
84
105
  color: var(--co-semantic-text-default);
106
+ flex: 1 0 auto;
107
+ display: flex;
108
+ flex-direction: column;
85
109
  }
86
110
 
87
111
  .co-rte-content .ProseMirror {
88
112
  outline: none;
89
- min-height: 72px;
113
+ flex: 1 0 auto;
90
114
  line-height: 1.5;
115
+ padding: var(--co-spacing-md);
116
+ box-sizing: border-box;
91
117
  }
92
118
 
93
119
  .co-rte-content .ProseMirror p {
@@ -97,6 +123,28 @@ co-rich-text-editor {
97
123
  margin-bottom: 0;
98
124
  }
99
125
 
126
+ /* Defensive: some host apps ship aggressive global resets like
127
+ `.tiptap p { margin: 0 !important }` (e.g. a legacy editor whose styles are
128
+ imported unscoped). ProseMirror also carries the `.tiptap` class, so those
129
+ leak in and collapse paragraph spacing. Re-assert top-level paragraph spacing
130
+ with a more specific selector so it survives. (Indent sets margin-left inline
131
+ with `!important`, which still wins — different property.) */
132
+ .co-rte-content .ProseMirror > p {
133
+ margin-bottom: var(--co-spacing-sm) !important;
134
+ }
135
+ .co-rte-content .ProseMirror > p:last-child {
136
+ margin-bottom: 0 !important;
137
+ }
138
+
139
+ /* Text alignment (TextAlign extension renders text-align inline; these
140
+ guarantee justify spreads to the last line consistently). */
141
+ .co-rte-content .ProseMirror [style*="text-align: justify"] {
142
+ text-align-last: left;
143
+ }
144
+ .co-rte-content .ProseMirror [style*="text-align: center"] { text-align: center; }
145
+ .co-rte-content .ProseMirror [style*="text-align: right"] { text-align: right; }
146
+
147
+ .co-rte-content .ProseMirror h1,
100
148
  .co-rte-content .ProseMirror h2,
101
149
  .co-rte-content .ProseMirror h3,
102
150
  .co-rte-content .ProseMirror h4 {
@@ -104,6 +152,7 @@ co-rich-text-editor {
104
152
  font-weight: 600;
105
153
  line-height: 1.3;
106
154
  }
155
+ .co-rte-content .ProseMirror h1 { font-size: var(--co-font-size-28, 28px); }
107
156
  .co-rte-content .ProseMirror h2 { font-size: var(--co-font-size-20, 20px); }
108
157
  .co-rte-content .ProseMirror h3 { font-size: var(--co-font-size-16, 16px); }
109
158
 
@@ -113,6 +162,45 @@ co-rich-text-editor {
113
162
  margin: 0 0 var(--co-spacing-sm) 0;
114
163
  }
115
164
 
165
+ /* ---- Task lists (checklists) ---- */
166
+ .co-rte-content .ProseMirror ul[data-type="taskList"] {
167
+ list-style: none;
168
+ padding-left: 0;
169
+ margin: 0 0 var(--co-spacing-sm) 0;
170
+ }
171
+ .co-rte-content .ProseMirror ul[data-type="taskList"] li {
172
+ display: flex;
173
+ align-items: flex-start;
174
+ gap: var(--co-spacing-sm, 8px);
175
+ }
176
+ .co-rte-content .ProseMirror ul[data-type="taskList"] li > label {
177
+ flex: 0 0 auto;
178
+ margin-top: 0.15em;
179
+ user-select: none;
180
+ }
181
+ .co-rte-content .ProseMirror ul[data-type="taskList"] li > div {
182
+ flex: 1 1 auto;
183
+ min-width: 0;
184
+ }
185
+ .co-rte-content .ProseMirror ul[data-type="taskList"] li > div > p {
186
+ margin: 0;
187
+ }
188
+ .co-rte-content .ProseMirror ul[data-type="taskList"] input[type="checkbox"] {
189
+ width: 16px;
190
+ height: 16px;
191
+ cursor: pointer;
192
+ accent-color: var(--co-color-base-negro, #1a1a1a);
193
+ }
194
+ /* Variant "strike" (default): completed items get struck through + dimmed. */
195
+ .co-rte-content .ProseMirror ul[data-type="taskList"][data-variant="strike"] li[data-checked="true"] > div {
196
+ text-decoration: line-through;
197
+ color: var(--co-semantic-text-muted, #999);
198
+ }
199
+ /* Variant "plain": completed items keep normal text (no strikethrough). */
200
+ .co-rte-content .ProseMirror ul[data-type="taskList"][data-variant="plain"] li[data-checked="true"] > div {
201
+ text-decoration: none;
202
+ }
203
+
116
204
  .co-rte-content .ProseMirror blockquote {
117
205
  border-left: 3px solid var(--co-semantic-border-default, var(--co-semantic-border-subtle));
118
206
  padding-left: var(--co-spacing-md);
@@ -121,8 +209,9 @@ co-rich-text-editor {
121
209
  }
122
210
 
123
211
  .co-rte-content .ProseMirror a {
124
- color: var(--co-color-primary-azul);
212
+ color: var(--co-color-base-negro, #1a1a1a);
125
213
  text-decoration: underline;
214
+ text-underline-offset: 2px;
126
215
  }
127
216
 
128
217
  .co-rte-content .ProseMirror img {
@@ -130,10 +219,102 @@ co-rich-text-editor {
130
219
  height: auto;
131
220
  border-radius: var(--co-border-radius-xs);
132
221
  margin: var(--co-spacing-sm) 0;
222
+ cursor: default;
223
+ -webkit-user-drag: none;
224
+ user-select: none;
133
225
  }
134
226
 
135
227
  .co-rte-content .ProseMirror img.ProseMirror-selectednode {
136
- outline: 2px solid var(--co-semantic-border-focus, var(--co-color-primary-azul));
228
+ outline: 2px solid var(--co-color-base-negro, #1a1a1a);
229
+ }
230
+ .co-rte-content [data-resize-container].ProseMirror-selectednode {
231
+ outline: 2px solid var(--co-color-base-negro, #1a1a1a);
232
+ outline-offset: 0px;
233
+ border-radius: 0;
234
+ }
235
+
236
+ /* Image resize handles (TipTap v3 ResizableNodeView) */
237
+ .co-rte-content [data-resize-container] {
238
+ position: relative;
239
+ display: inline-block;
240
+ width: fit-content;
241
+ max-width: 100%;
242
+ margin: var(--co-spacing-sm) 0;
243
+ line-height: 0;
244
+ }
245
+
246
+ .co-rte-content [data-resize-container][data-resize-state="true"] {
247
+ outline: 2px solid var(--co-color-base-negro, #1a1a1a);
248
+ outline-offset: 0px;
249
+ border-radius: 0;
250
+ }
251
+
252
+ .co-rte-content [data-resize-wrapper] {
253
+ position: relative;
254
+ display: inline-block;
255
+ line-height: 0;
256
+ }
257
+
258
+ /* Hide handles by default — show only when selected */
259
+ .co-rte-content [data-resize-handle] {
260
+ width: 10px;
261
+ height: 10px;
262
+ background: var(--co-color-base-negro, #1a1a1a);
263
+ border: 1.5px solid #fff;
264
+ border-radius: 50%;
265
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);
266
+ z-index: 5;
267
+ opacity: 0;
268
+ pointer-events: none;
269
+ }
270
+
271
+ .co-rte-content [data-resize-container][data-resize-state="true"] [data-resize-handle],
272
+ .co-rte-content [data-resize-container].ProseMirror-selectednode [data-resize-handle] {
273
+ opacity: 1;
274
+ pointer-events: auto;
275
+ }
276
+
277
+ /* Corner handles */
278
+ .co-rte-content [data-resize-handle="top-left"] { cursor: nw-resize; }
279
+ .co-rte-content [data-resize-handle="top-right"] { cursor: ne-resize; }
280
+ .co-rte-content [data-resize-handle="bottom-left"] { cursor: sw-resize; }
281
+ .co-rte-content [data-resize-handle="bottom-right"] { cursor: se-resize; }
282
+
283
+ /* Edge handles: bars */
284
+ .co-rte-content [data-resize-handle="top"],
285
+ .co-rte-content [data-resize-handle="bottom"] {
286
+ width: 30px;
287
+ height: 6px;
288
+ border-radius: 3px;
289
+ left: 50% !important;
290
+ transform: translateX(-50%);
291
+ }
292
+ .co-rte-content [data-resize-handle="top"] { cursor: n-resize; }
293
+ .co-rte-content [data-resize-handle="bottom"] { cursor: s-resize; }
294
+
295
+ .co-rte-content [data-resize-handle="left"],
296
+ .co-rte-content [data-resize-handle="right"] {
297
+ width: 6px;
298
+ height: 30px;
299
+ border-radius: 3px;
300
+ top: 50% !important;
301
+ transform: translateY(-50%);
302
+ }
303
+ .co-rte-content [data-resize-handle="left"] { cursor: w-resize; }
304
+ .co-rte-content [data-resize-handle="right"] { cursor: e-resize; }
305
+
306
+ .co-rte-content [data-resize-container] img {
307
+ max-width: 100%;
308
+ display: block;
309
+ border-radius: 0;
310
+ margin: 0;
311
+ }
312
+
313
+
314
+ .co-rte-content .ProseMirror hr {
315
+ border: none;
316
+ border-top: 1px solid var(--co-semantic-border-default, #e0e0e0);
317
+ margin: var(--co-spacing-lg) 0;
137
318
  }
138
319
 
139
320
  .co-rte-content .ProseMirror code {
@@ -144,6 +325,22 @@ co-rich-text-editor {
144
325
  border-radius: var(--co-border-radius-xxs);
145
326
  }
146
327
 
328
+ .co-rte-content .ProseMirror pre {
329
+ font-family: var(--co-font-family-mono);
330
+ font-size: 0.9em;
331
+ background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));
332
+ padding: var(--co-spacing-md);
333
+ border-radius: var(--co-border-radius-xs);
334
+ overflow-x: auto;
335
+ margin: var(--co-spacing-sm) 0;
336
+ }
337
+
338
+ .co-rte-content .ProseMirror pre code {
339
+ background: none;
340
+ padding: 0;
341
+ border-radius: 0;
342
+ }
343
+
147
344
  /* Placeholder (from @tiptap/extensions) */
148
345
  .co-rte-content .ProseMirror p.is-editor-empty:first-child::before {
149
346
  content: attr(data-placeholder);
@@ -159,7 +356,7 @@ co-rich-text-editor {
159
356
  display: inline-block;
160
357
  padding: 0.05em 0.4em;
161
358
  border-radius: var(--co-border-radius-xxs);
162
- background: var(--co-color-primary-azul);
359
+ background: var(--co-color-base-negro, #1a1a1a);
163
360
  color: var(--co-color-base-blanco, #fff);
164
361
  font-size: 0.9em;
165
362
  white-space: nowrap;
@@ -194,45 +391,932 @@ co-rich-text-editor {
194
391
  font-size: var(--co-font-size-12, 12px);
195
392
  }
196
393
 
197
- /* ── Horizontal layout: label left; control + helper stacked right ──
198
- Set --co-field-label-width on a container to align labels across fields.
199
- Light DOM (shadow:false) attribute selector on the tag, not :host. */
200
- co-rich-text-editor[layout='horizontal'] .co-rich-text-editor {
201
- display: grid;
202
- grid-template-columns: var(--co-field-label-width, max-content) 1fr;
203
- align-items: start;
204
- column-gap: var(--co-spacing-md);
205
- row-gap: var(--co-spacing-sm2);
394
+ /* ---- Bubble menu ---- */
395
+ /* Suppressed while a toolbar dropdown is open (prevents overlap). The
396
+ !important beats the BubbleMenu plugin's inline display writes. */
397
+ .co-rte-bubble.co-rte-bubble--suppressed {
398
+ display: none !important;
206
399
  }
207
400
 
208
- co-rich-text-editor[layout='horizontal'] .co-rich-text-editor__labels {
209
- grid-column: 1;
210
- grid-row: 1;
211
- padding-top: var(--co-spacing-sm2);
212
- min-width: 0;
401
+ .co-rte-bubble {
402
+ position: absolute;
403
+ z-index: 50;
404
+ display: flex;
405
+ flex-direction: row;
406
+ align-items: center;
407
+ gap: 2px;
408
+ padding: var(--co-spacing-xs, 4px) var(--co-spacing-sm, 8px);
409
+ background: var(--co-semantic-surface-secondary, #fff);
410
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
411
+ border-radius: var(--co-border-radius-xs, 8px);
412
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
413
+ user-select: none;
414
+ white-space: nowrap;
415
+ }
416
+
417
+ .co-rte-bubble__drag-handle {
418
+ display: flex;
419
+ align-items: center;
420
+ justify-content: center;
421
+ cursor: grab;
422
+ color: var(--co-semantic-text-muted, #999);
423
+ width: 18px;
424
+ height: 28px;
425
+ margin: 0 2px 0 0;
426
+ flex-shrink: 0;
427
+ }
428
+
429
+ .co-rte-bubble__drag-handle:hover {
430
+ color: var(--co-semantic-text-secondary, #555);
431
+ }
432
+
433
+ .co-rte-bubble__drag-handle:active {
434
+ cursor: grabbing;
435
+ }
436
+
437
+ .co-rte-bubble__row {
438
+ display: flex;
439
+ align-items: center;
440
+ gap: 2px;
441
+ flex-wrap: nowrap;
442
+ }
443
+
444
+ .co-rte-bubble__btn {
445
+ display: inline-flex;
446
+ align-items: center;
447
+ justify-content: center;
448
+ width: 28px;
449
+ height: 28px;
450
+ padding: 0;
451
+ border: none;
452
+ border-radius: var(--co-border-radius-xxs, 4px);
453
+ background: transparent;
454
+ color: var(--co-semantic-text-default, #333);
455
+ cursor: pointer;
456
+ }
457
+
458
+ .co-rte-bubble__btn:hover:not(.co-rte-bubble__btn--active) {
459
+ background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));
460
+ }
461
+
462
+ .co-rte-bubble__btn--active {
463
+ background: var(--co-color-base-negro, #1a1a1a);
464
+ color: var(--co-color-base-blanco, #fff);
465
+ }
466
+
467
+ .co-rte-bubble__btn--active:hover {
468
+ background: var(--co-color-base-negro, #333);
469
+ }
470
+
471
+ .co-rte-bubble__sep {
472
+ display: inline-block;
473
+ width: 1px;
474
+ height: 18px;
475
+ margin: 0 4px;
476
+ background: var(--co-semantic-border-default, rgba(0, 0, 0, 0.12));
477
+ flex-shrink: 0;
213
478
  }
214
479
 
215
- co-rich-text-editor[layout='horizontal'] .co-rich-text-editor__label {
480
+ /* ── Bubble select (compact dropdown) ── */
481
+ .co-rte-bubble__select {
482
+ position: relative;
483
+ }
484
+
485
+ .co-rte-bubble__select-trigger {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: 2px;
489
+ height: 28px;
490
+ padding: 0 6px;
491
+ border: 1px solid transparent;
492
+ border-radius: var(--co-border-radius-xxs, 4px);
493
+ background: transparent;
494
+ color: var(--co-semantic-text-default, #333);
495
+ font-family: var(--co-font-family-primary);
496
+ font-size: 11px;
497
+ cursor: pointer;
498
+ white-space: nowrap;
499
+ transition: background 0.12s, border-color 0.12s;
500
+ }
501
+
502
+ .co-rte-bubble__select-trigger:hover {
503
+ background: var(--co-semantic-surface-hover, #f5f5f5);
504
+ border-color: var(--co-semantic-border-default, #e0e0e0);
505
+ }
506
+
507
+ .co-rte-bubble__select-label {
508
+ max-width: 72px;
509
+ overflow: hidden;
510
+ text-overflow: ellipsis;
511
+ }
512
+
513
+ /* Font family select: wider trigger */
514
+ .co-rte-bubble__select--font .co-rte-bubble__select-label {
515
+ max-width: 110px;
516
+ }
517
+
518
+ .co-rte-bubble__select-dropdown {
519
+ position: absolute;
520
+ bottom: 100%;
521
+ left: 0;
522
+ z-index: 120;
523
+ min-width: 100px;
524
+ max-height: 260px;
525
+ overflow-y: auto;
526
+ padding: var(--co-spacing-xxs, 2px);
527
+ background: var(--co-semantic-surface-secondary, #fff);
528
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
529
+ border-radius: var(--co-border-radius-xxs, 4px);
530
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
531
+ margin-bottom: 4px;
216
532
  white-space: normal;
217
533
  }
218
534
 
219
- co-rich-text-editor[layout='horizontal'] .co-rich-text-editor > :not(.co-rich-text-editor__labels) {
220
- grid-column: 2;
221
- min-width: 0;
535
+ /* Position flipping via data-position attribute */
536
+ .co-rte-bubble__select-dropdown[data-position="above"] {
537
+ bottom: 100%;
538
+ top: auto;
539
+ margin-bottom: 4px;
540
+ margin-top: 0;
541
+ }
542
+
543
+ .co-rte-bubble__select-dropdown[data-position="below"] {
544
+ top: 100%;
545
+ bottom: auto;
546
+ margin-top: 4px;
547
+ margin-bottom: 0;
548
+ }
549
+
550
+ .co-rte-bubble__select-option {
551
+ display: block;
552
+ width: 100%;
553
+ padding: 4px 8px;
554
+ border: none;
555
+ border-radius: 3px;
556
+ background: transparent;
557
+ color: var(--co-semantic-text-default, #333);
558
+ font-family: var(--co-font-family-primary);
559
+ font-size: 12px;
560
+ text-align: left;
561
+ cursor: pointer;
562
+ white-space: nowrap;
563
+ }
564
+
565
+ .co-rte-bubble__select-option:hover {
566
+ background: var(--co-semantic-surface-hover, #f5f5f5);
567
+ }
568
+
569
+ /* ── Font family dropdown (with search) ── */
570
+ .co-rte-bubble__select-dropdown--font {
571
+ min-width: 200px;
572
+ max-height: 320px;
573
+ overflow: hidden;
574
+ overflow-y: auto;
575
+ display: flex;
576
+ flex-direction: column;
577
+ white-space: normal;
578
+ }
579
+
580
+ .co-rte-bubble__font-search {
581
+ padding: 6px 6px 4px;
582
+ flex-shrink: 0;
583
+ }
584
+
585
+ .co-rte-bubble__font-search-input {
586
+ width: 100%;
587
+ padding: 4px 8px;
588
+ border: 1px solid var(--co-semantic-border-default, #ccc);
589
+ border-radius: 4px;
590
+ background: var(--co-semantic-surface-secondary, #fff);
591
+ color: var(--co-semantic-text-default, #333);
592
+ font-family: var(--co-font-family-primary);
593
+ font-size: 12px;
594
+ outline: none;
595
+ box-sizing: border-box;
596
+ }
597
+
598
+ .co-rte-bubble__font-search-input:focus {
599
+ border-color: var(--co-color-base-negro, #1a1a1a);
222
600
  }
223
601
 
224
- .co-field-required {
225
- margin-left: 2px;
226
- color: var(--co-color-status-error);
602
+ .co-rte-bubble__font-list {
603
+ max-height: 260px;
604
+ overflow-y: auto;
605
+ padding: 0 var(--co-spacing-xxs, 2px) var(--co-spacing-xxs, 2px);
227
606
  }
228
607
 
229
- .co-field-required__caption {
608
+ .co-rte-bubble__font-section-header {
609
+ padding: 6px 8px 2px;
610
+ font-size: 11px;
611
+ font-weight: 600;
612
+ color: var(--co-semantic-text-muted, #888);
613
+ text-transform: uppercase;
614
+ letter-spacing: 0.5px;
615
+ }
616
+
617
+ .co-rte-bubble__font-empty {
618
+ padding: 12px 8px;
619
+ text-align: center;
620
+ color: var(--co-semantic-text-muted, #888);
621
+ font-size: 12px;
622
+ }
623
+
624
+ /* ── Bubble color picker ── */
625
+ .co-rte-bubble__color {
626
+ position: relative;
627
+ }
628
+
629
+ .co-rte-bubble__color-dropdown {
630
+ position: absolute;
631
+ bottom: 100%;
632
+ left: 50%;
633
+ transform: translateX(-50%);
634
+ z-index: 120;
635
+ width: 224px;
636
+ padding: var(--co-spacing-sm, 8px);
637
+ background: var(--co-semantic-surface-secondary, #fff);
638
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
639
+ border-radius: var(--co-border-radius-xs, 8px);
640
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
641
+ margin-bottom: 4px;
642
+ white-space: normal;
643
+ /* Prevent horizontal overflow */
644
+ max-width: calc(100vw - 16px);
645
+ }
646
+
647
+ .co-rte-bubble__color-dropdown[data-position="above"] {
648
+ bottom: 100%;
649
+ top: auto;
650
+ margin-bottom: 4px;
651
+ margin-top: 0;
652
+ }
653
+
654
+ .co-rte-bubble__color-dropdown[data-position="below"] {
655
+ top: 100%;
656
+ bottom: auto;
657
+ margin-top: 4px;
658
+ margin-bottom: 0;
659
+ }
660
+
661
+ .co-rte-bubble__color-grid {
662
+ display: grid;
663
+ grid-template-columns: repeat(10, 1fr);
664
+ gap: 2px;
665
+ }
666
+
667
+ .co-rte-bubble__color-swatch {
668
+ width: 20px;
669
+ height: 20px;
670
+ padding: 0;
671
+ border: none;
672
+ border-radius: 3px;
673
+ cursor: pointer;
674
+ transition: transform 0.1s, box-shadow 0.1s;
675
+ }
676
+
677
+ .co-rte-bubble__color-swatch:hover {
678
+ transform: scale(1.2);
679
+ box-shadow: 0 0 0 2px var(--co-color-base-negro, #1a1a1a);
680
+ }
681
+
682
+ .co-rte-bubble__color-hex {
683
+ display: flex;
684
+ align-items: center;
685
+ gap: 4px;
686
+ margin-top: 6px;
687
+ }
688
+
689
+ .co-rte-bubble__color-hex-input {
690
+ width: 100%;
691
+ padding: 3px 6px;
692
+ border: 1px solid var(--co-semantic-border-default, #ccc);
693
+ border-radius: 3px;
694
+ background: var(--co-semantic-surface-secondary, #fff);
695
+ color: var(--co-semantic-text-default, #333);
696
+ font-family: var(--co-font-family-mono, monospace);
697
+ font-size: 11px;
698
+ outline: none;
699
+ }
700
+
701
+ .co-rte-bubble__color-hex-input:focus {
702
+ border-color: var(--co-color-base-negro, #1a1a1a);
703
+ }
704
+
705
+ .co-rte-bubble__color-clear {
706
+ display: flex;
707
+ align-items: center;
708
+ gap: 4px;
709
+ width: 100%;
710
+ padding: 3px 6px;
711
+ margin-top: 4px;
712
+ border: none;
713
+ background: transparent;
714
+ color: var(--co-semantic-text-secondary, #666);
715
+ font-family: var(--co-font-family-primary);
716
+ font-size: 11px;
717
+ cursor: pointer;
718
+ border-radius: 3px;
719
+ }
720
+
721
+ .co-rte-bubble__color-clear:hover {
722
+ background: var(--co-semantic-surface-hover, #f5f5f5);
723
+ }
724
+
725
+ /* Bubble link form */
726
+ .co-rte-bubble__link-form {
727
+ display: flex;
728
+ align-items: center;
729
+ gap: 4px;
230
730
  margin-left: 4px;
231
- color: var(--co-semantic-text-muted);
232
- font-size: var(--co-font-size-12);
233
- font-weight: 400;
234
731
  }
235
732
 
236
- .co-field-required__caption::before {
237
- content: var(--co-field-required-text, ' (required)');
733
+ .co-rte-bubble__link-input {
734
+ width: 160px;
735
+ padding: 3px 8px;
736
+ border: 1px solid var(--co-semantic-border-default, #ccc);
737
+ border-radius: 4px;
738
+ background: var(--co-semantic-surface-secondary, #fff);
739
+ color: var(--co-semantic-text-default, #333);
740
+ font-family: var(--co-font-family-primary);
741
+ font-size: 12px;
742
+ outline: none;
743
+ }
744
+
745
+ .co-rte-bubble__link-input::placeholder {
746
+ color: var(--co-semantic-text-muted, #999);
238
747
  }
748
+
749
+ .co-rte-bubble__link-input:focus {
750
+ border-color: var(--co-color-base-negro, #1a1a1a);
751
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
752
+ }
753
+
754
+ .co-rte-bubble__link-btn {
755
+ display: inline-flex;
756
+ align-items: center;
757
+ justify-content: center;
758
+ width: 24px;
759
+ height: 24px;
760
+ padding: 0;
761
+ border: none;
762
+ border-radius: 4px;
763
+ background: var(--co-color-base-negro, #1a1a1a);
764
+ color: #fff;
765
+ cursor: pointer;
766
+ }
767
+
768
+ .co-rte-bubble__link-btn:hover {
769
+ opacity: 0.9;
770
+ }
771
+
772
+ .co-rte-bubble__link-unlink {
773
+ background: var(--co-semantic-surface-error, #ef4444);
774
+ }
775
+
776
+ /* ── Draggable panels (font size, weight, line height, letter spacing, bg color) ── */
777
+ .co-rte-bubble__panel {
778
+ position: absolute;
779
+ z-index: 140;
780
+ width: 230px;
781
+ background: var(--co-semantic-surface-secondary, #fff);
782
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
783
+ border-radius: var(--co-border-radius-xs, 8px);
784
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
785
+ overflow: hidden;
786
+ user-select: none;
787
+ }
788
+
789
+ .co-rte-bubble__panel-header {
790
+ display: flex;
791
+ align-items: center;
792
+ gap: 4px;
793
+ padding: 6px 8px;
794
+ border-bottom: 1px solid var(--co-semantic-border-subtle, #eee);
795
+ }
796
+
797
+ .co-rte-bubble__panel-drag {
798
+ cursor: grab;
799
+ display: flex;
800
+ align-items: center;
801
+ justify-content: center;
802
+ color: var(--co-semantic-text-muted, #999);
803
+ flex-shrink: 0;
804
+ }
805
+ .co-rte-bubble__panel-drag:active { cursor: grabbing; }
806
+
807
+ .co-rte-bubble__panel-title {
808
+ flex: 1;
809
+ font-size: 12px;
810
+ font-weight: 600;
811
+ color: var(--co-semantic-text-default, #333);
812
+ white-space: nowrap;
813
+ overflow: hidden;
814
+ text-overflow: ellipsis;
815
+ }
816
+
817
+ .co-rte-bubble__panel-close {
818
+ display: flex;
819
+ align-items: center;
820
+ justify-content: center;
821
+ width: 22px;
822
+ height: 22px;
823
+ border: none;
824
+ border-radius: 3px;
825
+ background: transparent;
826
+ color: var(--co-semantic-text-muted, #999);
827
+ cursor: pointer;
828
+ flex-shrink: 0;
829
+ }
830
+ .co-rte-bubble__panel-close:hover {
831
+ background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));
832
+ color: var(--co-semantic-text-default, #333);
833
+ }
834
+
835
+ .co-rte-bubble__panel-input-wrap {
836
+ padding: 6px 8px;
837
+ }
838
+
839
+ .co-rte-bubble__panel-input {
840
+ width: 100%;
841
+ padding: 4px 8px;
842
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
843
+ border-radius: 4px;
844
+ font-size: 12px;
845
+ font-family: inherit;
846
+ outline: none;
847
+ box-sizing: border-box;
848
+ background: var(--co-semantic-surface-secondary, #fff);
849
+ color: var(--co-semantic-text-default, #333);
850
+ }
851
+ .co-rte-bubble__panel-input:focus {
852
+ border-color: var(--co-color-base-negro, #1a1a1a);
853
+ }
854
+
855
+ .co-rte-bubble__panel-options {
856
+ max-height: 280px;
857
+ overflow-y: auto;
858
+ padding: 2px 4px 4px;
859
+ }
860
+
861
+ .co-rte-bubble__panel-option {
862
+ display: block;
863
+ width: 100%;
864
+ padding: 5px 8px;
865
+ border: none;
866
+ border-radius: 3px;
867
+ background: transparent;
868
+ cursor: pointer;
869
+ text-align: left;
870
+ font-family: inherit;
871
+ color: var(--co-semantic-text-default, #333);
872
+ }
873
+ .co-rte-bubble__panel-option:hover {
874
+ background: var(--co-semantic-surface-hover, #f5f5f5);
875
+ }
876
+
877
+ .co-rte-bubble__panel-sep {
878
+ height: 1px;
879
+ background: var(--co-semantic-border-subtle, #eee);
880
+ margin: 4px 8px;
881
+ }
882
+
883
+ /* Font weight panel: two-column option layout */
884
+ .co-rte-bubble__panel-opt-row {
885
+ display: flex;
886
+ justify-content: space-between;
887
+ align-items: center;
888
+ width: 100%;
889
+ }
890
+ .co-rte-bubble__panel-opt-value {
891
+ color: var(--co-semantic-text-muted, #999);
892
+ font-size: 11px;
893
+ font-weight: 400 !important;
894
+ min-width: 28px;
895
+ text-align: right;
896
+ }
897
+
898
+ /* Position flipping for panels */
899
+ .co-rte-bubble__panel[data-position="above"] {
900
+ bottom: 100%;
901
+ top: auto;
902
+ margin-bottom: 4px;
903
+ }
904
+ .co-rte-bubble__panel[data-position="below"] {
905
+ top: 100%;
906
+ bottom: auto;
907
+ margin-top: 4px;
908
+ }
909
+
910
+ /* ── Overflow menu (three-dots) ── */
911
+ .co-rte-bubble__overflow {
912
+ position: relative;
913
+ }
914
+
915
+ .co-rte-bubble__overflow-menu {
916
+ position: absolute;
917
+ bottom: 100%;
918
+ right: 0;
919
+ z-index: 130;
920
+ min-width: 230px;
921
+ padding: 4px;
922
+ background: var(--co-semantic-surface-secondary, #fff);
923
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
924
+ border-radius: var(--co-border-radius-xs, 8px);
925
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
926
+ margin-bottom: 4px;
927
+ }
928
+ .co-rte-bubble__overflow-menu[data-position="below"] {
929
+ top: 100%;
930
+ bottom: auto;
931
+ margin-top: 4px;
932
+ margin-bottom: 0;
933
+ }
934
+
935
+ .co-rte-bubble__overflow-item {
936
+ display: flex;
937
+ align-items: center;
938
+ gap: 8px;
939
+ width: 100%;
940
+ padding: 6px 8px;
941
+ border: none;
942
+ border-radius: 4px;
943
+ background: transparent;
944
+ font-family: inherit;
945
+ font-size: 13px;
946
+ color: var(--co-semantic-text-default, #333);
947
+ cursor: pointer;
948
+ text-align: left;
949
+ white-space: nowrap;
950
+ }
951
+ .co-rte-bubble__overflow-item:hover {
952
+ background: var(--co-semantic-surface-hover, #f5f5f5);
953
+ }
954
+ .co-rte-bubble__overflow-item--active {
955
+ background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));
956
+ color: var(--co-color-base-negro, #1a1a1a);
957
+ font-weight: 600;
958
+ }
959
+
960
+ .co-rte-bubble__overflow-value {
961
+ margin-left: auto;
962
+ color: var(--co-semantic-text-muted, #999);
963
+ font-size: 11px;
964
+ }
965
+
966
+ .co-rte-bubble__overflow-sep {
967
+ height: 1px;
968
+ background: var(--co-semantic-border-subtle, #eee);
969
+ margin: 3px 8px;
970
+ }
971
+
972
+ .co-rte-bubble__overflow-section-title {
973
+ padding: 6px 8px 2px;
974
+ font-size: 11px;
975
+ font-weight: 600;
976
+ color: var(--co-semantic-text-muted, #888);
977
+ letter-spacing: 0.5px;
978
+ }
979
+
980
+ .co-rte-bubble__overflow-item--danger {
981
+ color: var(--co-color-status-error, #aa2e1b);
982
+ }
983
+ .co-rte-bubble__overflow-item--danger:hover {
984
+ background: rgba(170, 46, 27, 0.06);
985
+ }
986
+
987
+ /* ── Text color "A" indicator with colored bar ── */
988
+ .co-rte-bubble__color-indicator {
989
+ display: flex;
990
+ flex-direction: column;
991
+ align-items: center;
992
+ gap: 1px;
993
+ line-height: 1;
994
+ }
995
+
996
+ .co-rte-bubble__color-letter {
997
+ font-family: var(--co-font-family-primary);
998
+ font-size: 14px;
999
+ font-weight: 700;
1000
+ color: var(--co-semantic-text-default, #333);
1001
+ line-height: 1;
1002
+ }
1003
+
1004
+ .co-rte-bubble__color-bar {
1005
+ width: 14px;
1006
+ height: 3px;
1007
+ border-radius: 1px;
1008
+ }
1009
+
1010
+ /* ---- Callout blocks (content styles) ---- */
1011
+ .co-rte-content .callout {
1012
+ display: flex;
1013
+ gap: 0.75rem;
1014
+ padding: 1rem;
1015
+ border-radius: var(--co-border-radius-xs, 8px);
1016
+ border: 2px solid;
1017
+ margin: 1rem 0;
1018
+ }
1019
+ .co-rte-content .callout--info { background: #eff6ff; border-color: #bfdbfe; }
1020
+ .co-rte-content .callout--warning { background: #fffbeb; border-color: #fde68a; }
1021
+ .co-rte-content .callout--success { background: #f0fdf4; border-color: #bbf7d0; }
1022
+ .co-rte-content .callout--error { background: #fef2f2; border-color: #fecaca; }
1023
+ .co-rte-content .callout__icon { flex-shrink: 0; font-size: 1.2em; }
1024
+ .co-rte-content .callout__content { flex: 1; }
1025
+ .co-rte-content .callout__content p { margin: 0; }
1026
+
1027
+ /* ---- Table styles (content) ---- */
1028
+ .co-rte-content table {
1029
+ border-collapse: collapse;
1030
+ table-layout: auto;
1031
+ width: 100%;
1032
+ margin: 1rem 0;
1033
+ overflow: hidden;
1034
+ }
1035
+
1036
+ /* Wide / column-resized tables scroll horizontally INSIDE the page instead of
1037
+ overflowing it. Tiptap wraps every table in `.tableWrapper`; host editor.css
1038
+ doesn't scroll it, so we do. */
1039
+ .co-rte-content .tableWrapper {
1040
+ overflow-x: auto;
1041
+ max-width: 100%;
1042
+ }
1043
+ .co-rte-content td,
1044
+ .co-rte-content th {
1045
+ min-width: 1em;
1046
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
1047
+ padding: 0.5rem;
1048
+ vertical-align: top;
1049
+ box-sizing: border-box;
1050
+ position: relative;
1051
+ }
1052
+ .co-rte-content th {
1053
+ font-weight: 600;
1054
+ text-align: left;
1055
+ background-color: #e3e3e3;
1056
+ color: var(--co-semantic-text-default, #333);
1057
+ }
1058
+ /* Host editor.css ships `.tiptap table th { background: var(--gray-1) }` with
1059
+ `--gray-1: #fff` (specificity 0,1,2) which paints our header white. Beat it
1060
+ with a higher-specificity selector (0,2,2) — our ProseMirror carries both the
1061
+ `.tiptap` and `.ProseMirror` classes. */
1062
+ .co-rte-content .ProseMirror table th {
1063
+ background-color: #e3e3e3;
1064
+ }
1065
+ .co-rte-content .selectedCell {
1066
+ background: rgba(0, 0, 0, 0.06);
1067
+ }
1068
+ .co-rte-content .column-resize-handle {
1069
+ position: absolute;
1070
+ right: -2px;
1071
+ top: 0;
1072
+ bottom: 0;
1073
+ width: 4px;
1074
+ background-color: var(--co-color-base-negro, #1a1a1a);
1075
+ pointer-events: none;
1076
+ }
1077
+
1078
+ /* The ↔ resize cursor. prosemirror-tables toggles the `resize-cursor` class on
1079
+ the editor while a column edge is grabbable; without this rule the pointer
1080
+ never changes, so the column boundary looks like a plain line with no
1081
+ resize affordance. */
1082
+ .co-rte-content .ProseMirror.resize-cursor,
1083
+ .co-rte-content .ProseMirror.resize-cursor * {
1084
+ cursor: col-resize;
1085
+ }
1086
+
1087
+ /* ---- YouTube / iframe embeds (content) ----
1088
+ The iframe fills its wrapper; the WRAPPER (.co-rte-embed in the editor NodeView,
1089
+ or [data-iframe]/[data-youtube-video] in the saved HTML) carries the width. A
1090
+ resized embed sets an inline px width on the wrapper; default = full width. */
1091
+ .co-rte-content iframe {
1092
+ border-radius: var(--co-border-radius-xs, 8px);
1093
+ max-width: 100%;
1094
+ aspect-ratio: 16 / 9;
1095
+ width: 100%;
1096
+ height: auto;
1097
+ display: block;
1098
+ margin: 0;
1099
+ }
1100
+
1101
+ /* Embed wrapper (NodeView): block-level, carries the controlled width, and is
1102
+ the positioning context for the click-overlay + resize handles. */
1103
+ .co-rte-content .co-rte-embed {
1104
+ position: relative;
1105
+ display: block;
1106
+ max-width: 100%;
1107
+ margin: 1rem 0;
1108
+ line-height: 0;
1109
+ }
1110
+
1111
+ /* Transparent overlay so clicks reach ProseMirror instead of the iframe's nested
1112
+ browsing context — without it, atom NodeSelection never fires while EDITING.
1113
+ Reader mode removes it (below) so the embed is interactive. */
1114
+ .co-rte-content .co-rte-embed::before {
1115
+ content: '';
1116
+ position: absolute;
1117
+ inset: 0;
1118
+ z-index: 1;
1119
+ }
1120
+
1121
+ /* Selection outline (editing only). */
1122
+ .co-rte-content .co-rte-embed.ProseMirror-selectednode,
1123
+ .co-rte-content .co-rte-embed--selected {
1124
+ outline: 2px solid var(--co-color-base-negro, #1a1a1a);
1125
+ outline-offset: 2px;
1126
+ border-radius: var(--co-border-radius-xs, 8px);
1127
+ }
1128
+
1129
+ /* Resize handles (corners) — shown only when the embed is selected. */
1130
+ .co-rte-content .co-rte-embed__handle {
1131
+ position: absolute;
1132
+ width: 12px;
1133
+ height: 12px;
1134
+ background: var(--co-color-base-negro, #1a1a1a);
1135
+ border: 1.5px solid #fff;
1136
+ border-radius: 50%;
1137
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);
1138
+ z-index: 3;
1139
+ opacity: 0;
1140
+ pointer-events: none;
1141
+ }
1142
+ .co-rte-content .co-rte-embed.ProseMirror-selectednode .co-rte-embed__handle,
1143
+ .co-rte-content .co-rte-embed--selected .co-rte-embed__handle {
1144
+ opacity: 1;
1145
+ pointer-events: auto;
1146
+ }
1147
+ .co-rte-content .co-rte-embed__handle--bottom-right { right: -6px; bottom: -6px; cursor: nwse-resize; }
1148
+ .co-rte-content .co-rte-embed__handle--bottom-left { left: -6px; bottom: -6px; cursor: nesw-resize; }
1149
+
1150
+ /* While dragging a handle, the iframe is pointer-events:none (set in JS) so the
1151
+ drag keeps tracking; show a subtle dashed edge for feedback. */
1152
+ .co-rte-content .co-rte-embed--resizing {
1153
+ outline: 2px dashed var(--co-color-base-negro, #1a1a1a);
1154
+ outline-offset: 2px;
1155
+ }
1156
+
1157
+ /* Reader mode: drop the click-catching overlay so the embed is interactive
1158
+ (play the video, scroll the iframe), and never show selection chrome. */
1159
+ .co-rich-text-editor--readonly .co-rte-embed::before,
1160
+ .co-rich-text-editor--disabled .co-rte-embed::before {
1161
+ display: none;
1162
+ }
1163
+ .co-rich-text-editor--readonly .co-rte-embed.ProseMirror-selectednode,
1164
+ .co-rich-text-editor--readonly .co-rte-embed--selected,
1165
+ .co-rich-text-editor--disabled .co-rte-embed.ProseMirror-selectednode,
1166
+ .co-rich-text-editor--disabled .co-rte-embed--selected {
1167
+ outline: none !important;
1168
+ }
1169
+
1170
+ /* ============================================================
1171
+ Image layout bar (Google-Docs-style floating toolbar)
1172
+ ============================================================ */
1173
+ .co-rte-img-layout {
1174
+ position: absolute;
1175
+ z-index: 50;
1176
+ display: flex;
1177
+ align-items: center;
1178
+ gap: 2px;
1179
+ padding: 4px;
1180
+ background: var(--co-semantic-surface-secondary, #fff);
1181
+ border: 1px solid var(--co-semantic-border-default, #e0e0e0);
1182
+ border-radius: var(--co-border-radius-xs, 8px);
1183
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.12);
1184
+ pointer-events: auto;
1185
+ }
1186
+
1187
+ .co-rte-img-layout__btn {
1188
+ display: inline-flex;
1189
+ align-items: center;
1190
+ justify-content: center;
1191
+ width: 34px;
1192
+ height: 34px;
1193
+ padding: 0;
1194
+ border: 1px solid transparent;
1195
+ border-radius: var(--co-border-radius-xxs, 4px);
1196
+ background: transparent;
1197
+ color: var(--co-semantic-text-default, #333);
1198
+ cursor: pointer;
1199
+ transition: background 0.12s, border-color 0.12s;
1200
+ }
1201
+
1202
+ .co-rte-img-layout__btn:hover {
1203
+ background: var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.06));
1204
+ }
1205
+
1206
+ .co-rte-img-layout__btn--active {
1207
+ background: var(--co-color-base-negro, #1a1a1a);
1208
+ color: var(--co-color-base-blanco, #fff);
1209
+ }
1210
+
1211
+ .co-rte-img-layout__btn--active:hover {
1212
+ background: var(--co-color-base-negro, #333);
1213
+ }
1214
+
1215
+ /* Fast CSS tooltip for layout buttons (replaces slow native title) */
1216
+ .co-rte-img-layout__btn[data-tooltip] {
1217
+ position: relative;
1218
+ }
1219
+ .co-rte-img-layout__btn[data-tooltip]::after {
1220
+ content: attr(data-tooltip);
1221
+ position: absolute;
1222
+ bottom: calc(100% + 6px);
1223
+ left: 50%;
1224
+ transform: translateX(-50%);
1225
+ padding: 4px 8px;
1226
+ background: var(--co-color-base-negro, #1a1a1a);
1227
+ color: var(--co-color-base-blanco, #fff);
1228
+ font-family: var(--co-font-family-primary);
1229
+ font-size: 11px;
1230
+ font-weight: 500;
1231
+ line-height: 1.3;
1232
+ white-space: nowrap;
1233
+ border-radius: 4px;
1234
+ pointer-events: none;
1235
+ opacity: 0;
1236
+ transition: opacity 0.12s ease;
1237
+ z-index: 100;
1238
+ }
1239
+ .co-rte-img-layout__btn[data-tooltip]:hover::after {
1240
+ opacity: 1;
1241
+ transition-delay: 0.3s;
1242
+ }
1243
+
1244
+ /* ============================================================
1245
+ Image layout modes (responsive, reflow-based)
1246
+
1247
+ Layout is driven by the container's `data-image-layout` attribute (set in JS
1248
+ by syncImageLayouts) — no absolute positioning, no fixed page. Everything
1249
+ reflows, and floats collapse to full-width on small screens. The serialized
1250
+ <img> carries the same attribute, so the viewer mirrors these rules.
1251
+
1252
+ `inline` (default) needs no rule — the base [data-resize-container] styling
1253
+ already keeps the image in the text flow.
1254
+ ============================================================ */
1255
+ .co-rte-content [data-resize-container][data-image-layout="wrap-left"] {
1256
+ float: left;
1257
+ max-width: 50%;
1258
+ margin: 4px 16px 8px 0;
1259
+ }
1260
+ .co-rte-content [data-resize-container][data-image-layout="wrap-right"] {
1261
+ float: right;
1262
+ max-width: 50%;
1263
+ margin: 4px 0 8px 16px;
1264
+ }
1265
+ .co-rte-content [data-resize-container][data-image-layout="center"] {
1266
+ display: block;
1267
+ margin: 12px auto;
1268
+ }
1269
+ .co-rte-content [data-resize-container][data-image-layout="full-width"] {
1270
+ display: block;
1271
+ width: 100%;
1272
+ margin: 12px 0;
1273
+ }
1274
+ .co-rte-content [data-resize-container][data-image-layout="full-width"] [data-resize-wrapper],
1275
+ .co-rte-content [data-resize-container][data-image-layout="full-width"] img {
1276
+ width: 100%;
1277
+ }
1278
+
1279
+ /* Mobile: a floated image beside a sliver of text reads badly — collapse floats
1280
+ to full-width blocks so they stack above/below the text instead. */
1281
+ @media (max-width: 768px) {
1282
+ .co-rte-content [data-resize-container][data-image-layout="wrap-left"],
1283
+ .co-rte-content [data-resize-container][data-image-layout="wrap-right"] {
1284
+ float: none;
1285
+ max-width: 100%;
1286
+ display: block;
1287
+ margin: 12px 0;
1288
+ }
1289
+ }
1290
+
1291
+ /* ============================================================
1292
+ Fluid content width (document / "site" preset)
1293
+
1294
+ The editing surface fills ~80% of its container on desktop and the full width
1295
+ on mobile, so authored content reflows to fit any device (the viewer mirrors
1296
+ this). Host apps can tune the desktop measure via --co-rte-content-width.
1297
+ Scoped to `--site` so compact presets (comment/task) still fill their box.
1298
+ ============================================================ */
1299
+ .co-rte-content--site .ProseMirror {
1300
+ width: var(--co-rte-content-width, 80%);
1301
+ max-width: 100%;
1302
+ margin: 0 auto;
1303
+ }
1304
+ @media (max-width: 768px) {
1305
+ .co-rte-content--site .ProseMirror {
1306
+ width: 100%;
1307
+ }
1308
+ }
1309
+
1310
+ /* Reader mode (readonly/disabled): no resize chrome, no selection outline — the
1311
+ content reads as a finished page, not an editable image. */
1312
+ .co-rich-text-editor--readonly [data-resize-handle],
1313
+ .co-rich-text-editor--disabled [data-resize-handle] {
1314
+ display: none !important;
1315
+ }
1316
+ .co-rich-text-editor--readonly [data-resize-container].ProseMirror-selectednode,
1317
+ .co-rich-text-editor--disabled [data-resize-container].ProseMirror-selectednode,
1318
+ .co-rich-text-editor--readonly img.ProseMirror-selectednode,
1319
+ .co-rich-text-editor--disabled img.ProseMirror-selectednode {
1320
+ outline: none !important;
1321
+ }
1322
+