@vielzeug/refine 2.0.3 → 2.1.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/dist/accordion-item.cjs +1 -1
- package/dist/accordion-item.cjs.map +1 -1
- package/dist/accordion-item.js +1 -1
- package/dist/accordion-item.js.map +1 -1
- package/dist/accordion.cjs +1 -1
- package/dist/accordion.cjs.map +1 -1
- package/dist/accordion.js +1 -1
- package/dist/accordion.js.map +1 -1
- package/dist/alert.cjs.map +1 -1
- package/dist/alert.js.map +1 -1
- package/dist/async.cjs.map +1 -1
- package/dist/async.js.map +1 -1
- package/dist/avatar-group.cjs.map +1 -1
- package/dist/avatar-group.js.map +1 -1
- package/dist/avatar.cjs +6 -6
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +1 -2
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs.map +1 -1
- package/dist/badge.js.map +1 -1
- package/dist/box.cjs.map +1 -1
- package/dist/box.js.map +1 -1
- package/dist/breadcrumb.cjs +3 -3
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +4 -4
- package/dist/breadcrumb.js.map +1 -1
- package/dist/button-group.cjs +1 -1
- package/dist/button-group.cjs.map +1 -1
- package/dist/button-group.js +0 -1
- package/dist/button-group.js.map +1 -1
- package/dist/button.cjs.map +1 -1
- package/dist/button.js.map +1 -1
- package/dist/calendar.cjs.map +1 -1
- package/dist/calendar.js.map +1 -1
- package/dist/card.cjs +7 -7
- package/dist/card.cjs.map +1 -1
- package/dist/card.js +27 -27
- package/dist/card.js.map +1 -1
- package/dist/carousel.cjs +20 -20
- package/dist/carousel.cjs.map +1 -1
- package/dist/carousel.js +7 -8
- package/dist/carousel.js.map +1 -1
- package/dist/chat-message.cjs +10 -10
- package/dist/chat-message.cjs.map +1 -1
- package/dist/chat-message.js +1 -2
- package/dist/chat-message.js.map +1 -1
- package/dist/checkbox-group.cjs +7 -7
- package/dist/checkbox-group.cjs.map +1 -1
- package/dist/checkbox-group.js +26 -26
- package/dist/checkbox-group.js.map +1 -1
- package/dist/checkbox.cjs +2 -2
- package/dist/checkbox.cjs.map +1 -1
- package/dist/checkbox.js +33 -33
- package/dist/checkbox.js.map +1 -1
- package/dist/chip.cjs +16 -16
- package/dist/chip.cjs.map +1 -1
- package/dist/chip.js +1 -2
- package/dist/chip.js.map +1 -1
- package/dist/combobox.cjs +28 -28
- package/dist/combobox.cjs.map +1 -1
- package/dist/combobox.js +211 -211
- package/dist/combobox.js.map +1 -1
- package/dist/command-palette.cjs +21 -21
- package/dist/command-palette.cjs.map +1 -1
- package/dist/command-palette.js +27 -28
- package/dist/command-palette.js.map +1 -1
- package/dist/content/avatar/avatar.css.cjs +1 -1
- package/dist/content/avatar/avatar.css.js +1 -1
- package/dist/content/avatar/avatar.d.ts.map +1 -1
- package/dist/content/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/content/card/card.css.cjs +1 -1
- package/dist/content/card/card.css.cjs.map +1 -1
- package/dist/content/card/card.css.js +1 -1
- package/dist/content/card/card.css.js.map +1 -1
- package/dist/content/card/card.d.ts.map +1 -1
- package/dist/content/carousel/carousel-slide.cjs.map +1 -1
- package/dist/content/carousel/carousel-slide.js.map +1 -1
- package/dist/content/carousel/carousel.css.cjs +1 -1
- package/dist/content/carousel/carousel.css.cjs.map +1 -1
- package/dist/content/carousel/carousel.css.js +1 -1
- package/dist/content/carousel/carousel.css.js.map +1 -1
- package/dist/content/carousel/carousel.d.ts.map +1 -1
- package/dist/content/carousel/index.d.ts +1 -1
- package/dist/content/carousel/index.d.ts.map +1 -1
- package/dist/content/chat-message/chat-message.css.cjs +1 -1
- package/dist/content/chat-message/chat-message.css.js +1 -1
- package/dist/content/chat-message/chat-message.d.ts.map +1 -1
- package/dist/content/code-window/code-window.css.cjs +1 -1
- package/dist/content/code-window/code-window.css.js +1 -1
- package/dist/content/copy-command/copy-command.css.cjs +1 -1
- package/dist/content/copy-command/copy-command.css.js +1 -1
- package/dist/content/copy-command/copy-command.d.ts.map +1 -1
- package/dist/content/index.d.ts +22 -22
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/list/_list-item-reveal.cjs.map +1 -1
- package/dist/content/list/_list-item-reveal.d.ts +1 -1
- package/dist/content/list/_list-item-reveal.d.ts.map +1 -1
- package/dist/content/list/_list-item-reveal.js.map +1 -1
- package/dist/content/list/list-item.css.cjs +1 -1
- package/dist/content/list/list-item.css.cjs.map +1 -1
- package/dist/content/list/list-item.css.js +1 -1
- package/dist/content/list/list-item.css.js.map +1 -1
- package/dist/content/list/list.d.ts.map +1 -1
- package/dist/content/marquee/marquee.css.cjs +1 -1
- package/dist/content/marquee/marquee.css.js +1 -1
- package/dist/content/pagination/pagination.css.cjs +1 -1
- package/dist/content/pagination/pagination.css.js +1 -1
- package/dist/content/pagination/pagination.d.ts.map +1 -1
- package/dist/content/separator/separator.css.cjs +1 -1
- package/dist/content/separator/separator.css.js +1 -1
- package/dist/content/separator/separator.d.ts.map +1 -1
- package/dist/content/stepper/step.css.cjs.map +1 -1
- package/dist/content/stepper/step.css.js.map +1 -1
- package/dist/content/stepper/stepper.d.ts.map +1 -1
- package/dist/content/table/table.css.cjs +1 -1
- package/dist/content/table/table.css.js +1 -1
- package/dist/content/text/text.css.cjs +1 -1
- package/dist/content/text/text.css.cjs.map +1 -1
- package/dist/content/text/text.css.js +1 -1
- package/dist/content/text/text.css.js.map +1 -1
- package/dist/content/text/text.d.ts +1 -1
- package/dist/content/text/text.d.ts.map +1 -1
- package/dist/copy-command.cjs.map +1 -1
- package/dist/copy-command.js.map +1 -1
- package/dist/core/checkable.cjs +1 -1
- package/dist/core/checkable.cjs.map +1 -1
- package/dist/core/checkable.d.ts.map +1 -1
- package/dist/core/checkable.js +4 -4
- package/dist/core/checkable.js.map +1 -1
- package/dist/core/choice-field.cjs +1 -1
- package/dist/core/choice-field.cjs.map +1 -1
- package/dist/core/choice-field.d.ts.map +1 -1
- package/dist/core/choice-field.js +1 -2
- package/dist/core/choice-field.js.map +1 -1
- package/dist/core/date-picker.cjs +1 -1
- package/dist/core/date-picker.cjs.map +1 -1
- package/dist/core/date-picker.d.ts.map +1 -1
- package/dist/core/date-picker.js +3 -3
- package/dist/core/date-picker.js.map +1 -1
- package/dist/core/index.d.ts +17 -17
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/option-list.cjs +1 -1
- package/dist/core/option-list.cjs.map +1 -1
- package/dist/core/option-list.d.ts.map +1 -1
- package/dist/core/option-list.js +4 -4
- package/dist/core/option-list.js.map +1 -1
- package/dist/core/overlay.cjs.map +1 -1
- package/dist/core/overlay.d.ts +2 -2
- package/dist/core/overlay.d.ts.map +1 -1
- package/dist/core/overlay.js.map +1 -1
- package/dist/core/positioner.cjs +1 -1
- package/dist/core/positioner.cjs.map +1 -1
- package/dist/core/positioner.d.ts +6 -1
- package/dist/core/positioner.d.ts.map +1 -1
- package/dist/core/positioner.js +11 -11
- package/dist/core/positioner.js.map +1 -1
- package/dist/core/ref-callback.cjs +1 -1
- package/dist/core/ref-callback.cjs.map +1 -1
- package/dist/core/ref-callback.d.ts.map +1 -1
- package/dist/core/ref-callback.js +1 -1
- package/dist/core/ref-callback.js.map +1 -1
- package/dist/core/signals.cjs +1 -1
- package/dist/core/signals.cjs.map +1 -1
- package/dist/core/signals.d.ts.map +1 -1
- package/dist/core/signals.js +1 -2
- package/dist/core/signals.js.map +1 -1
- package/dist/core/slider.cjs.map +1 -1
- package/dist/core/slider.d.ts.map +1 -1
- package/dist/core/slider.js.map +1 -1
- package/dist/core/spinner.cjs.map +1 -1
- package/dist/core/spinner.d.ts.map +1 -1
- package/dist/core/spinner.js.map +1 -1
- package/dist/core/text-field.cjs +1 -1
- package/dist/core/text-field.cjs.map +1 -1
- package/dist/core/text-field.js +1 -1
- package/dist/core/text-field.js.map +1 -1
- package/dist/custom-elements.json +4926 -4678
- package/dist/datagrid.cjs +114 -114
- package/dist/datagrid.cjs.map +1 -1
- package/dist/datagrid.js +42 -43
- package/dist/datagrid.js.map +1 -1
- package/dist/date-picker.cjs.map +1 -1
- package/dist/date-picker.js.map +1 -1
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js.map +1 -1
- package/dist/disclosure/accordion/accordion.d.ts.map +1 -1
- package/dist/disclosure/accordion-item/accordion-item.css.cjs +1 -1
- package/dist/disclosure/accordion-item/accordion-item.css.cjs.map +1 -1
- package/dist/disclosure/accordion-item/accordion-item.css.js +1 -1
- package/dist/disclosure/accordion-item/accordion-item.css.js.map +1 -1
- package/dist/disclosure/index.d.ts +6 -6
- package/dist/disclosure/index.d.ts.map +1 -1
- package/dist/disclosure/tab-item/tab-item.css.cjs.map +1 -1
- package/dist/disclosure/tab-item/tab-item.css.js.map +1 -1
- package/dist/disclosure/tab-item/tab-item.d.ts.map +1 -1
- package/dist/disclosure/tabs/tabs.css.cjs +1 -1
- package/dist/disclosure/tabs/tabs.css.cjs.map +1 -1
- package/dist/disclosure/tabs/tabs.css.js +1 -1
- package/dist/disclosure/tabs/tabs.css.js.map +1 -1
- package/dist/disclosure/tabs/tabs.d.ts.map +1 -1
- package/dist/drawer.cjs +5 -5
- package/dist/drawer.cjs.map +1 -1
- package/dist/drawer.js +26 -26
- package/dist/drawer.js.map +1 -1
- package/dist/feedback/alert/alert.css.cjs +1 -1
- package/dist/feedback/alert/alert.css.js +1 -1
- package/dist/feedback/async/async.d.ts +1 -1
- package/dist/feedback/async/async.d.ts.map +1 -1
- package/dist/feedback/badge/badge.css.cjs +1 -1
- package/dist/feedback/badge/badge.css.js +1 -1
- package/dist/feedback/badge/badge.d.ts.map +1 -1
- package/dist/feedback/chip/chip.css.cjs.map +1 -1
- package/dist/feedback/chip/chip.css.js.map +1 -1
- package/dist/feedback/chip/chip.d.ts.map +1 -1
- package/dist/feedback/index.d.ts +12 -12
- package/dist/feedback/index.d.ts.map +1 -1
- package/dist/feedback/progress/progress.d.ts.map +1 -1
- package/dist/feedback/skeleton/skeleton.d.ts.map +1 -1
- package/dist/feedback/toast/index.d.ts +1 -1
- package/dist/feedback/toast/index.d.ts.map +1 -1
- package/dist/feedback/toast/toast.css.cjs +1 -1
- package/dist/feedback/toast/toast.css.cjs.map +1 -1
- package/dist/feedback/toast/toast.css.js +1 -1
- package/dist/feedback/toast/toast.css.js.map +1 -1
- package/dist/feedback/toast/toast.d.ts +1 -1
- package/dist/feedback/toast/toast.d.ts.map +1 -1
- package/dist/feedback/typing-indicator/typing-indicator.d.ts.map +1 -1
- package/dist/file-input.cjs +67 -67
- package/dist/file-input.cjs.map +1 -1
- package/dist/file-input.js +129 -130
- package/dist/file-input.js.map +1 -1
- package/dist/frameworks/elements.d.ts +86 -0
- package/dist/frameworks/react.d.ts +18 -0
- package/dist/frameworks/vue.d.ts +16 -0
- package/dist/grid.cjs.map +1 -1
- package/dist/grid.js.map +1 -1
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js.map +1 -1
- package/dist/input.cjs +21 -21
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +58 -58
- package/dist/input.js.map +1 -1
- package/dist/inputs/button/button.css.cjs +1 -1
- package/dist/inputs/button/button.css.cjs.map +1 -1
- package/dist/inputs/button/button.css.js +1 -1
- package/dist/inputs/button/button.css.js.map +1 -1
- package/dist/inputs/button/button.d.ts.map +1 -1
- package/dist/inputs/button-group/button-group.css.cjs.map +1 -1
- package/dist/inputs/button-group/button-group.css.js.map +1 -1
- package/dist/inputs/button-group/button-group.d.ts +1 -1
- package/dist/inputs/button-group/button-group.d.ts.map +1 -1
- package/dist/inputs/calendar/calendar.css.cjs +1 -1
- package/dist/inputs/calendar/calendar.css.cjs.map +1 -1
- package/dist/inputs/calendar/calendar.css.js +1 -1
- package/dist/inputs/calendar/calendar.css.js.map +1 -1
- package/dist/inputs/calendar/calendar.d.ts.map +1 -1
- package/dist/inputs/checkbox/checkbox.css.cjs +1 -1
- package/dist/inputs/checkbox/checkbox.css.js +1 -1
- package/dist/inputs/checkbox/checkbox.d.ts.map +1 -1
- package/dist/inputs/checkbox-group/checkbox-group.d.ts +1 -1
- package/dist/inputs/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/inputs/combobox/combobox.css.cjs +1 -1
- package/dist/inputs/combobox/combobox.css.js +1 -1
- package/dist/inputs/combobox/combobox.d.ts.map +1 -1
- package/dist/inputs/datagrid/datagrid-column.cjs.map +1 -1
- package/dist/inputs/datagrid/datagrid-column.d.ts.map +1 -1
- package/dist/inputs/datagrid/datagrid-column.js.map +1 -1
- package/dist/inputs/datagrid/datagrid-model.cjs +1 -1
- package/dist/inputs/datagrid/datagrid-model.cjs.map +1 -1
- package/dist/inputs/datagrid/datagrid-model.d.ts.map +1 -1
- package/dist/inputs/datagrid/datagrid-model.js +1 -2
- package/dist/inputs/datagrid/datagrid-model.js.map +1 -1
- package/dist/inputs/datagrid/datagrid.css.cjs +1 -1
- package/dist/inputs/datagrid/datagrid.css.cjs.map +1 -1
- package/dist/inputs/datagrid/datagrid.css.js +1 -1
- package/dist/inputs/datagrid/datagrid.css.js.map +1 -1
- package/dist/inputs/datagrid/datagrid.d.ts +1 -1
- package/dist/inputs/datagrid/datagrid.d.ts.map +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
- package/dist/inputs/date-picker/date-picker.css.js +1 -1
- package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
- package/dist/inputs/date-picker/date-picker.d.ts.map +1 -1
- package/dist/inputs/file-input/file-input-upload.cjs +1 -1
- package/dist/inputs/file-input/file-input-upload.cjs.map +1 -1
- package/dist/inputs/file-input/file-input-upload.d.ts.map +1 -1
- package/dist/inputs/file-input/file-input-upload.js +2 -3
- package/dist/inputs/file-input/file-input-upload.js.map +1 -1
- package/dist/inputs/file-input/file-input.css.cjs +1 -1
- package/dist/inputs/file-input/file-input.css.js +1 -1
- package/dist/inputs/file-input/file-input.d.ts.map +1 -1
- package/dist/inputs/index.d.ts +28 -28
- package/dist/inputs/index.d.ts.map +1 -1
- package/dist/inputs/input/input.css.cjs +1 -1
- package/dist/inputs/input/input.css.js +1 -1
- package/dist/inputs/input/input.d.ts.map +1 -1
- package/dist/inputs/message-composer/message-composer.css.cjs +1 -1
- package/dist/inputs/message-composer/message-composer.css.js +1 -1
- package/dist/inputs/message-composer/message-composer.d.ts +1 -1
- package/dist/inputs/message-composer/message-composer.d.ts.map +1 -1
- package/dist/inputs/number-input/number-input.d.ts.map +1 -1
- package/dist/inputs/otp-input/otp-input.d.ts.map +1 -1
- package/dist/inputs/radio/radio.css.cjs +1 -1
- package/dist/inputs/radio/radio.css.js +1 -1
- package/dist/inputs/radio/radio.d.ts.map +1 -1
- package/dist/inputs/radio-group/radio-group.d.ts +2 -2
- package/dist/inputs/radio-group/radio-group.d.ts.map +1 -1
- package/dist/inputs/rating/rating.d.ts.map +1 -1
- package/dist/inputs/select/select.css.cjs +1 -1
- package/dist/inputs/select/select.css.js +1 -1
- package/dist/inputs/select/select.d.ts.map +1 -1
- package/dist/inputs/shared/field-binding.cjs.map +1 -1
- package/dist/inputs/shared/field-binding.d.ts.map +1 -1
- package/dist/inputs/shared/field-binding.js.map +1 -1
- package/dist/inputs/shared/templates.cjs.map +1 -1
- package/dist/inputs/shared/templates.d.ts.map +1 -1
- package/dist/inputs/shared/templates.js.map +1 -1
- package/dist/inputs/slider/slider.d.ts.map +1 -1
- package/dist/inputs/switch/switch.css.cjs +1 -1
- package/dist/inputs/switch/switch.css.js +1 -1
- package/dist/inputs/switch/switch.d.ts.map +1 -1
- package/dist/inputs/textarea/textarea.css.cjs +1 -1
- package/dist/inputs/textarea/textarea.css.js +1 -1
- package/dist/inputs/textarea/textarea.d.ts.map +1 -1
- package/dist/inputs/time-picker/time-picker.css.cjs +1 -1
- package/dist/inputs/time-picker/time-picker.css.cjs.map +1 -1
- package/dist/inputs/time-picker/time-picker.css.js +1 -1
- package/dist/inputs/time-picker/time-picker.css.js.map +1 -1
- package/dist/inputs/time-picker/time-picker.d.ts.map +1 -1
- package/dist/layout/box/box.d.ts.map +1 -1
- package/dist/layout/grid/grid.d.ts.map +1 -1
- package/dist/layout/index.d.ts +6 -6
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/navbar/navbar.css.cjs +1 -1
- package/dist/layout/navbar/navbar.css.js +1 -1
- package/dist/layout/navbar/navbar.d.ts.map +1 -1
- package/dist/layout/sidebar/sidebar-group.css.cjs +1 -1
- package/dist/layout/sidebar/sidebar-group.css.cjs.map +1 -1
- package/dist/layout/sidebar/sidebar-group.css.js +1 -1
- package/dist/layout/sidebar/sidebar-group.css.js.map +1 -1
- package/dist/layout/sidebar/sidebar.css.cjs +1 -1
- package/dist/layout/sidebar/sidebar.css.cjs.map +1 -1
- package/dist/layout/sidebar/sidebar.css.js +1 -1
- package/dist/layout/sidebar/sidebar.css.js.map +1 -1
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
- package/dist/list-item.cjs.map +1 -1
- package/dist/list-item.js.map +1 -1
- package/dist/list.cjs +2 -2
- package/dist/list.cjs.map +1 -1
- package/dist/list.js +15 -16
- package/dist/list.js.map +1 -1
- package/dist/marquee.cjs +1 -1
- package/dist/marquee.cjs.map +1 -1
- package/dist/marquee.js +1 -1
- package/dist/marquee.js.map +1 -1
- package/dist/menu.cjs +5 -5
- package/dist/menu.cjs.map +1 -1
- package/dist/menu.js +40 -41
- package/dist/menu.js.map +1 -1
- package/dist/message-composer.cjs +16 -16
- package/dist/message-composer.cjs.map +1 -1
- package/dist/message-composer.js +61 -61
- package/dist/message-composer.js.map +1 -1
- package/dist/navbar.cjs +9 -9
- package/dist/navbar.cjs.map +1 -1
- package/dist/navbar.js +1 -2
- package/dist/navbar.js.map +1 -1
- package/dist/navigation-menu.cjs +11 -0
- package/dist/navigation-menu.cjs.map +1 -0
- package/dist/navigation-menu.js +138 -0
- package/dist/navigation-menu.js.map +1 -0
- package/dist/number-input.cjs +24 -24
- package/dist/number-input.cjs.map +1 -1
- package/dist/number-input.js +41 -42
- package/dist/number-input.js.map +1 -1
- package/dist/otp-input.cjs +13 -13
- package/dist/otp-input.cjs.map +1 -1
- package/dist/otp-input.js +32 -33
- package/dist/otp-input.js.map +1 -1
- package/dist/overlay/command-palette/command-palette-items.cjs.map +1 -1
- package/dist/overlay/command-palette/command-palette-items.d.ts.map +1 -1
- package/dist/overlay/command-palette/command-palette-items.js.map +1 -1
- package/dist/overlay/command-palette/command-palette.css.cjs +1 -1
- package/dist/overlay/command-palette/command-palette.css.cjs.map +1 -1
- package/dist/overlay/command-palette/command-palette.css.js +1 -1
- package/dist/overlay/command-palette/command-palette.css.js.map +1 -1
- package/dist/overlay/command-palette/command-palette.d.ts.map +1 -1
- package/dist/overlay/dialog/dialog.css.cjs +1 -1
- package/dist/overlay/dialog/dialog.css.js +1 -1
- package/dist/overlay/dialog/dialog.d.ts.map +1 -1
- package/dist/overlay/drawer/drawer.css.cjs +1 -1
- package/dist/overlay/drawer/drawer.css.js +1 -1
- package/dist/overlay/drawer/drawer.d.ts +2 -2
- package/dist/overlay/drawer/drawer.d.ts.map +1 -1
- package/dist/overlay/index.d.ts +7 -5
- package/dist/overlay/index.d.ts.map +1 -1
- package/dist/overlay/menu/menu.css.cjs +1 -1
- package/dist/overlay/menu/menu.css.js +1 -1
- package/dist/overlay/menu/menu.d.ts +2 -2
- package/dist/overlay/menu/menu.d.ts.map +1 -1
- package/dist/overlay/navigation-menu/navigation-menu-item.css.cjs +2 -0
- package/dist/overlay/navigation-menu/navigation-menu-item.css.cjs.map +1 -0
- package/dist/overlay/navigation-menu/navigation-menu-item.css.js +6 -0
- package/dist/overlay/navigation-menu/navigation-menu-item.css.js.map +1 -0
- package/dist/overlay/navigation-menu/navigation-menu-panel.css.cjs +2 -0
- package/dist/overlay/navigation-menu/navigation-menu-panel.css.cjs.map +1 -0
- package/dist/overlay/navigation-menu/navigation-menu-panel.css.js +6 -0
- package/dist/overlay/navigation-menu/navigation-menu-panel.css.js.map +1 -0
- package/dist/overlay/navigation-menu/navigation-menu.css.cjs +2 -0
- package/dist/overlay/navigation-menu/navigation-menu.css.cjs.map +1 -0
- package/dist/overlay/navigation-menu/navigation-menu.css.js +6 -0
- package/dist/overlay/navigation-menu/navigation-menu.css.js.map +1 -0
- package/dist/overlay/navigation-menu/navigation-menu.d.ts +75 -0
- package/dist/overlay/navigation-menu/navigation-menu.d.ts.map +1 -0
- package/dist/overlay/popover/popover.d.ts +1 -1
- package/dist/overlay/popover/popover.d.ts.map +1 -1
- package/dist/overlay/shared/use-dialog.cjs +1 -1
- package/dist/overlay/shared/use-dialog.cjs.map +1 -1
- package/dist/overlay/shared/use-dialog.d.ts.map +1 -1
- package/dist/overlay/shared/use-dialog.js +4 -5
- package/dist/overlay/shared/use-dialog.js.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
- package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.js +1 -2
- package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
- package/dist/overlay/tooltip/tooltip.d.ts +1 -1
- package/dist/overlay/tooltip/tooltip.d.ts.map +1 -1
- package/dist/pagination.cjs.map +1 -1
- package/dist/pagination.js.map +1 -1
- package/dist/popover.cjs +1 -1
- package/dist/popover.cjs.map +1 -1
- package/dist/popover.js +0 -1
- package/dist/popover.js.map +1 -1
- package/dist/progress.cjs.map +1 -1
- package/dist/progress.js.map +1 -1
- package/dist/radio-group.cjs +5 -5
- package/dist/radio-group.cjs.map +1 -1
- package/dist/radio-group.js +26 -27
- package/dist/radio-group.js.map +1 -1
- package/dist/radio.cjs +2 -2
- package/dist/radio.cjs.map +1 -1
- package/dist/radio.js +41 -41
- package/dist/radio.js.map +1 -1
- package/dist/rating.cjs +4 -4
- package/dist/rating.cjs.map +1 -1
- package/dist/rating.js +36 -36
- package/dist/rating.js.map +1 -1
- package/dist/refine.cjs +692 -683
- package/dist/refine.cjs.map +1 -1
- package/dist/refine.iife.js +692 -683
- package/dist/refine.iife.js.map +1 -1
- package/dist/refine.js +743 -734
- package/dist/refine.js.map +1 -1
- package/dist/select.cjs +42 -42
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +146 -147
- package/dist/select.js.map +1 -1
- package/dist/separator.cjs.map +1 -1
- package/dist/separator.js.map +1 -1
- package/dist/sidebar.cjs +17 -17
- package/dist/sidebar.cjs.map +1 -1
- package/dist/sidebar.js +7 -8
- package/dist/sidebar.js.map +1 -1
- package/dist/skeleton.cjs +3 -3
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +1 -2
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.cjs +12 -12
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +54 -55
- package/dist/slider.js.map +1 -1
- package/dist/step.cjs.map +1 -1
- package/dist/step.js.map +1 -1
- package/dist/stepper.cjs +2 -2
- package/dist/stepper.cjs.map +1 -1
- package/dist/stepper.js +8 -7
- package/dist/stepper.js.map +1 -1
- package/dist/styles/index.d.ts +2 -2
- package/dist/styles/index.d.ts.map +1 -1
- package/dist/styles/preflight.css +1 -1
- package/dist/styles/theme.css +15 -30
- package/dist/switch.cjs +3 -3
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +28 -28
- package/dist/switch.js.map +1 -1
- package/dist/tab-item.cjs +2 -2
- package/dist/tab-item.cjs.map +1 -1
- package/dist/tab-item.js +21 -21
- package/dist/tab-item.js.map +1 -1
- package/dist/tab-panel.cjs +2 -2
- package/dist/tab-panel.cjs.map +1 -1
- package/dist/tab-panel.js +9 -9
- package/dist/tab-panel.js.map +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +1 -1
- package/dist/table.js.map +1 -1
- package/dist/tabs.cjs +6 -6
- package/dist/tabs.cjs.map +1 -1
- package/dist/tabs.js +14 -15
- package/dist/tabs.js.map +1 -1
- package/dist/text.cjs.map +1 -1
- package/dist/text.js.map +1 -1
- package/dist/textarea.cjs +11 -11
- package/dist/textarea.cjs.map +1 -1
- package/dist/textarea.js +59 -59
- package/dist/textarea.js.map +1 -1
- package/dist/time-picker.cjs.map +1 -1
- package/dist/time-picker.js.map +1 -1
- package/dist/toast.cjs +16 -16
- package/dist/toast.cjs.map +1 -1
- package/dist/toast.js +20 -21
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/typing-indicator.cjs +1 -1
- package/dist/typing-indicator.cjs.map +1 -1
- package/dist/typing-indicator.js +1 -1
- package/dist/typing-indicator.js.map +1 -1
- package/package.json +104 -78
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-column.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"datagrid-column.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-column.ts"],"sourcesContent":["import { warn } from '../../_dev';\nimport type { DataGridColumn } from './datagrid-model';\n\n// ── Declarative ore-column element ────────────────────────────────────────────\n\n/**\n * Declarative column definition for `<ore-datagrid>`.\n * Use as a child element instead of setting the `columns` prop imperatively.\n *\n * @element ore-column\n *\n * @attr {string} key - Row property key (required)\n * @attr {string} label - Header display label (required)\n * @attr {boolean} sortable - Makes the column sortable\n * @attr {boolean} resizable - Adds a drag handle to resize the column\n * @attr {string} align - Text alignment: 'left' | 'center' | 'right'\n * @attr {string} width - CSS column width (e.g. '12rem')\n * @attr {string} header-label - Accessible label override for the column header\n *\n * @example\n * ```html\n * <ore-datagrid>\n * <ore-column key=\"name\" label=\"Name\" sortable></ore-column>\n * <ore-column key=\"email\" label=\"Email\" width=\"20rem\"></ore-column>\n * </ore-datagrid>\n * ```\n */\nif (!customElements.get('ore-column'))\n customElements.define(\n 'ore-column',\n class extends HTMLElement {\n connectedCallback(): void {\n if (!this.getAttribute('key')) {\n warn('ore-column: missing required `key` attribute');\n }\n\n if (!this.getAttribute('label')) {\n warn('ore-column: missing required `label` attribute');\n }\n }\n },\n );\n\nexport const COLUMN_TAG = 'ore-column' as const;\n\n/** Attributes observed by the column MutationObserver in ore-datagrid. */\nexport const COLUMN_OBSERVED_ATTRS = [\n 'key',\n 'label',\n 'sortable',\n 'resizable',\n 'align',\n 'width',\n 'header-label',\n] as const;\n\n/** Parse all `<ore-column>` direct children of `host` into DataGridColumn descriptors. */\nexport function parseColumnChildren(host: HTMLElement): DataGridColumn[] {\n return Array.from(host.querySelectorAll(':scope > ore-column')).map((el) => ({\n align: (el.getAttribute('align') as 'left' | 'center' | 'right' | null) ?? undefined,\n headerLabel: el.getAttribute('header-label') ?? undefined,\n key: el.getAttribute('key') ?? '',\n label: el.getAttribute('label') ?? '',\n resizable: el.hasAttribute('resizable'),\n sortable: el.hasAttribute('sortable'),\n width: el.getAttribute('width') ?? undefined,\n }));\n}\n"],"mappings":";;AA2BK,eAAe,IAAI,YAAY,KAClC,eAAe,OACb,cACA,cAAc,YAAY;CACxB,oBAA0B;EAKxB,AAJK,KAAK,aAAa,KAAK,GAIvB,KAAK,aAAa,OAAO;CAGhC;AACF,CACF;AAEF,IAAa,IAAa,cAGb,IAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,SAAgB,EAAoB,GAAqC;CACvE,OAAO,MAAM,KAAK,EAAK,iBAAiB,qBAAqB,CAAC,CAAC,CAAC,KAAK,OAAQ;EAC3E,OAAQ,EAAG,aAAa,OAAO,KAA4C,KAAA;EAC3E,aAAa,EAAG,aAAa,cAAc,KAAK,KAAA;EAChD,KAAK,EAAG,aAAa,KAAK,KAAK;EAC/B,OAAO,EAAG,aAAa,OAAO,KAAK;EACnC,WAAW,EAAG,aAAa,WAAW;EACtC,UAAU,EAAG,aAAa,UAAU;EACpC,OAAO,EAAG,aAAa,OAAO,KAAK,KAAA;CACrC,EAAE;AACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
let e=require("@vielzeug/ripple")
|
|
1
|
+
let e=require("@vielzeug/ripple");var t=[{label:`Contains`,value:`contains`},{label:`Equals`,value:`equals`},{label:`Greater than`,value:`gt`},{label:`Less than`,value:`lt`}],n=n=>{let r=(0,e.signal)(``),i=(0,e.signal)(!1),a=(0,e.signal)(new Set),o=(0,e.signal)(new Set),s=(0,e.signal)(new Map),c=(0,e.signal)(``),l=(0,e.signal)(`none`),u=(0,e.signal)(new Set),d=(0,e.signal)(0),f=(0,e.computed)(()=>new Set(n.columns.value.map(e=>e.key))),p=(0,e.computed)(()=>n.columns.value.filter(e=>!a.value.has(e.key))),m=(0,e.computed)(()=>{let e=new Set((n.filterOptions.value??[]).map(e=>e.key)),t=[...o.value].filter(t=>!e.has(t));if(!t.length)return new Map;let r=new Map;for(let e of t){let t=new Set,i=[];for(let r of n.items.value){let n=r[e],a=n==null?``:String(n);t.has(a)||(t.add(a),i.push({label:a||`(empty)`,value:a}))}r.set(e,i)}return r}),h=(0,e.computed)(()=>{let e=n.filterOptions.value??[],r=new Set(e.map(e=>e.key)),i=[...o.value].filter(e=>!r.has(e)).map(e=>({key:e,label:n.columns.value.find(t=>t.key===e)?.label??e,operators:t,options:m.value.get(e)??[]}));return[...e.map(e=>({...e,operators:e.operators??t})),...i]}),g=(0,e.computed)(()=>{let e=n.items.value;if(!n.clientSide.value)return e;let t=r.value.trim().toLowerCase();return t?e.filter(e=>Object.values(e).some(e=>e!=null&&String(e).toLowerCase().includes(t))):e}),_=(0,e.computed)(()=>{let e=g.value;return!n.clientSide.value||!s.value.size?e:e.filter(e=>{for(let[t,n]of s.value){if(!n.values.size||!f.value.has(t))continue;let r=e[t],i=r==null?``:String(r);if(n.operator===`equals`&&!n.values.has(i)||n.operator===`contains`&&![...n.values].some(e=>i.toLowerCase().includes(e.toLowerCase())))return!1;if(n.operator===`gt`||n.operator===`lt`){let e=parseFloat(i),t=[...n.values].map(parseFloat).filter(e=>!Number.isNaN(e));if(!t.length)continue;if(n.operator===`gt`&&!t.some(t=>e>t)||n.operator===`lt`&&!t.some(t=>e<t))return!1}}return!0})}),v=(0,e.computed)(()=>({direction:l.value,key:c.value})),y=(0,e.computed)(()=>{let e=_.value;if(!n.clientSide.value||n.sortMode.value===`server`)return e;let{direction:t,key:r}=v.value;if(!r||t===`none`)return e;let i=n.columns.value.find(e=>e.key===r);return e.slice().sort((e,n)=>{let a=i?.sortValue?i.sortValue(e):e[r],o=i?.sortValue?i.sortValue(n):n[r],s=typeof a==`number`&&typeof o==`number`?a-o:String(a??``).localeCompare(String(o??``));return t===`asc`?s:-s})}),b=(0,e.computed)(()=>y.value.length),x=(0,e.computed)(()=>{let e=n.pageSize.value;return Math.ceil(b.value/(e<=0?2**53-1:e))}),S=(0,e.computed)(()=>x.value?Math.min(d.value,x.value-1):-1),C=(0,e.computed)(()=>{let e=n.pageSize.value;if(e<=0)return y.value;let t=S.value*e;return y.value.slice(t,t+e)}),w=(0,e.computed)(()=>x.value>0&&S.value<x.value-1),T=(0,e.computed)(()=>S.value>0),E=(0,e.computed)(()=>n.items.value.filter(e=>u.value.has(n.getRowKey(e))));(0,e.watch)(f,e=>{let t=new Set([...o.value].filter(t=>e.has(t))),n=new Map([...s.value].filter(([t])=>e.has(t)));t.size!==o.value.size&&(o.value=t),n.size!==s.value.size&&(s.value=n)},{immediate:!1}),(0,e.watch)(y,()=>{d.value=0});let D=e=>{u.value=e,n.onSelectionChange?.(e)},O=(e,t)=>{let n=new Map(s.value);t.length?n.set(e,{operator:n.get(e)?.operator??`contains`,values:new Set(t)}):n.delete(e),s.value=n},k=(e,t)=>{let n=s.value.get(e);n&&(s.value=new Map(s.value).set(e,{...n,operator:t}))},A=(e,t)=>{c.value=t===`none`?``:e,l.value=t,d.value=0,n.onSortChange?.(v.value)};return{activateFilterKey:e=>{o.value.has(e)||(o.value=new Set([...o.value,e]))},clearAllFilters:()=>{o.value=new Set,s.value=new Map},clearSelection:()=>D(new Set),currentPageItems:C,filterDefs:h,filteredRows:_,filterValues:s,goToPage:e=>{Number.isFinite(e)&&(d.value=Math.max(0,e))},hasNextPage:w,hasPrevPage:T,hiddenColumns:a,isAllSelected:()=>{let e=C.value;return e.length>0&&e.every(e=>u.value.has(n.getRowKey(e)))},nextPage:()=>{w.value&&(d.value=S.value+1)},pageCount:x,pageIndex:S,prevPage:()=>{T.value&&(d.value=S.value-1)},removeFilter:e=>{let t=new Set(o.value);t.delete(e),o.value=t;let n=new Map(s.value);n.delete(e),s.value=n},resetFilters:()=>{o.value=new Set,s.value=new Map},resetSearch:()=>{r.value=``,i.value=!1},searchActive:i,searchQuery:r,selectAll:()=>{if(n.selectionMode.value!==`multi`)return;let e=new Set(u.value);if(C.value.every(t=>e.has(n.getRowKey(t))))for(let t of C.value)e.delete(n.getRowKey(t));else for(let t of C.value)e.add(n.getRowKey(t));D(e)},selectedKeys:(0,e.computed)(()=>new Set(u.value)),selectedRows:E,setActiveFilterKeys:e=>{let t=new Set(e);o.value=t,s.value=new Map([...s.value].filter(([e])=>t.has(e)))},setFilter:O,setFilterOperator:k,setSearchQuery:e=>{r.value=e},setSelection:e=>D(new Set(e)),sortBy:e=>{let t=c.value===e?l.value===`asc`?`desc`:l.value===`desc`?`none`:`asc`:`asc`;A(t===`none`?``:e,t)},sortState:v,sortTo:A,toggleColumnVisibility:e=>{let t=new Set(a.value);t.has(e)?t.delete(e):t.add(e),a.value=t},toggleRow:e=>{if(n.selectionMode.value===`none`)return;let t=new Set(u.value);t.has(e)?t.delete(e):(n.selectionMode.value===`single`&&t.clear(),t.add(e)),D(t)},toggleSearch:()=>{i.value&&(r.value=``),i.value=!i.value},totalItems:b,visibleColumns:p}};exports.createDataGridModel=n;
|
|
2
2
|
//# sourceMappingURL=datagrid-model.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-model.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datagrid-model.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, type Readable, signal, watch } from '@vielzeug/ripple';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-model.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"datagrid-model.d.ts","sourceRoot":"","sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid-model.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, signal, type Readable } from '@vielzeug/ripple';\nimport { watch } from '@vielzeug/ripple/watch';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datagrid-model.js","names":[],"sources":["../../../src/inputs/datagrid/datagrid-model.ts"],"sourcesContent":["import { computed, type Readable, signal, watch } from '@vielzeug/ripple';\n\nexport type SortDirection = 'asc' | 'desc' | 'none';\n\nexport type SortState = {\n direction: SortDirection;\n key: string;\n};\n\nexport type DataGridColumn<T = Record<string, unknown>> = {\n align?: 'left' | 'center' | 'right';\n cell?: (item: T) => string;\n headerLabel?: string;\n key: string;\n label: string;\n renderExpanded?: (item: T) => string;\n resizable?: boolean;\n sortable?: boolean;\n sortValue?: (item: T) => number | string;\n width?: string;\n};\n\nexport type SelectionMode = 'multi' | 'none' | 'single';\n\nexport type FilterOption = {\n key: string;\n label: string;\n operators?: { label: string; value: string }[];\n options: { label?: string; value: string }[];\n};\n\nexport type FilterOperator = 'contains' | 'equals' | 'gt' | 'lt';\n\nexport type FilterRule = {\n operator: FilterOperator;\n values: Set<string>;\n};\n\nexport type DataGridView = {\n id: string;\n label: string;\n};\n\nexport type DataGridModelOptions<T = Record<string, unknown>> = {\n clientSide: Readable<boolean>;\n columns: Readable<DataGridColumn<T>[]>;\n filterOptions: Readable<FilterOption[] | undefined>;\n getRowKey: (item: T) => string;\n items: Readable<T[]>;\n onSelectionChange?: (keys: Set<string>) => void;\n onSortChange?: (sort: SortState) => void;\n pageSize: Readable<number>;\n selectionMode: Readable<SelectionMode>;\n sortMode: Readable<'client' | 'server'>;\n};\n\nexport type DataGridModel<T = Record<string, unknown>> = {\n activateFilterKey(key: string): void;\n clearAllFilters(): void;\n clearSelection(): void;\n readonly currentPageItems: Readable<T[]>;\n readonly filterDefs: Readable<FilterOption[]>;\n readonly filteredRows: Readable<T[]>;\n readonly filterValues: Readable<Map<string, FilterRule>>;\n goToPage(index: number): void;\n readonly hasNextPage: Readable<boolean>;\n readonly hasPrevPage: Readable<boolean>;\n readonly hiddenColumns: Readable<Set<string>>;\n isAllSelected(): boolean;\n nextPage(): void;\n readonly pageCount: Readable<number>;\n readonly pageIndex: Readable<number>;\n prevPage(): void;\n removeFilter(key: string): void;\n resetFilters(): void;\n resetSearch(): void;\n readonly searchActive: Readable<boolean>;\n readonly searchQuery: Readable<string>;\n selectAll(): void;\n readonly selectedKeys: Readable<ReadonlySet<string>>;\n readonly selectedRows: Readable<T[]>;\n setActiveFilterKeys(keys: string[]): void;\n setFilter(key: string, values: string[]): void;\n setFilterOperator(key: string, operator: FilterOperator): void;\n setSearchQuery(query: string): void;\n setSelection(keys: Set<string>): void;\n sortBy(key: string): void;\n readonly sortState: Readable<SortState>;\n sortTo(key: string, direction: SortDirection): void;\n toggleColumnVisibility(key: string): void;\n toggleRow(key: string): void;\n toggleSearch(): void;\n readonly totalItems: Readable<number>;\n readonly visibleColumns: Readable<DataGridColumn<T>[]>;\n};\n\nconst DEFAULT_OPERATORS: { label: string; value: FilterOperator }[] = [\n { label: 'Contains', value: 'contains' },\n { label: 'Equals', value: 'equals' },\n { label: 'Greater than', value: 'gt' },\n { label: 'Less than', value: 'lt' },\n];\n\n/**\n * Feature-owned state and transform pipeline for `ore-datagrid`.\n *\n * Rows flow through query, filters, sorting, and pagination in order. Selection\n * and column visibility share the same model so every interactive grid concern\n * has one reactive owner. Source-backed grids retain their server-owned rows by\n * setting `clientSide` to false.\n */\nexport const createDataGridModel = <T extends Record<string, unknown>>(\n options: DataGridModelOptions<T>,\n): DataGridModel<T> => {\n const searchQuery = signal('');\n const searchActive = signal(false);\n const hiddenColumns = signal(new Set<string>());\n const activeFilterKeys = signal(new Set<string>());\n const filterValues = signal(new Map<string, FilterRule>());\n const sortKey = signal('');\n const sortDirection = signal<SortDirection>('none');\n const selectedKeys = signal(new Set<string>());\n const pageIndex = signal(0);\n\n const columnKeys = computed(() => new Set(options.columns.value.map((column) => column.key)));\n const visibleColumns = computed(() => options.columns.value.filter((column) => !hiddenColumns.value.has(column.key)));\n\n const colOptions = computed(() => {\n const externalKeys = new Set((options.filterOptions.value ?? []).map((filter) => filter.key));\n const activeKeys = [...activeFilterKeys.value].filter((key) => !externalKeys.has(key));\n\n if (!activeKeys.length) return new Map<string, { label: string; value: string }[]>();\n\n const derived = new Map<string, { label: string; value: string }[]>();\n\n for (const key of activeKeys) {\n const seen = new Set<string>();\n const values: { label: string; value: string }[] = [];\n\n for (const row of options.items.value) {\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (!seen.has(stringValue)) {\n seen.add(stringValue);\n values.push({ label: stringValue || '(empty)', value: stringValue });\n }\n }\n\n derived.set(key, values);\n }\n\n return derived;\n });\n\n const filterDefs = computed<FilterOption[]>(() => {\n const provided = options.filterOptions.value ?? [];\n const providedKeys = new Set(provided.map((filter) => filter.key));\n const derived = [...activeFilterKeys.value]\n .filter((key) => !providedKeys.has(key))\n .map((key) => {\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return {\n key,\n label: column?.label ?? key,\n operators: DEFAULT_OPERATORS,\n options: colOptions.value.get(key) ?? [],\n };\n });\n\n return [...provided.map((filter) => ({ ...filter, operators: filter.operators ?? DEFAULT_OPERATORS })), ...derived];\n });\n\n const searchedRows = computed(() => {\n const rows = options.items.value;\n\n if (!options.clientSide.value) return rows;\n\n const query = searchQuery.value.trim().toLowerCase();\n\n if (!query) return rows;\n\n return rows.filter((row) =>\n Object.values(row).some((value) => value != null && String(value).toLowerCase().includes(query)),\n );\n });\n\n const filteredRows = computed(() => {\n const rows = searchedRows.value;\n\n if (!options.clientSide.value || !filterValues.value.size) return rows;\n\n return rows.filter((row) => {\n for (const [key, rule] of filterValues.value) {\n if (!rule.values.size || !columnKeys.value.has(key)) continue;\n\n const value = row[key];\n const stringValue = value == null ? '' : String(value);\n\n if (rule.operator === 'equals' && !rule.values.has(stringValue)) return false;\n\n if (\n rule.operator === 'contains' &&\n ![...rule.values].some((target) => stringValue.toLowerCase().includes(target.toLowerCase()))\n ) {\n return false;\n }\n\n if (rule.operator === 'gt' || rule.operator === 'lt') {\n const numericValue = parseFloat(stringValue);\n const targets = [...rule.values].map(parseFloat).filter((target) => !Number.isNaN(target));\n\n if (!targets.length) continue;\n\n if (rule.operator === 'gt' && !targets.some((target) => numericValue > target)) return false;\n\n if (rule.operator === 'lt' && !targets.some((target) => numericValue < target)) return false;\n }\n }\n\n return true;\n });\n });\n\n const sortState = computed<SortState>(() => ({ direction: sortDirection.value, key: sortKey.value }));\n const sortedRows = computed(() => {\n const rows = filteredRows.value;\n\n if (!options.clientSide.value || options.sortMode.value === 'server') return rows;\n\n const { direction, key } = sortState.value;\n\n if (!key || direction === 'none') return rows;\n\n const column = options.columns.value.find((candidate) => candidate.key === key);\n\n return rows.slice().sort((a, b) => {\n const aValue = column?.sortValue ? column.sortValue(a) : (a[key] as number | string);\n const bValue = column?.sortValue ? column.sortValue(b) : (b[key] as number | string);\n const comparison =\n typeof aValue === 'number' && typeof bValue === 'number'\n ? aValue - bValue\n : String(aValue ?? '').localeCompare(String(bValue ?? ''));\n\n return direction === 'asc' ? comparison : -comparison;\n });\n });\n\n const totalItems = computed(() => sortedRows.value.length);\n const pageCount = computed(() => {\n const size = options.pageSize.value;\n\n return Math.ceil(totalItems.value / (size <= 0 ? Number.MAX_SAFE_INTEGER : size));\n });\n const safePageIndex = computed(() => (pageCount.value ? Math.min(pageIndex.value, pageCount.value - 1) : -1));\n const currentPageItems = computed(() => {\n const size = options.pageSize.value;\n\n if (size <= 0) return sortedRows.value;\n\n const start = safePageIndex.value * size;\n\n return sortedRows.value.slice(start, start + size);\n });\n const hasNextPage = computed(() => pageCount.value > 0 && safePageIndex.value < pageCount.value - 1);\n const hasPrevPage = computed(() => safePageIndex.value > 0);\n const selectedRows = computed(() =>\n options.items.value.filter((item) => selectedKeys.value.has(options.getRowKey(item))),\n );\n\n watch(\n columnKeys,\n (keys) => {\n const nextActiveKeys = new Set([...activeFilterKeys.value].filter((key) => keys.has(key)));\n const nextValues = new Map([...filterValues.value].filter(([key]) => keys.has(key)));\n\n if (nextActiveKeys.size !== activeFilterKeys.value.size) activeFilterKeys.value = nextActiveKeys;\n\n if (nextValues.size !== filterValues.value.size) filterValues.value = nextValues;\n },\n { immediate: false },\n );\n\n watch(sortedRows, () => {\n pageIndex.value = 0;\n });\n\n const commitSelection = (next: Set<string>): void => {\n selectedKeys.value = next;\n options.onSelectionChange?.(next);\n };\n\n const setFilter = (key: string, values: string[]): void => {\n const next = new Map(filterValues.value);\n\n if (values.length) {\n next.set(key, { operator: next.get(key)?.operator ?? 'contains', values: new Set(values) });\n } else {\n next.delete(key);\n }\n\n filterValues.value = next;\n };\n\n const setFilterOperator = (key: string, operator: FilterOperator): void => {\n const rule = filterValues.value.get(key);\n\n if (rule) filterValues.value = new Map(filterValues.value).set(key, { ...rule, operator });\n };\n\n const sortTo = (key: string, direction: SortDirection): void => {\n sortKey.value = direction === 'none' ? '' : key;\n sortDirection.value = direction;\n pageIndex.value = 0;\n options.onSortChange?.(sortState.value);\n };\n\n return {\n activateFilterKey: (key) => {\n if (!activeFilterKeys.value.has(key)) activeFilterKeys.value = new Set([...activeFilterKeys.value, key]);\n },\n clearAllFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n clearSelection: () => commitSelection(new Set()),\n currentPageItems,\n filterDefs,\n filteredRows,\n filterValues,\n goToPage: (index) => {\n if (Number.isFinite(index)) pageIndex.value = Math.max(0, index);\n },\n hasNextPage,\n hasPrevPage,\n hiddenColumns,\n isAllSelected: () => {\n const page = currentPageItems.value;\n\n return page.length > 0 && page.every((item) => selectedKeys.value.has(options.getRowKey(item)));\n },\n nextPage: () => {\n if (hasNextPage.value) pageIndex.value = safePageIndex.value + 1;\n },\n pageCount,\n pageIndex: safePageIndex,\n prevPage: () => {\n if (hasPrevPage.value) pageIndex.value = safePageIndex.value - 1;\n },\n removeFilter: (key) => {\n const nextActiveKeys = new Set(activeFilterKeys.value);\n\n nextActiveKeys.delete(key);\n activeFilterKeys.value = nextActiveKeys;\n\n const nextValues = new Map(filterValues.value);\n\n nextValues.delete(key);\n filterValues.value = nextValues;\n },\n resetFilters: () => {\n activeFilterKeys.value = new Set();\n filterValues.value = new Map();\n },\n resetSearch: () => {\n searchQuery.value = '';\n searchActive.value = false;\n },\n searchActive,\n searchQuery,\n selectAll: () => {\n if (options.selectionMode.value !== 'multi') return;\n\n const next = new Set(selectedKeys.value);\n\n if (currentPageItems.value.every((item) => next.has(options.getRowKey(item)))) {\n for (const item of currentPageItems.value) next.delete(options.getRowKey(item));\n } else {\n for (const item of currentPageItems.value) next.add(options.getRowKey(item));\n }\n\n commitSelection(next);\n },\n selectedKeys: computed(() => new Set(selectedKeys.value)),\n selectedRows,\n setActiveFilterKeys: (keys) => {\n const nextActiveKeys = new Set(keys);\n\n activeFilterKeys.value = nextActiveKeys;\n filterValues.value = new Map([...filterValues.value].filter(([key]) => nextActiveKeys.has(key)));\n },\n setFilter,\n setFilterOperator,\n setSearchQuery: (query) => {\n searchQuery.value = query;\n },\n setSelection: (keys) => commitSelection(new Set(keys)),\n sortBy: (key) => {\n const nextDirection =\n sortKey.value !== key\n ? 'asc'\n : sortDirection.value === 'asc'\n ? 'desc'\n : sortDirection.value === 'desc'\n ? 'none'\n : 'asc';\n\n sortTo(nextDirection === 'none' ? '' : key, nextDirection);\n },\n sortState,\n sortTo,\n toggleColumnVisibility: (key) => {\n const next = new Set(hiddenColumns.value);\n\n if (next.has(key)) next.delete(key);\n else next.add(key);\n\n hiddenColumns.value = next;\n },\n toggleRow: (key) => {\n if (options.selectionMode.value === 'none') return;\n\n const next = new Set(selectedKeys.value);\n\n if (next.has(key)) next.delete(key);\n else {\n if (options.selectionMode.value === 'single') next.clear();\n\n next.add(key);\n }\n\n commitSelection(next);\n },\n toggleSearch: () => {\n if (searchActive.value) searchQuery.value = '';\n\n searchActive.value = !searchActive.value;\n },\n totalItems,\n visibleColumns,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=`@layer refine.base{:host{--_row-hover-bg:var(--datagrid-row-hover-bg,color-mix(in oklch, var(--color-contrast-500) 5%, transparent));--_row-selected-bg:var(--datagrid-row-selected-bg,color-mix(in oklch, var(--_accent) 10%, transparent));--_row-selected-border:var(--datagrid-row-selected-border,var(--_accent))}.dg-scroll{max-height:var(--datagrid-max-height,none);overflow:auto}.dg-table{width:100%;font-size:var(--_font-size);table-layout:auto;border-collapse:collapse}.dg-head{z-index:2;background:var(--_header-bg);box-shadow:inset 0 calc(var(--border) * -1) 0 var(--_border-color);position:sticky;top:0}.dg-th{padding:var(--_cell-padding-y) var(--_cell-padding-x);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-500);text-align:start;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;-webkit-user-select:none;user-select:none;border-right:var(--border) solid var(--_border-color)}.dg-th[data-align=center]{text-align:center}.dg-th[data-align=right]{text-align:right}.dg-th:has(.dg-sort-btn){padding:0}.dg-sort-btn{--button-padding:var(--_cell-padding-y) var(--_cell-padding-x);--button-font-size:var(--text-xs);--button-font-weight:var(--font-semibold);--button-color:var(--color-contrast-500);--button-justify:flex-start;height:100%}.dg-th[data-align=center] .dg-sort-btn{--button-justify:center}.dg-th[data-align=right] .dg-sort-btn{--button-justify:flex-end}:host(:dir(rtl)) .dg-th{border-right:none;border-left:var(--border) solid var(--_border-color)}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-th:last-child,.dg-th.dg-th-check,.dg-th.dg-th-expand,.dg-th.dg-th-last{border-right:none}:host(:dir(rtl)) .dg-th:last-child,:host(:dir(rtl)) .dg-th.dg-th-check,:host(:dir(rtl)) .dg-th.dg-th-expand,:host(:dir(rtl)) .dg-th.dg-th-last{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th:last-child{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-check{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-expand{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-last{border-left:none}.dg-th-inner{gap:var(--size-1);align-items:center;display:flex;position:relative}.dg-th[aria-sort]:has(.dg-sort-btn:hover):not(:has(.dg-sort-btn[aria-disabled=true])){background:color-mix(in oklch, var(--color-contrast-900) 5%, transparent)}.dg-th[aria-sort=ascending] .dg-sort-icon,.dg-th[aria-sort=descending] .dg-sort-icon{color:var(--_accent)}.dg-th-check{width:var(--size-5);min-width:var(--size-5);padding:var(--_cell-padding-y) var(--_cell-padding-x)}.dg-th-check,.dg-td-check{vertical-align:middle;text-align:center}.dg-td.dg-td-check{padding:var(--size-1) 0 0}.dg-check{cursor:pointer;justify-content:center;align-items:center;gap:0;min-height:0;display:inline-flex}.dg-body .dg-tr{border-bottom:var(--border) solid var(--_border-color);transition:background var(--transition-fast)}.dg-body .dg-tr:hover:not([data-disabled],[aria-selected=true]){background:var(--_row-hover-bg)}.dg-body .dg-tr[aria-selected=true]{background:var(--_row-selected-bg)}.dg-body .dg-tr[data-selectable]{cursor:pointer;outline:none}.dg-body .dg-tr[data-selectable]:focus-visible{box-shadow:inset 0 0 0 2px var(--_row-selected-border)}.dg-body .dg-tr[data-disabled]{pointer-events:none;opacity:.45}:host([striped]) .dg-body .dg-tr:nth-child(2n){background:var(--_stripe-bg)}:host([striped]) .dg-body .dg-tr:nth-child(2n)[aria-selected=true]{background:var(--_row-selected-bg)}.dg-td{max-width:var(--datagrid-cell-max-width,32ch);padding:var(--_cell-padding-y) var(--_cell-padding-x);text-overflow:ellipsis;vertical-align:middle;color:var(--color-contrast-800);white-space:nowrap;border-right:var(--border) solid var(--_border-color);overflow:hidden}.dg-td[data-align=center]{text-align:center}.dg-td[data-align=right]{text-align:right}:host(:dir(rtl)) .dg-td{border-right:none;border-left:var(--border) solid var(--_border-color)}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-td:last-child,.dg-td.dg-td-check,.dg-td.dg-td-expand,.dg-td.dg-td-last{border-right:none}:host(:dir(rtl)) .dg-td:last-child,:host(:dir(rtl)) .dg-td.dg-td-check,:host(:dir(rtl)) .dg-td.dg-td-expand,:host(:dir(rtl)) .dg-td.dg-td-last{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td:last-child{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-check{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-expand{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-last{border-left:none}.dg-empty{padding:var(--size-12) var(--_cell-padding-x);font-size:var(--text-sm);color:var(--color-contrast-400);text-align:center}.dg-empty-content{gap:var(--size-4);flex-direction:column;justify-content:center;align-items:center;display:flex}.dg-empty-actions{margin-top:var(--size-2)}.dg-controls{gap:var(--size-3);height:var(--size-8);padding:var(--size-1-5) var(--_cell-padding-x);background:var(--_header-bg);border-bottom:var(--border) solid var(--_border-color);justify-content:space-between;align-items:center;display:flex}.dg-tabs{gap:var(--size-1);flex:1;align-items:center;min-width:0;display:flex;overflow:hidden}.dg-tab{--button-padding:var(--size-0-5) var(--size-2-5);--button-font-size:var(--text-xs);--button-color:var(--color-contrast-500);flex:1;min-width:0}.dg-tab--active{--button-color:var(--color-contrast-900);--button-bg:color-mix(in oklch, var(--color-contrast-500) 10%, transparent);--button-border-color:var(--_border-color);--button-border:var(--border);font-weight:var(--font-semibold)}.dg-actions{gap:var(--size-0-5);flex-shrink:0;align-items:center;display:flex}.dg-action-divider{width:var(--border);height:var(--size-4);margin-inline:var(--size-1);background:var(--_border-color);flex-shrink:0;display:inline-block}.dg-action-divider[hidden]{display:none}.dg-filter{width:100%;display:block}.dg-search{gap:var(--size-1);flex-direction:row-reverse;align-items:center;display:flex}.dg-search-input{opacity:0;width:0;transition:width var(--transition-fast), opacity var(--transition-fast);--input-height:var(--size-7);flex-shrink:0;display:block;overflow:hidden}.dg-search--open .dg-search-input{opacity:1;width:12rem;overflow:visible}@media (prefers-reduced-motion:reduce){.dg-search-input{transition:none}}.dg-action-popover{display:inline-flex}.dg-pop-header{padding:var(--size-3) var(--size-3) var(--size-2);justify-content:space-between;align-items:center;display:flex}.dg-pop-title{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-600);letter-spacing:.02em}.dg-pop-sort{padding-bottom:var(--size-2);flex-direction:column;display:flex}.dg-pop-sort-row{gap:var(--size-2);padding:var(--size-1) var(--size-3);align-items:center;display:flex}.dg-pop-select{--select-min-width:var(--size-20);flex:2}.dg-pop-dir-select{--select-min-width:var(--size-10);flex:1}.dg-pop-filter{flex-direction:column;display:flex}.dg-pop-filter-fields{padding:0 var(--size-3) var(--size-3)}.dg-pop-filter-rules{border-top:var(--border) solid var(--_border-color);padding-top:var(--size-1)}.dg-pop-filter-rules[hidden]{display:none}.dg-pop-filter-rule{gap:var(--size-2);padding:var(--size-2) var(--size-3);flex-direction:column;display:flex}.dg-pop-filter-rule-header{gap:var(--size-1-5);align-items:center;display:flex}.dg-pop-filter-field{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-800);white-space:nowrap}.dg-pop-filter-op-select{--select-min-width:0;--select-height:var(--size-6);--select-font-size:var(--text-2xs);--select-padding-x:var(--size-1-5);flex:1;min-width:6rem}.dg-pop-col-item{--button-radius:var(--rounded-md);justify-content:flex-start}.dg-pop-col-list{gap:var(--size-1);max-width:25rem;padding:var(--size-3);flex-wrap:wrap;display:flex}.dg-footer{gap:var(--size-2);padding:var(--size-2) var(--_cell-padding-x);font-size:var(--text-xs);color:var(--color-contrast-500);background:var(--_header-bg);align-items:center;display:flex}.dg-footer-info{white-space:nowrap}.dg-footer-end{gap:var(--size-2);align-items:center;width:fit-content;display:flex}.dg-footer-end:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-left:auto}.dg-footer-end:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:auto}.dg-page-size-wrap{flex-shrink:0;width:5rem}.dg-page-size-select{--select-min-width:0;--select-height:var(--size-7);--select-font-size:var(--text-xs);--select-padding-x:var(--size-2)}.dg-pagination{gap:var(--size-1);align-items:center;display:flex}:host(:dir(rtl)) .dg-page-btn{transform:scaleX(-1)}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-page-btn{transform:scaleX(-1)}.dg-page-btn{--button-color:var(--color-contrast-600);--button-radius:var(--rounded-md);width:var(--size-7);height:var(--size-7)}.dg-page-btn:hover{--button-color:var(--color-contrast-900);--button-bg:var(--color-contrast-300)}.dg-page-btn:disabled{cursor:not-allowed;opacity:.35}.dg-page-label{padding-inline:var(--size-1);white-space:nowrap}.dg-col-resize{inset-block:calc(var(--_cell-padding-y) * -1);width:var(--size-1);cursor:col-resize;-webkit-user-select:none;user-select:none;border-radius:var(--rounded);transition:background var(--transition-fast);background:0 0;position:absolute}.dg-col-resize:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:hover,.dg-col-resize:active{background:var(--_accent,var(--color-contrast-300))}.dg-td:focus-visible,.dg-th:focus-visible{outline:2px solid var(--_row-selected-border);outline-offset:-2px}.dg-tr-expanded .dg-td-expanded{padding:var(--_cell-padding-y) var(--_cell-padding-x);box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-600) 4%, var(--_bg,transparent)), inset 0 calc(var(--border) * -1) 0 var(--_border-color);border:none}.dg-tr-expanded:last-child .dg-td-expanded{box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-900) 4%, var(--_bg,transparent))}.dg-tr:has(+.dg-tr-expanded){border-bottom:none}.dg-th-expand,.dg-td-expand{width:var(--size-8);min-width:var(--size-8);padding-block:var(--size-1) 0;padding-inline:0 var(--size-2);text-align:center;white-space:nowrap;border-left:none;border-right:none}.dg-expand-btn{--button-color:var(--color-contrast-500);--button-radius:var(--rounded-sm);width:var(--size-5);height:var(--size-5)}.dg-expand-btn:hover{--button-color:var(--color-contrast-900)}.dg-expand-btn:disabled{cursor:not-allowed;opacity:.4}.dg-loading-overlay{z-index:3;background:color-mix(in oklch, var(--_bg,white) 40%, transparent);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);justify-content:center;align-items:center;display:none;position:absolute;inset:0}:host([loading]) .dg-loading-overlay{display:flex}:host([loading]) .dg-scroll table{pointer-events:none;opacity:.5}.dg-spin{animation:1s linear infinite dg-spin}@keyframes dg-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}`;exports.default=e;
|
|
1
|
+
var e=`@layer refine.base{:host{--_row-hover-bg:var(--datagrid-row-hover-bg,color-mix(in oklch, var(--color-contrast-500) 5%, transparent));--_row-selected-bg:var(--datagrid-row-selected-bg,color-mix(in oklch, var(--_accent) 10%, transparent));--_row-selected-border:var(--datagrid-row-selected-border,var(--_accent))}.dg-scroll{max-height:var(--datagrid-max-height,none);overflow:auto}.dg-table{width:100%;font-size:var(--_font-size);table-layout:auto;border-collapse:collapse}.dg-head{z-index:2;background:var(--_header-bg);box-shadow:inset 0 calc(var(--border) * -1) 0 var(--_border-color);position:sticky;top:0}.dg-th{padding:var(--_cell-padding-y) var(--_cell-padding-x);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-500);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;-webkit-user-select:none;user-select:none;border-right:var(--border) solid var(--_border-color)}.dg-th:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){text-align:left}.dg-th:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){text-align:right}.dg-th[data-align=center]{text-align:center}.dg-th[data-align=right]{text-align:right}.dg-th:has(.dg-sort-btn){padding:0}.dg-sort-btn{--button-padding:var(--_cell-padding-y) var(--_cell-padding-x);--button-font-size:var(--text-xs);--button-font-weight:var(--font-semibold);--button-color:var(--color-contrast-500);--button-justify:flex-start;height:100%}.dg-th[data-align=center] .dg-sort-btn{--button-justify:center}.dg-th[data-align=right] .dg-sort-btn{--button-justify:flex-end}:host(:dir(rtl)) .dg-th,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-th:last-child,.dg-th.dg-th-check,.dg-th.dg-th-expand,.dg-th.dg-th-last{border-right:none}:host(:dir(rtl)) .dg-th:last-child,:host(:dir(rtl)) .dg-th.dg-th-check,:host(:dir(rtl)) .dg-th.dg-th-expand,:host(:dir(rtl)) .dg-th.dg-th-last,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th:last-child,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-check,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-expand,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-last{border-left:none}.dg-th-inner{gap:var(--size-1);align-items:center;display:flex;position:relative}.dg-th[aria-sort]:has(.dg-sort-btn:hover):not(:has(.dg-sort-btn[aria-disabled=true])){background:color-mix(in oklch, var(--color-contrast-900) 5%, transparent)}.dg-th[aria-sort=ascending] .dg-sort-icon,.dg-th[aria-sort=descending] .dg-sort-icon{color:var(--_accent)}.dg-th-check{width:var(--size-5);min-width:var(--size-5);padding:var(--_cell-padding-y) var(--_cell-padding-x)}.dg-th-check,.dg-td-check{vertical-align:middle;text-align:center}.dg-td.dg-td-check{padding:var(--size-1) 0 0}.dg-check{cursor:pointer;justify-content:center;align-items:center;gap:0;min-height:0;display:inline-flex}.dg-body .dg-tr{border-bottom:var(--border) solid var(--_border-color);transition:background var(--transition-fast)}.dg-body .dg-tr:hover:not(:is([data-disabled],[aria-selected=true])){background:var(--_row-hover-bg)}.dg-body .dg-tr[aria-selected=true]{background:var(--_row-selected-bg)}.dg-body .dg-tr[data-selectable]{cursor:pointer;outline:none}.dg-body .dg-tr[data-selectable]:focus-visible{box-shadow:inset 0 0 0 2px var(--_row-selected-border)}.dg-body .dg-tr[data-disabled]{pointer-events:none;opacity:.45}:host([striped]) .dg-body .dg-tr:nth-child(2n){background:var(--_stripe-bg)}:host([striped]) .dg-body .dg-tr:nth-child(2n)[aria-selected=true]{background:var(--_row-selected-bg)}.dg-td{max-width:var(--datagrid-cell-max-width,32ch);padding:var(--_cell-padding-y) var(--_cell-padding-x);text-overflow:ellipsis;vertical-align:middle;color:var(--color-contrast-800);white-space:nowrap;border-right:var(--border) solid var(--_border-color);overflow:hidden}.dg-td[data-align=center]{text-align:center}.dg-td[data-align=right]{text-align:right}:host(:dir(rtl)) .dg-td,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-td:last-child,.dg-td.dg-td-check,.dg-td.dg-td-expand,.dg-td.dg-td-last{border-right:none}:host(:dir(rtl)) .dg-td:last-child,:host(:dir(rtl)) .dg-td.dg-td-check,:host(:dir(rtl)) .dg-td.dg-td-expand,:host(:dir(rtl)) .dg-td.dg-td-last,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td:last-child,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-check,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-expand,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-last{border-left:none}.dg-empty{padding:var(--size-12) var(--_cell-padding-x);font-size:var(--text-sm);color:var(--color-contrast-400);text-align:center}.dg-empty-content{gap:var(--size-4);flex-direction:column;justify-content:center;align-items:center;display:flex}.dg-empty-actions{margin-top:var(--size-2)}.dg-controls{gap:var(--size-3);height:var(--size-8);padding:var(--size-1-5) var(--_cell-padding-x);background:var(--_header-bg);border-bottom:var(--border) solid var(--_border-color);justify-content:space-between;align-items:center;display:flex}.dg-tabs{gap:var(--size-1);flex:1;align-items:center;min-width:0;display:flex;overflow:hidden}.dg-tab{--button-padding:var(--size-0-5) var(--size-2-5);--button-font-size:var(--text-xs);--button-color:var(--color-contrast-500);flex:1;min-width:0}.dg-tab--active{--button-color:var(--color-contrast-900);--button-bg:color-mix(in oklch, var(--color-contrast-500) 10%, transparent);--button-border-color:var(--_border-color);--button-border:var(--border);font-weight:var(--font-semibold)}.dg-actions{gap:var(--size-0-5);flex-shrink:0;align-items:center;display:flex}.dg-action-divider{width:var(--border);height:var(--size-4);margin-inline:var(--size-1);background:var(--_border-color);flex-shrink:0;display:inline-block}.dg-action-divider[hidden]{display:none}.dg-filter{width:100%;display:block}.dg-search{gap:var(--size-1);flex-direction:row-reverse;align-items:center;display:flex}.dg-search-input{--input-height:var(--size-7);opacity:0;width:0;transition:width var(--transition-fast), opacity var(--transition-fast);flex-shrink:0;display:block;overflow:hidden}.dg-search--open .dg-search-input{opacity:1;width:12rem;overflow:visible}@media (prefers-reduced-motion:reduce){.dg-search-input{transition:none}}.dg-action-popover{display:inline-flex}.dg-pop-header{padding:var(--size-3) var(--size-3) var(--size-2);justify-content:space-between;align-items:center;display:flex}.dg-pop-title{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-600);letter-spacing:.02em}.dg-pop-sort{padding-bottom:var(--size-2);flex-direction:column;display:flex}.dg-pop-sort-row{gap:var(--size-2);padding:var(--size-1) var(--size-3);align-items:center;display:flex}.dg-pop-select{--select-min-width:var(--size-20);flex:2}.dg-pop-dir-select{--select-min-width:var(--size-10);flex:1}.dg-pop-filter{flex-direction:column;display:flex}.dg-pop-filter-fields{padding:0 var(--size-3) var(--size-3)}.dg-pop-filter-rules{border-top:var(--border) solid var(--_border-color);padding-top:var(--size-1)}.dg-pop-filter-rules[hidden]{display:none}.dg-pop-filter-rule{gap:var(--size-2);padding:var(--size-2) var(--size-3);flex-direction:column;display:flex}.dg-pop-filter-rule-header{gap:var(--size-1-5);align-items:center;display:flex}.dg-pop-filter-field{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-800);white-space:nowrap}.dg-pop-filter-op-select{--select-min-width:0;--select-height:var(--size-6);--select-font-size:var(--text-2xs);--select-padding-x:var(--size-1-5);flex:1;min-width:6rem}.dg-pop-col-item{--button-radius:var(--rounded-md);justify-content:flex-start}.dg-pop-col-list{gap:var(--size-1);max-width:25rem;padding:var(--size-3);flex-wrap:wrap;display:flex}.dg-footer{gap:var(--size-2);padding:var(--size-2) var(--_cell-padding-x);font-size:var(--text-xs);color:var(--color-contrast-500);background:var(--_header-bg);align-items:center;display:flex}.dg-footer-info{white-space:nowrap}.dg-footer-end{gap:var(--size-2);align-items:center;width:fit-content;display:flex}.dg-footer-end:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){margin-left:auto}.dg-footer-end:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:auto}.dg-page-size-wrap{flex-shrink:0;width:5rem}.dg-page-size-select{--select-min-width:0;--select-height:var(--size-7);--select-font-size:var(--text-xs);--select-padding-x:var(--size-2)}.dg-pagination{gap:var(--size-1);align-items:center;display:flex}:host(:dir(rtl)) .dg-page-btn,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-page-btn{transform:scaleX(-1)}.dg-page-btn{--button-color:var(--color-contrast-600);--button-radius:var(--rounded-md);width:var(--size-7);height:var(--size-7)}.dg-page-btn:hover{--button-color:var(--color-contrast-900);--button-bg:var(--color-contrast-300)}.dg-page-btn:disabled{cursor:not-allowed;opacity:.35}.dg-page-label{padding-inline:var(--size-1);white-space:nowrap}.dg-col-resize{inset-block:calc(var(--_cell-padding-y) * -1);width:var(--size-1);cursor:col-resize;-webkit-user-select:none;user-select:none;border-radius:var(--rounded);transition:background var(--transition-fast);background:0 0;position:absolute}.dg-col-resize:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){right:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:hover,.dg-col-resize:active{background:var(--_accent,var(--color-contrast-300))}.dg-td:focus-visible,.dg-th:focus-visible{outline:2px solid var(--_row-selected-border);outline-offset:-2px}.dg-tr-expanded .dg-td-expanded{padding:var(--_cell-padding-y) var(--_cell-padding-x);box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-600) 4%, var(--_bg,transparent)), inset 0 calc(var(--border) * -1) 0 var(--_border-color);border:none}.dg-tr-expanded:last-child .dg-td-expanded{box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-900) 4%, var(--_bg,transparent))}.dg-tr:has(+.dg-tr-expanded){border-bottom:none}.dg-th-expand,.dg-td-expand{width:var(--size-8);min-width:var(--size-8);padding-block:var(--size-1) 0;padding-inline:0 var(--size-2);text-align:center;white-space:nowrap;border-left:none;border-right:none}.dg-expand-btn{--button-color:var(--color-contrast-500);--button-radius:var(--rounded-sm);width:var(--size-5);height:var(--size-5)}.dg-expand-btn:hover{--button-color:var(--color-contrast-900)}.dg-expand-btn:disabled{cursor:not-allowed;opacity:.4}.dg-loading-overlay{z-index:3;background:color-mix(in oklch, var(--_bg,white) 40%, transparent);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);justify-content:center;align-items:center;display:none;position:absolute;inset:0}:host([loading]) .dg-loading-overlay{display:flex}:host([loading]) .dg-scroll table{pointer-events:none;opacity:.5}.dg-spin{animation:1s linear infinite dg-spin}@keyframes dg-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}`;exports.default=e;
|
|
2
2
|
//# sourceMappingURL=datagrid.css.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid.css.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n /* ── Datagrid-specific token overrides on top of tableBaseMixin ─────── */\n --_row-hover-bg: var(--datagrid-row-hover-bg, color-mix(in oklch, var(--color-contrast-500) 5%, transparent));\n --_row-selected-bg: var(--datagrid-row-selected-bg, color-mix(in oklch, var(--_accent) 10%, transparent));\n --_row-selected-border: var(--datagrid-row-selected-border, var(--_accent));\n }\n\n /* ── Scroll wrapper ───────────────────────────────────────────────────────── */\n\n .dg-scroll {\n max-height: var(--datagrid-max-height, none);\n overflow: auto;\n }\n\n /* ── Table ────────────────────────────────────────────────────────────────── */\n\n .dg-table {\n width: 100%;\n font-size: var(--_font-size);\n table-layout: auto;\n border-collapse: collapse;\n }\n\n /* ── Head ─────────────────────────────────────────────────────────────────── */\n\n .dg-head {\n position: sticky;\n top: 0;\n z-index: 2;\n background: var(--_header-bg);\n box-shadow: inset 0 calc(var(--border) * -1) 0 var(--_border-color);\n }\n\n .dg-th {\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-500);\n text-align: start;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n white-space: nowrap;\n user-select: none;\n border-right: var(--border) solid var(--_border-color);\n\n &[data-align='center'] {\n text-align: center;\n }\n\n &[data-align='right'] {\n text-align: right;\n }\n\n &:has(.dg-sort-btn) {\n padding: 0;\n }\n }\n\n .dg-sort-btn {\n --button-padding: var(--_cell-padding-y) var(--_cell-padding-x);\n --button-font-size: var(--text-xs);\n --button-font-weight: var(--font-semibold);\n --button-color: var(--color-contrast-500);\n --button-justify: flex-start;\n\n height: 100%;\n }\n\n .dg-th[data-align='center'] .dg-sort-btn {\n --button-justify: center;\n }\n\n .dg-th[data-align='right'] .dg-sort-btn {\n --button-justify: flex-end;\n }\n\n :host(:dir(rtl)) .dg-th,\n :dir(rtl) .dg-th {\n border-right: none;\n border-left: var(--border) solid var(--_border-color);\n }\n\n .dg-th:last-child,\n .dg-th.dg-th-check,\n .dg-th.dg-th-expand,\n .dg-th.dg-th-last {\n border-right: none;\n }\n\n :host(:dir(rtl)) .dg-th:last-child,\n :host(:dir(rtl)) .dg-th.dg-th-check,\n :host(:dir(rtl)) .dg-th.dg-th-expand,\n :host(:dir(rtl)) .dg-th.dg-th-last,\n :dir(rtl) .dg-th:last-child,\n :dir(rtl) .dg-th.dg-th-check,\n :dir(rtl) .dg-th.dg-th-expand,\n :dir(rtl) .dg-th.dg-th-last {\n border-left: none;\n }\n\n .dg-th-inner {\n position: relative;\n display: flex;\n gap: var(--size-1);\n align-items: center;\n }\n\n .dg-th[aria-sort]:has(.dg-sort-btn:hover):not(:has(.dg-sort-btn[aria-disabled='true'])) {\n background: color-mix(in oklch, var(--color-contrast-900) 5%, transparent);\n }\n\n .dg-th[aria-sort='ascending'] .dg-sort-icon,\n .dg-th[aria-sort='descending'] .dg-sort-icon {\n color: var(--_accent);\n }\n\n /* Select-all checkbox cell */\n .dg-th-check {\n width: var(--size-5);\n min-width: var(--size-5);\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n }\n\n .dg-th-check,\n .dg-td-check {\n vertical-align: middle;\n text-align: center;\n }\n\n .dg-td.dg-td-check {\n padding: var(--size-1) 0 0;\n }\n\n /* ore-checkbox used for select-all and row checkboxes — label-less, compact */\n .dg-check {\n display: inline-flex;\n gap: 0;\n align-items: center;\n justify-content: center;\n min-height: 0;\n cursor: pointer;\n }\n\n /* ── Body rows ────────────────────────────────────────────────────────────── */\n\n .dg-body .dg-tr {\n border-block-end: var(--border) solid var(--_border-color);\n transition: background var(--transition-fast);\n }\n\n .dg-body .dg-tr:hover:not([data-disabled], [aria-selected='true']) {\n background: var(--_row-hover-bg);\n }\n\n /* ── Selection ─────────────────────────────────────────────────────────────── */\n\n .dg-body .dg-tr[aria-selected='true'] {\n background: var(--_row-selected-bg);\n }\n\n .dg-body .dg-tr[data-selectable] {\n cursor: pointer;\n outline: none;\n }\n\n .dg-body .dg-tr[data-selectable]:focus-visible {\n box-shadow: inset 0 0 0 2px var(--_row-selected-border);\n }\n\n .dg-body .dg-tr[data-disabled] {\n pointer-events: none;\n opacity: 0.45;\n }\n\n /* Striped rows */\n :host([striped]) .dg-body .dg-tr:nth-child(even) {\n background: var(--_stripe-bg);\n }\n\n :host([striped]) .dg-body .dg-tr:nth-child(even)[aria-selected='true'] {\n background: var(--_row-selected-bg);\n }\n\n /* ── Body cells ────────────────────────────────────────────────────────────── */\n\n .dg-td {\n max-width: var(--datagrid-cell-max-width, 32ch);\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: middle;\n color: var(--color-contrast-800);\n white-space: nowrap;\n border-right: var(--border) solid var(--_border-color);\n\n &[data-align='center'] {\n text-align: center;\n }\n\n &[data-align='right'] {\n text-align: right;\n }\n }\n\n :host(:dir(rtl)) .dg-td,\n :dir(rtl) .dg-td {\n border-right: none;\n border-left: var(--border) solid var(--_border-color);\n }\n\n .dg-td:last-child,\n .dg-td.dg-td-check,\n .dg-td.dg-td-expand,\n .dg-td.dg-td-last {\n border-right: none;\n }\n\n :host(:dir(rtl)) .dg-td:last-child,\n :host(:dir(rtl)) .dg-td.dg-td-check,\n :host(:dir(rtl)) .dg-td.dg-td-expand,\n :host(:dir(rtl)) .dg-td.dg-td-last,\n :dir(rtl) .dg-td:last-child,\n :dir(rtl) .dg-td.dg-td-check,\n :dir(rtl) .dg-td.dg-td-expand,\n :dir(rtl) .dg-td.dg-td-last {\n border-left: none;\n }\n\n /* ── Empty state ──────────────────────────────────────────────────────────── */\n\n .dg-empty {\n padding: var(--size-12) var(--_cell-padding-x);\n font-size: var(--text-sm);\n color: var(--color-contrast-400);\n text-align: center;\n }\n\n .dg-empty-content {\n display: flex;\n flex-direction: column;\n gap: var(--size-4);\n align-items: center;\n justify-content: center;\n }\n\n .dg-empty-actions {\n margin-top: var(--size-2);\n }\n\n /* ── Controls bar (tabs + action row) ───────────────────────────────────── */\n\n .dg-controls {\n display: flex;\n gap: var(--size-3);\n align-items: center;\n justify-content: space-between;\n height: var(--size-8);\n padding: var(--size-1-5) var(--_cell-padding-x);\n background: var(--_header-bg);\n border-block-end: var(--border) solid var(--_border-color);\n }\n\n /* ── Tab system (left) ───────────────────────────────────────────────────── */\n\n .dg-tabs {\n display: flex;\n flex: 1;\n gap: var(--size-1);\n align-items: center;\n min-width: 0;\n overflow: hidden;\n }\n\n .dg-tab {\n --button-padding: var(--size-0-5) var(--size-2-5);\n --button-font-size: var(--text-xs);\n --button-color: var(--color-contrast-500);\n\n flex: 1;\n min-width: 0;\n }\n\n .dg-tab--active {\n --button-color: var(--color-contrast-900);\n --button-bg: color-mix(in oklch, var(--color-contrast-500) 10%, transparent);\n --button-border-color: var(--_border-color);\n --button-border: var(--border);\n\n font-weight: var(--font-semibold);\n }\n\n /* ── Action bar (right) ──────────────────────────────────────────────────── */\n\n .dg-actions {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-0-5);\n align-items: center;\n }\n\n /* ── Shared icon button — used by action bar, search-expand clear, popover header icons ── */\n\n .dg-action-divider {\n display: inline-block;\n flex-shrink: 0;\n width: var(--border);\n height: var(--size-4);\n margin-inline: var(--size-1);\n background: var(--_border-color);\n\n &[hidden] {\n display: none;\n }\n }\n\n .dg-filter {\n display: block;\n width: 100%;\n }\n\n /* ── Search toggle (rightmost action) ───────────────────────────────────── */\n\n .dg-search {\n display: flex;\n flex-direction: row-reverse;\n gap: var(--size-1);\n align-items: center;\n }\n\n .dg-search-input {\n display: block;\n flex-shrink: 0;\n width: 0;\n overflow: hidden;\n opacity: 0;\n transition:\n width var(--transition-fast),\n opacity var(--transition-fast);\n\n --input-height: var(--size-7);\n }\n\n .dg-search--open .dg-search-input {\n width: 12rem;\n overflow: visible;\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .dg-search-input {\n transition: none;\n }\n }\n\n /* ── ore-popover: action popover wrapper ─────────────────────────────────── */\n\n .dg-action-popover {\n display: inline-flex;\n }\n\n /* ── Popover content: shared header row ─────────────────────────────────── */\n\n .dg-pop-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--size-3) var(--size-3) var(--size-2);\n }\n\n .dg-pop-title {\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-600);\n letter-spacing: 0.02em;\n }\n\n /* ── Sort / Group by popover content ────────────────────────────────────── */\n\n .dg-pop-sort {\n display: flex;\n flex-direction: column;\n padding-block-end: var(--size-2);\n }\n\n .dg-pop-sort-row {\n display: flex;\n gap: var(--size-2);\n align-items: center;\n padding: var(--size-1) var(--size-3);\n }\n\n .dg-pop-select {\n --select-min-width: var(--size-20);\n\n flex: 2;\n }\n\n .dg-pop-dir-select {\n --select-min-width: var(--size-10);\n\n flex: 1;\n }\n\n /* ── Filter popover content ──────────────────────────────────────────────── */\n\n .dg-pop-filter {\n display: flex;\n flex-direction: column;\n }\n\n /* Field picker: select columns to add filter rules. */\n .dg-pop-filter-fields {\n padding: 0 var(--size-3) var(--size-3);\n }\n\n /* ── Filter rules section ────────────────────────────────────────────────── */\n\n .dg-pop-filter-rules {\n padding-block-start: var(--size-1);\n border-block-start: var(--border) solid var(--_border-color);\n\n &[hidden] {\n display: none;\n }\n }\n\n .dg-pop-filter-rule {\n display: flex;\n flex-direction: column;\n gap: var(--size-2);\n padding: var(--size-2) var(--size-3);\n }\n\n .dg-pop-filter-rule-header {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n }\n\n .dg-pop-filter-field {\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-800);\n white-space: nowrap;\n }\n\n .dg-pop-filter-op-select {\n --select-min-width: 0;\n --select-height: var(--size-6);\n --select-font-size: var(--text-2xs);\n --select-padding-x: var(--size-1-5);\n\n flex: 1;\n min-width: 6rem;\n }\n\n .dg-pop-col-item {\n --button-radius: var(--rounded-md);\n\n justify-content: flex-start;\n }\n\n .dg-pop-col-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-1);\n max-width: 25rem;\n padding: var(--size-3);\n }\n\n /* ── Footer / pagination bar ─────────────────────────────────────────────── */\n\n .dg-footer {\n display: flex;\n gap: var(--size-2);\n align-items: center;\n padding: var(--size-2) var(--_cell-padding-x);\n font-size: var(--text-xs);\n color: var(--color-contrast-500);\n background: var(--_header-bg);\n }\n\n .dg-footer-info {\n white-space: nowrap;\n }\n\n .dg-footer-end {\n display: flex;\n gap: var(--size-2);\n align-items: center;\n width: fit-content;\n margin-inline-start: auto;\n }\n\n .dg-page-size-wrap {\n flex-shrink: 0;\n width: 5rem;\n }\n\n .dg-page-size-select {\n --select-min-width: 0;\n --select-height: var(--size-7);\n --select-font-size: var(--text-xs);\n --select-padding-x: var(--size-2);\n }\n\n .dg-pagination {\n display: flex;\n gap: var(--size-1);\n align-items: center;\n }\n\n :host(:dir(rtl)) .dg-page-btn,\n :dir(rtl) .dg-page-btn {\n transform: scaleX(-1);\n }\n\n .dg-page-btn {\n --button-color: var(--color-contrast-600);\n --button-radius: var(--rounded-md);\n\n width: var(--size-7);\n height: var(--size-7);\n }\n\n .dg-page-btn:hover {\n --button-color: var(--color-contrast-900);\n --button-bg: var(--color-contrast-300);\n }\n\n .dg-page-btn:disabled {\n cursor: not-allowed;\n opacity: 0.35;\n }\n\n .dg-page-label {\n padding-inline: var(--size-1);\n white-space: nowrap;\n }\n\n /* ── Column resize handle (F4) ───────────────────────────────────────────── */\n\n .dg-col-resize {\n position: absolute;\n inset-block: calc(var(--_cell-padding-y) * -1);\n inset-inline-end: calc((var(--_cell-padding-x) + var(--border) + 2px) * -1);\n width: var(--size-1);\n cursor: col-resize;\n user-select: none;\n background: transparent;\n border-radius: var(--rounded);\n transition: background var(--transition-fast);\n }\n\n .dg-col-resize:hover,\n .dg-col-resize:active {\n background: var(--_accent, var(--color-contrast-300));\n }\n\n /* ── Cell keyboard focus (ARIA grid roving tabindex) ─────────────────────── */\n\n .dg-td:focus-visible,\n .dg-th:focus-visible {\n outline: 2px solid var(--_row-selected-border);\n outline-offset: -2px;\n }\n\n /* ── Row expansion ────────────────────────────────────────────────────────── */\n\n .dg-tr-expanded .dg-td-expanded {\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n border: none;\n\n /* Paint background + bottom separator via box-shadow so it is\n direction-agnostic and covers the host outer border on both sides. */\n box-shadow:\n inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-600) 4%, var(--_bg, transparent)),\n inset 0 calc(var(--border) * -1) 0 var(--_border-color);\n }\n\n .dg-tr-expanded:last-child .dg-td-expanded {\n box-shadow: inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-900) 4%, var(--_bg, transparent));\n }\n\n .dg-tr:has(+ .dg-tr-expanded) {\n border-block-end: none;\n }\n\n .dg-th-expand,\n .dg-td-expand {\n width: var(--size-8);\n min-width: var(--size-8);\n padding-block: var(--size-1) 0;\n padding-inline: 0 var(--size-2);\n text-align: center;\n white-space: nowrap;\n border-right: none;\n border-left: none;\n }\n\n .dg-expand-btn {\n --button-color: var(--color-contrast-500);\n --button-radius: var(--rounded-sm);\n\n width: var(--size-5);\n height: var(--size-5);\n }\n\n .dg-expand-btn:hover {\n --button-color: var(--color-contrast-900);\n }\n\n .dg-expand-btn:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n\n /* ── Loading overlay ──────────────────────────────────────────────────────── */\n\n .dg-loading-overlay {\n position: absolute;\n inset: 0;\n z-index: 3;\n display: none;\n align-items: center;\n justify-content: center;\n background: color-mix(in oklch, var(--_bg, white) 40%, transparent);\n backdrop-filter: blur(1px);\n }\n\n :host([loading]) .dg-loading-overlay {\n display: flex;\n }\n\n :host([loading]) .dg-scroll table {\n pointer-events: none;\n opacity: 0.5;\n }\n\n .dg-spin {\n animation: dg-spin 1s linear infinite;\n }\n\n @keyframes dg-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"datagrid.css.cjs","names":[],"sources":["../../../src/inputs/datagrid/datagrid.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n /* ── Datagrid-specific token overrides on top of tableBaseMixin ─────── */\n --_row-hover-bg: var(--datagrid-row-hover-bg, color-mix(in oklch, var(--color-contrast-500) 5%, transparent));\n --_row-selected-bg: var(--datagrid-row-selected-bg, color-mix(in oklch, var(--_accent) 10%, transparent));\n --_row-selected-border: var(--datagrid-row-selected-border, var(--_accent));\n }\n\n /* ── Scroll wrapper ───────────────────────────────────────────────────────── */\n\n .dg-scroll {\n max-height: var(--datagrid-max-height, none);\n overflow: auto;\n }\n\n /* ── Table ────────────────────────────────────────────────────────────────── */\n\n .dg-table {\n width: 100%;\n font-size: var(--_font-size);\n table-layout: auto;\n border-collapse: collapse;\n }\n\n /* ── Head ─────────────────────────────────────────────────────────────────── */\n\n .dg-head {\n position: sticky;\n top: 0;\n z-index: 2;\n background: var(--_header-bg);\n box-shadow: inset 0 calc(var(--border) * -1) 0 var(--_border-color);\n }\n\n .dg-th {\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-500);\n text-align: start;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n white-space: nowrap;\n user-select: none;\n border-right: var(--border) solid var(--_border-color);\n\n &[data-align='center'] {\n text-align: center;\n }\n\n &[data-align='right'] {\n text-align: right;\n }\n\n &:has(.dg-sort-btn) {\n padding: 0;\n }\n }\n\n .dg-sort-btn {\n --button-padding: var(--_cell-padding-y) var(--_cell-padding-x);\n --button-font-size: var(--text-xs);\n --button-font-weight: var(--font-semibold);\n --button-color: var(--color-contrast-500);\n --button-justify: flex-start;\n\n height: 100%;\n }\n\n .dg-th[data-align='center'] .dg-sort-btn {\n --button-justify: center;\n }\n\n .dg-th[data-align='right'] .dg-sort-btn {\n --button-justify: flex-end;\n }\n\n :host(:dir(rtl)) .dg-th,\n :dir(rtl) .dg-th {\n border-right: none;\n border-left: var(--border) solid var(--_border-color);\n }\n\n .dg-th:last-child,\n .dg-th.dg-th-check,\n .dg-th.dg-th-expand,\n .dg-th.dg-th-last {\n border-right: none;\n }\n\n :host(:dir(rtl)) .dg-th:last-child,\n :host(:dir(rtl)) .dg-th.dg-th-check,\n :host(:dir(rtl)) .dg-th.dg-th-expand,\n :host(:dir(rtl)) .dg-th.dg-th-last,\n :dir(rtl) .dg-th:last-child,\n :dir(rtl) .dg-th.dg-th-check,\n :dir(rtl) .dg-th.dg-th-expand,\n :dir(rtl) .dg-th.dg-th-last {\n border-left: none;\n }\n\n .dg-th-inner {\n position: relative;\n display: flex;\n gap: var(--size-1);\n align-items: center;\n }\n\n .dg-th[aria-sort]:has(.dg-sort-btn:hover):not(:has(.dg-sort-btn[aria-disabled='true'])) {\n background: color-mix(in oklch, var(--color-contrast-900) 5%, transparent);\n }\n\n .dg-th[aria-sort='ascending'] .dg-sort-icon,\n .dg-th[aria-sort='descending'] .dg-sort-icon {\n color: var(--_accent);\n }\n\n /* Select-all checkbox cell */\n .dg-th-check {\n width: var(--size-5);\n min-width: var(--size-5);\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n }\n\n .dg-th-check,\n .dg-td-check {\n vertical-align: middle;\n text-align: center;\n }\n\n .dg-td.dg-td-check {\n padding: var(--size-1) 0 0;\n }\n\n /* ore-checkbox used for select-all and row checkboxes — label-less, compact */\n .dg-check {\n display: inline-flex;\n gap: 0;\n align-items: center;\n justify-content: center;\n min-height: 0;\n cursor: pointer;\n }\n\n /* ── Body rows ────────────────────────────────────────────────────────────── */\n\n .dg-body .dg-tr {\n border-block-end: var(--border) solid var(--_border-color);\n transition: background var(--transition-fast);\n }\n\n .dg-body .dg-tr:hover:not([data-disabled], [aria-selected='true']) {\n background: var(--_row-hover-bg);\n }\n\n /* ── Selection ─────────────────────────────────────────────────────────────── */\n\n .dg-body .dg-tr[aria-selected='true'] {\n background: var(--_row-selected-bg);\n }\n\n .dg-body .dg-tr[data-selectable] {\n cursor: pointer;\n outline: none;\n }\n\n .dg-body .dg-tr[data-selectable]:focus-visible {\n box-shadow: inset 0 0 0 2px var(--_row-selected-border);\n }\n\n .dg-body .dg-tr[data-disabled] {\n pointer-events: none;\n opacity: 0.45;\n }\n\n /* Striped rows */\n :host([striped]) .dg-body .dg-tr:nth-child(even) {\n background: var(--_stripe-bg);\n }\n\n :host([striped]) .dg-body .dg-tr:nth-child(even)[aria-selected='true'] {\n background: var(--_row-selected-bg);\n }\n\n /* ── Body cells ────────────────────────────────────────────────────────────── */\n\n .dg-td {\n max-width: var(--datagrid-cell-max-width, 32ch);\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: middle;\n color: var(--color-contrast-800);\n white-space: nowrap;\n border-right: var(--border) solid var(--_border-color);\n\n &[data-align='center'] {\n text-align: center;\n }\n\n &[data-align='right'] {\n text-align: right;\n }\n }\n\n :host(:dir(rtl)) .dg-td,\n :dir(rtl) .dg-td {\n border-right: none;\n border-left: var(--border) solid var(--_border-color);\n }\n\n .dg-td:last-child,\n .dg-td.dg-td-check,\n .dg-td.dg-td-expand,\n .dg-td.dg-td-last {\n border-right: none;\n }\n\n :host(:dir(rtl)) .dg-td:last-child,\n :host(:dir(rtl)) .dg-td.dg-td-check,\n :host(:dir(rtl)) .dg-td.dg-td-expand,\n :host(:dir(rtl)) .dg-td.dg-td-last,\n :dir(rtl) .dg-td:last-child,\n :dir(rtl) .dg-td.dg-td-check,\n :dir(rtl) .dg-td.dg-td-expand,\n :dir(rtl) .dg-td.dg-td-last {\n border-left: none;\n }\n\n /* ── Empty state ──────────────────────────────────────────────────────────── */\n\n .dg-empty {\n padding: var(--size-12) var(--_cell-padding-x);\n font-size: var(--text-sm);\n color: var(--color-contrast-400);\n text-align: center;\n }\n\n .dg-empty-content {\n display: flex;\n flex-direction: column;\n gap: var(--size-4);\n align-items: center;\n justify-content: center;\n }\n\n .dg-empty-actions {\n margin-top: var(--size-2);\n }\n\n /* ── Controls bar (tabs + action row) ───────────────────────────────────── */\n\n .dg-controls {\n display: flex;\n gap: var(--size-3);\n align-items: center;\n justify-content: space-between;\n height: var(--size-8);\n padding: var(--size-1-5) var(--_cell-padding-x);\n background: var(--_header-bg);\n border-block-end: var(--border) solid var(--_border-color);\n }\n\n /* ── Tab system (left) ───────────────────────────────────────────────────── */\n\n .dg-tabs {\n display: flex;\n flex: 1;\n gap: var(--size-1);\n align-items: center;\n min-width: 0;\n overflow: hidden;\n }\n\n .dg-tab {\n --button-padding: var(--size-0-5) var(--size-2-5);\n --button-font-size: var(--text-xs);\n --button-color: var(--color-contrast-500);\n\n flex: 1;\n min-width: 0;\n }\n\n .dg-tab--active {\n --button-color: var(--color-contrast-900);\n --button-bg: color-mix(in oklch, var(--color-contrast-500) 10%, transparent);\n --button-border-color: var(--_border-color);\n --button-border: var(--border);\n\n font-weight: var(--font-semibold);\n }\n\n /* ── Action bar (right) ──────────────────────────────────────────────────── */\n\n .dg-actions {\n display: flex;\n flex-shrink: 0;\n gap: var(--size-0-5);\n align-items: center;\n }\n\n /* ── Shared icon button — used by action bar, search-expand clear, popover header icons ── */\n\n .dg-action-divider {\n display: inline-block;\n flex-shrink: 0;\n width: var(--border);\n height: var(--size-4);\n margin-inline: var(--size-1);\n background: var(--_border-color);\n\n &[hidden] {\n display: none;\n }\n }\n\n .dg-filter {\n display: block;\n width: 100%;\n }\n\n /* ── Search toggle (rightmost action) ───────────────────────────────────── */\n\n .dg-search {\n display: flex;\n flex-direction: row-reverse;\n gap: var(--size-1);\n align-items: center;\n }\n\n .dg-search-input {\n --input-height: var(--size-7);\n display: block;\n flex-shrink: 0;\n width: 0;\n overflow: hidden;\n opacity: 0;\n transition:\n width var(--transition-fast),\n opacity var(--transition-fast);\n }\n\n .dg-search--open .dg-search-input {\n width: 12rem;\n overflow: visible;\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .dg-search-input {\n transition: none;\n }\n }\n\n /* ── ore-popover: action popover wrapper ─────────────────────────────────── */\n\n .dg-action-popover {\n display: inline-flex;\n }\n\n /* ── Popover content: shared header row ─────────────────────────────────── */\n\n .dg-pop-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--size-3) var(--size-3) var(--size-2);\n }\n\n .dg-pop-title {\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-600);\n letter-spacing: 0.02em;\n }\n\n /* ── Sort / Group by popover content ────────────────────────────────────── */\n\n .dg-pop-sort {\n display: flex;\n flex-direction: column;\n padding-block-end: var(--size-2);\n }\n\n .dg-pop-sort-row {\n display: flex;\n gap: var(--size-2);\n align-items: center;\n padding: var(--size-1) var(--size-3);\n }\n\n .dg-pop-select {\n --select-min-width: var(--size-20);\n\n flex: 2;\n }\n\n .dg-pop-dir-select {\n --select-min-width: var(--size-10);\n\n flex: 1;\n }\n\n /* ── Filter popover content ──────────────────────────────────────────────── */\n\n .dg-pop-filter {\n display: flex;\n flex-direction: column;\n }\n\n /* Field picker: select columns to add filter rules. */\n .dg-pop-filter-fields {\n padding: 0 var(--size-3) var(--size-3);\n }\n\n /* ── Filter rules section ────────────────────────────────────────────────── */\n\n .dg-pop-filter-rules {\n padding-block-start: var(--size-1);\n border-block-start: var(--border) solid var(--_border-color);\n\n &[hidden] {\n display: none;\n }\n }\n\n .dg-pop-filter-rule {\n display: flex;\n flex-direction: column;\n gap: var(--size-2);\n padding: var(--size-2) var(--size-3);\n }\n\n .dg-pop-filter-rule-header {\n display: flex;\n gap: var(--size-1-5);\n align-items: center;\n }\n\n .dg-pop-filter-field {\n font-size: var(--text-xs);\n font-weight: var(--font-semibold);\n color: var(--color-contrast-800);\n white-space: nowrap;\n }\n\n .dg-pop-filter-op-select {\n --select-min-width: 0;\n --select-height: var(--size-6);\n --select-font-size: var(--text-2xs);\n --select-padding-x: var(--size-1-5);\n\n flex: 1;\n min-width: 6rem;\n }\n\n .dg-pop-col-item {\n --button-radius: var(--rounded-md);\n\n justify-content: flex-start;\n }\n\n .dg-pop-col-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--size-1);\n max-width: 25rem;\n padding: var(--size-3);\n }\n\n /* ── Footer / pagination bar ─────────────────────────────────────────────── */\n\n .dg-footer {\n display: flex;\n gap: var(--size-2);\n align-items: center;\n padding: var(--size-2) var(--_cell-padding-x);\n font-size: var(--text-xs);\n color: var(--color-contrast-500);\n background: var(--_header-bg);\n }\n\n .dg-footer-info {\n white-space: nowrap;\n }\n\n .dg-footer-end {\n display: flex;\n gap: var(--size-2);\n align-items: center;\n width: fit-content;\n margin-inline-start: auto;\n }\n\n .dg-page-size-wrap {\n flex-shrink: 0;\n width: 5rem;\n }\n\n .dg-page-size-select {\n --select-min-width: 0;\n --select-height: var(--size-7);\n --select-font-size: var(--text-xs);\n --select-padding-x: var(--size-2);\n }\n\n .dg-pagination {\n display: flex;\n gap: var(--size-1);\n align-items: center;\n }\n\n :host(:dir(rtl)) .dg-page-btn,\n :dir(rtl) .dg-page-btn {\n transform: scaleX(-1);\n }\n\n .dg-page-btn {\n --button-color: var(--color-contrast-600);\n --button-radius: var(--rounded-md);\n\n width: var(--size-7);\n height: var(--size-7);\n }\n\n .dg-page-btn:hover {\n --button-color: var(--color-contrast-900);\n --button-bg: var(--color-contrast-300);\n }\n\n .dg-page-btn:disabled {\n cursor: not-allowed;\n opacity: 0.35;\n }\n\n .dg-page-label {\n padding-inline: var(--size-1);\n white-space: nowrap;\n }\n\n /* ── Column resize handle (F4) ───────────────────────────────────────────── */\n\n .dg-col-resize {\n position: absolute;\n inset-block: calc(var(--_cell-padding-y) * -1);\n inset-inline-end: calc((var(--_cell-padding-x) + var(--border) + 2px) * -1);\n width: var(--size-1);\n cursor: col-resize;\n user-select: none;\n background: transparent;\n border-radius: var(--rounded);\n transition: background var(--transition-fast);\n }\n\n .dg-col-resize:hover,\n .dg-col-resize:active {\n background: var(--_accent, var(--color-contrast-300));\n }\n\n /* ── Cell keyboard focus (ARIA grid roving tabindex) ─────────────────────── */\n\n .dg-td:focus-visible,\n .dg-th:focus-visible {\n outline: 2px solid var(--_row-selected-border);\n outline-offset: -2px;\n }\n\n /* ── Row expansion ────────────────────────────────────────────────────────── */\n\n .dg-tr-expanded .dg-td-expanded {\n padding: var(--_cell-padding-y) var(--_cell-padding-x);\n border: none;\n\n /* Paint background + bottom separator via box-shadow so it is\n direction-agnostic and covers the host outer border on both sides. */\n box-shadow:\n inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-600) 4%, var(--_bg, transparent)),\n inset 0 calc(var(--border) * -1) 0 var(--_border-color);\n }\n\n .dg-tr-expanded:last-child .dg-td-expanded {\n box-shadow: inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-900) 4%, var(--_bg, transparent));\n }\n\n .dg-tr:has(+ .dg-tr-expanded) {\n border-block-end: none;\n }\n\n .dg-th-expand,\n .dg-td-expand {\n width: var(--size-8);\n min-width: var(--size-8);\n padding-block: var(--size-1) 0;\n padding-inline: 0 var(--size-2);\n text-align: center;\n white-space: nowrap;\n border-right: none;\n border-left: none;\n }\n\n .dg-expand-btn {\n --button-color: var(--color-contrast-500);\n --button-radius: var(--rounded-sm);\n\n width: var(--size-5);\n height: var(--size-5);\n }\n\n .dg-expand-btn:hover {\n --button-color: var(--color-contrast-900);\n }\n\n .dg-expand-btn:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n\n /* ── Loading overlay ──────────────────────────────────────────────────────── */\n\n .dg-loading-overlay {\n position: absolute;\n inset: 0;\n z-index: 3;\n display: none;\n align-items: center;\n justify-content: center;\n background: color-mix(in oklch, var(--_bg, white) 40%, transparent);\n backdrop-filter: blur(1px);\n }\n\n :host([loading]) .dg-loading-overlay {\n display: flex;\n }\n\n :host([loading]) .dg-scroll table {\n pointer-events: none;\n opacity: 0.5;\n }\n\n .dg-spin {\n animation: dg-spin 1s linear infinite;\n }\n\n @keyframes dg-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n }\n}\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/inputs/datagrid/datagrid.css?inline
|
|
2
|
-
var e = "@layer refine.base{:host{--_row-hover-bg:var(--datagrid-row-hover-bg,color-mix(in oklch, var(--color-contrast-500) 5%, transparent));--_row-selected-bg:var(--datagrid-row-selected-bg,color-mix(in oklch, var(--_accent) 10%, transparent));--_row-selected-border:var(--datagrid-row-selected-border,var(--_accent))}.dg-scroll{max-height:var(--datagrid-max-height,none);overflow:auto}.dg-table{width:100%;font-size:var(--_font-size);table-layout:auto;border-collapse:collapse}.dg-head{z-index:2;background:var(--_header-bg);box-shadow:inset 0 calc(var(--border) * -1) 0 var(--_border-color);position:sticky;top:0}.dg-th{padding:var(--_cell-padding-y) var(--_cell-padding-x);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-500);text-align:start;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;-webkit-user-select:none;user-select:none;border-right:var(--border) solid var(--_border-color)}.dg-th[data-align=center]{text-align:center}.dg-th[data-align=right]{text-align:right}.dg-th:has(.dg-sort-btn){padding:0}.dg-sort-btn{--button-padding:var(--_cell-padding-y) var(--_cell-padding-x);--button-font-size:var(--text-xs);--button-font-weight:var(--font-semibold);--button-color:var(--color-contrast-500);--button-justify:flex-start;height:100%}.dg-th[data-align=center] .dg-sort-btn{--button-justify:center}.dg-th[data-align=right] .dg-sort-btn{--button-justify:flex-end}:host(:dir(rtl)) .dg-th{border-right:none;border-left:var(--border) solid var(--_border-color)}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-th:last-child,.dg-th.dg-th-check,.dg-th.dg-th-expand,.dg-th.dg-th-last{border-right:none}:host(:dir(rtl)) .dg-th:last-child,:host(:dir(rtl)) .dg-th.dg-th-check,:host(:dir(rtl)) .dg-th.dg-th-expand,:host(:dir(rtl)) .dg-th.dg-th-last{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th:last-child{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-check{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-expand{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-last{border-left:none}.dg-th-inner{gap:var(--size-1);align-items:center;display:flex;position:relative}.dg-th[aria-sort]:has(.dg-sort-btn:hover):not(:has(.dg-sort-btn[aria-disabled=true])){background:color-mix(in oklch, var(--color-contrast-900) 5%, transparent)}.dg-th[aria-sort=ascending] .dg-sort-icon,.dg-th[aria-sort=descending] .dg-sort-icon{color:var(--_accent)}.dg-th-check{width:var(--size-5);min-width:var(--size-5);padding:var(--_cell-padding-y) var(--_cell-padding-x)}.dg-th-check,.dg-td-check{vertical-align:middle;text-align:center}.dg-td.dg-td-check{padding:var(--size-1) 0 0}.dg-check{cursor:pointer;justify-content:center;align-items:center;gap:0;min-height:0;display:inline-flex}.dg-body .dg-tr{border-bottom:var(--border) solid var(--_border-color);transition:background var(--transition-fast)}.dg-body .dg-tr:hover:not([data-disabled],[aria-selected=true]){background:var(--_row-hover-bg)}.dg-body .dg-tr[aria-selected=true]{background:var(--_row-selected-bg)}.dg-body .dg-tr[data-selectable]{cursor:pointer;outline:none}.dg-body .dg-tr[data-selectable]:focus-visible{box-shadow:inset 0 0 0 2px var(--_row-selected-border)}.dg-body .dg-tr[data-disabled]{pointer-events:none;opacity:.45}:host([striped]) .dg-body .dg-tr:nth-child(2n){background:var(--_stripe-bg)}:host([striped]) .dg-body .dg-tr:nth-child(2n)[aria-selected=true]{background:var(--_row-selected-bg)}.dg-td{max-width:var(--datagrid-cell-max-width,32ch);padding:var(--_cell-padding-y) var(--_cell-padding-x);text-overflow:ellipsis;vertical-align:middle;color:var(--color-contrast-800);white-space:nowrap;border-right:var(--border) solid var(--_border-color);overflow:hidden}.dg-td[data-align=center]{text-align:center}.dg-td[data-align=right]{text-align:right}:host(:dir(rtl)) .dg-td{border-right:none;border-left:var(--border) solid var(--_border-color)}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-td:last-child,.dg-td.dg-td-check,.dg-td.dg-td-expand,.dg-td.dg-td-last{border-right:none}:host(:dir(rtl)) .dg-td:last-child,:host(:dir(rtl)) .dg-td.dg-td-check,:host(:dir(rtl)) .dg-td.dg-td-expand,:host(:dir(rtl)) .dg-td.dg-td-last{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td:last-child{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-check{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-expand{border-left:none}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-last{border-left:none}.dg-empty{padding:var(--size-12) var(--_cell-padding-x);font-size:var(--text-sm);color:var(--color-contrast-400);text-align:center}.dg-empty-content{gap:var(--size-4);flex-direction:column;justify-content:center;align-items:center;display:flex}.dg-empty-actions{margin-top:var(--size-2)}.dg-controls{gap:var(--size-3);height:var(--size-8);padding:var(--size-1-5) var(--_cell-padding-x);background:var(--_header-bg);border-bottom:var(--border) solid var(--_border-color);justify-content:space-between;align-items:center;display:flex}.dg-tabs{gap:var(--size-1);flex:1;align-items:center;min-width:0;display:flex;overflow:hidden}.dg-tab{--button-padding:var(--size-0-5) var(--size-2-5);--button-font-size:var(--text-xs);--button-color:var(--color-contrast-500);flex:1;min-width:0}.dg-tab--active{--button-color:var(--color-contrast-900);--button-bg:color-mix(in oklch, var(--color-contrast-500) 10%, transparent);--button-border-color:var(--_border-color);--button-border:var(--border);font-weight:var(--font-semibold)}.dg-actions{gap:var(--size-0-5);flex-shrink:0;align-items:center;display:flex}.dg-action-divider{width:var(--border);height:var(--size-4);margin-inline:var(--size-1);background:var(--_border-color);flex-shrink:0;display:inline-block}.dg-action-divider[hidden]{display:none}.dg-filter{width:100%;display:block}.dg-search{gap:var(--size-1);flex-direction:row-reverse;align-items:center;display:flex}.dg-search-input{opacity:0;width:0;transition:width var(--transition-fast), opacity var(--transition-fast);--input-height:var(--size-7);flex-shrink:0;display:block;overflow:hidden}.dg-search--open .dg-search-input{opacity:1;width:12rem;overflow:visible}@media (prefers-reduced-motion:reduce){.dg-search-input{transition:none}}.dg-action-popover{display:inline-flex}.dg-pop-header{padding:var(--size-3) var(--size-3) var(--size-2);justify-content:space-between;align-items:center;display:flex}.dg-pop-title{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-600);letter-spacing:.02em}.dg-pop-sort{padding-bottom:var(--size-2);flex-direction:column;display:flex}.dg-pop-sort-row{gap:var(--size-2);padding:var(--size-1) var(--size-3);align-items:center;display:flex}.dg-pop-select{--select-min-width:var(--size-20);flex:2}.dg-pop-dir-select{--select-min-width:var(--size-10);flex:1}.dg-pop-filter{flex-direction:column;display:flex}.dg-pop-filter-fields{padding:0 var(--size-3) var(--size-3)}.dg-pop-filter-rules{border-top:var(--border) solid var(--_border-color);padding-top:var(--size-1)}.dg-pop-filter-rules[hidden]{display:none}.dg-pop-filter-rule{gap:var(--size-2);padding:var(--size-2) var(--size-3);flex-direction:column;display:flex}.dg-pop-filter-rule-header{gap:var(--size-1-5);align-items:center;display:flex}.dg-pop-filter-field{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-800);white-space:nowrap}.dg-pop-filter-op-select{--select-min-width:0;--select-height:var(--size-6);--select-font-size:var(--text-2xs);--select-padding-x:var(--size-1-5);flex:1;min-width:6rem}.dg-pop-col-item{--button-radius:var(--rounded-md);justify-content:flex-start}.dg-pop-col-list{gap:var(--size-1);max-width:25rem;padding:var(--size-3);flex-wrap:wrap;display:flex}.dg-footer{gap:var(--size-2);padding:var(--size-2) var(--_cell-padding-x);font-size:var(--text-xs);color:var(--color-contrast-500);background:var(--_header-bg);align-items:center;display:flex}.dg-footer-info{white-space:nowrap}.dg-footer-end{gap:var(--size-2);align-items:center;width:fit-content;display:flex}.dg-footer-end:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-left:auto}.dg-footer-end:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:auto}.dg-page-size-wrap{flex-shrink:0;width:5rem}.dg-page-size-select{--select-min-width:0;--select-height:var(--size-7);--select-font-size:var(--text-xs);--select-padding-x:var(--size-2)}.dg-pagination{gap:var(--size-1);align-items:center;display:flex}:host(:dir(rtl)) .dg-page-btn{transform:scaleX(-1)}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-page-btn{transform:scaleX(-1)}.dg-page-btn{--button-color:var(--color-contrast-600);--button-radius:var(--rounded-md);width:var(--size-7);height:var(--size-7)}.dg-page-btn:hover{--button-color:var(--color-contrast-900);--button-bg:var(--color-contrast-300)}.dg-page-btn:disabled{cursor:not-allowed;opacity:.35}.dg-page-label{padding-inline:var(--size-1);white-space:nowrap}.dg-col-resize{inset-block:calc(var(--_cell-padding-y) * -1);width:var(--size-1);cursor:col-resize;-webkit-user-select:none;user-select:none;border-radius:var(--rounded);transition:background var(--transition-fast);background:0 0;position:absolute}.dg-col-resize:not(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:hover,.dg-col-resize:active{background:var(--_accent,var(--color-contrast-300))}.dg-td:focus-visible,.dg-th:focus-visible{outline:2px solid var(--_row-selected-border);outline-offset:-2px}.dg-tr-expanded .dg-td-expanded{padding:var(--_cell-padding-y) var(--_cell-padding-x);box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-600) 4%, var(--_bg,transparent)), inset 0 calc(var(--border) * -1) 0 var(--_border-color);border:none}.dg-tr-expanded:last-child .dg-td-expanded{box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-900) 4%, var(--_bg,transparent))}.dg-tr:has(+.dg-tr-expanded){border-bottom:none}.dg-th-expand,.dg-td-expand{width:var(--size-8);min-width:var(--size-8);padding-block:var(--size-1) 0;padding-inline:0 var(--size-2);text-align:center;white-space:nowrap;border-left:none;border-right:none}.dg-expand-btn{--button-color:var(--color-contrast-500);--button-radius:var(--rounded-sm);width:var(--size-5);height:var(--size-5)}.dg-expand-btn:hover{--button-color:var(--color-contrast-900)}.dg-expand-btn:disabled{cursor:not-allowed;opacity:.4}.dg-loading-overlay{z-index:3;background:color-mix(in oklch, var(--_bg,white) 40%, transparent);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);justify-content:center;align-items:center;display:none;position:absolute;inset:0}:host([loading]) .dg-loading-overlay{display:flex}:host([loading]) .dg-scroll table{pointer-events:none;opacity:.5}.dg-spin{animation:1s linear infinite dg-spin}@keyframes dg-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}";
|
|
2
|
+
var e = "@layer refine.base{:host{--_row-hover-bg:var(--datagrid-row-hover-bg,color-mix(in oklch, var(--color-contrast-500) 5%, transparent));--_row-selected-bg:var(--datagrid-row-selected-bg,color-mix(in oklch, var(--_accent) 10%, transparent));--_row-selected-border:var(--datagrid-row-selected-border,var(--_accent))}.dg-scroll{max-height:var(--datagrid-max-height,none);overflow:auto}.dg-table{width:100%;font-size:var(--_font-size);table-layout:auto;border-collapse:collapse}.dg-head{z-index:2;background:var(--_header-bg);box-shadow:inset 0 calc(var(--border) * -1) 0 var(--_border-color);position:sticky;top:0}.dg-th{padding:var(--_cell-padding-y) var(--_cell-padding-x);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-500);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;-webkit-user-select:none;user-select:none;border-right:var(--border) solid var(--_border-color)}.dg-th:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){text-align:left}.dg-th:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){text-align:right}.dg-th[data-align=center]{text-align:center}.dg-th[data-align=right]{text-align:right}.dg-th:has(.dg-sort-btn){padding:0}.dg-sort-btn{--button-padding:var(--_cell-padding-y) var(--_cell-padding-x);--button-font-size:var(--text-xs);--button-font-weight:var(--font-semibold);--button-color:var(--color-contrast-500);--button-justify:flex-start;height:100%}.dg-th[data-align=center] .dg-sort-btn{--button-justify:center}.dg-th[data-align=right] .dg-sort-btn{--button-justify:flex-end}:host(:dir(rtl)) .dg-th,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-th:last-child,.dg-th.dg-th-check,.dg-th.dg-th-expand,.dg-th.dg-th-last{border-right:none}:host(:dir(rtl)) .dg-th:last-child,:host(:dir(rtl)) .dg-th.dg-th-check,:host(:dir(rtl)) .dg-th.dg-th-expand,:host(:dir(rtl)) .dg-th.dg-th-last,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th:last-child,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-check,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-expand,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-th.dg-th-last{border-left:none}.dg-th-inner{gap:var(--size-1);align-items:center;display:flex;position:relative}.dg-th[aria-sort]:has(.dg-sort-btn:hover):not(:has(.dg-sort-btn[aria-disabled=true])){background:color-mix(in oklch, var(--color-contrast-900) 5%, transparent)}.dg-th[aria-sort=ascending] .dg-sort-icon,.dg-th[aria-sort=descending] .dg-sort-icon{color:var(--_accent)}.dg-th-check{width:var(--size-5);min-width:var(--size-5);padding:var(--_cell-padding-y) var(--_cell-padding-x)}.dg-th-check,.dg-td-check{vertical-align:middle;text-align:center}.dg-td.dg-td-check{padding:var(--size-1) 0 0}.dg-check{cursor:pointer;justify-content:center;align-items:center;gap:0;min-height:0;display:inline-flex}.dg-body .dg-tr{border-bottom:var(--border) solid var(--_border-color);transition:background var(--transition-fast)}.dg-body .dg-tr:hover:not(:is([data-disabled],[aria-selected=true])){background:var(--_row-hover-bg)}.dg-body .dg-tr[aria-selected=true]{background:var(--_row-selected-bg)}.dg-body .dg-tr[data-selectable]{cursor:pointer;outline:none}.dg-body .dg-tr[data-selectable]:focus-visible{box-shadow:inset 0 0 0 2px var(--_row-selected-border)}.dg-body .dg-tr[data-disabled]{pointer-events:none;opacity:.45}:host([striped]) .dg-body .dg-tr:nth-child(2n){background:var(--_stripe-bg)}:host([striped]) .dg-body .dg-tr:nth-child(2n)[aria-selected=true]{background:var(--_row-selected-bg)}.dg-td{max-width:var(--datagrid-cell-max-width,32ch);padding:var(--_cell-padding-y) var(--_cell-padding-x);text-overflow:ellipsis;vertical-align:middle;color:var(--color-contrast-800);white-space:nowrap;border-right:var(--border) solid var(--_border-color);overflow:hidden}.dg-td[data-align=center]{text-align:center}.dg-td[data-align=right]{text-align:right}:host(:dir(rtl)) .dg-td,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td{border-right:none;border-left:var(--border) solid var(--_border-color)}.dg-td:last-child,.dg-td.dg-td-check,.dg-td.dg-td-expand,.dg-td.dg-td-last{border-right:none}:host(:dir(rtl)) .dg-td:last-child,:host(:dir(rtl)) .dg-td.dg-td-check,:host(:dir(rtl)) .dg-td.dg-td-expand,:host(:dir(rtl)) .dg-td.dg-td-last,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td:last-child,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-check,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-expand,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-td.dg-td-last{border-left:none}.dg-empty{padding:var(--size-12) var(--_cell-padding-x);font-size:var(--text-sm);color:var(--color-contrast-400);text-align:center}.dg-empty-content{gap:var(--size-4);flex-direction:column;justify-content:center;align-items:center;display:flex}.dg-empty-actions{margin-top:var(--size-2)}.dg-controls{gap:var(--size-3);height:var(--size-8);padding:var(--size-1-5) var(--_cell-padding-x);background:var(--_header-bg);border-bottom:var(--border) solid var(--_border-color);justify-content:space-between;align-items:center;display:flex}.dg-tabs{gap:var(--size-1);flex:1;align-items:center;min-width:0;display:flex;overflow:hidden}.dg-tab{--button-padding:var(--size-0-5) var(--size-2-5);--button-font-size:var(--text-xs);--button-color:var(--color-contrast-500);flex:1;min-width:0}.dg-tab--active{--button-color:var(--color-contrast-900);--button-bg:color-mix(in oklch, var(--color-contrast-500) 10%, transparent);--button-border-color:var(--_border-color);--button-border:var(--border);font-weight:var(--font-semibold)}.dg-actions{gap:var(--size-0-5);flex-shrink:0;align-items:center;display:flex}.dg-action-divider{width:var(--border);height:var(--size-4);margin-inline:var(--size-1);background:var(--_border-color);flex-shrink:0;display:inline-block}.dg-action-divider[hidden]{display:none}.dg-filter{width:100%;display:block}.dg-search{gap:var(--size-1);flex-direction:row-reverse;align-items:center;display:flex}.dg-search-input{--input-height:var(--size-7);opacity:0;width:0;transition:width var(--transition-fast), opacity var(--transition-fast);flex-shrink:0;display:block;overflow:hidden}.dg-search--open .dg-search-input{opacity:1;width:12rem;overflow:visible}@media (prefers-reduced-motion:reduce){.dg-search-input{transition:none}}.dg-action-popover{display:inline-flex}.dg-pop-header{padding:var(--size-3) var(--size-3) var(--size-2);justify-content:space-between;align-items:center;display:flex}.dg-pop-title{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-600);letter-spacing:.02em}.dg-pop-sort{padding-bottom:var(--size-2);flex-direction:column;display:flex}.dg-pop-sort-row{gap:var(--size-2);padding:var(--size-1) var(--size-3);align-items:center;display:flex}.dg-pop-select{--select-min-width:var(--size-20);flex:2}.dg-pop-dir-select{--select-min-width:var(--size-10);flex:1}.dg-pop-filter{flex-direction:column;display:flex}.dg-pop-filter-fields{padding:0 var(--size-3) var(--size-3)}.dg-pop-filter-rules{border-top:var(--border) solid var(--_border-color);padding-top:var(--size-1)}.dg-pop-filter-rules[hidden]{display:none}.dg-pop-filter-rule{gap:var(--size-2);padding:var(--size-2) var(--size-3);flex-direction:column;display:flex}.dg-pop-filter-rule-header{gap:var(--size-1-5);align-items:center;display:flex}.dg-pop-filter-field{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--color-contrast-800);white-space:nowrap}.dg-pop-filter-op-select{--select-min-width:0;--select-height:var(--size-6);--select-font-size:var(--text-2xs);--select-padding-x:var(--size-1-5);flex:1;min-width:6rem}.dg-pop-col-item{--button-radius:var(--rounded-md);justify-content:flex-start}.dg-pop-col-list{gap:var(--size-1);max-width:25rem;padding:var(--size-3);flex-wrap:wrap;display:flex}.dg-footer{gap:var(--size-2);padding:var(--size-2) var(--_cell-padding-x);font-size:var(--text-xs);color:var(--color-contrast-500);background:var(--_header-bg);align-items:center;display:flex}.dg-footer-info{white-space:nowrap}.dg-footer-end{gap:var(--size-2);align-items:center;width:fit-content;display:flex}.dg-footer-end:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){margin-left:auto}.dg-footer-end:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){margin-right:auto}.dg-page-size-wrap{flex-shrink:0;width:5rem}.dg-page-size-select{--select-min-width:0;--select-height:var(--size-7);--select-font-size:var(--text-xs);--select-padding-x:var(--size-2)}.dg-pagination{gap:var(--size-1);align-items:center;display:flex}:host(:dir(rtl)) .dg-page-btn,:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .dg-page-btn{transform:scaleX(-1)}.dg-page-btn{--button-color:var(--color-contrast-600);--button-radius:var(--rounded-md);width:var(--size-7);height:var(--size-7)}.dg-page-btn:hover{--button-color:var(--color-contrast-900);--button-bg:var(--color-contrast-300)}.dg-page-btn:disabled{cursor:not-allowed;opacity:.35}.dg-page-label{padding-inline:var(--size-1);white-space:nowrap}.dg-col-resize{inset-block:calc(var(--_cell-padding-y) * -1);width:var(--size-1);cursor:col-resize;-webkit-user-select:none;user-select:none;border-radius:var(--rounded);transition:background var(--transition-fast);background:0 0;position:absolute}.dg-col-resize:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){right:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:calc((var(--_cell-padding-x) + var(--border) + 2px) * -1)}.dg-col-resize:hover,.dg-col-resize:active{background:var(--_accent,var(--color-contrast-300))}.dg-td:focus-visible,.dg-th:focus-visible{outline:2px solid var(--_row-selected-border);outline-offset:-2px}.dg-tr-expanded .dg-td-expanded{padding:var(--_cell-padding-y) var(--_cell-padding-x);box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-600) 4%, var(--_bg,transparent)), inset 0 calc(var(--border) * -1) 0 var(--_border-color);border:none}.dg-tr-expanded:last-child .dg-td-expanded{box-shadow:inset 0 0 0 9999px color-mix(in oklch, var(--color-contrast-900) 4%, var(--_bg,transparent))}.dg-tr:has(+.dg-tr-expanded){border-bottom:none}.dg-th-expand,.dg-td-expand{width:var(--size-8);min-width:var(--size-8);padding-block:var(--size-1) 0;padding-inline:0 var(--size-2);text-align:center;white-space:nowrap;border-left:none;border-right:none}.dg-expand-btn{--button-color:var(--color-contrast-500);--button-radius:var(--rounded-sm);width:var(--size-5);height:var(--size-5)}.dg-expand-btn:hover{--button-color:var(--color-contrast-900)}.dg-expand-btn:disabled{cursor:not-allowed;opacity:.4}.dg-loading-overlay{z-index:3;background:color-mix(in oklch, var(--_bg,white) 40%, transparent);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);justify-content:center;align-items:center;display:none;position:absolute;inset:0}:host([loading]) .dg-loading-overlay{display:flex}:host([loading]) .dg-scroll table{pointer-events:none;opacity:.5}.dg-spin{animation:1s linear infinite dg-spin}@keyframes dg-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|