@prolibu-suite/cobalt-core 0.10.1 → 0.10.2

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 (248) hide show
  1. package/custom-elements.json +107 -27
  2. package/dist/cjs/co-accordion.cjs.entry.js +32 -3
  3. package/dist/cjs/co-avatar.cjs.entry.js +1 -1
  4. package/dist/cjs/co-button.cjs.entry.js +1 -1
  5. package/dist/cjs/co-calendar_3.cjs.entry.js +7 -3
  6. package/dist/cjs/co-chip_2.cjs.entry.js +8 -6
  7. package/dist/cjs/co-column-picker.cjs.entry.js +1 -1
  8. package/dist/cjs/co-combobox.cjs.entry.js +1 -1
  9. package/dist/cjs/co-command-search.cjs.entry.js +1 -1
  10. package/dist/cjs/co-date-range-picker.cjs.entry.js +3 -1
  11. package/dist/cjs/co-emoji-picker.cjs.entry.js +1 -1
  12. package/dist/cjs/co-file-type-tile.cjs.entry.js +23 -7
  13. package/dist/cjs/co-phone-field.cjs.entry.js +5 -5
  14. package/dist/cjs/co-provider-logo_2.cjs.entry.js +1 -1
  15. package/dist/cjs/co-rich-text-editor.cjs.entry.js +30 -10
  16. package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +5 -2
  17. package/dist/cjs/co-rich-text-viewer.cjs.entry.js +19 -3
  18. package/dist/cjs/co-row.cjs.entry.js +2 -2
  19. package/dist/cjs/co-select.cjs.entry.js +8 -8
  20. package/dist/cjs/co-separator.cjs.entry.js +1 -1
  21. package/dist/cjs/co-sidebar-nav.cjs.entry.js +1 -1
  22. package/dist/cjs/co-sidebar.cjs.entry.js +2 -2
  23. package/dist/cjs/co-slider.cjs.entry.js +2 -2
  24. package/dist/cjs/co-switch.cjs.entry.js +3 -3
  25. package/dist/cjs/co-tab-group.cjs.entry.js +2 -2
  26. package/dist/cjs/co-tab.cjs.entry.js +2 -2
  27. package/dist/cjs/co-tags-field.cjs.entry.js +5 -5
  28. package/dist/cjs/co-textarea.cjs.entry.js +4 -4
  29. package/dist/cjs/co-time-field.cjs.entry.js +1 -1
  30. package/dist/cjs/co-toggle-button-group.cjs.entry.js +2 -2
  31. package/dist/cjs/co-toggle-button.cjs.entry.js +2 -2
  32. package/dist/cjs/co-tooltip.cjs.entry.js +2 -2
  33. package/dist/cjs/co-video.cjs.entry.js +2 -2
  34. package/dist/cjs/cobalt.cjs.js +1 -1
  35. package/dist/cjs/{index-BYwrR87Z.js → index-2kMmd5-a.js} +6717 -6654
  36. package/dist/cjs/index-MDAnKsze.js +4 -4
  37. package/dist/cjs/loader.cjs.js +1 -1
  38. package/dist/cjs/{normalizeText-B-v-XPKf.js → normalizeText-D9rlJWZa.js} +29 -18
  39. package/dist/cjs/{toolbar-config-BSGas-Wl.js → toolbar-config-CYACt9hh.js} +13 -1
  40. package/dist/cobalt/cobalt.esm.js +1 -1
  41. package/dist/cobalt/{p-2fba312b.entry.js → p-0c004735.entry.js} +1 -1
  42. package/dist/cobalt/{p-16954cea.entry.js → p-11c5ce78.entry.js} +1 -1
  43. package/dist/cobalt/{p-c465d619.entry.js → p-1861fe41.entry.js} +1 -1
  44. package/dist/cobalt/p-1cc818ca.entry.js +1 -0
  45. package/dist/cobalt/p-216a63ee.entry.js +1 -0
  46. package/dist/cobalt/p-24196410.entry.js +1 -0
  47. package/dist/cobalt/{p-5e4973a6.entry.js → p-292b0389.entry.js} +1 -1
  48. package/dist/cobalt/{p-b5bba7fe.entry.js → p-2c9dba2f.entry.js} +1 -1
  49. package/dist/cobalt/{p-789c4b3e.entry.js → p-39a50e7f.entry.js} +1 -1
  50. package/dist/cobalt/p-39dc4ec8.entry.js +1 -0
  51. package/dist/cobalt/{p-3c4f7026.entry.js → p-3d31c575.entry.js} +1 -1
  52. package/dist/cobalt/{p-37f5036b.entry.js → p-49834b8e.entry.js} +1 -1
  53. package/dist/cobalt/p-5c756787.entry.js +1 -0
  54. package/dist/cobalt/{p-27a7e549.entry.js → p-67f3b9d6.entry.js} +1 -1
  55. package/dist/cobalt/{p-9cf738ed.entry.js → p-6a4f3179.entry.js} +1 -1
  56. package/dist/cobalt/{p-6c82a892.entry.js → p-6dd220e0.entry.js} +1 -1
  57. package/dist/cobalt/{p-93fe45fd.entry.js → p-71cbc53c.entry.js} +1 -1
  58. package/dist/cobalt/{p-e371ec7a.entry.js → p-72e52af7.entry.js} +1 -1
  59. package/dist/cobalt/{p-d3344187.entry.js → p-7b5c555c.entry.js} +1 -1
  60. package/dist/cobalt/{p-148d4aa6.entry.js → p-8530ad16.entry.js} +1 -1
  61. package/dist/cobalt/{p-a325ea0c.entry.js → p-8a74bf7d.entry.js} +1 -1
  62. package/dist/cobalt/{p-7e8e6907.entry.js → p-8ebc0c12.entry.js} +1 -1
  63. package/dist/cobalt/p-99a655f6.entry.js +1 -0
  64. package/dist/{components/p-DOL2zACE.js → cobalt/p-BAYo-RBt.js} +1 -1
  65. package/dist/cobalt/p-Ba_v-MzM.js +1 -0
  66. package/dist/cobalt/{p-Bryf3-Js.js → p-CJW9H3Gi.js} +1 -1
  67. package/dist/cobalt/p-a1b422ca.entry.js +1 -0
  68. package/dist/cobalt/{p-354d5089.entry.js → p-ade07307.entry.js} +1 -1
  69. package/dist/cobalt/{p-383a998e.entry.js → p-b437eff6.entry.js} +1 -1
  70. package/dist/cobalt/p-b698188c.entry.js +1 -0
  71. package/dist/cobalt/p-bde32f8b.entry.js +1 -0
  72. package/dist/cobalt/{p-95cfcb34.entry.js → p-c30b4cb5.entry.js} +1 -1
  73. package/dist/cobalt/p-ee149fd2.entry.js +1 -0
  74. package/dist/cobalt/{p-fd150cc6.entry.js → p-f7eb1a40.entry.js} +1 -1
  75. package/dist/cobalt/{p-16f8cee6.entry.js → p-f9a7b7c6.entry.js} +1 -1
  76. package/dist/collection/components/co-accordion/co-accordion.css +9 -2
  77. package/dist/collection/components/co-accordion/co-accordion.js +35 -4
  78. package/dist/collection/components/co-autocomplete/co-autocomplete.js +1 -1
  79. package/dist/collection/components/co-avatar/co-avatar.css +22 -1
  80. package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
  81. package/dist/collection/components/co-button/co-button.css +9 -0
  82. package/dist/collection/components/co-calendar/co-calendar.css +10 -4
  83. package/dist/collection/components/co-calendar/co-calendar.js +6 -2
  84. package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
  85. package/dist/collection/components/co-combobox/co-combobox.js +1 -1
  86. package/dist/collection/components/co-command-search/co-command-search.js +1 -1
  87. package/dist/collection/components/co-data-table/co-data-table.js +1 -1
  88. package/dist/collection/components/co-date-range-picker/co-date-range-picker.css +13 -0
  89. package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +4 -2
  90. package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +4 -43
  91. package/dist/collection/components/co-file-type-tile/co-file-type-tile.utils.js +55 -0
  92. package/dist/collection/components/co-option-list/co-option-list.js +8 -6
  93. package/dist/collection/components/co-phone-field/co-phone-field.js +5 -5
  94. package/dist/collection/components/co-popover/co-popover.js +1 -1
  95. package/dist/collection/components/co-radio-group/co-radio-group.js +1 -1
  96. package/dist/collection/components/co-ref-field/co-ref-field.js +4 -4
  97. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.css +22 -0
  98. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +48 -8
  99. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.css +52 -0
  100. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +25 -2
  101. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.css +5 -0
  102. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +17 -1
  103. package/dist/collection/components/co-row/co-row.js +2 -2
  104. package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +1 -1
  105. package/dist/collection/components/co-select/co-select.js +9 -9
  106. package/dist/collection/components/co-separator/co-separator.js +1 -1
  107. package/dist/collection/components/co-sidebar/co-sidebar.js +2 -2
  108. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +1 -1
  109. package/dist/collection/components/co-skeleton/co-skeleton.js +1 -1
  110. package/dist/collection/components/co-slider/co-slider.js +2 -2
  111. package/dist/collection/components/co-switch/co-switch.js +3 -3
  112. package/dist/collection/components/co-tab/co-tab.js +2 -2
  113. package/dist/collection/components/co-tab-group/co-tab-group.js +2 -2
  114. package/dist/collection/components/co-tags-field/co-tags-field.js +5 -5
  115. package/dist/collection/components/co-textarea/co-textarea.js +4 -4
  116. package/dist/collection/components/co-time-field/co-time-field.js +1 -1
  117. package/dist/collection/components/co-toast/co-toast.js +2 -2
  118. package/dist/collection/components/co-toggle-button/co-toggle-button.js +2 -2
  119. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +2 -2
  120. package/dist/collection/components/co-tooltip/co-tooltip.js +2 -2
  121. package/dist/collection/components/co-transfer-list/co-transfer-list.js +1 -1
  122. package/dist/collection/components/co-video/co-video.js +2 -2
  123. package/dist/collection/utils/normalizeText.js +43 -0
  124. package/dist/components/co-accordion.js +1 -1
  125. package/dist/components/co-autocomplete.js +1 -1
  126. package/dist/components/co-avatar-group.js +1 -1
  127. package/dist/components/co-avatar.js +1 -1
  128. package/dist/components/co-button.js +1 -1
  129. package/dist/components/co-calendar-month.js +1 -1
  130. package/dist/components/co-calendar-timegrid.js +1 -1
  131. package/dist/components/co-calendar.js +1 -1
  132. package/dist/components/co-column-picker.js +1 -1
  133. package/dist/components/co-combobox.js +1 -1
  134. package/dist/components/co-command-search.js +1 -1
  135. package/dist/components/co-data-table.js +1 -1
  136. package/dist/components/co-date-picker.js +1 -1
  137. package/dist/components/co-date-range-picker.js +1 -1
  138. package/dist/components/co-date-range.js +1 -1
  139. package/dist/components/co-date-time-picker.js +1 -1
  140. package/dist/components/co-drive-card.js +1 -1
  141. package/dist/components/co-emoji-picker.js +1 -1
  142. package/dist/components/co-event-calendar.js +1 -1
  143. package/dist/components/co-file-field.js +1 -1
  144. package/dist/components/co-file-type-tile.js +1 -1
  145. package/dist/components/co-lightbox.js +1 -1
  146. package/dist/components/co-list-item.js +1 -1
  147. package/dist/components/co-option-list.js +1 -1
  148. package/dist/components/co-phone-field.js +1 -1
  149. package/dist/components/co-ref-field.js +1 -1
  150. package/dist/components/co-rich-text-editor.js +1 -1
  151. package/dist/components/co-rich-text-toolbar.js +1 -1
  152. package/dist/components/co-rich-text-viewer.js +1 -1
  153. package/dist/components/co-row.js +1 -1
  154. package/dist/components/co-select.js +1 -1
  155. package/dist/components/co-separator.js +1 -1
  156. package/dist/components/co-sidebar-nav.js +1 -1
  157. package/dist/components/co-sidebar.js +1 -1
  158. package/dist/components/co-skeleton.js +1 -1
  159. package/dist/components/co-slider.js +1 -1
  160. package/dist/components/co-switch.js +1 -1
  161. package/dist/components/co-tab-group.js +1 -1
  162. package/dist/components/co-tab.js +1 -1
  163. package/dist/components/co-tags-field.js +1 -1
  164. package/dist/components/co-textarea.js +1 -1
  165. package/dist/components/co-time-field.js +1 -1
  166. package/dist/components/co-toggle-button-group.js +1 -1
  167. package/dist/components/co-toggle-button.js +1 -1
  168. package/dist/components/co-tooltip.js +1 -1
  169. package/dist/components/co-video.js +1 -1
  170. package/dist/components/{p-CLsAo0-A.js → p-2EOI1nrz.js} +1 -1
  171. package/dist/{cobalt/p-DOL2zACE.js → components/p-BAYo-RBt.js} +1 -1
  172. package/dist/components/p-Ba_v-MzM.js +1 -0
  173. package/dist/components/p-BhCVadcA.js +1 -0
  174. package/dist/components/p-BrAFTkAn.js +1 -0
  175. package/dist/components/{p-zuhal3IZ.js → p-Bsh0JMGf.js} +1 -1
  176. package/dist/components/{p-Bryf3-Js.js → p-CJW9H3Gi.js} +1 -1
  177. package/dist/components/p-CWCYYQrF.js +1 -0
  178. package/dist/components/p-D7Lhxz7L.js +1 -0
  179. package/dist/components/{p-B9xitpGU.js → p-DFlJMEJ-.js} +1 -1
  180. package/dist/components/{p-De7w9k6_.js → p-DTPYZwaZ.js} +1 -1
  181. package/dist/components/{p-DSnJWzQw.js → p-Dc_Kbari.js} +1 -1
  182. package/dist/components/{p-D2ldYZo1.js → p-Dcg4krSX.js} +1 -1
  183. package/dist/components/p-DrTRB8Ev.js +1 -0
  184. package/dist/components/{p-DTi2O4O8.js → p-DvR45CLa.js} +1 -1
  185. package/dist/components/{p-DDV_bRcU.js → p-Nt4JJxbL.js} +1 -1
  186. package/dist/components/{p-D3mVYO-G.js → p-uxdXViMV.js} +1 -1
  187. package/dist/esm/co-accordion.entry.js +32 -3
  188. package/dist/esm/co-avatar.entry.js +1 -1
  189. package/dist/esm/co-button.entry.js +1 -1
  190. package/dist/esm/co-calendar_3.entry.js +7 -3
  191. package/dist/esm/co-chip_2.entry.js +8 -6
  192. package/dist/esm/co-column-picker.entry.js +1 -1
  193. package/dist/esm/co-combobox.entry.js +1 -1
  194. package/dist/esm/co-command-search.entry.js +1 -1
  195. package/dist/esm/co-date-range-picker.entry.js +3 -1
  196. package/dist/esm/co-emoji-picker.entry.js +1 -1
  197. package/dist/esm/co-file-type-tile.entry.js +23 -7
  198. package/dist/esm/co-phone-field.entry.js +5 -5
  199. package/dist/esm/co-provider-logo_2.entry.js +1 -1
  200. package/dist/esm/co-rich-text-editor.entry.js +30 -10
  201. package/dist/esm/co-rich-text-toolbar.entry.js +5 -2
  202. package/dist/esm/co-rich-text-viewer.entry.js +19 -3
  203. package/dist/esm/co-row.entry.js +2 -2
  204. package/dist/esm/co-select.entry.js +8 -8
  205. package/dist/esm/co-separator.entry.js +1 -1
  206. package/dist/esm/co-sidebar-nav.entry.js +1 -1
  207. package/dist/esm/co-sidebar.entry.js +2 -2
  208. package/dist/esm/co-slider.entry.js +2 -2
  209. package/dist/esm/co-switch.entry.js +3 -3
  210. package/dist/esm/co-tab-group.entry.js +2 -2
  211. package/dist/esm/co-tab.entry.js +2 -2
  212. package/dist/esm/co-tags-field.entry.js +5 -5
  213. package/dist/esm/co-textarea.entry.js +4 -4
  214. package/dist/esm/co-time-field.entry.js +1 -1
  215. package/dist/esm/co-toggle-button-group.entry.js +2 -2
  216. package/dist/esm/co-toggle-button.entry.js +2 -2
  217. package/dist/esm/co-tooltip.entry.js +2 -2
  218. package/dist/esm/co-video.entry.js +2 -2
  219. package/dist/esm/cobalt.js +1 -1
  220. package/dist/esm/{index-68iUQp5j.js → index-BBIYyvq-.js} +6717 -6654
  221. package/dist/esm/index-DH5lfRNj.js +4 -4
  222. package/dist/esm/loader.js +1 -1
  223. package/dist/esm/{normalizeText-CQY6Ul7q.js → normalizeText-Ba_v-MzM.js} +29 -18
  224. package/dist/esm/{toolbar-config-DOL2zACE.js → toolbar-config-BAYo-RBt.js} +13 -1
  225. package/dist/types/components/co-accordion/co-accordion.d.ts +11 -2
  226. package/dist/types/components/co-file-type-tile/co-file-type-tile.utils.d.ts +12 -0
  227. package/dist/types/components/co-rich-text-editor/co-rich-text-editor.d.ts +7 -0
  228. package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +4 -1
  229. package/dist/types/components.d.ts +41 -11
  230. package/dist/types/utils/normalizeText.d.ts +13 -0
  231. package/package.json +2 -2
  232. package/dist/cobalt/p-239c5c5f.entry.js +0 -1
  233. package/dist/cobalt/p-2f0f3bb1.entry.js +0 -1
  234. package/dist/cobalt/p-5adf117c.entry.js +0 -1
  235. package/dist/cobalt/p-5ca394b1.entry.js +0 -1
  236. package/dist/cobalt/p-66b11b38.entry.js +0 -1
  237. package/dist/cobalt/p-CQY6Ul7q.js +0 -1
  238. package/dist/cobalt/p-b0c4fc71.entry.js +0 -1
  239. package/dist/cobalt/p-c124e82b.entry.js +0 -1
  240. package/dist/cobalt/p-d9d9e8ae.entry.js +0 -1
  241. package/dist/cobalt/p-e8a2f993.entry.js +0 -1
  242. package/dist/cobalt/p-eb8691f2.entry.js +0 -1
  243. package/dist/components/p-CFFDmGPS.js +0 -1
  244. package/dist/components/p-CQY6Ul7q.js +0 -1
  245. package/dist/components/p-DoHLTC0n.js +0 -1
  246. package/dist/components/p-HxVRXXXC.js +0 -1
  247. package/dist/components/p-vby0ITbe.js +0 -1
  248. package/dist/components/p-wjt4IAGZ.js +0 -1
@@ -37,6 +37,13 @@ export class CoRichTextEditor {
37
37
  this.autofocus = false;
38
38
  /** Toolbar layout. `auto` uses the preset default. */
39
39
  this.toolbar = 'auto';
40
+ /** Where the toolbar sits. `bottom` moves it under the content, into a row that also
41
+ * exposes a `toolbar-end` light-DOM slot (this component is `shadow: false`) for the
42
+ * consumer's footer (hint, submit). The row renders whenever the mode is `bottom`, even
43
+ * while the toolbar itself is hidden (disabled/readonly): keep the slotted child ALWAYS
44
+ * mounted and toggle its insides — a placeholder that comes and goes desyncs Stencil's
45
+ * slot relocation with the consumer's vdom. */
46
+ this.toolbarPosition = 'top';
40
47
  /** Passthrough: shows the toolbar attachment button (host owns the files). */
41
48
  this.attachmentsEnabled = false;
42
49
  /** BCP-47 locale for UI strings (e.g. 'en', 'es-CO', 'pt-BR'). Default English. */
@@ -296,7 +303,10 @@ export class CoRichTextEditor {
296
303
  }
297
304
  }
298
305
  sanitizeHtml(html) {
299
- return this.rt.sanitize(html, this.preset);
306
+ // Con las MISMAS features que cargaron el schema: sin ellas, un <img> con
307
+ // `features.image` o los attrs de menciones en un preset que no los lleva en
308
+ // su whitelist base se podaban EN SILENCIO al emitir (2026-09-18).
309
+ return this.rt.sanitize(html, this.preset, this.parsedFeatures);
300
310
  }
301
311
  buildOutput(editor) {
302
312
  const empty = editor.isEmpty;
@@ -1987,12 +1997,19 @@ export class CoRichTextEditor {
1987
1997
  const c = (((_a = dom === null || dom === void 0 ? void 0 : dom.closest) === null || _a === void 0 ? void 0 : _a.call(dom, '[data-resize-container]')) || dom);
1988
1998
  if (!c)
1989
1999
  return true;
1990
- c.dataset.imageLayout = node.attrs.imageLayout || 'inline';
2000
+ const layout = node.attrs.imageLayout || 'inline';
2001
+ c.dataset.imageLayout = layout;
1991
2002
  // Neutralise any absolute positioning baked by the old fixed-page model.
1992
2003
  c.style.position = '';
1993
2004
  c.style.left = '';
1994
2005
  c.style.top = '';
1995
2006
  c.style.zIndex = '';
2007
+ // The resize NodeView pins `display: inline-flex` INLINE on the container, which
2008
+ // beats the stylesheet's `display: block` for `center` / `full-width`: the editor
2009
+ // showed those images inline-left while the viewer (and the sent email) centred
2010
+ // them (2026-09-17). Clear it for block layouts so the CSS rule can apply; the
2011
+ // inline value is restored for flow layouts so the resize handles keep working.
2012
+ c.style.display = layout === 'center' || layout === 'full-width' ? '' : 'inline-flex';
1996
2013
  return true;
1997
2014
  });
1998
2015
  }
@@ -2034,7 +2051,12 @@ export class CoRichTextEditor {
2034
2051
  render() {
2035
2052
  const showToolbar = this.resolvedToolbar !== 'none' && !this.readonly && !this.disabled;
2036
2053
  const showCount = this.showCharacterCount || this.maxLength != null;
2037
- return (h("div", { key: '3acc844eb53d8b3568d9f72e053363b674e9ba87', class: {
2054
+ const bottom = this.toolbarPosition === 'bottom';
2055
+ const toolbar = showToolbar && (h("co-rich-text-toolbar", { key: '0df30a57a843cbcd967ffd254ae0e54bee448902', class: "co-rich-text-editor__toolbar", part: "toolbar", variant: this.resolvedToolbar, position: this.toolbarPosition, disabled: this.disabled || this.readonly, locale: this.locale, attachmentsEnabled: this.attachmentsEnabled, attachmentAccept: this.attachmentAccept, onCoAttachmentsSelected: (e) => {
2056
+ e.stopPropagation();
2057
+ this.coAttachmentsSelected.emit(e.detail);
2058
+ }, ref: (el) => (this.toolbarEl = el) }));
2059
+ return (h("div", { key: '03be9df0d50d00a3cf889b3404c4f347626aa27c', class: {
2038
2060
  'co-rich-text-editor': true,
2039
2061
  'co-rich-text-editor--focused': this.hasFocus,
2040
2062
  'co-rich-text-editor--disabled': this.disabled,
@@ -2042,10 +2064,8 @@ export class CoRichTextEditor {
2042
2064
  'co-rich-text-editor--loading': !this.ready,
2043
2065
  [`co-rich-text-editor--${this.status}`]: this.status !== 'default',
2044
2066
  'co-rich-text-editor--flat': this.variant === 'flat',
2045
- }, part: "wrapper" }, (this.label || this.secondaryLabel) && (h("div", { key: '53b6f47e19e422ab1c7b3e2d452f320495199c33', class: "co-rich-text-editor__labels" }, this.label && h("label", { key: 'c4c7eb0f49cbffc40cbd6cfd2a28848201623be9', class: "co-rich-text-editor__label", part: "label" }, this.label), this.secondaryLabel && (h("span", { key: '13663ac237f80b637ebf8df841ba52c4aa73a0f4', class: "co-rich-text-editor__secondary-label" }, this.secondaryLabel)))), h("div", { key: 'deb51dfabddb6ca08dc849f17f7850d635bee9e0', class: "co-rich-text-editor__frame" }, showToolbar && (h("co-rich-text-toolbar", { key: 'f62c2cf76ce791f0648bde14c30300c40417a22b', class: "co-rich-text-editor__toolbar", part: "toolbar", variant: this.resolvedToolbar, disabled: this.disabled || this.readonly, locale: this.locale, attachmentsEnabled: this.attachmentsEnabled, attachmentAccept: this.attachmentAccept, onCoAttachmentsSelected: (e) => {
2046
- e.stopPropagation();
2047
- this.coAttachmentsSelected.emit(e.detail);
2048
- }, ref: (el) => (this.toolbarEl = el) })), h("div", { key: 'af3c512a9ec4ed3dc62d83b8acbd13132c84f349', class: "co-rich-text-editor__box" }, h("div", { key: '3cacb60bf24487d631ec3e7153313b3ed940ea8e', class: "co-rte-content", part: "content", role: "textbox", "aria-multiline": "true", "aria-label": this.label, "aria-required": this.required ? 'true' : undefined, "aria-invalid": this.status === 'error' ? 'true' : undefined, ref: (el) => (this.contentEl = el) }))), h("div", { key: 'ac6511ee617587f29a55adeb5ef9840be559adcd', class: "co-rich-text-editor__footer" }, this.helperText && (h("div", { key: '8ae2c198a948e553d22111bad15d5119c7ee090f', class: `co-rich-text-editor__helper co-rich-text-editor__helper--${this.status}`, part: "helper" }, h("co-icon", { key: 'a764d0daeeaeee64fae43c2358cdad9ecfe89b13', name: this.helperIcon, size: 14 }), h("span", { key: 'c1efcf1a97de016fa78a408306696cc0f4b29f29' }, this.helperText))), showCount && (h("span", { key: 'c68f01b407e6b2aa17582b58244b147825729138', class: "co-rich-text-editor__count", ref: (el) => (this.charCountEl = el) }, this.charCount, this.maxLength != null ? ` / ${this.maxLength}` : '')))));
2067
+ 'co-rich-text-editor--toolbar-bottom': bottom,
2068
+ }, part: "wrapper" }, (this.label || this.secondaryLabel) && (h("div", { key: 'ae732219465a376af19e771e63589c955be37c4b', class: "co-rich-text-editor__labels" }, this.label && h("label", { key: 'd316724c4f4bcbf55adf582b8ad40c6c45fba407', class: "co-rich-text-editor__label", part: "label" }, this.label), this.secondaryLabel && (h("span", { key: '3cca63f6dfa2335dcd7122eb734205d4fd86a90f', class: "co-rich-text-editor__secondary-label" }, this.secondaryLabel)))), h("div", { key: '620bd101dd94684f7b2d533401717eeb7421593c', class: "co-rich-text-editor__frame" }, !bottom && toolbar, h("div", { key: 'a20f163022dd1c6e23dfc222786ddf0fc6f9b3ac', class: "co-rich-text-editor__box" }, h("div", { key: 'd678e095ae36610895cb466c1a15c722b46d4483', class: "co-rte-content", part: "content", role: "textbox", "aria-multiline": "true", "aria-label": this.label, "aria-required": this.required ? 'true' : undefined, "aria-invalid": this.status === 'error' ? 'true' : undefined, ref: (el) => (this.contentEl = el) })), h("slot", { key: '62127cb0a34e7f43ceadcb20ef724aba0524fa69', name: "content-end" }), bottom && (h("div", { key: '99d574e7cbb2a115a243288b770cb03f1892ff93', class: "co-rich-text-editor__toolbar-row", part: "toolbar-row" }, toolbar, h("slot", { key: 'b9b971930ddda8d118c8b6d204fad8d41d25468e', name: "toolbar-end" })))), h("div", { key: 'caafa3f153192eee6efa7679dafa376dea69b150', class: "co-rich-text-editor__footer" }, this.helperText && (h("div", { key: '8d2ab21ababab2c14c912f8ffd6945001fca62f7', class: `co-rich-text-editor__helper co-rich-text-editor__helper--${this.status}`, part: "helper" }, h("co-icon", { key: 'b60df4c320b9356a87df39179c75360f91e858bf', name: this.helperIcon, size: 14 }), h("span", { key: 'd56108257c9bba2332e434d6240f4f387e2411f6' }, this.helperText))), showCount && (h("span", { key: '7973c2996e24ec991115fe4932915a9aefc1b495', class: "co-rich-text-editor__count", ref: (el) => (this.charCountEl = el) }, this.charCount, this.maxLength != null ? ` / ${this.maxLength}` : '')))));
2049
2069
  }
2050
2070
  static get is() { return "co-rich-text-editor"; }
2051
2071
  static get originalStyleUrls() {
@@ -2348,7 +2368,7 @@ export class CoRichTextEditor {
2348
2368
  "mutable": false,
2349
2369
  "complexType": {
2350
2370
  "original": "ToolbarVariant",
2351
- "resolved": "\"auto\" | \"basic\" | \"compact\" | \"compact-assets\" | \"full\" | \"none\" | \"notes\"",
2371
+ "resolved": "\"auto\" | \"basic\" | \"compact\" | \"compact-assets\" | \"email\" | \"full\" | \"none\" | \"notes\"",
2352
2372
  "references": {
2353
2373
  "ToolbarVariant": {
2354
2374
  "location": "import",
@@ -2370,6 +2390,26 @@ export class CoRichTextEditor {
2370
2390
  "attribute": "toolbar",
2371
2391
  "defaultValue": "'auto'"
2372
2392
  },
2393
+ "toolbarPosition": {
2394
+ "type": "string",
2395
+ "mutable": false,
2396
+ "complexType": {
2397
+ "original": "'top' | 'bottom'",
2398
+ "resolved": "\"bottom\" | \"top\"",
2399
+ "references": {}
2400
+ },
2401
+ "required": false,
2402
+ "optional": false,
2403
+ "docs": {
2404
+ "tags": [],
2405
+ "text": "Where the toolbar sits. `bottom` moves it under the content, into a row that also\nexposes a `toolbar-end` light-DOM slot (this component is `shadow: false`) for the\nconsumer's footer (hint, submit). The row renders whenever the mode is `bottom`, even\nwhile the toolbar itself is hidden (disabled/readonly): keep the slotted child ALWAYS\nmounted and toggle its insides \u2014 a placeholder that comes and goes desyncs Stencil's\nslot relocation with the consumer's vdom."
2406
+ },
2407
+ "getter": false,
2408
+ "setter": false,
2409
+ "reflect": true,
2410
+ "attribute": "toolbar-position",
2411
+ "defaultValue": "'top'"
2412
+ },
2373
2413
  "features": {
2374
2414
  "type": "string",
2375
2415
  "mutable": false,
@@ -843,3 +843,55 @@
843
843
  border-color: var(--co-color-base-negro, #1a1a1a);
844
844
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);
845
845
  }
846
+
847
+ /* ── Bottom placement (editor `toolbar-position="bottom"`) ──
848
+ The editor's toolbar row paints the separator (border-top) and the surface,
849
+ so the toolbar drops its own bottom border, background and corner rounding. */
850
+ :host([position="bottom"]) {
851
+ background: transparent;
852
+ }
853
+
854
+ :host([position="bottom"]) .co-rich-text-toolbar {
855
+ border-bottom: 0;
856
+ background: transparent;
857
+ border-radius: 0;
858
+ }
859
+
860
+ /* With the toolbar at the foot of the editor every panel that hangs off a button
861
+ (`top: 100%`) would open downwards into the viewport edge and get clipped
862
+ (suite-v2 message templates, 2026-09-17). Anchor them ABOVE the button instead;
863
+ the gap flips with them. */
864
+ :host([position="bottom"]) .co-rich-text-toolbar__popover {
865
+ top: auto;
866
+ bottom: 100%;
867
+ margin-top: 0;
868
+ margin-bottom: var(--co-spacing-xs, 4px);
869
+ }
870
+
871
+ :host([position="bottom"]) .co-rich-text-toolbar__dropdown {
872
+ top: auto;
873
+ bottom: 100%;
874
+ margin-top: 0;
875
+ margin-bottom: var(--co-spacing-xs, 4px);
876
+ }
877
+
878
+ :host([position="bottom"]) .co-rich-text-toolbar__color-picker {
879
+ top: auto;
880
+ bottom: 100%;
881
+ margin-top: 0;
882
+ margin-bottom: var(--co-spacing-xs, 4px);
883
+ }
884
+
885
+ :host([position="bottom"]) .co-rich-text-toolbar__table-picker {
886
+ top: auto;
887
+ bottom: 100%;
888
+ margin-top: 0;
889
+ margin-bottom: var(--co-spacing-xs, 4px);
890
+ }
891
+
892
+ :host([position="bottom"]) .co-rich-text-toolbar__listpicker {
893
+ top: auto;
894
+ bottom: 100%;
895
+ margin-top: 0;
896
+ margin-bottom: var(--co-spacing-xs, 4px);
897
+ }
@@ -14,6 +14,9 @@ export class CoRichTextToolbar {
14
14
  constructor() {
15
15
  /** Toolbar layout variant. */
16
16
  this.variant = 'basic';
17
+ /** Placement inside co-rich-text-editor. `bottom` drops the toolbar's own bottom
18
+ * border/background/rounding: the editor's toolbar row paints the separator. */
19
+ this.position = 'top';
17
20
  this.disabled = false;
18
21
  /** BCP-47 locale for UI strings (e.g. 'en', 'es-CO', 'pt-BR'). Default English. */
19
22
  this.locale = 'en';
@@ -1143,8 +1146,8 @@ export class CoRichTextToolbar {
1143
1146
  "type": "string",
1144
1147
  "mutable": false,
1145
1148
  "complexType": {
1146
- "original": "'none' | 'compact' | 'compact-assets' | 'basic' | 'notes' | 'full'",
1147
- "resolved": "\"basic\" | \"compact\" | \"compact-assets\" | \"full\" | \"none\" | \"notes\"",
1149
+ "original": "'none' | 'compact' | 'compact-assets' | 'basic' | 'notes' | 'email' | 'full'",
1150
+ "resolved": "\"basic\" | \"compact\" | \"compact-assets\" | \"email\" | \"full\" | \"none\" | \"notes\"",
1148
1151
  "references": {}
1149
1152
  },
1150
1153
  "required": false,
@@ -1159,6 +1162,26 @@ export class CoRichTextToolbar {
1159
1162
  "attribute": "variant",
1160
1163
  "defaultValue": "'basic'"
1161
1164
  },
1165
+ "position": {
1166
+ "type": "string",
1167
+ "mutable": false,
1168
+ "complexType": {
1169
+ "original": "'top' | 'bottom'",
1170
+ "resolved": "\"bottom\" | \"top\"",
1171
+ "references": {}
1172
+ },
1173
+ "required": false,
1174
+ "optional": false,
1175
+ "docs": {
1176
+ "tags": [],
1177
+ "text": "Placement inside co-rich-text-editor. `bottom` drops the toolbar's own bottom\nborder/background/rounding: the editor's toolbar row paints the separator."
1178
+ },
1179
+ "getter": false,
1180
+ "setter": false,
1181
+ "reflect": true,
1182
+ "attribute": "position",
1183
+ "defaultValue": "'top'"
1184
+ },
1162
1185
  "disabled": {
1163
1186
  "type": "boolean",
1164
1187
  "mutable": false,
@@ -33,6 +33,11 @@
33
33
  font-weight: 600;
34
34
  line-height: 1.3;
35
35
  }
36
+ /* Misma escala que el editor (co-rich-text-editor.css, .ProseMirror h1-h3):
37
+ sin esto el UA deja h1-h3 en em relativos y h4 en 1em = tamaño del cuerpo. */
38
+ .co-rich-text-viewer h1 { font-size: var(--co-font-size-28, 28px); }
39
+ .co-rich-text-viewer h2 { font-size: var(--co-font-size-20, 20px); }
40
+ .co-rich-text-viewer h3 { font-size: var(--co-font-size-16, 16px); }
36
41
 
37
42
  .co-rich-text-viewer ul,
38
43
  .co-rich-text-viewer ol {
@@ -12,7 +12,9 @@ import DOMPurify from "dompurify";
12
12
  * @part empty - The empty-state element
13
13
  */
14
14
  const ALLOWED_TAGS = {
15
- comment: ['p', 'br', 'strong', 'em', 'a', 'span'],
15
+ // Espejo de SANITIZE_CONFIGS.comment (rich-text/sanitizer.ts): más ancho que
16
+ // el schema del editor a propósito — el viewer pinta HTML de integraciones.
17
+ comment: ['p', 'br', 'strong', 'em', 'a', 'span', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4'],
16
18
  task: ['p', 'br', 'strong', 'em', 'a', 'span', 'u', 's', 'code', 'ul', 'ol', 'li', 'blockquote'],
17
19
  notes: ['p', 'br', 'strong', 'em', 'a', 'span', 'u', 's', 'code', 'ul', 'ol', 'li', 'blockquote', 'mark'],
18
20
  email: ['p', 'br', 'strong', 'em', 'a', 'span', 'u', 's', 'code', 'ul', 'ol', 'li', 'blockquote', 'h2', 'h3', 'div', 'img'],
@@ -55,6 +57,19 @@ export class CoRichTextViewer {
55
57
  }
56
58
  sanitizeHtml(html) {
57
59
  var _a, _b;
60
+ // Links externos SIEMPRE en pestaña nueva: el viewer conservaba target/rel si
61
+ // venían (los estampa el editor) pero nunca los agregaba, y el HTML de correos
62
+ // entrantes llega pelado → navegaba en la misma pestaña y tiraba la SPA
63
+ // (2026-09-18). Solo http(s); mailto:/tel: se dejan al navegador.
64
+ DOMPurify.addHook('afterSanitizeAttributes', (node) => {
65
+ if (node.tagName !== 'A')
66
+ return;
67
+ const href = node.getAttribute('href') || '';
68
+ if (!/^https?:\/\//i.test(href))
69
+ return;
70
+ node.setAttribute('target', '_blank');
71
+ node.setAttribute('rel', 'noopener noreferrer nofollow');
72
+ });
58
73
  DOMPurify.addHook('uponSanitizeElement', (node, data) => {
59
74
  var _a, _b;
60
75
  // Only allow <input type="checkbox"> (task list checkboxes); strip others.
@@ -92,6 +107,7 @@ export class CoRichTextViewer {
92
107
  }
93
108
  finally {
94
109
  DOMPurify.removeHook('uponSanitizeElement');
110
+ DOMPurify.removeHook('afterSanitizeAttributes');
95
111
  }
96
112
  }
97
113
  async compute() {
@@ -13,11 +13,11 @@ export class CoRow {
13
13
  this.size = 'sm';
14
14
  }
15
15
  render() {
16
- return (h("div", { key: 'df05ce9c0da83cd61ce3a42e4a578ea4d038e12c', class: {
16
+ return (h("div", { key: '415d9d352b0129f2e05182f0a928843fdb6b6321', 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: 'fcd7514bd6071f16f8b92ace2651bf33b74a402e', class: "co-row__prefix" }, h("slot", { key: '47254fffd8803454f9d8f0cccfb6e80bb7058b38', name: "prefix" })), h("div", { key: '43aaab6683919b7e9e47c0a67203edffa3db81df', class: "co-row__content" }, h("slot", { key: '4fb7a8ea03f79313176ca8c5ae23f878eace9027' })), h("div", { key: '3c7bcd64ccf417e95620cec6ae87d7d9d1697bed', class: "co-row__suffix" }, h("slot", { key: 'af2e72debbcc68919ef3e28d03ff18cf747ccc43', name: "suffix" }))));
20
+ }, part: "row" }, h("div", { key: 'af23c875f523e15a4891a7897ae76853d358f692', class: "co-row__prefix" }, h("slot", { key: 'fd3a54d31942ecd10e889f2691c1f6e2d94d2cf3', name: "prefix" })), h("div", { key: '884cad8bde957327b7814b03084da51bfeedb1e4', class: "co-row__content" }, h("slot", { key: 'aedd965fd4ef93597b02e5714fec0b19837544c8' })), h("div", { key: '228cb0a116920be271cc8969591cbe0c1ca8f9b9', class: "co-row__suffix" }, h("slot", { key: 'dee6339445cfe8fdb7a1adf82d795c16e7a16be3', name: "suffix" }))));
21
21
  }
22
22
  static get is() { return "co-row"; }
23
23
  static get encapsulation() { return "shadow"; }
@@ -154,7 +154,7 @@ export class CoSegmentedBar {
154
154
  "references": {
155
155
  "CoSegment": {
156
156
  "location": "local",
157
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-segmented-bar/co-segmented-bar.tsx",
157
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-segmented-bar/co-segmented-bar.tsx",
158
158
  "id": "src/components/co-segmented-bar/co-segmented-bar.tsx::CoSegment"
159
159
  }
160
160
  }
@@ -1,7 +1,7 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { RequiredMark } from "../../utils/requiredMark";
3
3
  import { OverlayScrollbars } from "overlayscrollbars";
4
- import { highlightMatch, rankByMatch } from "../../utils/normalizeText";
4
+ import { highlightSegments, rankByMatch } from "../../utils/normalizeText";
5
5
  export class CoSelect {
6
6
  constructor() {
7
7
  /** Whether the field is required (renders a required marker on the label). */
@@ -443,10 +443,10 @@ export class CoSelect {
443
443
  }
444
444
  /** Option label with the matched substring wrapped for highlighting. */
445
445
  renderLabel(label) {
446
- const seg = this.searchable && this.searchText ? highlightMatch(label, this.searchText) : null;
447
- if (!seg)
446
+ const segs = this.searchable && this.searchText ? highlightSegments(label, this.searchText) : null;
447
+ if (!segs)
448
448
  return label;
449
- return [seg.pre, h("span", { class: "co-select__match" }, seg.match), seg.post];
449
+ return segs.map((s) => (s.match ? h("span", { class: "co-select__match" }, s.text) : s.text));
450
450
  }
451
451
  getVirtualSlice(items) {
452
452
  const { ITEM_HEIGHT, VIEWPORT_ITEMS, OVERSCAN } = CoSelect;
@@ -468,20 +468,20 @@ export class CoSelect {
468
468
  const activeOptionId = this.isOpen && this.activeIndex >= 0 && this.activeIndex < options.length
469
469
  ? this.optionId(this.activeIndex)
470
470
  : undefined;
471
- return (h("div", { key: 'd59a2a542e3a53efbff607faa01eb8eef899e8a1', class: {
471
+ return (h("div", { key: '902da0519e9fe96401f5339a3b46a66c94efd3de', class: {
472
472
  'co-select': true,
473
473
  'co-select--open': this.isOpen,
474
474
  'co-select--disabled': this.disabled,
475
475
  [`co-select--${this.size}`]: true,
476
476
  [`co-select--${this.status}`]: this.status !== 'default',
477
477
  'co-select--flat': this.variant === 'flat',
478
- } }, (this.label || this.secondaryLabel) && (h("div", { key: 'd386f9b3ffcf323736615fe9abb2f2b5b059ef5d', class: "co-select__labels" }, this.label && h("label", { key: '4eb476e1413845a01da90e9d2d1a5d8c77f2dd27', class: "co-select__label" }, this.label, h(RequiredMark, { key: '448008d31b3870ba542003981fde4e59025c119f', required: this.required })), this.secondaryLabel && h("span", { key: 'da8d3dbe5290ed411cafe35ca8d11c9f3a13cf05', class: "co-select__secondary-label" }, this.secondaryLabel))), h("co-popover", { key: 'f83933aad455b009c909d067775a4458d9cf2b93', open: this.isOpen, placement: "bottom-start", matchWidth: true, offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: 'cc19e9fa6bb7448f39426fff39a4f000b957cc49', slot: "trigger", class: "co-select__trigger", role: "combobox", "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-label": this.label || this.ariaLabelText || undefined, "aria-disabled": this.disabled ? 'true' : undefined, "aria-controls": CoSelect.LISTBOX_ID, "aria-activedescendant": activeOptionId, tabIndex: this.disabled ? -1 : 0, ref: (el) => (this.triggerEl = el), onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, this.iconLeft && h("co-icon", { key: '34b24e244f80e3229d6a9b27af293995fdaf1499', name: this.iconLeft, size: 16, class: "co-select__icon" }), ((_a = this.selectedOption) === null || _a === void 0 ? void 0 : _a.image) && (h("img", { key: '29d4e4aca6b8baeb14da68f7d848e7d92cf2300e', class: "co-select__flag", src: this.selectedOption.image, alt: "" })), this.multiple && this.hasValue ? (h("div", { class: "co-select__chips" }, this.selectedValues.map((v) => {
478
+ } }, (this.label || this.secondaryLabel) && (h("div", { key: '3faf027e94d30728d7715ebca758eb0d9cb41bc9', class: "co-select__labels" }, this.label && h("label", { key: 'a7267986158eae66be547356482df079e3670d44', class: "co-select__label" }, this.label, h(RequiredMark, { key: '5eaca0cfade91041b33edd07e648b1e22cb875f3', required: this.required })), this.secondaryLabel && h("span", { key: '3561fb5297dde4c128e9c888cdd00546c5e1b4c3', class: "co-select__secondary-label" }, this.secondaryLabel))), h("co-popover", { key: '63fc16eefafcb8ef870aba457be9e00f5dce6f32', open: this.isOpen, placement: "bottom-start", matchWidth: true, offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: '6056ec2a5d85df9d8361f4b78f12eec6e2fe7749', slot: "trigger", class: "co-select__trigger", role: "combobox", "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-label": this.label || this.ariaLabelText || undefined, "aria-disabled": this.disabled ? 'true' : undefined, "aria-controls": CoSelect.LISTBOX_ID, "aria-activedescendant": activeOptionId, tabIndex: this.disabled ? -1 : 0, ref: (el) => (this.triggerEl = el), onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, this.iconLeft && h("co-icon", { key: '8877e366eba45e073a3481e7b86408763e103f6c', name: this.iconLeft, size: 16, class: "co-select__icon" }), ((_a = this.selectedOption) === null || _a === void 0 ? void 0 : _a.image) && (h("img", { key: '4f964e48dafff76a9fe04ed381b1f11113e351d6', class: "co-select__flag", src: this.selectedOption.image, alt: "" })), this.multiple && this.hasValue ? (h("div", { class: "co-select__chips" }, this.selectedValues.map((v) => {
479
479
  const opt = this.parsedOptions.find((o) => o.value === v);
480
480
  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) => {
481
481
  e.stopPropagation();
482
482
  this.handleOptionClick(v);
483
483
  } }, h("co-icon", { name: "x", size: 12 }))));
484
- }))) : (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: '8283fa5c6e945370d297820e4bf7a0c5c7118d49', class: "co-select__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: 'f9a7b5def3a2cc4e01f2a56e0c10743bc8e07e59', name: "x-circle", size: 16, weight: "fill" }))), h("co-icon", { key: 'f8b679fffe85ffb822e5cc839e35811c462f9592', name: this.isOpen ? 'caret-up' : 'caret-down', size: 16, class: "co-select__caret" })), h("div", { key: 'bda5777b9ebfd020189e29c1a1f6b17c7c86d978', class: "co-select__dropdown" }, this.isOpen && this.searchable && (h("div", { key: 'ad68d72ce251b1b85e8d3b459f435036ee3e755c', class: "co-select__search" }, h("co-icon", { key: '17fce190c24cc8d3a858b0d8eac91fa2f0bfcdc4', name: "magnifying-glass", size: 16, class: "co-select__search-icon" }), h("input", { key: '11b596b00d4ec1ca622fbf8f2a4fe1206dbbd175', class: "co-select__search-input", type: "text", placeholder: this.searchPlaceholder, value: this.searchText, "aria-controls": CoSelect.LISTBOX_ID, "aria-activedescendant": activeOptionId, onInput: this.handleSearchInput, onKeyDown: this.handleNavKeyDown, ref: (el) => (this.searchInputEl = el) }))), this.isOpen && this.searchable && options.length === 0 && (h("div", { key: '248d24733e9a785582be376e9adf1bddd486db79', class: "co-select__empty" }, this.emptyText)), h("div", { key: 'd4a45905d6eeac9e7275df90e01fb7e2fb092fbd', class: "co-select__options", id: CoSelect.LISTBOX_ID, role: "listbox", "aria-multiselectable": this.multiple ? 'true' : undefined, ref: (el) => (this.optionsContainerEl = el) }, this.isOpen && (() => {
484
+ }))) : (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: '55a94e3d877ec0c50ae4ce544774c6e4330b5f5e', class: "co-select__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: 'b452121827aa8b2f341396b3376e82728bee5276', name: "x-circle", size: 16, weight: "fill" }))), h("co-icon", { key: '0ebc5a451bcb3f2f95a63ab600157e27cb445a9b', name: this.isOpen ? 'caret-up' : 'caret-down', size: 16, class: "co-select__caret" })), h("div", { key: '92b18226a02de73cbd245ab6827c3f5593aa08fc', class: "co-select__dropdown" }, this.isOpen && this.searchable && (h("div", { key: '68aec7a4ced328a00a1185078edbbfe4820d6582', class: "co-select__search" }, h("co-icon", { key: '1aa322cf22d4824bf6d2012b6dfc4e856360502a', name: "magnifying-glass", size: 16, class: "co-select__search-icon" }), h("input", { key: '62ec52d3369334f83709bc5219d5b3ca040c3ccb', class: "co-select__search-input", type: "text", placeholder: this.searchPlaceholder, value: this.searchText, "aria-controls": CoSelect.LISTBOX_ID, "aria-activedescendant": activeOptionId, onInput: this.handleSearchInput, onKeyDown: this.handleNavKeyDown, ref: (el) => (this.searchInputEl = el) }))), this.isOpen && this.searchable && options.length === 0 && (h("div", { key: '86613208aa94d79b6aa503a6ed53c010cc1ba1f9', class: "co-select__empty" }, this.emptyText)), h("div", { key: 'a6b1f09abfbfb0171094079c3da7ac89764eb00f', class: "co-select__options", id: CoSelect.LISTBOX_ID, role: "listbox", "aria-multiselectable": this.multiple ? 'true' : undefined, ref: (el) => (this.optionsContainerEl = el) }, this.isOpen && (() => {
485
485
  const { totalHeight, startIdx, endIdx, offsetY } = this.getVirtualSlice(options);
486
486
  return (
487
487
  // Los wrappers del virtualizador van `presentation` para que las
@@ -497,7 +497,7 @@ export class CoSelect {
497
497
  'co-select__option--active': index === this.activeIndex,
498
498
  }, 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" })));
499
499
  }))));
500
- })()), this.isOpen && this.showFooter && (h("co-list-footer", { key: 'd4ec3a85eb066f11213ba0fa4614cc7439180121', class: "co-select__footer", primaryLabel: this.footerPrimaryLabel, primaryIcon: "check", onCoPrimary: this.handleFooterPrimary })))), this.helperText && (h("div", { key: '893289181663600d899a1dba74f2ac47cba72a28', class: `co-select__helper co-select__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: 'a21b2833866b76dc197cbb1a50edd1e1ec9d3e16', name: this.statusIcon, size: 14, class: "co-select__helper-icon" }), h("span", { key: '5c887dd997d3f7046f74586a5c4258f9a02df416', class: "co-select__helper-text" }, this.helperText)))));
500
+ })()), this.isOpen && this.showFooter && (h("co-list-footer", { key: '5f5d60d846092aed435e292a4652ad7016cb6aee', class: "co-select__footer", primaryLabel: this.footerPrimaryLabel, primaryIcon: "check", onCoPrimary: this.handleFooterPrimary })))), this.helperText && (h("div", { key: '72ebb3366ee45eaccce69f534611804f8f1dbc1c', class: `co-select__helper co-select__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: '2f2ad274cf521c3bd9f21d66d0fa9b7c87f7ba71', name: this.statusIcon, size: 14, class: "co-select__helper-icon" }), h("span", { key: '3e1ef4abb47a61d173e1942f5798caff97c2347e', class: "co-select__helper-text" }, this.helperText)))));
501
501
  }
502
502
  static get is() { return "co-select"; }
503
503
  static get encapsulation() { return "shadow"; }
@@ -737,7 +737,7 @@ export class CoSelect {
737
737
  "references": {
738
738
  "SelectOption": {
739
739
  "location": "local",
740
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-select/co-select.tsx",
740
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-select/co-select.tsx",
741
741
  "id": "src/components/co-select/co-select.tsx::SelectOption"
742
742
  }
743
743
  }
@@ -57,7 +57,7 @@ export class CoSeparator {
57
57
  style['--co-separator-inset-end'] = '0px';
58
58
  }
59
59
  }
60
- return (h("hr", { key: '049f323b914f76e3ea6097e56fbbda92e827c58d', class: {
60
+ return (h("hr", { key: '164044b86003ca2ed8c15a2d82cc50922dfe8313', 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: '2b28eeec6d294b22c82de54918a5c9f5da2765b9', class: {
13
+ return (h("nav", { key: '3d14a99c008dd92798182b04d7049c1a9fb4a00c', class: {
14
14
  'co-sidebar': true,
15
15
  [`co-sidebar--${this.mode}`]: true,
16
- }, part: "sidebar" }, h("div", { key: 'a2f2c05634bb76c3e9a9fdab221835d94c25d9fc', class: "co-sidebar__header", part: "header" }, h("slot", { key: 'f32a89453858268fd4672330fdf1d263793ae578', name: "header" })), h("div", { key: 'ecfaf8385f5fed7f545268e29a5a67468aa5a87a', class: "co-sidebar__body", part: "body" }, h("slot", { key: '2466d2aefe5268f21fd515d282baae2662c17f6c' })), h("div", { key: 'b7e2738a2a6bef17f588d59fba0c4ab21aefa7f8', class: "co-sidebar__footer", part: "footer" }, h("slot", { key: 'dcfcf1f58c99ca0acf359bbf9f73dfe51b0e7c76', name: "footer" }))));
16
+ }, part: "sidebar" }, h("div", { key: '1bf5b8ebe9eb9836c01ac8c7b651aac8af2ebf3c', class: "co-sidebar__header", part: "header" }, h("slot", { key: 'ba0d88bf62955a61b3e2d297261b260845cbd98f', name: "header" })), h("div", { key: '793248e8020bd38e3da64e35ca8610cb85b17d4a', class: "co-sidebar__body", part: "body" }, h("slot", { key: 'a76928e89d8425846ad0859339ab35b465bf917e' })), h("div", { key: '4182d50c61913447ae78c670bba1ca1821cc763d', class: "co-sidebar__footer", part: "footer" }, h("slot", { key: 'bb20795e0acc8e1865f8b5d8568768eb5c5097ee', name: "footer" }))));
17
17
  }
18
18
  static get is() { return "co-sidebar"; }
19
19
  static get encapsulation() { return "shadow"; }
@@ -702,7 +702,7 @@ export class CoSidebarNav {
702
702
  "references": {
703
703
  "NavigateDetail": {
704
704
  "location": "local",
705
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-sidebar-nav/co-sidebar-nav.tsx",
705
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-sidebar-nav/co-sidebar-nav.tsx",
706
706
  "id": "src/components/co-sidebar-nav/co-sidebar-nav.tsx::NavigateDetail"
707
707
  }
708
708
  }
@@ -50,7 +50,7 @@ export class CoSkeleton {
50
50
  const style = { width: this.width };
51
51
  if (this.height)
52
52
  style.height = this.height;
53
- return (h("div", { key: '45da8e989feca14de295c7b83bfd8f5e196a9734', class: {
53
+ return (h("div", { key: '744fb805939c99587c4d0b72355da54d1f5aad43', class: {
54
54
  'co-skeleton': true,
55
55
  [`co-skeleton--${this.variant}`]: true,
56
56
  'co-skeleton--revealed': this.revealed,
@@ -72,12 +72,12 @@ export class CoSlider {
72
72
  }
73
73
  render() {
74
74
  const pct = this.percentage;
75
- return (h("div", { key: 'f1b21cde4464675c8a27a30f04af6aeb0eb5c115', class: {
75
+ return (h("div", { key: 'd6e0584e8c2f04f1b9a393f200a853a6acc0399c', class: {
76
76
  'co-slider': true,
77
77
  'co-slider--disabled': this.disabled,
78
78
  'co-slider--dragging': this.dragging,
79
79
  [`co-slider--${this.status}`]: this.status !== 'default',
80
- } }, (this.label || this.secondaryLabel || this.showValue) && (h("div", { key: '20377b1c1b2cb329dd52cc10dfe4f5abf03eaecb', class: "co-slider__labels" }, h("div", { key: 'a9507269b1938732642ce7e7a4371628912377e3', class: "co-slider__labels-left" }, this.label && h("label", { key: '01e1760ef4a59ddc26bb4322f4b97133ccd04992', class: "co-slider__label" }, this.label), this.secondaryLabel && h("span", { key: '1b6c54039e18d9c8025941f76e1b92699855abae', class: "co-slider__secondary-label" }, this.secondaryLabel)), this.showValue && h("span", { key: 'c3fa230e31d052a9cb8a2efc8a3ed3b0b93e8041', class: "co-slider__value" }, this.value))), h("div", { key: 'c387ace9f1256cf4cf52e23add68242c147cd398', class: "co-slider__track-wrapper", ref: el => (this.trackEl = el), onPointerDown: this.handlePointerDown }, h("div", { key: 'f454a70a71984f0b45bd68efc9a36ba74bb4a73b', class: "co-slider__track" }, h("div", { key: '28b1fd955b14cd9ec563ad0a0c8cb625cf87bf1e', class: "co-slider__fill", style: { width: `${pct}%` } })), h("div", { key: '3f8e97722be5d5589931158b243f3e7084dae971', class: "co-slider__thumb", style: { left: `${pct}%` } })), this.showMarks && (h("div", { key: '7b58ecbcdfa544a47e15a9be15cec4baab35c56e', class: "co-slider__marks" }, h("span", { key: 'e94e7641d59d54aa92b7896d4f9a85cff93ca162', class: "co-slider__mark" }, this.min), h("span", { key: 'f6b139482d3d18885461d9d44fac8c4960897c00', class: "co-slider__mark" }, this.max))), h("input", { key: '65ddf275339b86a5451e28905ed4086bdde3bb75', class: "co-slider__native", type: "range", min: this.min, max: this.max, step: this.step, value: this.value, disabled: this.disabled, onInput: this.handleInputChange, "aria-label": this.label || 'Slider' }), this.helperText && (h("div", { key: '4b603fee85613d8221dfdca0687d7735c7bd7947', class: `co-slider__helper co-slider__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: 'c75be242a86fafbe87edaf0b47458f6897ca642f', name: this.statusIcon, size: 14, weight: "fill", class: "co-slider__helper-icon" }), h("span", { key: 'fa7e03cd30070441423b261de7704c39f24fbb9d', class: "co-slider__helper-text" }, this.helperText)))));
80
+ } }, (this.label || this.secondaryLabel || this.showValue) && (h("div", { key: 'a0eae621e367f1145bdd9bdde53fb024489d0812', class: "co-slider__labels" }, h("div", { key: '19e102fe586ccff3ad37bc7cd6b4dd4de5172be7', class: "co-slider__labels-left" }, this.label && h("label", { key: 'ad31ddd76acb9bf7bf25f07a7fad5206ab6eb689', class: "co-slider__label" }, this.label), this.secondaryLabel && h("span", { key: 'ccb7be2022de9d8d8ed1c7eeeac38b6d4711bd60', class: "co-slider__secondary-label" }, this.secondaryLabel)), this.showValue && h("span", { key: 'c38e8a050941184056441c94f6bcbfcc62522e62', class: "co-slider__value" }, this.value))), h("div", { key: 'c6cc971ea5dc3b4d30f8224ec359ae97a8ffa24a', class: "co-slider__track-wrapper", ref: el => (this.trackEl = el), onPointerDown: this.handlePointerDown }, h("div", { key: 'de241b0017db6f5934b2332b08b6709038379b2c', class: "co-slider__track" }, h("div", { key: '9b590f27f16839a6dba5f0e2eea7467a485f79c1', class: "co-slider__fill", style: { width: `${pct}%` } })), h("div", { key: 'c8820089a72ec566210550317233832ba84a9e0a', class: "co-slider__thumb", style: { left: `${pct}%` } })), this.showMarks && (h("div", { key: '2a40f01b836d29e453b691bc1f5f378166322e1e', class: "co-slider__marks" }, h("span", { key: '1f9dc67ca0e9c327766154a1a07a67c7e53efc68', class: "co-slider__mark" }, this.min), h("span", { key: '073c37ad99a45c05d7a0341e62ea9ed4e68d7acb', class: "co-slider__mark" }, this.max))), h("input", { key: 'fa18beabbcb2e26e86436bedc57de95f40c849f2', class: "co-slider__native", type: "range", min: this.min, max: this.max, step: this.step, value: this.value, disabled: this.disabled, onInput: this.handleInputChange, "aria-label": this.label || 'Slider' }), this.helperText && (h("div", { key: 'e8e46da2806b049d29c34620acd5cadf3abb03c8', class: `co-slider__helper co-slider__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: '1802da1ab54a283d46eca9cbb0fe0bf4a381956c', name: this.statusIcon, size: 14, weight: "fill", class: "co-slider__helper-icon" }), h("span", { key: 'ab294efdeee8c4546a83b16b55e3600f8706b2d7', class: "co-slider__helper-text" }, this.helperText)))));
81
81
  }
82
82
  static get is() { return "co-slider"; }
83
83
  static get encapsulation() { return "shadow"; }
@@ -29,16 +29,16 @@ export class CoSwitch {
29
29
  render() {
30
30
  const hasLabels = this.label || this.secondaryLabel;
31
31
  const hasHelper = !!this.helperText;
32
- return (h("div", { key: '956a6fb6f379beec4aceda49fb0b6460a4e88e7e', class: {
32
+ return (h("div", { key: '94410fce797382a4b25356d8b1325b5a75508d84', class: {
33
33
  'co-switch-wrapper': true,
34
34
  'co-switch-wrapper--disabled': this.disabled,
35
35
  [`co-switch-wrapper--${this.status}`]: this.status !== 'default',
36
- } }, h("div", { key: '320bc52265bbb759766bf2897fa46149fd29ea56', class: "co-switch-wrapper__row", onClick: this.handleClick }, h("button", { key: '8f8ccbee5f6b8bf4c59af1363184dc8289c0fd4f', role: "switch", "aria-checked": String(this.checked), "aria-label": this.label || '', class: {
36
+ } }, h("div", { key: '9b0d491e7e33faaa476dedd4f0e8826c4fde1249', class: "co-switch-wrapper__row", onClick: this.handleClick }, h("button", { key: '6c7cc4ece2aff5fa089271cf47908cfcbc3d5827', role: "switch", "aria-checked": String(this.checked), "aria-label": this.label || '', class: {
37
37
  'co-switch': true,
38
38
  'co-switch--on': this.checked,
39
39
  'co-switch--off': !this.checked,
40
40
  'co-switch--disabled': this.disabled,
41
- }, disabled: this.disabled, part: "track" }, h("span", { key: '963515eb5e7a6c2d8904367cabe4afd92c4034bd', class: "co-switch__thumb", part: "thumb" })), hasLabels && (h("div", { key: '2560a81688f26bc0b3bddef3c5553a8f9754678b', class: "co-switch-wrapper__labels" }, this.label && h("span", { key: '9996ab6c675c43be962414e28ecef532738322bc', class: "co-switch-wrapper__label", part: "label" }, this.label, h(RequiredMark, { key: '5505498fc3a27b5bf515935c46a3fdfdfe563cad', required: this.required })), this.secondaryLabel && (h("span", { key: '6886950f1e66077f46cceca4aabf2b0ae7a21f3c', class: "co-switch-wrapper__secondary-label", part: "secondary-label" }, this.secondaryLabel))))), hasHelper && (h("div", { key: '536e0021e9e1a986eb76eacf9e1b9af37cf0e1f0', class: `co-switch-wrapper__helper co-switch-wrapper__helper--${this.status}` }, this.statusIcon && (h("co-icon", { key: 'e98eb52b8f30b868b0b4df6f45b7594290c8ebd3', name: this.statusIcon, size: 14, weight: "fill", class: "co-switch-wrapper__helper-icon" })), h("span", { key: 'f77df5e62fedd3c28dd0e6b8dcc2ad9118c9f032', class: "co-switch-wrapper__helper-text" }, this.helperText)))));
41
+ }, disabled: this.disabled, part: "track" }, h("span", { key: '3a55c9aa1cc925dd09ac4d2b7367f8fd627b9e19', class: "co-switch__thumb", part: "thumb" })), hasLabels && (h("div", { key: '450cf6e28979b72e7821c0fa6130333410207343', class: "co-switch-wrapper__labels" }, this.label && h("span", { key: '509f09430837fcba73ff248d80a44e8bb7e2175f', class: "co-switch-wrapper__label", part: "label" }, this.label, h(RequiredMark, { key: 'ff017ff012f698b054db7f43832e3fb94b3eec01', required: this.required })), this.secondaryLabel && (h("span", { key: 'd5d33606934cd0d69f0faa3eb8afe2c962a1f5ab', class: "co-switch-wrapper__secondary-label", part: "secondary-label" }, this.secondaryLabel))))), hasHelper && (h("div", { key: '1111d3b03f846f524b53510dd3c638db2a0d7753', class: `co-switch-wrapper__helper co-switch-wrapper__helper--${this.status}` }, this.statusIcon && (h("co-icon", { key: '0deb3c0d9e2b6a4e7a5b791b8f739ed0d1dc9f91', name: this.statusIcon, size: 14, weight: "fill", class: "co-switch-wrapper__helper-icon" })), h("span", { key: 'f769d1b5c2217f84517b58baf91b0db7952c9062', class: "co-switch-wrapper__helper-text" }, this.helperText)))));
42
42
  }
43
43
  static get is() { return "co-switch"; }
44
44
  static get encapsulation() { return "shadow"; }
@@ -21,13 +21,13 @@ export class CoTab {
21
21
  }
22
22
  render() {
23
23
  const iconSize = this.variant === 'underline' ? 16 : this.size === 'large' ? 18 : 14;
24
- return (h("button", { key: '773b792dbc4250e0833629d95495b97140892ee3', class: {
24
+ return (h("button", { key: '0d7312af81807baec7f7b0899d9a92186175b8eb', class: {
25
25
  'co-tab': true,
26
26
  [`co-tab--${this.size}`]: true,
27
27
  [`co-tab--${this.variant}`]: true,
28
28
  'co-tab--selected': this.selected,
29
29
  'co-tab--disabled': this.disabled,
30
- }, type: "button", role: "tab", "aria-selected": this.selected ? 'true' : 'false', disabled: this.disabled, part: "tab", onClick: this.handleClick }, this.iconLeft && (h("co-icon", { key: '764382b4d7a71307897e71b1937c0b22b5c873b0', name: this.iconLeft, size: iconSize })), h("span", { key: '0276e774f797a28a5a9d4a22726a8c5b40ee7c72' }, this.label), this.badge && (h("span", { key: '8d758122ee23232d7687b69f8dddf1820f647505', class: "co-tab__badge", part: "badge" }, this.badge)), this.iconRight && (h("co-icon", { key: '5c2fda105048d62b45a5f0a124110a4a5b919575', name: this.iconRight, size: iconSize }))));
30
+ }, type: "button", role: "tab", "aria-selected": this.selected ? 'true' : 'false', disabled: this.disabled, part: "tab", onClick: this.handleClick }, this.iconLeft && (h("co-icon", { key: '8bef8688e8ea0ce2befc12efcbe5683de02f808d', name: this.iconLeft, size: iconSize })), h("span", { key: '860469720e5396d353e0a548b9526fbf64a3ac2d' }, this.label), this.badge && (h("span", { key: 'eb9b9749b6f56a1cb98044ccd5817f016a7e9747', class: "co-tab__badge", part: "badge" }, this.badge)), this.iconRight && (h("co-icon", { key: '001337e6ec2235244be4acffb930003f02acaf47', name: this.iconRight, size: iconSize }))));
31
31
  }
32
32
  static get is() { return "co-tab"; }
33
33
  static get encapsulation() { return "shadow"; }
@@ -49,10 +49,10 @@ export class CoTabGroup {
49
49
  });
50
50
  }
51
51
  render() {
52
- return (h("div", { key: '70c781dc6c053c0fbaecb294d08130df50f6895c', class: {
52
+ return (h("div", { key: 'f08c8fd752d5496f2699eeb3c67fa5d6dc106077', class: {
53
53
  'co-tab-group': true,
54
54
  [`co-tab-group--${this.variant}`]: true,
55
- }, role: "tablist", part: "tab-group", onWheel: this.onWheel }, h("slot", { key: '4337b016d1ce84d1d4bdda5d8f0f6b3f03e1fa27', onSlotchange: this.onSlotChange })));
55
+ }, role: "tablist", part: "tab-group", onWheel: this.onWheel }, h("slot", { key: 'ffc3a7bfbf2efdd40e3f7e6dcf02e3b9e5026dc4', onSlotchange: this.onSlotChange })));
56
56
  }
57
57
  static get is() { return "co-tab-group"; }
58
58
  static get encapsulation() { return "shadow"; }
@@ -186,14 +186,14 @@ export class CoTagsField {
186
186
  const showClear = this.clearable && this.hasValue && !this.disabled && !this.readonly;
187
187
  const helper = this.isInvalid ? this.errorMessage : this.helperText;
188
188
  const showInput = !this.readonly && !this.atCapacity;
189
- return (h("div", { key: 'f3e43affdea1fbb7b4a146c7d47fc476064a4461', class: {
189
+ return (h("div", { key: '338b791cca6cbf885ef92bedd7cd349c120a611a', class: {
190
190
  'co-tags-field': true,
191
191
  'co-tags-field--disabled': this.disabled,
192
192
  'co-tags-field--focused': this.hasFocus,
193
193
  'co-tags-field--filled': this.hasValue,
194
194
  'co-tags-field--invalid': this.isInvalid,
195
195
  [`co-tags-field--${this.size}`]: true,
196
- }, part: "wrapper" }, this.label && (h("div", { key: 'd1ee2a4474f714b5677dbe30234c35ae5eafcbb8', class: "co-tags-field__labels" }, h("label", { key: '2992ec19d614d79e4d464c4d395d0928b4640796', class: "co-tags-field__label", part: "label" }, this.label, h(RequiredMark, { key: 'dff39a47aeb7f61abeffd3da6d774feea1cbb690', required: this.required })))), h("div", { key: '634c966d0e00075e31a87e8c34d5d82e706d259b', class: "co-tags-field__field-row" }, h("div", { key: '770158cf92aebf36c7ef070af2dedc15527b0207', class: "co-tags-field__field", part: "field", onClick: this.handleFieldClick }, h("div", { key: 'd92243180b3a674e7a8c49e5d693cec55e77b90d', class: "co-tags-field__input-wrapper" }, tags.map((tag, index) => this.editingIndex === index ? (h("input", { key: `edit-${index}`, ref: (el) => (this.editEl = el), class: "co-tags-field__edit", type: "text", value: this.editingDraft, onInput: (e) => (this.editingDraft = e.target.value), onKeyDown: this.handleEditKeyDown, onBlur: () => this.saveEdit() })) : (
196
+ }, part: "wrapper" }, this.label && (h("div", { key: '1dc6616c53f7d3dd88d64b660746542c2742b3c3', class: "co-tags-field__labels" }, h("label", { key: 'c74138b4f45a22e5a59208694625042621098270', class: "co-tags-field__label", part: "label" }, this.label, h(RequiredMark, { key: 'de34b1cb65244eb272720323dedab06079869238', required: this.required })))), h("div", { key: '670ec7a0f79a4300da5ca016ae1c8cb0a0fdc67e', class: "co-tags-field__field-row" }, h("div", { key: '03e8bd9d9380c80ca3f551df5482afe7d1b64ad5', class: "co-tags-field__field", part: "field", onClick: this.handleFieldClick }, h("div", { key: '00cd8a5cd078d1a4c20fa0a8f39aba8849b832a8', class: "co-tags-field__input-wrapper" }, tags.map((tag, index) => this.editingIndex === index ? (h("input", { key: `edit-${index}`, ref: (el) => (this.editEl = el), class: "co-tags-field__edit", type: "text", value: this.editingDraft, onInput: (e) => (this.editingDraft = e.target.value), onKeyDown: this.handleEditKeyDown, onBlur: () => this.saveEdit() })) : (
197
197
  // Shared field-chip (utils/fieldChip.tsx) per the Figma
198
198
  // "Tipo=Chips" spec — same look as co-ref-field's chips.
199
199
  h(FieldChip, { key: `chip-${index}-${tag}`, baseClass: "co-tags-field__chip", label: tag, title: tag, onChipDblClick: () => this.startEdit(index), onRemove: !this.disabled && !this.readonly
@@ -201,13 +201,13 @@ export class CoTagsField {
201
201
  e.stopPropagation();
202
202
  this.removeTag(index);
203
203
  }
204
- : undefined }))), showInput && (h("input", { key: '9b60812333730a949d9bef63f63690086735d4ad', ref: (el) => (this.inputEl = el), class: "co-tags-field__native", type: "text", autocomplete: "off", value: this.draft, placeholder: tags.length === 0 ? this.placeholder : '', disabled: this.disabled, required: this.required && tags.length === 0, "aria-invalid": this.isInvalid ? 'true' : 'false', "aria-label": !this.label ? 'Tags' : undefined, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown, part: "input" }))), this.clearable && (h("button", { key: '5e36f6cbe51abd905584791348bd00ff903d448a', class: {
204
+ : undefined }))), showInput && (h("input", { key: '4e420fa07aed79feb6d36ebce6ac739ad6f5fee1', ref: (el) => (this.inputEl = el), class: "co-tags-field__native", type: "text", autocomplete: "off", value: this.draft, placeholder: tags.length === 0 ? this.placeholder : '', disabled: this.disabled, required: this.required && tags.length === 0, "aria-invalid": this.isInvalid ? 'true' : 'false', "aria-label": !this.label ? 'Tags' : undefined, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown, part: "input" }))), this.clearable && (h("button", { key: 'e80b49d80a9a2655cdda8acd3035ee88bec2e976', class: {
205
205
  'co-tags-field__clear': true,
206
206
  'co-tags-field__clear--hidden': !showClear,
207
- }, type: "button", tabIndex: -1, onMouseDown: (e) => e.preventDefault() /* keep input focus */, onClick: this.handleClearAll, "aria-label": "Clear all", part: "clear" }, h("co-icon", { key: 'bf2295665df0b0f628ab68b33435b5864af74c7e', name: "x-circle", size: 16, weight: "fill" }))))), this.name && h("input", { key: 'bb9359faedaec2cbcf175929b24f2d00ecf13e59', type: "hidden", name: this.name, value: JSON.stringify(tags) }), helper && (h("div", { key: '7994108e5ab59ad4e85243b44b958a6ebfaf250f', class: {
207
+ }, type: "button", tabIndex: -1, onMouseDown: (e) => e.preventDefault() /* keep input focus */, onClick: this.handleClearAll, "aria-label": "Clear all", part: "clear" }, h("co-icon", { key: '15035d33ff47ad095f4cb4189cc694aaf4e0e901', name: "x-circle", size: 16, weight: "fill" }))))), this.name && h("input", { key: 'e15557c8531957998d5afabf98e4da1dd7d32811', type: "hidden", name: this.name, value: JSON.stringify(tags) }), helper && (h("div", { key: '4f16febfdc7d8543267e07fa140a2c81b7e15a25', class: {
208
208
  'co-tags-field__helper': true,
209
209
  'co-tags-field__helper--error': this.isInvalid,
210
- }, part: "helper" }, this.isInvalid && (h("co-icon", { key: '0ec2df5f071939df6b84dc4c0a013d3c2355bfeb', name: "warning-circle", size: 14, class: "co-tags-field__helper-icon" })), h("span", { key: '82354fcd44fe07f40f906cf88c998554ac7b199a', class: "co-tags-field__helper-text" }, helper)))));
210
+ }, part: "helper" }, this.isInvalid && (h("co-icon", { key: '201a84c536b5404c43d7abbbbb6a96562348dcdd', name: "warning-circle", size: 14, class: "co-tags-field__helper-icon" })), h("span", { key: 'a5a305ee228753d5693902df2739064f0e548aa2', class: "co-tags-field__helper-text" }, helper)))));
211
211
  }
212
212
  static get is() { return "co-tags-field"; }
213
213
  static get encapsulation() { return "shadow"; }
@@ -76,7 +76,7 @@ export class CoTextarea {
76
76
  const showClear = this.clearable && this.hasValue && !this.disabled && !this.readonly;
77
77
  const isOverLimit = this.maxLength != null && this.charCount > this.maxLength;
78
78
  const statusClass = this.status !== 'default' ? `co-textarea--${this.status}` : '';
79
- return (h("div", { key: 'c5d9a8fc2c47e2ac4787441d2837b9bf600aceb8', class: {
79
+ return (h("div", { key: '669fe8eb16769774e3f9501eb8c6c533463cd8db', class: {
80
80
  'co-textarea': true,
81
81
  'co-textarea--disabled': this.disabled,
82
82
  'co-textarea--focused': this.hasFocus,
@@ -85,13 +85,13 @@ export class CoTextarea {
85
85
  [`co-textarea--${this.size}`]: true,
86
86
  [statusClass]: !!statusClass,
87
87
  'co-textarea--flat': this.variant === 'flat',
88
- }, part: "wrapper" }, (this.label || this.secondaryLabel) && (h("div", { key: '4c71cdc7a1d8063b4fc88613cc6840ae4d8fffbd', class: "co-textarea__labels" }, this.label && (h("label", { key: '7a332a79ca80a5e7e6e0e18431871c83175cf6ad', class: "co-textarea__label", part: "label" }, this.label, h(RequiredMark, { key: 'f266eeff511590081664ff5677e85f91bb8cc6c6', required: this.required }))), this.secondaryLabel && (h("span", { key: '43d1d98374cd6cdb9e9ebbed9a0677d36ccf0242', class: "co-textarea__secondary-label" }, this.secondaryLabel)))), h("div", { key: '31b9a71972fc8bf6db1e01f6ef421d1cd01c0c71', class: "co-textarea__field", part: "field" }, h("textarea", { key: 'c6e42c9cb50919f8d28d52acc6ac67824d2ab9bc', ref: (el) => (this.textareaEl = el), class: {
88
+ }, part: "wrapper" }, (this.label || this.secondaryLabel) && (h("div", { key: '89109724e8325d67c42a26f2997d752e9a3f6152', class: "co-textarea__labels" }, this.label && (h("label", { key: '38f2d2fd52e02eb43b7381e2d257bd3d09ccd702', class: "co-textarea__label", part: "label" }, this.label, h(RequiredMark, { key: '70e789e90f6b77676649c4ba3388e8f4293daf1f', required: this.required }))), this.secondaryLabel && (h("span", { key: 'dc9ba43690ff46be7e4db91f9ceca95c9c54d7f1', class: "co-textarea__secondary-label" }, this.secondaryLabel)))), h("div", { key: '2f92be15a4199500dbf241246ceea5d3dcab041f', class: "co-textarea__field", part: "field" }, h("textarea", { key: '597a77679c34d1b5c9dbb818f7df316fee47c31a', ref: (el) => (this.textareaEl = el), class: {
89
89
  'co-textarea__native': true,
90
90
  [`co-textarea__native--resize-${this.resize}`]: true,
91
- }, rows: this.rows, value: this.value, placeholder: this.placeholder, disabled: this.disabled, readOnly: this.readonly, required: this.required, "aria-invalid": this.status === 'error' || isOverLimit ? 'true' : 'false', onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, part: "input" }), showClear && (h("button", { key: '37ade2676d789e93699b31c60ee1922287613c99', class: "co-textarea__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: '635e46dd3780dce114beeda02e05a8dc512f0e64', name: "x-circle", size: 16, weight: "fill" })))), (this.helperText || this.maxLength != null) && (h("div", { key: 'c845c82bba32624dbb23b518283f646fc573766e', class: "co-textarea__footer" }, this.helperText && (h("div", { key: '3cf30fdfbab68e06fc757b7a64b7d89cbefe53ac', class: {
91
+ }, rows: this.rows, value: this.value, placeholder: this.placeholder, disabled: this.disabled, readOnly: this.readonly, required: this.required, "aria-invalid": this.status === 'error' || isOverLimit ? 'true' : 'false', onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, part: "input" }), showClear && (h("button", { key: 'fe9c62fc4f101aaccb152e4d7b005499c711477d', class: "co-textarea__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: '48eb2ab762af82f70548655fcc5ed809c462cc77', name: "x-circle", size: 16, weight: "fill" })))), (this.helperText || this.maxLength != null) && (h("div", { key: 'bdc8b371a0b870f4947fdaecbe2dfc032adf6539', class: "co-textarea__footer" }, this.helperText && (h("div", { key: 'd6674a0bf0672c2718b924bee4609b30afe95780', class: {
92
92
  'co-textarea__helper': true,
93
93
  'co-textarea__helper--error': this.status === 'error',
94
- }, part: "helper" }, this.status === 'error' && (h("co-icon", { key: '16009fbd88a7f4769bb1ddf1cbadf8aaf3dce17b', name: "warning-circle", size: 14, class: "co-textarea__helper-icon" })), h("span", { key: '3986eda7ec8df0da750a410bf6c361b864386d64', class: "co-textarea__helper-text" }, this.helperText))), this.maxLength != null && (h("span", { key: '7ed3ab0c254b0d69f90016dcdc419408410ea457', class: {
94
+ }, part: "helper" }, this.status === 'error' && (h("co-icon", { key: '9b16efe568db1f6ec93d76908fdac7b5800ee59d', name: "warning-circle", size: 14, class: "co-textarea__helper-icon" })), h("span", { key: '233601dfb3cf443a56f228deabfac87cca54d4c2', class: "co-textarea__helper-text" }, this.helperText))), this.maxLength != null && (h("span", { key: 'f587b4d8a744c0c0fd26ff45ee54982b90994dde', class: {
95
95
  'co-textarea__counter': true,
96
96
  'co-textarea__counter--over': isOverLimit,
97
97
  }, part: "counter" }, this.charCount, "/", this.maxLength))))));