@eifi1/ui-kit 0.53.0 → 0.55.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/README.md +96 -82
- package/dist/account/delete-account-setting.d.ts +3 -2
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/admin/plan-change.js +2 -2
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/user-roster.d.ts +6 -0
- package/dist/admin/user-roster.js +4 -0
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/auth-errors.d.ts +36 -0
- package/dist/auth/auth-errors.js +20 -0
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/billing/billing-labels.d.ts +26 -0
- package/dist/billing/billing-labels.js +9 -0
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/subscription-standing.d.ts +61 -0
- package/dist/billing/subscription-standing.js +51 -0
- package/dist/billing/subscription-standing.js.map +1 -0
- package/dist/billing/usage-meter.d.ts +52 -0
- package/dist/billing/usage-meter.js +52 -0
- package/dist/billing/usage-meter.js.map +1 -0
- package/dist/chart.d.ts +1 -0
- package/dist/chart.js +4 -0
- package/dist/chart.js.map +1 -1
- package/dist/components/alert-banner.js +2 -3
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +2 -1
- package/dist/components/amount-input.js +3 -15
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.js +2 -2
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.js +2 -1
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button.d.ts +35 -1
- package/dist/components/button.js +5 -9
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar-heatmap.js +6 -4
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/camera-button.d.ts +89 -0
- package/dist/components/camera-button.js +122 -0
- package/dist/components/camera-button.js.map +1 -0
- package/dist/components/camera-capture.d.ts +66 -0
- package/dist/components/camera-capture.js +190 -0
- package/dist/components/camera-capture.js.map +1 -0
- package/dist/components/camera-labels.d.ts +20 -0
- package/dist/components/camera-labels.js +15 -0
- package/dist/components/camera-labels.js.map +1 -0
- package/dist/components/chart-edge.d.ts +9 -0
- package/dist/components/chart-edge.js +14 -3
- package/dist/components/chart-edge.js.map +1 -1
- package/dist/components/chart-zoom-core.js +34 -29
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/checkbox-group.js +1 -1
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/combobox-core.js +3 -2
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +2 -2
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/consent-again-notice-labels.d.ts +25 -0
- package/dist/components/consent-again-notice-labels.js +15 -0
- package/dist/components/consent-again-notice-labels.js.map +1 -0
- package/dist/components/consent-again-notice.d.ts +85 -0
- package/dist/components/consent-again-notice.js +94 -0
- package/dist/components/consent-again-notice.js.map +1 -0
- package/dist/components/country-select.js +2 -7
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.d.ts +2 -1
- package/dist/components/currency-option-list.js +10 -3
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.d.ts +3 -1
- package/dist/components/currency-select.js +2 -2
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +22 -1
- package/dist/components/danger-confirm.js +52 -30
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-column-settings.js +2 -2
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filter-popover.d.ts +2 -1
- package/dist/components/data-table-filter-popover.js +3 -2
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +33 -3
- package/dist/components/data-table-filters.js +6 -4
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-virtual.js +13 -3
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/date-field.js +2 -2
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.js +2 -2
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js +2 -6
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/dialog-frame.d.ts +5 -1
- package/dist/components/dialog-frame.js +6 -2
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/dropdown.js +7 -3
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/entity-combobox.js +2 -2
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/field-parts.d.ts +108 -6
- package/dist/components/field-parts.js +59 -6
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-suggestion-labels.d.ts +2 -0
- package/dist/components/field-suggestion-labels.js +10 -0
- package/dist/components/field-suggestion-labels.js.map +1 -0
- package/dist/components/field.js +1 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-button.d.ts +1 -1
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/floating-panel.d.ts +7 -6
- package/dist/components/floating-panel.js +3 -17
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/form-actions.d.ts +3 -2
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/hover-menu.js +3 -2
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-button.d.ts +23 -5
- package/dist/components/icon-button.js +6 -8
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/inline-confirm.js +2 -1
- package/dist/components/inline-confirm.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +2 -2
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +2 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +3 -3
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal.d.ts +13 -1
- package/dist/components/legal.js +12 -0
- package/dist/components/legal.js.map +1 -1
- package/dist/components/legended-series-chart.d.ts +80 -0
- package/dist/components/legended-series-chart.js +70 -0
- package/dist/components/legended-series-chart.js.map +1 -0
- package/dist/components/lightbox.js +2 -1
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/mini-calendar.js +16 -7
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +48 -0
- package/dist/components/modal.js +26 -6
- package/dist/components/modal.js.map +1 -1
- package/dist/components/month-picker.d.ts +1 -1
- package/dist/components/month-picker.js +6 -6
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +2 -2
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.js +2 -6
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/number-input.js +2 -2
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/page-header-layout.d.ts +18 -0
- package/dist/components/page-header-layout.js +23 -0
- package/dist/components/page-header-layout.js.map +1 -0
- package/dist/components/page-header-skeleton.d.ts +41 -0
- package/dist/components/page-header-skeleton.js +52 -0
- package/dist/components/page-header-skeleton.js.map +1 -0
- package/dist/components/page-header.js +4 -17
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/popover.js +7 -2
- package/dist/components/popover.js.map +1 -1
- package/dist/components/release-notes-labels.d.ts +16 -0
- package/dist/components/release-notes-labels.js +18 -0
- package/dist/components/release-notes-labels.js.map +1 -0
- package/dist/components/release-notes.d.ts +65 -0
- package/dist/components/release-notes.js +65 -0
- package/dist/components/release-notes.js.map +1 -0
- package/dist/components/select.js +2 -2
- package/dist/components/select.js.map +1 -1
- package/dist/components/series-chart-labels.d.ts +9 -0
- package/dist/components/series-chart-labels.js +3 -1
- package/dist/components/series-chart-labels.js.map +1 -1
- package/dist/components/series-chart.d.ts +5 -0
- package/dist/components/series-chart.js +89 -36
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/stat-tile.d.ts +21 -2
- package/dist/components/stat-tile.js +4 -2
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/toggle-group.js +3 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/treemap-layout.js.map +1 -1
- package/dist/components/treemap.d.ts +17 -15
- package/dist/components/treemap.js +167 -85
- package/dist/components/treemap.js.map +1 -1
- package/dist/currencies.d.ts +16 -2
- package/dist/currencies.js +2 -1
- package/dist/currencies.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/eslint/role-utilities.d.ts +2 -2
- package/dist/eslint/role-utilities.js.map +1 -1
- package/dist/feedback/feedback-context-labels.js +2 -1
- package/dist/feedback/feedback-context-labels.js.map +1 -1
- package/dist/feedback/feedback-context.d.ts +19 -3
- package/dist/feedback/feedback-context.js +12 -1
- package/dist/feedback/feedback-context.js.map +1 -1
- package/dist/feedback/feedback-diagnostics.d.ts +17 -0
- package/dist/feedback/feedback-diagnostics.js +27 -0
- package/dist/feedback/feedback-diagnostics.js.map +1 -0
- package/dist/feedback/feedback-dialog.d.ts +10 -0
- package/dist/feedback/feedback-dialog.js +6 -4
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox-page.d.ts +260 -0
- package/dist/feedback/feedback-inbox-page.js +207 -0
- package/dist/feedback/feedback-inbox-page.js.map +1 -0
- package/dist/feedback/feedback-record.d.ts +5 -0
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.js +1 -0
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +3 -0
- package/dist/feedback/feedback-row-detail.js +3 -0
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
- package/dist/feedback/feedback-submit-dialog.js +15 -3
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-submit.d.ts +30 -2
- package/dist/feedback/feedback-submit.js +5 -2
- package/dist/feedback/feedback-submit.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.js +2 -2
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/feedback.d.ts +1 -0
- package/dist/feedback.js +6 -0
- package/dist/feedback.js.map +1 -1
- package/dist/hooks/use-debounce.d.ts +32 -5
- package/dist/hooks/use-debounce.js +6 -5
- package/dist/hooks/use-debounce.js.map +1 -1
- package/dist/hooks/use-file-picker.d.ts +3 -1
- package/dist/hooks/use-file-picker.js.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts +19 -3
- package/dist/hooks/use-focus-trap.js +15 -5
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-has-camera.d.ts +36 -0
- package/dist/hooks/use-has-camera.js +53 -0
- package/dist/hooks/use-has-camera.js.map +1 -0
- package/dist/hooks/use-hotkey.js +2 -1
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-overlay-history.d.ts +6 -1
- package/dist/hooks/use-overlay-history.js +10 -2
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/defaults.js +11 -1
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +78 -4
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +20 -0
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +95 -5
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +74 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +75 -3
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +77 -4
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +77 -4
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +74 -4
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +22 -1
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +27 -8
- package/dist/index.js +41 -2
- package/dist/index.js.map +1 -1
- package/dist/landing/landing-labels.d.ts +8 -0
- package/dist/landing/landing-labels.js +2 -1
- package/dist/landing/landing-labels.js.map +1 -1
- package/dist/lib/changelog.d.ts +130 -0
- package/dist/lib/changelog.js +137 -0
- package/dist/lib/changelog.js.map +1 -0
- package/dist/lib/clipboard-minus.js +2 -2
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/dates.d.ts +36 -4
- package/dist/lib/dates.js +49 -13
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/editable-content.d.ts +33 -0
- package/dist/lib/editable-content.js +15 -0
- package/dist/lib/editable-content.js.map +1 -0
- package/dist/lib/focus-left.d.ts +47 -1
- package/dist/lib/focus-left.js +11 -2
- package/dist/lib/focus-left.js.map +1 -1
- package/dist/lib/format.d.ts +37 -2
- package/dist/lib/format.js +25 -1
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/intl-cache.d.ts +4 -2
- package/dist/lib/intl-cache.js.map +1 -1
- package/dist/lib/server-wake.d.ts +49 -9
- package/dist/lib/server-wake.js +25 -14
- package/dist/lib/server-wake.js.map +1 -1
- package/dist/lib/session-refresh.d.ts +53 -0
- package/dist/lib/session-refresh.js +27 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/translation-review.d.ts +26 -0
- package/dist/lib/translation-review.js +14 -0
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/rhf/fields.js +3 -3
- package/dist/rhf/fields.js.map +1 -1
- package/dist/shell/app-shell.d.ts +25 -1
- package/dist/shell/app-shell.js +3 -1
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +3 -0
- package/dist/shell/dev-menu.js +4 -2
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/held-changes-banner-labels.d.ts +23 -0
- package/dist/shell/held-changes-banner-labels.js +14 -0
- package/dist/shell/held-changes-banner-labels.js.map +1 -0
- package/dist/shell/held-changes-banner.d.ts +75 -0
- package/dist/shell/held-changes-banner.js +106 -0
- package/dist/shell/held-changes-banner.js.map +1 -0
- package/dist/shell/sync-status-indicator.d.ts +27 -12
- package/dist/shell/sync-status-indicator.js +13 -4
- package/dist/shell/sync-status-indicator.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.d.ts +5 -0
- package/dist/shell/top-bar-parts-labels.js +3 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell.d.ts +2 -0
- package/dist/shell.js +3 -0
- package/dist/shell.js.map +1 -1
- package/dist/sync/engine.d.ts +11 -2
- package/dist/sync/engine.js +13 -5
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/hooks.d.ts +3 -2
- package/dist/sync/hooks.js +4 -2
- package/dist/sync/hooks.js.map +1 -1
- package/dist/testing/css-variables.generated.d.ts +2 -2
- package/dist/testing/css-variables.generated.js +1 -1
- package/dist/testing/css-variables.generated.js.map +1 -1
- package/dist/theme/chart-palette.d.ts +18 -0
- package/dist/theme/chart-palette.js +17 -1
- package/dist/theme/chart-palette.js.map +1 -1
- package/dist/theme/contrast-tokens.d.ts +3 -3
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/contrast.d.ts +4 -4
- package/dist/theme/contrast.js.map +1 -1
- package/dist/tour/tour-overlay.js +2 -1
- package/dist/tour/tour-overlay.js.map +1 -1
- package/package.json +5 -9
- package/tokens.css +19 -54
- package/src/account/account-parts.ts +0 -47
- package/src/account/account-settings-labels.ts +0 -240
- package/src/account/account-settings.tsx +0 -698
- package/src/account/data-export-setting-labels.ts +0 -20
- package/src/account/data-export-setting.tsx +0 -200
- package/src/account/delete-account-setting-labels.ts +0 -33
- package/src/account/delete-account-setting.tsx +0 -341
- package/src/account/email-change-setting-labels.ts +0 -31
- package/src/account/email-change-setting.tsx +0 -443
- package/src/account/passkeys-setting.tsx +0 -445
- package/src/account/sessions-setting-labels.ts +0 -24
- package/src/account/sessions-setting.tsx +0 -283
- package/src/admin/admin-action-confirm-labels.ts +0 -19
- package/src/admin/admin-action-confirm.tsx +0 -509
- package/src/admin/admin-action-log-labels.ts +0 -83
- package/src/admin/admin-action-log.tsx +0 -464
- package/src/admin/admin-area-labels.ts +0 -114
- package/src/admin/admin-forbidden.tsx +0 -75
- package/src/admin/admin-overview.tsx +0 -258
- package/src/admin/admin-parts.ts +0 -68
- package/src/admin/admin-sections.tsx +0 -208
- package/src/admin/admin-tool-links.tsx +0 -90
- package/src/admin/invitations-panel-labels.ts +0 -31
- package/src/admin/invitations-panel.tsx +0 -516
- package/src/admin/mail-test-card-labels.ts +0 -19
- package/src/admin/mail-test-card.tsx +0 -189
- package/src/admin/plan-change-labels.ts +0 -5
- package/src/admin/plan-change.tsx +0 -474
- package/src/admin/reviewer-scope-editor-labels.ts +0 -16
- package/src/admin/reviewer-scope-editor.tsx +0 -224
- package/src/admin/role-select-labels.ts +0 -16
- package/src/admin/role-select.tsx +0 -282
- package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
- package/src/admin/transfer-ownership-dialog.tsx +0 -162
- package/src/admin/user-roster-labels.ts +0 -17
- package/src/admin/user-roster.tsx +0 -559
- package/src/auth/accept-invitation-labels.ts +0 -21
- package/src/auth/accept-invitation.tsx +0 -210
- package/src/auth/auth-errors-labels.ts +0 -23
- package/src/auth/auth-errors.ts +0 -370
- package/src/auth/complete-name-dialog-labels.ts +0 -16
- package/src/auth/complete-name-dialog.tsx +0 -253
- package/src/auth/email-tag.ts +0 -75
- package/src/auth/forgot-password-form-labels.ts +0 -20
- package/src/auth/forgot-password-form.tsx +0 -221
- package/src/auth/form-rules.ts +0 -40
- package/src/auth/new-password-fields.tsx +0 -85
- package/src/auth/not-found-page-labels.ts +0 -12
- package/src/auth/not-found-page.tsx +0 -95
- package/src/auth/register-form-labels.ts +0 -31
- package/src/auth/register-form.tsx +0 -456
- package/src/auth/reset-password-form-labels.ts +0 -27
- package/src/auth/reset-password-form.tsx +0 -341
- package/src/auth/sign-in-form-labels.ts +0 -44
- package/src/auth/sign-in-form.tsx +0 -858
- package/src/auth/status-parts.tsx +0 -132
- package/src/auth/verify-email-labels.ts +0 -26
- package/src/auth/verify-email.tsx +0 -445
- package/src/billing/billing-banner.tsx +0 -258
- package/src/billing/billing-labels.ts +0 -381
- package/src/billing/billing-lock.ts +0 -108
- package/src/billing/billing-overview.ts +0 -157
- package/src/billing/billing-standing.ts +0 -80
- package/src/billing/cancel-request.ts +0 -97
- package/src/billing/cancel-subscription.tsx +0 -98
- package/src/billing/checkout-processing.ts +0 -394
- package/src/billing/checkout-return.ts +0 -90
- package/src/billing/pay-page.ts +0 -330
- package/src/billing/plan-card.tsx +0 -562
- package/src/billing/plan-change-labels.ts +0 -66
- package/src/billing/plan-limit-notice.tsx +0 -148
- package/src/billing/plan-limit-toast.tsx +0 -90
- package/src/billing/plan-limit.ts +0 -52
- package/src/billing/plan-price.ts +0 -98
- package/src/billing/plan-switch.tsx +0 -216
- package/src/billing/provider-page.ts +0 -84
- package/src/billing/subscription-actions.tsx +0 -247
- package/src/billing/subscription-status-chip.tsx +0 -95
- package/src/chart.ts +0 -103
- package/src/components/account-chips-labels.ts +0 -16
- package/src/components/account-chips.tsx +0 -474
- package/src/components/alert-banner.tsx +0 -670
- package/src/components/amount-input.tsx +0 -815
- package/src/components/appearance-labels.ts +0 -63
- package/src/components/authed-image-labels.ts +0 -11
- package/src/components/authed-image.tsx +0 -209
- package/src/components/autocomplete.tsx +0 -645
- package/src/components/breadcrumbs-labels.ts +0 -10
- package/src/components/breadcrumbs.tsx +0 -205
- package/src/components/bulk-action-bar-labels.ts +0 -11
- package/src/components/bulk-action-bar.tsx +0 -443
- package/src/components/button-group.tsx +0 -223
- package/src/components/button-look.ts +0 -256
- package/src/components/button.tsx +0 -339
- package/src/components/calculator.tsx +0 -341
- package/src/components/calendar-heatmap-labels.ts +0 -15
- package/src/components/calendar-heatmap.tsx +0 -594
- package/src/components/card.tsx +0 -377
- package/src/components/chart-edge.ts +0 -106
- package/src/components/chart-figure.tsx +0 -35
- package/src/components/chart-height.ts +0 -30
- package/src/components/chart-zoom-core.tsx +0 -627
- package/src/components/chart-zoom.tsx +0 -22
- package/src/components/chart.tsx +0 -554
- package/src/components/checkbox-group.tsx +0 -247
- package/src/components/checkbox.tsx +0 -346
- package/src/components/chip-input.tsx +0 -370
- package/src/components/chip-labels.ts +0 -13
- package/src/components/chip.tsx +0 -843
- package/src/components/choice-card.tsx +0 -544
- package/src/components/column-mapper-labels.ts +0 -38
- package/src/components/column-mapper.tsx +0 -655
- package/src/components/combobox-core.tsx +0 -1321
- package/src/components/combobox-suggestions.tsx +0 -131
- package/src/components/combobox.tsx +0 -716
- package/src/components/confirm-context.ts +0 -7
- package/src/components/confirm-dialog-labels.ts +0 -13
- package/src/components/confirm-dialog.tsx +0 -341
- package/src/components/copy-button-labels.ts +0 -13
- package/src/components/copy-button.tsx +0 -192
- package/src/components/country-select-labels.ts +0 -11
- package/src/components/country-select.tsx +0 -539
- package/src/components/currency-option-list.tsx +0 -180
- package/src/components/currency-select.tsx +0 -341
- package/src/components/danger-confirm-labels.ts +0 -20
- package/src/components/danger-confirm.tsx +0 -934
- package/src/components/data-table-cells.tsx +0 -118
- package/src/components/data-table-column-settings.tsx +0 -198
- package/src/components/data-table-filter-popover.tsx +0 -281
- package/src/components/data-table-filters.ts +0 -287
- package/src/components/data-table-fit.ts +0 -301
- package/src/components/data-table-groups.tsx +0 -288
- package/src/components/data-table-head.tsx +0 -280
- package/src/components/data-table-labels.ts +0 -198
- package/src/components/data-table-leading-row.tsx +0 -58
- package/src/components/data-table-mobile.tsx +0 -1117
- package/src/components/data-table-pagination.tsx +0 -202
- package/src/components/data-table-resize.ts +0 -188
- package/src/components/data-table-row-actions.tsx +0 -302
- package/src/components/data-table-row.tsx +0 -496
- package/src/components/data-table-selection.ts +0 -71
- package/src/components/data-table-shared.tsx +0 -287
- package/src/components/data-table-sort.ts +0 -163
- package/src/components/data-table-virtual.ts +0 -576
- package/src/components/data-table.tsx +0 -2598
- package/src/components/date-field.tsx +0 -684
- package/src/components/date-format-setting.tsx +0 -64
- package/src/components/date-picker.tsx +0 -404
- package/src/components/date-range-picker.tsx +0 -518
- package/src/components/description-list-labels.ts +0 -9
- package/src/components/description-list.tsx +0 -386
- package/src/components/dialog-frame-labels.ts +0 -7
- package/src/components/dialog-frame.tsx +0 -276
- package/src/components/disclosure.tsx +0 -476
- package/src/components/dropdown.tsx +0 -461
- package/src/components/empty-state.tsx +0 -136
- package/src/components/entity-combobox.tsx +0 -422
- package/src/components/error-boundary-labels.ts +0 -20
- package/src/components/error-boundary.tsx +0 -675
- package/src/components/facing-pair.ts +0 -93
- package/src/components/field-base-labels.ts +0 -20
- package/src/components/field-base.tsx +0 -656
- package/src/components/field-parts.tsx +0 -825
- package/src/components/field-strip.tsx +0 -129
- package/src/components/field.tsx +0 -206
- package/src/components/file-button.tsx +0 -295
- package/src/components/file-dropzone.tsx +0 -559
- package/src/components/floating-panel-labels.ts +0 -10
- package/src/components/floating-panel.tsx +0 -828
- package/src/components/focus-ring.ts +0 -16
- package/src/components/form-actions-labels.ts +0 -11
- package/src/components/form-actions.tsx +0 -578
- package/src/components/full-bleed-dialog.tsx +0 -294
- package/src/components/grouped-picker.tsx +0 -184
- package/src/components/help-popover.tsx +0 -117
- package/src/components/hover-menu.tsx +0 -343
- package/src/components/iban-input-labels.ts +0 -14
- package/src/components/iban-input.tsx +0 -236
- package/src/components/icon-button.tsx +0 -959
- package/src/components/icon-picker-labels.ts +0 -13
- package/src/components/icon-picker.tsx +0 -232
- package/src/components/image-grid-labels.ts +0 -11
- package/src/components/image-grid.tsx +0 -202
- package/src/components/inline-confirm.tsx +0 -116
- package/src/components/inline-edit-field-labels.ts +0 -11
- package/src/components/inline-edit-field.tsx +0 -552
- package/src/components/inline-entity-combobox.tsx +0 -849
- package/src/components/input.tsx +0 -394
- package/src/components/jump-calendar.tsx +0 -265
- package/src/components/language-select.tsx +0 -93
- package/src/components/legal-labels.ts +0 -105
- package/src/components/legal-page.tsx +0 -711
- package/src/components/legal.tsx +0 -668
- package/src/components/lightbox-labels.ts +0 -18
- package/src/components/lightbox.tsx +0 -399
- package/src/components/line-items-labels.ts +0 -14
- package/src/components/line-items.tsx +0 -602
- package/src/components/list-labels.ts +0 -12
- package/src/components/list.tsx +0 -870
- package/src/components/loading-state.tsx +0 -78
- package/src/components/measured-grid-labels.ts +0 -25
- package/src/components/measured-grid.tsx +0 -837
- package/src/components/menu-item.tsx +0 -241
- package/src/components/mini-calendar-labels.ts +0 -17
- package/src/components/mini-calendar.tsx +0 -789
- package/src/components/modal.tsx +0 -505
- package/src/components/money-draft.ts +0 -83
- package/src/components/money-field.tsx +0 -76
- package/src/components/month-grid.tsx +0 -229
- package/src/components/month-picker-labels.ts +0 -22
- package/src/components/month-picker.tsx +0 -1087
- package/src/components/multi-entity-combobox.tsx +0 -369
- package/src/components/multi-select.tsx +0 -376
- package/src/components/nav-pills.tsx +0 -198
- package/src/components/number-field.tsx +0 -327
- package/src/components/number-input.tsx +0 -558
- package/src/components/numeric-field.ts +0 -169
- package/src/components/numpad-sheet.tsx +0 -285
- package/src/components/one-time-code-input.tsx +0 -270
- package/src/components/page-contents-labels.ts +0 -9
- package/src/components/page-contents.tsx +0 -282
- package/src/components/page-header-context.ts +0 -8
- package/src/components/page-header.tsx +0 -298
- package/src/components/password-strength-labels.ts +0 -22
- package/src/components/password-strength.tsx +0 -241
- package/src/components/phone-input-labels.ts +0 -10
- package/src/components/phone-input.tsx +0 -282
- package/src/components/picker-sheet.tsx +0 -330
- package/src/components/pie-chart-labels.ts +0 -40
- package/src/components/pie-chart.tsx +0 -480
- package/src/components/popover-labels.ts +0 -14
- package/src/components/popover.tsx +0 -268
- package/src/components/progress-bar-labels.ts +0 -10
- package/src/components/progress-bar.tsx +0 -479
- package/src/components/qr-code.tsx +0 -76
- package/src/components/reauth-dialog-labels.ts +0 -13
- package/src/components/reauth-dialog.tsx +0 -265
- package/src/components/row-actions-labels.ts +0 -12
- package/src/components/row-actions.tsx +0 -795
- package/src/components/scroll-area.tsx +0 -123
- package/src/components/search-field.tsx +0 -192
- package/src/components/select.tsx +0 -294
- package/src/components/separator.tsx +0 -33
- package/src/components/series-chart-axes.ts +0 -342
- package/src/components/series-chart-budget.ts +0 -150
- package/src/components/series-chart-labels.ts +0 -33
- package/src/components/series-chart-thin.ts +0 -180
- package/src/components/series-chart-ticks.ts +0 -194
- package/src/components/series-chart.tsx +0 -1906
- package/src/components/server-wake-labels.ts +0 -11
- package/src/components/server-wake.tsx +0 -129
- package/src/components/settings-fields.tsx +0 -237
- package/src/components/share-card-labels.ts +0 -30
- package/src/components/share-card.tsx +0 -675
- package/src/components/signature-pad-labels.ts +0 -24
- package/src/components/signature-pad.tsx +0 -747
- package/src/components/signed-amount-labels.ts +0 -10
- package/src/components/signed-amount.tsx +0 -336
- package/src/components/skeleton.tsx +0 -80
- package/src/components/slider.tsx +0 -338
- package/src/components/sparkline-labels.ts +0 -14
- package/src/components/sparkline.tsx +0 -322
- package/src/components/spinner.tsx +0 -81
- package/src/components/stat-tile-labels.ts +0 -15
- package/src/components/stat-tile.tsx +0 -725
- package/src/components/status-dot.tsx +0 -170
- package/src/components/swatch-picker-labels.ts +0 -10
- package/src/components/swatch-picker.tsx +0 -283
- package/src/components/swipeable-row.tsx +0 -386
- package/src/components/switch.tsx +0 -273
- package/src/components/table-skeleton.tsx +0 -136
- package/src/components/table.tsx +0 -647
- package/src/components/tabs-labels.ts +0 -13
- package/src/components/tabs.tsx +0 -693
- package/src/components/text-link.tsx +0 -359
- package/src/components/text.tsx +0 -150
- package/src/components/textarea.tsx +0 -330
- package/src/components/tile-radio.tsx +0 -332
- package/src/components/time-input.tsx +0 -121
- package/src/components/toast-labels.ts +0 -12
- package/src/components/toast.tsx +0 -519
- package/src/components/toggle-group.tsx +0 -752
- package/src/components/toggle-legend.tsx +0 -394
- package/src/components/tooltip.tsx +0 -1149
- package/src/components/translation-review-editor.tsx +0 -290
- package/src/components/translation-review-labels.ts +0 -181
- package/src/components/translation-review-parts.tsx +0 -272
- package/src/components/translation-review.tsx +0 -1240
- package/src/components/tree-view.tsx +0 -589
- package/src/components/treemap-labels.ts +0 -47
- package/src/components/treemap-layout.ts +0 -210
- package/src/components/treemap.tsx +0 -1184
- package/src/components/trigger-aria.ts +0 -44
- package/src/components/use-anchor-dir.ts +0 -20
- package/src/components/use-mobile-reveal.ts +0 -62
- package/src/components/use-table-state.ts +0 -753
- package/src/components/user-avatar.tsx +0 -116
- package/src/components/wizard-stepper.tsx +0 -42
- package/src/components/write-lock-labels.ts +0 -10
- package/src/components/write-lock.tsx +0 -253
- package/src/currencies.ts +0 -70
- package/src/data-table.ts +0 -42
- package/src/demo/demo-banner.tsx +0 -153
- package/src/demo/demo-countdown.ts +0 -136
- package/src/demo/demo-ended.tsx +0 -90
- package/src/demo/demo-labels.ts +0 -78
- package/src/demo/demo-session.ts +0 -32
- package/src/demo/demo-start.tsx +0 -156
- package/src/eslint/index.ts +0 -161
- package/src/eslint/role-utilities.generated.ts +0 -146
- package/src/eslint/role-utilities.ts +0 -233
- package/src/feedback/feedback-attachment-download.tsx +0 -77
- package/src/feedback/feedback-attachment-labels.ts +0 -37
- package/src/feedback/feedback-attachment.tsx +0 -1239
- package/src/feedback/feedback-capture.ts +0 -287
- package/src/feedback/feedback-comment-thread.tsx +0 -353
- package/src/feedback/feedback-context-labels.ts +0 -10
- package/src/feedback/feedback-context.tsx +0 -213
- package/src/feedback/feedback-crash.ts +0 -547
- package/src/feedback/feedback-dialog-labels.ts +0 -29
- package/src/feedback/feedback-dialog.tsx +0 -440
- package/src/feedback/feedback-entry-file.tsx +0 -150
- package/src/feedback/feedback-inbox.tsx +0 -552
- package/src/feedback/feedback-labels.ts +0 -144
- package/src/feedback/feedback-menu-labels.ts +0 -12
- package/src/feedback/feedback-menu.tsx +0 -177
- package/src/feedback/feedback-mutation.ts +0 -20
- package/src/feedback/feedback-page-link.ts +0 -90
- package/src/feedback/feedback-public-labels.ts +0 -81
- package/src/feedback/feedback-public-list.tsx +0 -524
- package/src/feedback/feedback-public-switch.tsx +0 -102
- package/src/feedback/feedback-public-types.ts +0 -101
- package/src/feedback/feedback-record.ts +0 -423
- package/src/feedback/feedback-replies-context.ts +0 -9
- package/src/feedback/feedback-replies.tsx +0 -343
- package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
- package/src/feedback/feedback-row-detail-labels.ts +0 -30
- package/src/feedback/feedback-row-detail.tsx +0 -858
- package/src/feedback/feedback-status-undo.ts +0 -109
- package/src/feedback/feedback-submit-dialog.tsx +0 -118
- package/src/feedback/feedback-submit.tsx +0 -237
- package/src/feedback/feedback-swipe.tsx +0 -192
- package/src/feedback/feedback-table-labels.ts +0 -27
- package/src/feedback/feedback-table.tsx +0 -912
- package/src/feedback/feedback-thread-labels.ts +0 -22
- package/src/feedback/feedback-thread-parts-labels.ts +0 -41
- package/src/feedback/feedback-thread.tsx +0 -905
- package/src/feedback/feedback-vocabulary.ts +0 -263
- package/src/feedback/feedback-vote-button.tsx +0 -124
- package/src/feedback.ts +0 -116
- package/src/hooks/use-anchored-panel.ts +0 -396
- package/src/hooks/use-anchored-rect.ts +0 -77
- package/src/hooks/use-announce.ts +0 -85
- package/src/hooks/use-authed-src.ts +0 -167
- package/src/hooks/use-body-scroll-lock.ts +0 -119
- package/src/hooks/use-breakpoint.ts +0 -133
- package/src/hooks/use-close-transition.ts +0 -107
- package/src/hooks/use-copy-to-clipboard.ts +0 -122
- package/src/hooks/use-debounce.ts +0 -114
- package/src/hooks/use-dismiss.ts +0 -371
- package/src/hooks/use-document-title.ts +0 -33
- package/src/hooks/use-file-drop.ts +0 -121
- package/src/hooks/use-file-picker-labels.ts +0 -28
- package/src/hooks/use-file-picker.tsx +0 -359
- package/src/hooks/use-focus-trap.ts +0 -199
- package/src/hooks/use-hotkey.ts +0 -189
- package/src/hooks/use-large-text.ts +0 -41
- package/src/hooks/use-long-press.ts +0 -140
- package/src/hooks/use-media-query.ts +0 -39
- package/src/hooks/use-mounted.ts +0 -39
- package/src/hooks/use-noindex.ts +0 -37
- package/src/hooks/use-overlay-history.ts +0 -714
- package/src/hooks/use-row-swipe.ts +0 -207
- package/src/hooks/use-search-param-state.ts +0 -434
- package/src/hooks/use-windowed-rows.ts +0 -225
- package/src/i18n/defaults.ts +0 -267
- package/src/i18n/german.ts +0 -2057
- package/src/i18n/kit-labels.tsx +0 -1003
- package/src/i18n/languages.ts +0 -349
- package/src/i18n/locales/de-CH.ts +0 -24
- package/src/i18n/locales/en.ts +0 -267
- package/src/i18n/locales/es.ts +0 -1997
- package/src/i18n/locales/fr.ts +0 -2035
- package/src/i18n/locales/hu.ts +0 -2002
- package/src/i18n/locales/it.ts +0 -2012
- package/src/i18n/locales/zh.ts +0 -1910
- package/src/i18n/plurals.ts +0 -86
- package/src/i18n/review.ts +0 -475
- package/src/i18n/shared-labels.ts +0 -138
- package/src/i18n/swiss.ts +0 -29
- package/src/index.ts +0 -1179
- package/src/landing/access.ts +0 -93
- package/src/landing/landing-actions.tsx +0 -97
- package/src/landing/landing-labels.ts +0 -59
- package/src/landing/landing-sections.tsx +0 -341
- package/src/landing/page-seo.ts +0 -261
- package/src/landing/public-header.tsx +0 -121
- package/src/landing/public-page.tsx +0 -106
- package/src/landing/routing.tsx +0 -225
- package/src/lib/broadcast.ts +0 -52
- package/src/lib/calc.ts +0 -323
- package/src/lib/chip-edge-snap.ts +0 -212
- package/src/lib/clipboard-minus.ts +0 -107
- package/src/lib/clipping.ts +0 -34
- package/src/lib/cn.ts +0 -28
- package/src/lib/column-mapping.ts +0 -234
- package/src/lib/countries.ts +0 -91
- package/src/lib/data-attributes.ts +0 -14
- package/src/lib/date-format.ts +0 -227
- package/src/lib/dates.ts +0 -266
- package/src/lib/day-format.ts +0 -96
- package/src/lib/decimal-marks.ts +0 -108
- package/src/lib/describe-failure.ts +0 -18
- package/src/lib/device-settings.ts +0 -147
- package/src/lib/direction.ts +0 -74
- package/src/lib/document-navigation.ts +0 -17
- package/src/lib/document-title.ts +0 -41
- package/src/lib/download.ts +0 -172
- package/src/lib/float-clearance.ts +0 -70
- package/src/lib/floating-stack.ts +0 -70
- package/src/lib/focus-left.ts +0 -156
- package/src/lib/format.ts +0 -522
- package/src/lib/http-status.ts +0 -38
- package/src/lib/iban.ts +0 -251
- package/src/lib/ime.ts +0 -24
- package/src/lib/intl-cache.ts +0 -25
- package/src/lib/iso-day.ts +0 -13
- package/src/lib/lazy-with-fallback.ts +0 -82
- package/src/lib/logger.ts +0 -69
- package/src/lib/minus.ts +0 -50
- package/src/lib/path-pattern.ts +0 -55
- package/src/lib/person-name.ts +0 -155
- package/src/lib/phone.ts +0 -208
- package/src/lib/plain-text.ts +0 -22
- package/src/lib/presence.ts +0 -18
- package/src/lib/qr-encode.ts +0 -444
- package/src/lib/quiet-focus.ts +0 -32
- package/src/lib/reduced-motion.ts +0 -22
- package/src/lib/refs.ts +0 -22
- package/src/lib/round.ts +0 -43
- package/src/lib/safe-storage.ts +0 -119
- package/src/lib/server-wake.ts +0 -315
- package/src/lib/session-refresh.ts +0 -472
- package/src/lib/share-format.ts +0 -18
- package/src/lib/status-tone.ts +0 -43
- package/src/lib/strip-fade.ts +0 -287
- package/src/lib/table-text.ts +0 -554
- package/src/lib/text-case.ts +0 -19
- package/src/lib/text-match.ts +0 -169
- package/src/lib/thenable.ts +0 -19
- package/src/lib/translation-review.ts +0 -717
- package/src/notifications/device-zone-report.ts +0 -67
- package/src/notifications/feedback-notification-types-labels.ts +0 -33
- package/src/notifications/feedback-notification-types.ts +0 -71
- package/src/notifications/notification-bell.tsx +0 -119
- package/src/notifications/notification-inbox.tsx +0 -309
- package/src/notifications/notification-parts.tsx +0 -81
- package/src/notifications/notification-types-setting.tsx +0 -406
- package/src/notifications/notification-types.ts +0 -89
- package/src/notifications/notifications-labels.ts +0 -287
- package/src/notifications/push-device-setting.tsx +0 -230
- package/src/notifications/push-devices-setting.tsx +0 -374
- package/src/notifications/push-worker.ts +0 -168
- package/src/notifications/quiet-hours-setting.tsx +0 -238
- package/src/notifications/unsubscribe-panel.tsx +0 -200
- package/src/notifications/use-push-device.ts +0 -448
- package/src/offline/local-first.ts +0 -100
- package/src/offline/pwa-update-prompt-labels.ts +0 -9
- package/src/offline/pwa-update-prompt.tsx +0 -78
- package/src/offline/query-persistence.ts +0 -391
- package/src/offline/service-worker-updates.ts +0 -81
- package/src/offline/shared-computer-labels.ts +0 -8
- package/src/offline/shared-computer.tsx +0 -87
- package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
- package/src/offline/sign-out-pending-dialog.tsx +0 -135
- package/src/offline.ts +0 -37
- package/src/push-worker.ts +0 -25
- package/src/rhf/fields.tsx +0 -2187
- package/src/rhf/form-core.tsx +0 -324
- package/src/rhf/form.tsx +0 -12
- package/src/rhf/line-items.tsx +0 -135
- package/src/rhf/use-rhf-wizard-step.ts +0 -104
- package/src/rhf.ts +0 -21
- package/src/search/command-palette-labels.ts +0 -16
- package/src/search/command-palette.tsx +0 -624
- package/src/search/global-search-labels.ts +0 -13
- package/src/search/global-search.tsx +0 -660
- package/src/search/search-index.ts +0 -283
- package/src/search/use-command-key.ts +0 -23
- package/src/search.ts +0 -14
- package/src/settings/device-reset-setting-labels.ts +0 -20
- package/src/settings/device-reset-setting.tsx +0 -116
- package/src/settings/settings-card-classes.ts +0 -11
- package/src/settings/settings-catalogue.ts +0 -150
- package/src/settings/settings-context.ts +0 -33
- package/src/settings/settings-heading.tsx +0 -67
- package/src/settings/settings-labels.ts +0 -87
- package/src/settings/settings-layout.tsx +0 -471
- package/src/settings/settings-section.tsx +0 -108
- package/src/settings/use-account-appearance.ts +0 -148
- package/src/settings/use-account-language.ts +0 -146
- package/src/settings/use-settings-focus.ts +0 -128
- package/src/settings/use-settings-route.ts +0 -258
- package/src/shell/account-menu-language.tsx +0 -130
- package/src/shell/account-menu-text-size.tsx +0 -80
- package/src/shell/admin-menu.tsx +0 -183
- package/src/shell/app-shell-labels.ts +0 -11
- package/src/shell/app-shell.tsx +0 -1560
- package/src/shell/auth-layout.tsx +0 -186
- package/src/shell/company-switcher-labels.ts +0 -13
- package/src/shell/company-switcher.tsx +0 -136
- package/src/shell/dev-menu.tsx +0 -257
- package/src/shell/fill-height.tsx +0 -45
- package/src/shell/language-code.ts +0 -5
- package/src/shell/option-switcher-menu.tsx +0 -84
- package/src/shell/sync-status-indicator.tsx +0 -303
- package/src/shell/top-bar-actions.tsx +0 -87
- package/src/shell/top-bar-brand.tsx +0 -78
- package/src/shell/top-bar-parts-labels.ts +0 -148
- package/src/shell/top-bar.tsx +0 -40
- package/src/shell/topbar-action-menu.tsx +0 -567
- package/src/shell/topbar-controls.tsx +0 -269
- package/src/shell/tour-menu.tsx +0 -187
- package/src/shell.ts +0 -108
- package/src/sync/db.ts +0 -129
- package/src/sync/engine.ts +0 -1011
- package/src/sync/hooks.ts +0 -98
- package/src/sync/testing.ts +0 -73
- package/src/sync/wire.ts +0 -61
- package/src/sync.ts +0 -37
- package/src/table-text.ts +0 -8
- package/src/testing/css-variables.generated.ts +0 -112
- package/src/testing/css-variables.ts +0 -189
- package/src/testing/index.ts +0 -29
- package/src/testing/react.ts +0 -58
- package/src/testing/tour.ts +0 -41
- package/src/testing/viewport.ts +0 -357
- package/src/theme/chart-palette.ts +0 -232
- package/src/theme/color.ts +0 -272
- package/src/theme/contrast-tokens.ts +0 -268
- package/src/theme/contrast.ts +0 -250
- package/src/theme/palette-derive.ts +0 -825
- package/src/theme/palette-presets.ts +0 -544
- package/src/theme/palette-store.ts +0 -108
- package/src/theme/text-size.ts +0 -289
- package/src/theme/theme-store.ts +0 -157
- package/src/tour/tour-catalogue-labels.ts +0 -75
- package/src/tour/tour-catalogue.tsx +0 -335
- package/src/tour/tour-dock.ts +0 -134
- package/src/tour/tour-engine.ts +0 -37
- package/src/tour/tour-gates.ts +0 -218
- package/src/tour/tour-guide-button.tsx +0 -64
- package/src/tour/tour-guide-labels.ts +0 -15
- package/src/tour/tour-info.ts +0 -144
- package/src/tour/tour-labels.ts +0 -23
- package/src/tour/tour-overlay.tsx +0 -1170
- package/src/tour/tour.tsx +0 -750
- package/src/tour/use-tour-progress.ts +0 -671
- package/src/tour/use-tour-url-sync.ts +0 -266
- package/src/tour.ts +0 -21
- package/src/vite-env.d.ts +0 -23
- package/src/wizard/stepper-nav.tsx +0 -360
- package/src/wizard/types.ts +0 -275
- package/src/wizard/use-wizard.ts +0 -560
- package/src/wizard/validation.ts +0 -39
- package/src/wizard/wizard-context.tsx +0 -74
- package/src/wizard/wizard-labels.ts +0 -29
- package/src/wizard/wizard-step.tsx +0 -76
- package/src/wizard/wizard-summary.tsx +0 -84
- package/src/wizard.ts +0 -15
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
-
import type { ReactNode, RefObject } from "react";
|
|
3
|
-
import { cn } from "../lib/cn";
|
|
4
|
-
import { Button } from "./button";
|
|
5
|
-
import { Spinner } from "./spinner";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* One level of {@link DataTableProps.groupBy} (0.48, keksdose dev #605): the rows are cut
|
|
9
|
-
* into consecutive runs of equal `key` — the rows must already be ordered so equal keys
|
|
10
|
-
* are contiguous, as for `mobileGroupBy` — and each run is headed by a full-width band.
|
|
11
|
-
*
|
|
12
|
-
* The same object drives the phone: `mobileGroupBy` takes a level too, so
|
|
13
|
-
* `groupBy={[period, day]} mobileGroupBy={period}` is one definition for both layouts.
|
|
14
|
-
*/
|
|
15
|
-
export interface DataTableGroupBy<T> {
|
|
16
|
-
/** The group a row belongs to. */
|
|
17
|
-
key: (row: T) => string;
|
|
18
|
-
/** The band's label. Default: the key itself. */
|
|
19
|
-
label?: (key: string, rows: T[]) => ReactNode;
|
|
20
|
-
/**
|
|
21
|
-
* The band's end slot — a count, a total ("176 · +8'782.30 · −3'200.10"). `rows` are
|
|
22
|
-
* the group's rows the table holds; an app whose total covers rows not yet loaded
|
|
23
|
-
* looks it up by `key` instead.
|
|
24
|
-
*/
|
|
25
|
-
end?: (key: string, rows: T[]) => ReactNode;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* {@link DataTableProps.loadMore} (0.48, keksdose dev #605): a footer in place of the
|
|
30
|
-
* pager that loads the next slice of rows — on its own as it scrolls into view (an
|
|
31
|
-
* IntersectionObserver), and through a button that is always there for the keyboard and
|
|
32
|
-
* the screen reader. The owner appends the rows; the table renders every row it is given.
|
|
33
|
-
*/
|
|
34
|
-
export interface DataTableLoadMore {
|
|
35
|
-
/** Whether there is anything left to load. False draws the end state. */
|
|
36
|
-
hasMore: boolean;
|
|
37
|
-
/** Load the next slice. Called at most once per row count while `loading` is false. */
|
|
38
|
-
onLoadMore: () => void;
|
|
39
|
-
/** A load is in flight: the button says "Loading…" and ignores presses. */
|
|
40
|
-
loading?: boolean;
|
|
41
|
-
/** The button's words — what it loads ("Load August 2026"). Default: the kit's "Load more". */
|
|
42
|
-
label?: ReactNode;
|
|
43
|
-
/** What the footer says once `hasMore` is false. Default: the kit's "All rows loaded";
|
|
44
|
-
* `null` draws nothing. */
|
|
45
|
-
endLabel?: ReactNode;
|
|
46
|
-
/** Load as the footer scrolls into view. Default true; false leaves only the button. */
|
|
47
|
-
auto?: boolean;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** A run of rows under one band; `start` is its first row's index in the slice. */
|
|
51
|
-
export interface RowGroup<T> {
|
|
52
|
-
key: string;
|
|
53
|
-
rows: T[];
|
|
54
|
-
start: number;
|
|
55
|
-
/** The second level's runs inside this one, or null with one level. */
|
|
56
|
-
children: RowGroup<T>[] | null;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/** Consecutive runs by `level.key`, nested once for a second level. */
|
|
60
|
-
export function groupRows<T>(rows: readonly T[], levels: readonly DataTableGroupBy<T>[], offset = 0): RowGroup<T>[] {
|
|
61
|
-
const [level, ...rest] = levels;
|
|
62
|
-
if (!level) return [];
|
|
63
|
-
const out: RowGroup<T>[] = [];
|
|
64
|
-
rows.forEach((row, i) => {
|
|
65
|
-
const key = level.key(row);
|
|
66
|
-
const last = out[out.length - 1];
|
|
67
|
-
if (last && last.key === key) last.rows.push(row);
|
|
68
|
-
else out.push({ key, rows: [row], start: offset + i, children: null });
|
|
69
|
-
});
|
|
70
|
-
if (rest.length > 0) for (const g of out) g.children = groupRows(g.rows, rest.slice(0, 1), g.start);
|
|
71
|
-
return out;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/** `groupBy` as a list of at most two levels. */
|
|
75
|
-
export function groupLevels<T>(
|
|
76
|
-
groupBy: DataTableGroupBy<T> | readonly [DataTableGroupBy<T>, DataTableGroupBy<T>?] | undefined,
|
|
77
|
-
): DataTableGroupBy<T>[] {
|
|
78
|
-
if (!groupBy) return [];
|
|
79
|
-
const list = "key" in groupBy ? [groupBy] : (groupBy as readonly (DataTableGroupBy<T> | undefined)[]);
|
|
80
|
-
return list.filter((l): l is DataTableGroupBy<T> => !!l).slice(0, 2);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* The bands' sticky offsets: the first level under the header (and under a sticky
|
|
85
|
-
* `leadingRow`), the second under the first. Measured — the header grows at Large text,
|
|
86
|
-
* a band's end slot can wrap — and followed with a ResizeObserver.
|
|
87
|
-
*/
|
|
88
|
-
export function useGroupBandTops(
|
|
89
|
-
tableRef: RefObject<HTMLTableElement | null>,
|
|
90
|
-
enabled: boolean,
|
|
91
|
-
signature: string,
|
|
92
|
-
): [number, number] {
|
|
93
|
-
const [tops, setTops] = useState<[number, number]>([0, 0]);
|
|
94
|
-
useLayoutEffect(() => {
|
|
95
|
-
const table = tableRef.current;
|
|
96
|
-
if (!enabled || !table) return;
|
|
97
|
-
// Looked up afresh on each measure: under `virtualize` (0.48.2) the first band can
|
|
98
|
-
// leave the DOM as the rows scroll, and a detached cell measures 0 — the bands would
|
|
99
|
-
// stack on one another. A band missing for now keeps the height it had.
|
|
100
|
-
const parts = () => [
|
|
101
|
-
table.tHead,
|
|
102
|
-
table.querySelector<HTMLElement>("[data-leading-row='sticky']"),
|
|
103
|
-
table.querySelector<HTMLElement>("th[data-group-band='1']"),
|
|
104
|
-
];
|
|
105
|
-
let bandHeight = 0;
|
|
106
|
-
const measure = () => {
|
|
107
|
-
const [headEl, leadEl, bandEl] = parts();
|
|
108
|
-
const head = headEl ? headEl.getBoundingClientRect().height : 0;
|
|
109
|
-
const lead = leadEl ? leadEl.getBoundingClientRect().height : 0;
|
|
110
|
-
if (bandEl) bandHeight = bandEl.getBoundingClientRect().height;
|
|
111
|
-
const band = bandHeight;
|
|
112
|
-
setTops((prev) =>
|
|
113
|
-
prev[0] === head + lead && prev[1] === head + lead + band ? prev : [head + lead, head + lead + band],
|
|
114
|
-
);
|
|
115
|
-
};
|
|
116
|
-
measure();
|
|
117
|
-
if (typeof ResizeObserver === "undefined") return;
|
|
118
|
-
const observer = new ResizeObserver(measure);
|
|
119
|
-
for (const el of parts()) if (el) observer.observe(el);
|
|
120
|
-
return () => observer.disconnect();
|
|
121
|
-
}, [tableRef, enabled, signature]);
|
|
122
|
-
return tops;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* A band row. A `<th scope="rowgroup">` spanning the row — the header of the `<tbody>` it
|
|
127
|
-
* opens, which a screen reader announces as the reader enters the group — and sticky on
|
|
128
|
-
* the cell, not the `<tr>`, as the header's and the leading row's are. Opaque, under the
|
|
129
|
-
* sticky leading row's `z-[5]`: the first level `z-[4]` over the second's `z-[3]`, so a
|
|
130
|
-
* period arriving from below covers the day still pinned under the one before. The line
|
|
131
|
-
* over it is the cell's own `::before`, which moves with the stuck cell.
|
|
132
|
-
*/
|
|
133
|
-
export function DataTableGroupBand({
|
|
134
|
-
level,
|
|
135
|
-
colSpan,
|
|
136
|
-
top,
|
|
137
|
-
compact,
|
|
138
|
-
label,
|
|
139
|
-
end,
|
|
140
|
-
ariaRowIndex,
|
|
141
|
-
}: {
|
|
142
|
-
level: 1 | 2;
|
|
143
|
-
colSpan: number;
|
|
144
|
-
top: number;
|
|
145
|
-
compact: boolean;
|
|
146
|
-
label: ReactNode;
|
|
147
|
-
end: ReactNode;
|
|
148
|
-
/** Under `virtualize` (0.48.2). */
|
|
149
|
-
ariaRowIndex?: number;
|
|
150
|
-
}) {
|
|
151
|
-
return (
|
|
152
|
-
<tr data-group-row={level} aria-rowindex={ariaRowIndex}>
|
|
153
|
-
<th
|
|
154
|
-
scope="rowgroup"
|
|
155
|
-
colSpan={colSpan}
|
|
156
|
-
data-group-band={level}
|
|
157
|
-
style={{ top }}
|
|
158
|
-
className={cn(
|
|
159
|
-
"sticky p-0 text-start align-middle",
|
|
160
|
-
"before:pointer-events-none before:absolute before:inset-x-0 before:top-0 before:z-[1] before:h-px before:bg-[var(--border)] before:content-['']",
|
|
161
|
-
level === 1 ? "z-[4] bg-surface-2 font-semibold text-primary" : "z-[3] bg-surface font-medium text-secondary",
|
|
162
|
-
level === 1 ? (compact ? "text-xs" : "text-sm") : "text-xs",
|
|
163
|
-
)}
|
|
164
|
-
>
|
|
165
|
-
{/* Pinned to what the scroller shows, as the expansion row's panel is: the end
|
|
166
|
-
slot stays at the visible end of a table wider than its scroller. */}
|
|
167
|
-
<div className="w-0 min-w-full">
|
|
168
|
-
<div
|
|
169
|
-
className={cn(
|
|
170
|
-
"sticky start-0 flex w-[var(--dt-visible-w,100%)] max-w-full flex-wrap items-baseline justify-between gap-x-3",
|
|
171
|
-
compact ? "px-2 py-1" : level === 1 ? "px-3 py-2" : "px-3 py-1.5",
|
|
172
|
-
)}
|
|
173
|
-
>
|
|
174
|
-
<span className="min-w-0">{label}</span>
|
|
175
|
-
{end != null && end !== false && <span className="ms-auto tabular-nums">{end}</span>}
|
|
176
|
-
</div>
|
|
177
|
-
</div>
|
|
178
|
-
</th>
|
|
179
|
-
</tr>
|
|
180
|
-
);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* The load-more footer. Observed against the viewport (an implicit root sees through the
|
|
185
|
-
* clipping scroller, so it works in a bounded body, under `fillHeight`, and in a page that
|
|
186
|
-
* scrolls), and guarded: one call per row count, none while `loading`, so an observer
|
|
187
|
-
* that reports twice — or a footer still in view while the owner sets `loading` — loads
|
|
188
|
-
* once. When the rows arrive and the footer is still in view (a short slice), it loads
|
|
189
|
-
* again, until the scroller is full.
|
|
190
|
-
*/
|
|
191
|
-
export function DataTableLoadMoreFooter({
|
|
192
|
-
loadMore,
|
|
193
|
-
rowCount,
|
|
194
|
-
labels,
|
|
195
|
-
compact,
|
|
196
|
-
as: Tag = "div",
|
|
197
|
-
}: {
|
|
198
|
-
loadMore: DataTableLoadMore;
|
|
199
|
-
rowCount: number;
|
|
200
|
-
labels: { loadMore: string; allLoaded: string; loading: string };
|
|
201
|
-
compact: boolean;
|
|
202
|
-
as?: "div" | "li";
|
|
203
|
-
}) {
|
|
204
|
-
const { hasMore, onLoadMore, loading = false, auto = true, label, endLabel } = loadMore;
|
|
205
|
-
const rootRef = useRef<HTMLElement | null>(null);
|
|
206
|
-
const endRef = useRef<HTMLParagraphElement | null>(null);
|
|
207
|
-
const firedAt = useRef<number | null>(null);
|
|
208
|
-
const buttonFocused = useRef(false);
|
|
209
|
-
// What the observer's callback acts on: the latest props, not the ones it was made with.
|
|
210
|
-
const latest = useRef({ onLoadMore, loading, rowCount });
|
|
211
|
-
useEffect(() => {
|
|
212
|
-
latest.current = { onLoadMore, loading, rowCount };
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
// A fresh observer whenever the rows or the in-flight flag change: its first report is
|
|
216
|
-
// the footer's position AFTER the new rows are laid out. Acting on a remembered "in
|
|
217
|
-
// view" instead fired a second load the moment the rows arrived, while the footer was
|
|
218
|
-
// still where the old last row had been (headless Chromium caught it).
|
|
219
|
-
useEffect(() => {
|
|
220
|
-
const el = rootRef.current;
|
|
221
|
-
if (!auto || !hasMore || loading || !el || typeof IntersectionObserver === "undefined") return;
|
|
222
|
-
const io = new IntersectionObserver(
|
|
223
|
-
(entries) => {
|
|
224
|
-
const now = latest.current;
|
|
225
|
-
if (!entries.some((e) => e.isIntersecting) || now.loading || firedAt.current === now.rowCount) return;
|
|
226
|
-
firedAt.current = now.rowCount;
|
|
227
|
-
now.onLoadMore();
|
|
228
|
-
},
|
|
229
|
-
{ rootMargin: "200px" },
|
|
230
|
-
);
|
|
231
|
-
io.observe(el);
|
|
232
|
-
return () => io.disconnect();
|
|
233
|
-
}, [auto, hasMore, loading, rowCount]);
|
|
234
|
-
|
|
235
|
-
// A focused button that goes away (nothing left) hands its focus to the end line.
|
|
236
|
-
useEffect(() => {
|
|
237
|
-
if (!hasMore && buttonFocused.current) {
|
|
238
|
-
buttonFocused.current = false;
|
|
239
|
-
endRef.current?.focus();
|
|
240
|
-
}
|
|
241
|
-
}, [hasMore]);
|
|
242
|
-
|
|
243
|
-
const end = endLabel === undefined ? labels.allLoaded : endLabel;
|
|
244
|
-
return (
|
|
245
|
-
<Tag
|
|
246
|
-
ref={(el: HTMLElement | null) => {
|
|
247
|
-
rootRef.current = el;
|
|
248
|
-
}}
|
|
249
|
-
data-table-load-more=""
|
|
250
|
-
className={cn(
|
|
251
|
-
"sticky start-0 flex w-[var(--dt-visible-w,100%)] max-w-full flex-col items-center border-t border-subtle text-center",
|
|
252
|
-
compact ? "px-2 py-2" : "px-3 py-3",
|
|
253
|
-
)}
|
|
254
|
-
>
|
|
255
|
-
{hasMore ? (
|
|
256
|
-
<Button
|
|
257
|
-
variant="secondary"
|
|
258
|
-
size="sm"
|
|
259
|
-
aria-busy={loading || undefined}
|
|
260
|
-
onFocus={() => (buttonFocused.current = true)}
|
|
261
|
-
onBlur={() => (buttonFocused.current = false)}
|
|
262
|
-
onClick={() => {
|
|
263
|
-
if (loading) return;
|
|
264
|
-
firedAt.current = rowCount;
|
|
265
|
-
onLoadMore();
|
|
266
|
-
}}
|
|
267
|
-
>
|
|
268
|
-
{loading ? (
|
|
269
|
-
<span className="inline-flex items-center gap-2">
|
|
270
|
-
<Spinner label={null} className="size-4" />
|
|
271
|
-
<bdi>{labels.loading}</bdi>
|
|
272
|
-
</span>
|
|
273
|
-
) : (
|
|
274
|
-
(label ?? labels.loadMore)
|
|
275
|
-
)}
|
|
276
|
-
</Button>
|
|
277
|
-
) : end != null && end !== false ? (
|
|
278
|
-
<p ref={endRef} tabIndex={-1} className="text-xs text-muted outline-none">
|
|
279
|
-
{end}
|
|
280
|
-
</p>
|
|
281
|
-
) : null}
|
|
282
|
-
{/* Mounted throughout, so a screen reader hears the load start. */}
|
|
283
|
-
<span role="status" className="sr-only">
|
|
284
|
-
{loading ? labels.loading : ""}
|
|
285
|
-
</span>
|
|
286
|
-
</Tag>
|
|
287
|
-
);
|
|
288
|
-
}
|
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import type { Dispatch, SetStateAction } from "react";
|
|
2
|
-
import { ArrowDown, ArrowUp, ArrowUpDown, Filter } from "lucide-react";
|
|
3
|
-
import { cn } from "../lib/cn";
|
|
4
|
-
import { defaultFilterState, isFilterActive, resolveFilter } from "./data-table-filters";
|
|
5
|
-
import type { FilterValue } from "./data-table-filters";
|
|
6
|
-
import type { SortState } from "./data-table-sort";
|
|
7
|
-
import { FilterPopover } from "./data-table-filter-popover";
|
|
8
|
-
import { Popover } from "./popover";
|
|
9
|
-
import { Tooltip } from "./tooltip";
|
|
10
|
-
import { Checkbox } from "./checkbox";
|
|
11
|
-
import type { DataTableLabels } from "./data-table-labels";
|
|
12
|
-
import { isTableOwnColumn } from "./data-table-row-actions";
|
|
13
|
-
import { columnLabel, logicalAlign, splitCellProps } from "./data-table-shared";
|
|
14
|
-
import { GROW_HEAD_CLASS } from "./data-table-fit";
|
|
15
|
-
import type { DataTableColumn, DataTableProps, FilterState } from "./data-table";
|
|
16
|
-
|
|
17
|
-
// DataTable's `<thead>` on a wide screen: the select-all box, and per column the sort
|
|
18
|
-
// button, the filter popover and the resize handle. Moved out of data-table.tsx whole
|
|
19
|
-
// (refactor audit 2026-10, MOD-3 step 5); the state it shows and changes stays the
|
|
20
|
-
// table's.
|
|
21
|
-
|
|
22
|
-
/** Whether a column is end-aligned — the header then puts its filter button first. */
|
|
23
|
-
const END_ALIGN = /(^|\s)text-end(?=\s|$)/;
|
|
24
|
-
|
|
25
|
-
/** The wide-screen table's header row. */
|
|
26
|
-
export function DataTableHead<T>({
|
|
27
|
-
visibleColumns,
|
|
28
|
-
selection,
|
|
29
|
-
compact,
|
|
30
|
-
labels,
|
|
31
|
-
locale,
|
|
32
|
-
isServer,
|
|
33
|
-
hasSortCallback,
|
|
34
|
-
hasFilterCallback,
|
|
35
|
-
sorts,
|
|
36
|
-
filters,
|
|
37
|
-
selectOptionsByKey,
|
|
38
|
-
multiSort,
|
|
39
|
-
resizable,
|
|
40
|
-
widths,
|
|
41
|
-
setWidths,
|
|
42
|
-
headRefs,
|
|
43
|
-
toggleSort,
|
|
44
|
-
setFilterValue,
|
|
45
|
-
clearFilter,
|
|
46
|
-
startResize,
|
|
47
|
-
moveResize,
|
|
48
|
-
finishResize,
|
|
49
|
-
ariaRowIndex,
|
|
50
|
-
lockedWidths,
|
|
51
|
-
selectionLockKey,
|
|
52
|
-
}: {
|
|
53
|
-
visibleColumns: DataTableColumn<T>[];
|
|
54
|
-
selection: DataTableProps<T>["selection"];
|
|
55
|
-
compact: boolean;
|
|
56
|
-
labels: DataTableLabels;
|
|
57
|
-
locale?: string;
|
|
58
|
-
isServer: boolean;
|
|
59
|
-
/** The caller owns the sort (`onSortsChange`), so a server table can offer it. */
|
|
60
|
-
hasSortCallback: boolean;
|
|
61
|
-
/** The caller owns the filters (`onFiltersChange`), likewise. */
|
|
62
|
-
hasFilterCallback: boolean;
|
|
63
|
-
sorts: readonly SortState[];
|
|
64
|
-
filters: FilterState;
|
|
65
|
-
selectOptionsByKey: Record<string, { value: string; label: string }[]>;
|
|
66
|
-
multiSort: boolean;
|
|
67
|
-
resizable: boolean;
|
|
68
|
-
widths: Record<string, number>;
|
|
69
|
-
setWidths: Dispatch<SetStateAction<Record<string, number>>>;
|
|
70
|
-
/** Filled here, one `<th>` per column — what a resize and "Auto-size" measure. */
|
|
71
|
-
headRefs: Map<string, HTMLTableCellElement>;
|
|
72
|
-
toggleSort: (key: string, shiftKey: boolean) => void;
|
|
73
|
-
setFilterValue: (key: string, value: FilterValue) => void;
|
|
74
|
-
clearFilter: (key: string) => void;
|
|
75
|
-
startResize: (e: React.PointerEvent<HTMLElement>, key: string) => void;
|
|
76
|
-
moveResize: (e: React.PointerEvent<HTMLElement>) => void;
|
|
77
|
-
finishResize: (e: React.PointerEvent<HTMLElement>, commit: boolean) => void;
|
|
78
|
-
/** Under `virtualize` (0.48.2): 1. */
|
|
79
|
-
ariaRowIndex?: number;
|
|
80
|
-
/** Under `virtualize` (0.48.2): each column's locked width, as the header cell's
|
|
81
|
-
* `min-width` — a `<col>` width alone gave way to a `grow` column's 100%. */
|
|
82
|
-
lockedWidths?: Record<string, number> | null;
|
|
83
|
-
/** The selection column's key in `lockedWidths`. */
|
|
84
|
-
selectionLockKey?: string;
|
|
85
|
-
}) {
|
|
86
|
-
return (
|
|
87
|
-
<thead className="bg-surface-2 text-secondary">
|
|
88
|
-
<tr className="text-start" aria-rowindex={ariaRowIndex}>
|
|
89
|
-
{selection && (
|
|
90
|
-
<th
|
|
91
|
-
scope="col"
|
|
92
|
-
style={
|
|
93
|
-
selectionLockKey && lockedWidths?.[selectionLockKey] !== undefined
|
|
94
|
-
? { minWidth: lockedWidths[selectionLockKey] }
|
|
95
|
-
: undefined
|
|
96
|
-
}
|
|
97
|
-
className={cn(
|
|
98
|
-
"sticky top-0 z-10 bg-surface-2 align-middle backdrop-blur-sm",
|
|
99
|
-
compact ? "w-8 px-2 py-1" : "w-10 px-3 py-2",
|
|
100
|
-
)}
|
|
101
|
-
>
|
|
102
|
-
{/* The kit's Checkbox, as the phone card's (refactor audit 2026-10-30, DSP-14): the
|
|
103
|
-
native box wore `accent-indigo-600` over the kit's `--brand` accent, indigo on
|
|
104
|
-
every palette and, in dark mode, a checked box that read as unchecked. "Some"
|
|
105
|
-
is its `indeterminate` dash, set on the element after every render as the
|
|
106
|
-
ref here did. */}
|
|
107
|
-
<Checkbox
|
|
108
|
-
className="align-middle"
|
|
109
|
-
inputClassName={compact ? "size-3.5" : undefined}
|
|
110
|
-
checked={selection.allSelected}
|
|
111
|
-
indeterminate={selection.someSelected && !selection.allSelected}
|
|
112
|
-
onChange={(e) => selection.onToggleAll(e.target.checked)}
|
|
113
|
-
aria-label={labels.selectAllRows}
|
|
114
|
-
/>
|
|
115
|
-
</th>
|
|
116
|
-
)}
|
|
117
|
-
{visibleColumns.map((col) => {
|
|
118
|
-
// In server mode the utilities stay hidden unless the caller
|
|
119
|
-
// takes them over and feeds them back into the server query.
|
|
120
|
-
const sortable = (!isServer || hasSortCallback) && !!col.sortBy;
|
|
121
|
-
const filter = !isServer || hasFilterCallback ? resolveFilter(col) : null;
|
|
122
|
-
const filterState = filters[col.key] ?? (filter ? defaultFilterState(filter) : undefined);
|
|
123
|
-
const sortIdx = sorts.findIndex((s) => s.key === col.key);
|
|
124
|
-
const active = sortIdx !== -1;
|
|
125
|
-
const Icon = active ? (sorts[sortIdx].dir === "asc" ? ArrowUp : ArrowDown) : ArrowUpDown;
|
|
126
|
-
const filterActive = filterState && isFilterActive(filterState);
|
|
127
|
-
// Logical, and a legacy `text-right` still counts — see `logicalAlign`.
|
|
128
|
-
const headClass = logicalAlign(col.headClassName);
|
|
129
|
-
const isEndAligned = !!headClass && END_ALIGN.test(headClass);
|
|
130
|
-
const width = widths[col.key];
|
|
131
|
-
const ownHead = splitCellProps(col.headProps);
|
|
132
|
-
const growFloor = col.grow && col.growMin != null ? `${col.growMin}rem` : undefined;
|
|
133
|
-
const pinnedHead = width ? { width, minWidth: width, maxWidth: width } : undefined;
|
|
134
|
-
return (
|
|
135
|
-
<th
|
|
136
|
-
{...ownHead.attrs}
|
|
137
|
-
key={col.key}
|
|
138
|
-
ref={(el) => {
|
|
139
|
-
if (el) headRefs.set(col.key, el);
|
|
140
|
-
else headRefs.delete(col.key);
|
|
141
|
-
}}
|
|
142
|
-
scope="col"
|
|
143
|
-
// Only a header the user can actually sort says anything: an
|
|
144
|
-
// `aria-sort` on a plain column is a control that is not there,
|
|
145
|
-
// and a persisted or URL sort can name a column with no `sortBy`
|
|
146
|
-
// (the sort chain drops it silently) — which would otherwise
|
|
147
|
-
// claim a sort the table is not applying.
|
|
148
|
-
//
|
|
149
|
-
// "none" on the rest is the half that was missing. Without it a
|
|
150
|
-
// sortable header is indistinguishable from a plain one until the
|
|
151
|
-
// user presses it. Secondary criteria read "none" too: ARIA allows
|
|
152
|
-
// exactly one sorted column, and the priority is carried by the
|
|
153
|
-
// badge and by what the header button announces on press.
|
|
154
|
-
aria-sort={
|
|
155
|
-
sortable ? (sortIdx === 0 ? (sorts[0].dir === "asc" ? "ascending" : "descending") : "none") : undefined
|
|
156
|
-
}
|
|
157
|
-
style={
|
|
158
|
-
ownHead.style || pinnedHead || lockedWidths?.[col.key] !== undefined || growFloor
|
|
159
|
-
? {
|
|
160
|
-
// A `grow` column's own floor (0.51.4), over the class's 10rem; a
|
|
161
|
-
// locked width below wins, as it does over the class.
|
|
162
|
-
...(growFloor ? { minWidth: growFloor } : null),
|
|
163
|
-
...ownHead.style,
|
|
164
|
-
...(lockedWidths?.[col.key] !== undefined ? { minWidth: lockedWidths[col.key] } : null),
|
|
165
|
-
...pinnedHead,
|
|
166
|
-
}
|
|
167
|
-
: undefined
|
|
168
|
-
}
|
|
169
|
-
className={cn(
|
|
170
|
-
"relative font-medium align-middle whitespace-nowrap",
|
|
171
|
-
compact ? "px-2 py-1" : "px-3 py-2",
|
|
172
|
-
// Keep the header visible while the user scrolls the page.
|
|
173
|
-
// Each <th> carries its own bg so the row doesn't render
|
|
174
|
-
// transparent over the data rows underneath.
|
|
175
|
-
"sticky top-0 z-10 bg-surface-2 backdrop-blur-sm",
|
|
176
|
-
col.grow && GROW_HEAD_CLASS,
|
|
177
|
-
logicalAlign(ownHead.className),
|
|
178
|
-
headClass,
|
|
179
|
-
)}
|
|
180
|
-
>
|
|
181
|
-
<div className={cn("flex items-center gap-1", isEndAligned && "flex-row-reverse")}>
|
|
182
|
-
{sortable ? (
|
|
183
|
-
<Tooltip label={multiSort ? labels.sortHint : undefined} portal>
|
|
184
|
-
<button
|
|
185
|
-
type="button"
|
|
186
|
-
onClick={(e) => toggleSort(col.key, e.shiftKey)}
|
|
187
|
-
className="flex items-center gap-1 text-start hover:text-primary"
|
|
188
|
-
>
|
|
189
|
-
<span>{col.header}</span>
|
|
190
|
-
<Icon className={cn("size-3", active ? "opacity-100" : "opacity-40")} />
|
|
191
|
-
{/* Priority badge, only meaningful with 2+ sort keys */}
|
|
192
|
-
{active && sorts.length > 1 && (
|
|
193
|
-
<span className="text-micro font-semibold leading-none text-brand">{sortIdx + 1}</span>
|
|
194
|
-
)}
|
|
195
|
-
</button>
|
|
196
|
-
</Tooltip>
|
|
197
|
-
) : (
|
|
198
|
-
// Plain text (refactor audit 2026-10-30, DSP-23 a): a `<button disabled>`
|
|
199
|
-
// round it was read out as a dimmed button on every column that cannot
|
|
200
|
-
// be sorted — a control that is not there.
|
|
201
|
-
<span className="text-start">{col.header}</span>
|
|
202
|
-
)}
|
|
203
|
-
{filter && (
|
|
204
|
-
<Popover
|
|
205
|
-
// 420 px at Normal, in rem so the calendar grows with its
|
|
206
|
-
// text (§3.2); Popover caps it at the viewport.
|
|
207
|
-
width={filter.type === "date" ? "26.25rem" : undefined}
|
|
208
|
-
// The panel is THIS column's filter, and says so. Unnamed it was
|
|
209
|
-
// announced as the kit-wide fallback, "Popover"; then as "Filter"
|
|
210
|
-
// in every column alike (round 0.34 Wave 2, BUG-7c).
|
|
211
|
-
labels={{ panel: labels.filterColumn(columnLabel(col, labels), false) }}
|
|
212
|
-
trigger={({ open, toggle, ref }) => (
|
|
213
|
-
<button
|
|
214
|
-
type="button"
|
|
215
|
-
ref={ref}
|
|
216
|
-
onClick={toggle}
|
|
217
|
-
// Named for its column, and for being filtered: the tint
|
|
218
|
-
// alone said that to nobody who cannot see it (BUG-7c).
|
|
219
|
-
aria-label={labels.filterColumn(columnLabel(col, labels), Boolean(filterActive))}
|
|
220
|
-
aria-haspopup="dialog"
|
|
221
|
-
aria-expanded={open}
|
|
222
|
-
className={cn(
|
|
223
|
-
"rounded p-1 transition-colors",
|
|
224
|
-
filterActive
|
|
225
|
-
? "bg-brand-soft text-brand-muted"
|
|
226
|
-
: "text-placeholder hover:text-secondary hover:bg-hover",
|
|
227
|
-
)}
|
|
228
|
-
>
|
|
229
|
-
<Filter className="size-3" />
|
|
230
|
-
</button>
|
|
231
|
-
)}
|
|
232
|
-
>
|
|
233
|
-
{() => (
|
|
234
|
-
<FilterPopover
|
|
235
|
-
column={col}
|
|
236
|
-
state={filterState ?? defaultFilterState(filter)}
|
|
237
|
-
onChange={(next) => setFilterValue(col.key, next)}
|
|
238
|
-
onClear={() => clearFilter(col.key)}
|
|
239
|
-
selectOptions={selectOptionsByKey[col.key] ?? []}
|
|
240
|
-
labels={labels}
|
|
241
|
-
locale={locale}
|
|
242
|
-
/>
|
|
243
|
-
)}
|
|
244
|
-
</Popover>
|
|
245
|
-
)}
|
|
246
|
-
</div>
|
|
247
|
-
{/* A `grow` column takes the rest: no width of its own to drag (0.48, KS N2). */}
|
|
248
|
-
{resizable && !isTableOwnColumn(col.key) && !col.grow && (
|
|
249
|
-
/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- a
|
|
250
|
-
pointer-only drag handle for a visual preference (column width); it is
|
|
251
|
-
deliberately not a tab stop, and no content or action depends on it. */
|
|
252
|
-
<span
|
|
253
|
-
role="separator"
|
|
254
|
-
aria-orientation="vertical"
|
|
255
|
-
onPointerDown={(e) => startResize(e, col.key)}
|
|
256
|
-
onPointerMove={moveResize}
|
|
257
|
-
onPointerUp={(e) => finishResize(e, true)}
|
|
258
|
-
onPointerCancel={(e) => finishResize(e, false)}
|
|
259
|
-
onDoubleClick={(e) => {
|
|
260
|
-
e.preventDefault();
|
|
261
|
-
setWidths((w) => {
|
|
262
|
-
const next = { ...w };
|
|
263
|
-
delete next[col.key];
|
|
264
|
-
return next;
|
|
265
|
-
});
|
|
266
|
-
}}
|
|
267
|
-
// `touch-none`: without it the browser claims a finger drag for
|
|
268
|
-
// scrolling before the first `pointermove` ever arrives.
|
|
269
|
-
// `end-0` and a translate that flips with it: the handle sits on the column's
|
|
270
|
-
// trailing edge, which is its left one in a right-to-left table.
|
|
271
|
-
className="absolute end-0 top-0 z-10 h-full w-1.5 -translate-x-1/2 rtl:translate-x-1/2 cursor-col-resize select-none touch-none hover:bg-brand-soft-hover"
|
|
272
|
-
/>
|
|
273
|
-
)}
|
|
274
|
-
</th>
|
|
275
|
-
);
|
|
276
|
-
})}
|
|
277
|
-
</tr>
|
|
278
|
-
</thead>
|
|
279
|
-
);
|
|
280
|
-
}
|