@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,474 +0,0 @@
|
|
|
1
|
-
import type { ReactElement, ReactNode } from "react";
|
|
2
|
-
import type { LucideIcon } from "lucide-react";
|
|
3
|
-
import { cn } from "../lib/cn";
|
|
4
|
-
import { toDate, useKitFormat, EMPTY_FORMATTED_VALUE } from "../lib/format";
|
|
5
|
-
import type { DateInput, FormatDateStyle, FormatRelativeTimeOptions } from "../lib/format";
|
|
6
|
-
import { useDayFormatter } from "../lib/day-format";
|
|
7
|
-
import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
|
|
8
|
-
import { toLocalIso } from "../lib/dates";
|
|
9
|
-
import { Chip } from "./chip";
|
|
10
|
-
import type { ChipLinkProps, ChipShape, ChipSize, ChipTone, ChipVariant } from "./chip";
|
|
11
|
-
import type { DataTableColumn } from "./data-table";
|
|
12
|
-
import { DEFAULT_ACCOUNT_STATE_LABELS } from "./account-chips-labels";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* The parts an admin roster repeats (0.18.0) — and only those.
|
|
16
|
-
*
|
|
17
|
-
* Kurvenschmiede (features/admin/users-panel.tsx, allowlist-panel.tsx) and keksdose
|
|
18
|
-
* (features/admin/users-panel.tsx, the allowlist card in admin-page.tsx) each built the
|
|
19
|
-
* same table: name over email, a role, whether the account is active, created, last
|
|
20
|
-
* login, a row of actions, and an allowlist with a note. What they share is not the
|
|
21
|
-
* table — the columns around it (keksdose's plan and privacy mode, Kurvenschmiede's
|
|
22
|
-
* owned-work counts and its role SELECT), the actions and every rule about who may do
|
|
23
|
-
* what are each app's own. What they share is the vocabulary: both spelled the same
|
|
24
|
-
* square, uppercase status chip by hand (keksdose's `Badge` with its own tone map,
|
|
25
|
-
* Kurvenschmiede's inline `<Chip size="xs" shape="square" caps>`), and both formatted
|
|
26
|
-
* their two date columns by hand (`toLocaleDateString` in one, a "3 days ago" helper
|
|
27
|
-
* in the other). So: {@link RoleChip}, {@link AccountStateChip} and
|
|
28
|
-
* {@link dateColumn}, and the roster stays the app's `DataTable`.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
/** The chip look both rosters use: a square, uppercase status tag. Each can be changed. */
|
|
32
|
-
interface AccountChipLook {
|
|
33
|
-
/** Default `sm` — keksdose's roster; Kurvenschmiede's denser lists pass `xs`. */
|
|
34
|
-
size?: ChipSize;
|
|
35
|
-
/** Default `soft`. `dot` for a column of them that should not outshout the names. */
|
|
36
|
-
variant?: ChipVariant;
|
|
37
|
-
/** Default `square`: a chip in a table cell, beside square controls. */
|
|
38
|
-
shape?: ChipShape;
|
|
39
|
-
/** Default true — the status-badge type. */
|
|
40
|
-
caps?: boolean;
|
|
41
|
-
className?: string;
|
|
42
|
-
[key: `data-${string}`]: string | number | boolean | undefined;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/* ── RoleChip ──────────────────────────────────────────────────────────────── */
|
|
46
|
-
|
|
47
|
-
/** How one role is drawn. `label` is the app's, translated. */
|
|
48
|
-
export interface RoleDefinition {
|
|
49
|
-
label: string;
|
|
50
|
-
tone?: ChipTone;
|
|
51
|
-
/**
|
|
52
|
-
* A lucide component or an element — Kurvenschmiede marks its admins with a shield.
|
|
53
|
-
* Unlike {@link href} and {@link variant}, it shows EVERYWHERE the role is drawn: in
|
|
54
|
-
* {@link AccountRoleChip} and in {@link RoleChip} (the roster's column) alike. That is
|
|
55
|
-
* intended (0.43, keksdose's question): the glyph is part of how the role reads, so the
|
|
56
|
-
* shield on the header's chip is the shield in the users list. An app that wants the
|
|
57
|
-
* glyph in one place only hands the other a second vocabulary without `icon`.
|
|
58
|
-
*/
|
|
59
|
-
icon?: LucideIcon | ReactElement;
|
|
60
|
-
/**
|
|
61
|
-
* 0.42.0 (docs/admin-harmonization.md §2.1, settings §12.3): the role's tool — an
|
|
62
|
-
* admin's `/admin`, a reviewer's `/translations`. {@link AccountRoleChip} is a link to
|
|
63
|
-
* it; a role without one gets a plain chip. {@link RoleChip} ignores it: a roster's
|
|
64
|
-
* chips name a role, they are not a way in.
|
|
65
|
-
*/
|
|
66
|
-
href?: string;
|
|
67
|
-
/**
|
|
68
|
-
* 0.42.0 (keksdose build review): this role's look in {@link AccountRoleChip} — keksdose
|
|
69
|
-
* draws only ADMIN `solid` and its REVIEWER and MEMBER `soft`. Default `solid`, the
|
|
70
|
-
* header's look; the chip's own `variant` prop wins over it. {@link RoleChip} ignores
|
|
71
|
-
* it: a roster's column keeps one look, set on the column.
|
|
72
|
-
*/
|
|
73
|
-
variant?: ChipVariant;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Every role an app has, keyed by the value its API sends. Annotate the app's table
|
|
78
|
-
* with it (`const ROLES: RoleVocabulary<UserRole> = {…}`) and TypeScript asks for a
|
|
79
|
-
* label when a role is added.
|
|
80
|
-
*/
|
|
81
|
-
export type RoleVocabulary<R extends string = string> = Readonly<Record<R, RoleDefinition>>;
|
|
82
|
-
|
|
83
|
-
export interface RoleChipProps<R extends string = string> extends AccountChipLook {
|
|
84
|
-
/**
|
|
85
|
-
* The role key as the API sends it. `null` / `undefined` renders nothing. Named
|
|
86
|
-
* `value`, not `role`, because `role` on a JSX element is the ARIA role — the lint
|
|
87
|
-
* rule and every reader would take it for one.
|
|
88
|
-
*/
|
|
89
|
-
value: R | null | undefined;
|
|
90
|
-
/** What each key is called and how it is toned. A key missing here is shown as the
|
|
91
|
-
* key itself, in `neutral`: an unknown role is still a fact the admin should see. */
|
|
92
|
-
roles: Readonly<Partial<Record<R, RoleDefinition>>>;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* A role as a chip: the API's key looked up in the app's {@link RoleVocabulary}.
|
|
97
|
-
*
|
|
98
|
-
* The vocabulary is a prop and not kit English, because the roles are the app's —
|
|
99
|
-
* Kurvenschmiede has admin, member and customer, keksdose admin and user, kastlan its
|
|
100
|
-
* own — and so are their names. Carries `data-role` with the key, for a test or a
|
|
101
|
-
* style hook.
|
|
102
|
-
*/
|
|
103
|
-
export function RoleChip<R extends string = string>({
|
|
104
|
-
value: role,
|
|
105
|
-
roles,
|
|
106
|
-
size = "sm",
|
|
107
|
-
variant,
|
|
108
|
-
shape = "square",
|
|
109
|
-
caps = true,
|
|
110
|
-
className,
|
|
111
|
-
...rest
|
|
112
|
-
}: RoleChipProps<R>) {
|
|
113
|
-
if (role === null || role === undefined || role === "") return null;
|
|
114
|
-
const def = roles[role];
|
|
115
|
-
return (
|
|
116
|
-
<Chip
|
|
117
|
-
{...rest}
|
|
118
|
-
data-role={role}
|
|
119
|
-
tone={def?.tone ?? "neutral"}
|
|
120
|
-
icon={def?.icon}
|
|
121
|
-
size={size}
|
|
122
|
-
variant={variant}
|
|
123
|
-
shape={shape}
|
|
124
|
-
caps={caps}
|
|
125
|
-
className={className}
|
|
126
|
-
>
|
|
127
|
-
{def?.label ?? role}
|
|
128
|
-
</Chip>
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/* ── AccountRoleChip ───────────────────────────────────────────────────────── */
|
|
133
|
-
|
|
134
|
-
export interface AccountRoleChipProps<R extends string = string> extends RoleChipProps<R> {
|
|
135
|
-
/**
|
|
136
|
-
* Runs on the way to the role's tool — the account menu's `close`, so the panel does
|
|
137
|
-
* not stay open over the page it just navigated to (keksdose F7). Only called on a
|
|
138
|
-
* link chip.
|
|
139
|
-
*/
|
|
140
|
-
onNavigate?: () => void;
|
|
141
|
-
/** Your router's link for the role's `href`. Default: the `<UiKitProvider
|
|
142
|
-
* linkComponent>`, then `<a>` — {@link Chip}'s `renderLink`. */
|
|
143
|
-
renderLink?: (props: ChipLinkProps) => ReactElement;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* The role in the account menu's header (0.42.0, docs/admin-harmonization.md §2.1, §7):
|
|
148
|
-
* {@link RoleChip} in keksdose's look — `solid`, `sm`, `square`, `caps`, the role's icon
|
|
149
|
-
* and tone — made for `TopBarActionMenu`'s `header.extra`:
|
|
150
|
-
*
|
|
151
|
-
* extra: (close) => <AccountRoleChip value={me.role} roles={ROLES} onNavigate={close} />
|
|
152
|
-
*
|
|
153
|
-
* A role whose {@link RoleDefinition.href} is set is a shortcut to its tool: the chip is a
|
|
154
|
-
* link (through `renderLink`, else the provider's link, as {@link Chip} draws links) and
|
|
155
|
-
* calls `onNavigate` on the click. Any other role is a plain chip — every account shows
|
|
156
|
-
* its role (§7, "Always a badge"). The words and tones are the app's vocabulary; the kit
|
|
157
|
-
* adds none. `solid` stays the default, so a role the app gives no look still reads as
|
|
158
|
-
* the header's tag; a role that should sit quieter (keksdose's MEMBER and REVIEWER) sets
|
|
159
|
-
* {@link RoleDefinition.variant} `soft` in the vocabulary. Carries `data-role` with the key.
|
|
160
|
-
*/
|
|
161
|
-
export function AccountRoleChip<R extends string = string>({
|
|
162
|
-
value: role,
|
|
163
|
-
roles,
|
|
164
|
-
onNavigate,
|
|
165
|
-
renderLink,
|
|
166
|
-
size = "sm",
|
|
167
|
-
variant,
|
|
168
|
-
shape = "square",
|
|
169
|
-
caps = true,
|
|
170
|
-
className,
|
|
171
|
-
...rest
|
|
172
|
-
}: AccountRoleChipProps<R>) {
|
|
173
|
-
if (role === null || role === undefined || role === "") return null;
|
|
174
|
-
const def = roles[role];
|
|
175
|
-
const look = {
|
|
176
|
-
...rest,
|
|
177
|
-
"data-role": role,
|
|
178
|
-
tone: def?.tone ?? "neutral",
|
|
179
|
-
icon: def?.icon,
|
|
180
|
-
size,
|
|
181
|
-
// The prop, then the role's own look, then the header's `solid`.
|
|
182
|
-
variant: variant ?? def?.variant ?? "solid",
|
|
183
|
-
shape,
|
|
184
|
-
caps,
|
|
185
|
-
className,
|
|
186
|
-
} as const;
|
|
187
|
-
const label = def?.label ?? role;
|
|
188
|
-
if (def?.href) {
|
|
189
|
-
return (
|
|
190
|
-
<Chip {...look} href={def.href} renderLink={renderLink} onClick={onNavigate ? () => onNavigate() : undefined}>
|
|
191
|
-
{label}
|
|
192
|
-
</Chip>
|
|
193
|
-
);
|
|
194
|
-
}
|
|
195
|
-
return <Chip {...look}>{label}</Chip>;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/* ── AccountStateChip ──────────────────────────────────────────────────────── */
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* The states both rosters show, each as the app's own flag maps onto it:
|
|
202
|
-
*
|
|
203
|
-
* - `active` / `inactive` — the account may sign in, or an admin switched it off
|
|
204
|
-
* (both apps' `is_active`).
|
|
205
|
-
* - `invited` — on the allowlist and mailed, not registered yet (an allowlist row).
|
|
206
|
-
* - `registered` — an allowlist row whose address has an account now (Kurvenschmiede).
|
|
207
|
-
* - `unverified` — the email address is not confirmed (keksdose).
|
|
208
|
-
* - `passwordChange` — must set a new password at the next sign-in (keksdose).
|
|
209
|
-
* - `deletion` — 0.30.0: the user asked for the account to be deleted
|
|
210
|
-
* (docs/user-admin-harmonization.md §2.1, §6.4). It is deactivated at once and erased
|
|
211
|
-
* on a date (`after_days`: keksdose, Kurvenschmiede) or by an operator (kastlan). The
|
|
212
|
-
* chip says the date when there is one ({@link AccountStateChipProps.date}), and
|
|
213
|
-
* "Deletion requested" when there is none. It stands IN PLACE of `inactive`: an
|
|
214
|
-
* account marked for deletion is always deactivated, and two chips would say it twice.
|
|
215
|
-
*
|
|
216
|
-
* An account can be several at once (inactive AND unverified): render one chip per
|
|
217
|
-
* state, as keksdose's state column does.
|
|
218
|
-
*/
|
|
219
|
-
export type AccountState =
|
|
220
|
-
"active" | "inactive" | "invited" | "registered" | "unverified" | "passwordChange" | "deletion";
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* The `accountState` namespace. One word per state, plus the two forms of `deletion`.
|
|
224
|
-
*
|
|
225
|
-
* The 0.30 keys are OPTIONAL, like every key added to a namespace an app annotates
|
|
226
|
-
* (`const L: AccountStateLabels = {…}`): a new required key would be a compile error in
|
|
227
|
-
* each app on its next update. Left out, they fall back to the provider's, then English.
|
|
228
|
-
*/
|
|
229
|
-
export interface AccountStateLabels extends Record<Exclude<AccountState, "deletion">, string> {
|
|
230
|
-
/** 0.30.0: an account marked for deletion with no date — kastlan's `operator` mode,
|
|
231
|
-
* where an operator erases it (§6.4). "Deletion requested". */
|
|
232
|
-
deletion?: string;
|
|
233
|
-
/** 0.30.0: an account that will be erased on `date`, already formatted in the
|
|
234
|
-
* reader's locale — the `after_days` mode. "Deletion on 6 Nov 2026". */
|
|
235
|
-
deletionOn?: (date: string) => string;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// Defined in ./account-chips-labels, which holds no component code (0.34, KS U8).
|
|
239
|
-
export { DEFAULT_ACCOUNT_STATE_LABELS };
|
|
240
|
-
|
|
241
|
-
/** The default tone of each state: green for the normal case, red for switched off
|
|
242
|
-
* (and for going, `deletion`), amber for something the user still has to do, blue for
|
|
243
|
-
* an open invitation. */
|
|
244
|
-
export const ACCOUNT_STATE_TONES: Readonly<Record<AccountState, ChipTone>> = {
|
|
245
|
-
active: "success",
|
|
246
|
-
inactive: "danger",
|
|
247
|
-
invited: "info",
|
|
248
|
-
registered: "neutral",
|
|
249
|
-
unverified: "warning",
|
|
250
|
-
passwordChange: "warning",
|
|
251
|
-
// Red like `inactive`, which it replaces: the account cannot sign in, and it is going.
|
|
252
|
-
deletion: "danger",
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
export interface AccountStateChipProps extends AccountChipLook {
|
|
256
|
-
state: AccountState;
|
|
257
|
-
/**
|
|
258
|
-
* 0.30.0, `state="deletion"` only: the day the account will be erased — the row's
|
|
259
|
-
* `deletion_scheduled_at` (§3.2, §6.4). Formatted as a date in the reader's locale
|
|
260
|
-
* ("Deletion on 6 Nov 2026"), through the provider's `formatDate` when the app set
|
|
261
|
-
* one, as {@link DateMark} does. Missing or `null` — an operator erases it, so there
|
|
262
|
-
* is no date — the chip says "Deletion requested". Ignored for every other state.
|
|
263
|
-
*/
|
|
264
|
-
date?: DateInput;
|
|
265
|
-
/** Over the provider's locale, for the `deletion` date. */
|
|
266
|
-
locale?: string;
|
|
267
|
-
/** Over {@link ACCOUNT_STATE_TONES} — Kurvenschmiede draws `inactive` neutral. */
|
|
268
|
-
tone?: ChipTone;
|
|
269
|
-
/** Over the label, for an app whose word for the state is its own ("Deactivated"). */
|
|
270
|
-
children?: ReactNode;
|
|
271
|
-
/** Prop > `<UiKitProvider labels={{ accountState }}>` > English. */
|
|
272
|
-
labels?: LabelOverride<AccountStateLabels>;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* An account's state as a chip, in the kit's words and tones. Carries `data-state`
|
|
277
|
-
* with the key.
|
|
278
|
-
*/
|
|
279
|
-
export function AccountStateChip({
|
|
280
|
-
state,
|
|
281
|
-
date,
|
|
282
|
-
locale: localeProp,
|
|
283
|
-
tone,
|
|
284
|
-
children,
|
|
285
|
-
labels: labelsProp,
|
|
286
|
-
size = "sm",
|
|
287
|
-
variant,
|
|
288
|
-
shape = "square",
|
|
289
|
-
caps = true,
|
|
290
|
-
className,
|
|
291
|
-
...rest
|
|
292
|
-
}: AccountStateChipProps) {
|
|
293
|
-
// An `undefined` in the prop is skipped (the provider's merge does that), so an
|
|
294
|
-
// optional value cannot blank a default.
|
|
295
|
-
const labels = useKitLabels("accountState", DEFAULT_ACCOUNT_STATE_LABELS, labelsProp);
|
|
296
|
-
// The kit's one day ladder: the provider's `formatDate`, else `Intl` in the provider's
|
|
297
|
-
// locale and `timeZone` (refactor audit 2026-10-30, DUP-2).
|
|
298
|
-
const day = useDayFormatter(null, localeProp);
|
|
299
|
-
const when = state === "deletion" ? toDate(date ?? null) : null;
|
|
300
|
-
let text: ReactNode;
|
|
301
|
-
if (state !== "deletion") text = labels[state];
|
|
302
|
-
else if (when) {
|
|
303
|
-
// A date in a SENTENCE, so no weekday (keksdose's rule, KitDateFormatContext).
|
|
304
|
-
text = (labels.deletionOn ?? DEFAULT_ACCOUNT_STATE_LABELS.deletionOn)(day(date));
|
|
305
|
-
} else text = labels.deletion ?? DEFAULT_ACCOUNT_STATE_LABELS.deletion;
|
|
306
|
-
return (
|
|
307
|
-
<Chip
|
|
308
|
-
{...rest}
|
|
309
|
-
data-state={state}
|
|
310
|
-
data-date={when ? toLocalIso(when) : undefined}
|
|
311
|
-
tone={tone ?? ACCOUNT_STATE_TONES[state]}
|
|
312
|
-
size={size}
|
|
313
|
-
variant={variant}
|
|
314
|
-
shape={shape}
|
|
315
|
-
caps={caps}
|
|
316
|
-
className={className}
|
|
317
|
-
>
|
|
318
|
-
{children ?? text}
|
|
319
|
-
</Chip>
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/* ── Date columns ──────────────────────────────────────────────────────────── */
|
|
324
|
-
|
|
325
|
-
export interface DateMarkProps {
|
|
326
|
-
value: DateInput;
|
|
327
|
-
/**
|
|
328
|
-
* `"date"` (default): the date in `dateStyle` — "Created". `"relative"`: how long
|
|
329
|
-
* ago — "Last login", where the question is "recently?" — with the full date and
|
|
330
|
-
* time beside it (keksdose's last-seen column; see `absolute`).
|
|
331
|
-
*/
|
|
332
|
-
display?: "date" | "relative";
|
|
333
|
-
/**
|
|
334
|
-
* Where a `"relative"` mark puts the exact date and time (0.32,
|
|
335
|
-
* docs/text-size-harmonization.md §4: "relative dates show the absolute one beside
|
|
336
|
-
* them", at every size — a touch screen never opens the tooltip it used to live in):
|
|
337
|
-
* `"below"` (default), a muted second line under the words, so a table column keeps
|
|
338
|
-
* its width; `"inline"`, after them on the same line, for a sentence or a wide cell.
|
|
339
|
-
*/
|
|
340
|
-
absolute?: "below" | "inline";
|
|
341
|
-
/** Default `medium`. Under `"relative"`, the style of the exact date beside it (default
|
|
342
|
-
* `dateTime`) and of the date `relative.absoluteAfterDays` switches to. Given, it wins
|
|
343
|
-
* over the provider's `formatDate`. */
|
|
344
|
-
dateStyle?: FormatDateStyle | Intl.DateTimeFormatOptions;
|
|
345
|
-
/** `formatRelativeTime` options: `numeric`, `style`, `absoluteAfterDays`, `now`. */
|
|
346
|
-
relative?: Omit<FormatRelativeTimeOptions, "locale" | "empty" | "absoluteStyle">;
|
|
347
|
-
/** What a missing value reads as. Default "—"; a last-login column passes its
|
|
348
|
-
* translated "Never". */
|
|
349
|
-
empty?: ReactNode;
|
|
350
|
-
/** Over the provider's locale. */
|
|
351
|
-
locale?: string;
|
|
352
|
-
className?: string;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
/**
|
|
356
|
-
* A date in a table cell: a `<time>` with a machine-readable `dateTime`, nowrap and
|
|
357
|
-
* tabular figures, in the provider's locale and `timeZone` — or `empty` when there is none.
|
|
358
|
-
*
|
|
359
|
-
* `display="date"` without a `dateStyle` is written by `<UiKitProvider formatDate>` when
|
|
360
|
-
* the app set one (keksdose K12: its `DateCell` exists to put every column's date in the
|
|
361
|
-
* app's date-format preference, weekday and all — dev#546), called with the calendar day
|
|
362
|
-
* of the value as `"YYYY-MM-DD"` (in the provider's `timeZone`, else the device's) and
|
|
363
|
-
* `weekday: true`. Without one, or for an empty answer, it is `Intl`'s `medium` date as
|
|
364
|
-
* before. The relative display is not a calendar day and keeps `formatRelativeTime`.
|
|
365
|
-
*/
|
|
366
|
-
export function DateMark({
|
|
367
|
-
value,
|
|
368
|
-
display = "date",
|
|
369
|
-
dateStyle,
|
|
370
|
-
relative,
|
|
371
|
-
absolute = "below",
|
|
372
|
-
empty = EMPTY_FORMATTED_VALUE,
|
|
373
|
-
locale: localeProp,
|
|
374
|
-
className,
|
|
375
|
-
}: DateMarkProps) {
|
|
376
|
-
// The provider's `timeZone` (0.46) as well as its locale, also for the relative words
|
|
377
|
-
// and the exact line (refactor audit 2026-10-30, DUP-2: the raw formatters ignored it).
|
|
378
|
-
const { formatDate, formatRelativeTime } = useKitFormat(localeProp);
|
|
379
|
-
const day = useDayFormatter(null, localeProp);
|
|
380
|
-
const date = toDate(value);
|
|
381
|
-
const cls = cn("whitespace-nowrap tabular-nums", className);
|
|
382
|
-
if (!date) return <span className={cn(cls, "text-muted")}>{empty}</span>;
|
|
383
|
-
if (display === "date") {
|
|
384
|
-
return (
|
|
385
|
-
<time dateTime={date.toISOString()} className={cls}>
|
|
386
|
-
{day(value, { weekday: true, style: dateStyle ?? "medium", preference: dateStyle === undefined })}
|
|
387
|
-
</time>
|
|
388
|
-
);
|
|
389
|
-
}
|
|
390
|
-
const text = formatRelativeTime(date, { ...relative, absoluteStyle: dateStyle ?? "medium" });
|
|
391
|
-
const exact = formatDate(date, dateStyle ?? "dateTime");
|
|
392
|
-
// Past `absoluteAfterDays` the relative words already ARE the date; then the exact
|
|
393
|
-
// line alone, rather than the same day twice.
|
|
394
|
-
const sameDay = text === formatDate(date, dateStyle ?? "medium");
|
|
395
|
-
const iso = date.toISOString();
|
|
396
|
-
if (sameDay) {
|
|
397
|
-
return (
|
|
398
|
-
<time dateTime={iso} className={cls}>
|
|
399
|
-
{exact}
|
|
400
|
-
</time>
|
|
401
|
-
);
|
|
402
|
-
}
|
|
403
|
-
// The exact date and time in the layout, never only in a tooltip (§4). Still no tab
|
|
404
|
-
// stop: a roster of fifty rows would be fifty more of them.
|
|
405
|
-
return (
|
|
406
|
-
<time
|
|
407
|
-
dateTime={iso}
|
|
408
|
-
data-slot="date-mark"
|
|
409
|
-
className={cn(absolute === "below" ? "inline-flex flex-col leading-tight" : "inline", className)}
|
|
410
|
-
>
|
|
411
|
-
<span className="whitespace-nowrap tabular-nums">{text}</span>
|
|
412
|
-
{absolute === "inline" && " · "}
|
|
413
|
-
<span className={cn("whitespace-nowrap tabular-nums text-muted", absolute === "below" && "text-xs")}>
|
|
414
|
-
{exact}
|
|
415
|
-
</span>
|
|
416
|
-
</time>
|
|
417
|
-
);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
export interface DateColumnOptions<T> extends Omit<DateMarkProps, "value" | "className"> {
|
|
421
|
-
key: string;
|
|
422
|
-
header: ReactNode;
|
|
423
|
-
/** The value of this row: an ISO string, epoch ms, a Date, or null for none. */
|
|
424
|
-
value: (row: T) => DateInput;
|
|
425
|
-
/** Sortable by the instant; rows with no date sort last either way. Default true. */
|
|
426
|
-
sortable?: boolean;
|
|
427
|
-
/** Default `desc` — a date column is sorted to find the newest. */
|
|
428
|
-
firstSort?: "asc" | "desc";
|
|
429
|
-
/** Add the table's from–to date filter over the column. Default false. */
|
|
430
|
-
filter?: boolean;
|
|
431
|
-
/** Further column settings (`mobileHidden`, `headClassName`, …), merged over. */
|
|
432
|
-
column?: Partial<DataTableColumn<T>>;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
/**
|
|
436
|
-
* A {@link DataTableColumn} for a date: {@link DateMark} cells, sorted by the instant
|
|
437
|
-
* (newest first on the first click), optionally the date filter. The roster's
|
|
438
|
-
* "Created" is `dateColumn({ key, header, value })`; its "Last login" adds
|
|
439
|
-
* `display: "relative", empty: t("never")`.
|
|
440
|
-
*/
|
|
441
|
-
export function dateColumn<T>({
|
|
442
|
-
key,
|
|
443
|
-
header,
|
|
444
|
-
value,
|
|
445
|
-
sortable = true,
|
|
446
|
-
firstSort = "desc",
|
|
447
|
-
filter = false,
|
|
448
|
-
column,
|
|
449
|
-
...mark
|
|
450
|
-
}: DateColumnOptions<T>): DataTableColumn<T> {
|
|
451
|
-
return {
|
|
452
|
-
key,
|
|
453
|
-
header,
|
|
454
|
-
cell: (row) => <DateMark value={value(row)} {...mark} />,
|
|
455
|
-
sortBy: sortable ? (row) => toDate(value(row))?.getTime() ?? null : undefined,
|
|
456
|
-
firstSort: sortable ? firstSort : undefined,
|
|
457
|
-
filter: filter
|
|
458
|
-
? {
|
|
459
|
-
type: "date",
|
|
460
|
-
// A string goes as it is: the filter reads a timestamp's local day itself.
|
|
461
|
-
// A Date or epoch value goes as its LOCAL day, the one the cell shows —
|
|
462
|
-
// `toISOString()` handed over the UTC day, and in Berlin a 00:30 row was
|
|
463
|
-
// filtered under the day before (round 0.34 BUG-2).
|
|
464
|
-
getValue: (row) => {
|
|
465
|
-
const raw = value(row);
|
|
466
|
-
if (typeof raw === "string") return raw;
|
|
467
|
-
const date = toDate(raw);
|
|
468
|
-
return date ? toLocalIso(date) : null;
|
|
469
|
-
},
|
|
470
|
-
}
|
|
471
|
-
: undefined,
|
|
472
|
-
...column,
|
|
473
|
-
};
|
|
474
|
-
}
|