@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
@@ -59,6 +59,66 @@
59
59
  margin: var(--co-spacing-sm) 0;
60
60
  }
61
61
 
62
+ /* ---- Responsive image layout (mirrors the editor; keyed on data-image-layout) ---- */
63
+ .co-rich-text-viewer img[data-image-layout="wrap-left"] {
64
+ float: left;
65
+ max-width: 50%;
66
+ margin: 4px 16px 8px 0;
67
+ }
68
+ .co-rich-text-viewer img[data-image-layout="wrap-right"] {
69
+ float: right;
70
+ max-width: 50%;
71
+ margin: 4px 0 8px 16px;
72
+ }
73
+ .co-rich-text-viewer img[data-image-layout="center"] {
74
+ display: block;
75
+ margin: 12px auto;
76
+ }
77
+ .co-rich-text-viewer img[data-image-layout="full-width"] {
78
+ display: block;
79
+ width: 100%;
80
+ margin: 12px 0;
81
+ }
82
+ @media (max-width: 768px) {
83
+ .co-rich-text-viewer img[data-image-layout="wrap-left"],
84
+ .co-rich-text-viewer img[data-image-layout="wrap-right"] {
85
+ float: none;
86
+ max-width: 100%;
87
+ display: block;
88
+ margin: 12px 0;
89
+ }
90
+ }
91
+
92
+ /* Defensive: neutralise absolute positioning baked by the old fixed-page model
93
+ so legacy content reflows in-flow instead of overlapping the text. */
94
+ .co-rich-text-viewer img[style*="position:absolute"],
95
+ .co-rich-text-viewer img[style*="position: absolute"] {
96
+ position: static !important;
97
+ left: auto !important;
98
+ top: auto !important;
99
+ z-index: auto !important;
100
+ }
101
+
102
+ /* Embeds (YouTube + generic iframe) — the iframe fills its wrapper; the wrapper
103
+ ([data-iframe] / [data-youtube-video]) carries an optional inline px width
104
+ (set when the author resized it). No width = full width (responsive 16:9). */
105
+ .co-rich-text-viewer iframe {
106
+ width: 100%;
107
+ max-width: 100%;
108
+ aspect-ratio: 16 / 9;
109
+ height: auto;
110
+ display: block;
111
+ border: 0;
112
+ border-radius: var(--co-border-radius-xs);
113
+ margin: 0;
114
+ }
115
+ .co-rich-text-viewer .co-rte-iframe,
116
+ .co-rich-text-viewer [data-youtube-video] {
117
+ display: block;
118
+ max-width: 100%;
119
+ margin: var(--co-spacing-sm) 0;
120
+ }
121
+
62
122
  .co-rich-text-viewer code {
63
123
  font-family: var(--co-font-family-mono);
64
124
  font-size: 0.9em;
@@ -76,3 +136,21 @@
76
136
  color: var(--co-color-base-blanco, #fff);
77
137
  font-size: 0.9em;
78
138
  }
139
+
140
+ /* ============================================================
141
+ Fluid content width (document / "site" preset)
142
+
143
+ Mirrors the editor: the content fills ~80% of its container on desktop and the
144
+ full width on mobile, so it reflows to fit any device. Host apps can tune the
145
+ desktop measure via --co-rte-content-width.
146
+ ============================================================ */
147
+ .co-rich-text-viewer--site {
148
+ width: var(--co-rte-content-width, 80%);
149
+ max-width: 100%;
150
+ margin: 0 auto;
151
+ }
152
+ @media (max-width: 768px) {
153
+ .co-rich-text-viewer--site {
154
+ width: 100%;
155
+ }
156
+ }
@@ -1,17 +1,24 @@
1
1
  import { h } from "@stencil/core";
2
- // The `/sanitizer` subpath has no Tiptap import tiny bundle. Stencil's
3
- // classic TS moduleResolution can't read package.json `exports`, so the
4
- // subpath is mapped in tsconfig `paths` (rollup resolves it via `exports`).
5
- import { sanitize } from "../../../../../rich-text/dist/sanitizer";
2
+ import DOMPurify from "dompurify";
6
3
  /**
7
4
  * Read-only renderer for rich-text content. For `format="html"` it only runs
8
- * the package's canonical sanitizer (the `/sanitizer` subpath has no Tiptap
9
- * import tiny). `format="json"` lazily pulls the serializer to turn a
10
- * ProseMirror document into sanitized HTML.
5
+ * DOMPurify (no Tiptap import tiny). `format="json"` lazily pulls the
6
+ * serializer to turn a ProseMirror document into sanitized HTML.
7
+ *
8
+ * The HTML path sanitizes inline (mirrors the rich-text package's whitelist)
9
+ * so the viewer never pulls the editor engine into its bundle.
11
10
  *
12
11
  * @part content - The rendered content container
13
12
  * @part empty - The empty-state element
14
13
  */
14
+ const ALLOWED_TAGS = {
15
+ comment: ['p', 'br', 'strong', 'em', 'a', 'span'],
16
+ task: ['p', 'br', 'strong', 'em', 'a', 'span', 'u', 's', 'code', 'ul', 'ol', 'li', 'blockquote'],
17
+ email: ['p', 'br', 'strong', 'em', 'a', 'span', 'u', 's', 'code', 'ul', 'ol', 'li', 'blockquote', 'h2', 'h3', 'div', 'img'],
18
+ document: ['p', 'br', 'strong', 'em', 'a', 'span', 'u', 's', 'code', 'ul', 'ol', 'li', 'blockquote', 'h1', 'h2', 'h3', 'h4', 'hr', 'div', 'mark', 'img', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'iframe'],
19
+ };
20
+ /** iframes are permitted only with an https: source (blocks javascript:/data:/http:). */
21
+ const SAFE_IFRAME_SRC_RE = /^https:\/\/[^\s"'<>]+$/i;
15
22
  export class CoRichTextViewer {
16
23
  constructor() {
17
24
  /** HTML string (default) or ProseMirror JSON string. */
@@ -30,18 +37,34 @@ export class CoRichTextViewer {
30
37
  watchInputs() {
31
38
  return this.compute();
32
39
  }
33
- get parsedFeatures() {
34
- if (!this.features)
35
- return undefined;
36
- if (typeof this.features === 'string') {
37
- try {
38
- return JSON.parse(this.features);
40
+ sanitizeHtml(html) {
41
+ var _a;
42
+ DOMPurify.addHook('uponSanitizeElement', (node, data) => {
43
+ var _a, _b;
44
+ // Only allow <input type="checkbox"> (task list checkboxes); strip others.
45
+ if (data.tagName === 'input' && node.type !== 'checkbox') {
46
+ (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);
39
47
  }
40
- catch (_a) {
41
- return undefined;
48
+ // Allow only https iframes (YouTube, Vimeo, …); strip anything else.
49
+ if (data.tagName === 'iframe') {
50
+ const src = node.getAttribute('src') || '';
51
+ if (!SAFE_IFRAME_SRC_RE.test(src))
52
+ (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(node);
42
53
  }
54
+ });
55
+ try {
56
+ const clean = DOMPurify.sanitize(html, {
57
+ ALLOWED_TAGS: (_a = ALLOWED_TAGS[this.preset]) !== null && _a !== void 0 ? _a : ALLOWED_TAGS.document,
58
+ ALLOWED_ATTR: ['href', 'target', 'rel', 'data-variable', 'data-mention-id', 'data-mention-label', 'style', 'colspan', 'rowspan', 'src', 'alt', 'width', 'height', 'allowfullscreen', 'frameborder', 'allow', 'loading', 'data-youtube-video', 'data-iframe', 'data-image-layout', 'data-file-id', 'type', 'checked', 'disabled'],
59
+ ALLOW_DATA_ATTR: false,
60
+ FORBID_TAGS: ['script', 'object', 'embed', 'form', 'textarea', 'style'],
61
+ ADD_ATTR: ['allowfullscreen', 'frameborder', 'allow', 'loading'],
62
+ });
63
+ return clean;
64
+ }
65
+ finally {
66
+ DOMPurify.removeHook('uponSanitizeElement');
43
67
  }
44
- return this.features;
45
68
  }
46
69
  async compute() {
47
70
  if (!this.value) {
@@ -49,14 +72,14 @@ export class CoRichTextViewer {
49
72
  return;
50
73
  }
51
74
  if (this.format === 'html') {
52
- this.html = sanitize(this.value, this.preset, this.parsedFeatures);
75
+ this.html = this.sanitizeHtml(this.value);
53
76
  return;
54
77
  }
55
78
  // JSON mode — lazily import the serializer (pulls Tiptap on demand only).
56
79
  try {
57
80
  const doc = JSON.parse(this.value);
58
81
  const rt = await import('@prolibu-suite/cobalt-rich-text');
59
- this.html = rt.jsonToHtml(doc, this.preset, this.parsedFeatures);
82
+ this.html = rt.jsonToHtml(doc, this.preset);
60
83
  }
61
84
  catch (_a) {
62
85
  this.html = '';
@@ -66,7 +89,11 @@ export class CoRichTextViewer {
66
89
  if (!this.html) {
67
90
  return (h("div", { class: "co-rich-text-viewer co-rich-text-viewer--empty", part: "empty" }, this.emptyText || ''));
68
91
  }
69
- return (h("div", { class: { 'co-rich-text-viewer': true, 'co-rich-text-viewer--compact': this.compact }, part: "content", innerHTML: this.html }));
92
+ return (h("div", { class: {
93
+ 'co-rich-text-viewer': true,
94
+ 'co-rich-text-viewer--compact': this.compact,
95
+ 'co-rich-text-viewer--site': this.preset === 'document',
96
+ }, part: "content", innerHTML: this.html }));
70
97
  }
71
98
  static get is() { return "co-rich-text-viewer"; }
72
99
  static get encapsulation() { return "shadow"; }
@@ -149,25 +176,6 @@ export class CoRichTextViewer {
149
176
  "attribute": "preset",
150
177
  "defaultValue": "'document'"
151
178
  },
152
- "features": {
153
- "type": "string",
154
- "mutable": false,
155
- "complexType": {
156
- "original": "string | object",
157
- "resolved": "object | string | undefined",
158
- "references": {}
159
- },
160
- "required": false,
161
- "optional": true,
162
- "docs": {
163
- "tags": [],
164
- "text": "Feature overrides used when the content was authored with them (JSON\nstring for HTML attr, or object via JS property) \u2014 keeps the whitelist\nin lock-step with the editor that produced the content."
165
- },
166
- "getter": false,
167
- "setter": false,
168
- "reflect": false,
169
- "attribute": "features"
170
- },
171
179
  "emptyText": {
172
180
  "type": "string",
173
181
  "mutable": false,
@@ -224,9 +232,6 @@ export class CoRichTextViewer {
224
232
  }, {
225
233
  "propName": "preset",
226
234
  "methodName": "watchInputs"
227
- }, {
228
- "propName": "features",
229
- "methodName": "watchInputs"
230
235
  }];
231
236
  }
232
237
  }
@@ -13,11 +13,11 @@ export class CoRow {
13
13
  this.size = 'sm';
14
14
  }
15
15
  render() {
16
- return (h("div", { key: '23841a9145b930d4c9ccf77038132b6d62077395', class: {
16
+ return (h("div", { key: '75c5a2693135e21a3a4379d8bbb6d9be5bdf6bf5', class: {
17
17
  'co-row': true,
18
18
  [`co-row--${this.position}`]: true,
19
19
  [`co-row--${this.size}`]: true,
20
- }, part: "row" }, h("div", { key: '2b3672bf156732fa74ae2cf88751678cd1acc6b3', class: "co-row__prefix" }, h("slot", { key: '663ad19611357ec125d8634fddbf3f3b897ae39b', name: "prefix" })), h("div", { key: '58deed652fad6d3f5b49b2b31855aa7f1b5e7784', class: "co-row__content" }, h("slot", { key: 'c5e73b4048c5aa2ba0f6ffc7e7d8c23d7f5d6e37' })), h("div", { key: 'd9cce5c7877f51ec5e79b493401e42b26fa426c1', class: "co-row__suffix" }, h("slot", { key: '741c8cf347a4046122eb01ae3001263d6c9d09d6', name: "suffix" }))));
20
+ }, part: "row" }, h("div", { key: 'beb274682f02b428b93315b057fbfe11bf2be037', class: "co-row__prefix" }, h("slot", { key: '0c9381d277795df7230da6eb05b9a5fa46726cf2', name: "prefix" })), h("div", { key: '2753f7c221e17d9eb91a685567a16470210652de', class: "co-row__content" }, h("slot", { key: '257befca88d731c4b6c3b8545fa3f2db6c56482c' })), h("div", { key: '934ecc29de8822bf084a4d49e828aa64481dbbe3', class: "co-row__suffix" }, h("slot", { key: 'baa9de54437b45d4fe54f3e2faaf28d9b8cc8ed0', name: "suffix" }))));
21
21
  }
22
22
  static get is() { return "co-row"; }
23
23
  static get encapsulation() { return "shadow"; }
@@ -727,7 +727,9 @@ html[data-overlayscrollbars-viewport~=scrollbarHidden] > body::-webkit-scrollbar
727
727
  align-items: center;
728
728
  gap: var(--co-spacing-sm2);
729
729
  padding: var(--co-spacing-sm2) var(--co-spacing-md);
730
- background: var(--co-semantic-surface-secondary);
730
+ background: color-mix(in srgb, var(--co-semantic-surface-secondary) 55%, transparent);
731
+ -webkit-backdrop-filter: blur(var(--co-glass-blur)) saturate(var(--co-glass-saturate));
732
+ backdrop-filter: blur(var(--co-glass-blur)) saturate(var(--co-glass-saturate));
731
733
  border: 1px solid var(--co-semantic-border-subtle);
732
734
  border-radius: var(--co-border-radius-xs);
733
735
  min-height: 40px;
@@ -1063,3 +1065,7 @@ html[data-overlayscrollbars-viewport~=scrollbarHidden] > body::-webkit-scrollbar
1063
1065
  .co-field-required__caption::before {
1064
1066
  content: var(--co-field-required-text, ' (required)');
1065
1067
  }
1068
+
1069
+ @supports not (background: color-mix(in srgb, red, transparent)) {
1070
+ .co-select__trigger { background: var(--co-semantic-surface-secondary); }
1071
+ }
@@ -208,19 +208,19 @@ export class CoSelect {
208
208
  var _a;
209
209
  const selected = this.selectedValues;
210
210
  const options = this.filteredOptions;
211
- return (h("div", { key: '279b14eda557b860b4151685bf7d7d0c97ab861d', class: {
211
+ return (h("div", { key: '80117c114baa7d2e41d18501f1ac6bd5bdfa20c1', class: {
212
212
  'co-select': true,
213
213
  'co-select--open': this.isOpen,
214
214
  'co-select--disabled': this.disabled,
215
215
  [`co-select--${this.size}`]: true,
216
216
  [`co-select--${this.status}`]: this.status !== 'default',
217
- } }, (this.label || this.secondaryLabel) && (h("div", { key: 'e98425c922453ca3acae8274c707366ac28ceb0e', class: "co-select__labels" }, this.label && h("label", { key: 'de40605cb2d729bccc445b1e37a28e9ae5d95c05', class: "co-select__label" }, this.label, h(RequiredMark, { key: 'bc0a351d141017cdfeb9b761081144df09bffbf6', required: this.required })), this.secondaryLabel && h("span", { key: 'cbbd3955441d029c40a32dc363d1fc133ace393d', class: "co-select__secondary-label" }, this.secondaryLabel))), h("co-popover", { key: 'de6985c4703ecec83a1d3011fd9c275d989a1132', open: this.isOpen, placement: "bottom-start", matchWidth: true, offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: '545e952818ab75b26de295d56c6875237f970ed5', slot: "trigger", class: "co-select__trigger", onClick: this.handleTriggerClick }, this.iconLeft && h("co-icon", { key: '1f202f6dfdb6bae10c20594878ba5f780ab8ad07', name: this.iconLeft, size: 16, class: "co-select__icon" }), ((_a = this.selectedOption) === null || _a === void 0 ? void 0 : _a.image) && (h("img", { key: '68e80d4d79d68b6d982aa72f8b697c8654d043c3', class: "co-select__flag", src: this.selectedOption.image, alt: "" })), this.multiple && this.hasValue ? (h("div", { class: "co-select__chips" }, this.selectedValues.map((v) => {
217
+ } }, (this.label || this.secondaryLabel) && (h("div", { key: '298b864956542f86934ebf2a932bd8e10df10b0c', class: "co-select__labels" }, this.label && h("label", { key: 'a0b1b123203f418d8f9c9db22bad068a17d01511', class: "co-select__label" }, this.label, h(RequiredMark, { key: 'e170c7fbde96ab31c7220d461042118664d68c3b', required: this.required })), this.secondaryLabel && h("span", { key: 'd40ed570060b416adf461284b1836520326e77e7', class: "co-select__secondary-label" }, this.secondaryLabel))), h("co-popover", { key: 'fd7d4799fecbd5170b7e88132ca3a892200190a0', open: this.isOpen, placement: "bottom-start", matchWidth: true, offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: '3179abebe2e93432544a53e31cdcd17389d87be0', slot: "trigger", class: "co-select__trigger", onClick: this.handleTriggerClick }, this.iconLeft && h("co-icon", { key: 'f205a1a07564690d25988faa1f1eb943a42177d6', name: this.iconLeft, size: 16, class: "co-select__icon" }), ((_a = this.selectedOption) === null || _a === void 0 ? void 0 : _a.image) && (h("img", { key: '8f15efb686581727391617fd57a55c5636134cf0', class: "co-select__flag", src: this.selectedOption.image, alt: "" })), this.multiple && this.hasValue ? (h("div", { class: "co-select__chips" }, this.selectedValues.map((v) => {
218
218
  const opt = this.parsedOptions.find((o) => o.value === v);
219
219
  return (h("span", { class: "co-select__chip", key: v }, h("span", { class: "co-select__chip-label" }, opt ? opt.label : v), h("button", { class: "co-select__chip-remove", type: "button", tabIndex: -1, "aria-label": "Remove", onClick: (e) => {
220
220
  e.stopPropagation();
221
221
  this.handleOptionClick(v);
222
222
  } }, h("co-icon", { name: "x", size: 12 }))));
223
- }))) : (h("span", { class: { 'co-select__text': true, 'co-select__text--placeholder': !this.hasValue } }, this.hasValue ? this.displayText : this.placeholder)), this.clearable && this.hasValue && !this.disabled && (h("button", { key: '347235a67a41c6f4ed3e9b8035c18750dbba609e', class: "co-select__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: '400d900137c4dfbdf362d8ad923678e062143707', name: "x-circle", size: 16, weight: "fill" }))), h("co-icon", { key: '1e9a4c6a69606790836fedcea70192c77b42383f', name: this.isOpen ? 'caret-up' : 'caret-down', size: 16, class: "co-select__caret" })), h("div", { key: '1a00449ed011a384124992427511a14017203308', class: "co-select__dropdown" }, this.searchable && (h("div", { key: '6275c6091e714147325f5a8a40cc33e8ddfc9fcb', class: "co-select__search" }, h("co-icon", { key: '18047b5338b433adcca171783ea896978d0f8657', name: "magnifying-glass", size: 16, class: "co-select__search-icon" }), h("input", { key: '1de64d0740ff617a5cf75fdaf3bcddb197f826be', class: "co-select__search-input", type: "text", placeholder: this.searchPlaceholder, value: this.searchText, onInput: this.handleSearchInput, ref: (el) => (this.searchInputEl = el) }))), this.searchable && options.length === 0 && (h("div", { key: '07cf9897681af9a636dfa0e0de3dda5785e49d03', class: "co-select__empty" }, this.emptyText)), h("div", { key: 'f9c5ad0c2ece40dad256a81eca686769498983d1', class: "co-select__options", ref: (el) => (this.optionsContainerEl = el) }, (() => {
223
+ }))) : (h("span", { class: { 'co-select__text': true, 'co-select__text--placeholder': !this.hasValue } }, this.hasValue ? this.displayText : this.placeholder)), this.clearable && this.hasValue && !this.disabled && (h("button", { key: '54f73eb25ee75cbf5bb042967c7886ef301bf9ed', class: "co-select__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: 'db324b13e30a71dbc7d0792a6a3374350bc29216', name: "x-circle", size: 16, weight: "fill" }))), h("co-icon", { key: '4332870af3b3d5fc3dd157b7aa51d75141379423', name: this.isOpen ? 'caret-up' : 'caret-down', size: 16, class: "co-select__caret" })), h("div", { key: '4e9c33d19eb0694dee2625a87737584082a05ef9', class: "co-select__dropdown" }, this.isOpen && this.searchable && (h("div", { key: 'ba3d77e39c223193884d13ece1406c57348d9fbe', class: "co-select__search" }, h("co-icon", { key: '7b9917353b668d67e26a7f0734e3b094bcfbfba8', name: "magnifying-glass", size: 16, class: "co-select__search-icon" }), h("input", { key: '4be851a3ac33d169352b8bb8db3401e8c2fd07da', class: "co-select__search-input", type: "text", placeholder: this.searchPlaceholder, value: this.searchText, onInput: this.handleSearchInput, ref: (el) => (this.searchInputEl = el) }))), this.isOpen && this.searchable && options.length === 0 && (h("div", { key: '2f37b7de7a52009814189b522ed89970b88fbcd6', class: "co-select__empty" }, this.emptyText)), h("div", { key: '2de0fd19d84a409b4a196dcbe3f93ad4c4a17dac', class: "co-select__options", ref: (el) => (this.optionsContainerEl = el) }, this.isOpen && (() => {
224
224
  const { totalHeight, startIdx, endIdx, offsetY } = this.getVirtualSlice(options);
225
225
  return (h("div", { class: "co-select__virtual-spacer", style: { height: `${totalHeight}px`, position: 'relative' } }, h("div", { style: { position: 'absolute', top: `${offsetY}px`, left: '0', right: '0' } }, options.slice(startIdx, endIdx).map(opt => {
226
226
  const isSelected = selected.includes(opt.value);
@@ -229,9 +229,9 @@ export class CoSelect {
229
229
  'co-select__option': true,
230
230
  'co-select__option--selected': isSelected,
231
231
  'co-select__option--disabled': isDisabled,
232
- }, onClick: () => !isDisabled && this.handleOptionClick(opt.value) }, opt.image ? (h("img", { class: "co-select__option-flag", src: opt.image, alt: "" })) : opt.icon ? (h("co-icon", { name: opt.icon, size: 20, class: "co-select__option-icon" })) : null, h("span", { class: "co-select__option-label" }, this.renderLabel(opt.label)), isSelected && h("co-icon", { name: "check", size: 16, class: "co-select__option-check" })));
232
+ }, onClick: () => !isDisabled && this.handleOptionClick(opt.value) }, opt.image ? (h("img", { class: "co-select__option-flag", src: opt.image, alt: "", loading: "lazy" })) : opt.icon ? (h("co-icon", { name: opt.icon, size: 20, class: "co-select__option-icon" })) : null, h("span", { class: "co-select__option-label" }, this.renderLabel(opt.label)), isSelected && h("co-icon", { name: "check", size: 16, class: "co-select__option-check" })));
233
233
  }))));
234
- })()))), this.helperText && (h("div", { key: '2d51d82b91682fc7f4e2e9eff099b9292099ce7a', class: `co-select__helper co-select__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: 'a055b3dee238c230aec60264377ccf9b1fe3137d', name: this.statusIcon, size: 14, weight: "fill", class: "co-select__helper-icon" }), h("span", { key: '2d170fecfbe1b889fe819d63b19863bdac92eee8', class: "co-select__helper-text" }, this.helperText)))));
234
+ })()))), this.helperText && (h("div", { key: '09eb41ec92953a06ee80cfefe120c23ad37a9d76', class: `co-select__helper co-select__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: '15a47bd796ab0af375c85054cc61e7fa4fa88d03', name: this.statusIcon, size: 14, weight: "fill", class: "co-select__helper-icon" }), h("span", { key: 'e71c40ee14bbf4ac5bedad608177d5a0a61fff84', class: "co-select__helper-text" }, this.helperText)))));
235
235
  }
236
236
  static get is() { return "co-select"; }
237
237
  static get encapsulation() { return "shadow"; }
@@ -57,7 +57,7 @@ export class CoSeparator {
57
57
  style['--co-separator-inset-end'] = '0px';
58
58
  }
59
59
  }
60
- return (h("hr", { key: '7024b84bf2a0cf7b0f5d95b1ded130295f3956f2', class: {
60
+ return (h("hr", { key: 'c139d79684e0f34cc732ecd8485c8fd76d85f7b6', class: {
61
61
  'co-separator': true,
62
62
  'co-separator--vertical': this.vertical,
63
63
  'co-separator--dark': this.dark,
@@ -10,10 +10,10 @@ export class CoSidebar {
10
10
  this.mode = 'full';
11
11
  }
12
12
  render() {
13
- return (h("nav", { key: '06e023317ddd0ba958aed6fae1260d99cf98787b', class: {
13
+ return (h("nav", { key: '065575ef697d72d6fde1fb35bbf0a2511d95876b', class: {
14
14
  'co-sidebar': true,
15
15
  [`co-sidebar--${this.mode}`]: true,
16
- }, part: "sidebar" }, h("div", { key: '02599924b23b828c21442f777e4109cf612cafb0', class: "co-sidebar__header", part: "header" }, h("slot", { key: 'dd28b07a1b4e4674de3348932ebed9b997fdad43', name: "header" })), h("div", { key: '3f0d7545ee5d5ea3e058e92f16f1f6903c301331', class: "co-sidebar__body", part: "body" }, h("slot", { key: '80a97f1c2724945950751908544198b0a5ab50f7' })), h("div", { key: '8bbf92eb02aada1337190f2dcad705fbb41f67ab', class: "co-sidebar__footer", part: "footer" }, h("slot", { key: '73501f3dda0d40e4d61cc8c47da2cd6dd7fd5e9a', name: "footer" }))));
16
+ }, part: "sidebar" }, h("div", { key: '8580c3561f196699e4c7d42bfbf55f2f60a26f10', class: "co-sidebar__header", part: "header" }, h("slot", { key: 'addef13305295557bbc5998999e489a395f1e8a5', name: "header" })), h("div", { key: '8ebd04b00553a6dd7870a4c66a5344d4ec784e80', class: "co-sidebar__body", part: "body" }, h("slot", { key: '75f73e00722e2c864c965f16d179a0a40e1907f7' })), h("div", { key: '7165390d8c38b1a77e89ca38d3998031adfbd346', class: "co-sidebar__footer", part: "footer" }, h("slot", { key: '746a7319de0db254b95537e9cc88e0d2f1eff820', name: "footer" }))));
17
17
  }
18
18
  static get is() { return "co-sidebar"; }
19
19
  static get encapsulation() { return "shadow"; }
@@ -3,6 +3,19 @@
3
3
  Renders categories, expansions, and leaf items from a JSON menu structure.
4
4
  ============================================================================= */
5
5
 
6
+ /* Edge-fade: animatable lengths so the scroll-driven keyframes can interpolate
7
+ the mask smoothly. Registered globally (the host is the scroll container). */
8
+ @property --co-sidebar-fade-top {
9
+ syntax: "<length>";
10
+ inherits: false;
11
+ initial-value: 0px;
12
+ }
13
+ @property --co-sidebar-fade-bottom {
14
+ syntax: "<length>";
15
+ inherits: false;
16
+ initial-value: 0px;
17
+ }
18
+
6
19
  :host {
7
20
  display: block;
8
21
  height: 100%;
@@ -13,6 +26,45 @@
13
26
  /* Scrollbar — auto-hide, subtle */
14
27
  scrollbar-width: thin;
15
28
  scrollbar-color: transparent transparent;
29
+
30
+ --co-sidebar-fade-size: 28px;
31
+ }
32
+
33
+ /* Edge-fade: the host IS the scroll container, so a mask fixed to its box
34
+ softens the top/bottom edges as content scrolls under it. Top fades only when
35
+ there's content above; bottom only when there's more below; at rest both are
36
+ 0 → no fade. Applies in BOTH full and min (collapsed) modes — bg-agnostic, so
37
+ whatever the app paints behind the sidebar shows through the faded edge.
38
+ The lone exception is min mode WITH a flyout open: a host mask makes the host
39
+ a containing block for the position:fixed flyout, which would clip and
40
+ mis-position it — so the `flyout-open` host class drops the mask for that
41
+ moment (it's the only time a fixed descendant exists). */
42
+ :host(:not([mode="min"])),
43
+ :host([mode="min"]:not(.flyout-open)) {
44
+ -webkit-mask-image: linear-gradient(to bottom,
45
+ transparent 0, #000 var(--co-sidebar-fade-top),
46
+ #000 calc(100% - var(--co-sidebar-fade-bottom)), transparent 100%);
47
+ mask-image: linear-gradient(to bottom,
48
+ transparent 0, #000 var(--co-sidebar-fade-top),
49
+ #000 calc(100% - var(--co-sidebar-fade-bottom)), transparent 100%);
50
+ }
51
+
52
+ /* Scroll-driven: the host's own scroll progress animates the fade lengths.
53
+ When there's no overflow the timeline is inactive → no effect → edges stay
54
+ crisp. Guarded so engines without scroll-timeline simply show no fade. */
55
+ @supports (animation-timeline: scroll()) {
56
+ :host(:not([mode="min"])),
57
+ :host([mode="min"]:not(.flyout-open)) {
58
+ animation: co-sidebar-edge-fade linear both;
59
+ animation-timeline: scroll(self block);
60
+ }
61
+ }
62
+
63
+ @keyframes co-sidebar-edge-fade {
64
+ 0% { --co-sidebar-fade-top: 0px; --co-sidebar-fade-bottom: var(--co-sidebar-fade-size); }
65
+ 8% { --co-sidebar-fade-top: var(--co-sidebar-fade-size); --co-sidebar-fade-bottom: var(--co-sidebar-fade-size); }
66
+ 92% { --co-sidebar-fade-top: var(--co-sidebar-fade-size); --co-sidebar-fade-bottom: var(--co-sidebar-fade-size); }
67
+ 100% { --co-sidebar-fade-top: var(--co-sidebar-fade-size); --co-sidebar-fade-bottom: 0px; }
16
68
  }
17
69
 
18
70
  :host(:hover) {
@@ -44,6 +96,21 @@
44
96
  background: var(--co-color-opacity-blanco-50);
45
97
  }
46
98
 
99
+ /* Min mode centers a fixed-width icon column; a reserved right-only scrollbar
100
+ gutter pulls that column left of the (non-scrolling) header above. Drop the
101
+ reserved gutter in collapsed mode so the icons stay centered — the rail still
102
+ scrolls via wheel/trackpad. (Full mode keeps its visible thin scrollbar.) */
103
+ :host([mode="min"]) {
104
+ /* !important to beat the app's global `* { scrollbar-width: thin }`
105
+ (light-DOM) which otherwise reserves a right gutter and shifts the
106
+ centered icon column left. */
107
+ scrollbar-width: none !important;
108
+ }
109
+
110
+ :host([mode="min"])::-webkit-scrollbar {
111
+ width: 0 !important;
112
+ }
113
+
47
114
  .co-sidebar-nav {
48
115
  display: flex;
49
116
  flex-direction: column;
@@ -145,13 +212,26 @@
145
212
  gap: var(--co-spacing-xxs);
146
213
  }
147
214
 
215
+ /* — Mini-mode category group — no label, but preserves the section spacing so the
216
+ collapsed sidebar still reads as grouped (an extra gap between groups vs. items). */
217
+ .co-sidebar-nav__category--min {
218
+ display: flex;
219
+ flex-direction: column;
220
+ align-items: center;
221
+ gap: var(--co-spacing-xxs);
222
+ }
223
+
224
+ .co-sidebar-nav__category--min + .co-sidebar-nav__category--min {
225
+ margin-top: var(--co-spacing-md);
226
+ }
227
+
148
228
  /* — Leaf item — */
149
229
  .co-sidebar-nav__item {
150
230
  display: flex;
151
231
  align-items: center;
152
232
  gap: var(--co-spacing-sm);
153
233
  padding: var(--co-spacing-xs) var(--co-spacing-sm);
154
- border-radius: var(--co-border-radius-xxs);
234
+ border-radius: var(--co-border-radius-xs);
155
235
  border: none;
156
236
  background: none;
157
237
  cursor: pointer;
@@ -174,7 +254,15 @@
174
254
  .co-sidebar-nav__item--active {
175
255
  background: var(--co-sidebar-nav-active-bg, var(--co-semantic-surface-hover));
176
256
  color: var(--co-sidebar-nav-active-color, var(--co-color-primary-azul));
177
- font-weight: var(--co-font-weight-semibold);
257
+ font-weight: var(--co-font-weight-medium);
258
+ /* Frosted glass (Cobalt glass system): translucent fill + backdrop blur. The
259
+ active bg is set translucent from the app (--co-sidebar-nav-active-bg); the
260
+ blur frosts the sidebar gradient behind the pill. Tokens are component-local
261
+ defaults (mismos valores que co-button/co-icon-button). */
262
+ --co-glass-blur: 12px;
263
+ --co-glass-saturate: 1.3;
264
+ -webkit-backdrop-filter: blur(var(--co-glass-blur)) saturate(var(--co-glass-saturate));
265
+ backdrop-filter: blur(var(--co-glass-blur)) saturate(var(--co-glass-saturate));
178
266
  }
179
267
 
180
268
  .co-sidebar-nav__item-icon {
@@ -211,17 +299,16 @@
211
299
  height: 36px;
212
300
  padding: 0;
213
301
  justify-content: center;
302
+ /* Same corner radius as full-mode rows so the active/hover chip reads
303
+ consistently collapsed vs expanded. */
214
304
  border-radius: var(--co-border-radius-xs);
215
305
  }
216
306
 
217
- .co-sidebar-nav--min .co-sidebar-nav__item--active {
218
- background: var(--co-sidebar-nav-active-bg-min, var(--co-color-primary-azul));
219
- color: var(--co-color-base-blanco);
220
- }
221
-
222
- .co-sidebar-nav--min .co-sidebar-nav__item--active .co-sidebar-nav__item-icon co-icon {
223
- color: var(--co-color-base-blanco);
224
- }
307
+ /* Min-mode active intentionally has NO overrides: it inherits the base
308
+ .co-sidebar-nav__item--active treatment (frosted --co-sidebar-nav-active-bg +
309
+ backdrop blur + adaptive --co-sidebar-nav-active-color) so the collapsed
310
+ active chip matches the expanded one in color and treatment.
311
+ (--co-sidebar-nav-active-bg-min is no longer consumed.) */
225
312
 
226
313
  /* — Flyout (mini mode hover popover) — */
227
314
  .co-sidebar-nav__flyout-anchor {
@@ -275,7 +362,7 @@
275
362
  .co-sidebar-nav__flyout .co-sidebar-nav__item--active {
276
363
  background: var(--co-color-gray-100);
277
364
  color: var(--co-sidebar-nav-active-color, var(--co-color-primary-azul));
278
- font-weight: var(--co-font-weight-semibold);
365
+ font-weight: var(--co-font-weight-medium);
279
366
  }
280
367
 
281
368
  .co-sidebar-nav__flyout .co-sidebar-nav__item-icon {
@@ -310,7 +397,7 @@
310
397
  align-items: center;
311
398
  gap: var(--co-spacing-sm);
312
399
  padding: var(--co-spacing-xs) var(--co-spacing-sm);
313
- border-radius: var(--co-border-radius-xxs);
400
+ border-radius: var(--co-border-radius-xs);
314
401
  border: none;
315
402
  background: none;
316
403
  cursor: pointer;
@@ -1,4 +1,4 @@
1
- import { h } from "@stencil/core";
1
+ import { h, Host } from "@stencil/core";
2
2
  import { normalizeText } from "../../utils/normalizeText";
3
3
  /** Default icon mapping for common Prolibu model keys → Phosphor icon names */
4
4
  const DEFAULT_ICON_MAP = {
@@ -129,10 +129,16 @@ const DEFAULT_ICON_MAP = {
129
129
  TourStudio: 'cube',
130
130
  Docs: 'file-text',
131
131
  Setup: 'gear-six',
132
- // Achievements
132
+ // Human Resources
133
+ Recruitment: 'user-plus',
134
+ Candidates: 'user-list',
135
+ // Achievements / Recognition
136
+ Recognition: 'hands-clapping',
133
137
  Achievements: 'trophy',
134
138
  Rewards: 'gift',
135
139
  Badges: 'medal',
140
+ BadgeNominations: 'star',
141
+ Prizes: 'trophy',
136
142
  RewardsBudgets: 'wallet',
137
143
  RedeemedPrizes: 'crown',
138
144
  // Sales / Billing extras
@@ -389,10 +395,18 @@ export class CoSidebarNav {
389
395
  }
390
396
  renderLeafItem(item, forceLabel = false) {
391
397
  const isActive = item.key === this.activeKey;
392
- return (h("button", { class: {
398
+ const label = this.getLabel(item.key);
399
+ const showLabel = this.mode === 'full' || forceLabel;
400
+ const button = (h("button", { class: {
393
401
  'co-sidebar-nav__item': true,
394
402
  'co-sidebar-nav__item--active': isActive,
395
- }, onClick: () => this.handleLeafClick(item), title: this.getLabel(item.key) }, h("span", { class: "co-sidebar-nav__item-icon" }, this.renderIcon(item)), (this.mode === 'full' || forceLabel) && (h("span", { class: "co-sidebar-nav__item-label" }, this.renderHighlightedLabel(item.key)))));
403
+ }, onClick: () => this.handleLeafClick(item), "aria-label": showLabel ? undefined : label }, h("span", { class: "co-sidebar-nav__item-icon" }, this.renderIcon(item)), showLabel && (h("span", { class: "co-sidebar-nav__item-label" }, this.renderHighlightedLabel(item.key)))));
404
+ // Collapsed (icon-only) items get a Cobalt tooltip with the label instead of
405
+ // the native `title`. Flyout items (forceLabel) already show their label.
406
+ if (this.mode === 'min' && !forceLabel) {
407
+ return (h("co-tooltip", { content: label, placement: "right", offset: 12 }, button));
408
+ }
409
+ return button;
396
410
  }
397
411
  openFlyout(key, anchorEl, childCount = 0) {
398
412
  clearTimeout(this.flyoutTimeout);
@@ -446,8 +460,10 @@ export class CoSidebarNav {
446
460
  }
447
461
  renderCategory(item) {
448
462
  if (this.mode === 'min') {
449
- // In mini mode, render children directly (skip category headers)
450
- return item.children.map(child => this.renderItem(child));
463
+ // In mini mode, drop the category label but keep a group wrapper so the
464
+ // sections stay visually separated by vertical spacing (mirrors the
465
+ // section gaps of full mode — the structure is still legible collapsed).
466
+ return (h("div", { class: "co-sidebar-nav__category--min" }, item.children.map(child => this.renderItem(child))));
451
467
  }
452
468
  return (h("div", { class: "co-sidebar-nav__category" }, h("span", { class: "co-sidebar-nav__category-label" }, this.renderHighlightedLabel(item.key)), h("div", { class: "co-sidebar-nav__category-items" }, item.children.map(child => this.renderItem(child)))));
453
469
  }
@@ -464,10 +480,14 @@ export class CoSidebarNav {
464
480
  }
465
481
  render() {
466
482
  const items = this.filteredItems;
467
- return (h("nav", { key: 'b3e49df434a663c564959f6b332ed121607af5bb', class: {
483
+ return (
484
+ // `flyout-open` (min mode only) lets the CSS drop the host edge-fade mask
485
+ // while a flyout is shown — a host mask would otherwise clip AND
486
+ // mis-position the fixed flyout (mask makes the host a containing block).
487
+ h(Host, { key: 'b24ca79d961f65bbe629e0289185de1751ab1fd1', class: { 'flyout-open': !!this.flyoutKey } }, h("nav", { key: 'e37ad68826bf9236c9a009a8b4355dfaca2d3a3d', class: {
468
488
  'co-sidebar-nav': true,
469
489
  'co-sidebar-nav--min': this.mode === 'min',
470
- } }, this.renderSearch(), h("div", { key: '26ef8af4e3152e7c094f966d881ad436ee52a805', class: "co-sidebar-nav__items" }, items.map(item => this.renderItem(item)))));
490
+ } }, this.renderSearch(), h("div", { key: 'ccf9c947e0fa3f4494ebd9fa55e2c726836e8c59', class: "co-sidebar-nav__items" }, items.map(item => this.renderItem(item))))));
471
491
  }
472
492
  static get is() { return "co-sidebar-nav"; }
473
493
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,28 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .co-skeleton {
6
+ height: 1em;
7
+ border-radius: var(--co-border-radius-xs);
8
+ background: linear-gradient(
9
+ 90deg,
10
+ var(--co-semantic-surface-secondary) 0%,
11
+ var(--co-semantic-surface-hover, rgba(0, 0, 0, 0.04)) 50%,
12
+ var(--co-semantic-surface-secondary) 100%
13
+ );
14
+ background-size: 200% 100%;
15
+ animation: co-skeleton-sweep 1.2s ease-in-out infinite;
16
+ }
17
+
18
+ .co-skeleton--text { border-radius: var(--co-border-radius-xxs); }
19
+ .co-skeleton--circle { border-radius: var(--co-border-radius-full); }
20
+
21
+ @keyframes co-skeleton-sweep {
22
+ 0% { background-position: 200% 0; }
23
+ 100% { background-position: -200% 0; }
24
+ }
25
+
26
+ @media (prefers-reduced-motion: reduce) {
27
+ .co-skeleton { animation: none; }
28
+ }