@happyvertical/smrt-ui 0.51.39 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +25 -3
- package/README.md +558 -8
- package/dist/actions/__tests__/swipe-dismiss.test.js +69 -0
- package/dist/actions/swipe-dismiss.d.ts +42 -0
- package/dist/actions/swipe-dismiss.d.ts.map +1 -0
- package/dist/actions/swipe-dismiss.js +69 -0
- package/dist/components/calendar/Calendar.svelte +5 -0
- package/dist/components/calendar/Calendar.svelte.d.ts.map +1 -1
- package/dist/components/calendar/CalendarView.svelte +1250 -0
- package/dist/components/calendar/CalendarView.svelte.d.ts +66 -0
- package/dist/components/calendar/CalendarView.svelte.d.ts.map +1 -0
- package/dist/components/calendar/DayView.svelte +5 -0
- package/dist/components/calendar/DayView.svelte.d.ts.map +1 -1
- package/dist/components/calendar/__tests__/CalendarView.test.js +226 -0
- package/dist/components/calendar/__tests__/calendar-model.test.js +138 -0
- package/dist/components/calendar/calendar-model.d.ts +178 -0
- package/dist/components/calendar/calendar-model.d.ts.map +1 -0
- package/dist/components/calendar/calendar-model.js +362 -0
- package/dist/components/calendar/index.d.ts +12 -1
- package/dist/components/calendar/index.d.ts.map +1 -1
- package/dist/components/calendar/index.js +11 -1
- package/dist/components/data/CollectionList.svelte +23 -5
- package/dist/components/data/CollectionList.svelte.d.ts +8 -2
- package/dist/components/data/CollectionList.svelte.d.ts.map +1 -1
- package/dist/components/data/DataTable.svelte +178 -55
- package/dist/components/data/DataTable.svelte.d.ts.map +1 -1
- package/dist/components/data/DataTableController.d.ts +4 -0
- package/dist/components/data/DataTableController.d.ts.map +1 -1
- package/dist/components/data/DataTableController.js +11 -4
- package/dist/components/data/DataTableResponsive.d.ts +4 -0
- package/dist/components/data/DataTableResponsive.d.ts.map +1 -0
- package/dist/components/data/DataTableResponsive.js +22 -0
- package/dist/components/data/ListSortSelect.svelte +121 -0
- package/dist/components/data/ListSortSelect.svelte.d.ts +22 -0
- package/dist/components/data/ListSortSelect.svelte.d.ts.map +1 -0
- package/dist/components/data/SortableHeader.svelte +169 -0
- package/dist/components/data/SortableHeader.svelte.d.ts +30 -0
- package/dist/components/data/SortableHeader.svelte.d.ts.map +1 -0
- package/dist/components/data/__tests__/CollectionList.test.js +37 -0
- package/dist/components/data/__tests__/DataTable.test.js +76 -0
- package/dist/components/data/__tests__/DataTableController.test.js +35 -0
- package/dist/components/data/__tests__/DataTableResponsive.test.js +80 -0
- package/dist/components/data/__tests__/SortableHeader.test.js +101 -0
- package/dist/components/data/__tests__/link-step-surface.test.js +172 -0
- package/dist/components/data/__tests__/list-sort-state.svelte.test.js +71 -0
- package/dist/components/data/__tests__/list-sort.test.js +91 -0
- package/dist/components/data/__tests__/responsive-table.fixture.svelte +29 -0
- package/dist/components/data/__tests__/responsive-table.fixture.svelte.d.ts +7 -0
- package/dist/components/data/__tests__/responsive-table.fixture.svelte.d.ts.map +1 -0
- package/dist/components/data/__tests__/surface-navigation.test.js +121 -0
- package/dist/components/data/data-surface.d.ts +1 -0
- package/dist/components/data/data-surface.d.ts.map +1 -1
- package/dist/components/data/data-surface.js +1 -0
- package/dist/components/data/index.d.ts +6 -0
- package/dist/components/data/index.d.ts.map +1 -1
- package/dist/components/data/index.js +6 -0
- package/dist/components/data/link-surface.d.ts +79 -0
- package/dist/components/data/link-surface.d.ts.map +1 -0
- package/dist/components/data/link-surface.js +155 -0
- package/dist/components/data/list-sort-state.svelte.d.ts +39 -0
- package/dist/components/data/list-sort-state.svelte.d.ts.map +1 -0
- package/dist/components/data/list-sort-state.svelte.js +47 -0
- package/dist/components/data/list-sort.d.ts +94 -0
- package/dist/components/data/list-sort.d.ts.map +1 -0
- package/dist/components/data/list-sort.js +182 -0
- package/dist/components/data/step-surface.d.ts +73 -0
- package/dist/components/data/step-surface.d.ts.map +1 -0
- package/dist/components/data/step-surface.js +177 -0
- package/dist/components/data/surface-navigation.d.ts +49 -0
- package/dist/components/data/surface-navigation.d.ts.map +1 -0
- package/dist/components/data/surface-navigation.js +100 -0
- package/dist/components/data/types.d.ts +27 -0
- package/dist/components/data/types.d.ts.map +1 -1
- package/dist/components/display/DateDisplay.svelte +76 -14
- package/dist/components/display/DateDisplay.svelte.d.ts +2 -0
- package/dist/components/display/DateDisplay.svelte.d.ts.map +1 -1
- package/dist/components/display/Icon.svelte +3 -16
- package/dist/components/display/Icon.svelte.d.ts +0 -9
- package/dist/components/display/Icon.svelte.d.ts.map +1 -1
- package/dist/components/display/StatusBadge.svelte +29 -2
- package/dist/components/display/StatusBadge.svelte.d.ts +4 -2
- package/dist/components/display/StatusBadge.svelte.d.ts.map +1 -1
- package/dist/components/display/__tests__/DateDisplay.test.js +82 -1
- package/dist/components/display/__tests__/Icon.test.js +132 -2
- package/dist/components/display/__tests__/StatusBadge.test.js +78 -0
- package/dist/components/display/icons.svelte.d.ts +11 -0
- package/dist/components/display/icons.svelte.d.ts.map +1 -0
- package/dist/components/display/icons.svelte.js +60 -0
- package/dist/components/display/index.d.ts +3 -1
- package/dist/components/display/index.d.ts.map +1 -1
- package/dist/components/display/index.js +1 -0
- package/dist/components/display/types.d.ts +2 -0
- package/dist/components/display/types.d.ts.map +1 -1
- package/dist/components/feedback/ConfirmDialog.svelte +59 -48
- package/dist/components/feedback/ConfirmDialog.svelte.d.ts +14 -2
- package/dist/components/feedback/ConfirmDialog.svelte.d.ts.map +1 -1
- package/dist/components/feedback/PhoneSheet.svelte +224 -0
- package/dist/components/feedback/PhoneSheet.svelte.d.ts +35 -0
- package/dist/components/feedback/PhoneSheet.svelte.d.ts.map +1 -0
- package/dist/components/feedback/ToastViewport.svelte +156 -8
- package/dist/components/feedback/ToastViewport.svelte.d.ts +5 -1
- package/dist/components/feedback/ToastViewport.svelte.d.ts.map +1 -1
- package/dist/components/feedback/WorkingStrip.svelte +426 -0
- package/dist/components/feedback/WorkingStrip.svelte.d.ts +37 -0
- package/dist/components/feedback/WorkingStrip.svelte.d.ts.map +1 -0
- package/dist/components/feedback/__tests__/ConfirmDialog.test.js +38 -20
- package/dist/components/feedback/__tests__/PhoneSheet.test.js +101 -0
- package/dist/components/feedback/__tests__/WorkingStrip.test.js +172 -0
- package/dist/components/feedback/__tests__/confirm-message.fixture.svelte +9 -0
- package/dist/components/feedback/__tests__/confirm-message.fixture.svelte.d.ts +19 -0
- package/dist/components/feedback/__tests__/confirm-message.fixture.svelte.d.ts.map +1 -0
- package/dist/components/feedback/__tests__/toast.test.js +142 -1
- package/dist/components/feedback/index.d.ts +5 -1
- package/dist/components/feedback/index.d.ts.map +1 -1
- package/dist/components/feedback/index.js +5 -0
- package/dist/components/feedback/toast.d.ts +13 -1
- package/dist/components/feedback/toast.d.ts.map +1 -1
- package/dist/components/feedback/toast.js +51 -10
- package/dist/components/feedback/working-status.d.ts +34 -0
- package/dist/components/feedback/working-status.d.ts.map +1 -0
- package/dist/components/feedback/working-status.js +5 -0
- package/dist/components/forms/CameraCapture.svelte +619 -0
- package/dist/components/forms/CameraCapture.svelte.d.ts +42 -0
- package/dist/components/forms/CameraCapture.svelte.d.ts.map +1 -0
- package/dist/components/forms/Checkbox.svelte +34 -3
- package/dist/components/forms/Checkbox.svelte.d.ts +2 -0
- package/dist/components/forms/Checkbox.svelte.d.ts.map +1 -1
- package/dist/components/forms/Combobox.svelte +108 -12
- package/dist/components/forms/Combobox.svelte.d.ts +6 -0
- package/dist/components/forms/Combobox.svelte.d.ts.map +1 -1
- package/dist/components/forms/DictationButton.svelte +128 -0
- package/dist/components/forms/DictationButton.svelte.d.ts +19 -0
- package/dist/components/forms/DictationButton.svelte.d.ts.map +1 -0
- package/dist/components/forms/DictationStatus.svelte +164 -0
- package/dist/components/forms/DictationStatus.svelte.d.ts +11 -0
- package/dist/components/forms/DictationStatus.svelte.d.ts.map +1 -0
- package/dist/components/forms/Fieldset.svelte +5 -1
- package/dist/components/forms/Fieldset.svelte.d.ts +2 -0
- package/dist/components/forms/Fieldset.svelte.d.ts.map +1 -1
- package/dist/components/forms/Form.svelte +5 -0
- package/dist/components/forms/Form.svelte.d.ts +1 -0
- package/dist/components/forms/Form.svelte.d.ts.map +1 -1
- package/dist/components/forms/FormActionBar.svelte +84 -0
- package/dist/components/forms/FormActionBar.svelte.d.ts +23 -0
- package/dist/components/forms/FormActionBar.svelte.d.ts.map +1 -0
- package/dist/components/forms/Input.svelte +17 -1
- package/dist/components/forms/Input.svelte.d.ts +2 -0
- package/dist/components/forms/Input.svelte.d.ts.map +1 -1
- package/dist/components/forms/Listbox.svelte +39 -1
- package/dist/components/forms/Listbox.svelte.d.ts.map +1 -1
- package/dist/components/forms/MultiSelect.svelte +41 -1
- package/dist/components/forms/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/components/forms/Radio.svelte +16 -4
- package/dist/components/forms/RadioGroup.svelte +7 -1
- package/dist/components/forms/RadioGroup.svelte.d.ts +2 -0
- package/dist/components/forms/RadioGroup.svelte.d.ts.map +1 -1
- package/dist/components/forms/SearchInput.svelte +207 -0
- package/dist/components/forms/SearchInput.svelte.d.ts +22 -0
- package/dist/components/forms/SearchInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/SegmentedControl.svelte +152 -11
- package/dist/components/forms/SegmentedControl.svelte.d.ts +4 -0
- package/dist/components/forms/SegmentedControl.svelte.d.ts.map +1 -1
- package/dist/components/forms/Select.svelte +17 -1
- package/dist/components/forms/Select.svelte.d.ts +2 -0
- package/dist/components/forms/Select.svelte.d.ts.map +1 -1
- package/dist/components/forms/SignaturePad.svelte +436 -0
- package/dist/components/forms/SignaturePad.svelte.d.ts +32 -0
- package/dist/components/forms/SignaturePad.svelte.d.ts.map +1 -0
- package/dist/components/forms/StagedControlReview.svelte +21 -12
- package/dist/components/forms/StagedControlReview.svelte.d.ts.map +1 -1
- package/dist/components/forms/Switch.svelte +18 -5
- package/dist/components/forms/Switch.svelte.d.ts +2 -0
- package/dist/components/forms/Switch.svelte.d.ts.map +1 -1
- package/dist/components/forms/TagsInput.svelte +8 -1
- package/dist/components/forms/Textarea.svelte +16 -1
- package/dist/components/forms/Textarea.svelte.d.ts +2 -0
- package/dist/components/forms/Textarea.svelte.d.ts.map +1 -1
- package/dist/components/forms/__tests__/CameraCapture.test.js +504 -0
- package/dist/components/forms/__tests__/Combobox.test.js +354 -0
- package/dist/components/forms/__tests__/ControlHitArea.test.js +73 -0
- package/dist/components/forms/__tests__/DictationButton.test.js +176 -0
- package/dist/components/forms/__tests__/Fieldset.test.js +37 -0
- package/dist/components/forms/__tests__/Form.test.js +46 -0
- package/dist/components/forms/__tests__/FormActionBar.test.js +22 -0
- package/dist/components/forms/__tests__/Listbox.test.js +303 -0
- package/dist/components/forms/__tests__/MultiSelect.test.js +281 -0
- package/dist/components/forms/__tests__/SearchInput.test.js +92 -0
- package/dist/components/forms/__tests__/SignaturePad.test.js +338 -0
- package/dist/components/forms/__tests__/StagedControlReview.test.js +37 -3
- package/dist/components/forms/__tests__/camera-capture-session.test.js +207 -0
- package/dist/components/forms/__tests__/capture-form-retry.test.js +166 -0
- package/dist/components/forms/__tests__/capture-form.fixture.svelte +38 -0
- package/dist/components/forms/__tests__/capture-form.fixture.svelte.d.ts +10 -0
- package/dist/components/forms/__tests__/capture-form.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/capture-test-env.d.ts +70 -0
- package/dist/components/forms/__tests__/capture-test-env.d.ts.map +1 -0
- package/dist/components/forms/__tests__/capture-test-env.js +122 -0
- package/dist/components/forms/__tests__/capture-touch.fixture.svelte +15 -0
- package/dist/components/forms/__tests__/capture-touch.fixture.svelte.d.ts +8 -0
- package/dist/components/forms/__tests__/capture-touch.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/combobox-form.fixture.svelte +29 -0
- package/dist/components/forms/__tests__/combobox-form.fixture.svelte.d.ts +14 -0
- package/dist/components/forms/__tests__/combobox-form.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/combobox-labels.fixture.svelte +19 -0
- package/dist/components/forms/__tests__/combobox-labels.fixture.svelte.d.ts +11 -0
- package/dist/components/forms/__tests__/combobox-labels.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/composite-registration.fixture.svelte +29 -0
- package/dist/components/forms/__tests__/composite-registration.fixture.svelte.d.ts +8 -0
- package/dist/components/forms/__tests__/composite-registration.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/control-interaction.test.js +19 -1
- package/dist/components/forms/__tests__/control-proposals.test.js +63 -0
- package/dist/components/forms/__tests__/dictation-recording.test.js +582 -0
- package/dist/components/forms/__tests__/dictation.test.js +486 -0
- package/dist/components/forms/__tests__/form-attachment.fixture.svelte +28 -0
- package/dist/components/forms/__tests__/form-attachment.fixture.svelte.d.ts +11 -0
- package/dist/components/forms/__tests__/form-attachment.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/form-retry-form.fixture.svelte +31 -0
- package/dist/components/forms/__tests__/form-retry-form.fixture.svelte.d.ts +13 -0
- package/dist/components/forms/__tests__/form-retry-form.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/form-retry-form.test.js +107 -0
- package/dist/components/forms/__tests__/hidden-controls-form-retry.test.js +69 -0
- package/dist/components/forms/__tests__/hidden-controls-form.fixture.svelte +29 -0
- package/dist/components/forms/__tests__/hidden-controls-form.fixture.svelte.d.ts +9 -0
- package/dist/components/forms/__tests__/hidden-controls-form.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/listbox-form.fixture.svelte +27 -0
- package/dist/components/forms/__tests__/listbox-form.fixture.svelte.d.ts +13 -0
- package/dist/components/forms/__tests__/listbox-form.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/long-press.test.js +175 -0
- package/dist/components/forms/__tests__/multiselect-form.fixture.svelte +27 -0
- package/dist/components/forms/__tests__/multiselect-form.fixture.svelte.d.ts +13 -0
- package/dist/components/forms/__tests__/multiselect-form.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/native-file-field.test.js +177 -0
- package/dist/components/forms/__tests__/place-picker.fixture.svelte +33 -0
- package/dist/components/forms/__tests__/place-picker.fixture.svelte.d.ts +12 -0
- package/dist/components/forms/__tests__/place-picker.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/segmented-posting.fixture.svelte +28 -0
- package/dist/components/forms/__tests__/segmented-posting.fixture.svelte.d.ts +12 -0
- package/dist/components/forms/__tests__/segmented-posting.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/segmented-posting.test.js +92 -0
- package/dist/components/forms/__tests__/signature-pad-logic.test.js +54 -0
- package/dist/components/forms/__tests__/touch-density.fixture.svelte +34 -0
- package/dist/components/forms/__tests__/touch-density.fixture.svelte.d.ts +8 -0
- package/dist/components/forms/__tests__/touch-density.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/touch-density.test.js +66 -0
- package/dist/components/forms/audio-capture.d.ts +69 -0
- package/dist/components/forms/audio-capture.d.ts.map +1 -0
- package/dist/components/forms/audio-capture.js +193 -0
- package/dist/components/forms/camera-capture-session.d.ts +81 -0
- package/dist/components/forms/camera-capture-session.d.ts.map +1 -0
- package/dist/components/forms/camera-capture-session.js +130 -0
- package/dist/components/forms/control-interaction.d.ts +6 -0
- package/dist/components/forms/control-interaction.d.ts.map +1 -1
- package/dist/components/forms/control-interaction.js +12 -1
- package/dist/components/forms/control-proposals.d.ts +55 -0
- package/dist/components/forms/control-proposals.d.ts.map +1 -0
- package/dist/components/forms/control-proposals.js +188 -0
- package/dist/components/forms/dictation-transcribe.d.ts +36 -0
- package/dist/components/forms/dictation-transcribe.d.ts.map +1 -0
- package/dist/components/forms/dictation-transcribe.js +65 -0
- package/dist/components/forms/dictation.svelte.d.ts +200 -0
- package/dist/components/forms/dictation.svelte.d.ts.map +1 -0
- package/dist/components/forms/dictation.svelte.js +686 -0
- package/dist/components/forms/form-retry/__tests__/boundaries.test.js +23 -0
- package/dist/components/forms/form-retry/__tests__/content-digest.test.js +70 -0
- package/dist/components/forms/form-retry/__tests__/controller.test.js +802 -0
- package/dist/components/forms/form-retry/__tests__/fake-kit.d.ts +82 -0
- package/dist/components/forms/form-retry/__tests__/fake-kit.d.ts.map +1 -0
- package/dist/components/forms/form-retry/__tests__/fake-kit.js +180 -0
- package/dist/components/forms/form-retry/__tests__/form-draft.test.js +169 -0
- package/dist/components/forms/form-retry/__tests__/ssr.test.js +37 -0
- package/dist/components/forms/form-retry/__tests__/storage.d.ts +26 -0
- package/dist/components/forms/form-retry/__tests__/storage.d.ts.map +1 -0
- package/dist/components/forms/form-retry/__tests__/storage.js +63 -0
- package/dist/components/forms/form-retry/__tests__/submission-key.test.js +236 -0
- package/dist/components/forms/form-retry/__tests__/submitted-draft.test.js +334 -0
- package/dist/components/forms/form-retry/content-digest.d.ts +54 -0
- package/dist/components/forms/form-retry/content-digest.d.ts.map +1 -0
- package/dist/components/forms/form-retry/content-digest.js +169 -0
- package/dist/components/forms/form-retry/controller.d.ts +214 -0
- package/dist/components/forms/form-retry/controller.d.ts.map +1 -0
- package/dist/components/forms/form-retry/controller.js +404 -0
- package/dist/components/forms/form-retry/form-draft.d.ts +68 -0
- package/dist/components/forms/form-retry/form-draft.d.ts.map +1 -0
- package/dist/components/forms/form-retry/form-draft.js +161 -0
- package/dist/components/forms/form-retry/index.d.ts +19 -0
- package/dist/components/forms/form-retry/index.d.ts.map +1 -0
- package/dist/components/forms/form-retry/index.js +16 -0
- package/dist/components/forms/form-retry/submission-key.d.ts +244 -0
- package/dist/components/forms/form-retry/submission-key.d.ts.map +1 -0
- package/dist/components/forms/form-retry/submission-key.js +342 -0
- package/dist/components/forms/form-retry/submitted-draft.d.ts +112 -0
- package/dist/components/forms/form-retry/submitted-draft.d.ts.map +1 -0
- package/dist/components/forms/form-retry/submitted-draft.js +270 -0
- package/dist/components/forms/form-retry/types.d.ts +84 -0
- package/dist/components/forms/form-retry/types.d.ts.map +1 -0
- package/dist/components/forms/form-retry/types.js +13 -0
- package/dist/components/forms/index.d.ts +21 -2
- package/dist/components/forms/index.d.ts.map +1 -1
- package/dist/components/forms/index.js +22 -1
- package/dist/components/forms/insert-text.d.ts +12 -0
- package/dist/components/forms/insert-text.d.ts.map +1 -0
- package/dist/components/forms/insert-text.js +38 -0
- package/dist/components/forms/long-press.d.ts +88 -0
- package/dist/components/forms/long-press.d.ts.map +1 -0
- package/dist/components/forms/long-press.js +213 -0
- package/dist/components/forms/native-file-field.d.ts +94 -0
- package/dist/components/forms/native-file-field.d.ts.map +1 -0
- package/dist/components/forms/native-file-field.js +147 -0
- package/dist/components/forms/ready-beep.d.ts +24 -0
- package/dist/components/forms/ready-beep.d.ts.map +1 -0
- package/dist/components/forms/ready-beep.js +82 -0
- package/dist/components/forms/signature-pad-logic.d.ts +50 -0
- package/dist/components/forms/signature-pad-logic.d.ts.map +1 -0
- package/dist/components/forms/signature-pad-logic.js +48 -0
- package/dist/components/forms/types.d.ts +41 -0
- package/dist/components/forms/types.d.ts.map +1 -1
- package/dist/components/layout/PageHeader.svelte +151 -17
- package/dist/components/layout/PageHeader.svelte.d.ts +47 -7
- package/dist/components/layout/PageHeader.svelte.d.ts.map +1 -1
- package/dist/components/layout/__tests__/PageHeader.test.js +87 -1
- package/dist/components/layout/index.d.ts +1 -0
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +1 -0
- package/dist/components/layout/page-header-context.d.ts +25 -0
- package/dist/components/layout/page-header-context.d.ts.map +1 -0
- package/dist/components/layout/page-header-context.js +16 -0
- package/dist/components/nav/FilterChips.svelte +8 -1
- package/dist/components/nav/FilterChips.svelte.d.ts +2 -0
- package/dist/components/nav/FilterChips.svelte.d.ts.map +1 -1
- package/dist/components/nav/Tabs.svelte +241 -0
- package/dist/components/nav/Tabs.svelte.d.ts +15 -0
- package/dist/components/nav/Tabs.svelte.d.ts.map +1 -1
- package/dist/components/nav/__tests__/LinkTabs.test.js +117 -0
- package/dist/components/nav/index.d.ts +1 -0
- package/dist/components/nav/index.d.ts.map +1 -1
- package/dist/components/nav/index.js +1 -0
- package/dist/components/nav/tabs-overflow.d.ts +12 -0
- package/dist/components/nav/tabs-overflow.d.ts.map +1 -0
- package/dist/components/nav/tabs-overflow.js +17 -0
- package/dist/components/nav/types.d.ts +8 -0
- package/dist/components/nav/types.d.ts.map +1 -1
- package/dist/components/ui/Button.svelte +16 -2
- package/dist/components/ui/Button.svelte.d.ts +2 -0
- package/dist/components/ui/Button.svelte.d.ts.map +1 -1
- package/dist/components/ui/Card.svelte +14 -5
- package/dist/components/ui/Dropdown.svelte +55 -1
- package/dist/components/ui/Dropdown.svelte.d.ts +8 -0
- package/dist/components/ui/Dropdown.svelte.d.ts.map +1 -1
- package/dist/components/ui/IconToggle.svelte +139 -0
- package/dist/components/ui/IconToggle.svelte.d.ts +32 -0
- package/dist/components/ui/IconToggle.svelte.d.ts.map +1 -0
- package/dist/components/ui/IconToggleGroup.svelte +56 -0
- package/dist/components/ui/IconToggleGroup.svelte.d.ts +21 -0
- package/dist/components/ui/IconToggleGroup.svelte.d.ts.map +1 -0
- package/dist/components/ui/Pagination.svelte +1 -1
- package/dist/components/ui/Popover.svelte +17 -1
- package/dist/components/ui/Popover.svelte.d.ts +8 -0
- package/dist/components/ui/Popover.svelte.d.ts.map +1 -1
- package/dist/components/ui/__tests__/IconToggle.test.js +59 -0
- package/dist/components/ui/__tests__/IconToggleGroup.test.js +30 -0
- package/dist/components/ui/__tests__/Popover.test.js +44 -0
- package/dist/components/ui/__tests__/dropdown-popover-icon.test.js +125 -0
- package/dist/components/ui/__tests__/phone-touch-targets.test.js +39 -0
- package/dist/components/ui/index.d.ts +2 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +2 -0
- package/dist/i18n/strings.ui.d.ts +65 -0
- package/dist/i18n/strings.ui.d.ts.map +1 -1
- package/dist/i18n/strings.ui.js +72 -0
- package/dist/styles/tokens.css +2 -0
- package/dist/svelte/__tests__/playground.test.js +3 -1
- package/dist/svelte/playground/CalendarPreview.svelte +140 -0
- package/dist/svelte/playground/CalendarPreview.svelte.d.ts +4 -0
- package/dist/svelte/playground/CalendarPreview.svelte.d.ts.map +1 -0
- package/dist/svelte/playground/CapturePreview.svelte +56 -0
- package/dist/svelte/playground/CapturePreview.svelte.d.ts +4 -0
- package/dist/svelte/playground/CapturePreview.svelte.d.ts.map +1 -0
- package/dist/svelte/playground.d.ts.map +1 -1
- package/dist/svelte/playground.js +20 -0
- package/dist/themes/ThemeProvider.svelte +9 -0
- package/dist/themes/ThemeProvider.svelte.d.ts +2 -0
- package/dist/themes/ThemeProvider.svelte.d.ts.map +1 -1
- package/dist/themes/css-generator.d.ts.map +1 -1
- package/dist/themes/css-generator.js +3 -0
- package/dist/themes/styles/glass.css +4 -0
- package/dist/themes/styles/happyvertical.css +4 -0
- package/dist/themes/styles/material.css +4 -0
- package/dist/themes/styles/smrt.css +4 -0
- package/dist/themes/styles/studio.css +4 -0
- package/dist/types-generic.d.ts +2 -0
- package/dist/types-generic.d.ts.map +1 -1
- package/package.json +9 -3
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
type DataTableResolvedColumn,
|
|
36
36
|
resolveDataTableLayout,
|
|
37
37
|
} from './DataTableLayout.js';
|
|
38
|
+
import { responsiveColumns } from './DataTableResponsive.js';
|
|
38
39
|
import {
|
|
39
40
|
maximumDataTableVirtualScrollTop,
|
|
40
41
|
resolveDataTableVirtualWindow,
|
|
@@ -77,6 +78,7 @@ let {
|
|
|
77
78
|
sortable = false,
|
|
78
79
|
sort = $bindable({ columnId: null, direction: null }),
|
|
79
80
|
onSortChange,
|
|
81
|
+
sortClearable = true,
|
|
80
82
|
manualSorting = false,
|
|
81
83
|
filterFn,
|
|
82
84
|
page = $bindable(1),
|
|
@@ -102,9 +104,14 @@ let {
|
|
|
102
104
|
empty,
|
|
103
105
|
rowClass,
|
|
104
106
|
size = 'md',
|
|
107
|
+
density,
|
|
108
|
+
responsiveMode = 'scroll',
|
|
109
|
+
responsiveBreakpoint = 800,
|
|
110
|
+
responsiveColumnMinWidth = 160,
|
|
105
111
|
striped = false,
|
|
106
112
|
hoverable = true,
|
|
107
113
|
stickyHeader = false,
|
|
114
|
+
phoneLayout = 'scroll',
|
|
108
115
|
caption,
|
|
109
116
|
dense = false,
|
|
110
117
|
cell,
|
|
@@ -648,6 +655,10 @@ function handleSort(column: DataTableColumn<T>, event: MouseEvent) {
|
|
|
648
655
|
type: 'toggleSorting',
|
|
649
656
|
columnId: column.id,
|
|
650
657
|
multi: event.shiftKey,
|
|
658
|
+
...(column.sortFirstDirection
|
|
659
|
+
? { firstDirection: column.sortFirstDirection }
|
|
660
|
+
: {}),
|
|
661
|
+
...(sortClearable ? {} : { clearable: false }),
|
|
651
662
|
});
|
|
652
663
|
}
|
|
653
664
|
|
|
@@ -661,10 +672,22 @@ function sortActionLabel(column: DataTableColumn<T>): string {
|
|
|
661
672
|
const columnSort = tableState.sorting.find(
|
|
662
673
|
(sort) => sort.columnId === column.id,
|
|
663
674
|
);
|
|
664
|
-
|
|
675
|
+
const first = column.sortFirstDirection === 'desc' ? 'desc' : 'asc';
|
|
676
|
+
const next = !columnSort
|
|
677
|
+
? first
|
|
678
|
+
: !sortClearable
|
|
679
|
+
? columnSort.direction === 'asc'
|
|
680
|
+
? 'desc'
|
|
681
|
+
: 'asc'
|
|
682
|
+
: columnSort.direction === first
|
|
683
|
+
? first === 'asc'
|
|
684
|
+
? 'desc'
|
|
685
|
+
: 'asc'
|
|
686
|
+
: null;
|
|
687
|
+
if (next === 'asc') {
|
|
665
688
|
return t(M['ui.data_table.sort_ascending'], { column: column.label });
|
|
666
689
|
}
|
|
667
|
-
if (
|
|
690
|
+
if (next === 'desc') {
|
|
668
691
|
return t(M['ui.data_table.sort_descending'], { column: column.label });
|
|
669
692
|
}
|
|
670
693
|
return t(M['ui.data_table.clear_sort'], { column: column.label });
|
|
@@ -757,6 +780,7 @@ function updateOverflowState() {
|
|
|
757
780
|
const container = tableContainer;
|
|
758
781
|
if (!container) return;
|
|
759
782
|
|
|
783
|
+
containerWidth = container.clientWidth;
|
|
760
784
|
const maxScrollLeft = Math.max(
|
|
761
785
|
0,
|
|
762
786
|
container.scrollWidth - container.clientWidth,
|
|
@@ -818,9 +842,30 @@ function setIndeterminate(node: HTMLInputElement, value: boolean) {
|
|
|
818
842
|
};
|
|
819
843
|
}
|
|
820
844
|
|
|
821
|
-
|
|
845
|
+
let containerWidth = $state(0);
|
|
846
|
+
const isNarrow = $derived(
|
|
847
|
+
responsiveMode === 'hide-columns' &&
|
|
848
|
+
containerWidth > 0 &&
|
|
849
|
+
containerWidth <=
|
|
850
|
+
(Number.isFinite(responsiveBreakpoint) && responsiveBreakpoint > 0
|
|
851
|
+
? responsiveBreakpoint
|
|
852
|
+
: 800),
|
|
853
|
+
);
|
|
854
|
+
const declaredLayout = $derived(
|
|
822
855
|
resolveDataTableLayout(columns, constrainedLayoutState, measuredColumnWidths),
|
|
823
856
|
);
|
|
857
|
+
const dataTableLayout = $derived(
|
|
858
|
+
isNarrow
|
|
859
|
+
? resolveDataTableLayout(
|
|
860
|
+
responsiveColumns(
|
|
861
|
+
declaredLayout.columns.map((entry) => entry.column),
|
|
862
|
+
containerWidth - (selectable ? 48 : 0) - (expandedContent ? 48 : 0),
|
|
863
|
+
responsiveColumnMinWidth,
|
|
864
|
+
),
|
|
865
|
+
{ ...constrainedLayoutState, columnWidths: [], columnPinning: [] },
|
|
866
|
+
)
|
|
867
|
+
: declaredLayout,
|
|
868
|
+
);
|
|
824
869
|
const visibleColumns = $derived(dataTableLayout.columns);
|
|
825
870
|
const dataBodyStructuralRows = $derived(
|
|
826
871
|
structuralRows.filter((row) => row.kind !== 'footer'),
|
|
@@ -1173,6 +1218,12 @@ const errorMessage = $derived.by(() => {
|
|
|
1173
1218
|
return message.trim() || t(M['ui.data_table.load_error']);
|
|
1174
1219
|
});
|
|
1175
1220
|
const hasRenderedRows = $derived(displayRows.length > 0);
|
|
1221
|
+
// Phone cards restyle table, rows and cells as blocks and grids, which drops
|
|
1222
|
+
// their table roles in WebKit. Explicit roles keep the table, its column
|
|
1223
|
+
// headers (visually hidden, still in the accessibility tree) and every cell
|
|
1224
|
+
// announced as such.
|
|
1225
|
+
const cardsRole = (role: string) =>
|
|
1226
|
+
phoneLayout === 'cards' ? role : undefined;
|
|
1176
1227
|
const isInitialLoading = $derived(
|
|
1177
1228
|
(loading || refreshing) && !hasRenderedRows && !errorMessage,
|
|
1178
1229
|
);
|
|
@@ -1198,6 +1249,7 @@ function getCellValue(row: T, column: DataTableColumn<T>): unknown {
|
|
|
1198
1249
|
function widthForColumn(
|
|
1199
1250
|
column: DataTableResolvedColumn<T>,
|
|
1200
1251
|
): string | undefined {
|
|
1252
|
+
if (isNarrow) return undefined;
|
|
1201
1253
|
return column.width === undefined ? column.column.width : `${column.width}px`;
|
|
1202
1254
|
}
|
|
1203
1255
|
|
|
@@ -1366,10 +1418,18 @@ $effect(() => {
|
|
|
1366
1418
|
void displayRows.length;
|
|
1367
1419
|
if (!container) return;
|
|
1368
1420
|
|
|
1421
|
+
let resizeFrame: number | undefined;
|
|
1422
|
+
const scheduleOverflowUpdate = () => {
|
|
1423
|
+
if (resizeFrame !== undefined) return;
|
|
1424
|
+
resizeFrame = requestAnimationFrame(() => {
|
|
1425
|
+
resizeFrame = undefined;
|
|
1426
|
+
updateOverflowState();
|
|
1427
|
+
});
|
|
1428
|
+
};
|
|
1369
1429
|
const resizeObserver =
|
|
1370
1430
|
typeof ResizeObserver === 'undefined'
|
|
1371
1431
|
? undefined
|
|
1372
|
-
: new ResizeObserver(
|
|
1432
|
+
: new ResizeObserver(scheduleOverflowUpdate);
|
|
1373
1433
|
resizeObserver?.observe(container);
|
|
1374
1434
|
const table = container.querySelector('table');
|
|
1375
1435
|
if (table) resizeObserver?.observe(table);
|
|
@@ -1378,6 +1438,7 @@ $effect(() => {
|
|
|
1378
1438
|
|
|
1379
1439
|
return () => {
|
|
1380
1440
|
resizeObserver?.disconnect();
|
|
1441
|
+
if (resizeFrame !== undefined) cancelAnimationFrame(resizeFrame);
|
|
1381
1442
|
window.removeEventListener('resize', updateOverflowState);
|
|
1382
1443
|
};
|
|
1383
1444
|
});
|
|
@@ -1387,11 +1448,14 @@ $effect(() => {
|
|
|
1387
1448
|
<!-- svelte-ignore a11y_no_noninteractive_tabindex: the region provides horizontal or virtual keyboard scrolling. -->
|
|
1388
1449
|
<div
|
|
1389
1450
|
bind:this={tableContainer}
|
|
1451
|
+
data-density={density}
|
|
1390
1452
|
class="data-table-container"
|
|
1453
|
+
class:data-table-container--narrow={isNarrow}
|
|
1391
1454
|
class:data-table-container--sticky={stickyHeader || virtualizedBody}
|
|
1392
1455
|
class:data-table-container--overflowing={hasHorizontalOverflow}
|
|
1393
1456
|
class:data-table-container--virtualized={virtualizationWindow.enabled}
|
|
1394
1457
|
class:data-table-container--highlighted={surfaceHighlighted}
|
|
1458
|
+
class:data-table-container--phone-cards={phoneLayout === 'cards'}
|
|
1395
1459
|
style:height={virtualContainerHeight === undefined ? undefined : `${virtualContainerHeight}px`}
|
|
1396
1460
|
tabindex={virtualizationWindow.enabled || hasHorizontalOverflow ? 0 : dataSurface ? -1 : undefined}
|
|
1397
1461
|
role={virtualizationWindow.enabled || hasHorizontalOverflow ? 'region' : undefined}
|
|
@@ -1411,7 +1475,7 @@ $effect(() => {
|
|
|
1411
1475
|
if (!event.defaultPrevented) handleOverflowKeydown(event);
|
|
1412
1476
|
}}
|
|
1413
1477
|
>
|
|
1414
|
-
<table
|
|
1478
|
+
<table role={cardsRole('table')}
|
|
1415
1479
|
class="data-table {sizeClasses[size]}"
|
|
1416
1480
|
class:data-table--striped={striped}
|
|
1417
1481
|
class:data-table--virtualized={virtualizationWindow.enabled}
|
|
@@ -1428,16 +1492,16 @@ $effect(() => {
|
|
|
1428
1492
|
<caption bind:this={tableCaption} class="data-table__caption">{caption}</caption>
|
|
1429
1493
|
{/if}
|
|
1430
1494
|
|
|
1431
|
-
<thead bind:this={tableHead} class="data-table__head">
|
|
1495
|
+
<thead role={cardsRole('rowgroup')} bind:this={tableHead} class="data-table__head">
|
|
1432
1496
|
{#each dataTableLayout.headerRows as headerRow, headerIndex (headerIndex)}
|
|
1433
|
-
<tr class="data-table__row data-table__row--header">
|
|
1497
|
+
<tr role={cardsRole('row')} class="data-table__row data-table__row--header">
|
|
1434
1498
|
{#if headerIndex === 0 && expandedContent}
|
|
1435
|
-
<th class="data-table__cell data-table__cell--expand" scope="col" rowspan={headerRowCount}>
|
|
1499
|
+
<th role={cardsRole('columnheader')} class="data-table__cell data-table__cell--expand" scope="col" rowspan={headerRowCount}>
|
|
1436
1500
|
<span class="sr-only"><Trans key={M['ui.data_table.expand']} /></span>
|
|
1437
1501
|
</th>
|
|
1438
1502
|
{/if}
|
|
1439
1503
|
{#if headerIndex === 0 && selectable}
|
|
1440
|
-
<th class="data-table__cell data-table__cell--checkbox" scope="col" rowspan={headerRowCount}>
|
|
1504
|
+
<th role={cardsRole('columnheader')} class="data-table__cell data-table__cell--checkbox" scope="col" rowspan={headerRowCount}>
|
|
1441
1505
|
<input
|
|
1442
1506
|
type="checkbox"
|
|
1443
1507
|
checked={allSelected}
|
|
@@ -1451,7 +1515,7 @@ $effect(() => {
|
|
|
1451
1515
|
|
|
1452
1516
|
{#each headerRow as headerCell, cellIndex (`${headerIndex}:${cellIndex}`)}
|
|
1453
1517
|
{#if headerCell.kind === 'group'}
|
|
1454
|
-
<th
|
|
1518
|
+
<th role={cardsRole('columnheader')}
|
|
1455
1519
|
class="data-table__cell data-table__cell--header data-table__cell--header-group"
|
|
1456
1520
|
class:data-table__cell--pinned-start={headerCell.pin === 'start'}
|
|
1457
1521
|
class:data-table__cell--pinned-end={headerCell.pin === 'end'}
|
|
@@ -1466,7 +1530,7 @@ $effect(() => {
|
|
|
1466
1530
|
{:else}
|
|
1467
1531
|
{@const resolvedColumn = headerCell.column}
|
|
1468
1532
|
{@const column = resolvedColumn.column}
|
|
1469
|
-
<th
|
|
1533
|
+
<th role={cardsRole('columnheader')}
|
|
1470
1534
|
class="data-table__cell data-table__cell--header"
|
|
1471
1535
|
class:data-table__cell--sortable={usesAutomaticSortButton(column)}
|
|
1472
1536
|
class:data-table__cell--sorted={currentSort.columnId === column.id}
|
|
@@ -1478,8 +1542,8 @@ $effect(() => {
|
|
|
1478
1542
|
data-keep-visible={column.responsive?.keepVisible ? 'true' : undefined}
|
|
1479
1543
|
use:observeColumnWidth={column.id}
|
|
1480
1544
|
style:width={widthForColumn(resolvedColumn)}
|
|
1481
|
-
style:min-width={column.minWidth}
|
|
1482
|
-
style:max-width={column.maxWidth}
|
|
1545
|
+
style:min-width={isNarrow ? undefined : column.minWidth}
|
|
1546
|
+
style:max-width={isNarrow ? undefined : column.maxWidth}
|
|
1483
1547
|
style:left={resolvedColumn.pin === 'start' ? resolvedColumn.stickyOffset : undefined}
|
|
1484
1548
|
style:right={resolvedColumn.pin === 'end' ? resolvedColumn.stickyOffset : undefined}
|
|
1485
1549
|
style:text-align={column.align}
|
|
@@ -1535,7 +1599,7 @@ $effect(() => {
|
|
|
1535
1599
|
{:else}
|
|
1536
1600
|
{column.label}
|
|
1537
1601
|
{/if}
|
|
1538
|
-
{#if column.resizable}
|
|
1602
|
+
{#if column.resizable && !isNarrow}
|
|
1539
1603
|
<!-- svelte-ignore a11y_no_noninteractive_element_interactions: a focusable ARIA separator is the resize control. -->
|
|
1540
1604
|
<span
|
|
1541
1605
|
class="data-table__resize-handle"
|
|
@@ -1557,10 +1621,10 @@ $effect(() => {
|
|
|
1557
1621
|
{/each}
|
|
1558
1622
|
</thead>
|
|
1559
1623
|
|
|
1560
|
-
<tbody bind:this={tableBody} class="data-table__body">
|
|
1624
|
+
<tbody role={cardsRole('rowgroup')} bind:this={tableBody} class="data-table__body">
|
|
1561
1625
|
{#if errorMessage && !hasRenderedRows}
|
|
1562
|
-
<tr class="data-table__row data-table__row--error">
|
|
1563
|
-
<td
|
|
1626
|
+
<tr role={cardsRole('row')} class="data-table__row data-table__row--error">
|
|
1627
|
+
<td role={cardsRole('cell')}
|
|
1564
1628
|
class="data-table__cell data-table__cell--error"
|
|
1565
1629
|
colspan={columnCount}
|
|
1566
1630
|
>
|
|
@@ -1575,8 +1639,8 @@ $effect(() => {
|
|
|
1575
1639
|
</td>
|
|
1576
1640
|
</tr>
|
|
1577
1641
|
{:else if isInitialLoading}
|
|
1578
|
-
<tr class="data-table__row data-table__row--loading">
|
|
1579
|
-
<td
|
|
1642
|
+
<tr role={cardsRole('row')} class="data-table__row data-table__row--loading">
|
|
1643
|
+
<td role={cardsRole('cell')}
|
|
1580
1644
|
class="data-table__cell data-table__cell--loading"
|
|
1581
1645
|
colspan={columnCount}
|
|
1582
1646
|
>
|
|
@@ -1587,8 +1651,8 @@ $effect(() => {
|
|
|
1587
1651
|
</td>
|
|
1588
1652
|
</tr>
|
|
1589
1653
|
{:else if displayRows.length === 0}
|
|
1590
|
-
<tr class="data-table__row data-table__row--empty">
|
|
1591
|
-
<td
|
|
1654
|
+
<tr role={cardsRole('row')} class="data-table__row data-table__row--empty">
|
|
1655
|
+
<td role={cardsRole('cell')}
|
|
1592
1656
|
class="data-table__cell data-table__cell--empty"
|
|
1593
1657
|
colspan={columnCount}
|
|
1594
1658
|
>
|
|
@@ -1603,8 +1667,8 @@ $effect(() => {
|
|
|
1603
1667
|
</tr>
|
|
1604
1668
|
{:else}
|
|
1605
1669
|
{#if virtualizationWindow.topSpacerHeight > 0}
|
|
1606
|
-
<tr class="data-table__virtual-spacer" aria-hidden="true">
|
|
1607
|
-
<td colspan={columnCount} style:height={`${virtualizationWindow.topSpacerHeight}px`}></td>
|
|
1670
|
+
<tr role={cardsRole('row')} class="data-table__virtual-spacer" aria-hidden="true">
|
|
1671
|
+
<td role={cardsRole('cell')} colspan={columnCount} style:height={`${virtualizationWindow.topSpacerHeight}px`}></td>
|
|
1608
1672
|
</tr>
|
|
1609
1673
|
{/if}
|
|
1610
1674
|
{#each renderedRows as entry, index (entry.rowId)}
|
|
@@ -1614,7 +1678,7 @@ $effect(() => {
|
|
|
1614
1678
|
{@const isSelected = tableState.selection.scope === 'allMatching' || selectedIds.has(key)}
|
|
1615
1679
|
{@const isExpanded = expandedIds.has(key)}
|
|
1616
1680
|
{@const rowCanExpand = canExpand?.(row, displayIndex) ?? true}
|
|
1617
|
-
<tr
|
|
1681
|
+
<tr role={cardsRole('row')}
|
|
1618
1682
|
class="data-table__row {rowClass?.(row, displayIndex) ?? ''}"
|
|
1619
1683
|
class:data-table__row--selected={isSelected}
|
|
1620
1684
|
class:data-table__row--striped={
|
|
@@ -1631,12 +1695,12 @@ $effect(() => {
|
|
|
1631
1695
|
onkeydown={(event) => handleRowKeydown(event, row, displayIndex)}
|
|
1632
1696
|
>
|
|
1633
1697
|
{#if expandedContent}
|
|
1634
|
-
<td class="data-table__cell data-table__cell--expand">
|
|
1698
|
+
<td role={cardsRole('cell')} class="data-table__cell data-table__cell--expand">
|
|
1635
1699
|
{#if rowCanExpand}<button type="button" class="data-table__expand-button" aria-label={isExpanded ? t(M['ui.data_table.collapse_row'], { row: getRowLabel(row, displayIndex) }) : t(M['ui.data_table.expand_row'], { row: getRowLabel(row, displayIndex) })} aria-expanded={isExpanded} aria-controls={expansionContentId(key)} onclick={(event) => handleExpanded(key, event)}>{isExpanded ? '−' : '+'}</button>{/if}
|
|
1636
1700
|
</td>
|
|
1637
1701
|
{/if}
|
|
1638
1702
|
{#if selectable}
|
|
1639
|
-
<td class="data-table__cell data-table__cell--checkbox">
|
|
1703
|
+
<td role={cardsRole('cell')} class="data-table__cell data-table__cell--checkbox">
|
|
1640
1704
|
<input
|
|
1641
1705
|
type="checkbox"
|
|
1642
1706
|
checked={isSelected}
|
|
@@ -1651,8 +1715,9 @@ $effect(() => {
|
|
|
1651
1715
|
{#each visibleColumns as resolvedColumn (resolvedColumn.column.id)}
|
|
1652
1716
|
{@const column = resolvedColumn.column}
|
|
1653
1717
|
{@const value = getCellValue(row, column)}
|
|
1654
|
-
<td
|
|
1718
|
+
<td role={cardsRole('cell')}
|
|
1655
1719
|
class="data-table__cell {column.className ?? ''}"
|
|
1720
|
+
data-label={phoneLayout === 'cards' ? column.label : undefined}
|
|
1656
1721
|
class:data-table__cell--pinned-start={resolvedColumn.pin === 'start'}
|
|
1657
1722
|
class:data-table__cell--pinned-end={resolvedColumn.pin === 'end'}
|
|
1658
1723
|
data-column-id={column.id}
|
|
@@ -1660,8 +1725,8 @@ $effect(() => {
|
|
|
1660
1725
|
data-responsive-priority={column.responsive?.priority}
|
|
1661
1726
|
data-keep-visible={column.responsive?.keepVisible ? 'true' : undefined}
|
|
1662
1727
|
style:width={widthForColumn(resolvedColumn)}
|
|
1663
|
-
style:min-width={column.minWidth}
|
|
1664
|
-
style:max-width={column.maxWidth}
|
|
1728
|
+
style:min-width={isNarrow ? undefined : column.minWidth}
|
|
1729
|
+
style:max-width={isNarrow ? undefined : column.maxWidth}
|
|
1665
1730
|
style:left={resolvedColumn.pin === 'start' ? resolvedColumn.stickyOffset : undefined}
|
|
1666
1731
|
style:right={resolvedColumn.pin === 'end' ? resolvedColumn.stickyOffset : undefined}
|
|
1667
1732
|
style:text-align={column.align}
|
|
@@ -1677,26 +1742,26 @@ $effect(() => {
|
|
|
1677
1742
|
{/each}
|
|
1678
1743
|
</tr>
|
|
1679
1744
|
{#if expandedContent && isExpanded}
|
|
1680
|
-
<tr id={expansionContentId(key)} class="data-table__row data-table__row--expanded">
|
|
1681
|
-
<td class="data-table__cell data-table__cell--expanded" colspan={columnCount}>{@render expandedContent({ row, index: displayIndex })}</td>
|
|
1745
|
+
<tr role={cardsRole('row')} id={expansionContentId(key)} class="data-table__row data-table__row--expanded">
|
|
1746
|
+
<td role={cardsRole('cell')} class="data-table__cell data-table__cell--expanded" colspan={columnCount}>{@render expandedContent({ row, index: displayIndex })}</td>
|
|
1682
1747
|
</tr>
|
|
1683
1748
|
{/if}
|
|
1684
1749
|
{/each}
|
|
1685
1750
|
{#if virtualizationWindow.bottomSpacerHeight > 0}
|
|
1686
|
-
<tr class="data-table__virtual-spacer" aria-hidden="true">
|
|
1687
|
-
<td colspan={columnCount} style:height={`${virtualizationWindow.bottomSpacerHeight}px`}></td>
|
|
1751
|
+
<tr role={cardsRole('row')} class="data-table__virtual-spacer" aria-hidden="true">
|
|
1752
|
+
<td role={cardsRole('cell')} colspan={columnCount} style:height={`${virtualizationWindow.bottomSpacerHeight}px`}></td>
|
|
1688
1753
|
</tr>
|
|
1689
1754
|
{/if}
|
|
1690
1755
|
{/if}
|
|
1691
1756
|
</tbody>
|
|
1692
1757
|
{#if dataBodyStructuralRows.length > 0}
|
|
1693
|
-
<tbody
|
|
1758
|
+
<tbody role={cardsRole('rowgroup')}
|
|
1694
1759
|
bind:this={tableStructuralBody}
|
|
1695
1760
|
class="data-table__body data-table__body--structural"
|
|
1696
1761
|
>
|
|
1697
1762
|
{#each dataBodyStructuralRows as structuralRow, structuralIndex (structuralRow.id)}
|
|
1698
1763
|
{@const labelColumnId = structuralLabelColumnId(structuralRow)}
|
|
1699
|
-
<tr
|
|
1764
|
+
<tr role={cardsRole('row')}
|
|
1700
1765
|
class="data-table__row data-table__row--structural"
|
|
1701
1766
|
data-row-kind={structuralRow.kind}
|
|
1702
1767
|
aria-label={structuralRowLabel(structuralRow)}
|
|
@@ -1704,21 +1769,21 @@ $effect(() => {
|
|
|
1704
1769
|
? virtualRowOffset + displayRows.length + headerRowCount + structuralIndex + 1
|
|
1705
1770
|
: undefined}
|
|
1706
1771
|
>
|
|
1707
|
-
{#if expandedContent}<td class="data-table__cell data-table__cell--expand"></td>{/if}
|
|
1708
|
-
{#if selectable}<td class="data-table__cell data-table__cell--checkbox"></td>{/if}
|
|
1772
|
+
{#if expandedContent}<td role={cardsRole('cell')} class="data-table__cell data-table__cell--expand"></td>{/if}
|
|
1773
|
+
{#if selectable}<td role={cardsRole('cell')} class="data-table__cell data-table__cell--checkbox"></td>{/if}
|
|
1709
1774
|
{#each visibleColumns as resolvedColumn (resolvedColumn.column.id)}
|
|
1710
1775
|
{@const column = resolvedColumn.column}
|
|
1711
1776
|
{@const value = structuralCellValue(structuralRow, column)}
|
|
1712
1777
|
{#if column.id === labelColumnId}
|
|
1713
|
-
<th
|
|
1778
|
+
<th role={cardsRole('rowheader')}
|
|
1714
1779
|
class="data-table__cell data-table__cell--structural-label {column.className ?? ''}"
|
|
1715
1780
|
class:data-table__cell--pinned-start={resolvedColumn.pin === 'start'}
|
|
1716
1781
|
class:data-table__cell--pinned-end={resolvedColumn.pin === 'end'}
|
|
1717
1782
|
scope="row"
|
|
1718
1783
|
data-column-id={column.id}
|
|
1719
1784
|
style:width={widthForColumn(resolvedColumn)}
|
|
1720
|
-
style:min-width={column.minWidth}
|
|
1721
|
-
style:max-width={column.maxWidth}
|
|
1785
|
+
style:min-width={isNarrow ? undefined : column.minWidth}
|
|
1786
|
+
style:max-width={isNarrow ? undefined : column.maxWidth}
|
|
1722
1787
|
style:left={resolvedColumn.pin === 'start' ? resolvedColumn.stickyOffset : undefined}
|
|
1723
1788
|
style:right={resolvedColumn.pin === 'end' ? resolvedColumn.stickyOffset : undefined}
|
|
1724
1789
|
style:text-align={column.align}
|
|
@@ -1731,14 +1796,15 @@ $effect(() => {
|
|
|
1731
1796
|
{/if}
|
|
1732
1797
|
</th>
|
|
1733
1798
|
{:else}
|
|
1734
|
-
<td
|
|
1799
|
+
<td role={cardsRole('cell')}
|
|
1735
1800
|
class="data-table__cell {column.className ?? ''}"
|
|
1801
|
+
data-label={phoneLayout === 'cards' ? column.label : undefined}
|
|
1736
1802
|
class:data-table__cell--pinned-start={resolvedColumn.pin === 'start'}
|
|
1737
1803
|
class:data-table__cell--pinned-end={resolvedColumn.pin === 'end'}
|
|
1738
1804
|
data-column-id={column.id}
|
|
1739
1805
|
style:width={widthForColumn(resolvedColumn)}
|
|
1740
|
-
style:min-width={column.minWidth}
|
|
1741
|
-
style:max-width={column.maxWidth}
|
|
1806
|
+
style:min-width={isNarrow ? undefined : column.minWidth}
|
|
1807
|
+
style:max-width={isNarrow ? undefined : column.maxWidth}
|
|
1742
1808
|
style:left={resolvedColumn.pin === 'start' ? resolvedColumn.stickyOffset : undefined}
|
|
1743
1809
|
style:right={resolvedColumn.pin === 'end' ? resolvedColumn.stickyOffset : undefined}
|
|
1744
1810
|
style:text-align={column.align}
|
|
@@ -1756,10 +1822,10 @@ $effect(() => {
|
|
|
1756
1822
|
</tbody>
|
|
1757
1823
|
{/if}
|
|
1758
1824
|
{#if footer || footerStructuralRows.length > 0}
|
|
1759
|
-
<tfoot bind:this={tableFooter}>
|
|
1825
|
+
<tfoot role={cardsRole('rowgroup')} bind:this={tableFooter}>
|
|
1760
1826
|
{#each footerStructuralRows as structuralRow, structuralIndex (structuralRow.id)}
|
|
1761
1827
|
{@const labelColumnId = structuralLabelColumnId(structuralRow)}
|
|
1762
|
-
<tr
|
|
1828
|
+
<tr role={cardsRole('row')}
|
|
1763
1829
|
class="data-table__row data-table__row--structural data-table__row--footer"
|
|
1764
1830
|
data-row-kind={structuralRow.kind}
|
|
1765
1831
|
aria-label={structuralRowLabel(structuralRow)}
|
|
@@ -1767,21 +1833,21 @@ $effect(() => {
|
|
|
1767
1833
|
? virtualRowCount + headerRowCount + dataBodyStructuralRows.length + structuralIndex + 1
|
|
1768
1834
|
: undefined}
|
|
1769
1835
|
>
|
|
1770
|
-
{#if expandedContent}<td class="data-table__cell data-table__cell--expand"></td>{/if}
|
|
1771
|
-
{#if selectable}<td class="data-table__cell data-table__cell--checkbox"></td>{/if}
|
|
1836
|
+
{#if expandedContent}<td role={cardsRole('cell')} class="data-table__cell data-table__cell--expand"></td>{/if}
|
|
1837
|
+
{#if selectable}<td role={cardsRole('cell')} class="data-table__cell data-table__cell--checkbox"></td>{/if}
|
|
1772
1838
|
{#each visibleColumns as resolvedColumn (resolvedColumn.column.id)}
|
|
1773
1839
|
{@const column = resolvedColumn.column}
|
|
1774
1840
|
{@const value = structuralCellValue(structuralRow, column)}
|
|
1775
1841
|
{#if column.id === labelColumnId}
|
|
1776
|
-
<th
|
|
1842
|
+
<th role={cardsRole('rowheader')}
|
|
1777
1843
|
class="data-table__cell data-table__cell--structural-label {column.className ?? ''}"
|
|
1778
1844
|
class:data-table__cell--pinned-start={resolvedColumn.pin === 'start'}
|
|
1779
1845
|
class:data-table__cell--pinned-end={resolvedColumn.pin === 'end'}
|
|
1780
1846
|
scope="row"
|
|
1781
1847
|
data-column-id={column.id}
|
|
1782
1848
|
style:width={widthForColumn(resolvedColumn)}
|
|
1783
|
-
style:min-width={column.minWidth}
|
|
1784
|
-
style:max-width={column.maxWidth}
|
|
1849
|
+
style:min-width={isNarrow ? undefined : column.minWidth}
|
|
1850
|
+
style:max-width={isNarrow ? undefined : column.maxWidth}
|
|
1785
1851
|
style:left={resolvedColumn.pin === 'start' ? resolvedColumn.stickyOffset : undefined}
|
|
1786
1852
|
style:right={resolvedColumn.pin === 'end' ? resolvedColumn.stickyOffset : undefined}
|
|
1787
1853
|
style:text-align={column.align}
|
|
@@ -1794,14 +1860,15 @@ $effect(() => {
|
|
|
1794
1860
|
{/if}
|
|
1795
1861
|
</th>
|
|
1796
1862
|
{:else}
|
|
1797
|
-
<td
|
|
1863
|
+
<td role={cardsRole('cell')}
|
|
1798
1864
|
class="data-table__cell {column.className ?? ''}"
|
|
1865
|
+
data-label={phoneLayout === 'cards' ? column.label : undefined}
|
|
1799
1866
|
class:data-table__cell--pinned-start={resolvedColumn.pin === 'start'}
|
|
1800
1867
|
class:data-table__cell--pinned-end={resolvedColumn.pin === 'end'}
|
|
1801
1868
|
data-column-id={column.id}
|
|
1802
1869
|
style:width={widthForColumn(resolvedColumn)}
|
|
1803
|
-
style:min-width={column.minWidth}
|
|
1804
|
-
style:max-width={column.maxWidth}
|
|
1870
|
+
style:min-width={isNarrow ? undefined : column.minWidth}
|
|
1871
|
+
style:max-width={isNarrow ? undefined : column.maxWidth}
|
|
1805
1872
|
style:left={resolvedColumn.pin === 'start' ? resolvedColumn.stickyOffset : undefined}
|
|
1806
1873
|
style:right={resolvedColumn.pin === 'end' ? resolvedColumn.stickyOffset : undefined}
|
|
1807
1874
|
style:text-align={column.align}
|
|
@@ -1817,10 +1884,10 @@ $effect(() => {
|
|
|
1817
1884
|
</tr>
|
|
1818
1885
|
{/each}
|
|
1819
1886
|
{#if footer}
|
|
1820
|
-
<tr aria-rowindex={virtualizationWindow.enabled
|
|
1887
|
+
<tr role={cardsRole('row')} aria-rowindex={virtualizationWindow.enabled
|
|
1821
1888
|
? virtualRowCount + headerRowCount + structuralRowCount
|
|
1822
1889
|
: undefined}>
|
|
1823
|
-
<td class="data-table__cell data-table__footer" colspan={columnCount}>
|
|
1890
|
+
<td role={cardsRole('cell')} class="data-table__cell data-table__footer" colspan={columnCount}>
|
|
1824
1891
|
{@render footer({ rows: displayRows.map(({ row }) => row) })}
|
|
1825
1892
|
</td>
|
|
1826
1893
|
</tr>
|
|
@@ -2209,9 +2276,65 @@ $effect(() => {
|
|
|
2209
2276
|
opacity: 0.7;
|
|
2210
2277
|
}
|
|
2211
2278
|
|
|
2279
|
+
/* Phones with phoneLayout="cards": one block of stacked cells per row. Each cell shows its
|
|
2280
|
+
column's name (data-label) above its value; the header row stays in the accessibility tree,
|
|
2281
|
+
visually hidden, and the explicit roles keep the table structure announced. */
|
|
2282
|
+
@media (max-width: 48rem) {
|
|
2283
|
+
/* A virtualized body keeps its own scroller. */
|
|
2284
|
+
.data-table-container--phone-cards:not(.data-table-container--virtualized) {
|
|
2285
|
+
overflow: visible;
|
|
2286
|
+
}
|
|
2287
|
+
.data-table-container--phone-cards .data-table,
|
|
2288
|
+
.data-table-container--phone-cards .data-table__body {
|
|
2289
|
+
display: block;
|
|
2290
|
+
width: 100%;
|
|
2291
|
+
}
|
|
2292
|
+
.data-table-container--phone-cards .data-table__head {
|
|
2293
|
+
position: absolute;
|
|
2294
|
+
width: 1px;
|
|
2295
|
+
height: 1px;
|
|
2296
|
+
overflow: hidden;
|
|
2297
|
+
clip: rect(0 0 0 0);
|
|
2298
|
+
clip-path: inset(50%);
|
|
2299
|
+
white-space: nowrap;
|
|
2300
|
+
}
|
|
2301
|
+
.data-table-container--phone-cards .data-table__overflow-cue {
|
|
2302
|
+
display: none;
|
|
2303
|
+
}
|
|
2304
|
+
.data-table-container--phone-cards .data-table__cell[data-label]:not([data-label=''])::before {
|
|
2305
|
+
content: attr(data-label);
|
|
2306
|
+
/* The header already names the cell for assistive technology. */
|
|
2307
|
+
content: attr(data-label) / '';
|
|
2308
|
+
display: block;
|
|
2309
|
+
font-size: var(--smrt-typography-label-small-size, 0.75rem);
|
|
2310
|
+
font-weight: 600;
|
|
2311
|
+
color: var(--smrt-color-on-surface-variant, #4b5563);
|
|
2312
|
+
}
|
|
2313
|
+
.data-table-container--phone-cards .data-table__row {
|
|
2314
|
+
display: grid;
|
|
2315
|
+
gap: var(--smrt-spacing-1, 0.35rem);
|
|
2316
|
+
padding: var(--smrt-spacing-3, 0.85rem) var(--smrt-spacing-4, 1rem);
|
|
2317
|
+
border-bottom: 1px solid var(--smrt-color-outline-variant, #e5e7eb);
|
|
2318
|
+
}
|
|
2319
|
+
.data-table-container--phone-cards .data-table__cell {
|
|
2320
|
+
display: block;
|
|
2321
|
+
padding: 0;
|
|
2322
|
+
border: 0;
|
|
2323
|
+
}
|
|
2324
|
+
.data-table-container--phone-cards .data-table__cell:empty {
|
|
2325
|
+
display: none;
|
|
2326
|
+
}
|
|
2327
|
+
}
|
|
2328
|
+
|
|
2212
2329
|
@media (prefers-reduced-motion: reduce) {
|
|
2213
2330
|
.data-table__spinner {
|
|
2214
2331
|
animation: none;
|
|
2215
2332
|
}
|
|
2216
2333
|
}
|
|
2334
|
+
.data-table-container[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min, 48px); }
|
|
2335
|
+
.data-table-container[data-density='comfortable'] { --smrt-control-target-min: 0px; }
|
|
2336
|
+
.data-table__sort-button { min-height: var(--smrt-control-target-min, 0px); min-width: var(--smrt-control-target-min, 0px); }
|
|
2337
|
+
.data-table-container--narrow .data-table { table-layout: fixed; }
|
|
2338
|
+
.data-table-container--narrow .data-table__cell { white-space: normal; overflow-wrap: anywhere; }
|
|
2339
|
+
.data-table-container--narrow .data-table__sort-button { max-width: 100%; text-align: left; white-space: normal; overflow-wrap: anywhere; }
|
|
2217
2340
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTable.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,OAAO,EAAa,KAAK,OAAO,EAAiB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"DataTable.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTable.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,OAAO,EAAa,KAAK,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAoChE,OAAO,KAAK,EACV,eAAe,EAEf,cAAc,EAGf,MAAM,YAAY,CAAC;AAIpB,UAAU,aAAa,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClD,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CACZ;QAAC;YAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,OAAO,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE;KAAC,CACxE,CAAC;CACH;AAYC,iBAAS,QAAQ,CAAC,CAAC;WA6oDQ,aAAa,CAAC,CAAC,CAAC;;;;;EAAgH;AAC7J,cAAM,iBAAiB,CAAC,CAAC;IACrB,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;CACV;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5X,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3H,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,SAAS,EAAE,qBAAmC,CAAC;AACnC,KAAK,SAAS,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,eAAe,SAAS,CAAC"}
|
|
@@ -114,6 +114,10 @@ export type DataTableCommand = {
|
|
|
114
114
|
type: 'toggleSorting';
|
|
115
115
|
columnId: string;
|
|
116
116
|
multi?: boolean;
|
|
117
|
+
/** Direction when the column is not sorted yet (default `asc`). */
|
|
118
|
+
firstDirection?: DataTableSortRule['direction'];
|
|
119
|
+
/** `false` toggles asc ⇄ desc instead of clearing on the third activation. */
|
|
120
|
+
clearable?: boolean;
|
|
117
121
|
} | {
|
|
118
122
|
type: 'setPage';
|
|
119
123
|
page: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableController.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTableController.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DataTableController.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTableController.ts"],"names":[],"mappings":"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"}
|
|
@@ -403,11 +403,18 @@ export function transitionDataTableState(state, command) {
|
|
|
403
403
|
const columnId = assertColumnId(command.columnId, 'sort column id');
|
|
404
404
|
const index = current.sorting.findIndex((rule) => rule.columnId === columnId);
|
|
405
405
|
const previous = index >= 0 ? current.sorting[index] : undefined;
|
|
406
|
+
const firstDirection = command.firstDirection === 'desc' ? 'desc' : 'asc';
|
|
407
|
+
const lastDirection = firstDirection === 'asc' ? 'desc' : 'asc';
|
|
406
408
|
const toggled = !previous
|
|
407
|
-
? { columnId, direction:
|
|
408
|
-
:
|
|
409
|
-
? {
|
|
410
|
-
|
|
409
|
+
? { columnId, direction: firstDirection }
|
|
410
|
+
: command.clearable === false
|
|
411
|
+
? {
|
|
412
|
+
columnId,
|
|
413
|
+
direction: previous.direction === 'asc' ? 'desc' : 'asc',
|
|
414
|
+
}
|
|
415
|
+
: previous.direction === firstDirection
|
|
416
|
+
? { columnId, direction: lastDirection }
|
|
417
|
+
: null;
|
|
411
418
|
const sorting = command.multi
|
|
412
419
|
? previous
|
|
413
420
|
? toggled
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DataTableColumn } from './types.js';
|
|
2
|
+
/** Choose narrow-mode columns without changing their declared display order. */
|
|
3
|
+
export declare function responsiveColumns<T>(columns: readonly DataTableColumn<T>[], width: number, minimumWidth: number): DataTableColumn<T>[];
|
|
4
|
+
//# sourceMappingURL=DataTableResponsive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTableResponsive.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTableResponsive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,OAAO,EAAE,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EACtC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,eAAe,CAAC,CAAC,CAAC,EAAE,CAuBtB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Choose narrow-mode columns without changing their declared display order. */
|
|
2
|
+
export function responsiveColumns(columns, width, minimumWidth) {
|
|
3
|
+
const target = Number.isFinite(minimumWidth) && minimumWidth > 0 ? minimumWidth : 160;
|
|
4
|
+
const budget = Math.max(1, Math.floor(Math.max(0, width) / target));
|
|
5
|
+
const retained = new Set(columns
|
|
6
|
+
.filter((column) => column.responsive?.keepVisible)
|
|
7
|
+
.map((column) => column.id));
|
|
8
|
+
const ranked = columns
|
|
9
|
+
.map((column, index) => ({ column, index }))
|
|
10
|
+
.sort((a, b) => {
|
|
11
|
+
const priority = (column) => Number.isFinite(column.responsive?.priority)
|
|
12
|
+
? (column.responsive?.priority ?? 0)
|
|
13
|
+
: 0;
|
|
14
|
+
return priority(b.column) - priority(a.column) || a.index - b.index;
|
|
15
|
+
});
|
|
16
|
+
for (const { column } of ranked) {
|
|
17
|
+
if (retained.size >= budget)
|
|
18
|
+
break;
|
|
19
|
+
retained.add(column.id);
|
|
20
|
+
}
|
|
21
|
+
return columns.filter((column) => retained.has(column.id));
|
|
22
|
+
}
|