@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
@@ -87,7 +87,7 @@ export class CoAvatarGroup {
87
87
  "references": {
88
88
  "CoAvatarGroupItem": {
89
89
  "location": "local",
90
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-avatar-group/co-avatar-group.tsx",
90
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-avatar-group/co-avatar-group.tsx",
91
91
  "id": "src/components/co-avatar-group/co-avatar-group.tsx::CoAvatarGroupItem"
92
92
  }
93
93
  }
@@ -212,6 +212,15 @@
212
212
  flex-shrink: 0;
213
213
  }
214
214
 
215
+ /* The glyph must not grow the line box. ICON_SIZE is font-size + 2 in every
216
+ size (l 20/18, m 18/16, s 16/14, xs 14/12) and the label sits at line-height 1,
217
+ so an icon-left button came out 2px taller than its text-only sibling in the
218
+ same row (34 vs 32 on square/s next to a co-toggle-button, 2026-09-17). Pull
219
+ the 1px overshoot per side back: text-only and icon buttons share one height. */
220
+ .co-button > co-icon {
221
+ margin-block: -1px;
222
+ }
223
+
215
224
  /* ─── FALLBACK: no backdrop-filter → solid, legible surfaces ──── */
216
225
  @supports not (background: color-mix(in srgb, red, transparent)) {
217
226
  .co-button--primary { background: var(--co-semantic-surface-primary); }
@@ -9,11 +9,17 @@
9
9
  --co-calendar-day-size: 44px;
10
10
  }
11
11
 
12
+ /* Knobs de layout (custom properties: cruzan el shadow, los fija el HOST):
13
+ --co-calendar-width ancho del calendario (default: el de sus 7 celdas fijas)
14
+ --co-calendar-col track de cada columna (default: la celda fija)
15
+ --co-calendar-day-width ancho del botón de día (default: la celda fija)
16
+ co-date-range-picker los pone en 100% / minmax(celda, 1fr) / 100% para que el mes
17
+ llene el panel en vez de dejar el sobrante en blanco (reporte 2026-09-16). */
12
18
  .co-calendar {
13
19
  display: flex;
14
20
  flex-direction: column;
15
21
  gap: var(--co-spacing-sm);
16
- width: max-content;
22
+ width: var(--co-calendar-width, max-content);
17
23
  }
18
24
 
19
25
  /* ── Header ──────────────────────────────────────────────── */
@@ -63,7 +69,7 @@
63
69
  display: grid;
64
70
  grid-template-columns: repeat(3, 1fr);
65
71
  gap: var(--co-spacing-xs);
66
- width: calc(var(--co-calendar-day-size) * 7 + 12px);
72
+ width: var(--co-calendar-width, calc(var(--co-calendar-day-size) * 7 + 12px));
67
73
  padding-top: var(--co-spacing-xs);
68
74
  }
69
75
 
@@ -134,7 +140,7 @@
134
140
 
135
141
  .co-calendar__row {
136
142
  display: grid;
137
- grid-template-columns: repeat(7, var(--co-calendar-day-size));
143
+ grid-template-columns: repeat(7, var(--co-calendar-col, var(--co-calendar-day-size)));
138
144
  gap: 2px;
139
145
  }
140
146
 
@@ -156,7 +162,7 @@
156
162
 
157
163
  /* ── Day cell ────────────────────────────────────────────── */
158
164
  .co-calendar__day {
159
- width: var(--co-calendar-day-size);
165
+ width: var(--co-calendar-day-width, var(--co-calendar-day-size));
160
166
  height: var(--co-calendar-day-size);
161
167
  display: inline-flex;
162
168
  align-items: center;
@@ -307,7 +307,11 @@ export class CoCalendar {
307
307
  const monthLabel = getMonthLabel(this.viewYear, this.viewMonth, this.locale, 'long');
308
308
  const shortLabels = getWeekdayLabels(this.locale, this.firstDayOfWeek, 'short');
309
309
  const longLabels = getWeekdayLabels(this.locale, this.firstDayOfWeek, 'long');
310
- const matrix = getMonthMatrix(this.viewYear, this.viewMonth, this.firstDayOfWeek);
310
+ // Solo las semanas que tocan el mes: la matriz trae siempre 6, y un mes de
311
+ // 5 semanas cerraba con una fila ENTERA del mes siguiente en gris, que se
312
+ // leía como una franja en blanco al pie del panel (reporte 2026-09-16). El
313
+ // teclado no la necesita: moveFocus ya cambia de mes al salir de él.
314
+ const matrix = getMonthMatrix(this.viewYear, this.viewMonth, this.firstDayOfWeek).filter((week) => week.some((cell) => cell.inMonth));
311
315
  return (h("div", { class: "co-calendar__grid", part: "grid", role: "grid", "aria-label": monthLabel, onKeyDown: this.handleGridKeyDown }, h("div", { class: "co-calendar__row co-calendar__row--dow", role: "row" }, shortLabels.map((lbl, i) => (h("span", { class: "co-calendar__dow", role: "columnheader", "aria-label": longLabels[i] }, lbl)))), matrix.map((week) => (h("div", { class: "co-calendar__row", role: "row" }, week.map((cell) => {
312
316
  const disabled = this.isDayDisabled(cell.value);
313
317
  const isFocused = compareYMD(cell.value, this.focused) === 0;
@@ -363,7 +367,7 @@ export class CoCalendar {
363
367
  render() {
364
368
  var _a, _b;
365
369
  const t = getDateStrings(this.locale);
366
- return (h("div", { key: '795529e38ec7b72934d786b9dcaa5046e73fbde8', class: "co-calendar", part: "root" }, h("div", { key: 'f409d1670f4f649d8e91f21915e0008d9ed330ac', class: "co-calendar__header", part: "header" }, h("button", { key: '23a4f12ec30cd86e49661daf755a6d2e23b209ad', type: "button", class: "co-calendar__nav", onClick: this.handlePrev, "aria-label": (_a = this.prevMonthLabel) !== null && _a !== void 0 ? _a : t.prevMonth }, h("co-icon", { key: 'ce6b736011e3ed13781cac180fe4542ec38c75c3', name: "caret-left", size: 16 })), h("button", { key: 'b1fcbb3d09e33b0b462bc278b46e14a348f9f9a9', type: "button", class: "co-calendar__title", "aria-live": "polite", onClick: this.toggleView }, this.headerTitle(), h("co-icon", { key: 'dbe1800ed74e234dc8f334183e504d19d8ab9d74', name: "caret-down", size: 12, class: "co-calendar__title-caret" })), h("button", { key: 'bdbda5999d20cb799aeabe48ebad6e8a4d7d89ff', type: "button", class: "co-calendar__nav", onClick: this.handleNext, "aria-label": (_b = this.nextMonthLabel) !== null && _b !== void 0 ? _b : t.nextMonth }, h("co-icon", { key: 'ec2e268c38d04d1f298cfb12d29647b530b03a94', name: "caret-right", size: 16 }))), this.view === 'days' && this.renderDays(t), this.view === 'months' && this.renderMonths(), this.view === 'years' && this.renderYears()));
370
+ return (h("div", { key: '3b9f57fa8513746cb3133d80d574a0fafbc8b31e', class: "co-calendar", part: "root" }, h("div", { key: '6b3b0f8d1c582abbbf04c8b936486bd1e3fedaec', class: "co-calendar__header", part: "header" }, h("button", { key: '57f854f84162a5b09119385339c9993ee25cef72', type: "button", class: "co-calendar__nav", onClick: this.handlePrev, "aria-label": (_a = this.prevMonthLabel) !== null && _a !== void 0 ? _a : t.prevMonth }, h("co-icon", { key: '772ec0dfb48dfee33d506549e68ab7598ec0cf00', name: "caret-left", size: 16 })), h("button", { key: 'b9f3851082fbbe2d5f696dd0a51c442410b15fa1', type: "button", class: "co-calendar__title", "aria-live": "polite", onClick: this.toggleView }, this.headerTitle(), h("co-icon", { key: '3f660d39a851c97f299e6a6cc8c0ad8b5ed4ee7f', name: "caret-down", size: 12, class: "co-calendar__title-caret" })), h("button", { key: '6ac9d1af5f3dc36a34e94e129ab2db313dee74d2', type: "button", class: "co-calendar__nav", onClick: this.handleNext, "aria-label": (_b = this.nextMonthLabel) !== null && _b !== void 0 ? _b : t.nextMonth }, h("co-icon", { key: 'c8c962be3435e108f81968f6dde5f6f481c40733', name: "caret-right", size: 16 }))), this.view === 'days' && this.renderDays(t), this.view === 'months' && this.renderMonths(), this.view === 'years' && this.renderYears()));
367
371
  }
368
372
  static get is() { return "co-calendar"; }
369
373
  static get encapsulation() { return "shadow"; }
@@ -231,7 +231,7 @@ export class CoCheckboxGroup {
231
231
  "references": {
232
232
  "CheckboxOption": {
233
233
  "location": "local",
234
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-checkbox-group/co-checkbox-group.tsx",
234
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-checkbox-group/co-checkbox-group.tsx",
235
235
  "id": "src/components/co-checkbox-group/co-checkbox-group.tsx::CheckboxOption"
236
236
  }
237
237
  }
@@ -531,7 +531,7 @@ export class CoCombobox {
531
531
  "references": {
532
532
  "ComboboxOption": {
533
533
  "location": "local",
534
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-combobox/co-combobox.tsx",
534
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-combobox/co-combobox.tsx",
535
535
  "id": "src/components/co-combobox/co-combobox.tsx::ComboboxOption"
536
536
  }
537
537
  }
@@ -246,7 +246,7 @@ export class CoCommandSearch {
246
246
  "references": {
247
247
  "CommandItem": {
248
248
  "location": "local",
249
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-command-search/co-command-search.tsx",
249
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-command-search/co-command-search.tsx",
250
250
  "id": "src/components/co-command-search/co-command-search.tsx::CommandItem"
251
251
  }
252
252
  }
@@ -504,7 +504,7 @@ export class CoDataTable {
504
504
  "references": {
505
505
  "CoDataTableColumn": {
506
506
  "location": "local",
507
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-data-table/co-data-table.tsx",
507
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-data-table/co-data-table.tsx",
508
508
  "id": "src/components/co-data-table/co-data-table.tsx::CoDataTableColumn"
509
509
  }
510
510
  }
@@ -129,6 +129,19 @@
129
129
  align-items: flex-start;
130
130
  }
131
131
 
132
+ /* El calendario llena el ancho del panel. Ese ancho lo fija la fila de los dos campos de
133
+ fecha, y el calendario era `max-content` (7 celdas fijas): sin presets quedaban ~170px en
134
+ blanco a la derecha (reporte 2026-09-16). Knobs de co-calendar: ancho fluido, columnas que
135
+ reparten el sobrante y día a ancho de columna (la banda del rango sigue continua; el día
136
+ es un rectángulo redondeado, no un círculo). En touch va centrado con celdas de 44px. */
137
+ .co-date-range-picker__body:not(.co-date-range-picker__body--touch) co-calendar {
138
+ flex: 1;
139
+ min-width: 0;
140
+ --co-calendar-width: 100%;
141
+ --co-calendar-col: minmax(var(--co-calendar-day-size), 1fr);
142
+ --co-calendar-day-width: 100%;
143
+ }
144
+
132
145
  /* Mobile bottom-sheet: stack presets (horizontal scroll) above the calendar. */
133
146
  .co-date-range-picker__body--touch {
134
147
  flex-direction: column;
@@ -271,6 +271,8 @@ export class CoDateRangePicker {
271
271
  return `${f} → ${to}`;
272
272
  if (f)
273
273
  return `${f} → …`;
274
+ if (to)
275
+ return `… → ${to}`; // solo fin (p. ej. un ticket con vencimiento y sin inicio): no ocultar el dato
274
276
  return this.placeholder || t.setDate; // `||`: empty string → localized default
275
277
  }
276
278
  presetItems(t) {
@@ -1039,7 +1041,7 @@ export class CoDateRangePicker {
1039
1041
  "references": {
1040
1042
  "DateRangeValue": {
1041
1043
  "location": "local",
1042
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
1044
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
1043
1045
  "id": "src/components/co-date-range-picker/co-date-range-picker.tsx::DateRangeValue"
1044
1046
  }
1045
1047
  }
@@ -1060,7 +1062,7 @@ export class CoDateRangePicker {
1060
1062
  "references": {
1061
1063
  "DateRangeValue": {
1062
1064
  "location": "local",
1063
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
1065
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
1064
1066
  "id": "src/components/co-date-range-picker/co-date-range-picker.tsx::DateRangeValue"
1065
1067
  }
1066
1068
  }
@@ -1,42 +1,5 @@
1
1
  import { h } from "@stencil/core";
2
- /** Extension → type bucket. Unknown extensions fall back to `file`. */
3
- const EXT_TO_TYPE = {
4
- pdf: 'pdf',
5
- doc: 'doc',
6
- docx: 'doc',
7
- txt: 'txt',
8
- md: 'txt',
9
- xls: 'sheet',
10
- xlsx: 'sheet',
11
- csv: 'sheet',
12
- png: 'image',
13
- jpg: 'image',
14
- jpeg: 'image',
15
- gif: 'image',
16
- svg: 'image',
17
- webp: 'image',
18
- mp4: 'video',
19
- mov: 'video',
20
- webm: 'video',
21
- fig: 'design',
22
- ai: 'design',
23
- psd: 'design',
24
- sketch: 'design',
25
- zip: 'zip',
26
- rar: 'zip',
27
- };
28
- /** Type → { icon, accent (foreground), tint (background) }. Exact values per design spec (audit 1.6). */
29
- const TYPE_META = {
30
- pdf: { icon: 'file-pdf', accent: 'var(--co-color-secondary-rojo-100)', tint: 'rgb(255,236,236)' },
31
- doc: { icon: 'file-text', accent: 'var(--co-color-primary-azul)', tint: 'var(--co-color-azul-100)' },
32
- sheet: { icon: 'table', accent: 'var(--co-color-status-success)', tint: 'var(--co-color-verde-100)' },
33
- image: { icon: 'image', accent: 'var(--co-color-secondary-violeta-100)', tint: 'rgb(233,232,255)' },
34
- video: { icon: 'broadcast', accent: 'var(--co-color-secondary-naranja-100)', tint: 'rgb(255,236,220)' },
35
- txt: { icon: 'text-align-left', accent: 'var(--co-color-gray-600)', tint: 'var(--co-color-gray-100)' },
36
- design: { icon: 'sparkle', accent: 'var(--co-color-primary-rosado)', tint: 'var(--co-color-rosado-100)' },
37
- zip: { icon: 'package', accent: 'var(--co-color-status-pending)', tint: 'var(--co-color-status-bg-pending)' },
38
- file: { icon: 'file', accent: 'var(--co-color-gray-600)', tint: 'var(--co-color-gray-100)' },
39
- };
2
+ import { resolveFileTileType, TYPE_META } from "./co-file-type-tile.utils";
40
3
  export class CoFileTypeTile {
41
4
  constructor() {
42
5
  /** Tile edge length in px (React uses 44 / 34 / 26). */
@@ -47,14 +10,12 @@ export class CoFileTypeTile {
47
10
  this.colorTags = true;
48
11
  }
49
12
  render() {
50
- var _a, _b;
51
- const key = ((_a = this.ext) !== null && _a !== void 0 ? _a : '').trim().toLowerCase().replace(/^\./, '');
52
- const type = (_b = EXT_TO_TYPE[key]) !== null && _b !== void 0 ? _b : 'file';
13
+ const type = resolveFileTileType(this.ext);
53
14
  const meta = TYPE_META[type];
54
15
  const iconSize = Math.round(this.size * 0.5);
55
16
  const background = this.colorTags ? meta.tint : 'var(--co-color-gray-100)';
56
17
  const color = this.colorTags ? meta.accent : 'var(--co-color-gray-600)';
57
- return (h("span", { key: '1df6dee1c0f729279f36463be6df9137bcbf4af0', class: {
18
+ return (h("span", { key: '0cbc40f94f5d917b4f3c35e0a9678daa81a58624', class: {
58
19
  'co-file-type-tile': true,
59
20
  [`co-file-type-tile--${type}`]: true,
60
21
  'co-file-type-tile--mono': !this.colorTags,
@@ -64,7 +25,7 @@ export class CoFileTypeTile {
64
25
  borderRadius: `${this.radius}px`,
65
26
  background,
66
27
  color,
67
- } }, h("co-icon", { key: '566163b957b853911e3eef15cd38c7573cf749b4', name: meta.icon, size: iconSize, weight: "fill" })));
28
+ } }, h("co-icon", { key: 'c5245ababcc734116d4e71dd48e41bf66d02fdff', name: meta.icon, size: iconSize, weight: "fill" })));
68
29
  }
69
30
  static get is() { return "co-file-type-tile"; }
70
31
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,55 @@
1
+ /** Extension → type bucket. Unknown extensions fall back to `file`. */
2
+ export const EXT_TO_TYPE = {
3
+ pdf: 'pdf',
4
+ doc: 'doc',
5
+ docx: 'doc',
6
+ odt: 'doc',
7
+ txt: 'txt',
8
+ md: 'txt',
9
+ xls: 'sheet',
10
+ xlsx: 'sheet',
11
+ csv: 'sheet',
12
+ ods: 'sheet',
13
+ ppt: 'slides',
14
+ pptx: 'slides',
15
+ key: 'slides',
16
+ png: 'image',
17
+ jpg: 'image',
18
+ jpeg: 'image',
19
+ gif: 'image',
20
+ svg: 'image',
21
+ webp: 'image',
22
+ mp4: 'video',
23
+ mov: 'video',
24
+ webm: 'video',
25
+ fig: 'design',
26
+ ai: 'design',
27
+ psd: 'design',
28
+ sketch: 'design',
29
+ zip: 'zip',
30
+ rar: 'zip',
31
+ // Forwarded emails (tickets created from an inbox carry the original
32
+ // messages as attachments): `.eml` from Gmail/IMAP, `.msg` from Outlook.
33
+ eml: 'mail',
34
+ msg: 'mail',
35
+ };
36
+ /** Type → { icon, accent (foreground), tint (background) }. Exact values per design spec (audit 1.6). */
37
+ export const TYPE_META = {
38
+ pdf: { icon: 'file-pdf', accent: 'var(--co-color-secondary-rojo-100)', tint: 'rgb(255,236,236)' },
39
+ doc: { icon: 'file-text', accent: 'var(--co-color-primary-azul)', tint: 'var(--co-color-azul-100)' },
40
+ sheet: { icon: 'table', accent: 'var(--co-color-status-success)', tint: 'var(--co-color-verde-100)' },
41
+ slides: { icon: 'presentation-chart', accent: 'var(--co-color-secondary-guinda-100)', tint: 'var(--co-color-secondary-guinda-25)' },
42
+ image: { icon: 'image', accent: 'var(--co-color-secondary-violeta-100)', tint: 'rgb(233,232,255)' },
43
+ video: { icon: 'broadcast', accent: 'var(--co-color-secondary-naranja-100)', tint: 'rgb(255,236,220)' },
44
+ txt: { icon: 'text-align-left', accent: 'var(--co-color-gray-600)', tint: 'var(--co-color-gray-100)' },
45
+ design: { icon: 'sparkle', accent: 'var(--co-color-primary-rosado)', tint: 'var(--co-color-rosado-100)' },
46
+ zip: { icon: 'package', accent: 'var(--co-color-status-pending)', tint: 'var(--co-color-status-bg-pending)' },
47
+ mail: { icon: 'envelope-simple', accent: 'var(--co-color-secondary-turquesa-100)', tint: 'var(--co-color-secondary-turquesa-25)' },
48
+ file: { icon: 'file', accent: 'var(--co-color-gray-600)', tint: 'var(--co-color-gray-100)' },
49
+ };
50
+ /** Bucket for an extension: case-insensitive, a leading dot is ignored, unknown → `file`. */
51
+ export function resolveFileTileType(ext) {
52
+ var _a;
53
+ const key = (ext !== null && ext !== void 0 ? ext : '').trim().toLowerCase().replace(/^\./, '');
54
+ return (_a = EXT_TO_TYPE[key]) !== null && _a !== void 0 ? _a : 'file';
55
+ }
@@ -1,5 +1,5 @@
1
1
  import { h } from "@stencil/core";
2
- import { highlightMatch } from "../../utils/normalizeText";
2
+ import { highlightSegments } from "../../utils/normalizeText";
3
3
  import { initOverlayScroll } from "../../utils/overlayScroll";
4
4
  import { buildRows, deriveMore, listReorderIds, liveSelectedOrder, nextActiveIndex, orderItems, parseItems, parseValue, selectedActiveIndex, shouldResnapshotOnTerm, virtualSlice, VIRTUAL_ITEM_HEIGHT, VIRTUAL_VIEWPORT_ITEMS, } from "./optionListLogic";
5
5
  /**
@@ -696,10 +696,12 @@ export class CoOptionList {
696
696
  }
697
697
  renderLabelText(label) {
698
698
  const term = this.effectiveHighlightTerm;
699
- const seg = term ? highlightMatch(label, term) : null;
700
- if (!seg)
699
+ // TODAS las ocurrencias (substring-anywhere): "PR" en "Producto (U.D) - PR Completa"
700
+ // marca el "Pr" de Producto Y el "PR" — antes solo la primera.
701
+ const segs = term ? highlightSegments(label, term) : null;
702
+ if (!segs)
701
703
  return label;
702
- return [seg.pre, h("span", { class: "co-option-list__match" }, seg.match), seg.post];
704
+ return segs.map((s) => (s.match ? h("span", { class: "co-option-list__match" }, s.text) : s.text));
703
705
  }
704
706
  /** Pill junto al label. Con `tooltip` va envuelto en un `co-tooltip` — el
705
707
  * label del badge se abrevia (3 letras en el de workspace) y sin el texto
@@ -739,11 +741,11 @@ export class CoOptionList {
739
741
  const selectedIds = this.selectedIds;
740
742
  const { hasMore, remaining } = deriveMore(this.parsedItems.length, this.total, this.hasMore);
741
743
  const showClear = !!this.clearOptionLabel && selectedIds.length > 0;
742
- return (h("div", { key: '3d1df259b90836a6a125627e850ff2d2e1556d4c', class: "co-option-list", onKeyDown: this.onRootKeyDown }, this.searchable && (h("div", { key: '181a0c89ff38821301c0728f4eb5edb9c4e11b2d', class: "co-option-list__search", part: "search" }, h("co-icon", { key: 'cac54346c457d884fbbc1257b00dbe932e5419ca', name: "magnifying-glass", size: 16 }), h("input", { key: 'bbc27b7821651189718cf763e689dd08e6fa0050', class: "co-option-list__search-input", type: "text", placeholder: this.searchPlaceholder, value: this.term, onInput: this.onSearchInput, ref: (el) => (this.searchInputEl = el), role: "combobox", "aria-expanded": "true", "aria-autocomplete": "list" }))), h("div", { key: '993c2308c9d6e1958f8f3ddc73b08e9ebc0bd409', class: "co-option-list__options", part: "options", role: "listbox", "aria-multiselectable": this.multiple ? 'true' : 'false', ref: (el) => (this.optionsEl = el), onScroll: this.onNativeScroll }, h("div", { key: '458e04427d5dd6a4e74537483b18d8e4ba9c71a5', class: "co-option-list__inner" }, showClear && (h("button", { key: '03d067e6a79dfb51f39aa52ad8b7b6464aa2f37d', class: "co-option-list__clear-row", type: "button", onClick: () => this.coClearSelection.emit() }, h("co-icon", { key: '394b7c318f942d74cb7d68859aa54fce5ed2dc58', name: "x-circle", size: 14 }), h("span", { key: '3dd47de0ed422bb5dd3a3c63ac7dc3936578fdaa' }, this.clearOptionLabel))), this.loading && items.length === 0 && (h("div", { key: '02dae3b4322ce67325617870c090fd3f3946f8c1', class: "co-option-list__loading" }, h("co-loader", { key: 'aaa67b4cf0f37be7364cbd00f2b156bed4018c13', size: "sm" }))), !this.loading && items.length === 0 && (h("div", { key: 'caa5a5b33817577084b9e82a40f97632972e5068', class: "co-option-list__empty" }, h("co-icon", { key: '0cd622efe4ea8bc4483322b4a81c5e3a254f08ab', name: "magnifying-glass", size: 20 }), h("span", { key: 'ca1fb6cf98eacba682f308f610befe6f9da9edd2' }, this.emptyMessage))), items.length > 0 && this.virtual
744
+ return (h("div", { key: '30f39e9cfe2472f1083768b6e974aa48672e63d0', class: "co-option-list", onKeyDown: this.onRootKeyDown }, this.searchable && (h("div", { key: 'f1c125c141ca8ceebae5c1ed0c786919c31805b3', class: "co-option-list__search", part: "search" }, h("co-icon", { key: 'd56810ca205984e7b2c56546930ce25ca70fda68', name: "magnifying-glass", size: 16 }), h("input", { key: 'a85b35debe7b14c604a3262c7c04ee3b9ca41a6a', class: "co-option-list__search-input", type: "text", placeholder: this.searchPlaceholder, value: this.term, onInput: this.onSearchInput, ref: (el) => (this.searchInputEl = el), role: "combobox", "aria-expanded": "true", "aria-autocomplete": "list" }))), h("div", { key: 'ea5eecc218a228e07dd05d8f963518b4a8e0039f', class: "co-option-list__options", part: "options", role: "listbox", "aria-multiselectable": this.multiple ? 'true' : 'false', ref: (el) => (this.optionsEl = el), onScroll: this.onNativeScroll }, h("div", { key: 'b27071cb3d629022fa6e926050fdc17b2051ef98', class: "co-option-list__inner" }, showClear && (h("button", { key: '443791f8ee2d1f05a16c4002573264acf0a8de1b', class: "co-option-list__clear-row", type: "button", onClick: () => this.coClearSelection.emit() }, h("co-icon", { key: 'ebe7e65669ff9eb76922ef76e21b9209658a444f', name: "x-circle", size: 14 }), h("span", { key: '82d2bcceb41ec5370e60ea9e25af91a2cbf11e70' }, this.clearOptionLabel))), this.loading && items.length === 0 && (h("div", { key: '9f60fedc78ee66d198623a5e3ac9b0f1569ddef4', class: "co-option-list__loading" }, h("co-loader", { key: 'ab7b1947e03af880cc608bef8639d7dc882a53b7', size: "sm" }))), !this.loading && items.length === 0 && (h("div", { key: '6b0870e6c5b2c25e2854431a28a2d6b56253ecf2', class: "co-option-list__empty" }, h("co-icon", { key: '302d71e23e0d56104dfd04948201630ddbb4b078', name: "magnifying-glass", size: 20 }), h("span", { key: 'fc580f9a50974ab22a7b648dbbe4ca17340094d8' }, this.emptyMessage))), items.length > 0 && this.virtual
743
745
  ? this.renderVirtual(items, selectedIds)
744
746
  : buildRows(items).map((row) => row.kind === 'header'
745
747
  ? h("div", { class: "co-option-list__group", role: "presentation" }, row.label)
746
- : this.renderRow(row.item, row.index, selectedIds)), this.loading && items.length > 0 && (h("div", { key: '7e9ce17adba91610cf8c2b4c7c1d544db4879122', class: "co-option-list__loading-more" }, h("co-loader", { key: '974bc5404e175c89f6a1972900f2e3b8e2d95373', size: "sm" }))), !this.loading && hasMore && remaining > 0 && (h("div", { key: '34261e4bf8349cd4973a642d7137e72f80c2a867', class: "co-option-list__more" }, remaining, " more results")))), h("slot", { key: 'e350a3a8e731f6d2bb609c84cd0e601e93e6b063', name: "footer" })));
748
+ : this.renderRow(row.item, row.index, selectedIds)), this.loading && items.length > 0 && (h("div", { key: '606a674960e4d16198ef36de4686de91ad742dde', class: "co-option-list__loading-more" }, h("co-loader", { key: '933613b7b606399cd9eea3f877a4b2c77f269785', size: "sm" }))), !this.loading && hasMore && remaining > 0 && (h("div", { key: '6a6220513b6db222b57155c54afa805519e4b1b8', class: "co-option-list__more" }, remaining, " more results")))), h("slot", { key: '4d952742c39335d9f19c2e45f58ae6be3306857d', name: "footer" })));
747
749
  }
748
750
  static get is() { return "co-option-list"; }
749
751
  static get encapsulation() { return "shadow"; }
@@ -1,7 +1,7 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { RequiredMark } from "../../utils/requiredMark";
3
3
  import { DIAL_CODES, DIAL_CODE_MAP } from "./dial-codes";
4
- import { highlightMatch, rankByMatch } from "../../utils/normalizeText";
4
+ import { highlightSegments, rankByMatch } from "../../utils/normalizeText";
5
5
  /**
6
6
  * Phone input with country code indicator. Composes a country selector
7
7
  * (flag + dial code) alongside a free-form phone number input.
@@ -63,10 +63,10 @@ export class CoPhoneField {
63
63
  }
64
64
  /** Country name with the matched substring wrapped for highlighting. */
65
65
  renderName(name) {
66
- const seg = this.searchQuery.trim() ? highlightMatch(name, this.searchQuery) : null;
67
- if (!seg)
66
+ const segs = this.searchQuery.trim() ? highlightSegments(name, this.searchQuery) : null;
67
+ if (!segs)
68
68
  return name;
69
- return [seg.pre, h("span", { class: "co-phone-field__match" }, seg.match), seg.post];
69
+ return segs.map((s) => (s.match ? h("span", { class: "co-phone-field__match" }, s.text) : s.text));
70
70
  }
71
71
  onValueChange(newVal) {
72
72
  if (!newVal) {
@@ -159,7 +159,7 @@ export class CoPhoneField {
159
159
  render() {
160
160
  const entry = this.selectedEntry;
161
161
  const statusClass = this.status !== 'default' ? `co-phone-field--${this.status}` : '';
162
- return (h("div", { key: 'a9c32c0be0ebd40ed647e76522424eb7e5e9aa18', class: `co-phone-field co-phone-field--${this.size} ${statusClass} ${this.disabled ? 'co-phone-field--disabled' : ''}` }, this.label && (h("label", { key: '37178a06aab45e8254fd0a366758e5302f2eaa46', class: "co-phone-field__label" }, this.label, h(RequiredMark, { key: '03a342ae39b5f17ba154b5c41f38c68ed3b017ba', required: this.required }))), h("div", { key: '1ec715b8334d174369e2cf84c1599d98f99e0a46', class: "co-phone-field__container" }, h("button", { key: '4570d47ae1b5f29777ef83934f29238f41f39c72', type: "button", class: "co-phone-field__selector", disabled: this.disabled, onClick: () => this.handleToggleDropdown(), "aria-expanded": String(this.isOpen), "aria-haspopup": "listbox" }, entry ? (h("img", { class: "co-phone-field__flag", src: `https://flagcdn.com/w40/${entry.iso2.toLowerCase()}.png`, alt: entry.iso2 })) : (h("co-icon", { name: "phone", size: 16 })), h("span", { key: 'eeea700daa0921575451e84229f756a8b07ba2bc', class: "co-phone-field__dial-code" }, entry ? entry.dialCode : ''), h("span", { key: '8a255cbcdd177d2c3df85e70cd533977401b4331', class: "co-phone-field__chevron" }, h("co-icon", { key: 'b7b7f8ae9ff2faa4aced5387cbdcafbdca3ab850', name: "caret-down", size: 14 }))), h("input", { key: '5c22124cf3b89be951b241dc5414ecfaa914f311', class: "co-phone-field__input", type: "tel", placeholder: this.placeholder, value: this.numberPart, disabled: this.disabled, onInput: (e) => this.handleNumberInput(e) })), this.isOpen && (h("div", { key: '58a86dd712fff37ae8a15aa814ecffe68872c546', class: "co-phone-field__dropdown", role: "listbox" }, h("div", { key: '7641be732c29f0cb601b05a185ea10219fc45bae', class: "co-phone-field__search" }, h("input", { key: 'd77b2e9acb00dcf28babbc203b65692fb5b9c8e7', class: "co-phone-field__search-input", type: "text", placeholder: "Search country...", value: this.searchQuery, onInput: (e) => this.handleSearchInput(e), autoFocus: true })), h("div", { key: 'a80b7fbe6ac444f44ea802d8820b0dabff943885', class: "co-phone-field__options" }, this.filteredCountries.map((d) => (h("button", { type: "button", key: d.iso2, class: `co-phone-field__option ${d.iso2 === this.selectedIso2 ? 'co-phone-field__option--selected' : ''}`, role: "option", "aria-selected": d.iso2 === this.selectedIso2 ? 'true' : 'false', onClick: () => this.handleCountrySelect(d) }, h("img", { class: "co-phone-field__option-flag", src: `https://flagcdn.com/w40/${d.iso2.toLowerCase()}.png`, alt: d.iso2 }), h("span", { class: "co-phone-field__option-name" }, this.renderName(d.name)), h("span", { class: "co-phone-field__option-code" }, d.dialCode))))))), this.helperText && (h("div", { key: 'c24516916b7d78d89eb18d03c8b70363567db9cf', class: "co-phone-field__helper" }, this.statusIcon && (h("co-icon", { key: 'e76e608653f1b45c7904bbfe0325a2813fe6aff1', name: this.statusIcon, size: 14, weight: "fill", class: "co-phone-field__helper-icon" })), h("span", { key: 'b7f14cc4ad48df862eee0ba4b45e19fe29e26baa', class: "co-phone-field__helper-text" }, this.helperText)))));
162
+ return (h("div", { key: '007dbe9a20cd410cb818f512d9f698afba6e821f', class: `co-phone-field co-phone-field--${this.size} ${statusClass} ${this.disabled ? 'co-phone-field--disabled' : ''}` }, this.label && (h("label", { key: 'a4c5c1b7e10de3098f7f50d74a3ca8703d41f465', class: "co-phone-field__label" }, this.label, h(RequiredMark, { key: 'bcd04f54711067258d1270814141b4b81324ee21', required: this.required }))), h("div", { key: 'a04a6996610ccd5007c54f5728a1158c951c50e9', class: "co-phone-field__container" }, h("button", { key: '317348de58e74afb6f545749c83670ed92eb61bb', type: "button", class: "co-phone-field__selector", disabled: this.disabled, onClick: () => this.handleToggleDropdown(), "aria-expanded": String(this.isOpen), "aria-haspopup": "listbox" }, entry ? (h("img", { class: "co-phone-field__flag", src: `https://flagcdn.com/w40/${entry.iso2.toLowerCase()}.png`, alt: entry.iso2 })) : (h("co-icon", { name: "phone", size: 16 })), h("span", { key: '122cd3a7b4f363554410c7a37df3331b91e4bc81', class: "co-phone-field__dial-code" }, entry ? entry.dialCode : ''), h("span", { key: '3d3d8691ba489bbe093f99a6141323f2620fd6a8', class: "co-phone-field__chevron" }, h("co-icon", { key: 'adab28c8fb4f1d6838dd0e400494656d0bc50812', name: "caret-down", size: 14 }))), h("input", { key: '13214ef8043c4984fcab73e7971e836039d8b469', class: "co-phone-field__input", type: "tel", placeholder: this.placeholder, value: this.numberPart, disabled: this.disabled, onInput: (e) => this.handleNumberInput(e) })), this.isOpen && (h("div", { key: 'b993dff8a4ad5ef53b7f50849591310ec3df54f5', class: "co-phone-field__dropdown", role: "listbox" }, h("div", { key: '95db7d412dbb49ebebda43e7dc13b9f763f2e3e1', class: "co-phone-field__search" }, h("input", { key: 'cd97d9422f0b2ee04de398a4ddd38500664d3828', class: "co-phone-field__search-input", type: "text", placeholder: "Search country...", value: this.searchQuery, onInput: (e) => this.handleSearchInput(e), autoFocus: true })), h("div", { key: 'f0a8c53ed8a8a2e212f6bb2da2883c3efa7eab1e', class: "co-phone-field__options" }, this.filteredCountries.map((d) => (h("button", { type: "button", key: d.iso2, class: `co-phone-field__option ${d.iso2 === this.selectedIso2 ? 'co-phone-field__option--selected' : ''}`, role: "option", "aria-selected": d.iso2 === this.selectedIso2 ? 'true' : 'false', onClick: () => this.handleCountrySelect(d) }, h("img", { class: "co-phone-field__option-flag", src: `https://flagcdn.com/w40/${d.iso2.toLowerCase()}.png`, alt: d.iso2 }), h("span", { class: "co-phone-field__option-name" }, this.renderName(d.name)), h("span", { class: "co-phone-field__option-code" }, d.dialCode))))))), this.helperText && (h("div", { key: 'c2b32d573c9c94720a403280a84547ad08c8a686', class: "co-phone-field__helper" }, this.statusIcon && (h("co-icon", { key: '9199cc2660052d07753d3a12b28a3ff60724c3ea', name: this.statusIcon, size: 14, weight: "fill", class: "co-phone-field__helper-icon" })), h("span", { key: '27462c9a1cefa4aa4cf43ab19924c1f59a399b68', class: "co-phone-field__helper-text" }, this.helperText)))));
163
163
  }
164
164
  static get is() { return "co-phone-field"; }
165
165
  static get encapsulation() { return "shadow"; }
@@ -358,7 +358,7 @@ export class CoPopover {
358
358
  "references": {
359
359
  "PopoverPlacement": {
360
360
  "location": "local",
361
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-popover/co-popover.tsx",
361
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-popover/co-popover.tsx",
362
362
  "id": "src/components/co-popover/co-popover.tsx::PopoverPlacement"
363
363
  }
364
364
  }
@@ -219,7 +219,7 @@ export class CoRadioGroup {
219
219
  "references": {
220
220
  "RadioOption": {
221
221
  "location": "local",
222
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-radio-group/co-radio-group.tsx",
222
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-radio-group/co-radio-group.tsx",
223
223
  "id": "src/components/co-radio-group/co-radio-group.tsx::RadioOption"
224
224
  }
225
225
  }
@@ -1321,7 +1321,7 @@ export class CoRefField {
1321
1321
  "references": {
1322
1322
  "RefFieldOption": {
1323
1323
  "location": "local",
1324
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1324
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1325
1325
  "id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
1326
1326
  }
1327
1327
  }
@@ -1462,7 +1462,7 @@ export class CoRefField {
1462
1462
  "references": {
1463
1463
  "RefFieldOption": {
1464
1464
  "location": "local",
1465
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1465
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1466
1466
  "id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
1467
1467
  }
1468
1468
  }
@@ -1483,7 +1483,7 @@ export class CoRefField {
1483
1483
  "references": {
1484
1484
  "RefFieldOption": {
1485
1485
  "location": "local",
1486
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1486
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1487
1487
  "id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
1488
1488
  }
1489
1489
  }
@@ -1522,7 +1522,7 @@ export class CoRefField {
1522
1522
  },
1523
1523
  "RefFieldOption": {
1524
1524
  "location": "local",
1525
- "path": "/Users/agox/worktrees/cobalt-release/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1525
+ "path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-ref-field/co-ref-field.tsx",
1526
1526
  "id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
1527
1527
  }
1528
1528
  },
@@ -126,6 +126,28 @@ co-rich-text-editor {
126
126
  border-top-right-radius: calc(var(--co-border-radius-xs) - 1px);
127
127
  }
128
128
 
129
+ /* ---- Toolbar at the bottom (`toolbar-position="bottom"`) ----
130
+ The row owns the separator (border-top) and shows the frame's surface; the
131
+ toolbar inside drops its own border/background (co-rich-text-toolbar
132
+ `:host([position="bottom"])`). `<slot name="toolbar-end">` (light DOM) is the
133
+ consumer's footer, rendered whenever the mode is bottom — toolbar or not. */
134
+ .co-rich-text-editor__toolbar-row {
135
+ display: flex;
136
+ align-items: center;
137
+ justify-content: space-between;
138
+ gap: var(--co-spacing-md);
139
+ flex-shrink: 0;
140
+ min-width: 0;
141
+ border-top: 1px solid var(--co-semantic-border-subtle);
142
+ }
143
+
144
+ .co-rich-text-editor--toolbar-bottom .co-rich-text-editor__toolbar {
145
+ /* Nothing to nest at the top any more (mirror of the top-corner rule above). */
146
+ border-top-left-radius: 0;
147
+ border-top-right-radius: 0;
148
+ min-width: 0;
149
+ }
150
+
129
151
  .co-rte-content {
130
152
  min-height: 96px;
131
153
  color: var(--co-semantic-text-default);