@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,10 +0,0 @@
|
|
|
1
|
-
// The English words of ./signed-amount, in a module with no component code: the English
|
|
2
|
-
// catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
|
|
3
|
-
// chunk like the other languages (0.34, KS U8). ./signed-amount re-exports them.
|
|
4
|
-
|
|
5
|
-
import type { SignedAmountLabels } from "./signed-amount";
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_SIGNED_AMOUNT_LABELS: SignedAmountLabels = {
|
|
8
|
-
positive: (amount) => `plus ${amount}`,
|
|
9
|
-
negative: (amount) => `minus ${amount}`,
|
|
10
|
-
};
|
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithRef, ReactNode } from "react";
|
|
2
|
-
import { ArrowDown, ArrowUp, Minus } from "lucide-react";
|
|
3
|
-
import { cn } from "../lib/cn";
|
|
4
|
-
import { formatMoney, formatNumber, formatPercent } from "../lib/format";
|
|
5
|
-
import { useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
|
|
6
|
-
import { DEFAULT_STAT_TILE_LABELS } from "./stat-tile";
|
|
7
|
-
import type { StatTileLabels } from "./stat-tile";
|
|
8
|
-
import { DEFAULT_SIGNED_AMOUNT_LABELS } from "./signed-amount-labels";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* The text colours a figure can carry, token-backed — `StatTile`'s tones, as a class
|
|
12
|
-
* any span can take.
|
|
13
|
-
*
|
|
14
|
-
* - `default` — the primary text colour. `muted` — the secondary, quiet one.
|
|
15
|
-
* - `income` / `expense` / `net` — the money trio (CVD-safe teal / amber / violet).
|
|
16
|
-
* - `success` / `warning` / `danger` / `info` — a verdict: a rent rise is the tenant's
|
|
17
|
-
* bad news (kastlan lease-columns), a vote "for" is green (meeting-agenda-tab).
|
|
18
|
-
* - `brand` — the app's accent.
|
|
19
|
-
*
|
|
20
|
-
* Colour is never the only carrier: pair a verdict with an arrow, a word, or a sign.
|
|
21
|
-
*/
|
|
22
|
-
export type TextTone =
|
|
23
|
-
"default" | "muted" | "brand" | "income" | "expense" | "net" | "success" | "warning" | "danger" | "info";
|
|
24
|
-
|
|
25
|
-
const TEXT_TONE: Record<TextTone, string> = {
|
|
26
|
-
default: "text-primary",
|
|
27
|
-
muted: "text-muted",
|
|
28
|
-
brand: "text-brand",
|
|
29
|
-
income: "text-money-income",
|
|
30
|
-
expense: "text-money-expense",
|
|
31
|
-
net: "text-money-net",
|
|
32
|
-
success: "text-success",
|
|
33
|
-
warning: "text-warning",
|
|
34
|
-
danger: "text-danger",
|
|
35
|
-
info: "text-info",
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The class that colours text in `tone` — for the spans kastlan colours by hand with
|
|
40
|
-
* `text-[var(--danger)]` / `text-emerald-600` (settlement-table, changelog-page,
|
|
41
|
-
* meeting-agenda-tab), so the palette they draw from is the kit's tokens.
|
|
42
|
-
*/
|
|
43
|
-
export function toneTextClass(tone: TextTone): string {
|
|
44
|
-
return TEXT_TONE[tone];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface ToneProps extends ComponentPropsWithRef<"span"> {
|
|
48
|
-
tone: TextTone;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** A `<span>` in a {@link TextTone} — `<Tone tone="success">{votesFor}</Tone>`. */
|
|
52
|
-
export function Tone({ tone, className, ...rest }: ToneProps) {
|
|
53
|
-
return <span {...rest} className={cn(TEXT_TONE[tone], className)} />;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/* ── Signed amounts ──────────────────────────────────────────────────────── */
|
|
57
|
-
|
|
58
|
-
/** Which way is +1: `up` for a figure where more is good news (income, savings),
|
|
59
|
-
* `down` where less is (a rent the tenant pays, a cost). */
|
|
60
|
-
export type GoodDirection = "up" | "down";
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* How a signed figure is coloured:
|
|
64
|
-
* - `signed` (default) — money read by its own sign: above zero `income`, below zero
|
|
65
|
-
* `expense`, zero muted. A balance, a net.
|
|
66
|
-
* - `income` / `expense` / `neutral` — one colour whatever the sign (`neutral` is the
|
|
67
|
-
* text's own colour).
|
|
68
|
-
* - `verdict` — the change judged by {@link SignedAmountProps.goodDirection}: good
|
|
69
|
-
* news `success`, bad news `danger`, zero muted. Setting `goodDirection` implies it.
|
|
70
|
-
*/
|
|
71
|
-
export type SignedAmountTone = "signed" | "income" | "expense" | "neutral" | "verdict";
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* The colours a VERDICT is painted in (`goodDirection` set, or `tone="verdict"`):
|
|
75
|
-
* - `status` (default) — `success` / `danger`: good news, bad news.
|
|
76
|
-
* - `money` — `income` / `expense` (the `.text-money-pos` / `.text-money-neg` pair):
|
|
77
|
-
* the app's ONE money palette (keksdose dev#434). A grocery price going UP is money
|
|
78
|
-
* going out, so with `goodDirection="down"` it wears the expense colour every other
|
|
79
|
-
* outflow in the app wears — not a red that says "error". keksdose coloured its
|
|
80
|
-
* three price-change sites by hand for want of this.
|
|
81
|
-
*/
|
|
82
|
-
export type VerdictPalette = "status" | "money";
|
|
83
|
-
|
|
84
|
-
/** What a signed figure says to a screen reader, whose readers disagree about a
|
|
85
|
-
* leading "+" (most skip it) and a "−" (some read "dash", some nothing). */
|
|
86
|
-
export interface SignedAmountLabels {
|
|
87
|
-
/** A figure above zero. `amount` is formatted and unsigned. */
|
|
88
|
-
positive: (amount: string) => string;
|
|
89
|
-
/** A figure below zero. `amount` is formatted and unsigned. */
|
|
90
|
-
negative: (amount: string) => string;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Defined in ./signed-amount-labels, which holds no component code (0.34, KS U8).
|
|
94
|
-
export { DEFAULT_SIGNED_AMOUNT_LABELS };
|
|
95
|
-
|
|
96
|
-
interface SignedFormatProps {
|
|
97
|
-
/** ISO 4217 code: format as money. */
|
|
98
|
-
currency?: string;
|
|
99
|
-
/** `"percent"` reads `value` as a RATIO (`0.12` → 12 %), as `StatTile`'s delta does
|
|
100
|
-
* — or as percent POINTS with `ratio={false}`. */
|
|
101
|
-
unit?: "value" | "percent";
|
|
102
|
-
/** With `unit="percent"`: `true` (default) — `value` is a ratio, `0.12` is 12 %.
|
|
103
|
-
* `false` — `value` is already in percent POINTS, `12` is 12 %, as `formatPercent`'s
|
|
104
|
-
* `ratio` option reads it. Backends send points (keksdose's price changes, kastlan's
|
|
105
|
-
* `change_pct`), and without this every site divided by 100 — and wrote its
|
|
106
|
-
* `flatWithin` as a ratio (`0.005`) beside a value it had to convert. With
|
|
107
|
-
* `ratio={false}` the value AND `flatWithin` are in points (`flatWithin={0.5}` is
|
|
108
|
-
* half a point). Ignored for any other unit. */
|
|
109
|
-
ratio?: boolean;
|
|
110
|
-
/** Compact notation: 12 400 → "12K". */
|
|
111
|
-
compact?: boolean;
|
|
112
|
-
/** Fraction digits, as `formatNumber`'s `digits`. */
|
|
113
|
-
digits?: number | { min?: number; max?: number };
|
|
114
|
-
/** Formats the UNSIGNED magnitude, replacing the `Intl` default outright. The sign
|
|
115
|
-
* is the component's. */
|
|
116
|
-
format?: (magnitude: number) => string;
|
|
117
|
-
locale?: string;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function useMagnitudeFormatter({ currency, unit, ratio, compact, digits, format, locale }: SignedFormatProps) {
|
|
121
|
-
const kitLocale = useKitLocale(locale);
|
|
122
|
-
return (magnitude: number): string => {
|
|
123
|
-
if (format) return format(magnitude);
|
|
124
|
-
if (unit === "percent") return formatPercent(magnitude, { locale: kitLocale, compact, digits, ratio });
|
|
125
|
-
if (currency) return formatMoney(magnitude, currency, { locale: kitLocale, compact, digits });
|
|
126
|
-
return formatNumber(magnitude, { locale: kitLocale, compact, digits });
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/** `flatWithin` widens "no change" from exactly zero to a band round it: a price that
|
|
131
|
-
* moved by a fraction of a cent, a ratio that rounds to "0.0 %", is not a rise, and an
|
|
132
|
-
* arrow and a colour for it claim one. Inclusive — `|value| ≤ flatWithin` is flat. */
|
|
133
|
-
function directionOf(value: number, flatWithin = 0): "up" | "down" | "flat" {
|
|
134
|
-
if (Math.abs(value) <= Math.max(0, flatWithin)) return "flat";
|
|
135
|
-
return value > 0 ? "up" : "down";
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function verdictClass(good: boolean, palette: VerdictPalette): string {
|
|
139
|
-
if (palette === "money") return good ? TEXT_TONE.income : TEXT_TONE.expense;
|
|
140
|
-
return good ? TEXT_TONE.success : TEXT_TONE.danger;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
function signedToneClass(
|
|
144
|
-
tone: SignedAmountTone,
|
|
145
|
-
dir: "up" | "down" | "flat",
|
|
146
|
-
goodDirection: GoodDirection | undefined,
|
|
147
|
-
palette: VerdictPalette,
|
|
148
|
-
): string {
|
|
149
|
-
if (tone === "verdict" || (goodDirection && tone === "signed")) {
|
|
150
|
-
if (dir === "flat" || !goodDirection) return TEXT_TONE.muted;
|
|
151
|
-
return verdictClass(dir === goodDirection, palette);
|
|
152
|
-
}
|
|
153
|
-
if (tone === "signed") return dir === "flat" ? TEXT_TONE.muted : dir === "up" ? TEXT_TONE.income : TEXT_TONE.expense;
|
|
154
|
-
if (tone === "neutral") return "";
|
|
155
|
-
return TEXT_TONE[tone];
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const ARROW = { up: ArrowUp, down: ArrowDown, flat: Minus } as const;
|
|
159
|
-
|
|
160
|
-
export interface SignedAmountProps extends SignedFormatProps, Omit<ComponentPropsWithRef<"span">, "children"> {
|
|
161
|
-
value: number;
|
|
162
|
-
/** See {@link SignedAmountTone}. Default `signed`, or `verdict` with `goodDirection`. */
|
|
163
|
-
tone?: SignedAmountTone;
|
|
164
|
-
/** Which way is good news — colours by verdict (`success` / `danger`, or the money
|
|
165
|
-
* pair with `palette="money"`). */
|
|
166
|
-
goodDirection?: GoodDirection;
|
|
167
|
-
/** See {@link VerdictPalette}. Default `status`. Only a verdict reads it. */
|
|
168
|
-
palette?: VerdictPalette;
|
|
169
|
-
/** A magnitude up to which the figure counts as NO change: no sign, no arrow but the
|
|
170
|
-
* flat dash, muted, spoken without "plus"/"minus" (inclusive; default 0). The digits
|
|
171
|
-
* still print `|value|` — use a band below the display precision, where they round
|
|
172
|
-
* to zero anyway (`flatWithin={0.005}` at two digits). */
|
|
173
|
-
flatWithin?: number;
|
|
174
|
-
/** Print "+" before a positive figure (default `true`). A negative always shows its
|
|
175
|
-
* minus; zero shows neither. */
|
|
176
|
-
showPlus?: boolean;
|
|
177
|
-
/** An arrow before the figure (up / down / a dash at zero) — so the direction does not
|
|
178
|
-
* ride on colour alone. Decorative; the words say the same. */
|
|
179
|
-
arrow?: boolean;
|
|
180
|
-
/** Tag the figure `data-private`, for the host's demo-mode blur. */
|
|
181
|
-
sensitive?: boolean;
|
|
182
|
-
labels?: LabelOverride<SignedAmountLabels>;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* A figure with a sign that matters: a balance, a rent change, a net.
|
|
187
|
-
*
|
|
188
|
-
* kastlan writes it by hand in five places — `{change > 0 ? "+" : ""}{formatCurrency(
|
|
189
|
-
* change)}` in a span coloured by a ternary (lease-columns:190, settlement-table:58,
|
|
190
|
-
* the tenancy `formatPct`) — and each picks its own colours for the same verdict.
|
|
191
|
-
*
|
|
192
|
-
* The visible figure (sign, digits, arrow) is hidden from assistive tech and spoken as
|
|
193
|
-
* words instead ("plus CHF 50.00" / "minus CHF 50.00", `signedAmount.*`): a "+" is
|
|
194
|
-
* skipped by most screen readers, and `Intl`'s "−" is read as "dash" or not at all.
|
|
195
|
-
*/
|
|
196
|
-
export function SignedAmount({
|
|
197
|
-
value,
|
|
198
|
-
currency,
|
|
199
|
-
unit,
|
|
200
|
-
ratio,
|
|
201
|
-
compact,
|
|
202
|
-
digits,
|
|
203
|
-
format,
|
|
204
|
-
locale,
|
|
205
|
-
tone = "signed",
|
|
206
|
-
goodDirection,
|
|
207
|
-
palette = "status",
|
|
208
|
-
flatWithin,
|
|
209
|
-
showPlus = true,
|
|
210
|
-
arrow = false,
|
|
211
|
-
sensitive = false,
|
|
212
|
-
labels,
|
|
213
|
-
className,
|
|
214
|
-
...rest
|
|
215
|
-
}: SignedAmountProps) {
|
|
216
|
-
const text = useKitLabels("signedAmount", DEFAULT_SIGNED_AMOUNT_LABELS, labels);
|
|
217
|
-
const fmt = useMagnitudeFormatter({ currency, unit, ratio, compact, digits, format, locale });
|
|
218
|
-
const finite = Number.isFinite(value);
|
|
219
|
-
const dir = finite ? directionOf(value, flatWithin) : "flat";
|
|
220
|
-
const amount = finite ? fmt(Math.abs(value)) : "—";
|
|
221
|
-
// U+2212, the typographic minus: the same width as "+", so a column of signed figures
|
|
222
|
-
// lines up under `tabular-nums`.
|
|
223
|
-
const sign = dir === "up" ? (showPlus ? "+" : "") : dir === "down" ? "−" : "";
|
|
224
|
-
const spoken = dir === "up" ? text.positive(amount) : dir === "down" ? text.negative(amount) : amount;
|
|
225
|
-
const Icon = ARROW[dir];
|
|
226
|
-
return (
|
|
227
|
-
<span
|
|
228
|
-
{...rest}
|
|
229
|
-
data-private={sensitive ? "" : undefined}
|
|
230
|
-
data-direction={dir}
|
|
231
|
-
className={cn(
|
|
232
|
-
"relative inline-flex items-center gap-0.5 whitespace-nowrap tabular-nums",
|
|
233
|
-
signedToneClass(tone, dir, goodDirection, palette),
|
|
234
|
-
className,
|
|
235
|
-
)}
|
|
236
|
-
>
|
|
237
|
-
{arrow && <Icon aria-hidden className="size-[1em] shrink-0" />}
|
|
238
|
-
<span aria-hidden>
|
|
239
|
-
{sign}
|
|
240
|
-
{amount}
|
|
241
|
-
</span>
|
|
242
|
-
<span className="sr-only">{spoken}</span>
|
|
243
|
-
</span>
|
|
244
|
-
);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
export interface DeltaProps extends SignedFormatProps, Omit<ComponentPropsWithRef<"span">, "children"> {
|
|
248
|
-
/** The change. Above zero is "up". */
|
|
249
|
-
value: number;
|
|
250
|
-
/** Which way is good news. Unset, the change is stated and not judged (muted); set,
|
|
251
|
-
* it is coloured `success` / `danger` and its sentence says "(better)" / "(worse)". */
|
|
252
|
-
goodDirection?: GoodDirection;
|
|
253
|
-
/** See {@link VerdictPalette}: `money` paints good news `income` and bad news
|
|
254
|
-
* `expense` instead of `success` / `danger`. Default `status`. */
|
|
255
|
-
palette?: VerdictPalette;
|
|
256
|
-
/** See {@link SignedAmountProps.flatWithin}: up to this magnitude the change is
|
|
257
|
-
* "unchanged" — flat dash, muted, no verdict. Default 0. */
|
|
258
|
-
flatWithin?: number;
|
|
259
|
-
/** What it is measured against, after it: "vs last month". */
|
|
260
|
-
label?: ReactNode;
|
|
261
|
-
/** Hide the arrow (shown by default, as on a StatTile). At zero the arrow is a flat
|
|
262
|
-
* dash BESIDE the figure ("– 0.00 %"), never in place of it. */
|
|
263
|
-
arrow?: boolean;
|
|
264
|
-
sensitive?: boolean;
|
|
265
|
-
/** The `statTile` namespace's direction words — a delta says the same as a tile's. */
|
|
266
|
-
labels?: LabelOverride<Pick<StatTileLabels, "increase" | "decrease" | "unchanged" | "better" | "worse">>;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* `StatTile`'s delta on its own: an arrow, the unsigned magnitude, and a sentence for
|
|
271
|
-
* screen readers ("Up 12% (worse)"), coloured only when `goodDirection` judges it —
|
|
272
|
-
* users up and cost up are the same arrow until someone says which is good.
|
|
273
|
-
*
|
|
274
|
-
* For a change shown outside a tile: kastlan's rent-change column
|
|
275
|
-
* (lease-columns:219, a "+1.25%" chip), the breakdown rows of the rent calculator
|
|
276
|
-
* (breakdown-row:5, a trend icon coloured by hand).
|
|
277
|
-
*/
|
|
278
|
-
export function Delta({
|
|
279
|
-
value,
|
|
280
|
-
currency,
|
|
281
|
-
unit,
|
|
282
|
-
ratio,
|
|
283
|
-
compact,
|
|
284
|
-
digits,
|
|
285
|
-
format,
|
|
286
|
-
locale,
|
|
287
|
-
goodDirection,
|
|
288
|
-
palette = "status",
|
|
289
|
-
flatWithin,
|
|
290
|
-
label,
|
|
291
|
-
arrow = true,
|
|
292
|
-
sensitive = false,
|
|
293
|
-
labels,
|
|
294
|
-
className,
|
|
295
|
-
...rest
|
|
296
|
-
}: DeltaProps) {
|
|
297
|
-
const text = useKitLabels("statTile", DEFAULT_STAT_TILE_LABELS, labels);
|
|
298
|
-
const fmt = useMagnitudeFormatter({ currency, unit, ratio, compact, digits, format, locale });
|
|
299
|
-
if (!Number.isFinite(value)) return null;
|
|
300
|
-
const amount = fmt(Math.abs(value));
|
|
301
|
-
const dir = directionOf(value, flatWithin);
|
|
302
|
-
const Icon = ARROW[dir];
|
|
303
|
-
let spoken = dir === "up" ? text.increase(amount) : dir === "down" ? text.decrease(amount) : text.unchanged;
|
|
304
|
-
let tone = TEXT_TONE.muted;
|
|
305
|
-
if (goodDirection && dir !== "flat") {
|
|
306
|
-
const good = dir === goodDirection;
|
|
307
|
-
spoken = good ? text.better(spoken) : text.worse(spoken);
|
|
308
|
-
tone = verdictClass(good, palette);
|
|
309
|
-
}
|
|
310
|
-
return (
|
|
311
|
-
<span
|
|
312
|
-
{...rest}
|
|
313
|
-
data-direction={dir}
|
|
314
|
-
className={cn("relative inline-flex flex-wrap items-center gap-x-1.5 tabular-nums", className)}
|
|
315
|
-
>
|
|
316
|
-
<span
|
|
317
|
-
data-private={sensitive ? "" : undefined}
|
|
318
|
-
className={cn("inline-flex items-center gap-0.5 font-medium", tone)}
|
|
319
|
-
>
|
|
320
|
-
{arrow && <Icon className="size-[1em] shrink-0" aria-hidden />}
|
|
321
|
-
{/* The figure at zero too, beside the flat dash (kastlan feedback #48). Before
|
|
322
|
-
this a flat delta with an arrow drew the dash ALONE, as a StatTile does — so
|
|
323
|
-
a rent-change column that printed "0.00 %" for an unchanged lease showed a
|
|
324
|
-
bare "–" in its place, and a bare dash is what a table prints for a MISSING
|
|
325
|
-
value: "unchanged" and "not known" looked the same. The Minus icon is the
|
|
326
|
-
neutral indicator, the muted tone the neutral colour, and the figure says
|
|
327
|
-
how much (none) in the column's own digits. A value that is missing never
|
|
328
|
-
reaches here — a non-finite one renders nothing, above. Visible change for
|
|
329
|
-
every `<Delta value={0}>` with the default arrow: "–" became "– 0 %". */}
|
|
330
|
-
<span aria-hidden>{amount}</span>
|
|
331
|
-
<span className="sr-only">{spoken}</span>
|
|
332
|
-
</span>
|
|
333
|
-
{label != null && <span className="text-muted">{label}</span>}
|
|
334
|
-
</span>
|
|
335
|
-
);
|
|
336
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithRef } from "react";
|
|
2
|
-
import { cn } from "../lib/cn";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The look of a placeholder, as one class string — the same fill and pulse
|
|
6
|
-
* `StatTile`'s `loading` headline draws (it imports this), so a tile and the list
|
|
7
|
-
* beside it shimmer as one surface.
|
|
8
|
-
*
|
|
9
|
-
* `motion-reduce:animate-none`: a pulse is motion with no information in it, which
|
|
10
|
-
* is exactly what `prefers-reduced-motion` asks to be dropped. The fill stays, so the
|
|
11
|
-
* shape of what is coming is still there.
|
|
12
|
-
*/
|
|
13
|
-
export const SKELETON_CLASS = "animate-pulse rounded bg-active motion-reduce:animate-none";
|
|
14
|
-
|
|
15
|
-
export type SkeletonShape = "line" | "block" | "circle";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* A `div`'s props, `ref` included (0.33.1, keksdose): they were spread onto the
|
|
19
|
-
* placeholder all along, but `ComponentPropsWithoutRef` kept `ref` out of the type, so an
|
|
20
|
-
* app could not hold the element (to measure it, or scroll it into view) without a
|
|
21
|
-
* wrapper. The ref is the placeholder's — with `lines`, the box round the lines; with
|
|
22
|
-
* `label`, still the placeholder, not the `role="status"` region round it — where
|
|
23
|
-
* `className` goes too.
|
|
24
|
-
*/
|
|
25
|
-
export interface SkeletonProps extends Omit<ComponentPropsWithRef<"div">, "children"> {
|
|
26
|
-
/** `line` (default): a bar the height of a line of small text. `block`: an area
|
|
27
|
-
* (an image, a chart, a card body). `circle`: an avatar. Size any of them with
|
|
28
|
-
* `className` (`w-32`, `h-40`, `size-8`). */
|
|
29
|
-
shape?: SkeletonShape;
|
|
30
|
-
/** For `line`: this many lines, the last one shorter — a paragraph's outline. */
|
|
31
|
-
lines?: number;
|
|
32
|
-
/**
|
|
33
|
-
* Say what is loading, once: wraps the placeholder in a `role="status"` region with
|
|
34
|
-
* this as its (visually hidden) text — kastlan's activity feed (activity-feed:52)
|
|
35
|
-
* built exactly that by hand around `<Skeleton lines={5} />`. The placeholder itself
|
|
36
|
-
* stays hidden. Left out, nothing is announced, as before.
|
|
37
|
-
*/
|
|
38
|
-
label?: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const SHAPE: Record<SkeletonShape, string> = {
|
|
42
|
-
line: "h-3 w-full",
|
|
43
|
-
block: "h-24 w-full rounded-md",
|
|
44
|
-
circle: "size-10 rounded-full",
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* A grey stand-in for content that is on its way.
|
|
49
|
-
*
|
|
50
|
-
* keksdose and kastlan both drew these by hand — `animate-pulse bg-slate-200` in one
|
|
51
|
-
* place, a token in the next, a pulse that ran under reduced motion everywhere.
|
|
52
|
-
*
|
|
53
|
-
* ALWAYS `aria-hidden`. A placeholder is not content, and a reader that met twelve
|
|
54
|
-
* unnamed grey boxes would have learned nothing. Say "loading" once, where it
|
|
55
|
-
* belongs: `aria-busy` on the region being filled, a `Spinner` / sr-only line
|
|
56
|
-
* beside the skeletons, or this component's own `label`.
|
|
57
|
-
*/
|
|
58
|
-
export function Skeleton({ label, ...props }: SkeletonProps) {
|
|
59
|
-
if (!label) return <SkeletonFill {...props} />;
|
|
60
|
-
return (
|
|
61
|
-
// `relative`: the containing block for the sr-only text (sr-only-containment.test).
|
|
62
|
-
<div role="status" className="relative" data-skeleton-status="">
|
|
63
|
-
<span className="sr-only">{label}</span>
|
|
64
|
-
<SkeletonFill {...props} />
|
|
65
|
-
</div>
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function SkeletonFill({ shape = "line", lines, className, ...rest }: Omit<SkeletonProps, "label">) {
|
|
70
|
-
if (shape === "line" && lines !== undefined && lines > 1) {
|
|
71
|
-
return (
|
|
72
|
-
<div {...rest} aria-hidden className={cn("flex flex-col gap-2", className)} data-skeleton="lines">
|
|
73
|
-
{Array.from({ length: lines }, (_, i) => (
|
|
74
|
-
<div key={i} className={cn(SKELETON_CLASS, SHAPE.line, i === lines - 1 && "w-2/3")} data-skeleton="line" />
|
|
75
|
-
))}
|
|
76
|
-
</div>
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
return <div {...rest} aria-hidden data-skeleton={shape} className={cn(SKELETON_CLASS, SHAPE[shape], className)} />;
|
|
80
|
-
}
|