@prolibu-suite/cobalt-core 0.9.6 → 0.10.1
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 +1125 -89
- package/dist/cjs/co-accordion.cjs.entry.js +5 -5
- package/dist/cjs/co-action-bar.cjs.entry.js +2 -2
- package/dist/cjs/co-app-shell.cjs.entry.js +4 -4
- package/dist/cjs/co-audio-player.cjs.entry.js +83 -13
- 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.cjs.entry.js +72 -0
- 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 +68 -13
- package/dist/cjs/co-color-picker.cjs.entry.js +1078 -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 +83 -5
- 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 +32 -6
- 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 +85 -4
- package/dist/cjs/co-menu.cjs.entry.js +2 -2
- package/dist/cjs/co-modal.cjs.entry.js +10 -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 +104 -13
- 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 +6 -6
- 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-avatar_2.cjs.entry.js → co-tooltip.cjs.entry.js} +48 -84
- 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} +35 -27
- 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-bfc2a849.entry.js → p-000a15b8.entry.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-0e91e5c4.entry.js → p-148d4aa6.entry.js} +1 -1
- package/dist/cobalt/{p-07d570a6.entry.js → p-16954cea.entry.js} +1 -1
- package/dist/cobalt/{p-d40a465f.entry.js → p-16f8cee6.entry.js} +1 -1
- package/dist/cobalt/{p-85a61e28.entry.js → p-17244412.entry.js} +1 -1
- package/dist/cobalt/{p-da546d08.entry.js → p-1dc55e43.entry.js} +1 -1
- package/dist/cobalt/p-239c5c5f.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-dca4cd5f.entry.js → p-28764b8e.entry.js} +1 -1
- package/dist/cobalt/{p-18d34b01.entry.js → p-290066ef.entry.js} +1 -1
- package/dist/cobalt/p-2a30c143.entry.js +1 -0
- package/dist/cobalt/p-2f0f3bb1.entry.js +1 -0
- package/dist/cobalt/{p-89e38c5e.entry.js → p-2f9cbbd5.entry.js} +1 -1
- package/dist/cobalt/p-2fba312b.entry.js +1 -0
- package/dist/cobalt/p-354d5089.entry.js +1 -0
- package/dist/cobalt/{p-60cb66f5.entry.js → p-37f5036b.entry.js} +1 -1
- package/dist/cobalt/{p-ac91259e.entry.js → p-383a998e.entry.js} +1 -1
- package/dist/cobalt/{p-ef5e1167.entry.js → p-3c4f7026.entry.js} +1 -1
- package/dist/cobalt/p-410bee4d.entry.js +1 -0
- package/dist/cobalt/p-416795f5.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-342e1da4.entry.js → p-4d65e713.entry.js} +1 -1
- 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-5a3e4c81.entry.js +1 -0
- package/dist/cobalt/p-5adf117c.entry.js +1 -0
- package/dist/cobalt/{p-23b3ff3f.entry.js → p-5ca394b1.entry.js} +1 -1
- package/dist/cobalt/p-5e4973a6.entry.js +1 -0
- package/dist/cobalt/{p-2d329ac8.entry.js → p-623cc195.entry.js} +1 -1
- package/dist/cobalt/{p-8e667eb6.entry.js → p-66b11b38.entry.js} +1 -1
- package/dist/cobalt/{p-7e53e9c8.entry.js → p-6c82a892.entry.js} +1 -1
- package/dist/cobalt/{p-a6357340.entry.js → p-76249983.entry.js} +1 -1
- package/dist/cobalt/{p-568cfe8d.entry.js → p-789c4b3e.entry.js} +1 -1
- package/dist/cobalt/p-7e8e6907.entry.js +1 -0
- package/dist/cobalt/{p-a9b29cc2.entry.js → p-826ee074.entry.js} +1 -1
- package/dist/cobalt/{p-1c68bc41.entry.js → p-8471abe2.entry.js} +1 -1
- package/dist/cobalt/p-8f2199ff.entry.js +1 -0
- package/dist/cobalt/{p-c8dba82f.entry.js → p-91e73a92.entry.js} +1 -1
- package/dist/cobalt/p-9246e09c.entry.js +1 -0
- package/dist/cobalt/{p-c1e7fb32.entry.js → p-93fe45fd.entry.js} +1 -1
- package/dist/cobalt/{p-8f38e24d.entry.js → p-95cfcb34.entry.js} +1 -1
- package/dist/cobalt/{p-36197363.entry.js → p-996f4e38.entry.js} +1 -1
- package/dist/cobalt/{p-c5684c79.entry.js → p-9cf738ed.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-a2462d7a.entry.js +1 -0
- package/dist/cobalt/p-a325ea0c.entry.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-b0c4fc71.entry.js +1 -0
- package/dist/cobalt/p-b5bba7fe.entry.js +1 -0
- package/dist/cobalt/{p-fb3a095b.entry.js → p-b821d9de.entry.js} +1 -1
- package/dist/cobalt/{p-b0319a2d.entry.js → p-b90d41e4.entry.js} +1 -1
- package/dist/cobalt/{p-ac466658.entry.js → p-be34e447.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-54ae807d.entry.js → p-c465d619.entry.js} +1 -1
- package/dist/cobalt/p-c7d7d7f7.entry.js +1 -0
- package/dist/cobalt/{p-ab45d9bd.entry.js → p-c91d4fc6.entry.js} +1 -1
- package/dist/cobalt/{p-e5495539.entry.js → p-d0b2c418.entry.js} +1 -1
- package/dist/cobalt/{p-ce35c898.entry.js → p-d29bb0fa.entry.js} +1 -1
- package/dist/cobalt/{p-33ea4a90.entry.js → p-d3344187.entry.js} +1 -1
- package/dist/cobalt/p-d375014b.entry.js +1 -0
- package/dist/cobalt/p-d9d9e8ae.entry.js +1 -0
- package/dist/cobalt/{p-7c5e846a.entry.js → p-db805569.entry.js} +1 -1
- package/dist/cobalt/p-e371ec7a.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-3f0eed59.entry.js → p-e49a564c.entry.js} +1 -1
- package/dist/cobalt/p-e8a2f993.entry.js +1 -0
- package/dist/cobalt/p-eadfd661.entry.js +1 -0
- 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-ef301976.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-fMqVDypp.js +1 -0
- package/dist/cobalt/p-fb2d1144.entry.js +1 -0
- package/dist/cobalt/{p-0c463d9a.entry.js → p-fd150cc6.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-accordion/co-accordion.css +2 -2
- package/dist/collection/components/co-accordion/co-accordion.js +4 -4
- package/dist/collection/components/co-action-bar/co-action-bar.css +9 -2
- 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-audio-player/co-audio-player.js +138 -12
- 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 +10 -7
- package/dist/collection/components/co-checkbox/co-checkbox.css +12 -3
- package/dist/collection/components/co-checkbox/co-checkbox.js +25 -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 +962 -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.css +63 -2
- package/dist/collection/components/co-data-table/co-data-table.js +59 -4
- package/dist/collection/components/co-data-table/headerTruncationLogic.js +34 -0
- 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 +42 -7
- 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.css +9 -0
- package/dist/collection/components/co-menu-item/co-menu-item.js +67 -3
- package/dist/collection/components/co-modal/co-modal.css +112 -37
- package/dist/collection/components/co-modal/co-modal.js +35 -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 +56 -4
- package/dist/collection/components/co-option-list/optionListLogic.js +31 -8
- 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.css +40 -0
- package/dist/collection/components/co-ref-field/co-ref-field.js +207 -11
- 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 +24 -5
- 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 +20 -14
- 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 +14 -4
- package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +2 -2
- package/dist/collection/components/co-tooltip/co-tooltip.css +12 -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-7TncUlLN.js +1 -0
- package/dist/components/p-B4NCaKrR.js +1 -0
- package/dist/components/p-B9xitpGU.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-BL0sCfMH.js → p-Bryf3-Js.js} +1 -1
- package/dist/components/{p-D6OUW6oW.js → p-CBTGN490.js} +1 -1
- package/dist/components/{p-P8wvwhM2.js → p-CFFDmGPS.js} +1 -1
- package/dist/components/p-CLsAo0-A.js +1 -0
- package/dist/components/{p-CA_JAK9s.js → p-CT2enQ6h.js} +1 -1
- package/dist/components/p-D2ldYZo1.js +1 -0
- package/dist/components/{p-CuZXTvDM.js → p-D3mVYO-G.js} +1 -1
- package/dist/components/p-DDV_bRcU.js +1 -0
- package/dist/components/p-DFHRS9cJ.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-DSnJWzQw.js +1 -0
- package/dist/components/p-DTi2O4O8.js +1 -0
- package/dist/components/p-De7w9k6_.js +1 -0
- package/dist/components/{p-D5EdMieb.js → p-DoHLTC0n.js} +1 -1
- package/dist/components/{p-Bxk96Zgc.js → p-Du_CgT5E.js} +1 -1
- package/dist/components/p-DxtNejr2.js +1 -0
- 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-wjt4IAGZ.js +1 -0
- package/dist/components/p-zuhal3IZ.js +1 -0
- package/dist/esm/co-accordion.entry.js +5 -5
- package/dist/esm/co-action-bar.entry.js +2 -2
- package/dist/esm/co-app-shell.entry.js +4 -4
- package/dist/esm/co-audio-player.entry.js +83 -13
- package/dist/esm/co-autocomplete.entry.js +2 -2
- package/dist/esm/co-avatar-group.entry.js +1 -1
- package/dist/esm/co-avatar.entry.js +70 -0
- 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 +68 -13
- package/dist/esm/co-color-picker.entry.js +1078 -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 +83 -5
- 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 +32 -6
- 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 +85 -4
- package/dist/esm/co-menu.entry.js +2 -2
- package/dist/esm/co-modal.entry.js +10 -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 +104 -13
- 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 +6 -6
- 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-avatar_2.entry.js → co-tooltip.entry.js} +49 -84
- 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} +35 -27
- 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-accordion/co-accordion.d.ts +6 -0
- package/dist/types/components/co-audio-player/co-audio-player.d.ts +25 -0
- package/dist/types/components/co-badge/co-badge.d.ts +7 -0
- package/dist/types/components/co-checkbox/co-checkbox.d.ts +5 -1
- package/dist/types/components/co-color-picker/co-color-picker.d.ts +360 -4
- package/dist/types/components/co-color-picker/presets.d.ts +107 -4
- package/dist/types/components/co-data-table/co-data-table.d.ts +15 -0
- package/dist/types/components/co-data-table/headerTruncationLogic.d.ts +24 -0
- 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 +9 -1
- 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-modal/co-modal.d.ts +10 -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 +16 -0
- package/dist/types/components/co-option-list/optionListLogic.d.ts +23 -6
- 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-ref-field/co-ref-field.d.ts +38 -0
- package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +1 -1
- package/dist/types/components/co-select/co-select.d.ts +6 -0
- 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 +530 -90
- 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-7532c739.entry.js +0 -1
- package/dist/cobalt/p-76420ac1.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-93c68029.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-a8c64cc3.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-da18b5f4.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-dfd25f1d.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-Bbny3WUc.js +0 -1
- package/dist/components/p-Bz0QZqnB.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-DI1ek0EB.js +0 -1
- package/dist/components/p-DP0bbhfN.js +0 -1
- package/dist/components/p-D_9BRkj6.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-hfGFsvaD.js +0 -1
- package/dist/esm/color-BG4WRR22.js +0 -30
- package/dist/esm/time-CF8OB_TM.js +0 -37
|
@@ -1,60 +1,128 @@
|
|
|
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
|
/* Frosted-glass backdrop for modals — stronger blur than the overlay default
|
|
4
|
-
so the page behind reads as glass, while the panel itself stays solid.
|
|
89
|
+
so the page behind reads as glass, while the panel itself stays solid.
|
|
90
|
+
(Scrim sin cambios: E3.) */
|
|
5
91
|
--co-overlay-blur: 8px;
|
|
6
92
|
--co-overlay-bg: rgba(31, 28, 27, 0.35);
|
|
7
93
|
}
|
|
8
94
|
|
|
9
|
-
/* Frame:
|
|
10
|
-
|
|
11
|
-
|
|
95
|
+
/* Frame: co-overlay lo centra. En el fallback (Safari/Firefox) lleva el
|
|
96
|
+
drop-shadow (.co-sq-elevation-fallback, tsx); en Chromium ≥139 la sombra va
|
|
97
|
+
en .co-modal como box-shadow, así acompaña el scale-in 0.96→1 exactamente
|
|
98
|
+
como el drop-shadow acompañaba el alfa del hijo. `contain: layout` preserva
|
|
99
|
+
el containing block que el filter le daba a un `position: fixed` slotteado
|
|
100
|
+
(E20, extensión de E2) y saca al frame del rol de render surface. */
|
|
12
101
|
.co-modal__frame {
|
|
13
102
|
display: flex;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
drop-shadow(0 14px 34px rgba(31, 28, 27, 0.16));
|
|
103
|
+
contain: layout;
|
|
104
|
+
--co-sq-drop-shadow: drop-shadow(0 1px 2px rgba(31, 28, 27, 0.06)) drop-shadow(0 14px 34px rgba(31, 28, 27, 0.16));
|
|
17
105
|
}
|
|
18
106
|
|
|
19
107
|
.co-modal {
|
|
20
108
|
display: flex;
|
|
21
109
|
flex-direction: column;
|
|
22
110
|
background: var(--co-semantic-surface-secondary);
|
|
23
|
-
/* Squircle
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
exact abutment the fractional-pixel rounding leaves a <1px transparent SEAM
|
|
27
|
-
at the bar↔corner edge that reads as a faint line flickering with zoom (same
|
|
28
|
-
fix as co-app-shell .main__card). The overlap is inside the corners' opaque
|
|
29
|
-
area, so the rounded shape is unchanged. */
|
|
111
|
+
/* Squircle + sombra: .co-sq-clip y .co-sq-elevation en ESTE elemento
|
|
112
|
+
(partial). No redeclarar border-radius / overflow / mask / box-shadow acá.
|
|
113
|
+
Radius knob: --co-modal-r. */
|
|
30
114
|
--co-modal-r: var(--co-border-radius-xl);
|
|
31
|
-
--co-sq-
|
|
32
|
-
--co-sq-
|
|
33
|
-
--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>");
|
|
34
|
-
--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>");
|
|
35
|
-
-webkit-mask:
|
|
36
|
-
var(--co-sq-tl) top left / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
37
|
-
var(--co-sq-tr) top right / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
38
|
-
var(--co-sq-bl) bottom left / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
39
|
-
var(--co-sq-br) bottom right / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
40
|
-
linear-gradient(#fff 0 0) center / 100% calc(100% - 2 * var(--co-modal-r) + 2px) no-repeat,
|
|
41
|
-
linear-gradient(#fff 0 0) center / calc(100% - 2 * var(--co-modal-r) + 2px) 100% no-repeat;
|
|
42
|
-
mask:
|
|
43
|
-
var(--co-sq-tl) top left / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
44
|
-
var(--co-sq-tr) top right / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
45
|
-
var(--co-sq-bl) bottom left / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
46
|
-
var(--co-sq-br) bottom right / var(--co-modal-r) var(--co-modal-r) no-repeat,
|
|
47
|
-
linear-gradient(#fff 0 0) center / 100% calc(100% - 2 * var(--co-modal-r) + 2px) no-repeat,
|
|
48
|
-
linear-gradient(#fff 0 0) center / calc(100% - 2 * var(--co-modal-r) + 2px) 100% no-repeat;
|
|
49
|
-
border-radius: 0; /* the mask defines the (smooth) shape */
|
|
115
|
+
--co-sq-r: var(--co-modal-r);
|
|
116
|
+
--co-sq-shadow: 0 1px 4px rgba(31, 28, 27, 0.06), 0 14px 68px rgba(31, 28, 27, 0.16);
|
|
50
117
|
max-width: 540px;
|
|
51
118
|
width: 90vw;
|
|
52
119
|
max-height: 80vh;
|
|
53
|
-
overflow: hidden;
|
|
54
120
|
font-family: var(--co-font-family-primary);
|
|
55
|
-
transform:
|
|
121
|
+
transform: scale(0.96);
|
|
56
122
|
opacity: 0;
|
|
57
|
-
|
|
123
|
+
/* Asimetría tdev: esta transición es la de SALIDA (el estado base es el destino
|
|
124
|
+
del cierre) — más corta y ease-in. La de entrada vive en --open. */
|
|
125
|
+
transition: transform var(--co-motion-duration-fast) var(--co-motion-ease-in), opacity var(--co-motion-duration-fast) var(--co-motion-ease-in);
|
|
58
126
|
}
|
|
59
127
|
|
|
60
128
|
.co-modal--sm { max-width: 400px; }
|
|
@@ -78,8 +146,9 @@
|
|
|
78
146
|
}
|
|
79
147
|
|
|
80
148
|
.co-modal--open {
|
|
81
|
-
transform:
|
|
149
|
+
transform: scale(1);
|
|
82
150
|
opacity: 1;
|
|
151
|
+
transition: transform var(--co-motion-duration-base) var(--co-motion-ease-out), opacity var(--co-motion-duration-base) var(--co-motion-ease-out);
|
|
83
152
|
}
|
|
84
153
|
|
|
85
154
|
/* ─── Header ────────────────────────────────────────────────── */
|
|
@@ -165,3 +234,9 @@
|
|
|
165
234
|
.co-modal--no-dividers .co-modal__footer {
|
|
166
235
|
border-top: none;
|
|
167
236
|
}
|
|
237
|
+
|
|
238
|
+
/* header-divider="false": the body runs straight under the heading. */
|
|
239
|
+
.co-modal--no-header-divider .co-modal__body {
|
|
240
|
+
border-top: none;
|
|
241
|
+
padding-top: 0;
|
|
242
|
+
}
|
|
@@ -3,7 +3,14 @@ import { afterEventFor } from "../co-overlay/overlayAfterClose";
|
|
|
3
3
|
import { slotHasContent } from "../../utils/slotContent";
|
|
4
4
|
/**
|
|
5
5
|
* @slot - Modal body content
|
|
6
|
+
* @slot header-leading - Control before the heading (e.g. a back arrow on a
|
|
7
|
+
* second screen of the same modal)
|
|
8
|
+
* @slot header-actions - Controls at the right end of the header (e.g. a settings
|
|
9
|
+
* icon-button), before the close button
|
|
6
10
|
* @slot footer - Footer with action buttons
|
|
11
|
+
* @part modal | header | header-text | heading | description | body | footer -
|
|
12
|
+
* layout/typography hooks for a consumer that must match a specific spec
|
|
13
|
+
* (paddings, heading weight); colors stay on semantic tokens
|
|
7
14
|
*/
|
|
8
15
|
export class CoModal {
|
|
9
16
|
constructor() {
|
|
@@ -36,6 +43,9 @@ export class CoModal {
|
|
|
36
43
|
this.size = 'md';
|
|
37
44
|
/** Hide body section and all border dividers (compact confirm dialogs) */
|
|
38
45
|
this.noDividers = false;
|
|
46
|
+
/** Hairline between header and body. `false` lets the body run straight
|
|
47
|
+
* under the heading (Figma modals whose first row is a segmented control). */
|
|
48
|
+
this.headerDivider = true;
|
|
39
49
|
/* `:empty` can't see across a <slot>, so slotted presence is tracked in JS */
|
|
40
50
|
this.hasFooter = false;
|
|
41
51
|
this.handleFooterSlotChange = (e) => {
|
|
@@ -68,14 +78,17 @@ export class CoModal {
|
|
|
68
78
|
this.coClose.emit();
|
|
69
79
|
}
|
|
70
80
|
render() {
|
|
71
|
-
return (h("co-overlay", { key: '
|
|
81
|
+
return (h("co-overlay", { key: '9b796364a697af4d4a0ede50e5dd5516ccaa299f', open: this.open, onCoClose: this.handleOverlayClick }, h("div", { key: 'bea863aedb405cdc492277add25e2c08ea7ef258', class: "co-modal__frame co-sq-elevation-fallback" }, h("div", { key: '05f9e86f7a813243913f60c6a042fb93ed65a463', class: {
|
|
72
82
|
'co-modal': true,
|
|
83
|
+
'co-sq-clip': true,
|
|
84
|
+
'co-sq-elevation': true,
|
|
73
85
|
'co-modal--open': this.open,
|
|
74
86
|
'co-modal--sm': this.size === 'sm',
|
|
75
87
|
'co-modal--lg': this.size === 'lg',
|
|
76
88
|
'co-modal--full': this.size === 'full',
|
|
77
89
|
'co-modal--no-dividers': this.noDividers,
|
|
78
|
-
|
|
90
|
+
'co-modal--no-header-divider': !this.headerDivider,
|
|
91
|
+
}, part: "modal", ref: (el) => (this.modalEl = el), role: "dialog", "aria-modal": "true", "aria-labelledby": this.heading ? 'modal-heading' : undefined, onClick: this.stopPropagation, onTransitionEnd: this.handleTransitionEnd }, h("div", { key: '8ecd9f7f4413339e484710e2abef1c21fc7f25d0', class: "co-modal__header", part: "header" }, h("slot", { key: '09df61b3aac8a26e0eb85a6a6aa48f9a7f547dbf', name: "header-leading" }), h("div", { key: '8e9a55561a1b5615f77eb3eb96284ddc68eddbc3', class: "co-modal__header-text", part: "header-text" }, h("h2", { key: '65c083247543448d9f527592cd8614a4c713cf4c', class: "co-modal__heading", part: "heading", id: "modal-heading" }, this.heading), this.description && (h("p", { key: 'c871aa6549cf56265a02048ca18f736d92d1a482', class: "co-modal__description", part: "description" }, this.description))), h("slot", { key: '106a5be71c8c03736313c1084c61d3b836ebb495', name: "header-actions" }), this.closable && (h("button", { key: 'a0df67cd09e5f414c58f9f67f6a92c58b9f4773b', class: "co-modal__close", type: "button", "aria-label": "Close", onClick: this.handleCloseClick }, h("co-icon", { key: 'e766981fff30de0c79599756dde74c5981d5c9fd', name: "x", size: 20 })))), !this.noDividers && (h("div", { key: '355e455c19cbc4a0783c0e0c2689265e6f599484', class: "co-modal__body", part: "body" }, h("slot", { key: 'fa6d3310464ff33de17618561182736bc6cef0e5' }))), h("div", { key: '43b89751fac3fd1b707a284d260e91dd7d7ea8a6', class: { 'co-modal__footer': true, 'co-modal__footer--empty': !this.hasFooter }, part: "footer" }, h("slot", { key: 'e9821b0712a6903c923f9bb50393e4b85545c211', name: "footer", onSlotchange: this.handleFooterSlotChange }))))));
|
|
79
92
|
}
|
|
80
93
|
static get is() { return "co-modal"; }
|
|
81
94
|
static get encapsulation() { return "shadow"; }
|
|
@@ -249,6 +262,26 @@ export class CoModal {
|
|
|
249
262
|
"reflect": true,
|
|
250
263
|
"attribute": "no-dividers",
|
|
251
264
|
"defaultValue": "false"
|
|
265
|
+
},
|
|
266
|
+
"headerDivider": {
|
|
267
|
+
"type": "boolean",
|
|
268
|
+
"mutable": false,
|
|
269
|
+
"complexType": {
|
|
270
|
+
"original": "boolean",
|
|
271
|
+
"resolved": "boolean",
|
|
272
|
+
"references": {}
|
|
273
|
+
},
|
|
274
|
+
"required": false,
|
|
275
|
+
"optional": false,
|
|
276
|
+
"docs": {
|
|
277
|
+
"tags": [],
|
|
278
|
+
"text": "Hairline between header and body. `false` lets the body run straight\nunder the heading (Figma modals whose first row is a segmented control)."
|
|
279
|
+
},
|
|
280
|
+
"getter": false,
|
|
281
|
+
"setter": false,
|
|
282
|
+
"reflect": false,
|
|
283
|
+
"attribute": "header-divider",
|
|
284
|
+
"defaultValue": "true"
|
|
252
285
|
}
|
|
253
286
|
};
|
|
254
287
|
}
|
|
@@ -32,8 +32,10 @@
|
|
|
32
32
|
.co-navbar--dark {
|
|
33
33
|
--co-navbar-bg: var(--co-theme-navbar-bg, var(--co-color-base-negro, #1F1C1B));
|
|
34
34
|
--co-navbar-color: var(--co-theme-on-navbar, #fff);
|
|
35
|
-
backdrop-filter:
|
|
36
|
-
|
|
35
|
+
/* Sin backdrop-filter (D3): --co-navbar-bg es OPACO (los hosts pasan un hex
|
|
36
|
+
sólido) → blur(40px) no esmerilaba nada y costaba un render surface del
|
|
37
|
+
ancho del viewport en cada frame. Un host translúcido que quiera frost lo
|
|
38
|
+
agrega él vía ::part(navbar). */
|
|
37
39
|
/* Override icon-button outlined variant for dark context */
|
|
38
40
|
--co-icon-button-bg: var(--co-theme-on-navbar-surface, var(--co-color-opacity-blanco-16, rgba(255,255,255,0.16)));
|
|
39
41
|
--co-icon-button-color: var(--co-theme-on-navbar, #fff);
|
|
@@ -14,12 +14,12 @@ export class CoNavbar {
|
|
|
14
14
|
this.rounded = false;
|
|
15
15
|
}
|
|
16
16
|
render() {
|
|
17
|
-
return (h("div", { key: '
|
|
17
|
+
return (h("div", { key: '9899b395fdf793bf9b7e47509b81eb559aac0b56', class: {
|
|
18
18
|
'co-navbar': true,
|
|
19
19
|
[`co-navbar--${this.variant}`]: true,
|
|
20
20
|
[`co-navbar--${this.size}`]: true,
|
|
21
21
|
'co-navbar--rounded': this.rounded,
|
|
22
|
-
}, part: "navbar", role: "toolbar" }, h("slot", { key: '
|
|
22
|
+
}, part: "navbar", role: "toolbar" }, h("slot", { key: 'c863bcf8dc9eddab771922a81e11c1966bfe8d2e' })));
|
|
23
23
|
}
|
|
24
24
|
static get is() { return "co-navbar"; }
|
|
25
25
|
static get encapsulation() { return "shadow"; }
|
|
@@ -177,6 +177,28 @@
|
|
|
177
177
|
user-select: none;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
+
/* Control slotteado a la derecha (toggle de unidad, etc.): flex-shrink 0 y un
|
|
181
|
+
respiro contra el borde de la caja; verticalmente lo centra el row. */
|
|
182
|
+
::slotted([slot='suffix']) {
|
|
183
|
+
flex-shrink: 0;
|
|
184
|
+
margin-right: var(--co-spacing-xxs);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* hide-controls: campo numérico plano (precio, tasa) — sin ± el número se
|
|
188
|
+
alinea a la derecha como en cualquier columna numérica y el padding lateral
|
|
189
|
+
es el de co-input. */
|
|
190
|
+
:host([hide-controls]) .co-number-field__input {
|
|
191
|
+
text-align: right;
|
|
192
|
+
padding-left: var(--co-spacing-md);
|
|
193
|
+
padding-right: var(--co-spacing-md);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
:host([hide-controls]) .co-number-field__affix {
|
|
197
|
+
padding-right: var(--co-spacing-md);
|
|
198
|
+
font-size: var(--co-font-size-12);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
|
|
180
202
|
.co-number-field__input::-webkit-outer-spin-button,
|
|
181
203
|
.co-number-field__input::-webkit-inner-spin-button {
|
|
182
204
|
-webkit-appearance: none;
|
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { RequiredMark } from "../../utils/requiredMark";
|
|
3
|
+
import { formatAmountText, parseNumericText, stripAmountText } from "../../utils/amountText";
|
|
4
|
+
/**
|
|
5
|
+
* Todo lo que NO puede formar parte de un número escrito a mano. El input es
|
|
6
|
+
* `type="text"` a propósito (hace falta para pintar el valor formateado y el
|
|
7
|
+
* sufijo), y eso lo deja aceptar letras: sin este filtro, tipear "asd10" deja
|
|
8
|
+
* "asd10" A LA VISTA hasta que el blur repinta el valor canónico.
|
|
9
|
+
* No valida el número final —de eso se encargan `clamp()` y el repintado del
|
|
10
|
+
* blur—, solo impide que el campo muestre algo que no es un número.
|
|
11
|
+
*/
|
|
12
|
+
const NON_NUMERIC = /[^0-9.,-]/g;
|
|
13
|
+
/** Caracteres que CUENTAN para el caret en modo amount (la coma es decorado). */
|
|
14
|
+
const SIGNIFICANT = /[0-9.-]/;
|
|
15
|
+
const countSignificant = (text) => {
|
|
16
|
+
let count = 0;
|
|
17
|
+
for (const char of text)
|
|
18
|
+
if (SIGNIFICANT.test(char))
|
|
19
|
+
count++;
|
|
20
|
+
return count;
|
|
21
|
+
};
|
|
22
|
+
/** Posición del caret justo después de `count` caracteres significativos. */
|
|
23
|
+
const caretAfterSignificant = (text, count) => {
|
|
24
|
+
if (count <= 0)
|
|
25
|
+
return 0;
|
|
26
|
+
let seen = 0;
|
|
27
|
+
for (let i = 0; i < text.length; i++) {
|
|
28
|
+
if (SIGNIFICANT.test(text[i])) {
|
|
29
|
+
seen++;
|
|
30
|
+
if (seen === count)
|
|
31
|
+
return i + 1;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return text.length;
|
|
35
|
+
};
|
|
3
36
|
export class CoNumberField {
|
|
4
37
|
constructor() {
|
|
5
38
|
/** Whether the field is required (renders a required marker on the label). */
|
|
@@ -14,19 +47,46 @@ export class CoNumberField {
|
|
|
14
47
|
this.size = 'md';
|
|
15
48
|
/** Show clear button when the field has a value */
|
|
16
49
|
this.clearable = false;
|
|
50
|
+
/**
|
|
51
|
+
* Oculta los botones ± (campo numérico "plano": precio, tasa). Las flechas
|
|
52
|
+
* ↑↓ siguen escalonando. Reflejado para que el CSS del host lo lea.
|
|
53
|
+
*/
|
|
54
|
+
this.hideControls = false;
|
|
17
55
|
this.focused = false;
|
|
56
|
+
// Stepping/clear son mutaciones PROGRAMÁTICAS: con el campo enfocado ni el
|
|
57
|
+
// @Watch (guard `focused`) ni el vdom (que copia el texto vivo) repintan, así
|
|
58
|
+
// que cada path escribe el input él mismo — si no, ArrowUp emite y persiste
|
|
59
|
+
// valores que el usuario no ve hasta el blur.
|
|
18
60
|
this.handleDecrement = () => {
|
|
19
61
|
if (!this.canDecrement)
|
|
20
62
|
return;
|
|
21
63
|
this.emitValue(this.current - this.step);
|
|
64
|
+
this.syncInputText();
|
|
22
65
|
};
|
|
23
66
|
this.handleIncrement = () => {
|
|
24
67
|
if (!this.canIncrement)
|
|
25
68
|
return;
|
|
26
69
|
this.emitValue(this.current + this.step);
|
|
70
|
+
this.syncInputText();
|
|
27
71
|
};
|
|
28
72
|
this.handleInput = (e) => {
|
|
29
|
-
|
|
73
|
+
var _a;
|
|
74
|
+
const input = e.target;
|
|
75
|
+
if (this.isAmount) {
|
|
76
|
+
this.handleAmountInput(input);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
let raw = input.value;
|
|
80
|
+
// Descarta los caracteres imposibles al tipearlos y al pegar, conservando
|
|
81
|
+
// la posición del cursor (reescribir `value` la mandaría al final).
|
|
82
|
+
const cleaned = raw.replace(NON_NUMERIC, '');
|
|
83
|
+
if (cleaned !== raw) {
|
|
84
|
+
const caret = ((_a = input.selectionStart) !== null && _a !== void 0 ? _a : raw.length) - (raw.length - cleaned.length);
|
|
85
|
+
input.value = cleaned;
|
|
86
|
+
const next = caret < 0 ? 0 : caret;
|
|
87
|
+
input.setSelectionRange(next, next);
|
|
88
|
+
raw = cleaned;
|
|
89
|
+
}
|
|
30
90
|
if (raw === '') {
|
|
31
91
|
// Deleting all content clears the field (parity with the clear button),
|
|
32
92
|
// but only when clearing is enabled — otherwise keep prior behavior.
|
|
@@ -43,9 +103,50 @@ export class CoNumberField {
|
|
|
43
103
|
this.emitValue(this.fromDisplay(num));
|
|
44
104
|
}
|
|
45
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* Pegar en modo amount: el texto llega con el formato de DONDE se copió
|
|
108
|
+
* (es-CO `1.234,56`, en-US `1,234.56`, la app `$ 34,640.00`), así que se
|
|
109
|
+
* interpreta con la heurística de separadores ANTES de empalmarlo con lo que
|
|
110
|
+
* ya había en el campo. Sin el preventDefault, el navegador escribiría el
|
|
111
|
+
* texto crudo y `parseFloat` cortaría en la primera coma (commit silencioso
|
|
112
|
+
* de 1 al pegar "1,234.56").
|
|
113
|
+
*/
|
|
114
|
+
this.handlePaste = (e) => {
|
|
115
|
+
var _a, _b, _c, _d;
|
|
116
|
+
if (!this.isAmount)
|
|
117
|
+
return;
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
const input = e.target;
|
|
120
|
+
const text = (_b = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text')) !== null && _b !== void 0 ? _b : '';
|
|
121
|
+
let parsed = parseNumericText(text);
|
|
122
|
+
if (parsed && this.allowNegative && /^\s*-/.test(text))
|
|
123
|
+
parsed = `-${parsed}`;
|
|
124
|
+
const start = (_c = input.selectionStart) !== null && _c !== void 0 ? _c : input.value.length;
|
|
125
|
+
const end = (_d = input.selectionEnd) !== null && _d !== void 0 ? _d : start;
|
|
126
|
+
const before = stripAmountText(input.value.slice(0, start), this.allowNegative);
|
|
127
|
+
const after = stripAmountText(input.value.slice(end));
|
|
128
|
+
const spliced = stripAmountText(before + parsed + after, this.allowNegative);
|
|
129
|
+
const formatted = formatAmountText(spliced);
|
|
130
|
+
input.value = formatted;
|
|
131
|
+
const caret = caretAfterSignificant(formatted, countSignificant(before + parsed));
|
|
132
|
+
input.setSelectionRange(caret, caret);
|
|
133
|
+
if (spliced === '' || spliced === '-') {
|
|
134
|
+
if (spliced === '' && this.clearable) {
|
|
135
|
+
this.value = null;
|
|
136
|
+
this.coChange.emit(null);
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const num = parseFloat(spliced);
|
|
141
|
+
if (!isNaN(num))
|
|
142
|
+
this.emitValue(num);
|
|
143
|
+
};
|
|
46
144
|
this.handleClear = () => {
|
|
47
145
|
var _a;
|
|
48
146
|
this.value = null;
|
|
147
|
+
// En Safari el click NO roba el foco al botón → `focused` sigue true y sin
|
|
148
|
+
// esto el texto viejo quedaba pintado con el valor ya emitido en null.
|
|
149
|
+
this.syncInputText();
|
|
49
150
|
this.coClear.emit();
|
|
50
151
|
this.coChange.emit(null);
|
|
51
152
|
(_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
@@ -55,6 +156,10 @@ export class CoNumberField {
|
|
|
55
156
|
// Re-clamp on blur, but keep an empty field empty.
|
|
56
157
|
if (!this.isEmpty)
|
|
57
158
|
this.emitValue(this.value);
|
|
159
|
+
// Repinta el texto canónico: si el clamp devolvió el MISMO valor que ya
|
|
160
|
+
// tenía el prop (tipear "-20" sobre 0 con min 0), el @Watch no dispara y el
|
|
161
|
+
// input se quedaba con lo tipeado.
|
|
162
|
+
this.syncInputText();
|
|
58
163
|
};
|
|
59
164
|
this.handleFocus = () => {
|
|
60
165
|
this.focused = true;
|
|
@@ -81,9 +186,8 @@ export class CoNumberField {
|
|
|
81
186
|
onValueChange() {
|
|
82
187
|
if (!this.inputEl || this.focused)
|
|
83
188
|
return;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
this.inputEl.value = next;
|
|
189
|
+
if (this.inputEl.value !== this.displayValue)
|
|
190
|
+
this.inputEl.value = this.displayValue;
|
|
87
191
|
}
|
|
88
192
|
/** True when there is no numeric value (cleared / empty). */
|
|
89
193
|
get isEmpty() {
|
|
@@ -125,6 +229,21 @@ export class CoNumberField {
|
|
|
125
229
|
get scaled() {
|
|
126
230
|
return this.format === 'rate' || this.format === 'percent';
|
|
127
231
|
}
|
|
232
|
+
/** Whether the live money mask (thousands separators, paste parsing) is on. */
|
|
233
|
+
get isAmount() {
|
|
234
|
+
return this.format === 'amount';
|
|
235
|
+
}
|
|
236
|
+
/** El signo entra sólo cuando el rango lo admite (sin `min`, o `min` < 0). */
|
|
237
|
+
get allowNegative() {
|
|
238
|
+
return this.min === undefined || this.min < 0;
|
|
239
|
+
}
|
|
240
|
+
/** Texto canónico del input para el valor actual (formateado en amount). */
|
|
241
|
+
get displayValue() {
|
|
242
|
+
if (this.isEmpty)
|
|
243
|
+
return '';
|
|
244
|
+
const plain = String(this.toDisplay(this.value));
|
|
245
|
+
return this.isAmount ? formatAmountText(plain) : plain;
|
|
246
|
+
}
|
|
128
247
|
/** Stored decimal → shown number (0.15 → 15). toFixed avoids FP artifacts. */
|
|
129
248
|
toDisplay(v) {
|
|
130
249
|
return this.scaled ? Number((v * 100).toFixed(6)) : v;
|
|
@@ -138,14 +257,63 @@ export class CoNumberField {
|
|
|
138
257
|
this.value = clamped;
|
|
139
258
|
this.coChange.emit(clamped);
|
|
140
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Modo amount: en cada input se rearma el display desde los dígitos (miles
|
|
262
|
+
* con coma, coma tipeada descartada, sólo un punto) y el caret se restituye
|
|
263
|
+
* contando caracteres significativos — reescribir `value` lo mandaría al
|
|
264
|
+
* final. El punto colgante ("1,234.") sobrevive porque se reformatea el
|
|
265
|
+
* TEXTO, no el número parseado.
|
|
266
|
+
*/
|
|
267
|
+
handleAmountInput(input) {
|
|
268
|
+
var _a;
|
|
269
|
+
const raw = input.value;
|
|
270
|
+
const caret = (_a = input.selectionStart) !== null && _a !== void 0 ? _a : raw.length;
|
|
271
|
+
const significantBefore = countSignificant(raw.slice(0, caret));
|
|
272
|
+
const cleaned = stripAmountText(raw, this.allowNegative);
|
|
273
|
+
const formatted = formatAmountText(cleaned);
|
|
274
|
+
if (input.value !== formatted) {
|
|
275
|
+
input.value = formatted;
|
|
276
|
+
const next = caretAfterSignificant(formatted, significantBefore);
|
|
277
|
+
input.setSelectionRange(next, next);
|
|
278
|
+
}
|
|
279
|
+
if (cleaned === '') {
|
|
280
|
+
if (this.clearable) {
|
|
281
|
+
this.value = null;
|
|
282
|
+
this.coChange.emit(null);
|
|
283
|
+
}
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
if (cleaned === '-')
|
|
287
|
+
return;
|
|
288
|
+
const num = parseFloat(cleaned);
|
|
289
|
+
if (!isNaN(num))
|
|
290
|
+
this.emitValue(num);
|
|
291
|
+
}
|
|
292
|
+
syncInputText() {
|
|
293
|
+
if (!this.inputEl)
|
|
294
|
+
return;
|
|
295
|
+
if (this.inputEl.value !== this.displayValue)
|
|
296
|
+
this.inputEl.value = this.displayValue;
|
|
297
|
+
}
|
|
298
|
+
/** Texto del afijo: `suffix` explícito manda; si no, el "%" de los formatos escalados. */
|
|
299
|
+
get affixText() {
|
|
300
|
+
if (this.suffix !== undefined)
|
|
301
|
+
return this.suffix || null;
|
|
302
|
+
return this.scaled && !this.isEmpty ? '%' : null;
|
|
303
|
+
}
|
|
141
304
|
render() {
|
|
142
|
-
return (h("div", { key: '
|
|
305
|
+
return (h("div", { key: '1bcd7e60596bc28f5159f86a026d69d0d053f038', class: {
|
|
143
306
|
'co-number-field': true,
|
|
144
307
|
'co-number-field--disabled': this.disabled,
|
|
145
308
|
'co-number-field--focused': this.focused,
|
|
146
309
|
[`co-number-field--${this.size}`]: true,
|
|
147
310
|
[`co-number-field--${this.status}`]: this.status !== 'default',
|
|
148
|
-
} }, (this.label || this.secondaryLabel) && (h("div", { key: '
|
|
311
|
+
} }, (this.label || this.secondaryLabel) && (h("div", { key: 'aca2d9958374940304e05495ae05e74d627154c7', class: "co-number-field__labels" }, this.label && h("label", { key: '8cf05675830ad181005430526785984acc793d0b', class: "co-number-field__label" }, this.label, h(RequiredMark, { key: '36aed2cf48890cf79506416d0c45f272ed329664', required: this.required })), this.secondaryLabel && h("span", { key: '636111436e1e3fff8d74fb4b9412c2192c93495a', class: "co-number-field__secondary-label" }, this.secondaryLabel))), h("div", { key: '6cbbb87a304cd9e415aafda276daede8dbe0b6a7', class: "co-number-field__row", part: "row" }, !this.hideControls && (h("button", { key: 'e11dfc41ee97b3287908877aa74f732a4cbe31fe', class: "co-number-field__btn co-number-field__btn--minus", type: "button", tabIndex: -1, disabled: !this.canDecrement, onClick: this.handleDecrement, "aria-label": "Decrease" }, h("co-icon", { key: '3f369b4d8293e9e987d18ba58fa1f010bd538016', name: "minus", size: 16 }))), h("input", { key: '8144b563cd4ae46774adbf224c45fa59378da4c7', ref: el => (this.inputEl = el), class: "co-number-field__input", type: "text", inputMode: "decimal",
|
|
312
|
+
// Mismo guard `focused` que el @Watch: mientras el usuario edita, su
|
|
313
|
+
// texto manda. Sin esto, el re-render que dispara emitValue repinta
|
|
314
|
+
// el input desde el NÚMERO y se come el texto en construcción
|
|
315
|
+
// ("34,640.00" pegado quedaba "34,640"; un "12." perdería el punto).
|
|
316
|
+
value: this.focused && this.inputEl ? this.inputEl.value : this.displayValue, placeholder: this.placeholder, disabled: this.disabled, onInput: this.handleInput, onPaste: this.handlePaste, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyDown: this.handleKeyDown, part: "input" }), this.affixText && (h("span", { key: '56e8b3a225f2332f9c3974ec195b63b3681d5b09', class: "co-number-field__affix", "aria-hidden": "true" }, this.affixText)), this.clearable && !this.isEmpty && !this.disabled && (h("button", { key: 'ea8325f7097c5b0b87bd51554163d44bdfe379ff', class: "co-number-field__clear", type: "button", tabIndex: -1, onClick: this.handleClear, "aria-label": "Clear" }, h("co-icon", { key: 'c72d4e3a039752fbcf7cf4594421d24bc2f0570a', name: "x-circle", size: 16, weight: "fill" }))), h("slot", { key: '2a3dc1b5a3e22ade3db02389178dd4ae3b1d3295', name: "suffix" }), !this.hideControls && (h("button", { key: '3b9bf39d86c7aacb212576dc4cf4af548b56fbed', class: "co-number-field__btn co-number-field__btn--plus", type: "button", tabIndex: -1, disabled: !this.canIncrement, onClick: this.handleIncrement, "aria-label": "Increase" }, h("co-icon", { key: '1655aaca9e66b51c0d97fc128c132326d3c740ad', name: "plus", size: 16 })))), this.helperText && (h("div", { key: '397b37569cabdf68072d870b5e5781f7d39da8fe', class: `co-number-field__helper co-number-field__helper--${this.status}` }, this.statusIcon && h("co-icon", { key: 'b574fddca9813af3e208ea3e9258480a992fd4f2', name: this.statusIcon, size: 14, weight: "fill", class: "co-number-field__helper-icon" }), h("span", { key: 'd17a39a82108f12100dee523d7754b50f147bb63', class: "co-number-field__helper-text" }, this.helperText)))));
|
|
149
317
|
}
|
|
150
318
|
static get is() { return "co-number-field"; }
|
|
151
319
|
static get encapsulation() { return "shadow"; }
|
|
@@ -440,20 +608,59 @@ export class CoNumberField {
|
|
|
440
608
|
"type": "string",
|
|
441
609
|
"mutable": false,
|
|
442
610
|
"complexType": {
|
|
443
|
-
"original": "'rate' | 'percent'",
|
|
444
|
-
"resolved": "\"percent\" | \"rate\" | undefined",
|
|
611
|
+
"original": "'rate' | 'percent' | 'amount'",
|
|
612
|
+
"resolved": "\"amount\" | \"percent\" | \"rate\" | undefined",
|
|
445
613
|
"references": {}
|
|
446
614
|
},
|
|
447
615
|
"required": false,
|
|
448
616
|
"optional": true,
|
|
449
617
|
"docs": {
|
|
450
618
|
"tags": [],
|
|
451
|
-
"text": "Display format. With 'rate' | 'percent' the `value` stays a DECIMAL\n(e.g. 0.15) but the field shows/edits the PERCENT (15) with a \"%\" suffix.\nvalue/min/max/step are always in the underlying (decimal) unit.\nReflected so it survives lazy hydration when set via the Vue wrapper."
|
|
619
|
+
"text": "Display format. With 'rate' | 'percent' the `value` stays a DECIMAL\n(e.g. 0.15) but the field shows/edits the PERCENT (15) with a \"%\" suffix.\nvalue/min/max/step are always in the underlying (decimal) unit.\nWith 'amount' the field is a live money mask: thousands separators while\ntyping (1234.5 shows 1,234.5), typing restricted to digits and dot, and\npaste normalized whatever the source locale (\"1.234,56\" and \"1,234.56\"\nboth commit 1234.56). The emitted value is always the raw number.\nReflected so it survives lazy hydration when set via the Vue wrapper."
|
|
452
620
|
},
|
|
453
621
|
"getter": false,
|
|
454
622
|
"setter": false,
|
|
455
623
|
"reflect": true,
|
|
456
624
|
"attribute": "format"
|
|
625
|
+
},
|
|
626
|
+
"hideControls": {
|
|
627
|
+
"type": "boolean",
|
|
628
|
+
"mutable": false,
|
|
629
|
+
"complexType": {
|
|
630
|
+
"original": "boolean",
|
|
631
|
+
"resolved": "boolean",
|
|
632
|
+
"references": {}
|
|
633
|
+
},
|
|
634
|
+
"required": false,
|
|
635
|
+
"optional": false,
|
|
636
|
+
"docs": {
|
|
637
|
+
"tags": [],
|
|
638
|
+
"text": "Oculta los botones \u00B1 (campo num\u00E9rico \"plano\": precio, tasa). Las flechas\n\u2191\u2193 siguen escalonando. Reflejado para que el CSS del host lo lea."
|
|
639
|
+
},
|
|
640
|
+
"getter": false,
|
|
641
|
+
"setter": false,
|
|
642
|
+
"reflect": true,
|
|
643
|
+
"attribute": "hide-controls",
|
|
644
|
+
"defaultValue": "false"
|
|
645
|
+
},
|
|
646
|
+
"suffix": {
|
|
647
|
+
"type": "string",
|
|
648
|
+
"mutable": false,
|
|
649
|
+
"complexType": {
|
|
650
|
+
"original": "string",
|
|
651
|
+
"resolved": "string | undefined",
|
|
652
|
+
"references": {}
|
|
653
|
+
},
|
|
654
|
+
"required": false,
|
|
655
|
+
"optional": true,
|
|
656
|
+
"docs": {
|
|
657
|
+
"tags": [],
|
|
658
|
+
"text": "Sufijo de texto a la derecha del n\u00FAmero (moneda, unidad). Reemplaza al \"%\"\nautom\u00E1tico de `format`; cadena vac\u00EDa = sin sufijo (\u00FAtil cuando el slot\n`suffix` ya lleva el control que indica la unidad)."
|
|
659
|
+
},
|
|
660
|
+
"getter": false,
|
|
661
|
+
"setter": false,
|
|
662
|
+
"reflect": false,
|
|
663
|
+
"attribute": "suffix"
|
|
457
664
|
}
|
|
458
665
|
};
|
|
459
666
|
}
|