@prolibu-suite/cobalt-core 0.9.5 → 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.
- package/custom-elements.json +750 -80
- package/dist/cjs/co-accordion.cjs.entry.js +1 -1
- package/dist/cjs/co-action-bar.cjs.entry.js +1 -1
- package/dist/cjs/co-app-shell.cjs.entry.js +4 -4
- package/dist/cjs/co-audio-player.cjs.entry.js +1 -1
- package/dist/cjs/co-autocomplete.cjs.entry.js +2 -2
- package/dist/cjs/co-avatar-group.cjs.entry.js +1 -1
- package/dist/cjs/co-avatar_2.cjs.entry.js +49 -17
- package/dist/cjs/co-badge.cjs.entry.js +11 -3
- package/dist/cjs/co-bottom-sheet.cjs.entry.js +1 -1
- package/dist/cjs/co-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/co-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/co-button-group.cjs.entry.js +1 -1
- package/dist/cjs/co-button.cjs.entry.js +2 -2
- package/dist/cjs/co-calendar-month_2.cjs.entry.js +55 -20
- package/dist/cjs/co-calendar_3.cjs.entry.js +27 -15
- package/dist/cjs/co-card.cjs.entry.js +1 -1
- package/dist/cjs/co-carousel-item.cjs.entry.js +1 -1
- package/dist/cjs/co-carousel.cjs.entry.js +2 -2
- package/dist/cjs/co-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/co-checkbox.cjs.entry.js +6 -6
- package/dist/cjs/co-chip_2.cjs.entry.js +8 -5
- package/dist/cjs/co-color-picker.cjs.entry.js +1048 -27
- package/dist/cjs/co-column-picker.cjs.entry.js +3 -3
- package/dist/cjs/co-combobox.cjs.entry.js +2 -2
- package/dist/cjs/co-command-search.cjs.entry.js +1 -1
- package/dist/cjs/co-data-table-pagination.cjs.entry.js +5 -5
- package/dist/cjs/co-data-table.cjs.entry.js +1 -1
- package/dist/cjs/co-date-picker.cjs.entry.js +3 -3
- package/dist/cjs/co-date-range-picker.cjs.entry.js +3 -3
- package/dist/cjs/co-date-range.cjs.entry.js +2 -2
- package/dist/cjs/co-date-time-picker.cjs.entry.js +101 -130
- package/dist/cjs/co-drive-card.cjs.entry.js +2 -2
- package/dist/cjs/co-drop-zone.cjs.entry.js +2 -2
- package/dist/cjs/co-emoji-picker.cjs.entry.js +4 -4
- package/dist/cjs/co-empty-state.cjs.entry.js +4 -4
- package/dist/cjs/co-event-calendar.cjs.entry.js +4 -4
- package/dist/cjs/co-event-popover.cjs.entry.js +3 -3
- package/dist/cjs/co-fab.cjs.entry.js +3 -3
- package/dist/cjs/co-file-field.cjs.entry.js +102 -106
- package/dist/cjs/co-file-type-tile.cjs.entry.js +3 -3
- package/dist/cjs/co-helper-text.cjs.entry.js +3 -3
- package/dist/cjs/co-icon-button.cjs.entry.js +6 -6
- package/dist/cjs/co-icon.cjs.entry.js +3 -3
- package/dist/cjs/co-input.cjs.entry.js +26 -4
- package/dist/cjs/co-json-field.cjs.entry.js +5 -5
- package/dist/cjs/co-lightbox.cjs.entry.js +204 -21
- package/dist/cjs/co-list-footer.cjs.entry.js +2 -2
- package/dist/cjs/co-list-item.cjs.entry.js +5 -5
- package/dist/cjs/co-loader.cjs.entry.js +1 -1
- package/dist/cjs/co-media-thumb.cjs.entry.js +3 -3
- package/dist/cjs/co-menu-divider.cjs.entry.js +2 -2
- package/dist/cjs/co-menu-item.cjs.entry.js +84 -3
- package/dist/cjs/co-menu.cjs.entry.js +2 -2
- package/dist/cjs/co-modal.cjs.entry.js +6 -4
- package/dist/cjs/co-navbar.cjs.entry.js +4 -4
- package/dist/cjs/co-number-field.cjs.entry.js +272 -9
- package/dist/cjs/co-overlay.cjs.entry.js +6 -4
- package/dist/cjs/co-page-header.cjs.entry.js +2 -2
- package/dist/cjs/co-phone-field.cjs.entry.js +3 -3
- package/dist/cjs/co-popover.cjs.entry.js +58 -21
- package/dist/cjs/co-progress-bar.cjs.entry.js +3 -3
- package/dist/cjs/co-progress-circle.cjs.entry.js +3 -3
- package/dist/cjs/co-provider-logo_2.cjs.entry.js +47 -3
- package/dist/cjs/co-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/co-radio.cjs.entry.js +4 -4
- package/dist/cjs/co-rating.cjs.entry.js +4 -4
- package/dist/cjs/co-ref-field.cjs.entry.js +4 -4
- package/dist/cjs/co-rich-text-editor.cjs.entry.js +11 -8
- package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +7 -3
- package/dist/cjs/co-rich-text-viewer.cjs.entry.js +4 -3
- package/dist/cjs/co-row.cjs.entry.js +3 -3
- package/dist/cjs/co-segmented-bar.cjs.entry.js +1 -1
- package/dist/cjs/co-select.cjs.entry.js +2 -2
- package/dist/cjs/co-separator.cjs.entry.js +2 -2
- package/dist/cjs/co-sidebar-nav.cjs.entry.js +2 -2
- package/dist/cjs/co-sidebar.cjs.entry.js +3 -3
- package/dist/cjs/co-slider.cjs.entry.js +3 -3
- package/dist/cjs/co-switch.cjs.entry.js +6 -6
- package/dist/cjs/co-tab-group.cjs.entry.js +3 -3
- package/dist/cjs/co-tab.cjs.entry.js +3 -3
- package/dist/cjs/co-tags-field.cjs.entry.js +8 -8
- package/dist/cjs/co-textarea.cjs.entry.js +6 -6
- package/dist/cjs/co-time-field.cjs.entry.js +325 -0
- package/dist/cjs/co-toast.cjs.entry.js +2 -2
- package/dist/cjs/co-toggle-button-group.cjs.entry.js +4 -4
- package/dist/cjs/co-toggle-button.cjs.entry.js +4 -4
- package/dist/cjs/co-transfer-list.cjs.entry.js +1 -1
- package/dist/cjs/co-video.cjs.entry.js +32 -7
- package/dist/cjs/cobalt.cjs.js +2 -2
- package/dist/cjs/color-CML2Cfdh.js +142 -0
- package/dist/cjs/{dateI18n-wblvKRq_.js → dateI18n-BK2qHqoC.js} +36 -0
- package/dist/cjs/{fieldChip-BLzo9MEV.js → fieldChip-B6YIGU1V.js} +1 -1
- package/dist/cjs/fileI18n-6sdbKvo6.js +88 -0
- package/dist/cjs/{index-DFZ5YhIT.js → index-BYwrR87Z.js} +28 -10
- package/dist/cjs/{index-DK-2Lzmf.js → index-MDAnKsze.js} +25 -21
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{positioning-DCj_AJ2T.js → positioning-CyatXeT_.js} +32 -13
- package/dist/cjs/{requiredMark-C1xcrzSZ.js → requiredMark-D-t-IPN0.js} +1 -1
- package/dist/cjs/{toolbar-config-BQfWTW6P.js → toolbar-config-BSGas-Wl.js} +10 -0
- package/dist/cobalt/cobalt.css +1 -1
- package/dist/cobalt/cobalt.esm.js +1 -1
- package/dist/cobalt/{p-f83b48fd.entry.js → p-011dc80b.entry.js} +1 -1
- package/dist/cobalt/{p-316c62c0.entry.js → p-0678c797.entry.js} +1 -1
- package/dist/cobalt/{p-43bd298d.entry.js → p-08e42e00.entry.js} +1 -1
- package/dist/cobalt/{p-1c68bc41.entry.js → p-10b82207.entry.js} +1 -1
- package/dist/cobalt/{p-a8c64cc3.entry.js → p-15d59169.entry.js} +1 -1
- package/dist/cobalt/{p-07d570a6.entry.js → p-16954cea.entry.js} +1 -1
- package/dist/cobalt/{p-85a61e28.entry.js → p-17244412.entry.js} +1 -1
- package/dist/cobalt/p-1788aab5.entry.js +1 -0
- package/dist/cobalt/p-1a589c8e.entry.js +1 -0
- package/dist/cobalt/{p-da546d08.entry.js → p-1dc55e43.entry.js} +1 -1
- package/dist/cobalt/p-20a39218.entry.js +1 -0
- package/dist/cobalt/{p-4c7e3984.entry.js → p-23ab0cc5.entry.js} +1 -1
- package/dist/cobalt/{p-fabe5fb2.entry.js → p-2636b7eb.entry.js} +1 -1
- package/dist/cobalt/{p-88a0659f.entry.js → p-27a7e549.entry.js} +1 -1
- package/dist/cobalt/{p-18d34b01.entry.js → p-290066ef.entry.js} +1 -1
- package/dist/cobalt/{p-89e38c5e.entry.js → p-2f9cbbd5.entry.js} +1 -1
- package/dist/cobalt/{p-ef5e1167.entry.js → p-325b91b6.entry.js} +1 -1
- package/dist/cobalt/{p-60cb66f5.entry.js → p-37f5036b.entry.js} +1 -1
- package/dist/cobalt/p-3cc3ff93.entry.js +1 -0
- package/dist/cobalt/p-410bee4d.entry.js +1 -0
- package/dist/cobalt/{p-6795a258.entry.js → p-44c4e4a3.entry.js} +1 -1
- package/dist/cobalt/{p-4b083da4.entry.js → p-44ea675f.entry.js} +1 -1
- package/dist/cobalt/{p-2828ecf6.entry.js → p-4592ca00.entry.js} +1 -1
- package/dist/cobalt/p-4908f33f.entry.js +1 -0
- package/dist/cobalt/{p-342e1da4.entry.js → p-4d65e713.entry.js} +1 -1
- package/dist/cobalt/{p-dca4cd5f.entry.js → p-4d897896.entry.js} +1 -1
- package/dist/cobalt/{p-33ea4a90.entry.js → p-50bcc76f.entry.js} +1 -1
- package/dist/cobalt/{p-ac91259e.entry.js → p-5298c030.entry.js} +1 -1
- package/dist/cobalt/p-54c987d7.entry.js +1 -0
- package/dist/cobalt/p-56551580.entry.js +1 -0
- package/dist/cobalt/p-58137c9e.entry.js +1 -0
- package/dist/cobalt/{p-4f754c9a.entry.js → p-58d9b650.entry.js} +1 -1
- package/dist/cobalt/p-59963937.entry.js +1 -0
- package/dist/cobalt/{p-2d329ac8.entry.js → p-623cc195.entry.js} +1 -1
- package/dist/cobalt/p-63825d7f.entry.js +1 -0
- package/dist/cobalt/{p-8e667eb6.entry.js → p-66b11b38.entry.js} +1 -1
- package/dist/cobalt/{p-fb3a095b.entry.js → p-6bf6bc3e.entry.js} +1 -1
- package/dist/cobalt/p-6f700f0d.entry.js +1 -0
- package/dist/cobalt/p-73c6d735.entry.js +1 -0
- package/dist/cobalt/{p-a6357340.entry.js → p-76249983.entry.js} +1 -1
- package/dist/cobalt/{p-bfc2a849.entry.js → p-82266f11.entry.js} +1 -1
- package/dist/cobalt/{p-a9b29cc2.entry.js → p-826ee074.entry.js} +1 -1
- package/dist/cobalt/{p-23b3ff3f.entry.js → p-83a9a05a.entry.js} +1 -1
- package/dist/cobalt/{p-568cfe8d.entry.js → p-83ea631d.entry.js} +1 -1
- package/dist/cobalt/p-85501c6a.entry.js +1 -0
- package/dist/cobalt/{p-dfd25f1d.entry.js → p-88195a63.entry.js} +1 -1
- package/dist/cobalt/p-8fa5dc4a.entry.js +1 -0
- package/dist/cobalt/{p-c8dba82f.entry.js → p-91e73a92.entry.js} +1 -1
- package/dist/cobalt/{p-ac466658.entry.js → p-92b092db.entry.js} +1 -1
- package/dist/cobalt/{p-36197363.entry.js → p-996f4e38.entry.js} +1 -1
- package/dist/cobalt/p-BRbgGqLw.js +1 -0
- package/dist/cobalt/{p-BL0sCfMH.js → p-Bryf3-Js.js} +1 -1
- package/dist/cobalt/p-DFHRS9cJ.js +1 -0
- package/dist/cobalt/{p-CrtiywTB.js → p-DH5lfRNj.js} +1 -1
- package/dist/{components/p-WeuPA9Rw.js → cobalt/p-DOL2zACE.js} +1 -1
- package/dist/cobalt/p-D_zA1Pv4.js +1 -0
- package/dist/cobalt/{p-fef5db54.entry.js → p-a32b20eb.entry.js} +1 -1
- package/dist/cobalt/p-aa9400bf.entry.js +1 -0
- package/dist/cobalt/{p-8eb485c8.entry.js → p-aaca6dab.entry.js} +1 -1
- package/dist/cobalt/{p-e5495539.entry.js → p-aae86f96.entry.js} +1 -1
- package/dist/cobalt/{p-8f38e24d.entry.js → p-ad33c40e.entry.js} +1 -1
- package/dist/cobalt/p-b0c4fc71.entry.js +1 -0
- package/dist/cobalt/{p-da18b5f4.entry.js → p-b1e8d69e.entry.js} +1 -1
- package/dist/cobalt/p-b48917c9.entry.js +1 -0
- package/dist/cobalt/{p-7e53e9c8.entry.js → p-b565104d.entry.js} +1 -1
- package/dist/cobalt/{p-b0319a2d.entry.js → p-b90d41e4.entry.js} +1 -1
- package/dist/cobalt/{p-c5684c79.entry.js → p-bd683db3.entry.js} +1 -1
- package/dist/cobalt/{p-1ddbc48b.entry.js → p-c124e82b.entry.js} +1 -1
- package/dist/cobalt/{p-95efe661.entry.js → p-c2ebf0ec.entry.js} +1 -1
- package/dist/cobalt/{p-76420ac1.entry.js → p-c32c176a.entry.js} +1 -1
- package/dist/cobalt/{p-54ae807d.entry.js → p-c465d619.entry.js} +1 -1
- package/dist/cobalt/{p-ab45d9bd.entry.js → p-c91d4fc6.entry.js} +1 -1
- package/dist/cobalt/{p-ce35c898.entry.js → p-d29bb0fa.entry.js} +1 -1
- package/dist/cobalt/{p-7c5e846a.entry.js → p-db805569.entry.js} +1 -1
- package/dist/cobalt/p-e01f9b9a.entry.js +1 -0
- package/dist/cobalt/p-e3aae282.entry.js +1 -0
- package/dist/cobalt/{p-d15d3a97.entry.js → p-e4264532.entry.js} +1 -1
- package/dist/cobalt/{p-93c68029.entry.js → p-e48f4e45.entry.js} +1 -1
- package/dist/cobalt/{p-3f0eed59.entry.js → p-e49a564c.entry.js} +1 -1
- package/dist/cobalt/p-e8a2f993.entry.js +1 -0
- package/dist/cobalt/p-e8a4e6b0.entry.js +1 -0
- package/dist/cobalt/p-ea20f048.entry.js +1 -0
- package/dist/cobalt/{p-c1e7fb32.entry.js → p-eb063cc0.entry.js} +1 -1
- package/dist/cobalt/p-eb82358d.entry.js +1 -0
- package/dist/cobalt/{p-2114c036.entry.js → p-eb8691f2.entry.js} +1 -1
- package/dist/cobalt/{p-e8878cf9.entry.js → p-ee2023da.entry.js} +1 -1
- package/dist/cobalt/p-ee9a623d.entry.js +1 -0
- package/dist/cobalt/p-ef5ca521.entry.js +1 -0
- package/dist/cobalt/p-f4e1c3c3.entry.js +1 -0
- package/dist/cobalt/{p-e364b8a5.entry.js → p-f57dffca.entry.js} +1 -1
- package/dist/cobalt/p-f6691108.entry.js +1 -0
- package/dist/cobalt/p-f68dd124.entry.js +1 -0
- package/dist/cobalt/p-fMqVDypp.js +1 -0
- package/dist/cobalt/{p-0c463d9a.entry.js → p-fd150cc6.entry.js} +1 -1
- package/dist/cobalt/{p-0e91e5c4.entry.js → p-fe7e8813.entry.js} +1 -1
- package/dist/cobalt/p-gKnOhsd2.js +1 -0
- package/dist/cobalt/p-jYd9gu_c.js +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/co-app-shell/co-app-shell.css +107 -41
- package/dist/collection/components/co-app-shell/co-app-shell.js +2 -2
- package/dist/collection/components/co-autocomplete/co-autocomplete.js +1 -1
- package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
- package/dist/collection/components/co-badge/co-badge.css +18 -0
- package/dist/collection/components/co-badge/co-badge.js +29 -1
- package/dist/collection/components/co-button/co-button.css +4 -4
- package/dist/collection/components/co-checkbox/co-checkbox.css +12 -3
- package/dist/collection/components/co-checkbox/co-checkbox.js +6 -6
- package/dist/collection/components/co-checkbox-group/co-checkbox-group.css +1 -3
- package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
- package/dist/collection/components/co-color-picker/co-color-picker.css +252 -5
- package/dist/collection/components/co-color-picker/co-color-picker.js +932 -15
- package/dist/collection/components/co-color-picker/presets.js +113 -15
- package/dist/collection/components/co-column-picker/co-column-picker.js +2 -2
- package/dist/collection/components/co-combobox/co-combobox.js +1 -1
- package/dist/collection/components/co-command-search/co-command-search.js +1 -1
- package/dist/collection/components/co-data-table/co-data-table.js +1 -1
- package/dist/collection/components/co-data-table-pagination/co-data-table-pagination.js +4 -4
- package/dist/collection/components/co-date-field/co-date-field.js +4 -4
- package/dist/collection/components/co-date-range/co-date-range.js +1 -1
- package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +2 -2
- package/dist/collection/components/co-date-time-picker/co-date-time-picker.css +128 -32
- package/dist/collection/components/co-date-time-picker/co-date-time-picker.js +142 -138
- package/dist/collection/components/co-drawer/co-drawer.css +99 -36
- package/dist/collection/components/co-drawer/co-drawer.js +19 -7
- package/dist/collection/components/co-drive-card/co-drive-card.js +1 -1
- package/dist/collection/components/co-drop-zone/co-drop-zone.js +1 -1
- package/dist/collection/components/co-emoji-picker/co-emoji-picker.js +2 -2
- package/dist/collection/components/co-empty-state/co-empty-state.css +28 -0
- package/dist/collection/components/co-empty-state/co-empty-state.js +2 -2
- package/dist/collection/components/co-event-calendar/co-event-calendar.js +2 -2
- package/dist/collection/components/co-event-popover/co-event-popover.js +1 -1
- package/dist/collection/components/co-fab/co-fab.js +2 -2
- package/dist/collection/components/co-file-field/co-file-field.css +55 -2
- package/dist/collection/components/co-file-field/co-file-field.js +41 -13
- package/dist/collection/components/co-file-field/co-file-field.utils.js +51 -4
- package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +2 -2
- package/dist/collection/components/co-helper-text/co-helper-text.js +2 -2
- package/dist/collection/components/co-icon/co-icon.js +2 -2
- package/dist/collection/components/co-icon-button/co-icon-button.css +40 -2
- package/dist/collection/components/co-icon-button/co-icon-button.js +43 -4
- package/dist/collection/components/co-input/co-input.css +33 -0
- package/dist/collection/components/co-input/co-input.js +25 -2
- package/dist/collection/components/co-json-field/co-json-field.js +3 -3
- package/dist/collection/components/co-lightbox/co-lightbox.css +23 -0
- package/dist/collection/components/co-lightbox/co-lightbox.js +209 -20
- package/dist/collection/components/co-list-footer/co-list-footer.js +1 -1
- package/dist/collection/components/co-list-item/co-list-item.js +4 -4
- package/dist/collection/components/co-media-thumb/co-media-thumb.js +2 -2
- package/dist/collection/components/co-menu/co-menu.js +1 -1
- package/dist/collection/components/co-menu-divider/co-menu-divider.js +1 -1
- package/dist/collection/components/co-menu-item/co-menu-item.js +67 -3
- package/dist/collection/components/co-modal/co-modal.css +106 -37
- package/dist/collection/components/co-modal/co-modal.js +4 -2
- package/dist/collection/components/co-navbar/co-navbar.css +4 -2
- package/dist/collection/components/co-navbar/co-navbar.js +2 -2
- package/dist/collection/components/co-number-field/co-number-field.css +22 -0
- package/dist/collection/components/co-number-field/co-number-field.js +216 -9
- package/dist/collection/components/co-option-list/co-option-list.css +25 -4
- package/dist/collection/components/co-option-list/co-option-list.js +26 -3
- package/dist/collection/components/co-overlay/co-overlay.js +5 -3
- package/dist/collection/components/co-page-header/co-page-header.js +1 -1
- package/dist/collection/components/co-phone-field/co-phone-field.js +1 -1
- package/dist/collection/components/co-popover/co-popover.css +18 -3
- package/dist/collection/components/co-popover/co-popover.js +83 -20
- package/dist/collection/components/co-progress-bar/co-progress-bar.js +2 -2
- package/dist/collection/components/co-progress-circle/co-progress-circle.js +2 -2
- package/dist/collection/components/co-radio/co-radio.js +3 -3
- package/dist/collection/components/co-radio-group/co-radio-group.js +1 -1
- package/dist/collection/components/co-rating/co-rating.js +3 -3
- package/dist/collection/components/co-ref-field/co-ref-field.js +3 -3
- package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.css +14 -1
- package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +9 -6
- package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +7 -3
- package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +3 -2
- package/dist/collection/components/co-row/co-row.js +2 -2
- package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +1 -1
- package/dist/collection/components/co-select/co-select.js +1 -1
- package/dist/collection/components/co-separator/co-separator.js +1 -1
- package/dist/collection/components/co-sidebar/co-sidebar.js +2 -2
- package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.css +2 -2
- package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +1 -1
- package/dist/collection/components/co-skeleton/co-skeleton.css +18 -0
- package/dist/collection/components/co-skeleton/co-skeleton.js +83 -1
- package/dist/collection/components/co-slider/co-slider.js +2 -2
- package/dist/collection/components/co-switch/co-switch.css +3 -3
- package/dist/collection/components/co-switch/co-switch.js +3 -3
- package/dist/collection/components/co-tab/co-tab.js +2 -2
- package/dist/collection/components/co-tab-group/co-tab-group.js +2 -2
- package/dist/collection/components/co-tags-field/co-tags-field.js +5 -5
- package/dist/collection/components/co-textarea/co-textarea.js +4 -4
- package/dist/collection/components/co-time-field/co-time-field.css +111 -0
- package/dist/collection/components/co-time-field/co-time-field.js +536 -0
- package/dist/collection/components/co-toast/co-toast.css +13 -7
- package/dist/collection/components/co-toast/co-toast.js +2 -2
- package/dist/collection/components/co-toggle-button/co-toggle-button.css +16 -11
- package/dist/collection/components/co-toggle-button/co-toggle-button.js +2 -2
- package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.css +7 -1
- package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +2 -2
- package/dist/collection/components/co-tooltip/co-tooltip.css +18 -1
- package/dist/collection/components/co-tooltip/co-tooltip.js +49 -16
- package/dist/collection/components/co-transfer-list/co-transfer-list.js +1 -1
- package/dist/collection/components/co-video/co-video.js +34 -9
- package/dist/collection/utils/amountText.js +95 -0
- package/dist/collection/utils/color.js +109 -3
- package/dist/collection/utils/colorPickerI18n.js +55 -0
- package/dist/collection/utils/dateI18n.js +36 -0
- package/dist/collection/utils/fileI18n.js +3 -0
- package/dist/collection/utils/positioning.js +37 -4
- package/dist/collection/utils/submenu.js +35 -0
- package/dist/components/co-accordion.js +1 -1
- package/dist/components/co-action-bar.js +1 -1
- package/dist/components/co-app-shell.js +1 -1
- package/dist/components/co-audio-player.js +1 -1
- package/dist/components/co-autocomplete.js +1 -1
- package/dist/components/co-avatar-group.js +1 -1
- package/dist/components/co-avatar.js +1 -1
- package/dist/components/co-badge.js +1 -1
- package/dist/components/co-breadcrumb-item.js +1 -1
- package/dist/components/co-breadcrumb.js +1 -1
- package/dist/components/co-button.js +1 -1
- package/dist/components/co-calendar-month.js +1 -1
- package/dist/components/co-calendar-timegrid.js +1 -1
- package/dist/components/co-calendar.js +1 -1
- package/dist/components/co-carousel.js +1 -1
- package/dist/components/co-checkbox-group.js +1 -1
- package/dist/components/co-checkbox.js +1 -1
- package/dist/components/co-chip.js +1 -1
- package/dist/components/co-color-picker.js +1 -1
- package/dist/components/co-column-picker.js +1 -1
- package/dist/components/co-combobox.js +1 -1
- package/dist/components/co-command-search.js +1 -1
- package/dist/components/co-data-table-pagination.js +1 -1
- package/dist/components/co-data-table.js +1 -1
- package/dist/components/co-date-field.js +1 -1
- package/dist/components/co-date-picker.js +1 -1
- package/dist/components/co-date-range-picker.js +1 -1
- package/dist/components/co-date-range.js +1 -1
- package/dist/components/co-date-time-picker.js +1 -1
- package/dist/components/co-drawer.js +1 -1
- package/dist/components/co-drive-card.js +1 -1
- package/dist/components/co-drop-zone.js +1 -1
- package/dist/components/co-emoji-picker.js +1 -1
- package/dist/components/co-empty-state.js +1 -1
- package/dist/components/co-event-calendar.js +1 -1
- package/dist/components/co-event-popover.js +1 -1
- package/dist/components/co-fab.js +1 -1
- package/dist/components/co-file-field.js +1 -1
- package/dist/components/co-file-type-tile.js +1 -1
- package/dist/components/co-helper-text.js +1 -1
- package/dist/components/co-icon-button.js +1 -1
- package/dist/components/co-icon.js +1 -1
- package/dist/components/co-input.js +1 -1
- package/dist/components/co-json-field.js +1 -1
- package/dist/components/co-lightbox.js +1 -1
- package/dist/components/co-list-footer.js +1 -1
- package/dist/components/co-list-item.js +1 -1
- package/dist/components/co-media-thumb.js +1 -1
- package/dist/components/co-menu-divider.js +1 -1
- package/dist/components/co-menu-item.js +1 -1
- package/dist/components/co-menu.js +1 -1
- package/dist/components/co-modal.js +1 -1
- package/dist/components/co-navbar.js +1 -1
- package/dist/components/co-number-field.js +1 -1
- package/dist/components/co-option-list.js +1 -1
- package/dist/components/co-overlay.js +1 -1
- package/dist/components/co-page-header.js +1 -1
- package/dist/components/co-phone-field.js +1 -1
- package/dist/components/co-popover.js +1 -1
- package/dist/components/co-progress-bar.js +1 -1
- package/dist/components/co-progress-circle.js +1 -1
- package/dist/components/co-radio-group.js +1 -1
- package/dist/components/co-radio.js +1 -1
- package/dist/components/co-rating.js +1 -1
- package/dist/components/co-ref-field.js +1 -1
- package/dist/components/co-rich-text-editor.js +1 -1
- package/dist/components/co-rich-text-toolbar.js +1 -1
- package/dist/components/co-rich-text-viewer.js +1 -1
- package/dist/components/co-row.js +1 -1
- package/dist/components/co-select.js +1 -1
- package/dist/components/co-separator.js +1 -1
- package/dist/components/co-sidebar-nav.js +1 -1
- package/dist/components/co-sidebar.js +1 -1
- package/dist/components/co-skeleton.js +1 -1
- package/dist/components/co-slider.js +1 -1
- package/dist/components/co-switch.js +1 -1
- package/dist/components/co-tab-group.js +1 -1
- package/dist/components/co-tab.js +1 -1
- package/dist/components/co-tags-field.js +1 -1
- package/dist/components/co-textarea.js +1 -1
- package/dist/components/co-time-field.d.ts +11 -0
- package/dist/components/co-time-field.js +1 -0
- package/dist/components/co-toast.js +1 -1
- package/dist/components/co-toggle-button-group.js +1 -1
- package/dist/components/co-toggle-button.js +1 -1
- package/dist/components/co-tooltip.js +1 -1
- package/dist/components/co-transfer-list.js +1 -1
- package/dist/components/co-video.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-9ceBPSd1.js +1 -0
- package/dist/components/p-B1QFLcY9.js +1 -0
- package/dist/components/p-B2IsXte7.js +1 -0
- package/dist/components/p-B4NCaKrR.js +1 -0
- package/dist/components/p-BBP5__CY.js +1 -0
- package/dist/components/{p-Dabi98BI.js → p-BGDqldEg.js} +1 -1
- package/dist/components/p-BRbgGqLw.js +1 -0
- package/dist/components/p-Be_kyNRE.js +1 -0
- package/dist/components/{p-BL0sCfMH.js → p-Bryf3-Js.js} +1 -1
- package/dist/components/p-BsTO1uUA.js +1 -0
- package/dist/components/{p-CuZXTvDM.js → p-Bv6U5y3d.js} +1 -1
- package/dist/components/p-BxP8OBw6.js +1 -0
- package/dist/components/{p-P8wvwhM2.js → p-CFFDmGPS.js} +1 -1
- package/dist/components/{p-CA_JAK9s.js → p-CT2enQ6h.js} +1 -1
- package/dist/components/p-CXPRaTuo.js +1 -0
- package/dist/components/{p-D5EdMieb.js → p-Cl3AdEQJ.js} +1 -1
- package/dist/components/p-CnX3L8aF.js +1 -0
- package/dist/components/p-DFHRS9cJ.js +1 -0
- package/dist/components/p-DIo66nBr.js +1 -0
- package/dist/components/{p-Dj1EZ5qD.js → p-DNJAIVfI.js} +1 -1
- package/dist/{cobalt/p-WeuPA9Rw.js → components/p-DOL2zACE.js} +1 -1
- package/dist/components/p-DRP8D9ro.js +1 -0
- package/dist/components/p-DkDTmHCg.js +1 -0
- package/dist/components/{p-Bxk96Zgc.js → p-Du_CgT5E.js} +1 -1
- package/dist/components/{p-BHYtxTzM.js → p-HxVRXXXC.js} +1 -1
- package/dist/components/{p-B0Dc-I_C.js → p-NNxjElcX.js} +1 -1
- package/dist/components/p-gKnOhsd2.js +1 -0
- package/dist/components/p-jYd9gu_c.js +1 -0
- package/dist/components/{p-D4qzGifz.js → p-vby0ITbe.js} +1 -1
- package/dist/components/{p-D6OUW6oW.js → p-x4grh-eZ.js} +1 -1
- package/dist/esm/co-accordion.entry.js +1 -1
- package/dist/esm/co-action-bar.entry.js +1 -1
- package/dist/esm/co-app-shell.entry.js +4 -4
- package/dist/esm/co-audio-player.entry.js +1 -1
- package/dist/esm/co-autocomplete.entry.js +2 -2
- package/dist/esm/co-avatar-group.entry.js +1 -1
- package/dist/esm/co-avatar_2.entry.js +49 -17
- package/dist/esm/co-badge.entry.js +11 -3
- package/dist/esm/co-bottom-sheet.entry.js +1 -1
- package/dist/esm/co-breadcrumb-item.entry.js +1 -1
- package/dist/esm/co-breadcrumb.entry.js +1 -1
- package/dist/esm/co-button-group.entry.js +1 -1
- package/dist/esm/co-button.entry.js +2 -2
- package/dist/esm/co-calendar-month_2.entry.js +37 -2
- package/dist/esm/co-calendar_3.entry.js +27 -15
- package/dist/esm/co-card.entry.js +1 -1
- package/dist/esm/co-carousel-item.entry.js +1 -1
- package/dist/esm/co-carousel.entry.js +2 -2
- package/dist/esm/co-checkbox-group.entry.js +2 -2
- package/dist/esm/co-checkbox.entry.js +6 -6
- package/dist/esm/co-chip_2.entry.js +8 -5
- package/dist/esm/co-color-picker.entry.js +1048 -27
- package/dist/esm/co-column-picker.entry.js +3 -3
- package/dist/esm/co-combobox.entry.js +2 -2
- package/dist/esm/co-command-search.entry.js +1 -1
- package/dist/esm/co-data-table-pagination.entry.js +5 -5
- package/dist/esm/co-data-table.entry.js +1 -1
- package/dist/esm/co-date-picker.entry.js +3 -3
- package/dist/esm/co-date-range-picker.entry.js +3 -3
- package/dist/esm/co-date-range.entry.js +2 -2
- package/dist/esm/co-date-time-picker.entry.js +101 -130
- package/dist/esm/co-drive-card.entry.js +2 -2
- package/dist/esm/co-drop-zone.entry.js +2 -2
- package/dist/esm/co-emoji-picker.entry.js +4 -4
- package/dist/esm/co-empty-state.entry.js +4 -4
- package/dist/esm/co-event-calendar.entry.js +4 -4
- package/dist/esm/co-event-popover.entry.js +3 -3
- package/dist/esm/co-fab.entry.js +3 -3
- package/dist/esm/co-file-field.entry.js +95 -99
- package/dist/esm/co-file-type-tile.entry.js +3 -3
- package/dist/esm/co-helper-text.entry.js +3 -3
- package/dist/esm/co-icon-button.entry.js +6 -6
- package/dist/esm/co-icon.entry.js +3 -3
- package/dist/esm/co-input.entry.js +26 -4
- package/dist/esm/co-json-field.entry.js +5 -5
- package/dist/esm/co-lightbox.entry.js +204 -21
- package/dist/esm/co-list-footer.entry.js +2 -2
- package/dist/esm/co-list-item.entry.js +5 -5
- package/dist/esm/co-loader.entry.js +1 -1
- package/dist/esm/co-media-thumb.entry.js +3 -3
- package/dist/esm/co-menu-divider.entry.js +2 -2
- package/dist/esm/co-menu-item.entry.js +84 -3
- package/dist/esm/co-menu.entry.js +2 -2
- package/dist/esm/co-modal.entry.js +6 -4
- package/dist/esm/co-navbar.entry.js +4 -4
- package/dist/esm/co-number-field.entry.js +272 -9
- package/dist/esm/co-overlay.entry.js +6 -4
- package/dist/esm/co-page-header.entry.js +2 -2
- package/dist/esm/co-phone-field.entry.js +3 -3
- package/dist/esm/co-popover.entry.js +58 -21
- package/dist/esm/co-progress-bar.entry.js +3 -3
- package/dist/esm/co-progress-circle.entry.js +3 -3
- package/dist/esm/co-provider-logo_2.entry.js +47 -3
- package/dist/esm/co-radio-group.entry.js +1 -1
- package/dist/esm/co-radio.entry.js +4 -4
- package/dist/esm/co-rating.entry.js +4 -4
- package/dist/esm/co-ref-field.entry.js +4 -4
- package/dist/esm/co-rich-text-editor.entry.js +11 -8
- package/dist/esm/co-rich-text-toolbar.entry.js +7 -3
- package/dist/esm/co-rich-text-viewer.entry.js +4 -3
- package/dist/esm/co-row.entry.js +3 -3
- package/dist/esm/co-segmented-bar.entry.js +1 -1
- package/dist/esm/co-select.entry.js +2 -2
- package/dist/esm/co-separator.entry.js +2 -2
- package/dist/esm/co-sidebar-nav.entry.js +2 -2
- package/dist/esm/co-sidebar.entry.js +3 -3
- package/dist/esm/co-slider.entry.js +3 -3
- package/dist/esm/co-switch.entry.js +6 -6
- package/dist/esm/co-tab-group.entry.js +3 -3
- package/dist/esm/co-tab.entry.js +3 -3
- package/dist/esm/co-tags-field.entry.js +8 -8
- package/dist/esm/co-textarea.entry.js +6 -6
- package/dist/esm/co-time-field.entry.js +323 -0
- package/dist/esm/co-toast.entry.js +2 -2
- package/dist/esm/co-toggle-button-group.entry.js +4 -4
- package/dist/esm/co-toggle-button.entry.js +4 -4
- package/dist/esm/co-transfer-list.entry.js +1 -1
- package/dist/esm/co-video.entry.js +32 -7
- package/dist/esm/cobalt.js +3 -3
- package/dist/esm/color-BRbgGqLw.js +136 -0
- package/dist/esm/{dateI18n-CnNpoKwg.js → dateI18n-jYd9gu_c.js} +36 -0
- package/dist/esm/{fieldChip-DsAfq1e0.js → fieldChip-uyggU8VV.js} +1 -1
- package/dist/esm/fileI18n-gKnOhsd2.js +84 -0
- package/dist/esm/{index-RuXxdKzC.js → index-68iUQp5j.js} +28 -10
- package/dist/esm/{index-CrtiywTB.js → index-DH5lfRNj.js} +25 -21
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{positioning-BMdapAL8.js → positioning-DFHRS9cJ.js} +32 -13
- package/dist/esm/{requiredMark-DCD-ZA51.js → requiredMark-BCJUuZvC.js} +1 -1
- package/dist/esm/{toolbar-config-WeuPA9Rw.js → toolbar-config-DOL2zACE.js} +10 -0
- package/dist/types/components/co-badge/co-badge.d.ts +7 -0
- package/dist/types/components/co-checkbox/co-checkbox.d.ts +1 -1
- package/dist/types/components/co-color-picker/co-color-picker.d.ts +358 -4
- package/dist/types/components/co-color-picker/presets.d.ts +107 -4
- package/dist/types/components/co-date-time-picker/co-date-time-picker.d.ts +43 -21
- package/dist/types/components/co-drawer/co-drawer.d.ts +4 -3
- package/dist/types/components/co-file-field/co-file-field.d.ts +14 -0
- package/dist/types/components/co-file-field/co-file-field.utils.d.ts +18 -1
- package/dist/types/components/co-icon-button/co-icon-button.d.ts +9 -0
- package/dist/types/components/co-input/co-input.d.ts +4 -0
- package/dist/types/components/co-lightbox/co-lightbox.d.ts +60 -4
- package/dist/types/components/co-menu-item/co-menu-item.d.ts +16 -0
- package/dist/types/components/co-number-field/co-number-field.d.ts +42 -1
- package/dist/types/components/co-option-list/co-option-list.d.ts +3 -0
- package/dist/types/components/co-overlay/co-overlay.d.ts +4 -2
- package/dist/types/components/co-popover/co-popover.d.ts +16 -0
- package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +1 -1
- package/dist/types/components/co-skeleton/co-skeleton.d.ts +13 -0
- package/dist/types/components/co-time-field/co-time-field.d.ts +60 -0
- package/dist/types/components/co-tooltip/co-tooltip.d.ts +5 -0
- package/dist/types/components/co-video/co-video.d.ts +4 -0
- package/dist/types/components.d.ts +451 -87
- package/dist/types/utils/amountText.d.ts +34 -0
- package/dist/types/utils/color.d.ts +44 -1
- package/dist/types/utils/colorPickerI18n.d.ts +26 -0
- package/dist/types/utils/dateI18n.d.ts +12 -0
- package/dist/types/utils/fileI18n.d.ts +1 -0
- package/dist/types/utils/positioning.d.ts +10 -0
- package/dist/types/utils/submenu.d.ts +44 -0
- package/package.json +3 -3
- package/dist/cjs/color-YhUkm10t.js +0 -32
- package/dist/cjs/time-LBHtzLHe.js +0 -42
- package/dist/cobalt/p-07904986.entry.js +0 -1
- package/dist/cobalt/p-09799193.entry.js +0 -1
- package/dist/cobalt/p-17ae943c.entry.js +0 -1
- package/dist/cobalt/p-23a103a0.entry.js +0 -1
- package/dist/cobalt/p-2f88d151.entry.js +0 -1
- package/dist/cobalt/p-3495fda1.entry.js +0 -1
- package/dist/cobalt/p-409f28bb.entry.js +0 -1
- package/dist/cobalt/p-682b3313.entry.js +0 -1
- package/dist/cobalt/p-6bf814f9.entry.js +0 -1
- package/dist/cobalt/p-7c88163e.entry.js +0 -1
- package/dist/cobalt/p-7cf4b4ae.entry.js +0 -1
- package/dist/cobalt/p-7ea87b75.entry.js +0 -1
- package/dist/cobalt/p-8183f56f.entry.js +0 -1
- package/dist/cobalt/p-8345b25f.entry.js +0 -1
- package/dist/cobalt/p-8b4b3589.entry.js +0 -1
- package/dist/cobalt/p-983af614.entry.js +0 -1
- package/dist/cobalt/p-BG4WRR22.js +0 -1
- package/dist/cobalt/p-BMdapAL8.js +0 -1
- package/dist/cobalt/p-CF8OB_TM.js +0 -1
- package/dist/cobalt/p-CnNpoKwg.js +0 -1
- package/dist/cobalt/p-T4la7ly_.js +0 -1
- package/dist/cobalt/p-a2d31248.entry.js +0 -1
- package/dist/cobalt/p-a6b5cadd.entry.js +0 -1
- package/dist/cobalt/p-b8581787.entry.js +0 -1
- package/dist/cobalt/p-bcedbd73.entry.js +0 -1
- package/dist/cobalt/p-d40a465f.entry.js +0 -1
- package/dist/cobalt/p-dea43204.entry.js +0 -1
- package/dist/cobalt/p-dfcf667d.entry.js +0 -1
- package/dist/cobalt/p-e6882ddd.entry.js +0 -1
- package/dist/cobalt/p-e84eda2e.entry.js +0 -1
- package/dist/cobalt/p-f25967fb.entry.js +0 -1
- package/dist/cobalt/p-f5f1b463.entry.js +0 -1
- package/dist/cobalt/p-fd39f410.entry.js +0 -1
- package/dist/cobalt/p-mAGnZXRn.js +0 -1
- package/dist/components/p-BMdapAL8.js +0 -1
- package/dist/components/p-BTQEg3UO.js +0 -1
- package/dist/components/p-BZIB4JDs.js +0 -1
- package/dist/components/p-Bbny3WUc.js +0 -1
- package/dist/components/p-C1Kv3zYZ.js +0 -1
- package/dist/components/p-CF8OB_TM.js +0 -1
- package/dist/components/p-CR0izsJC.js +0 -1
- package/dist/components/p-CnNpoKwg.js +0 -1
- package/dist/components/p-DP0bbhfN.js +0 -1
- package/dist/components/p-DbipMAyT.js +0 -1
- package/dist/components/p-DgUBcJIS.js +0 -1
- package/dist/components/p-DolCkNsL.js +0 -1
- package/dist/components/p-gI62K3Be.js +0 -1
- package/dist/components/p-hfGFsvaD.js +0 -1
- package/dist/esm/color-BG4WRR22.js +0 -30
- 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 {
|
|
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
|
|
11
|
-
*
|
|
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
|
|
25
|
-
*
|
|
26
|
-
*
|
|
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
|
-
* -
|
|
29
|
-
*
|
|
30
|
-
*
|
|
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
|
|
33
|
-
* the field; outside-click
|
|
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
|
-
/**
|
|
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
|
|
73
|
-
this.
|
|
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
|
|
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
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
this.commit(dayKey,
|
|
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.
|
|
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.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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') →
|
|
164
|
+
this.open = true; // triggers @Watch('open') → seeds the draft hour
|
|
174
165
|
this.coOpen.emit();
|
|
175
166
|
}
|
|
176
167
|
};
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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:
|
|
209
|
-
this.
|
|
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
|
-
// ──
|
|
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
|
|
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: (
|
|
348
|
-
'
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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: '
|
|
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:
|
|
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: '
|
|
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": "
|
|
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
|
-
"
|
|
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 (
|
|
1038
|
-
//
|
|
1039
|
-
//
|
|
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
|
-
/*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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-
|
|
24
|
-
--co-sq-
|
|
25
|
-
--co-sq-
|
|
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:
|
|
87
|
-
(
|
|
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 ──────────────────────────────────────────────── */
|