@prolibu-suite/cobalt-core 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +481 -35
- package/dist/cjs/co-accordion.cjs.entry.js +33 -4
- package/dist/cjs/co-action-bar.cjs.entry.js +1 -1
- package/dist/cjs/co-audio-player.cjs.entry.js +82 -12
- package/dist/cjs/co-avatar.cjs.entry.js +72 -0
- package/dist/cjs/co-button.cjs.entry.js +1 -1
- package/dist/cjs/co-calendar_3.cjs.entry.js +7 -3
- package/dist/cjs/co-checkbox.cjs.entry.js +3 -3
- package/dist/cjs/co-chip_2.cjs.entry.js +68 -14
- package/dist/cjs/co-color-picker.cjs.entry.js +40 -10
- package/dist/cjs/co-column-picker.cjs.entry.js +1 -1
- package/dist/cjs/co-combobox.cjs.entry.js +1 -1
- package/dist/cjs/co-command-search.cjs.entry.js +1 -1
- package/dist/cjs/co-data-table.cjs.entry.js +82 -4
- package/dist/cjs/co-date-range-picker.cjs.entry.js +3 -1
- package/dist/cjs/co-emoji-picker.cjs.entry.js +1 -1
- package/dist/cjs/co-file-type-tile.cjs.entry.js +23 -7
- package/dist/cjs/co-input.cjs.entry.js +6 -2
- package/dist/cjs/co-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/co-modal.cjs.entry.js +7 -3
- package/dist/cjs/co-navbar.cjs.entry.js +2 -2
- package/dist/cjs/co-number-field.cjs.entry.js +3 -3
- package/dist/cjs/co-overlay.cjs.entry.js +1 -1
- package/dist/cjs/co-page-header.cjs.entry.js +1 -1
- package/dist/cjs/co-phone-field.cjs.entry.js +5 -5
- package/dist/cjs/co-progress-bar.cjs.entry.js +2 -2
- package/dist/cjs/co-progress-circle.cjs.entry.js +2 -2
- package/dist/cjs/co-provider-logo_2.cjs.entry.js +1 -1
- package/dist/cjs/co-radio.cjs.entry.js +3 -3
- package/dist/cjs/co-rating.cjs.entry.js +3 -3
- package/dist/cjs/co-ref-field.cjs.entry.js +100 -9
- package/dist/cjs/co-rich-text-editor.cjs.entry.js +30 -10
- package/dist/cjs/co-rich-text-toolbar.cjs.entry.js +5 -2
- package/dist/cjs/co-rich-text-viewer.cjs.entry.js +19 -3
- package/dist/cjs/co-row.cjs.entry.js +2 -2
- package/dist/cjs/co-select.cjs.entry.js +8 -8
- package/dist/cjs/co-separator.cjs.entry.js +1 -1
- package/dist/cjs/co-sidebar-nav.cjs.entry.js +1 -1
- package/dist/cjs/co-sidebar.cjs.entry.js +2 -2
- package/dist/cjs/co-slider.cjs.entry.js +2 -2
- package/dist/cjs/co-switch.cjs.entry.js +3 -3
- package/dist/cjs/co-tab-group.cjs.entry.js +2 -2
- package/dist/cjs/co-tab.cjs.entry.js +2 -2
- package/dist/cjs/co-tags-field.cjs.entry.js +5 -5
- package/dist/cjs/co-textarea.cjs.entry.js +4 -4
- package/dist/cjs/co-time-field.cjs.entry.js +1 -1
- package/dist/cjs/co-toggle-button-group.cjs.entry.js +3 -3
- package/dist/cjs/co-toggle-button.cjs.entry.js +3 -3
- package/dist/cjs/{co-avatar_2.cjs.entry.js → co-tooltip.cjs.entry.js} +2 -70
- package/dist/cjs/co-video.cjs.entry.js +2 -2
- package/dist/cjs/cobalt.cjs.js +1 -1
- package/dist/cjs/{index-BYwrR87Z.js → index-2kMmd5-a.js} +6717 -6654
- package/dist/cjs/index-MDAnKsze.js +16 -12
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{normalizeText-B-v-XPKf.js → normalizeText-D9rlJWZa.js} +29 -18
- package/dist/cjs/{toolbar-config-BSGas-Wl.js → toolbar-config-CYACt9hh.js} +13 -1
- package/dist/cobalt/cobalt.esm.js +1 -1
- package/dist/cobalt/{p-82266f11.entry.js → p-000a15b8.entry.js} +1 -1
- package/dist/cobalt/{p-e01f9b9a.entry.js → p-0c004735.entry.js} +1 -1
- package/dist/cobalt/{p-16954cea.entry.js → p-11c5ce78.entry.js} +1 -1
- package/dist/cobalt/{p-c465d619.entry.js → p-1861fe41.entry.js} +1 -1
- package/dist/cobalt/p-1cc818ca.entry.js +1 -0
- package/dist/cobalt/p-216a63ee.entry.js +1 -0
- package/dist/cobalt/p-24196410.entry.js +1 -0
- package/dist/cobalt/{p-4d897896.entry.js → p-28764b8e.entry.js} +1 -1
- package/dist/cobalt/{p-1a589c8e.entry.js → p-292b0389.entry.js} +1 -1
- package/dist/cobalt/{p-73c6d735.entry.js → p-2a30c143.entry.js} +1 -1
- package/dist/cobalt/{p-e8a4e6b0.entry.js → p-2c9dba2f.entry.js} +1 -1
- package/dist/cobalt/{p-83ea631d.entry.js → p-39a50e7f.entry.js} +1 -1
- package/dist/cobalt/p-39dc4ec8.entry.js +1 -0
- package/dist/cobalt/{p-325b91b6.entry.js → p-3d31c575.entry.js} +1 -1
- package/dist/cobalt/p-416795f5.entry.js +1 -0
- package/dist/cobalt/{p-37f5036b.entry.js → p-49834b8e.entry.js} +1 -1
- package/dist/cobalt/{p-54c987d7.entry.js → p-5a3e4c81.entry.js} +1 -1
- package/dist/cobalt/p-5c756787.entry.js +1 -0
- package/dist/cobalt/{p-27a7e549.entry.js → p-67f3b9d6.entry.js} +1 -1
- package/dist/cobalt/{p-bd683db3.entry.js → p-6a4f3179.entry.js} +1 -1
- package/dist/cobalt/{p-b565104d.entry.js → p-6dd220e0.entry.js} +1 -1
- package/dist/cobalt/{p-eb063cc0.entry.js → p-71cbc53c.entry.js} +1 -1
- package/dist/cobalt/p-72e52af7.entry.js +1 -0
- package/dist/cobalt/{p-50bcc76f.entry.js → p-7b5c555c.entry.js} +1 -1
- package/dist/cobalt/{p-10b82207.entry.js → p-8471abe2.entry.js} +1 -1
- package/dist/cobalt/{p-fe7e8813.entry.js → p-8530ad16.entry.js} +1 -1
- package/dist/cobalt/p-8a74bf7d.entry.js +1 -0
- package/dist/cobalt/{p-ea20f048.entry.js → p-8ebc0c12.entry.js} +1 -1
- package/dist/cobalt/p-8f2199ff.entry.js +1 -0
- package/dist/cobalt/p-9246e09c.entry.js +1 -0
- package/dist/cobalt/p-99a655f6.entry.js +1 -0
- package/dist/cobalt/{p-DOL2zACE.js → p-BAYo-RBt.js} +1 -1
- package/dist/cobalt/p-Ba_v-MzM.js +1 -0
- package/dist/cobalt/{p-Bryf3-Js.js → p-CJW9H3Gi.js} +1 -1
- package/dist/cobalt/p-a1b422ca.entry.js +1 -0
- package/dist/cobalt/p-a2462d7a.entry.js +1 -0
- package/dist/cobalt/p-ade07307.entry.js +1 -0
- package/dist/cobalt/{p-5298c030.entry.js → p-b437eff6.entry.js} +1 -1
- package/dist/cobalt/p-b698188c.entry.js +1 -0
- package/dist/cobalt/{p-6bf6bc3e.entry.js → p-b821d9de.entry.js} +1 -1
- package/dist/cobalt/p-bde32f8b.entry.js +1 -0
- package/dist/cobalt/{p-92b092db.entry.js → p-be34e447.entry.js} +1 -1
- package/dist/cobalt/{p-ad33c40e.entry.js → p-c30b4cb5.entry.js} +1 -1
- package/dist/cobalt/p-c7d7d7f7.entry.js +1 -0
- package/dist/cobalt/{p-aae86f96.entry.js → p-d0b2c418.entry.js} +1 -1
- package/dist/cobalt/p-d375014b.entry.js +1 -0
- package/dist/cobalt/p-eadfd661.entry.js +1 -0
- package/dist/cobalt/p-ee149fd2.entry.js +1 -0
- package/dist/cobalt/p-ef301976.entry.js +1 -0
- package/dist/cobalt/{p-fd150cc6.entry.js → p-f7eb1a40.entry.js} +1 -1
- package/dist/cobalt/p-f9a7b7c6.entry.js +1 -0
- package/dist/cobalt/{p-f68dd124.entry.js → p-fb2d1144.entry.js} +1 -1
- package/dist/collection/components/co-accordion/co-accordion.css +11 -4
- package/dist/collection/components/co-accordion/co-accordion.js +37 -6
- package/dist/collection/components/co-action-bar/co-action-bar.css +9 -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/co-avatar.css +22 -1
- package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
- package/dist/collection/components/co-button/co-button.css +15 -3
- package/dist/collection/components/co-calendar/co-calendar.css +10 -4
- package/dist/collection/components/co-calendar/co-calendar.js +6 -2
- package/dist/collection/components/co-checkbox/co-checkbox.js +22 -3
- package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
- package/dist/collection/components/co-color-picker/co-color-picker.js +40 -10
- 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-date-range-picker/co-date-range-picker.css +13 -0
- package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +4 -2
- package/dist/collection/components/co-file-type-tile/co-file-type-tile.js +4 -43
- package/dist/collection/components/co-file-type-tile/co-file-type-tile.utils.js +55 -0
- package/dist/collection/components/co-input/co-input.js +17 -5
- package/dist/collection/components/co-menu-item/co-menu-item.css +9 -0
- package/dist/collection/components/co-modal/co-modal.css +6 -0
- package/dist/collection/components/co-modal/co-modal.js +33 -2
- package/dist/collection/components/co-navbar/co-navbar.js +2 -2
- package/dist/collection/components/co-number-field/co-number-field.js +3 -3
- package/dist/collection/components/co-option-list/co-option-list.js +38 -7
- package/dist/collection/components/co-option-list/optionListLogic.js +31 -8
- package/dist/collection/components/co-overlay/co-overlay.js +1 -1
- package/dist/collection/components/co-page-header/co-page-header.js +1 -1
- package/dist/collection/components/co-phone-field/co-phone-field.js +5 -5
- package/dist/collection/components/co-popover/co-popover.js +1 -1
- 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 +22 -0
- package/dist/collection/components/co-rich-text-editor/co-rich-text-editor.js +48 -8
- package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.css +52 -0
- package/dist/collection/components/co-rich-text-toolbar/co-rich-text-toolbar.js +25 -2
- package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.css +5 -0
- package/dist/collection/components/co-rich-text-viewer/co-rich-text-viewer.js +17 -1
- 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 +28 -9
- 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.js +1 -1
- package/dist/collection/components/co-skeleton/co-skeleton.js +1 -1
- package/dist/collection/components/co-slider/co-slider.js +2 -2
- 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.js +1 -1
- package/dist/collection/components/co-toast/co-toast.js +2 -2
- package/dist/collection/components/co-toggle-button/co-toggle-button.css +6 -5
- 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 +9 -5
- package/dist/collection/components/co-toggle-button-group/co-toggle-button-group.js +2 -2
- package/dist/collection/components/co-tooltip/co-tooltip.js +2 -2
- package/dist/collection/components/co-transfer-list/co-transfer-list.js +1 -1
- package/dist/collection/components/co-video/co-video.js +2 -2
- package/dist/collection/utils/normalizeText.js +43 -0
- package/dist/components/co-accordion.js +1 -1
- package/dist/components/co-action-bar.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-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-checkbox.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.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-emoji-picker.js +1 -1
- package/dist/components/co-event-calendar.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-input.js +1 -1
- package/dist/components/co-lightbox.js +1 -1
- package/dist/components/co-list-item.js +1 -1
- package/dist/components/co-menu-item.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-progress-bar.js +1 -1
- package/dist/components/co-progress-circle.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.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-video.js +1 -1
- package/dist/components/{p-CXPRaTuo.js → p-2EOI1nrz.js} +1 -1
- package/dist/components/p-7TncUlLN.js +1 -0
- package/dist/components/{p-DOL2zACE.js → p-BAYo-RBt.js} +1 -1
- package/dist/components/p-Ba_v-MzM.js +1 -0
- package/dist/components/p-BhCVadcA.js +1 -0
- package/dist/components/p-BrAFTkAn.js +1 -0
- package/dist/components/{p-DIo66nBr.js → p-Bsh0JMGf.js} +1 -1
- package/dist/components/{p-x4grh-eZ.js → p-CBTGN490.js} +1 -1
- package/dist/components/{p-Bryf3-Js.js → p-CJW9H3Gi.js} +1 -1
- package/dist/components/p-CWCYYQrF.js +1 -0
- package/dist/components/p-D7Lhxz7L.js +1 -0
- package/dist/components/{p-BxP8OBw6.js → p-DFlJMEJ-.js} +1 -1
- package/dist/components/p-DTPYZwaZ.js +1 -0
- package/dist/components/{p-Be_kyNRE.js → p-Dc_Kbari.js} +1 -1
- package/dist/components/{p-B1QFLcY9.js → p-Dcg4krSX.js} +1 -1
- package/dist/components/p-DrTRB8Ev.js +1 -0
- package/dist/components/{p-BBP5__CY.js → p-DvR45CLa.js} +1 -1
- package/dist/components/{p-CnX3L8aF.js → p-DxtNejr2.js} +1 -1
- package/dist/components/{p-DkDTmHCg.js → p-Nt4JJxbL.js} +1 -1
- package/dist/components/{p-Bv6U5y3d.js → p-uxdXViMV.js} +1 -1
- package/dist/esm/co-accordion.entry.js +33 -4
- package/dist/esm/co-action-bar.entry.js +1 -1
- package/dist/esm/co-audio-player.entry.js +82 -12
- package/dist/esm/co-avatar.entry.js +70 -0
- package/dist/esm/co-button.entry.js +1 -1
- package/dist/esm/co-calendar_3.entry.js +7 -3
- package/dist/esm/co-checkbox.entry.js +3 -3
- package/dist/esm/co-chip_2.entry.js +68 -14
- package/dist/esm/co-color-picker.entry.js +40 -10
- package/dist/esm/co-column-picker.entry.js +1 -1
- package/dist/esm/co-combobox.entry.js +1 -1
- package/dist/esm/co-command-search.entry.js +1 -1
- package/dist/esm/co-data-table.entry.js +82 -4
- package/dist/esm/co-date-range-picker.entry.js +3 -1
- package/dist/esm/co-emoji-picker.entry.js +1 -1
- package/dist/esm/co-file-type-tile.entry.js +23 -7
- package/dist/esm/co-input.entry.js +6 -2
- package/dist/esm/co-menu-item.entry.js +1 -1
- package/dist/esm/co-modal.entry.js +7 -3
- package/dist/esm/co-navbar.entry.js +2 -2
- package/dist/esm/co-number-field.entry.js +3 -3
- package/dist/esm/co-overlay.entry.js +1 -1
- package/dist/esm/co-page-header.entry.js +1 -1
- package/dist/esm/co-phone-field.entry.js +5 -5
- package/dist/esm/co-progress-bar.entry.js +2 -2
- package/dist/esm/co-progress-circle.entry.js +2 -2
- package/dist/esm/co-provider-logo_2.entry.js +1 -1
- package/dist/esm/co-radio.entry.js +3 -3
- package/dist/esm/co-rating.entry.js +3 -3
- package/dist/esm/co-ref-field.entry.js +100 -9
- package/dist/esm/co-rich-text-editor.entry.js +30 -10
- package/dist/esm/co-rich-text-toolbar.entry.js +5 -2
- package/dist/esm/co-rich-text-viewer.entry.js +19 -3
- package/dist/esm/co-row.entry.js +2 -2
- package/dist/esm/co-select.entry.js +8 -8
- package/dist/esm/co-separator.entry.js +1 -1
- package/dist/esm/co-sidebar-nav.entry.js +1 -1
- package/dist/esm/co-sidebar.entry.js +2 -2
- package/dist/esm/co-slider.entry.js +2 -2
- package/dist/esm/co-switch.entry.js +3 -3
- package/dist/esm/co-tab-group.entry.js +2 -2
- package/dist/esm/co-tab.entry.js +2 -2
- package/dist/esm/co-tags-field.entry.js +5 -5
- package/dist/esm/co-textarea.entry.js +4 -4
- package/dist/esm/co-time-field.entry.js +1 -1
- package/dist/esm/co-toggle-button-group.entry.js +3 -3
- package/dist/esm/co-toggle-button.entry.js +3 -3
- package/dist/esm/{co-avatar_2.entry.js → co-tooltip.entry.js} +3 -70
- package/dist/esm/co-video.entry.js +2 -2
- package/dist/esm/cobalt.js +1 -1
- package/dist/esm/{index-68iUQp5j.js → index-BBIYyvq-.js} +6717 -6654
- package/dist/esm/index-DH5lfRNj.js +16 -12
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{normalizeText-CQY6Ul7q.js → normalizeText-Ba_v-MzM.js} +29 -18
- package/dist/esm/{toolbar-config-DOL2zACE.js → toolbar-config-BAYo-RBt.js} +13 -1
- package/dist/types/components/co-accordion/co-accordion.d.ts +17 -2
- package/dist/types/components/co-audio-player/co-audio-player.d.ts +25 -0
- package/dist/types/components/co-checkbox/co-checkbox.d.ts +4 -0
- package/dist/types/components/co-color-picker/co-color-picker.d.ts +4 -2
- 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-file-type-tile/co-file-type-tile.utils.d.ts +12 -0
- package/dist/types/components/co-input/co-input.d.ts +5 -1
- package/dist/types/components/co-modal/co-modal.d.ts +10 -0
- package/dist/types/components/co-option-list/co-option-list.d.ts +13 -0
- package/dist/types/components/co-option-list/optionListLogic.d.ts +23 -6
- package/dist/types/components/co-ref-field/co-ref-field.d.ts +38 -0
- package/dist/types/components/co-rich-text-editor/co-rich-text-editor.d.ts +7 -0
- package/dist/types/components/co-rich-text-toolbar/co-rich-text-toolbar.d.ts +4 -1
- package/dist/types/components/co-select/co-select.d.ts +6 -0
- package/dist/types/components.d.ts +120 -14
- package/dist/types/utils/normalizeText.d.ts +13 -0
- package/package.json +2 -2
- package/dist/cobalt/p-15d59169.entry.js +0 -1
- package/dist/cobalt/p-1788aab5.entry.js +0 -1
- package/dist/cobalt/p-20a39218.entry.js +0 -1
- package/dist/cobalt/p-3cc3ff93.entry.js +0 -1
- package/dist/cobalt/p-4908f33f.entry.js +0 -1
- package/dist/cobalt/p-63825d7f.entry.js +0 -1
- package/dist/cobalt/p-66b11b38.entry.js +0 -1
- package/dist/cobalt/p-6f700f0d.entry.js +0 -1
- package/dist/cobalt/p-83a9a05a.entry.js +0 -1
- package/dist/cobalt/p-85501c6a.entry.js +0 -1
- package/dist/cobalt/p-88195a63.entry.js +0 -1
- package/dist/cobalt/p-8fa5dc4a.entry.js +0 -1
- package/dist/cobalt/p-CQY6Ul7q.js +0 -1
- package/dist/cobalt/p-b0c4fc71.entry.js +0 -1
- package/dist/cobalt/p-b1e8d69e.entry.js +0 -1
- package/dist/cobalt/p-b48917c9.entry.js +0 -1
- package/dist/cobalt/p-c124e82b.entry.js +0 -1
- package/dist/cobalt/p-c32c176a.entry.js +0 -1
- package/dist/cobalt/p-e48f4e45.entry.js +0 -1
- package/dist/cobalt/p-e8a2f993.entry.js +0 -1
- package/dist/cobalt/p-eb8691f2.entry.js +0 -1
- package/dist/cobalt/p-ef5ca521.entry.js +0 -1
- package/dist/components/p-9ceBPSd1.js +0 -1
- package/dist/components/p-B2IsXte7.js +0 -1
- package/dist/components/p-BsTO1uUA.js +0 -1
- package/dist/components/p-CFFDmGPS.js +0 -1
- package/dist/components/p-CQY6Ul7q.js +0 -1
- package/dist/components/p-Cl3AdEQJ.js +0 -1
- package/dist/components/p-HxVRXXXC.js +0 -1
- package/dist/components/p-vby0ITbe.js +0 -1
|
@@ -41,10 +41,13 @@
|
|
|
41
41
|
color: var(--co-semantic-on-primary);
|
|
42
42
|
border-color: color-mix(in srgb, var(--co-semantic-on-primary) 28%, transparent);
|
|
43
43
|
}
|
|
44
|
+
/* Knobs (heredan a través del shadow, mismo mecanismo y nombres que
|
|
45
|
+
--co-icon-button-bg/-color/-border): un consumidor con spec propia cambia la
|
|
46
|
+
superficie de la variante clara SIN un ::part de color. Defaults = look del DS. */
|
|
44
47
|
.co-button--secondary {
|
|
45
|
-
background: color-mix(in srgb, var(--co-semantic-surface-secondary) 55%, transparent);
|
|
46
|
-
color: var(--co-semantic-on-secondary);
|
|
47
|
-
border-color: var(--co-semantic-border-subtle);
|
|
48
|
+
background: color-mix(in srgb, var(--co-button-bg, var(--co-semantic-surface-secondary)) 55%, transparent);
|
|
49
|
+
color: var(--co-button-color, var(--co-semantic-on-secondary));
|
|
50
|
+
border-color: var(--co-button-border, var(--co-semantic-border-subtle));
|
|
48
51
|
}
|
|
49
52
|
.co-button--stroke {
|
|
50
53
|
background: color-mix(in srgb, var(--co-semantic-surface-secondary) 25%, transparent);
|
|
@@ -209,6 +212,15 @@
|
|
|
209
212
|
flex-shrink: 0;
|
|
210
213
|
}
|
|
211
214
|
|
|
215
|
+
/* The glyph must not grow the line box. ICON_SIZE is font-size + 2 in every
|
|
216
|
+
size (l 20/18, m 18/16, s 16/14, xs 14/12) and the label sits at line-height 1,
|
|
217
|
+
so an icon-left button came out 2px taller than its text-only sibling in the
|
|
218
|
+
same row (34 vs 32 on square/s next to a co-toggle-button, 2026-09-17). Pull
|
|
219
|
+
the 1px overshoot per side back: text-only and icon buttons share one height. */
|
|
220
|
+
.co-button > co-icon {
|
|
221
|
+
margin-block: -1px;
|
|
222
|
+
}
|
|
223
|
+
|
|
212
224
|
/* ─── FALLBACK: no backdrop-filter → solid, legible surfaces ──── */
|
|
213
225
|
@supports not (background: color-mix(in srgb, red, transparent)) {
|
|
214
226
|
.co-button--primary { background: var(--co-semantic-surface-primary); }
|
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
--co-calendar-day-size: 44px;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/* Knobs de layout (custom properties: cruzan el shadow, los fija el HOST):
|
|
13
|
+
--co-calendar-width ancho del calendario (default: el de sus 7 celdas fijas)
|
|
14
|
+
--co-calendar-col track de cada columna (default: la celda fija)
|
|
15
|
+
--co-calendar-day-width ancho del botón de día (default: la celda fija)
|
|
16
|
+
co-date-range-picker los pone en 100% / minmax(celda, 1fr) / 100% para que el mes
|
|
17
|
+
llene el panel en vez de dejar el sobrante en blanco (reporte 2026-09-16). */
|
|
12
18
|
.co-calendar {
|
|
13
19
|
display: flex;
|
|
14
20
|
flex-direction: column;
|
|
15
21
|
gap: var(--co-spacing-sm);
|
|
16
|
-
width: max-content;
|
|
22
|
+
width: var(--co-calendar-width, max-content);
|
|
17
23
|
}
|
|
18
24
|
|
|
19
25
|
/* ── Header ──────────────────────────────────────────────── */
|
|
@@ -63,7 +69,7 @@
|
|
|
63
69
|
display: grid;
|
|
64
70
|
grid-template-columns: repeat(3, 1fr);
|
|
65
71
|
gap: var(--co-spacing-xs);
|
|
66
|
-
width: calc(var(--co-calendar-day-size) * 7 + 12px);
|
|
72
|
+
width: var(--co-calendar-width, calc(var(--co-calendar-day-size) * 7 + 12px));
|
|
67
73
|
padding-top: var(--co-spacing-xs);
|
|
68
74
|
}
|
|
69
75
|
|
|
@@ -134,7 +140,7 @@
|
|
|
134
140
|
|
|
135
141
|
.co-calendar__row {
|
|
136
142
|
display: grid;
|
|
137
|
-
grid-template-columns: repeat(7, var(--co-calendar-day-size));
|
|
143
|
+
grid-template-columns: repeat(7, var(--co-calendar-col, var(--co-calendar-day-size)));
|
|
138
144
|
gap: 2px;
|
|
139
145
|
}
|
|
140
146
|
|
|
@@ -156,7 +162,7 @@
|
|
|
156
162
|
|
|
157
163
|
/* ── Day cell ────────────────────────────────────────────── */
|
|
158
164
|
.co-calendar__day {
|
|
159
|
-
width: var(--co-calendar-day-size);
|
|
165
|
+
width: var(--co-calendar-day-width, var(--co-calendar-day-size));
|
|
160
166
|
height: var(--co-calendar-day-size);
|
|
161
167
|
display: inline-flex;
|
|
162
168
|
align-items: center;
|
|
@@ -307,7 +307,11 @@ export class CoCalendar {
|
|
|
307
307
|
const monthLabel = getMonthLabel(this.viewYear, this.viewMonth, this.locale, 'long');
|
|
308
308
|
const shortLabels = getWeekdayLabels(this.locale, this.firstDayOfWeek, 'short');
|
|
309
309
|
const longLabels = getWeekdayLabels(this.locale, this.firstDayOfWeek, 'long');
|
|
310
|
-
|
|
310
|
+
// Solo las semanas que tocan el mes: la matriz trae siempre 6, y un mes de
|
|
311
|
+
// 5 semanas cerraba con una fila ENTERA del mes siguiente en gris, que se
|
|
312
|
+
// leía como una franja en blanco al pie del panel (reporte 2026-09-16). El
|
|
313
|
+
// teclado no la necesita: moveFocus ya cambia de mes al salir de él.
|
|
314
|
+
const matrix = getMonthMatrix(this.viewYear, this.viewMonth, this.firstDayOfWeek).filter((week) => week.some((cell) => cell.inMonth));
|
|
311
315
|
return (h("div", { class: "co-calendar__grid", part: "grid", role: "grid", "aria-label": monthLabel, onKeyDown: this.handleGridKeyDown }, h("div", { class: "co-calendar__row co-calendar__row--dow", role: "row" }, shortLabels.map((lbl, i) => (h("span", { class: "co-calendar__dow", role: "columnheader", "aria-label": longLabels[i] }, lbl)))), matrix.map((week) => (h("div", { class: "co-calendar__row", role: "row" }, week.map((cell) => {
|
|
312
316
|
const disabled = this.isDayDisabled(cell.value);
|
|
313
317
|
const isFocused = compareYMD(cell.value, this.focused) === 0;
|
|
@@ -363,7 +367,7 @@ export class CoCalendar {
|
|
|
363
367
|
render() {
|
|
364
368
|
var _a, _b;
|
|
365
369
|
const t = getDateStrings(this.locale);
|
|
366
|
-
return (h("div", { key: '
|
|
370
|
+
return (h("div", { key: '3b9f57fa8513746cb3133d80d574a0fafbc8b31e', class: "co-calendar", part: "root" }, h("div", { key: '6b3b0f8d1c582abbbf04c8b936486bd1e3fedaec', class: "co-calendar__header", part: "header" }, h("button", { key: '57f854f84162a5b09119385339c9993ee25cef72', type: "button", class: "co-calendar__nav", onClick: this.handlePrev, "aria-label": (_a = this.prevMonthLabel) !== null && _a !== void 0 ? _a : t.prevMonth }, h("co-icon", { key: '772ec0dfb48dfee33d506549e68ab7598ec0cf00', name: "caret-left", size: 16 })), h("button", { key: 'b9f3851082fbbe2d5f696dd0a51c442410b15fa1', type: "button", class: "co-calendar__title", "aria-live": "polite", onClick: this.toggleView }, this.headerTitle(), h("co-icon", { key: '3f660d39a851c97f299e6a6cc8c0ad8b5ed4ee7f', name: "caret-down", size: 12, class: "co-calendar__title-caret" })), h("button", { key: '6ac9d1af5f3dc36a34e94e129ab2db313dee74d2', type: "button", class: "co-calendar__nav", onClick: this.handleNext, "aria-label": (_b = this.nextMonthLabel) !== null && _b !== void 0 ? _b : t.nextMonth }, h("co-icon", { key: 'c8c962be3435e108f81968f6dde5f6f481c40733', name: "caret-right", size: 16 }))), this.view === 'days' && this.renderDays(t), this.view === 'months' && this.renderMonths(), this.view === 'years' && this.renderYears()));
|
|
367
371
|
}
|
|
368
372
|
static get is() { return "co-calendar"; }
|
|
369
373
|
static get encapsulation() { return "shadow"; }
|
|
@@ -43,17 +43,17 @@ export class CoCheckbox {
|
|
|
43
43
|
// Only override the fill when a custom color is provided AND the box is "on".
|
|
44
44
|
// Leaving this undefined keeps the default appearance byte-identical to before.
|
|
45
45
|
const boxStyle = this.checkedColor && isOn ? { background: this.checkedColor } : undefined;
|
|
46
|
-
return (h("div", { key: '
|
|
46
|
+
return (h("div", { key: 'cfcbd567066331d7751064f857407a8f9d56d386', class: {
|
|
47
47
|
'co-checkbox-row': true,
|
|
48
48
|
'co-checkbox-row--disabled': this.disabled,
|
|
49
|
-
}, onClick: this.handleClick }, h("span", { key: '
|
|
49
|
+
}, onClick: this.handleClick }, h("span", { key: '21c39833a43324e47718cc83ba74253f00e67e82', role: "checkbox", "aria-checked": this.indeterminate ? 'mixed' : String(this.checked), "aria-label": this.label || this.ariaLabelText || '', "aria-disabled": this.disabled ? 'true' : undefined, tabIndex: this.disabled ? -1 : 0, onKeyDown: this.handleKeyDown, class: {
|
|
50
50
|
'co-checkbox': true,
|
|
51
51
|
[`co-checkbox--${this.size}`]: true,
|
|
52
52
|
'co-checkbox--overlay': isOverlay,
|
|
53
53
|
'co-checkbox--checked': this.checked && !this.indeterminate,
|
|
54
54
|
'co-checkbox--indeterminate': this.indeterminate,
|
|
55
55
|
'co-checkbox--disabled': this.disabled,
|
|
56
|
-
}, style: boxStyle, part: "box" }, h("svg", { key: '
|
|
56
|
+
}, style: boxStyle, part: "box" }, h("svg", { key: '6e49dd81e78da092340b1cbdb5c45ee6e345fb3c', class: "co-checkbox__glyph", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, h("path", { key: 'dbcadf848fb8cb64acea875fb03186258210c43f', class: "co-checkbox__check", d: "M3.5 8.5l3 3 6-6.5", pathLength: "1", "stroke-linecap": "round", "stroke-linejoin": "round" }), h("path", { key: '0b58a11353c3d8b8249e5852933f290cd63f0705', class: "co-checkbox__dash", d: "M3 8h10", pathLength: "1", "stroke-linecap": "round" }))), this.label && (h("span", { key: 'e1a4beabf2b472aeff1fe5ecd5bcb458e949ee11', class: "co-checkbox__label", part: "label" }, this.label))));
|
|
57
57
|
}
|
|
58
58
|
static get is() { return "co-checkbox"; }
|
|
59
59
|
static get encapsulation() { return "shadow"; }
|
|
@@ -168,6 +168,25 @@ export class CoCheckbox {
|
|
|
168
168
|
"reflect": false,
|
|
169
169
|
"attribute": "label"
|
|
170
170
|
},
|
|
171
|
+
"ariaLabelText": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"mutable": false,
|
|
174
|
+
"complexType": {
|
|
175
|
+
"original": "string",
|
|
176
|
+
"resolved": "string | undefined",
|
|
177
|
+
"references": {}
|
|
178
|
+
},
|
|
179
|
+
"required": false,
|
|
180
|
+
"optional": true,
|
|
181
|
+
"docs": {
|
|
182
|
+
"tags": [],
|
|
183
|
+
"text": "Accessible name when there is NO visible `label` (icon-less row toggles).\nSame `ariaLabelText` precedent as co-button; `label` wins when present.\nAn `aria-label` on the host never reaches the inner role=\"checkbox\"."
|
|
184
|
+
},
|
|
185
|
+
"getter": false,
|
|
186
|
+
"setter": false,
|
|
187
|
+
"reflect": false,
|
|
188
|
+
"attribute": "aria-label-text"
|
|
189
|
+
},
|
|
171
190
|
"value": {
|
|
172
191
|
"type": "string",
|
|
173
192
|
"mutable": false,
|
|
@@ -231,7 +231,7 @@ export class CoCheckboxGroup {
|
|
|
231
231
|
"references": {
|
|
232
232
|
"CheckboxOption": {
|
|
233
233
|
"location": "local",
|
|
234
|
-
"path": "/Users/agox/
|
|
234
|
+
"path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-checkbox-group/co-checkbox-group.tsx",
|
|
235
235
|
"id": "src/components/co-checkbox-group/co-checkbox-group.tsx::CheckboxOption"
|
|
236
236
|
}
|
|
237
237
|
}
|
|
@@ -306,6 +306,12 @@ export class CoColorPicker {
|
|
|
306
306
|
};
|
|
307
307
|
this.handleGridKeyDown = (e) => {
|
|
308
308
|
var _a;
|
|
309
|
+
// La grilla es el único control del panel que es un `<div>`: no hereda
|
|
310
|
+
// `disabled` del DOM como el range o el input, así que el guard tiene que
|
|
311
|
+
// ser explícito. Sin él, deshabilitar con el panel abierto dejaba la
|
|
312
|
+
// navegación por flechas viva y Enter commiteando sobre un campo apagado.
|
|
313
|
+
if (this.disabled)
|
|
314
|
+
return;
|
|
309
315
|
// `presetGroups` re-parsea el JSON de `presets` y remapea en CADA lectura, y
|
|
310
316
|
// todos los consumidores reales pasan presets custom por prop: se resuelve
|
|
311
317
|
// UNA vez por tecla y se pasa por parámetro, no dos veces por getter.
|
|
@@ -531,8 +537,10 @@ export class CoColorPicker {
|
|
|
531
537
|
* que `this.hsv` llega `undefined` al primer render y el destructuring de
|
|
532
538
|
* `renderArea` tira). Los otros @State del componente lo toleraban porque
|
|
533
539
|
* `undefined` es falsy justo donde se usan.
|
|
534
|
-
* Sin hex válido el estado arranca en
|
|
535
|
-
*
|
|
540
|
+
* Sin hex válido el estado arranca en `EMPTY_HSV` —rojo puro, el vértice
|
|
541
|
+
* VIVO—, no en negro: ver su docstring, que explica por qué el vértice negro
|
|
542
|
+
* dejaría dos de los tres controles sin poder producir color. Es un seed de
|
|
543
|
+
* display; `value` sigue vacío y el trigger sigue mostrando el placeholder.
|
|
536
544
|
*/
|
|
537
545
|
componentWillLoad() {
|
|
538
546
|
const parsed = hexToHsv(this.value || '');
|
|
@@ -694,6 +702,11 @@ export class CoColorPicker {
|
|
|
694
702
|
}
|
|
695
703
|
}
|
|
696
704
|
handleSwatchClick(hex) {
|
|
705
|
+
// Mismo guard que el resto de los controles del panel: el host puede
|
|
706
|
+
// deshabilitar el campo CON EL PANEL ABIERTO, y un swatch deshabilitado no
|
|
707
|
+
// commitea. El `pointer-events:none` del CSS tapa el mouse, no el teclado.
|
|
708
|
+
if (this.disabled)
|
|
709
|
+
return;
|
|
697
710
|
// Elegir un preset es un commit como cualquier otro: la asignación y el
|
|
698
711
|
// emit viven en `commit`, no duplicados acá (si no, el swatch dejaría el
|
|
699
712
|
// HSV del color anterior y el área abriría en el color equivocado).
|
|
@@ -799,7 +812,16 @@ export class CoColorPicker {
|
|
|
799
812
|
h("div", { class: "co-color-picker__grid-group", key: g.from, role: g.label ? 'group' : 'presentation', "aria-label": g.label }, g.items.map((preset, j) => {
|
|
800
813
|
const i = g.from + j;
|
|
801
814
|
const selected = preset.value.toUpperCase() === (this.value || '').toUpperCase();
|
|
802
|
-
return (h("div", { key: preset.value, role: "option", "aria-selected": selected ? 'true' : 'false', "aria-label": preset.name,
|
|
815
|
+
return (h("div", { key: preset.value, role: "option", "aria-selected": selected ? 'true' : 'false', "aria-label": preset.name,
|
|
816
|
+
// El `aria-label` cubre al lector de pantalla; al usuario con
|
|
817
|
+
// mouse no le dice nada. Sin el `title`, la paleta por default
|
|
818
|
+
// deja dos grises contiguos ("Humo" y "Hueso") indistinguibles
|
|
819
|
+
// salvo por el pixel de color. El tooltip nativo es la
|
|
820
|
+
// convención de este design system para celdas de grilla
|
|
821
|
+
// —co-emoji-picker:419 hace exactamente esto, y el propio
|
|
822
|
+
// panel ya lo usa en gotero y copiar—; la regla que lo prohíbe
|
|
823
|
+
// es de suite-v2, no de cobalt core.
|
|
824
|
+
title: preset.name, tabIndex: i === this.focusedIndex ? 0 : -1, class: {
|
|
803
825
|
'co-color-picker__grid-item': true,
|
|
804
826
|
'co-color-picker__grid-item--selected': selected,
|
|
805
827
|
// Un swatch claro se pierde contra el panel: se decide por
|
|
@@ -922,12 +944,20 @@ export class CoColorPicker {
|
|
|
922
944
|
this.hsv = EMPTY_HSV;
|
|
923
945
|
if ((this.value || '').toUpperCase() === (target || '').toUpperCase())
|
|
924
946
|
return;
|
|
925
|
-
// SIN sellar:
|
|
926
|
-
//
|
|
947
|
+
// SIN sellar a mano: el @Watch re-deriva el HSV —que es lo que hace volver
|
|
948
|
+
// el área al color commiteado en vez de quedarse en el abandonado— y sella
|
|
949
|
+
// `emitted` él mismo, ANTES del guard de parseo, así que también cubre el
|
|
950
|
+
// caso en que `target` no es un hex (nunca se commiteó nada y el campo
|
|
951
|
+
// vuelve a vacío).
|
|
952
|
+
//
|
|
953
|
+
// Acá vivía un `this.emitted = target` con un comentario que describía el
|
|
954
|
+
// orden VIEJO de `syncFromValue` (sellado gateado por el parseo). Desde que
|
|
955
|
+
// el sellado subió, la línea era muerta por dos vías: o el @Watch ya la
|
|
956
|
+
// dejó idéntica, o entró por su guard de eco —que compara contra `emitted`—
|
|
957
|
+
// y entonces `emitted` ya era `target` salvo por mayúsculas, que es el único
|
|
958
|
+
// lector que tiene. Medido: una sonda en esa línea sobre la suite entera la
|
|
959
|
+
// alcanza cuatro veces y las cuatro con `emitted === target` estricto.
|
|
927
960
|
this.value = target;
|
|
928
|
-
// El @Watch no sella cuando `target` no es un hex (nunca se commiteó nada y
|
|
929
|
-
// el campo vuelve a vacío), así que se sella acá.
|
|
930
|
-
this.emitted = target;
|
|
931
961
|
// El preview se anunció por `coInput`; retirarlo también. Un host que
|
|
932
962
|
// previsualiza en vivo se quedaría si no con el color que nadie eligió.
|
|
933
963
|
this.coInput.emit(target);
|
|
@@ -965,12 +995,12 @@ export class CoColorPicker {
|
|
|
965
995
|
render() {
|
|
966
996
|
const hasValue = !!this.value;
|
|
967
997
|
const statusClass = this.status !== 'default' ? `co-color-picker--${this.status}` : '';
|
|
968
|
-
return (h("div", { key: '
|
|
998
|
+
return (h("div", { key: '5e4239ff9ef0dc3f15004898d2d891f8d231e95d', class: `co-color-picker co-color-picker--${this.size} ${statusClass} ${this.isOpen ? 'co-color-picker--open' : ''} ${this.disabled ? 'co-color-picker--disabled' : ''}` }, this.label && (h("label", { key: '003a893c3c840cd03d87c4291795499ac80b8b73', class: "co-color-picker__label" }, this.label, h(RequiredMark, { key: '4c14eaf668b0677b91b23a00f001ffaa4c21f5c5', required: this.required }))), h("co-popover", { key: 'f4a489f77c2d629ea1d9b69786cfad0f95d5422b', open: this.isOpen, placement: "bottom-start",
|
|
969
999
|
// Sin `matchWidth`: el panel tiene ancho INTRÍNSECO (grilla de 8
|
|
970
1000
|
// swatches fijos de 32px). Copiar el ancho del trigger achica los
|
|
971
1001
|
// tracks bajo 32px con un campo angosto (media columna de un modal) y
|
|
972
1002
|
// los swatches desbordan el card — guard: panel-width.spec.
|
|
973
|
-
offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: '
|
|
1003
|
+
offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: '229e0095d6b6a723e77cf0d001d780cf51116851', slot: "trigger", class: "co-color-picker__trigger", role: "combobox", "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "dialog", "aria-controls": this.isOpen ? CoColorPicker.PANEL_ID : undefined, "aria-label": this.label || undefined, "aria-disabled": this.disabled ? 'true' : undefined, tabIndex: this.disabled ? -1 : 0, ref: (el) => (this.triggerEl = el), onKeyDown: this.handleTriggerKeyDown }, h("span", { key: '9267f104b7f0542653038ef381fb81a7f7f0188e', class: "co-color-picker__swatch", style: { background: hasValue ? this.value : 'transparent' } }), h("span", { key: '64efb900a60576022b3f487db56380973d2934c9', class: `co-color-picker__value ${!hasValue ? 'co-color-picker__value--empty' : ''}` }, hasValue ? this.value : this.placeholder)), this.isOpen && (h("div", { key: '22abcb6c79531f41a6655fc48320e4c108a33049', class: "co-color-picker__panel", id: CoColorPicker.PANEL_ID, role: "dialog", "aria-label": this.label || this.placeholder }, this.renderArea(), this.renderHue(), this.renderSwatches(), this.renderHexRow()))), this.helperText && (h("div", { key: '901b7094f7da8c09ea25cad568eda8d5fcaf2d6e', class: "co-color-picker__helper" }, this.statusIcon && (h("co-icon", { key: 'fb341f791466f133f6a6c4bd04a8dd71c519c7c0', name: this.statusIcon, size: 14, weight: "fill", class: "co-color-picker__helper-icon" })), h("span", { key: '0ecfc7d46a07c741d42b59660979559fb78117df', class: "co-color-picker__helper-text" }, this.helperText)))));
|
|
974
1004
|
}
|
|
975
1005
|
static get is() { return "co-color-picker"; }
|
|
976
1006
|
static get encapsulation() { return "shadow"; }
|
|
@@ -531,7 +531,7 @@ export class CoCombobox {
|
|
|
531
531
|
"references": {
|
|
532
532
|
"ComboboxOption": {
|
|
533
533
|
"location": "local",
|
|
534
|
-
"path": "/Users/agox/
|
|
534
|
+
"path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-combobox/co-combobox.tsx",
|
|
535
535
|
"id": "src/components/co-combobox/co-combobox.tsx::ComboboxOption"
|
|
536
536
|
}
|
|
537
537
|
}
|
|
@@ -246,7 +246,7 @@ export class CoCommandSearch {
|
|
|
246
246
|
"references": {
|
|
247
247
|
"CommandItem": {
|
|
248
248
|
"location": "local",
|
|
249
|
-
"path": "/Users/agox/
|
|
249
|
+
"path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-command-search/co-command-search.tsx",
|
|
250
250
|
"id": "src/components/co-command-search/co-command-search.tsx::CommandItem"
|
|
251
251
|
}
|
|
252
252
|
}
|
|
@@ -153,8 +153,18 @@ co-data-table {
|
|
|
153
153
|
color: var(--co-semantic-text-muted);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
/* Wrapper co-tooltip[block] del label: toma el track flex que antes ocupaba el
|
|
157
|
+
label (min-width:0 = deja truncar; sus hermanos pin/sort/funnel llevan
|
|
158
|
+
flex-shrink:0). El tooltip sale del host (tsx), gateado por truncado. */
|
|
159
|
+
.co-data-table__th-tip {
|
|
157
160
|
flex: 1;
|
|
161
|
+
min-width: 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Dentro del trigger del tooltip el label ya no es flex item: block explícito
|
|
165
|
+
o el ellipsis (overflow/text-overflow solo aplican a cajas block) no engancha. */
|
|
166
|
+
.co-data-table__th-label {
|
|
167
|
+
display: block;
|
|
158
168
|
overflow: hidden;
|
|
159
169
|
text-overflow: ellipsis;
|
|
160
170
|
}
|
|
@@ -208,6 +218,16 @@ co-data-table {
|
|
|
208
218
|
line-height: 0; /* el co-checkbox inline mete baseline-gap y estira el header a 43 */
|
|
209
219
|
}
|
|
210
220
|
|
|
221
|
+
/* Sin separador entre la casilla y la primera columna: la selección no es una
|
|
222
|
+
columna de datos y su borde derecho dibujaba un recuadro alrededor del check
|
|
223
|
+
(pedido de diseño 2026-09-16). Doble clase para ganarle al `border-right` de
|
|
224
|
+
las reglas base .co-data-table__th / .co-data-table__td, que van DESPUÉS en
|
|
225
|
+
este archivo. */
|
|
226
|
+
.co-data-table__th.co-data-table__th--checkbox,
|
|
227
|
+
.co-data-table__td.co-data-table__td--checkbox {
|
|
228
|
+
border-right: none;
|
|
229
|
+
}
|
|
230
|
+
|
|
211
231
|
/* ─── STICKY COLUMNS ───────────────────────────────────────── */
|
|
212
232
|
.co-data-table__th--sticky,
|
|
213
233
|
.co-data-table__td--sticky {
|
|
@@ -268,6 +288,42 @@ co-data-table {
|
|
|
268
288
|
transition: opacity var(--co-motion-duration-fast) var(--co-motion-ease-out);
|
|
269
289
|
}
|
|
270
290
|
|
|
291
|
+
/* Tinte de hover/selected de las celdas sticky: un overlay ANIMABLE.
|
|
292
|
+
La fila pinta su tinte translúcido en el <tr> y lo transiciona
|
|
293
|
+
(background-color, duration-fast). Una celda sticky lleva base opaca —no
|
|
294
|
+
puede dejar ver lo que scrollea debajo—, así que el tinte va compuesto
|
|
295
|
+
ENCIMA de esa base. Componerlo con `background-image` (gradiente) no es
|
|
296
|
+
animable: la columna fijada prendía y apagaba de golpe mientras el resto de
|
|
297
|
+
la fila se desvanecía (2026-09-07). `::before` con opacity/background-color
|
|
298
|
+
y la MISMA transición que la fila. z-index -1 dentro del stacking context
|
|
299
|
+
de la celda (position:sticky + z-index) = encima de su base opaca, debajo
|
|
300
|
+
de su contenido. Los tokens espejan los de .co-data-table__row de abajo. */
|
|
301
|
+
.co-data-table__td--sticky::before {
|
|
302
|
+
content: '';
|
|
303
|
+
position: absolute;
|
|
304
|
+
inset: 0;
|
|
305
|
+
z-index: -1;
|
|
306
|
+
pointer-events: none;
|
|
307
|
+
background-color: var(--co-semantic-surface-hover);
|
|
308
|
+
opacity: 0;
|
|
309
|
+
transition:
|
|
310
|
+
opacity var(--co-motion-duration-fast) var(--co-motion-ease-out),
|
|
311
|
+
background-color var(--co-motion-duration-fast) var(--co-motion-ease-out);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.co-data-table__row:hover .co-data-table__td--sticky::before {
|
|
315
|
+
opacity: 1;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.co-data-table__row--selected .co-data-table__td--sticky::before {
|
|
319
|
+
opacity: 1;
|
|
320
|
+
background-color: var(--co-color-opacity-negro-4);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.co-data-table__row--selected:hover .co-data-table__td--sticky::before {
|
|
324
|
+
background-color: var(--co-color-opacity-negro-8);
|
|
325
|
+
}
|
|
326
|
+
|
|
271
327
|
/* ─── RESIZE HANDLE ─────────────────────────────────────────── */
|
|
272
328
|
.co-data-table__resize-handle {
|
|
273
329
|
position: absolute;
|
|
@@ -319,7 +375,12 @@ co-data-table {
|
|
|
319
375
|
wrapper, never on the cell itself. */
|
|
320
376
|
height: 48px;
|
|
321
377
|
padding: 0 var(--co-spacing-md);
|
|
322
|
-
|
|
378
|
+
/* Transparente, NUNCA `inherit`: el hover/selected es un tinte translúcido
|
|
379
|
+
pintado en el <tr>. Con `inherit` cada celda normal lo repintaba encima
|
|
380
|
+
(doble tinte, ~15%) mientras las sticky —base opaca + un gradiente del
|
|
381
|
+
mismo tinte— quedaban al 8%: la columna fijada se veía más clara que el
|
|
382
|
+
resto de la fila en hover. Guard: co-data-table-cell-background-guard.test.ts */
|
|
383
|
+
background: transparent;
|
|
323
384
|
border-bottom: 1px solid color-mix(in srgb, var(--co-semantic-border-default) 75%, transparent);
|
|
324
385
|
border-right: 1px solid color-mix(in srgb, var(--co-semantic-border-default) 75%, transparent);
|
|
325
386
|
vertical-align: middle;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { measureTruncatedHeaders } from "./headerTruncationLogic";
|
|
1
2
|
import { h } from "@stencil/core";
|
|
2
3
|
import { edgeAutoScrollSpeed, resizeWidth } from "../../utils/columnResize";
|
|
3
4
|
/**
|
|
@@ -50,6 +51,9 @@ export class CoDataTable {
|
|
|
50
51
|
this.parsedFilteredFields = [];
|
|
51
52
|
this.parsedIndirectFields = [];
|
|
52
53
|
this.columnWidths = new Map();
|
|
54
|
+
/** Columnas cambiadas → re-medir tras el render (un cambio de texto con el
|
|
55
|
+
* mismo ancho no dispara el ResizeObserver). */
|
|
56
|
+
this.headerMeasurePending = false;
|
|
53
57
|
this.resizingColumn = null;
|
|
54
58
|
this.resizeStartX = 0;
|
|
55
59
|
this.resizeStartWidth = 0;
|
|
@@ -71,6 +75,7 @@ export class CoDataTable {
|
|
|
71
75
|
}
|
|
72
76
|
/* ─── WATCHERS ──────────────────────────────────────────── */
|
|
73
77
|
parseColumns() {
|
|
78
|
+
this.headerMeasurePending = true;
|
|
74
79
|
try {
|
|
75
80
|
const cols = typeof this.columns === 'string' ? JSON.parse(this.columns) : this.columns;
|
|
76
81
|
this.parsedColumns = cols;
|
|
@@ -119,13 +124,39 @@ export class CoDataTable {
|
|
|
119
124
|
}
|
|
120
125
|
}
|
|
121
126
|
componentWillLoad() {
|
|
127
|
+
// Recursos por instancia acá y no en inicializadores de campo: la instancia
|
|
128
|
+
// envuelta de @stencil/vitest los omite (ver nota en co-data-table.spec.tsx).
|
|
129
|
+
this.headerLabelEls = new Map();
|
|
130
|
+
this.truncatedHeaders = {};
|
|
122
131
|
this.parseColumns();
|
|
123
132
|
this.parseRows();
|
|
124
133
|
this.parseSelectedKeys();
|
|
125
134
|
this.parseFilteredFields();
|
|
126
135
|
this.parseIndirectFields();
|
|
127
136
|
}
|
|
137
|
+
componentDidLoad() {
|
|
138
|
+
// Tooltip del header SOLO cuando el label trunca (patrón co-list-item). El
|
|
139
|
+
// estado tiene que estar correcto ANTES del hover: Stencil re-renderiza en
|
|
140
|
+
// rAF, así que una medida en el pointerenter del <th> llega después de que
|
|
141
|
+
// co-tooltip leyó `disabled` al agendar su show (verificado headless
|
|
142
|
+
// 2026-09-07). Un ResizeObserver re-mide cuando el label cambia de ancho
|
|
143
|
+
// (resize de columna, panel que se muestra, viewport) — y en la carga.
|
|
144
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
145
|
+
this.headerResizeObserver = new ResizeObserver(() => this.measureHeaderTruncation());
|
|
146
|
+
this.headerLabelEls.forEach((el) => this.headerResizeObserver.observe(el));
|
|
147
|
+
}
|
|
148
|
+
this.measureHeaderTruncation();
|
|
149
|
+
}
|
|
150
|
+
disconnectedCallback() {
|
|
151
|
+
var _a;
|
|
152
|
+
(_a = this.headerResizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
153
|
+
this.headerResizeObserver = undefined;
|
|
154
|
+
}
|
|
128
155
|
componentDidRender() {
|
|
156
|
+
if (this.headerMeasurePending) {
|
|
157
|
+
this.headerMeasurePending = false;
|
|
158
|
+
this.measureHeaderTruncation();
|
|
159
|
+
}
|
|
129
160
|
// Auto-scroll parity: the resize tick grew the column (async @State render)
|
|
130
161
|
// and owes the container the same px of scroll. Here the DOM already has
|
|
131
162
|
// the new table width, so the advance can't clamp — width and scroll land
|
|
@@ -277,6 +308,29 @@ export class CoDataTable {
|
|
|
277
308
|
handleRowDblClick(row, index) {
|
|
278
309
|
this.coRowDblClick.emit({ row, index });
|
|
279
310
|
}
|
|
311
|
+
/** Escritura guardada: misma referencia = sin re-render de la tabla. */
|
|
312
|
+
measureHeaderTruncation() {
|
|
313
|
+
const next = measureTruncatedHeaders(this.truncatedHeaders, this.headerLabelEls);
|
|
314
|
+
if (next !== this.truncatedHeaders)
|
|
315
|
+
this.truncatedHeaders = next;
|
|
316
|
+
}
|
|
317
|
+
/** ref del label: registra/observa al montar, limpia al desmontar (ref null). */
|
|
318
|
+
registerHeaderLabel(field, el) {
|
|
319
|
+
var _a, _b, _c;
|
|
320
|
+
const prev = this.headerLabelEls.get(field);
|
|
321
|
+
if (el) {
|
|
322
|
+
if (prev === el)
|
|
323
|
+
return;
|
|
324
|
+
if (prev)
|
|
325
|
+
(_a = this.headerResizeObserver) === null || _a === void 0 ? void 0 : _a.unobserve(prev);
|
|
326
|
+
this.headerLabelEls.set(field, el);
|
|
327
|
+
(_b = this.headerResizeObserver) === null || _b === void 0 ? void 0 : _b.observe(el);
|
|
328
|
+
}
|
|
329
|
+
else if (prev) {
|
|
330
|
+
(_c = this.headerResizeObserver) === null || _c === void 0 ? void 0 : _c.unobserve(prev);
|
|
331
|
+
this.headerLabelEls.delete(field);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
280
334
|
handleColumnPin(field, e) {
|
|
281
335
|
e.stopPropagation();
|
|
282
336
|
this.coColumnPin.emit({ field });
|
|
@@ -386,7 +440,7 @@ export class CoDataTable {
|
|
|
386
440
|
: undefined }, h("span", { class: "co-data-table__th-content" }, h("span", { class: {
|
|
387
441
|
'co-data-table__pin-icon': true,
|
|
388
442
|
'co-data-table__pin-icon--active': !!col.sticky,
|
|
389
|
-
}, title: col.sticky ? 'Unpin column' : 'Pin column', onClick: (e) => this.handleColumnPin(col.field, e) }, h("co-icon", { name: "push-pin", size: 14, weight: col.sticky ? 'fill' : 'regular' })), col.sortable ? (h("button", { type: "button", class: "co-data-table__sort-button", "aria-label": `Sort by ${col.label}`, onClick: () => this.handleSort(col.field) }, h("span", { class: "co-data-table__th-label" }, col.label), this.renderSortIcon(col))) : (h("span", { class: "co-data-table__th-label" }, col.label)), col.filterable && (h("span", { class: {
|
|
443
|
+
}, title: col.sticky ? 'Unpin column' : 'Pin column', onClick: (e) => this.handleColumnPin(col.field, e) }, h("co-icon", { name: "push-pin", size: 14, weight: col.sticky ? 'fill' : 'regular' })), col.sortable ? (h("button", { type: "button", class: "co-data-table__sort-button", "aria-label": `Sort by ${col.label}`, onClick: () => this.handleSort(col.field) }, h("co-tooltip", { block: true, class: "co-data-table__th-tip", content: col.label, placement: "top", disabled: !this.truncatedHeaders[col.field] }, h("span", { class: "co-data-table__th-label", ref: (el) => this.registerHeaderLabel(col.field, el) }, col.label)), this.renderSortIcon(col))) : (h("co-tooltip", { block: true, class: "co-data-table__th-tip", content: col.label, placement: "top", disabled: !this.truncatedHeaders[col.field] }, h("span", { class: "co-data-table__th-label", ref: (el) => this.registerHeaderLabel(col.field, el) }, col.label))), col.filterable && (h("span", { class: {
|
|
390
444
|
'co-data-table__filter-icon': true,
|
|
391
445
|
'co-data-table__filter-icon--active': this.parsedFilteredFields.includes(col.field),
|
|
392
446
|
'co-data-table__filter-icon--indirect': !this.parsedFilteredFields.includes(col.field) && this.parsedIndirectFields.includes(col.field),
|
|
@@ -421,12 +475,12 @@ export class CoDataTable {
|
|
|
421
475
|
: h("slot", { name: "empty-action" }))));
|
|
422
476
|
}
|
|
423
477
|
render() {
|
|
424
|
-
return (h("div", { key: '
|
|
478
|
+
return (h("div", { key: '6f71533676a2c66ae46b1ee9940b405744cef174', class: {
|
|
425
479
|
'co-data-table': true,
|
|
426
480
|
'co-data-table--resizing': this.resizingColumn !== null,
|
|
427
481
|
'co-data-table--loading': this.loading,
|
|
428
482
|
'co-data-table--empty': !this.loading && this.parsedRows.length === 0,
|
|
429
|
-
} }, h("div", { key: '
|
|
483
|
+
} }, h("div", { key: '8176dca34858e32ba2ce008ac44cf444ea952f08', class: "co-data-table__scroll" }, h("table", { key: 'f285815728244a7161d91dbed6ca87b158db4de6', class: "co-data-table__table", style: { width: `${this.getTableWidth()}px`, minWidth: '100%' } }, this.renderColgroup(), this.renderHeader(), h("slot", { key: '97f4ed9020a7bdb8b262313a10451e9aff754a8e' }), this.loading ? this.renderSkeletonBody() : null)), this.renderEmpty()));
|
|
430
484
|
}
|
|
431
485
|
static get is() { return "co-data-table"; }
|
|
432
486
|
static get originalStyleUrls() {
|
|
@@ -450,7 +504,7 @@ export class CoDataTable {
|
|
|
450
504
|
"references": {
|
|
451
505
|
"CoDataTableColumn": {
|
|
452
506
|
"location": "local",
|
|
453
|
-
"path": "/Users/agox/
|
|
507
|
+
"path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-data-table/co-data-table.tsx",
|
|
454
508
|
"id": "src/components/co-data-table/co-data-table.tsx::CoDataTableColumn"
|
|
455
509
|
}
|
|
456
510
|
}
|
|
@@ -815,6 +869,7 @@ export class CoDataTable {
|
|
|
815
869
|
"parsedFilteredFields": {},
|
|
816
870
|
"parsedIndirectFields": {},
|
|
817
871
|
"columnWidths": {},
|
|
872
|
+
"truncatedHeaders": {},
|
|
818
873
|
"resizingColumn": {},
|
|
819
874
|
"resizeStartX": {},
|
|
820
875
|
"resizeStartWidth": {}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lógica pura del tooltip de header truncado (sin DOM real: testeable en vitest).
|
|
3
|
+
* Misma regla que co-list-item y `useEllipsisTooltip` de suite-v2: +1px de
|
|
4
|
+
* tolerancia porque el navegador redondea a enteros y 1px de más NO es corte.
|
|
5
|
+
*/
|
|
6
|
+
export function isEllipsisTruncated(node) {
|
|
7
|
+
return !!node && node.scrollWidth > node.clientWidth + 1;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Próximo mapa field → truncado. Devuelve el MISMO objeto si nada cambió (un
|
|
11
|
+
* @State de Stencil se compara por referencia: escribir siempre re-renderiza la
|
|
12
|
+
* tabla entera en cada hover de header).
|
|
13
|
+
*/
|
|
14
|
+
export function nextTruncatedHeaders(prev, field, truncated) {
|
|
15
|
+
if (!!prev[field] === truncated)
|
|
16
|
+
return prev;
|
|
17
|
+
return Object.assign(Object.assign({}, prev), { [field]: truncated });
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Mide TODOS los labels registrados (field → nodo) en una pasada y devuelve el
|
|
21
|
+
* próximo mapa; la MISMA referencia si ningún field cambió. Un field que ya no
|
|
22
|
+
* está registrado (columna quitada) desaparece del mapa.
|
|
23
|
+
*/
|
|
24
|
+
export function measureTruncatedHeaders(prev, labels) {
|
|
25
|
+
let changed = Object.keys(prev).some((field) => !labels.has(field));
|
|
26
|
+
const next = {};
|
|
27
|
+
labels.forEach((node, field) => {
|
|
28
|
+
const truncated = isEllipsisTruncated(node);
|
|
29
|
+
next[field] = truncated;
|
|
30
|
+
if (!!prev[field] !== truncated)
|
|
31
|
+
changed = true;
|
|
32
|
+
});
|
|
33
|
+
return changed ? next : prev;
|
|
34
|
+
}
|
|
@@ -129,6 +129,19 @@
|
|
|
129
129
|
align-items: flex-start;
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
/* El calendario llena el ancho del panel. Ese ancho lo fija la fila de los dos campos de
|
|
133
|
+
fecha, y el calendario era `max-content` (7 celdas fijas): sin presets quedaban ~170px en
|
|
134
|
+
blanco a la derecha (reporte 2026-09-16). Knobs de co-calendar: ancho fluido, columnas que
|
|
135
|
+
reparten el sobrante y día a ancho de columna (la banda del rango sigue continua; el día
|
|
136
|
+
es un rectángulo redondeado, no un círculo). En touch va centrado con celdas de 44px. */
|
|
137
|
+
.co-date-range-picker__body:not(.co-date-range-picker__body--touch) co-calendar {
|
|
138
|
+
flex: 1;
|
|
139
|
+
min-width: 0;
|
|
140
|
+
--co-calendar-width: 100%;
|
|
141
|
+
--co-calendar-col: minmax(var(--co-calendar-day-size), 1fr);
|
|
142
|
+
--co-calendar-day-width: 100%;
|
|
143
|
+
}
|
|
144
|
+
|
|
132
145
|
/* Mobile bottom-sheet: stack presets (horizontal scroll) above the calendar. */
|
|
133
146
|
.co-date-range-picker__body--touch {
|
|
134
147
|
flex-direction: column;
|
|
@@ -271,6 +271,8 @@ export class CoDateRangePicker {
|
|
|
271
271
|
return `${f} → ${to}`;
|
|
272
272
|
if (f)
|
|
273
273
|
return `${f} → …`;
|
|
274
|
+
if (to)
|
|
275
|
+
return `… → ${to}`; // solo fin (p. ej. un ticket con vencimiento y sin inicio): no ocultar el dato
|
|
274
276
|
return this.placeholder || t.setDate; // `||`: empty string → localized default
|
|
275
277
|
}
|
|
276
278
|
presetItems(t) {
|
|
@@ -1039,7 +1041,7 @@ export class CoDateRangePicker {
|
|
|
1039
1041
|
"references": {
|
|
1040
1042
|
"DateRangeValue": {
|
|
1041
1043
|
"location": "local",
|
|
1042
|
-
"path": "/Users/agox/
|
|
1044
|
+
"path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
|
|
1043
1045
|
"id": "src/components/co-date-range-picker/co-date-range-picker.tsx::DateRangeValue"
|
|
1044
1046
|
}
|
|
1045
1047
|
}
|
|
@@ -1060,7 +1062,7 @@ export class CoDateRangePicker {
|
|
|
1060
1062
|
"references": {
|
|
1061
1063
|
"DateRangeValue": {
|
|
1062
1064
|
"location": "local",
|
|
1063
|
-
"path": "/Users/agox/
|
|
1065
|
+
"path": "/Users/agox/worktrees/cobalt-release-2026-09-18/packages/core/src/components/co-date-range-picker/co-date-range-picker.tsx",
|
|
1064
1066
|
"id": "src/components/co-date-range-picker/co-date-range-picker.tsx::DateRangeValue"
|
|
1065
1067
|
}
|
|
1066
1068
|
}
|