@prolibu-suite/cobalt-core 0.9.6 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/custom-elements.json +750 -80
  2. package/dist/cjs/co-accordion.cjs.entry.js +1 -1
  3. package/dist/cjs/co-action-bar.cjs.entry.js +1 -1
  4. package/dist/cjs/co-app-shell.cjs.entry.js +4 -4
  5. package/dist/cjs/co-audio-player.cjs.entry.js +1 -1
  6. package/dist/cjs/co-autocomplete.cjs.entry.js +2 -2
  7. package/dist/cjs/co-avatar-group.cjs.entry.js +1 -1
  8. package/dist/cjs/co-avatar_2.cjs.entry.js +49 -17
  9. package/dist/cjs/co-badge.cjs.entry.js +11 -3
  10. package/dist/cjs/co-bottom-sheet.cjs.entry.js +1 -1
  11. package/dist/cjs/co-breadcrumb-item.cjs.entry.js +1 -1
  12. package/dist/cjs/co-breadcrumb.cjs.entry.js +1 -1
  13. package/dist/cjs/co-button-group.cjs.entry.js +1 -1
  14. package/dist/cjs/co-button.cjs.entry.js +2 -2
  15. package/dist/cjs/co-calendar-month_2.cjs.entry.js +55 -20
  16. package/dist/cjs/co-calendar_3.cjs.entry.js +27 -15
  17. package/dist/cjs/co-card.cjs.entry.js +1 -1
  18. package/dist/cjs/co-carousel-item.cjs.entry.js +1 -1
  19. package/dist/cjs/co-carousel.cjs.entry.js +2 -2
  20. package/dist/cjs/co-checkbox-group.cjs.entry.js +2 -2
  21. package/dist/cjs/co-checkbox.cjs.entry.js +6 -6
  22. package/dist/cjs/co-chip_2.cjs.entry.js +8 -5
  23. package/dist/cjs/co-color-picker.cjs.entry.js +1048 -27
  24. package/dist/cjs/co-column-picker.cjs.entry.js +3 -3
  25. package/dist/cjs/co-combobox.cjs.entry.js +2 -2
  26. package/dist/cjs/co-command-search.cjs.entry.js +1 -1
  27. package/dist/cjs/co-data-table-pagination.cjs.entry.js +5 -5
  28. package/dist/cjs/co-data-table.cjs.entry.js +1 -1
  29. package/dist/cjs/co-date-picker.cjs.entry.js +3 -3
  30. package/dist/cjs/co-date-range-picker.cjs.entry.js +3 -3
  31. package/dist/cjs/co-date-range.cjs.entry.js +2 -2
  32. package/dist/cjs/co-date-time-picker.cjs.entry.js +101 -130
  33. package/dist/cjs/co-drive-card.cjs.entry.js +2 -2
  34. package/dist/cjs/co-drop-zone.cjs.entry.js +2 -2
  35. package/dist/cjs/co-emoji-picker.cjs.entry.js +4 -4
  36. package/dist/cjs/co-empty-state.cjs.entry.js +4 -4
  37. package/dist/cjs/co-event-calendar.cjs.entry.js +4 -4
  38. package/dist/cjs/co-event-popover.cjs.entry.js +3 -3
  39. package/dist/cjs/co-fab.cjs.entry.js +3 -3
  40. package/dist/cjs/co-file-field.cjs.entry.js +102 -106
  41. package/dist/cjs/co-file-type-tile.cjs.entry.js +3 -3
  42. package/dist/cjs/co-helper-text.cjs.entry.js +3 -3
  43. package/dist/cjs/co-icon-button.cjs.entry.js +6 -6
  44. package/dist/cjs/co-icon.cjs.entry.js +3 -3
  45. package/dist/cjs/co-input.cjs.entry.js +26 -4
  46. package/dist/cjs/co-json-field.cjs.entry.js +5 -5
  47. package/dist/cjs/co-lightbox.cjs.entry.js +204 -21
  48. package/dist/cjs/co-list-footer.cjs.entry.js +2 -2
  49. package/dist/cjs/co-list-item.cjs.entry.js +5 -5
  50. package/dist/cjs/co-loader.cjs.entry.js +1 -1
  51. package/dist/cjs/co-media-thumb.cjs.entry.js +3 -3
  52. package/dist/cjs/co-menu-divider.cjs.entry.js +2 -2
  53. package/dist/cjs/co-menu-item.cjs.entry.js +84 -3
  54. package/dist/cjs/co-menu.cjs.entry.js +2 -2
  55. package/dist/cjs/co-modal.cjs.entry.js +6 -4
  56. package/dist/cjs/co-navbar.cjs.entry.js +4 -4
  57. package/dist/cjs/co-number-field.cjs.entry.js +272 -9
  58. package/dist/cjs/co-overlay.cjs.entry.js +6 -4
  59. package/dist/cjs/co-page-header.cjs.entry.js +2 -2
  60. package/dist/cjs/co-phone-field.cjs.entry.js +3 -3
  61. package/dist/cjs/co-popover.cjs.entry.js +58 -21
  62. package/dist/cjs/co-progress-bar.cjs.entry.js +3 -3
  63. package/dist/cjs/co-progress-circle.cjs.entry.js +3 -3
  64. package/dist/cjs/co-provider-logo_2.cjs.entry.js +47 -3
  65. package/dist/cjs/co-radio-group.cjs.entry.js +1 -1
  66. package/dist/cjs/co-radio.cjs.entry.js +4 -4
  67. package/dist/cjs/co-rating.cjs.entry.js +4 -4
  68. package/dist/cjs/co-ref-field.cjs.entry.js +4 -4
  69. package/dist/cjs/co-rich-text-editor.cjs.entry.js +11 -8
  70. package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +7 -3
  71. package/dist/cjs/co-rich-text-viewer.cjs.entry.js +4 -3
  72. package/dist/cjs/co-row.cjs.entry.js +3 -3
  73. package/dist/cjs/co-segmented-bar.cjs.entry.js +1 -1
  74. package/dist/cjs/co-select.cjs.entry.js +2 -2
  75. package/dist/cjs/co-separator.cjs.entry.js +2 -2
  76. package/dist/cjs/co-sidebar-nav.cjs.entry.js +2 -2
  77. package/dist/cjs/co-sidebar.cjs.entry.js +3 -3
  78. package/dist/cjs/co-slider.cjs.entry.js +3 -3
  79. package/dist/cjs/co-switch.cjs.entry.js +6 -6
  80. package/dist/cjs/co-tab-group.cjs.entry.js +3 -3
  81. package/dist/cjs/co-tab.cjs.entry.js +3 -3
  82. package/dist/cjs/co-tags-field.cjs.entry.js +8 -8
  83. package/dist/cjs/co-textarea.cjs.entry.js +6 -6
  84. package/dist/cjs/co-time-field.cjs.entry.js +325 -0
  85. package/dist/cjs/co-toast.cjs.entry.js +2 -2
  86. package/dist/cjs/co-toggle-button-group.cjs.entry.js +4 -4
  87. package/dist/cjs/co-toggle-button.cjs.entry.js +4 -4
  88. package/dist/cjs/co-transfer-list.cjs.entry.js +1 -1
  89. package/dist/cjs/co-video.cjs.entry.js +32 -7
  90. package/dist/cjs/cobalt.cjs.js +2 -2
  91. package/dist/cjs/color-CML2Cfdh.js +142 -0
  92. package/dist/cjs/{dateI18n-wblvKRq_.js → dateI18n-BK2qHqoC.js} +36 -0
  93. package/dist/cjs/{fieldChip-BLzo9MEV.js → fieldChip-B6YIGU1V.js} +1 -1
  94. package/dist/cjs/fileI18n-6sdbKvo6.js +88 -0
  95. package/dist/cjs/{index-DFZ5YhIT.js → index-BYwrR87Z.js} +28 -10
  96. package/dist/cjs/{index-DK-2Lzmf.js → index-MDAnKsze.js} +25 -21
  97. package/dist/cjs/loader.cjs.js +2 -2
  98. package/dist/cjs/{positioning-DCj_AJ2T.js → positioning-CyatXeT_.js} +32 -13
  99. package/dist/cjs/{requiredMark-C1xcrzSZ.js → requiredMark-D-t-IPN0.js} +1 -1
  100. package/dist/cjs/{toolbar-config-BQfWTW6P.js → toolbar-config-BSGas-Wl.js} +10 -0
  101. package/dist/cobalt/cobalt.css +1 -1
  102. package/dist/cobalt/cobalt.esm.js +1 -1
  103. package/dist/cobalt/{p-f83b48fd.entry.js → p-011dc80b.entry.js} +1 -1
  104. package/dist/cobalt/{p-316c62c0.entry.js → p-0678c797.entry.js} +1 -1
  105. package/dist/cobalt/{p-43bd298d.entry.js → p-08e42e00.entry.js} +1 -1
  106. package/dist/cobalt/{p-1c68bc41.entry.js → p-10b82207.entry.js} +1 -1
  107. package/dist/cobalt/{p-a8c64cc3.entry.js → p-15d59169.entry.js} +1 -1
  108. package/dist/cobalt/{p-07d570a6.entry.js → p-16954cea.entry.js} +1 -1
  109. package/dist/cobalt/{p-85a61e28.entry.js → p-17244412.entry.js} +1 -1
  110. package/dist/cobalt/p-1788aab5.entry.js +1 -0
  111. package/dist/cobalt/p-1a589c8e.entry.js +1 -0
  112. package/dist/cobalt/{p-da546d08.entry.js → p-1dc55e43.entry.js} +1 -1
  113. package/dist/cobalt/p-20a39218.entry.js +1 -0
  114. package/dist/cobalt/{p-4c7e3984.entry.js → p-23ab0cc5.entry.js} +1 -1
  115. package/dist/cobalt/{p-fabe5fb2.entry.js → p-2636b7eb.entry.js} +1 -1
  116. package/dist/cobalt/{p-88a0659f.entry.js → p-27a7e549.entry.js} +1 -1
  117. package/dist/cobalt/{p-18d34b01.entry.js → p-290066ef.entry.js} +1 -1
  118. package/dist/cobalt/{p-89e38c5e.entry.js → p-2f9cbbd5.entry.js} +1 -1
  119. package/dist/cobalt/{p-ef5e1167.entry.js → p-325b91b6.entry.js} +1 -1
  120. package/dist/cobalt/{p-60cb66f5.entry.js → p-37f5036b.entry.js} +1 -1
  121. package/dist/cobalt/p-3cc3ff93.entry.js +1 -0
  122. package/dist/cobalt/p-410bee4d.entry.js +1 -0
  123. package/dist/cobalt/{p-6795a258.entry.js → p-44c4e4a3.entry.js} +1 -1
  124. package/dist/cobalt/{p-4b083da4.entry.js → p-44ea675f.entry.js} +1 -1
  125. package/dist/cobalt/{p-2828ecf6.entry.js → p-4592ca00.entry.js} +1 -1
  126. package/dist/cobalt/p-4908f33f.entry.js +1 -0
  127. package/dist/cobalt/{p-342e1da4.entry.js → p-4d65e713.entry.js} +1 -1
  128. package/dist/cobalt/{p-dca4cd5f.entry.js → p-4d897896.entry.js} +1 -1
  129. package/dist/cobalt/{p-33ea4a90.entry.js → p-50bcc76f.entry.js} +1 -1
  130. package/dist/cobalt/{p-ac91259e.entry.js → p-5298c030.entry.js} +1 -1
  131. package/dist/cobalt/p-54c987d7.entry.js +1 -0
  132. package/dist/cobalt/p-56551580.entry.js +1 -0
  133. package/dist/cobalt/p-58137c9e.entry.js +1 -0
  134. package/dist/cobalt/{p-4f754c9a.entry.js → p-58d9b650.entry.js} +1 -1
  135. package/dist/cobalt/p-59963937.entry.js +1 -0
  136. package/dist/cobalt/{p-2d329ac8.entry.js → p-623cc195.entry.js} +1 -1
  137. package/dist/cobalt/p-63825d7f.entry.js +1 -0
  138. package/dist/cobalt/{p-8e667eb6.entry.js → p-66b11b38.entry.js} +1 -1
  139. package/dist/cobalt/{p-fb3a095b.entry.js → p-6bf6bc3e.entry.js} +1 -1
  140. package/dist/cobalt/p-6f700f0d.entry.js +1 -0
  141. package/dist/cobalt/p-73c6d735.entry.js +1 -0
  142. package/dist/cobalt/{p-a6357340.entry.js → p-76249983.entry.js} +1 -1
  143. package/dist/cobalt/{p-bfc2a849.entry.js → p-82266f11.entry.js} +1 -1
  144. package/dist/cobalt/{p-a9b29cc2.entry.js → p-826ee074.entry.js} +1 -1
  145. package/dist/cobalt/{p-23b3ff3f.entry.js → p-83a9a05a.entry.js} +1 -1
  146. package/dist/cobalt/{p-568cfe8d.entry.js → p-83ea631d.entry.js} +1 -1
  147. package/dist/cobalt/p-85501c6a.entry.js +1 -0
  148. package/dist/cobalt/{p-dfd25f1d.entry.js → p-88195a63.entry.js} +1 -1
  149. package/dist/cobalt/p-8fa5dc4a.entry.js +1 -0
  150. package/dist/cobalt/{p-c8dba82f.entry.js → p-91e73a92.entry.js} +1 -1
  151. package/dist/cobalt/{p-ac466658.entry.js → p-92b092db.entry.js} +1 -1
  152. package/dist/cobalt/{p-36197363.entry.js → p-996f4e38.entry.js} +1 -1
  153. package/dist/cobalt/p-BRbgGqLw.js +1 -0
  154. package/dist/cobalt/{p-BL0sCfMH.js → p-Bryf3-Js.js} +1 -1
  155. package/dist/cobalt/p-DFHRS9cJ.js +1 -0
  156. package/dist/cobalt/{p-CrtiywTB.js → p-DH5lfRNj.js} +1 -1
  157. package/dist/{components/p-WeuPA9Rw.js → cobalt/p-DOL2zACE.js} +1 -1
  158. package/dist/cobalt/p-D_zA1Pv4.js +1 -0
  159. package/dist/cobalt/{p-fef5db54.entry.js → p-a32b20eb.entry.js} +1 -1
  160. package/dist/cobalt/p-aa9400bf.entry.js +1 -0
  161. package/dist/cobalt/{p-8eb485c8.entry.js → p-aaca6dab.entry.js} +1 -1
  162. package/dist/cobalt/{p-e5495539.entry.js → p-aae86f96.entry.js} +1 -1
  163. package/dist/cobalt/{p-8f38e24d.entry.js → p-ad33c40e.entry.js} +1 -1
  164. package/dist/cobalt/p-b0c4fc71.entry.js +1 -0
  165. package/dist/cobalt/{p-da18b5f4.entry.js → p-b1e8d69e.entry.js} +1 -1
  166. package/dist/cobalt/p-b48917c9.entry.js +1 -0
  167. package/dist/cobalt/{p-7e53e9c8.entry.js → p-b565104d.entry.js} +1 -1
  168. package/dist/cobalt/{p-b0319a2d.entry.js → p-b90d41e4.entry.js} +1 -1
  169. package/dist/cobalt/{p-c5684c79.entry.js → p-bd683db3.entry.js} +1 -1
  170. package/dist/cobalt/{p-1ddbc48b.entry.js → p-c124e82b.entry.js} +1 -1
  171. package/dist/cobalt/{p-95efe661.entry.js → p-c2ebf0ec.entry.js} +1 -1
  172. package/dist/cobalt/{p-76420ac1.entry.js → p-c32c176a.entry.js} +1 -1
  173. package/dist/cobalt/{p-54ae807d.entry.js → p-c465d619.entry.js} +1 -1
  174. package/dist/cobalt/{p-ab45d9bd.entry.js → p-c91d4fc6.entry.js} +1 -1
  175. package/dist/cobalt/{p-ce35c898.entry.js → p-d29bb0fa.entry.js} +1 -1
  176. package/dist/cobalt/{p-7c5e846a.entry.js → p-db805569.entry.js} +1 -1
  177. package/dist/cobalt/p-e01f9b9a.entry.js +1 -0
  178. package/dist/cobalt/p-e3aae282.entry.js +1 -0
  179. package/dist/cobalt/{p-d15d3a97.entry.js → p-e4264532.entry.js} +1 -1
  180. package/dist/cobalt/{p-93c68029.entry.js → p-e48f4e45.entry.js} +1 -1
  181. package/dist/cobalt/{p-3f0eed59.entry.js → p-e49a564c.entry.js} +1 -1
  182. package/dist/cobalt/p-e8a2f993.entry.js +1 -0
  183. package/dist/cobalt/p-e8a4e6b0.entry.js +1 -0
  184. package/dist/cobalt/p-ea20f048.entry.js +1 -0
  185. package/dist/cobalt/{p-c1e7fb32.entry.js → p-eb063cc0.entry.js} +1 -1
  186. package/dist/cobalt/p-eb82358d.entry.js +1 -0
  187. package/dist/cobalt/{p-2114c036.entry.js → p-eb8691f2.entry.js} +1 -1
  188. package/dist/cobalt/{p-e8878cf9.entry.js → p-ee2023da.entry.js} +1 -1
  189. package/dist/cobalt/p-ee9a623d.entry.js +1 -0
  190. package/dist/cobalt/p-ef5ca521.entry.js +1 -0
  191. package/dist/cobalt/p-f4e1c3c3.entry.js +1 -0
  192. package/dist/cobalt/{p-e364b8a5.entry.js → p-f57dffca.entry.js} +1 -1
  193. package/dist/cobalt/p-f6691108.entry.js +1 -0
  194. package/dist/cobalt/p-f68dd124.entry.js +1 -0
  195. package/dist/cobalt/p-fMqVDypp.js +1 -0
  196. package/dist/cobalt/{p-0c463d9a.entry.js → p-fd150cc6.entry.js} +1 -1
  197. package/dist/cobalt/{p-0e91e5c4.entry.js → p-fe7e8813.entry.js} +1 -1
  198. package/dist/cobalt/p-gKnOhsd2.js +1 -0
  199. package/dist/cobalt/p-jYd9gu_c.js +1 -0
  200. package/dist/collection/collection-manifest.json +1 -0
  201. package/dist/collection/components/co-app-shell/co-app-shell.css +107 -41
  202. package/dist/collection/components/co-app-shell/co-app-shell.js +2 -2
  203. package/dist/collection/components/co-autocomplete/co-autocomplete.js +1 -1
  204. package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
  205. package/dist/collection/components/co-badge/co-badge.css +18 -0
  206. package/dist/collection/components/co-badge/co-badge.js +29 -1
  207. package/dist/collection/components/co-button/co-button.css +4 -4
  208. package/dist/collection/components/co-checkbox/co-checkbox.css +12 -3
  209. package/dist/collection/components/co-checkbox/co-checkbox.js +6 -6
  210. package/dist/collection/components/co-checkbox-group/co-checkbox-group.css +1 -3
  211. package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
  212. package/dist/collection/components/co-color-picker/co-color-picker.css +252 -5
  213. package/dist/collection/components/co-color-picker/co-color-picker.js +932 -15
  214. package/dist/collection/components/co-color-picker/presets.js +113 -15
  215. package/dist/collection/components/co-column-picker/co-column-picker.js +2 -2
  216. package/dist/collection/components/co-combobox/co-combobox.js +1 -1
  217. package/dist/collection/components/co-command-search/co-command-search.js +1 -1
  218. package/dist/collection/components/co-data-table/co-data-table.js +1 -1
  219. package/dist/collection/components/co-data-table-pagination/co-data-table-pagination.js +4 -4
  220. package/dist/collection/components/co-date-field/co-date-field.js +4 -4
  221. package/dist/collection/components/co-date-range/co-date-range.js +1 -1
  222. package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +2 -2
  223. package/dist/collection/components/co-date-time-picker/co-date-time-picker.css +128 -32
  224. package/dist/collection/components/co-date-time-picker/co-date-time-picker.js +142 -138
  225. package/dist/collection/components/co-drawer/co-drawer.css +99 -36
  226. package/dist/collection/components/co-drawer/co-drawer.js +19 -7
  227. package/dist/collection/components/co-drive-card/co-drive-card.js +1 -1
  228. package/dist/collection/components/co-drop-zone/co-drop-zone.js +1 -1
  229. package/dist/collection/components/co-emoji-picker/co-emoji-picker.js +2 -2
  230. package/dist/collection/components/co-empty-state/co-empty-state.css +28 -0
  231. package/dist/collection/components/co-empty-state/co-empty-state.js +2 -2
  232. package/dist/collection/components/co-event-calendar/co-event-calendar.js +2 -2
  233. package/dist/collection/components/co-event-popover/co-event-popover.js +1 -1
  234. package/dist/collection/components/co-fab/co-fab.js +2 -2
  235. package/dist/collection/components/co-file-field/co-file-field.css +55 -2
  236. package/dist/collection/components/co-file-field/co-file-field.js +41 -13
  237. package/dist/collection/components/co-file-field/co-file-field.utils.js +51 -4
  238. package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +2 -2
  239. package/dist/collection/components/co-helper-text/co-helper-text.js +2 -2
  240. package/dist/collection/components/co-icon/co-icon.js +2 -2
  241. package/dist/collection/components/co-icon-button/co-icon-button.css +40 -2
  242. package/dist/collection/components/co-icon-button/co-icon-button.js +43 -4
  243. package/dist/collection/components/co-input/co-input.css +33 -0
  244. package/dist/collection/components/co-input/co-input.js +25 -2
  245. package/dist/collection/components/co-json-field/co-json-field.js +3 -3
  246. package/dist/collection/components/co-lightbox/co-lightbox.css +23 -0
  247. package/dist/collection/components/co-lightbox/co-lightbox.js +209 -20
  248. package/dist/collection/components/co-list-footer/co-list-footer.js +1 -1
  249. package/dist/collection/components/co-list-item/co-list-item.js +4 -4
  250. package/dist/collection/components/co-media-thumb/co-media-thumb.js +2 -2
  251. package/dist/collection/components/co-menu/co-menu.js +1 -1
  252. package/dist/collection/components/co-menu-divider/co-menu-divider.js +1 -1
  253. package/dist/collection/components/co-menu-item/co-menu-item.js +67 -3
  254. package/dist/collection/components/co-modal/co-modal.css +106 -37
  255. package/dist/collection/components/co-modal/co-modal.js +4 -2
  256. package/dist/collection/components/co-navbar/co-navbar.css +4 -2
  257. package/dist/collection/components/co-navbar/co-navbar.js +2 -2
  258. package/dist/collection/components/co-number-field/co-number-field.css +22 -0
  259. package/dist/collection/components/co-number-field/co-number-field.js +216 -9
  260. package/dist/collection/components/co-option-list/co-option-list.css +25 -4
  261. package/dist/collection/components/co-option-list/co-option-list.js +26 -3
  262. package/dist/collection/components/co-overlay/co-overlay.js +5 -3
  263. package/dist/collection/components/co-page-header/co-page-header.js +1 -1
  264. package/dist/collection/components/co-phone-field/co-phone-field.js +1 -1
  265. package/dist/collection/components/co-popover/co-popover.css +18 -3
  266. package/dist/collection/components/co-popover/co-popover.js +83 -20
  267. package/dist/collection/components/co-progress-bar/co-progress-bar.js +2 -2
  268. package/dist/collection/components/co-progress-circle/co-progress-circle.js +2 -2
  269. package/dist/collection/components/co-radio/co-radio.js +3 -3
  270. package/dist/collection/components/co-radio-group/co-radio-group.js +1 -1
  271. package/dist/collection/components/co-rating/co-rating.js +3 -3
  272. package/dist/collection/components/co-ref-field/co-ref-field.js +3 -3
  273. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.css +14 -1
  274. package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +9 -6
  275. package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +7 -3
  276. package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +3 -2
  277. package/dist/collection/components/co-row/co-row.js +2 -2
  278. package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +1 -1
  279. package/dist/collection/components/co-select/co-select.js +1 -1
  280. package/dist/collection/components/co-separator/co-separator.js +1 -1
  281. package/dist/collection/components/co-sidebar/co-sidebar.js +2 -2
  282. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.css +2 -2
  283. package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +1 -1
  284. package/dist/collection/components/co-skeleton/co-skeleton.css +18 -0
  285. package/dist/collection/components/co-skeleton/co-skeleton.js +83 -1
  286. package/dist/collection/components/co-slider/co-slider.js +2 -2
  287. package/dist/collection/components/co-switch/co-switch.css +3 -3
  288. package/dist/collection/components/co-switch/co-switch.js +3 -3
  289. package/dist/collection/components/co-tab/co-tab.js +2 -2
  290. package/dist/collection/components/co-tab-group/co-tab-group.js +2 -2
  291. package/dist/collection/components/co-tags-field/co-tags-field.js +5 -5
  292. package/dist/collection/components/co-textarea/co-textarea.js +4 -4
  293. package/dist/collection/components/co-time-field/co-time-field.css +111 -0
  294. package/dist/collection/components/co-time-field/co-time-field.js +536 -0
  295. package/dist/collection/components/co-toast/co-toast.css +13 -7
  296. package/dist/collection/components/co-toast/co-toast.js +2 -2
  297. package/dist/collection/components/co-toggle-button/co-toggle-button.css +16 -11
  298. package/dist/collection/components/co-toggle-button/co-toggle-button.js +2 -2
  299. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.css +7 -1
  300. package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +2 -2
  301. package/dist/collection/components/co-tooltip/co-tooltip.css +12 -1
  302. package/dist/collection/components/co-tooltip/co-tooltip.js +49 -16
  303. package/dist/collection/components/co-transfer-list/co-transfer-list.js +1 -1
  304. package/dist/collection/components/co-video/co-video.js +34 -9
  305. package/dist/collection/utils/amountText.js +95 -0
  306. package/dist/collection/utils/color.js +109 -3
  307. package/dist/collection/utils/colorPickerI18n.js +55 -0
  308. package/dist/collection/utils/dateI18n.js +36 -0
  309. package/dist/collection/utils/fileI18n.js +3 -0
  310. package/dist/collection/utils/positioning.js +37 -4
  311. package/dist/collection/utils/submenu.js +35 -0
  312. package/dist/components/co-accordion.js +1 -1
  313. package/dist/components/co-action-bar.js +1 -1
  314. package/dist/components/co-app-shell.js +1 -1
  315. package/dist/components/co-audio-player.js +1 -1
  316. package/dist/components/co-autocomplete.js +1 -1
  317. package/dist/components/co-avatar-group.js +1 -1
  318. package/dist/components/co-avatar.js +1 -1
  319. package/dist/components/co-badge.js +1 -1
  320. package/dist/components/co-breadcrumb-item.js +1 -1
  321. package/dist/components/co-breadcrumb.js +1 -1
  322. package/dist/components/co-button.js +1 -1
  323. package/dist/components/co-calendar-month.js +1 -1
  324. package/dist/components/co-calendar-timegrid.js +1 -1
  325. package/dist/components/co-calendar.js +1 -1
  326. package/dist/components/co-carousel.js +1 -1
  327. package/dist/components/co-checkbox-group.js +1 -1
  328. package/dist/components/co-checkbox.js +1 -1
  329. package/dist/components/co-chip.js +1 -1
  330. package/dist/components/co-color-picker.js +1 -1
  331. package/dist/components/co-column-picker.js +1 -1
  332. package/dist/components/co-combobox.js +1 -1
  333. package/dist/components/co-command-search.js +1 -1
  334. package/dist/components/co-data-table-pagination.js +1 -1
  335. package/dist/components/co-data-table.js +1 -1
  336. package/dist/components/co-date-field.js +1 -1
  337. package/dist/components/co-date-picker.js +1 -1
  338. package/dist/components/co-date-range-picker.js +1 -1
  339. package/dist/components/co-date-range.js +1 -1
  340. package/dist/components/co-date-time-picker.js +1 -1
  341. package/dist/components/co-drawer.js +1 -1
  342. package/dist/components/co-drive-card.js +1 -1
  343. package/dist/components/co-drop-zone.js +1 -1
  344. package/dist/components/co-emoji-picker.js +1 -1
  345. package/dist/components/co-empty-state.js +1 -1
  346. package/dist/components/co-event-calendar.js +1 -1
  347. package/dist/components/co-event-popover.js +1 -1
  348. package/dist/components/co-fab.js +1 -1
  349. package/dist/components/co-file-field.js +1 -1
  350. package/dist/components/co-file-type-tile.js +1 -1
  351. package/dist/components/co-helper-text.js +1 -1
  352. package/dist/components/co-icon-button.js +1 -1
  353. package/dist/components/co-icon.js +1 -1
  354. package/dist/components/co-input.js +1 -1
  355. package/dist/components/co-json-field.js +1 -1
  356. package/dist/components/co-lightbox.js +1 -1
  357. package/dist/components/co-list-footer.js +1 -1
  358. package/dist/components/co-list-item.js +1 -1
  359. package/dist/components/co-media-thumb.js +1 -1
  360. package/dist/components/co-menu-divider.js +1 -1
  361. package/dist/components/co-menu-item.js +1 -1
  362. package/dist/components/co-menu.js +1 -1
  363. package/dist/components/co-modal.js +1 -1
  364. package/dist/components/co-navbar.js +1 -1
  365. package/dist/components/co-number-field.js +1 -1
  366. package/dist/components/co-option-list.js +1 -1
  367. package/dist/components/co-overlay.js +1 -1
  368. package/dist/components/co-page-header.js +1 -1
  369. package/dist/components/co-phone-field.js +1 -1
  370. package/dist/components/co-popover.js +1 -1
  371. package/dist/components/co-progress-bar.js +1 -1
  372. package/dist/components/co-progress-circle.js +1 -1
  373. package/dist/components/co-radio-group.js +1 -1
  374. package/dist/components/co-radio.js +1 -1
  375. package/dist/components/co-rating.js +1 -1
  376. package/dist/components/co-ref-field.js +1 -1
  377. package/dist/components/co-rich-text-editor.js +1 -1
  378. package/dist/components/co-rich-text-toolbar.js +1 -1
  379. package/dist/components/co-rich-text-viewer.js +1 -1
  380. package/dist/components/co-row.js +1 -1
  381. package/dist/components/co-select.js +1 -1
  382. package/dist/components/co-separator.js +1 -1
  383. package/dist/components/co-sidebar-nav.js +1 -1
  384. package/dist/components/co-sidebar.js +1 -1
  385. package/dist/components/co-skeleton.js +1 -1
  386. package/dist/components/co-slider.js +1 -1
  387. package/dist/components/co-switch.js +1 -1
  388. package/dist/components/co-tab-group.js +1 -1
  389. package/dist/components/co-tab.js +1 -1
  390. package/dist/components/co-tags-field.js +1 -1
  391. package/dist/components/co-textarea.js +1 -1
  392. package/dist/components/co-time-field.d.ts +11 -0
  393. package/dist/components/co-time-field.js +1 -0
  394. package/dist/components/co-toast.js +1 -1
  395. package/dist/components/co-toggle-button-group.js +1 -1
  396. package/dist/components/co-toggle-button.js +1 -1
  397. package/dist/components/co-tooltip.js +1 -1
  398. package/dist/components/co-transfer-list.js +1 -1
  399. package/dist/components/co-video.js +1 -1
  400. package/dist/components/index.js +1 -1
  401. package/dist/components/p-9ceBPSd1.js +1 -0
  402. package/dist/components/p-B1QFLcY9.js +1 -0
  403. package/dist/components/p-B2IsXte7.js +1 -0
  404. package/dist/components/p-B4NCaKrR.js +1 -0
  405. package/dist/components/p-BBP5__CY.js +1 -0
  406. package/dist/components/{p-Dabi98BI.js → p-BGDqldEg.js} +1 -1
  407. package/dist/components/p-BRbgGqLw.js +1 -0
  408. package/dist/components/p-Be_kyNRE.js +1 -0
  409. package/dist/components/{p-BL0sCfMH.js → p-Bryf3-Js.js} +1 -1
  410. package/dist/components/p-BsTO1uUA.js +1 -0
  411. package/dist/components/{p-CuZXTvDM.js → p-Bv6U5y3d.js} +1 -1
  412. package/dist/components/p-BxP8OBw6.js +1 -0
  413. package/dist/components/{p-P8wvwhM2.js → p-CFFDmGPS.js} +1 -1
  414. package/dist/components/{p-CA_JAK9s.js → p-CT2enQ6h.js} +1 -1
  415. package/dist/components/p-CXPRaTuo.js +1 -0
  416. package/dist/components/{p-D5EdMieb.js → p-Cl3AdEQJ.js} +1 -1
  417. package/dist/components/p-CnX3L8aF.js +1 -0
  418. package/dist/components/p-DFHRS9cJ.js +1 -0
  419. package/dist/components/p-DIo66nBr.js +1 -0
  420. package/dist/components/{p-Dj1EZ5qD.js → p-DNJAIVfI.js} +1 -1
  421. package/dist/{cobalt/p-WeuPA9Rw.js → components/p-DOL2zACE.js} +1 -1
  422. package/dist/components/p-DRP8D9ro.js +1 -0
  423. package/dist/components/p-DkDTmHCg.js +1 -0
  424. package/dist/components/{p-Bxk96Zgc.js → p-Du_CgT5E.js} +1 -1
  425. package/dist/components/{p-BHYtxTzM.js → p-HxVRXXXC.js} +1 -1
  426. package/dist/components/{p-B0Dc-I_C.js → p-NNxjElcX.js} +1 -1
  427. package/dist/components/p-gKnOhsd2.js +1 -0
  428. package/dist/components/p-jYd9gu_c.js +1 -0
  429. package/dist/components/{p-D4qzGifz.js → p-vby0ITbe.js} +1 -1
  430. package/dist/components/{p-D6OUW6oW.js → p-x4grh-eZ.js} +1 -1
  431. package/dist/esm/co-accordion.entry.js +1 -1
  432. package/dist/esm/co-action-bar.entry.js +1 -1
  433. package/dist/esm/co-app-shell.entry.js +4 -4
  434. package/dist/esm/co-audio-player.entry.js +1 -1
  435. package/dist/esm/co-autocomplete.entry.js +2 -2
  436. package/dist/esm/co-avatar-group.entry.js +1 -1
  437. package/dist/esm/co-avatar_2.entry.js +49 -17
  438. package/dist/esm/co-badge.entry.js +11 -3
  439. package/dist/esm/co-bottom-sheet.entry.js +1 -1
  440. package/dist/esm/co-breadcrumb-item.entry.js +1 -1
  441. package/dist/esm/co-breadcrumb.entry.js +1 -1
  442. package/dist/esm/co-button-group.entry.js +1 -1
  443. package/dist/esm/co-button.entry.js +2 -2
  444. package/dist/esm/co-calendar-month_2.entry.js +37 -2
  445. package/dist/esm/co-calendar_3.entry.js +27 -15
  446. package/dist/esm/co-card.entry.js +1 -1
  447. package/dist/esm/co-carousel-item.entry.js +1 -1
  448. package/dist/esm/co-carousel.entry.js +2 -2
  449. package/dist/esm/co-checkbox-group.entry.js +2 -2
  450. package/dist/esm/co-checkbox.entry.js +6 -6
  451. package/dist/esm/co-chip_2.entry.js +8 -5
  452. package/dist/esm/co-color-picker.entry.js +1048 -27
  453. package/dist/esm/co-column-picker.entry.js +3 -3
  454. package/dist/esm/co-combobox.entry.js +2 -2
  455. package/dist/esm/co-command-search.entry.js +1 -1
  456. package/dist/esm/co-data-table-pagination.entry.js +5 -5
  457. package/dist/esm/co-data-table.entry.js +1 -1
  458. package/dist/esm/co-date-picker.entry.js +3 -3
  459. package/dist/esm/co-date-range-picker.entry.js +3 -3
  460. package/dist/esm/co-date-range.entry.js +2 -2
  461. package/dist/esm/co-date-time-picker.entry.js +101 -130
  462. package/dist/esm/co-drive-card.entry.js +2 -2
  463. package/dist/esm/co-drop-zone.entry.js +2 -2
  464. package/dist/esm/co-emoji-picker.entry.js +4 -4
  465. package/dist/esm/co-empty-state.entry.js +4 -4
  466. package/dist/esm/co-event-calendar.entry.js +4 -4
  467. package/dist/esm/co-event-popover.entry.js +3 -3
  468. package/dist/esm/co-fab.entry.js +3 -3
  469. package/dist/esm/co-file-field.entry.js +95 -99
  470. package/dist/esm/co-file-type-tile.entry.js +3 -3
  471. package/dist/esm/co-helper-text.entry.js +3 -3
  472. package/dist/esm/co-icon-button.entry.js +6 -6
  473. package/dist/esm/co-icon.entry.js +3 -3
  474. package/dist/esm/co-input.entry.js +26 -4
  475. package/dist/esm/co-json-field.entry.js +5 -5
  476. package/dist/esm/co-lightbox.entry.js +204 -21
  477. package/dist/esm/co-list-footer.entry.js +2 -2
  478. package/dist/esm/co-list-item.entry.js +5 -5
  479. package/dist/esm/co-loader.entry.js +1 -1
  480. package/dist/esm/co-media-thumb.entry.js +3 -3
  481. package/dist/esm/co-menu-divider.entry.js +2 -2
  482. package/dist/esm/co-menu-item.entry.js +84 -3
  483. package/dist/esm/co-menu.entry.js +2 -2
  484. package/dist/esm/co-modal.entry.js +6 -4
  485. package/dist/esm/co-navbar.entry.js +4 -4
  486. package/dist/esm/co-number-field.entry.js +272 -9
  487. package/dist/esm/co-overlay.entry.js +6 -4
  488. package/dist/esm/co-page-header.entry.js +2 -2
  489. package/dist/esm/co-phone-field.entry.js +3 -3
  490. package/dist/esm/co-popover.entry.js +58 -21
  491. package/dist/esm/co-progress-bar.entry.js +3 -3
  492. package/dist/esm/co-progress-circle.entry.js +3 -3
  493. package/dist/esm/co-provider-logo_2.entry.js +47 -3
  494. package/dist/esm/co-radio-group.entry.js +1 -1
  495. package/dist/esm/co-radio.entry.js +4 -4
  496. package/dist/esm/co-rating.entry.js +4 -4
  497. package/dist/esm/co-ref-field.entry.js +4 -4
  498. package/dist/esm/co-rich-text-editor.entry.js +11 -8
  499. package/dist/esm/co-rich-text-toolbar.entry.js +7 -3
  500. package/dist/esm/co-rich-text-viewer.entry.js +4 -3
  501. package/dist/esm/co-row.entry.js +3 -3
  502. package/dist/esm/co-segmented-bar.entry.js +1 -1
  503. package/dist/esm/co-select.entry.js +2 -2
  504. package/dist/esm/co-separator.entry.js +2 -2
  505. package/dist/esm/co-sidebar-nav.entry.js +2 -2
  506. package/dist/esm/co-sidebar.entry.js +3 -3
  507. package/dist/esm/co-slider.entry.js +3 -3
  508. package/dist/esm/co-switch.entry.js +6 -6
  509. package/dist/esm/co-tab-group.entry.js +3 -3
  510. package/dist/esm/co-tab.entry.js +3 -3
  511. package/dist/esm/co-tags-field.entry.js +8 -8
  512. package/dist/esm/co-textarea.entry.js +6 -6
  513. package/dist/esm/co-time-field.entry.js +323 -0
  514. package/dist/esm/co-toast.entry.js +2 -2
  515. package/dist/esm/co-toggle-button-group.entry.js +4 -4
  516. package/dist/esm/co-toggle-button.entry.js +4 -4
  517. package/dist/esm/co-transfer-list.entry.js +1 -1
  518. package/dist/esm/co-video.entry.js +32 -7
  519. package/dist/esm/cobalt.js +3 -3
  520. package/dist/esm/color-BRbgGqLw.js +136 -0
  521. package/dist/esm/{dateI18n-CnNpoKwg.js → dateI18n-jYd9gu_c.js} +36 -0
  522. package/dist/esm/{fieldChip-DsAfq1e0.js → fieldChip-uyggU8VV.js} +1 -1
  523. package/dist/esm/fileI18n-gKnOhsd2.js +84 -0
  524. package/dist/esm/{index-RuXxdKzC.js → index-68iUQp5j.js} +28 -10
  525. package/dist/esm/{index-CrtiywTB.js → index-DH5lfRNj.js} +25 -21
  526. package/dist/esm/loader.js +3 -3
  527. package/dist/esm/{positioning-BMdapAL8.js → positioning-DFHRS9cJ.js} +32 -13
  528. package/dist/esm/{requiredMark-DCD-ZA51.js → requiredMark-BCJUuZvC.js} +1 -1
  529. package/dist/esm/{toolbar-config-WeuPA9Rw.js → toolbar-config-DOL2zACE.js} +10 -0
  530. package/dist/types/components/co-badge/co-badge.d.ts +7 -0
  531. package/dist/types/components/co-checkbox/co-checkbox.d.ts +1 -1
  532. package/dist/types/components/co-color-picker/co-color-picker.d.ts +358 -4
  533. package/dist/types/components/co-color-picker/presets.d.ts +107 -4
  534. package/dist/types/components/co-date-time-picker/co-date-time-picker.d.ts +43 -21
  535. package/dist/types/components/co-drawer/co-drawer.d.ts +4 -3
  536. package/dist/types/components/co-file-field/co-file-field.d.ts +14 -0
  537. package/dist/types/components/co-file-field/co-file-field.utils.d.ts +18 -1
  538. package/dist/types/components/co-icon-button/co-icon-button.d.ts +9 -0
  539. package/dist/types/components/co-input/co-input.d.ts +4 -0
  540. package/dist/types/components/co-lightbox/co-lightbox.d.ts +60 -4
  541. package/dist/types/components/co-menu-item/co-menu-item.d.ts +16 -0
  542. package/dist/types/components/co-number-field/co-number-field.d.ts +42 -1
  543. package/dist/types/components/co-option-list/co-option-list.d.ts +3 -0
  544. package/dist/types/components/co-overlay/co-overlay.d.ts +4 -2
  545. package/dist/types/components/co-popover/co-popover.d.ts +16 -0
  546. package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +1 -1
  547. package/dist/types/components/co-skeleton/co-skeleton.d.ts +13 -0
  548. package/dist/types/components/co-time-field/co-time-field.d.ts +60 -0
  549. package/dist/types/components/co-tooltip/co-tooltip.d.ts +5 -0
  550. package/dist/types/components/co-video/co-video.d.ts +4 -0
  551. package/dist/types/components.d.ts +451 -87
  552. package/dist/types/utils/amountText.d.ts +34 -0
  553. package/dist/types/utils/color.d.ts +44 -1
  554. package/dist/types/utils/colorPickerI18n.d.ts +26 -0
  555. package/dist/types/utils/dateI18n.d.ts +12 -0
  556. package/dist/types/utils/fileI18n.d.ts +1 -0
  557. package/dist/types/utils/positioning.d.ts +10 -0
  558. package/dist/types/utils/submenu.d.ts +44 -0
  559. package/package.json +3 -3
  560. package/dist/cjs/color-YhUkm10t.js +0 -32
  561. package/dist/cjs/time-LBHtzLHe.js +0 -42
  562. package/dist/cobalt/p-07904986.entry.js +0 -1
  563. package/dist/cobalt/p-09799193.entry.js +0 -1
  564. package/dist/cobalt/p-17ae943c.entry.js +0 -1
  565. package/dist/cobalt/p-23a103a0.entry.js +0 -1
  566. package/dist/cobalt/p-2f88d151.entry.js +0 -1
  567. package/dist/cobalt/p-3495fda1.entry.js +0 -1
  568. package/dist/cobalt/p-409f28bb.entry.js +0 -1
  569. package/dist/cobalt/p-682b3313.entry.js +0 -1
  570. package/dist/cobalt/p-6bf814f9.entry.js +0 -1
  571. package/dist/cobalt/p-7532c739.entry.js +0 -1
  572. package/dist/cobalt/p-7c88163e.entry.js +0 -1
  573. package/dist/cobalt/p-7cf4b4ae.entry.js +0 -1
  574. package/dist/cobalt/p-7ea87b75.entry.js +0 -1
  575. package/dist/cobalt/p-8183f56f.entry.js +0 -1
  576. package/dist/cobalt/p-8345b25f.entry.js +0 -1
  577. package/dist/cobalt/p-983af614.entry.js +0 -1
  578. package/dist/cobalt/p-BG4WRR22.js +0 -1
  579. package/dist/cobalt/p-BMdapAL8.js +0 -1
  580. package/dist/cobalt/p-CF8OB_TM.js +0 -1
  581. package/dist/cobalt/p-CnNpoKwg.js +0 -1
  582. package/dist/cobalt/p-T4la7ly_.js +0 -1
  583. package/dist/cobalt/p-a2d31248.entry.js +0 -1
  584. package/dist/cobalt/p-a6b5cadd.entry.js +0 -1
  585. package/dist/cobalt/p-b8581787.entry.js +0 -1
  586. package/dist/cobalt/p-bcedbd73.entry.js +0 -1
  587. package/dist/cobalt/p-d40a465f.entry.js +0 -1
  588. package/dist/cobalt/p-dea43204.entry.js +0 -1
  589. package/dist/cobalt/p-dfcf667d.entry.js +0 -1
  590. package/dist/cobalt/p-e6882ddd.entry.js +0 -1
  591. package/dist/cobalt/p-e84eda2e.entry.js +0 -1
  592. package/dist/cobalt/p-f25967fb.entry.js +0 -1
  593. package/dist/cobalt/p-f5f1b463.entry.js +0 -1
  594. package/dist/cobalt/p-fd39f410.entry.js +0 -1
  595. package/dist/cobalt/p-mAGnZXRn.js +0 -1
  596. package/dist/components/p-BMdapAL8.js +0 -1
  597. package/dist/components/p-BTQEg3UO.js +0 -1
  598. package/dist/components/p-Bbny3WUc.js +0 -1
  599. package/dist/components/p-Bz0QZqnB.js +0 -1
  600. package/dist/components/p-CF8OB_TM.js +0 -1
  601. package/dist/components/p-CR0izsJC.js +0 -1
  602. package/dist/components/p-CnNpoKwg.js +0 -1
  603. package/dist/components/p-DI1ek0EB.js +0 -1
  604. package/dist/components/p-DP0bbhfN.js +0 -1
  605. package/dist/components/p-D_9BRkj6.js +0 -1
  606. package/dist/components/p-DbipMAyT.js +0 -1
  607. package/dist/components/p-DgUBcJIS.js +0 -1
  608. package/dist/components/p-DolCkNsL.js +0 -1
  609. package/dist/components/p-hfGFsvaD.js +0 -1
  610. package/dist/esm/color-BG4WRR22.js +0 -30
  611. package/dist/esm/time-CF8OB_TM.js +0 -37
@@ -2,13 +2,15 @@ import { h } from "@stencil/core";
2
2
  import { RequiredMark } from "../../utils/requiredMark";
3
3
  import { getDateStrings } from "../../utils/dateI18n";
4
4
  import { formatDisplay } from "@prolibu-suite/cobalt-date-utils";
5
- import { MINUTES_PER_DAY, getLocalTimeZone, toUtcISO, wallClockToEpoch, zonedDateKey, zonedMinutesOfDay, } from "@prolibu-suite/cobalt-calendar-utils";
5
+ import { getLocalTimeZone, toUtcISO, wallClockToEpoch, zonedDateKey, zonedMinutesOfDay, } from "@prolibu-suite/cobalt-calendar-utils";
6
6
  /** Wall-clock minute assumed when the incoming value carries no time of day. */
7
7
  const DEFAULT_MINUTES = 9 * 60;
8
8
  /**
9
9
  * Date + TIME picker: one field, one popover. Composes `co-popover` (floating
10
- * panel, outside-click) + `co-calendar` (day grid) + a scrollable list of times
11
- * beside it — the Google Calendar layout.
10
+ * panel, outside-click) + `co-calendar` (day grid) + a side panel with
11
+ * shortcuts (`presetIds`: morning/noon/afternoon/endOfDay/now) and a segmented
12
+ * `co-time-field` (hh:mm, PageUp/PageDown stepping by `stepMinutes`) for the
13
+ * exact hour, plus a "Listo" button.
12
14
  *
13
15
  * VALUE CONTRACT — the committed `value` is a UTC ISO instant
14
16
  * ("2026-07-25T21:30:00.000Z"), never a wall-clock string. The wall clock the
@@ -21,16 +23,26 @@ const DEFAULT_MINUTES = 9 * 60;
21
23
  * would shift the day west of UTC).
22
24
  *
23
25
  * INTERACTION (Google):
24
- * - Click the field → opens. Picking a DAY commits and keeps the panel open
25
- * (you almost always want to set the hour next); picking a TIME commits and
26
- * closes. So there is no draft/apply step and no confirm button.
26
+ * - Click the field → opens. Picking a DAY commits (with the current DRAFT
27
+ * hour, not the previously committed one) and keeps the panel open — you
28
+ * almost always want to set the hour next.
29
+ * - The exact time is a DRAFT (`draftMinutes`) while `co-time-field` is
30
+ * edited (`coInput`) — editing alone never commits. It only commits (and
31
+ * closes) on: clicking a shortcut, Enter/`coCommit` from the time field,
32
+ * or the "Listo" button.
33
+ * - Outside click — and, on mobile, swiping the bottom sheet down — commits
34
+ * the draft if it changed, then closes: the same "apply on blur" model a
35
+ * text field uses.
36
+ * - Escape is the opposite: an explicit DISCARD. It closes WITHOUT applying
37
+ * the draft and returns focus to the trigger field.
27
38
  * - ArrowDown on the field → moves focus into the calendar grid.
28
- * - The time list is a listbox: Arrow/Home/End/PageUp/PageDown move the active
29
- * option, Enter/Space selects it.
30
- * - Escape → closes and returns focus to the field. Outside click → closes.
39
+ * - Mobile (viewport ≤ `mobileBreakpoint`) renders the same panel as a
40
+ * bottom sheet (`co-drawer position="bottom"`) instead of the desktop
41
+ * popover; the draft/commit/discard model is identical.
31
42
  *
32
- * Escape is owned here (co-popover `closeOnEscape=false`) so focus can return to
33
- * the field; outside-click stays with co-popover.
43
+ * Escape is owned here (co-popover `closeOnEscape=false`) so focus can return
44
+ * to the field; outside-click/sheet-dismiss stay with co-popover/co-drawer and
45
+ * are handled by `closeApplyingDraft` (see its doc for the Escape asymmetry).
34
46
  *
35
47
  * @part field - The bordered trigger row
36
48
  * @part label - The field label
@@ -42,8 +54,10 @@ export class CoDateTimePicker {
42
54
  constructor() {
43
55
  /** Committed value: UTC ISO instant ("2026-07-25T21:30:00.000Z") or null. */
44
56
  this.value = null;
45
- /** Minutes between consecutive options in the time list. */
57
+ /** Paso de PageUp/PageDown del campo de hora (antes: paso de la lista). */
46
58
  this.stepMinutes = 15;
59
+ /** Atajos del panel, en orden. Ids del catálogo: morning|noon|afternoon|endOfDay|now. */
60
+ this.presetIds = ['morning', 'noon', 'afternoon', 'endOfDay', 'now'];
47
61
  /** 12-hour clock (Google style). `false` renders a 24h clock. */
48
62
  this.hour12 = true;
49
63
  this.locale = 'es-CO';
@@ -69,12 +83,10 @@ export class CoDateTimePicker {
69
83
  this.mobileBreakpoint = 600;
70
84
  /** True when the viewport is at/under `mobileBreakpoint`. */
71
85
  this.isMobile = false;
72
- /** Minutes-of-day highlighted by the keyboard in the time list. */
73
- this.activeMinutes = DEFAULT_MINUTES;
86
+ /** Minutes-of-day drafted in the exact-time field (co-time-field), not yet committed. */
87
+ this.draftMinutes = DEFAULT_MINUTES;
74
88
  this.pendingFocusGrid = false;
75
89
  this.pendingFocusTrigger = false;
76
- /** 'center' when the list is (re)opened, 'nearest' while arrowing through it. */
77
- this.pendingScroll = null;
78
90
  this.mqlHandler = (e) => {
79
91
  this.isMobile = e.matches;
80
92
  };
@@ -101,65 +113,44 @@ export class CoDateTimePicker {
101
113
  this.coClear.emit();
102
114
  this.coChange.emit(null);
103
115
  };
104
- // ── Calendar / time list ───────────────────────────────────
116
+ // ── Calendar / exact time ──────────────────────────────────
105
117
  this.onCalendarSelect = (e) => {
106
- var _a, _b;
107
118
  const dayKey = e.detail;
108
119
  if (!dayKey)
109
120
  return;
110
- // Google behaviour: the day commits but the panel STAYS open so the hour can
111
- // be picked next. The previously chosen hour is preserved (09:00 if none).
112
- const minutes = (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.minutes) !== null && _b !== void 0 ? _b : DEFAULT_MINUTES;
113
- this.commit(dayKey, minutes);
114
- this.activeMinutes = minutes;
115
- this.pendingScroll = 'center';
121
+ // Google: el día committea sin cerrar. La hora que acompaña es el DRAFT
122
+ // (lo último editado en el campo), no la committeada — así "cambio la hora
123
+ // y después el día" no pisa la edición.
124
+ this.commit(dayKey, this.draftMinutes);
116
125
  };
117
126
  this.pickTime = (minutes) => {
118
127
  var _a, _b;
119
128
  const dayKey = (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.dayKey) !== null && _b !== void 0 ? _b : zonedDateKey(Date.now(), this.zone);
120
129
  this.commit(dayKey, minutes);
121
- this.activeMinutes = minutes;
130
+ this.draftMinutes = minutes;
122
131
  // Picking the hour is the terminal step → apply and close.
123
132
  this.setOpen(false);
124
133
  this.pendingFocusTrigger = true;
125
134
  };
126
- this.onListKeyDown = (e) => {
127
- const opts = this.options;
128
- const hourStep = Math.max(1, Math.round(60 / this.step));
129
- let i = opts.indexOf(this.activeMinutes);
130
- if (i < 0)
131
- i = 0;
132
- switch (e.key) {
133
- case 'ArrowDown':
134
- i += 1;
135
- break;
136
- case 'ArrowUp':
137
- i -= 1;
138
- break;
139
- case 'PageDown':
140
- i += hourStep;
141
- break;
142
- case 'PageUp':
143
- i -= hourStep;
144
- break;
145
- case 'Home':
146
- i = 0;
147
- break;
148
- case 'End':
149
- i = opts.length - 1;
150
- break;
151
- case 'Enter':
152
- case ' ':
153
- e.preventDefault();
154
- this.pickTime(this.activeMinutes);
155
- return;
156
- default:
157
- return;
158
- }
159
- e.preventDefault();
160
- this.activeMinutes = opts[Math.min(opts.length - 1, Math.max(0, i))];
161
- this.pendingScroll = 'nearest';
135
+ this.onTimeFieldInput = (e) => {
136
+ // null = draft incompleto (segmento vaciado): se conserva el último draft
137
+ // válido, así Listo/Enter nunca committean basura ni quedan bloqueados.
138
+ if (e.detail != null)
139
+ this.draftMinutes = e.detail;
140
+ };
141
+ this.onTimeFieldCommit = (e) => {
142
+ this.pickTime(e.detail);
162
143
  };
144
+ // co-time-field emits `coEscape` on Escape but the host does NOT wire it: its
145
+ // own onSegKeyDown does NOT stopPropagation on the native keydown on purpose
146
+ // ("el host también escucha Escape en su root; acá solo se anuncia la
147
+ // intención"), so the ONLY owner of Escape is `onRootKeyDown` below — it must
148
+ // still see `this.open === true` when the (still-bubbling) native keydown
149
+ // reaches it. Wiring a synchronous host handler to `coEscape` would flip
150
+ // `open` to false BEFORE the native keydown finishes bubbling, so the root's
151
+ // `this.open` guard would already be false, skip `stopPropagation()`, and
152
+ // let Escape reach `document` — closing a host co-drawer wrapped around this
153
+ // picker (co-drawer's default `closeOnEscape=true`).
163
154
  // ── Popover lifecycle ──────────────────────────────────────
164
155
  this.onPopoverOpen = () => {
165
156
  var _a, _b;
@@ -170,15 +161,30 @@ export class CoDateTimePicker {
170
161
  return;
171
162
  }
172
163
  if (!this.open) {
173
- this.open = true; // triggers @Watch('open') → active hour + scroll
164
+ this.open = true; // triggers @Watch('open') → seeds the draft hour
174
165
  this.coOpen.emit();
175
166
  }
176
167
  };
177
- this.onPopoverClose = () => {
178
- if (this.open) {
179
- this.open = false;
180
- this.coClose.emit();
168
+ /**
169
+ * Closes applying whatever is drafted (R7) — outside click / drawer
170
+ * swipe-down behave like a field's blur: what you typed sticks. This is
171
+ * the ONLY path that commits the draft on close; Escape is the opposite —
172
+ * an explicit discard — and it does NOT go through here: `onRootKeyDown`
173
+ * flips `this.open` to `false` via `setOpen()` FIRST, so by the time the
174
+ * real co-popover/co-drawer finish closing and bubble their own `coClose`
175
+ * back to `onPopoverClose`/this drawer's `onCoClose`, the guard below
176
+ * already reads `false` and no-ops — the draft is discarded, not applied.
177
+ */
178
+ this.closeApplyingDraft = () => {
179
+ if (!this.open)
180
+ return;
181
+ if (this.parts && this.draftMinutes !== this.parts.minutes) {
182
+ this.commit(this.parts.dayKey, this.draftMinutes);
181
183
  }
184
+ this.setOpen(false);
185
+ };
186
+ this.onPopoverClose = () => {
187
+ this.closeApplyingDraft();
182
188
  };
183
189
  this.onRootKeyDown = (e) => {
184
190
  if (e.key === 'Escape' && this.open) {
@@ -201,13 +207,20 @@ export class CoDateTimePicker {
201
207
  var _a;
202
208
  (_a = this.mql) === null || _a === void 0 ? void 0 : _a.removeEventListener('change', this.mqlHandler);
203
209
  }
210
+ componentWillLoad() {
211
+ var _a, _b;
212
+ // Seeds the draft once at load: @Watch('open') below only fires on a
213
+ // LATER open transition, not for a host mounted with open=true from the
214
+ // start (a bound `open` prop that's already true at construction) — that
215
+ // mount path would otherwise leave `draftMinutes` unset.
216
+ this.draftMinutes = (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.minutes) !== null && _b !== void 0 ? _b : DEFAULT_MINUTES;
217
+ }
204
218
  onOpenChange(next) {
205
219
  var _a, _b;
206
220
  if (!next)
207
221
  return;
208
- // Opening: highlight (and scroll to) the committed hour, 09:00 when empty.
209
- this.activeMinutes = (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.minutes) !== null && _b !== void 0 ? _b : DEFAULT_MINUTES;
210
- this.pendingScroll = 'center';
222
+ // Opening: seed the draft with the committed hour, 09:00 when empty.
223
+ this.draftMinutes = (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.minutes) !== null && _b !== void 0 ? _b : DEFAULT_MINUTES;
211
224
  }
212
225
  // ── Derived value ──────────────────────────────────────────
213
226
  get zone() {
@@ -263,6 +276,21 @@ export class CoDateTimePicker {
263
276
  this.value = iso;
264
277
  this.coChange.emit(iso);
265
278
  }
279
+ get presets() {
280
+ const raw = typeof this.presetIds === 'string'
281
+ ? this.presetIds.split(',').map((s) => s.trim()).filter(Boolean)
282
+ : this.presetIds;
283
+ // Dedupe: a repeated id in presetIds would otherwise render duplicate
284
+ // buttons with the SAME `key`, which Stencil's vdom can't reconcile.
285
+ const ids = Array.from(new Set(raw !== null && raw !== void 0 ? raw : []));
286
+ return ids
287
+ .filter((id) => id in CoDateTimePicker.PRESET_CATALOG)
288
+ .map((id) => {
289
+ const def = CoDateTimePicker.PRESET_CATALOG[id];
290
+ const minutes = def.minutes === 'now' ? zonedMinutesOfDay(Date.now(), this.zone) : def.minutes;
291
+ return { id, icon: def.icon, minutes };
292
+ });
293
+ }
266
294
  // ── Focus / scroll bookkeeping ─────────────────────────────
267
295
  focusGridSoon() {
268
296
  requestAnimationFrame(() => {
@@ -270,56 +298,22 @@ export class CoDateTimePicker {
270
298
  (_b = (_a = this.calendarEl) === null || _a === void 0 ? void 0 : _a.focusGrid) === null || _b === void 0 ? void 0 : _b.call(_a);
271
299
  });
272
300
  }
273
- scrollActiveIntoView(mode) {
274
- const list = this.listEl;
275
- if (!list)
276
- return;
277
- const el = list.querySelector('[data-active="true"]');
278
- if (!el)
279
- return;
280
- // Manual scrollTop (not scrollIntoView): the panel lives in the top layer and
281
- // scrollIntoView would also scroll the page behind it.
282
- if (mode === 'center') {
283
- list.scrollTop = Math.max(0, el.offsetTop - list.clientHeight / 2 + el.offsetHeight / 2);
284
- return;
285
- }
286
- // Arrowing: only reveal when the option fell out of view, so the list does
287
- // not jump under the cursor on every keystroke.
288
- const top = el.offsetTop;
289
- const bottom = top + el.offsetHeight;
290
- if (top < list.scrollTop)
291
- list.scrollTop = top;
292
- else if (bottom > list.scrollTop + list.clientHeight) {
293
- list.scrollTop = bottom - list.clientHeight;
294
- }
295
- }
296
301
  componentDidRender() {
297
302
  var _a;
298
303
  if (this.pendingFocusGrid && this.open && this.calendarEl) {
299
304
  this.pendingFocusGrid = false;
300
305
  this.focusGridSoon();
301
306
  }
302
- if (this.pendingScroll && this.open && this.listEl) {
303
- const mode = this.pendingScroll;
304
- this.pendingScroll = null;
305
- this.scrollActiveIntoView(mode);
306
- }
307
307
  if (this.pendingFocusTrigger) {
308
308
  this.pendingFocusTrigger = false;
309
309
  (_a = this.triggerBtn) === null || _a === void 0 ? void 0 : _a.focus();
310
310
  }
311
311
  }
312
- // ── Options ────────────────────────────────────────────────
312
+ // ── Time field paging ─────────────────────────────────────
313
313
  get step() {
314
314
  const s = Math.round(Number(this.stepMinutes));
315
315
  return Number.isFinite(s) && s > 0 ? Math.min(720, s) : 15;
316
316
  }
317
- /** Grid of minutes-of-day, plus the committed hour when it falls off-grid
318
- * (an imported 16:37 meeting must stay visible and selectable). */
319
- get options() {
320
- var _a, _b;
321
- return timeOptions(this.step, (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.minutes) !== null && _b !== void 0 ? _b : null);
322
- }
323
317
  // ── Render ─────────────────────────────────────────────────
324
318
  renderTrigger(t) {
325
319
  const p = this.parts;
@@ -339,16 +333,17 @@ export class CoDateTimePicker {
339
333
  }, type: "button", tabIndex: -1, onMouseDown: (e) => e.preventDefault(), onClick: this.onClearClick, "aria-label": t.clearDateTime, part: "clear" }, h("co-icon", { name: "x-circle", size: 16, weight: "fill" })))));
340
334
  }
341
335
  renderPanel(t, touch) {
342
- var _a, _b, _c, _d;
343
- const selected = (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.minutes) !== null && _b !== void 0 ? _b : null;
336
+ var _a, _b;
344
337
  return (h("div", { class: {
345
338
  'co-date-time-picker__panel': true,
346
339
  'co-date-time-picker__panel--touch': touch,
347
- } }, h("co-calendar", { ref: (el) => (this.calendarEl = el), class: "co-date-time-picker__calendar", "data-touch": touch ? '' : undefined, value: (_d = (_c = this.parts) === null || _c === void 0 ? void 0 : _c.dayKey) !== null && _d !== void 0 ? _d : null, min: this.dayBound(this.min), max: this.dayBound(this.max), disabledDates: this.disabledDates, disabledDaysOfWeek: this.disabledDaysOfWeek, locale: this.locale, firstDayOfWeek: this.firstDayOfWeek, onCoSelect: this.onCalendarSelect }), h("div", { ref: (el) => (this.listEl = el), class: "co-date-time-picker__times", role: "listbox", tabIndex: 0, "aria-label": t.timeLabel, "aria-activedescendant": `co-dtp-time-${this.activeMinutes}`, onKeyDown: this.onListKeyDown }, this.options.map((m) => (h("div", { key: m, id: `co-dtp-time-${m}`, role: "option", "aria-selected": m === selected ? 'true' : 'false', "data-active": m === this.activeMinutes ? 'true' : undefined, class: {
348
- 'co-date-time-picker__time': true,
349
- 'co-date-time-picker__time--selected': m === selected,
350
- 'co-date-time-picker__time--active': m === this.activeMinutes,
351
- }, onClick: () => this.pickTime(m) }, clockLabel(m, this.locale, this.hour12)))))));
340
+ } }, h("co-calendar", { ref: (el) => (this.calendarEl = el), class: "co-date-time-picker__calendar", "data-touch": touch ? '' : undefined, value: (_b = (_a = this.parts) === null || _a === void 0 ? void 0 : _a.dayKey) !== null && _b !== void 0 ? _b : null, min: this.dayBound(this.min), max: this.dayBound(this.max), disabledDates: this.disabledDates, disabledDaysOfWeek: this.disabledDaysOfWeek, locale: this.locale, firstDayOfWeek: this.firstDayOfWeek, onCoSelect: this.onCalendarSelect }), h("div", { class: "co-date-time-picker__side" }, h("div", { class: "co-date-time-picker__sect" }, t.shortcuts), h("div", { class: "co-date-time-picker__presets" }, this.presets.map((p) => (h("button", { key: p.id, type: "button", class: "co-date-time-picker__preset", disabled: this.disabled || this.readonly, onClick: () => {
341
+ // 'now' is resolved fresh AT CLICK, not frozen at the render
342
+ // that computed `p.minutes` for the hint — a panel left open
343
+ // past the minute must still commit the current time.
344
+ const m = p.id === 'now' ? zonedMinutesOfDay(Date.now(), this.zone) : p.minutes;
345
+ this.pickTime(m);
346
+ } }, h("co-icon", { name: p.icon, size: 16, class: "co-date-time-picker__preset-icon" }), h("span", { class: "co-date-time-picker__preset-label" }, t[p.id]), h("span", { class: "co-date-time-picker__preset-hint" }, clockLabel(p.minutes, this.locale, this.hour12)))))), h("div", { class: "co-date-time-picker__sect co-date-time-picker__sect--time" }, t.timeExact), h("co-time-field", { "data-touch": touch ? '' : undefined, value: this.draftMinutes, hour12: this.hour12, locale: this.locale, pageStep: this.step, disabled: this.disabled || this.readonly, onCoInput: this.onTimeFieldInput, onCoCommit: this.onTimeFieldCommit }), h("div", { class: "co-date-time-picker__footer" }, h("button", { type: "button", class: "co-date-time-picker__btn co-date-time-picker__btn--primary", disabled: this.disabled || this.readonly, onClick: () => this.pickTime(this.draftMinutes) }, t.done)))));
352
347
  }
353
348
  renderHelper() {
354
349
  const helper = this.isInvalid ? this.errorMessage : this.helperText;
@@ -367,10 +362,10 @@ export class CoDateTimePicker {
367
362
  render() {
368
363
  var _a;
369
364
  const t = getDateStrings(this.locale);
370
- return (h("div", { key: '8ccc0e31d77dfce13ab5fdd27294d6a93944f5ae', class: "co-date-time-picker", onKeyDown: this.onRootKeyDown }, this.renderLabel(), this.isMobile ? ([
365
+ return (h("div", { key: 'a128077a99e226422be0ce805cfa16db44212cd1', class: "co-date-time-picker", onKeyDown: this.onRootKeyDown }, this.renderLabel(), this.isMobile ? ([
371
366
  h("div", { class: "co-date-time-picker__trigger", onClick: () => !this.disabled && !this.readonly && this.setOpen(true) }, this.renderTrigger(t)),
372
- h("co-drawer", { position: "bottom", open: this.open, heading: t.selectDateTime, onCoClose: () => this.setOpen(false) }, h("div", { class: "co-date-time-picker__sheet" }, this.renderPanel(t, true))),
373
- ]) : (h("co-popover", { ref: (el) => (this.popoverEl = el), open: this.open, placement: this.placement, offset: 4, closeOnEscape: false, onCoOpen: this.onPopoverOpen, onCoClose: this.onPopoverClose }, h("div", { slot: "trigger", class: "co-date-time-picker__trigger" }, this.renderTrigger(t)), this.open && this.renderPanel(t, false))), this.name && h("input", { key: 'c54ad2d2ebeccc0f6f4c836d25b5de0bee6376fc', type: "hidden", name: this.name, value: (_a = this.value) !== null && _a !== void 0 ? _a : '' }), this.renderHelper()));
367
+ h("co-drawer", { position: "bottom", open: this.open, heading: t.selectDateTime, onCoClose: this.closeApplyingDraft }, h("div", { class: "co-date-time-picker__sheet" }, this.renderPanel(t, true))),
368
+ ]) : (h("co-popover", { ref: (el) => (this.popoverEl = el), open: this.open, placement: this.placement, offset: 4, closeOnEscape: false, onCoOpen: this.onPopoverOpen, onCoClose: this.onPopoverClose }, h("div", { slot: "trigger", class: "co-date-time-picker__trigger" }, this.renderTrigger(t)), this.open && this.renderPanel(t, false))), this.name && h("input", { key: '18d0a3100dcb58c86fd7081b654fdf7d8d7e5e19', type: "hidden", name: this.name, value: (_a = this.value) !== null && _a !== void 0 ? _a : '' }), this.renderHelper()));
374
369
  }
375
370
  static get is() { return "co-date-time-picker"; }
376
371
  static get encapsulation() { return "shadow"; }
@@ -437,7 +432,7 @@ export class CoDateTimePicker {
437
432
  "optional": false,
438
433
  "docs": {
439
434
  "tags": [],
440
- "text": "Minutes between consecutive options in the time list."
435
+ "text": "Paso de PageUp/PageDown del campo de hora (antes: paso de la lista)."
441
436
  },
442
437
  "getter": false,
443
438
  "setter": false,
@@ -445,6 +440,26 @@ export class CoDateTimePicker {
445
440
  "attribute": "step-minutes",
446
441
  "defaultValue": "15"
447
442
  },
443
+ "presetIds": {
444
+ "type": "string",
445
+ "mutable": false,
446
+ "complexType": {
447
+ "original": "string[] | string",
448
+ "resolved": "string | string[]",
449
+ "references": {}
450
+ },
451
+ "required": false,
452
+ "optional": false,
453
+ "docs": {
454
+ "tags": [],
455
+ "text": "Atajos del panel, en orden. Ids del cat\u00E1logo: morning|noon|afternoon|endOfDay|now."
456
+ },
457
+ "getter": false,
458
+ "setter": false,
459
+ "reflect": false,
460
+ "attribute": "preset-ids",
461
+ "defaultValue": "['morning', 'noon', 'afternoon', 'endOfDay', 'now']"
462
+ },
448
463
  "hour12": {
449
464
  "type": "boolean",
450
465
  "mutable": false,
@@ -928,7 +943,7 @@ export class CoDateTimePicker {
928
943
  static get states() {
929
944
  return {
930
945
  "isMobile": {},
931
- "activeMinutes": {}
946
+ "draftMinutes": {}
932
947
  };
933
948
  }
934
949
  static get events() {
@@ -1032,14 +1047,21 @@ export class CoDateTimePicker {
1032
1047
  }];
1033
1048
  }
1034
1049
  }
1050
+ CoDateTimePicker.PRESET_CATALOG = {
1051
+ morning: { icon: 'sun-horizon', minutes: 9 * 60 },
1052
+ noon: { icon: 'sun', minutes: 12 * 60 },
1053
+ afternoon: { icon: 'coffee', minutes: 15 * 60 },
1054
+ endOfDay: { icon: 'moon', minutes: 18 * 60 },
1055
+ now: { icon: 'clock', minutes: 'now' },
1056
+ };
1035
1057
  // ── Module-level caches ──────────────────────────────────────
1036
1058
  // Intl.DateTimeFormat is expensive to construct and these labels are recomputed
1037
- // on every render over a BOUNDED domain (≤96 minutes-of-day × 1-2 locales): the
1038
- // RESULT is cached (and the formatter, for the miss). Hygiene clear at 2000
1039
- // entries — unreachable in normal use, it only guards pathological iteration.
1059
+ // on every render over a BOUNDED domain (the trigger's 1 value + up to 5
1060
+ // presets, ≤6 minutes-of-day × 1-2 locales): the RESULT is cached (and the
1061
+ // formatter, for the miss). Hygiene clear at 2000 entries — unreachable in
1062
+ // normal use, it only guards pathological iteration.
1040
1063
  const LABEL_CACHE = new Map();
1041
1064
  const LABEL_FMT_CACHE = new Map();
1042
- const OPTIONS_CACHE = new Map();
1043
1065
  /** Minutes-of-day → localized clock label ("4:30 p. m." / "16:30"). */
1044
1066
  function clockLabel(minutes, locale, hour12) {
1045
1067
  const key = `${locale}|${hour12 ? 12 : 24}|${minutes}`;
@@ -1059,21 +1081,3 @@ function clockLabel(minutes, locale, hour12) {
1059
1081
  LABEL_CACHE.set(key, out);
1060
1082
  return out;
1061
1083
  }
1062
- /** Minutes-of-day grid at `step`, plus `extra` when it falls off-grid. */
1063
- function timeOptions(step, extra) {
1064
- const key = `${step}|${extra !== null && extra !== void 0 ? extra : ''}`;
1065
- const hit = OPTIONS_CACHE.get(key);
1066
- if (hit)
1067
- return hit;
1068
- const out = [];
1069
- for (let m = 0; m < MINUTES_PER_DAY; m += step)
1070
- out.push(m);
1071
- if (extra != null && extra >= 0 && extra < MINUTES_PER_DAY && !out.includes(extra)) {
1072
- out.push(extra);
1073
- out.sort((a, b) => a - b);
1074
- }
1075
- if (OPTIONS_CACHE.size > 200)
1076
- OPTIONS_CACHE.clear();
1077
- OPTIONS_CACHE.set(key, out);
1078
- return out;
1079
- }
@@ -1,3 +1,88 @@
1
+ /* squircle-surface.css — receta ÚNICA de superficie squircle (co-app-shell,
2
+ co-drawer, co-modal). Se @import-a desde el CSS del componente como PRIMER
3
+ statement (Stencil inlinea @import relativos; precedente co-select.css:3) y
4
+ el tsx agrega las clases. Spec: prolibu-front-v2/docs/superpowers/specs/
5
+ 2026-09-02-suite-v2-intel-perf-remediation-design.md §7 (E1, E5).
6
+
7
+ Variables que declara CADA consumidor sobre el elemento (o un ancestro):
8
+ --co-sq-r radio de esquina
9
+ --co-sq-shadow box-shadow (rama Chromium ≥139, sigue el corner-shape)
10
+ --co-sq-drop-shadow filter drop-shadow (fallback Safari/Firefox)
11
+ Conversión entre ambas: drop-shadow(x y σ) ≡ box-shadow x y 2σ.
12
+
13
+ Clases:
14
+ .co-sq-elevation sombra que sigue la silueta squircle
15
+ .co-sq-clip recorte superelíptico SIN máscara
16
+ .co-sq-elevation-fallback SIEMPRE en un ancestro del .co-sq-clip: en el
17
+ fallback la sombra es un `filter`, y `filter` se
18
+ aplica antes que `mask` en el mismo elemento →
19
+ la máscara la recortaría.
20
+
21
+ Reglas: (1) el componente NO redeclara border-radius / overflow / filter /
22
+ mask / box-shadow en esos elementos (una redeclaración posterior le gana al
23
+ partial por cascada; guard squircle-surface-guard.test.ts); (2)
24
+ .co-sq-elevation y .co-sq-clip pueden ir en el MISMO elemento (co-modal) o
25
+ en padre/hijo (shell, drawer); (3) `contain: layout` NO va acá: lo declara
26
+ cada componente donde E2/E20 lo piden.
27
+
28
+ Las 4 rutas SVG son una superelipse de exponente 4 = `corner-shape: squircle`
29
+ (superellipse(2)): misma silueta, error máx 1e-4 — a 14 px de radio la
30
+ diferencia con un círculo es ≤1.87 px en la punta. Sin `+2px` anti-costura en
31
+ la rama Chromium: sin máscara no hay costura posible (historia del hack: nota
32
+ de memoria cobalt-squircle-mask-seam). */
33
+
34
+ .co-sq-elevation {
35
+ border-radius: var(--co-sq-r);
36
+ corner-shape: squircle;
37
+ box-shadow: var(--co-sq-shadow);
38
+ }
39
+
40
+ .co-sq-clip {
41
+ overflow: hidden;
42
+ border-radius: var(--co-sq-r);
43
+ corner-shape: squircle;
44
+ }
45
+
46
+ /* F2 (E1): Safari/Firefox = píxel-idéntico a la receta anterior (filter
47
+ drop-shadow en el ancestro + máscara de 6 capas en el clip). */
48
+ @supports not (corner-shape: squircle) {
49
+ .co-sq-elevation {
50
+ box-shadow: none;
51
+ }
52
+
53
+ .co-sq-elevation-fallback {
54
+ filter: var(--co-sq-drop-shadow);
55
+ }
56
+
57
+ /* Declarado DESPUÉS de .co-sq-elevation a propósito: cuando ambas clases van
58
+ en el mismo elemento (co-modal) gana el radius 0 y la máscara define la
59
+ forma. 4 esquinas + cruz de 2 barras (H full-width, V full-height); las
60
+ barras van `calc(... + 2px)` para solapar cada esquina ~1px y evitar la
61
+ costura sub-píxel que flickeaba con el zoom. */
62
+ .co-sq-clip {
63
+ border-radius: 0;
64
+ --co-sq-tl: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M100 0L97.5 0L95 0L92.5 0L90 0L87.5 0.01L85 0.01L82.5 0.02L80 0.04L77.5 0.06L75 0.1L72.5 0.14L70 0.2L67.5 0.28L65 0.38L62.5 0.5L60 0.65L57.5 0.83L55 1.04L52.5 1.3L50 1.6L47.5 1.96L45 2.37L42.5 2.85L40 3.41L37.5 4.05L35 4.8L32.5 5.65L30 6.63L27.5 7.77L25 9.07L22.5 10.58L20 12.34L17.5 14.41L15 16.85L12.5 19.79L10 23.42L7.5 28.06L5 34.37L2.5 44.29L0 100L100 100Z%27 fill=%27%23fff%27/></svg>");
65
+ --co-sq-tr: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M0 0L2.5 0L5 0L7.5 0L10 0L12.5 0.01L15 0.01L17.5 0.02L20 0.04L22.5 0.06L25 0.1L27.5 0.14L30 0.2L32.5 0.28L35 0.38L37.5 0.5L40 0.65L42.5 0.83L45 1.04L47.5 1.3L50 1.6L52.5 1.96L55 2.37L57.5 2.85L60 3.41L62.5 4.05L65 4.8L67.5 5.65L70 6.63L72.5 7.77L75 9.07L77.5 10.58L80 12.34L82.5 14.41L85 16.85L87.5 19.79L90 23.42L92.5 28.06L95 34.37L97.5 44.29L100 100L0 100Z%27 fill=%27%23fff%27/></svg>");
66
+ --co-sq-bl: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M0 0L2.5 55.71L5 65.63L7.5 71.94L10 76.58L12.5 80.21L15 83.15L17.5 85.59L20 87.66L22.5 89.42L25 90.93L27.5 92.23L30 93.37L32.5 94.35L35 95.2L37.5 95.95L40 96.59L42.5 97.15L45 97.63L47.5 98.04L50 98.4L52.5 98.7L55 98.96L57.5 99.17L60 99.35L62.5 99.5L65 99.62L67.5 99.72L70 99.8L72.5 99.86L75 99.9L77.5 99.94L80 99.96L82.5 99.98L85 99.99L87.5 99.99L90 100L92.5 100L95 100L97.5 100L100 100L100 0Z%27 fill=%27%23fff%27/></svg>");
67
+ --co-sq-br: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M100 0L97.5 55.71L95 65.63L92.5 71.94L90 76.58L87.5 80.21L85 83.15L82.5 85.59L80 87.66L77.5 89.42L75 90.93L72.5 92.23L70 93.37L67.5 94.35L65 95.2L62.5 95.95L60 96.59L57.5 97.15L55 97.63L52.5 98.04L50 98.4L47.5 98.7L45 98.96L42.5 99.17L40 99.35L37.5 99.5L35 99.62L32.5 99.72L30 99.8L27.5 99.86L25 99.9L22.5 99.94L20 99.96L17.5 99.98L15 99.99L12.5 99.99L10 100L7.5 100L5 100L2.5 100L0 100L0 0Z%27 fill=%27%23fff%27/></svg>");
68
+ -webkit-mask:
69
+ var(--co-sq-tl) top left / var(--co-sq-r) var(--co-sq-r) no-repeat,
70
+ var(--co-sq-tr) top right / var(--co-sq-r) var(--co-sq-r) no-repeat,
71
+ var(--co-sq-bl) bottom left / var(--co-sq-r) var(--co-sq-r) no-repeat,
72
+ var(--co-sq-br) bottom right / var(--co-sq-r) var(--co-sq-r) no-repeat,
73
+ linear-gradient(#fff 0 0) center / 100% calc(100% - 2 * var(--co-sq-r) + 2px) no-repeat,
74
+ linear-gradient(#fff 0 0) center / calc(100% - 2 * var(--co-sq-r) + 2px) 100% no-repeat;
75
+ mask:
76
+ var(--co-sq-tl) top left / var(--co-sq-r) var(--co-sq-r) no-repeat,
77
+ var(--co-sq-tr) top right / var(--co-sq-r) var(--co-sq-r) no-repeat,
78
+ var(--co-sq-bl) bottom left / var(--co-sq-r) var(--co-sq-r) no-repeat,
79
+ var(--co-sq-br) bottom right / var(--co-sq-r) var(--co-sq-r) no-repeat,
80
+ linear-gradient(#fff 0 0) center / 100% calc(100% - 2 * var(--co-sq-r) + 2px) no-repeat,
81
+ linear-gradient(#fff 0 0) center / calc(100% - 2 * var(--co-sq-r) + 2px) 100% no-repeat;
82
+ }
83
+ }
84
+
85
+
1
86
  :host {
2
87
  display: contents;
3
88
  }
@@ -8,22 +93,20 @@
8
93
  flex-direction: column;
9
94
  font-family: var(--co-font-family-primary);
10
95
  transition: transform var(--co-motion-duration-slow) var(--co-motion-ease-in-out);
11
- will-change: transform;
96
+ will-change: transform; /* se conserva (E2): capa compuesta propia para el slide */
12
97
  z-index: 1;
13
- /* Elevation: a layered soft drop-shadow that follows the squircle silhouette
14
- of the inner card (drop-shadow respects the child mask; a box-shadow here
15
- would be rectangular and the inner mask would clip it away). Same recipe
16
- as co-app-shell .main / co-modal .co-modal__frame. */
17
- filter:
18
- drop-shadow(0 1px 2px rgba(31, 28, 27, 0.06))
19
- drop-shadow(0 10px 28px rgba(31, 28, 27, 0.12));
20
- /* Squircle geometry — shared with .co-drawer__card. Match the app-shell
21
- surface radius (same knob co-app-shell uses). */
98
+ /* E2: containing block para el `position: fixed` interno que ancla
99
+ DealVersionHistoryDialog a la card del drawer (antes lo daba el filter). */
100
+ contain: layout;
101
+ /* Squircle + sombra: receta en global/squircle-surface.css. El ASIDE lleva
102
+ .co-sq-elevation (+ fallback): la sombra se rasteriza una vez en la capa
103
+ compuesta y viaja con el translate; la card lleva .co-sq-clip. Radio =
104
+ el mismo knob que co-app-shell. DrawerShell (suite-v2) apaga la sombra
105
+ por ::part(drawer){filter:none; box-shadow:none} en sus modos transparentes. */
22
106
  --co-drawer-r: var(--co-shell-r, var(--co-border-radius-md));
23
- --co-sq-tl: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M100 0L97.5 0L95 0L92.5 0L90 0L87.5 0.01L85 0.01L82.5 0.02L80 0.04L77.5 0.06L75 0.1L72.5 0.14L70 0.2L67.5 0.28L65 0.38L62.5 0.5L60 0.65L57.5 0.83L55 1.04L52.5 1.3L50 1.6L47.5 1.96L45 2.37L42.5 2.85L40 3.41L37.5 4.05L35 4.8L32.5 5.65L30 6.63L27.5 7.77L25 9.07L22.5 10.58L20 12.34L17.5 14.41L15 16.85L12.5 19.79L10 23.42L7.5 28.06L5 34.37L2.5 44.29L0 100L100 100Z%27 fill=%27%23fff%27/></svg>");
24
- --co-sq-tr: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M0 0L2.5 0L5 0L7.5 0L10 0L12.5 0.01L15 0.01L17.5 0.02L20 0.04L22.5 0.06L25 0.1L27.5 0.14L30 0.2L32.5 0.28L35 0.38L37.5 0.5L40 0.65L42.5 0.83L45 1.04L47.5 1.3L50 1.6L52.5 1.96L55 2.37L57.5 2.85L60 3.41L62.5 4.05L65 4.8L67.5 5.65L70 6.63L72.5 7.77L75 9.07L77.5 10.58L80 12.34L82.5 14.41L85 16.85L87.5 19.79L90 23.42L92.5 28.06L95 34.37L97.5 44.29L100 100L0 100Z%27 fill=%27%23fff%27/></svg>");
25
- --co-sq-bl: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M0 0L2.5 55.71L5 65.63L7.5 71.94L10 76.58L12.5 80.21L15 83.15L17.5 85.59L20 87.66L22.5 89.42L25 90.93L27.5 92.23L30 93.37L32.5 94.35L35 95.2L37.5 95.95L40 96.59L42.5 97.15L45 97.63L47.5 98.04L50 98.4L52.5 98.7L55 98.96L57.5 99.17L60 99.35L62.5 99.5L65 99.62L67.5 99.72L70 99.8L72.5 99.86L75 99.9L77.5 99.94L80 99.96L82.5 99.98L85 99.99L87.5 99.99L90 100L92.5 100L95 100L97.5 100L100 100L100 0Z%27 fill=%27%23fff%27/></svg>");
26
- --co-sq-br: url("data:image/svg+xml,<svg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27 preserveAspectRatio=%27none%27><path d=%27M100 0L97.5 55.71L95 65.63L92.5 71.94L90 76.58L87.5 80.21L85 83.15L82.5 85.59L80 87.66L77.5 89.42L75 90.93L72.5 92.23L70 93.37L67.5 94.35L65 95.2L62.5 95.95L60 96.59L57.5 97.15L55 97.63L52.5 98.04L50 98.4L47.5 98.7L45 98.96L42.5 99.17L40 99.35L37.5 99.5L35 99.62L32.5 99.72L30 99.8L27.5 99.86L25 99.9L22.5 99.94L20 99.96L17.5 99.98L15 99.99L12.5 99.99L10 100L7.5 100L5 100L2.5 100L0 100L0 0Z%27 fill=%27%23fff%27/></svg>");
107
+ --co-sq-r: var(--co-drawer-r);
108
+ --co-sq-shadow: 0 1px 4px rgba(31, 28, 27, 0.06), 0 10px 56px rgba(31, 28, 27, 0.12);
109
+ --co-sq-drop-shadow: drop-shadow(0 1px 2px rgba(31, 28, 27, 0.06)) drop-shadow(0 10px 28px rgba(31, 28, 27, 0.12));
27
110
  }
28
111
 
29
112
  /* ─── Position: right (default) ───────────────────────────── */
@@ -83,34 +166,14 @@
83
166
  .co-drawer--bottom.co-drawer--xl { height: 95vh; }
84
167
  .co-drawer--bottom.co-drawer--full { height: 100vh; }
85
168
 
86
- /* The visible card: smooth (squircle) corners, background + clip live here
87
- (not on .co-drawer) so .co-drawer's drop-shadow isn't clipped by the mask. */
169
+ /* The visible card: background acá; el recorte squircle lo da .co-sq-clip
170
+ (partial) — no redeclarar overflow / border-radius / mask. */
88
171
  .co-drawer__card {
89
172
  flex: 1;
90
173
  min-height: 0;
91
174
  display: flex;
92
175
  flex-direction: column;
93
- overflow: hidden;
94
176
  background: var(--co-semantic-surface-page);
95
- border-radius: 0; /* the mask defines the (smooth) shape */
96
- /* Squircle via 4 corner pieces + a cross of 2 bars (H full-width, V full-height).
97
- The bars are sized `calc(... + 2px)` so they OVERLAP each corner by ~1px on
98
- every side — same anti-seam trick as co-app-shell .main__card / co-modal
99
- .co-modal (prevents a sub-pixel transparent seam that flickers with zoom). */
100
- -webkit-mask:
101
- var(--co-sq-tl) top left / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
102
- var(--co-sq-tr) top right / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
103
- var(--co-sq-bl) bottom left / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
104
- var(--co-sq-br) bottom right / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
105
- linear-gradient(#fff 0 0) center / 100% calc(100% - 2 * var(--co-drawer-r) + 2px) no-repeat,
106
- linear-gradient(#fff 0 0) center / calc(100% - 2 * var(--co-drawer-r) + 2px) 100% no-repeat;
107
- mask:
108
- var(--co-sq-tl) top left / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
109
- var(--co-sq-tr) top right / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
110
- var(--co-sq-bl) bottom left / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
111
- var(--co-sq-br) bottom right / var(--co-drawer-r) var(--co-drawer-r) no-repeat,
112
- linear-gradient(#fff 0 0) center / 100% calc(100% - 2 * var(--co-drawer-r) + 2px) no-repeat,
113
- linear-gradient(#fff 0 0) center / calc(100% - 2 * var(--co-drawer-r) + 2px) 100% no-repeat;
114
177
  }
115
178
 
116
179
  /* ─── Header ──────────────────────────────────────────────── */