@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,479 +0,0 @@
|
|
|
1
|
-
import { useId } from "react";
|
|
2
|
-
import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
|
|
3
|
-
import { cn } from "../lib/cn";
|
|
4
|
-
import { DEFAULT_COMMON_LABELS, useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
|
|
5
|
-
import { toneTextClass } from "./signed-amount";
|
|
6
|
-
import type { TextTone } from "./signed-amount";
|
|
7
|
-
import { DEFAULT_PROGRESS_BAR_LABELS } from "./progress-bar-labels";
|
|
8
|
-
import { formatWithMinus } from "../lib/minus";
|
|
9
|
-
|
|
10
|
-
/** The words a progress bar adds of its own. */
|
|
11
|
-
export interface ProgressBarLabels {
|
|
12
|
-
/** Shown after the value when `max={null}`: a quota with no ceiling. */
|
|
13
|
-
unlimited: string;
|
|
14
|
-
/** The `overage` line: how far past `max` the value is. `amount` is formatted. */
|
|
15
|
-
overLimit: (amount: string) => string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Defined in ./progress-bar-labels, which holds no component code (0.34, KS U8).
|
|
19
|
-
export { DEFAULT_PROGRESS_BAR_LABELS };
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* `income` / `expense` are the money pair (`--money-income` / `--money-expense`), the
|
|
23
|
-
* names `Chip`, `StatTile` and `Sparkline` already use for them: a share bar of what
|
|
24
|
-
* came in or went out is money, and painting it `success` / `warning` said "good" and
|
|
25
|
-
* "careful" about a figure that is neither. keksdose's report meters (food-group-card,
|
|
26
|
-
* drilldown-modal) sit beside amounts that are already in the money colours.
|
|
27
|
-
*/
|
|
28
|
-
export type ProgressBarTone = "brand" | "neutral" | "success" | "warning" | "danger" | "info" | "income" | "expense";
|
|
29
|
-
/**
|
|
30
|
-
* Track heights: `sm` 4px, `slim` 6px, `md` 8px, `lg` 12px. `slim` is a word and not a
|
|
31
|
-
* letter because the letters are taken in order — an `xs` at 6px would be THICKER than
|
|
32
|
-
* `sm` — and renaming `sm` would move every bar already on it. 6px is the Slider's
|
|
33
|
-
* track and keksdose's hand-drawn meters (`h-1.5`, landing-visuals), for a bar under a
|
|
34
|
-
* line of text where 8px outweighs the text.
|
|
35
|
-
*/
|
|
36
|
-
export type ProgressBarSize = "sm" | "slim" | "md" | "lg";
|
|
37
|
-
|
|
38
|
-
const FILL: Record<ProgressBarTone, string> = {
|
|
39
|
-
brand: "bg-brand",
|
|
40
|
-
neutral: "bg-[var(--text-muted)]",
|
|
41
|
-
success: "bg-success",
|
|
42
|
-
warning: "bg-warning",
|
|
43
|
-
danger: "bg-danger",
|
|
44
|
-
info: "bg-info",
|
|
45
|
-
income: "bg-money-income",
|
|
46
|
-
expense: "bg-money-expense",
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const TRACK_HEIGHT: Record<ProgressBarSize, string> = { sm: "h-1", slim: "h-1.5", md: "h-2", lg: "h-3" };
|
|
50
|
-
|
|
51
|
-
// A segment with no tone of its own takes the next categorical chart colour, so a
|
|
52
|
-
// stacked bar of unnamed parts is still a set of tellable parts rather than one fill.
|
|
53
|
-
// Eight, cycled like `paletteFor` (0.49): `--chart-9` only repeats slot 1.
|
|
54
|
-
const SERIES_FILL = [
|
|
55
|
-
"bg-[var(--chart-1)]",
|
|
56
|
-
"bg-[var(--chart-2)]",
|
|
57
|
-
"bg-[var(--chart-3)]",
|
|
58
|
-
"bg-[var(--chart-4)]",
|
|
59
|
-
"bg-[var(--chart-5)]",
|
|
60
|
-
"bg-[var(--chart-6)]",
|
|
61
|
-
"bg-[var(--chart-7)]",
|
|
62
|
-
"bg-[var(--chart-8)]",
|
|
63
|
-
];
|
|
64
|
-
|
|
65
|
-
/** Each segment's fill classes: its own classes, else its tone, else (with no `color`)
|
|
66
|
-
* the next chart colour. "Next" counts the UNCOLOURED segments only — a segment with
|
|
67
|
-
* its own `className`/`tone`/`color` does not use up `--chart-1`, so an "Other" in grey
|
|
68
|
-
* ahead of two plain parts leaves them `--chart-1` and `--chart-2`. */
|
|
69
|
-
function segmentFills(segments: ProgressBarSegment[]): Array<string | undefined> {
|
|
70
|
-
let next = 0;
|
|
71
|
-
return segments.map((seg) => {
|
|
72
|
-
if (seg.className) return seg.className;
|
|
73
|
-
if (seg.tone) return FILL[seg.tone];
|
|
74
|
-
return seg.color ? undefined : SERIES_FILL[next++ % SERIES_FILL.length];
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** One part of a stacked bar. See {@link ProgressBarProps.segments}. */
|
|
79
|
-
export interface ProgressBarSegment {
|
|
80
|
-
/** Its size, on the bar's own `min`–`max` scale. */
|
|
81
|
-
value: number;
|
|
82
|
-
/** A kit tone. Left out (and no `color`/`className`), the next `--chart-N` colour. */
|
|
83
|
-
tone?: ProgressBarTone;
|
|
84
|
-
/** Any CSS colour (`var(--token)`), for a palette the tones do not cover. Wins over `tone`. */
|
|
85
|
-
color?: string;
|
|
86
|
-
/** Classes for the segment's fill — keksdose's `STEP_CLASS` ramp. Wins over `tone`. */
|
|
87
|
-
className?: string;
|
|
88
|
-
/** The part's name: said in the bar's `aria-valuetext` and shown in the legend. */
|
|
89
|
-
label?: ReactNode;
|
|
90
|
-
/** A stable React key, when `label` is not a string. */
|
|
91
|
-
key?: string;
|
|
92
|
-
/**
|
|
93
|
-
* List it in the `legend` but leave it out of the bar — its value, its share of the
|
|
94
|
-
* `aria-valuetext`, and the sum. keksdose's cut card (reports/cut-card:132) names
|
|
95
|
-
* EVERY bucket under its bar, the empty ones included, while the bar draws only the
|
|
96
|
-
* ones with a share: pass the empty buckets as `legendOnly` entries.
|
|
97
|
-
*/
|
|
98
|
-
legendOnly?: boolean;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export interface ProgressBarProps extends Omit<ComponentPropsWithoutRef<"div">, "children" | "role"> {
|
|
102
|
-
/**
|
|
103
|
-
* `"span"` builds the bar from spans, for a place only phrasing content may go: inside
|
|
104
|
-
* a button or a link (ListItem's `content`). The `legend` stays a list, so leave it off
|
|
105
|
-
* there. Default `"div"`.
|
|
106
|
-
*/
|
|
107
|
-
as?: "div" | "span";
|
|
108
|
-
/** Where it stands. Leave it undefined for an INDETERMINATE bar — work is under way
|
|
109
|
-
* and nobody knows how much is left (an import that reports no count). */
|
|
110
|
-
value?: number;
|
|
111
|
-
min?: number;
|
|
112
|
-
/**
|
|
113
|
-
* The top of the scale (default 100). `null` is a quota with NO ceiling — kastlan's
|
|
114
|
-
* billing usage on an unlimited plan (usage-progress-bar:25): nothing to fill, so no
|
|
115
|
-
* bar is drawn; the label row shows the value and "Unlimited" (`progressBar.unlimited`)
|
|
116
|
-
* as plain text. `formatValue` is then called with `max` = `Infinity`; without it,
|
|
117
|
-
* the value is a plain number in the kit's locale.
|
|
118
|
-
*/
|
|
119
|
-
max?: number | null;
|
|
120
|
-
/**
|
|
121
|
-
* `progress` (default): a task moving toward completion — `role="progressbar"`.
|
|
122
|
-
* `meter`: a share of a known whole that is not going anywhere (budget used, disk
|
|
123
|
-
* space, one category's slice of spending) — `role="meter"`. keksdose's share bars
|
|
124
|
-
* were progress bars to a screen reader, which reads "busy" into a figure that is
|
|
125
|
-
* simply a figure. A meter is never indeterminate; a missing value reads as `min`.
|
|
126
|
-
*/
|
|
127
|
-
variant?: "progress" | "meter";
|
|
128
|
-
/** Visible label above the bar, and its accessible name. Without it, pass
|
|
129
|
-
* `aria-label` (an indeterminate bar with neither is named `common.loading`). */
|
|
130
|
-
label?: ReactNode;
|
|
131
|
-
/** Show the value text at the end of the label row. */
|
|
132
|
-
showValue?: boolean;
|
|
133
|
-
/**
|
|
134
|
-
* The value as words — both the visible `showValue` text and `aria-valuetext`.
|
|
135
|
-
* Default: the fraction as a percentage in the kit's locale ("42 %" in French).
|
|
136
|
-
* Pass one for anything that is not a percentage: `(v, max) => \`${v} of ${max} files\``.
|
|
137
|
-
*/
|
|
138
|
-
formatValue?: (value: number, max: number, min: number) => string;
|
|
139
|
-
tone?: ProgressBarTone;
|
|
140
|
-
size?: ProgressBarSize;
|
|
141
|
-
locale?: string;
|
|
142
|
-
/**
|
|
143
|
-
* Draw a METER OF PARTS: one bar, several fills side by side in order, a 2px gap
|
|
144
|
-
* between them — keksdose's discretionary-spending bar (cut-card:133), a whole
|
|
145
|
-
* split into the steps of a scale. Forces `variant="meter"`: parts of a whole are
|
|
146
|
-
* never "busy". `aria-valuenow` is the sum; `aria-valuetext` names every part
|
|
147
|
-
* ("Rent: 40%, Food: 25%"), each part's value through `formatValue` and joined in the
|
|
148
|
-
* kit's locale — the words keksdose's hand-drawn bar had to hide from a reader
|
|
149
|
-
* altogether, leaving the legend as the only way in. The sum is clamped to `max`,
|
|
150
|
-
* and parts past it are cut off at the track's end.
|
|
151
|
-
*/
|
|
152
|
-
segments?: ProgressBarSegment[];
|
|
153
|
-
/** With `segments`: a list under the bar naming each part with its swatch and value
|
|
154
|
-
* — the table view of the bar, in text tokens rather than the segment colour. */
|
|
155
|
-
legend?: boolean;
|
|
156
|
-
/**
|
|
157
|
-
* What a legend row shows at its end, in place of the part's formatted value — which
|
|
158
|
-
* it is handed, with the segment and its index. That value is the part's OWN, signed
|
|
159
|
-
* and unclamped (`formatValue`, or a percentage of the scale): a part of −40 on a
|
|
160
|
-
* 0–100 scale says "-40%" though the bar draws nothing for it. keksdose's cut card
|
|
161
|
-
* shows the share AND a private outflow amount per bucket (cut-card:150), which one
|
|
162
|
-
* figure could not:
|
|
163
|
-
* `legendValue={(seg, share) => <>{share} <Amount … /></>}`.
|
|
164
|
-
*/
|
|
165
|
-
legendValue?: (segment: ProgressBarSegment, formatted: string, index: number) => ReactNode;
|
|
166
|
-
/**
|
|
167
|
-
* The colour of each legend row's figure, as a {@link TextTone} — `toneTextClass`'s
|
|
168
|
-
* palette, the money pair included. Default `"muted"`: the legend explains the bar and
|
|
169
|
-
* should not outshout the headline above it. One tone for every row, or a function
|
|
170
|
-
* per row. A tone and not the segment's own `tone`: keksdose's tax card fills its
|
|
171
|
-
* three parts with one bucket's certainty ramp (`className`), while the FIGURES carry
|
|
172
|
-
* the bucket's money direction — `legendTone="expense"` for the tax owed — which it
|
|
173
|
-
* could only say before through `legendValue` and an app-side `Amount`. A function
|
|
174
|
-
* returning `undefined` keeps that row muted. Applies to `legendValue`'s node too
|
|
175
|
-
* (it inherits the colour unless it sets its own).
|
|
176
|
-
*/
|
|
177
|
-
legendTone?: TextTone | ((segment: ProgressBarSegment, index: number) => TextTone | undefined);
|
|
178
|
-
/** A muted line under the bar — the plan's reset date, "3 of 5 seats in use". It
|
|
179
|
-
* describes the bar (`aria-describedby`). */
|
|
180
|
-
hint?: ReactNode;
|
|
181
|
-
/**
|
|
182
|
-
* When `value` is past `max`, say by how much, in a danger-coloured line under the bar
|
|
183
|
-
* (kastlan usage-progress-bar:46): `true` prints `progressBar.overLimit` with the
|
|
184
|
-
* excess as a plain number; a function renders the line itself from the excess (a
|
|
185
|
-
* currency, "2 seats"). The bar stays full at `max` either way — colour it with
|
|
186
|
-
* `tone="danger"` if it should read as over. Ignored for `segments` and `max={null}`.
|
|
187
|
-
*/
|
|
188
|
-
overage?: boolean | ((over: number) => ReactNode);
|
|
189
|
-
/**
|
|
190
|
-
* Tag every figure the bar PRINTS `data-private`, so the host's demo-mode rule blurs
|
|
191
|
-
* it — the attribute `StatTile sensitive` and `Tooltip redact` carry: the `showValue`
|
|
192
|
-
* text, each `legend` row's value (yours from `legendValue` too), the unlimited
|
|
193
|
-
* figure and the `overage` line. The track, the swatches and the part names stay
|
|
194
|
-
* readable — a blurred bar is no picture at all. Before this an app with a demo-mode
|
|
195
|
-
* blur had to pass `legendValue` only to wrap the figure in a tagged span (keksdose).
|
|
196
|
-
* The `aria-valuetext` is not touched: a screen reader is not a screen-share.
|
|
197
|
-
*/
|
|
198
|
-
sensitive?: boolean;
|
|
199
|
-
labels?: LabelOverride<ProgressBarLabels>;
|
|
200
|
-
/** The element the rest of the props go on — the `progressbar` (or `meter`) itself,
|
|
201
|
-
* the box round the figure for an unlimited one — a `div` or a `span` as `as` says,
|
|
202
|
-
* hence `HTMLElement` (0.34, API-2, refactor audit 2026-10). */
|
|
203
|
-
ref?: Ref<HTMLElement>;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* A horizontal bar that fills toward `max`.
|
|
208
|
-
*
|
|
209
|
-
* keksdose (import progress, budget share bars) and kastlan (upload and job
|
|
210
|
-
* progress) each drew their own div-in-a-div. None had a role, so a reader heard
|
|
211
|
-
* nothing at all; the share bars that did have one claimed to be progress.
|
|
212
|
-
*
|
|
213
|
-
* `aria-valuetext` is always set when there is a value: a bare `aria-valuenow="37"`
|
|
214
|
-
* is read as "37" by some readers and "37 percent" by others, and neither is right
|
|
215
|
-
* when `max` is 212 files.
|
|
216
|
-
*
|
|
217
|
-
* The indeterminate sweep stops under `prefers-reduced-motion`. It becomes a still,
|
|
218
|
-
* half-strength bar across the whole track — still visibly "something is happening",
|
|
219
|
-
* with nothing moving. The sweep is a Tailwind arbitrary `animate-[…]` rather than
|
|
220
|
-
* tokens.css's `.animate-indeterminate` class because that one is UNLAYERED, and an
|
|
221
|
-
* unlayered rule beats every layered utility, `motion-reduce:animate-none` included.
|
|
222
|
-
*/
|
|
223
|
-
export function ProgressBar({
|
|
224
|
-
value,
|
|
225
|
-
min = 0,
|
|
226
|
-
max: maxProp = 100,
|
|
227
|
-
variant = "progress",
|
|
228
|
-
label,
|
|
229
|
-
showValue = false,
|
|
230
|
-
formatValue,
|
|
231
|
-
tone = "brand",
|
|
232
|
-
size = "md",
|
|
233
|
-
locale,
|
|
234
|
-
segments,
|
|
235
|
-
legend = false,
|
|
236
|
-
legendValue,
|
|
237
|
-
legendTone = "muted",
|
|
238
|
-
hint,
|
|
239
|
-
overage,
|
|
240
|
-
sensitive = false,
|
|
241
|
-
labels,
|
|
242
|
-
className,
|
|
243
|
-
as = "div",
|
|
244
|
-
"aria-label": ariaLabel,
|
|
245
|
-
"aria-labelledby": ariaLabelledBy,
|
|
246
|
-
"aria-describedby": ariaDescribedBy,
|
|
247
|
-
ref,
|
|
248
|
-
...rest
|
|
249
|
-
}: ProgressBarProps) {
|
|
250
|
-
// `as="span"`: the same bar from phrasing elements only, so it is valid inside a
|
|
251
|
-
// <button> or <a> — ListItem's `content` puts a budget bar inside the row's target
|
|
252
|
-
// (keksdose P2). Every span is made a block except those already laid out as flex.
|
|
253
|
-
const Tag = as;
|
|
254
|
-
// Either element's ref, as List types its `ul`/`ol` one.
|
|
255
|
-
const tagRef = ref as Ref<HTMLDivElement & HTMLSpanElement> | undefined;
|
|
256
|
-
const inlineClass = as === "span" ? "block [&_span:not(.flex):not(.inline-flex)]:block" : undefined;
|
|
257
|
-
const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
|
|
258
|
-
const text = useKitLabels("progressBar", DEFAULT_PROGRESS_BAR_LABELS, labels);
|
|
259
|
-
const kitLocale = useKitLocale(locale);
|
|
260
|
-
const labelId = useId();
|
|
261
|
-
const priv = sensitive ? "" : undefined;
|
|
262
|
-
const hintId = useId();
|
|
263
|
-
const hintNode =
|
|
264
|
-
hint != null ? (
|
|
265
|
-
<p id={hintId} data-part="hint" className="mt-1 text-xs text-muted">
|
|
266
|
-
{hint}
|
|
267
|
-
</p>
|
|
268
|
-
) : null;
|
|
269
|
-
|
|
270
|
-
if (maxProp === null) {
|
|
271
|
-
// No ceiling: no bar, no role — a meter with no maximum is not one. The value and
|
|
272
|
-
// "Unlimited" are the content, so they are plain visible text.
|
|
273
|
-
const shown =
|
|
274
|
-
value === undefined || !Number.isFinite(value)
|
|
275
|
-
? undefined
|
|
276
|
-
: formatValue
|
|
277
|
-
? formatValue(value, Infinity, min)
|
|
278
|
-
: formatWithMinus(new Intl.NumberFormat(kitLocale), value);
|
|
279
|
-
return (
|
|
280
|
-
<Tag {...rest} ref={tagRef} className={cn("min-w-0", inlineClass, className)} data-state="unlimited">
|
|
281
|
-
<Tag className="flex items-baseline gap-2 text-sm">
|
|
282
|
-
{label != null && (
|
|
283
|
-
<span id={labelId} className="min-w-0 text-secondary">
|
|
284
|
-
{label}
|
|
285
|
-
</span>
|
|
286
|
-
)}
|
|
287
|
-
<span data-part="unlimited" data-private={priv} className="ms-auto shrink-0 tabular-nums text-muted">
|
|
288
|
-
{shown !== undefined && `${shown} · `}
|
|
289
|
-
{text.unlimited}
|
|
290
|
-
</span>
|
|
291
|
-
</Tag>
|
|
292
|
-
{hintNode}
|
|
293
|
-
</Tag>
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
const max = maxProp;
|
|
297
|
-
|
|
298
|
-
const stacked = segments !== undefined;
|
|
299
|
-
const meter = stacked || variant === "meter";
|
|
300
|
-
const span = max - min;
|
|
301
|
-
const partValue = (v: number) => (Number.isFinite(v) ? Math.max(0, v - min) : 0);
|
|
302
|
-
// Colours are dealt over EVERY segment, legend-only ones included, so an entry keeps
|
|
303
|
-
// its swatch whether or not it is in the bar this time.
|
|
304
|
-
const fills = stacked ? segmentFills(segments) : [];
|
|
305
|
-
const barParts = stacked ? segments.filter((seg) => !seg.legendOnly) : [];
|
|
306
|
-
const partTotal = stacked ? min + barParts.reduce((sum, seg) => sum + partValue(seg.value), 0) : undefined;
|
|
307
|
-
const format = (v: number) =>
|
|
308
|
-
formatValue
|
|
309
|
-
? formatValue(v, max, min)
|
|
310
|
-
: new Intl.NumberFormat(kitLocale, { style: "percent", maximumFractionDigits: 0 }).format(
|
|
311
|
-
span <= 0 ? 0 : (Math.min(max, Math.max(min, v)) - min) / span,
|
|
312
|
-
);
|
|
313
|
-
// A PART is stated as its own value, sign and all — not as the slice of track it
|
|
314
|
-
// draws. The bar cannot draw a negative part (a refund inside a month's spending) or
|
|
315
|
-
// one past `max`, but the legend and the reader can still say it: before 0.16 a
|
|
316
|
-
// −CHF 40 part read "0 %" in both, and keksdose had to pass `legendValue` just to get
|
|
317
|
-
// the minus back. For a part inside `min`–`max` this is the same text as before.
|
|
318
|
-
const formatPart = (v: number) => {
|
|
319
|
-
if (!Number.isFinite(v)) return format(min);
|
|
320
|
-
if (formatValue) return formatValue(v, max, min);
|
|
321
|
-
// A part can be negative (a refund): U+2212, as everywhere (0.49, KIT-1).
|
|
322
|
-
return formatWithMinus(
|
|
323
|
-
new Intl.NumberFormat(kitLocale, { style: "percent", maximumFractionDigits: 0 }),
|
|
324
|
-
span <= 0 ? 0 : (v - min) / span,
|
|
325
|
-
);
|
|
326
|
-
};
|
|
327
|
-
const partTexts = stacked
|
|
328
|
-
? barParts.map((seg) => {
|
|
329
|
-
const text = formatPart(seg.value);
|
|
330
|
-
return typeof seg.label === "string" || typeof seg.label === "number"
|
|
331
|
-
? common.fieldValue(String(seg.label), text)
|
|
332
|
-
: text;
|
|
333
|
-
})
|
|
334
|
-
: [];
|
|
335
|
-
const current = partTotal ?? (value === undefined || !Number.isFinite(value) ? (meter ? min : undefined) : value);
|
|
336
|
-
const indeterminate = current === undefined;
|
|
337
|
-
const clamped = indeterminate ? undefined : Math.min(max, Math.max(min, current));
|
|
338
|
-
const fraction = clamped === undefined || span <= 0 ? 0 : (clamped - min) / span;
|
|
339
|
-
|
|
340
|
-
const valueText = clamped === undefined ? undefined : format(clamped);
|
|
341
|
-
const ariaValueText =
|
|
342
|
-
stacked && partTexts.length > 0
|
|
343
|
-
? new Intl.ListFormat(kitLocale, { style: "short", type: "unit" }).format(partTexts)
|
|
344
|
-
: valueText;
|
|
345
|
-
|
|
346
|
-
const over = overage && !stacked && value !== undefined && Number.isFinite(value) && value > max ? value - max : 0;
|
|
347
|
-
const overageNode =
|
|
348
|
-
over > 0 ? (
|
|
349
|
-
<p id={`${hintId}-over`} data-part="overage" data-private={priv} className="mt-1 text-xs text-danger">
|
|
350
|
-
{typeof overage === "function" ? overage(over) : text.overLimit(new Intl.NumberFormat(kitLocale).format(over))}
|
|
351
|
-
</p>
|
|
352
|
-
) : null;
|
|
353
|
-
const describedBy =
|
|
354
|
-
[ariaDescribedBy, hintNode && hintId, overageNode && `${hintId}-over`].filter(Boolean).join(" ") || undefined;
|
|
355
|
-
|
|
356
|
-
const labelledBy = ariaLabelledBy ?? (label != null ? labelId : undefined);
|
|
357
|
-
const name = labelledBy ? undefined : (ariaLabel ?? (indeterminate ? common.loading : undefined));
|
|
358
|
-
|
|
359
|
-
return (
|
|
360
|
-
<Tag className={cn("min-w-0", inlineClass, className)} data-state={indeterminate ? "indeterminate" : "determinate"}>
|
|
361
|
-
{(label != null || (showValue && valueText !== undefined)) && (
|
|
362
|
-
<Tag className="mb-1 flex items-baseline gap-2 text-sm">
|
|
363
|
-
{label != null && (
|
|
364
|
-
<span id={labelId} className="min-w-0 text-secondary">
|
|
365
|
-
{label}
|
|
366
|
-
</span>
|
|
367
|
-
)}
|
|
368
|
-
{showValue && valueText !== undefined && (
|
|
369
|
-
// Hidden: the same words are the bar's aria-valuetext, and reading them
|
|
370
|
-
// twice in a row is noise.
|
|
371
|
-
<span
|
|
372
|
-
aria-hidden
|
|
373
|
-
data-part="value"
|
|
374
|
-
data-private={priv}
|
|
375
|
-
className="ms-auto shrink-0 tabular-nums text-muted"
|
|
376
|
-
>
|
|
377
|
-
{valueText}
|
|
378
|
-
</span>
|
|
379
|
-
)}
|
|
380
|
-
</Tag>
|
|
381
|
-
)}
|
|
382
|
-
<Tag
|
|
383
|
-
{...rest}
|
|
384
|
-
ref={tagRef}
|
|
385
|
-
role={meter ? "meter" : "progressbar"}
|
|
386
|
-
aria-label={name}
|
|
387
|
-
aria-labelledby={labelledBy}
|
|
388
|
-
aria-describedby={describedBy}
|
|
389
|
-
aria-valuemin={indeterminate ? undefined : min}
|
|
390
|
-
aria-valuemax={indeterminate ? undefined : max}
|
|
391
|
-
aria-valuenow={clamped}
|
|
392
|
-
aria-valuetext={ariaValueText}
|
|
393
|
-
aria-busy={!meter && indeterminate ? true : undefined}
|
|
394
|
-
// `relative` + `overflow-hidden`: the indeterminate segment is positioned in
|
|
395
|
-
// here and must not paint past the rounded ends.
|
|
396
|
-
className={cn("relative w-full overflow-hidden rounded-full bg-active", TRACK_HEIGHT[size])}
|
|
397
|
-
>
|
|
398
|
-
{stacked ? (
|
|
399
|
-
// The parts in a flex row with a 2px gap, so two neighbouring steps of one
|
|
400
|
-
// hue are parted by the track rather than by their difference in lightness.
|
|
401
|
-
<Tag className="flex h-full w-full gap-0.5">
|
|
402
|
-
{segments.map((seg, i) =>
|
|
403
|
-
seg.legendOnly ? null : (
|
|
404
|
-
<Tag
|
|
405
|
-
key={seg.key ?? i}
|
|
406
|
-
data-part="segment"
|
|
407
|
-
className={cn(
|
|
408
|
-
"h-full shrink-0 rounded-full transition-[width] duration-300 motion-reduce:transition-none",
|
|
409
|
-
fills[i],
|
|
410
|
-
)}
|
|
411
|
-
style={{
|
|
412
|
-
width: `${span <= 0 ? 0 : (partValue(seg.value) / span) * 100}%`,
|
|
413
|
-
backgroundColor: seg.className ? undefined : seg.color,
|
|
414
|
-
}}
|
|
415
|
-
/>
|
|
416
|
-
),
|
|
417
|
-
)}
|
|
418
|
-
</Tag>
|
|
419
|
-
) : indeterminate ? (
|
|
420
|
-
<Tag
|
|
421
|
-
data-part="fill"
|
|
422
|
-
className={cn(
|
|
423
|
-
// `left-0`, deliberately physical: the keyframes (tokens.css
|
|
424
|
-
// `indeterminate-sweep`) translate along the physical x axis, and under
|
|
425
|
-
// RTL the same keyframes are run in REVERSE — from the right edge back
|
|
426
|
-
// to the left. A logical `start-0` would park the segment at the right
|
|
427
|
-
// in RTL and the reversed sweep would then start off-screen.
|
|
428
|
-
"absolute inset-y-0 left-0 w-1/3 rounded-full",
|
|
429
|
-
"animate-[indeterminate-sweep_1.4s_ease-in-out_infinite] rtl:[animation-direction:reverse]",
|
|
430
|
-
"motion-reduce:w-full motion-reduce:animate-none motion-reduce:opacity-50",
|
|
431
|
-
FILL[tone],
|
|
432
|
-
)}
|
|
433
|
-
/>
|
|
434
|
-
) : (
|
|
435
|
-
<Tag
|
|
436
|
-
data-part="fill"
|
|
437
|
-
// Block flow starts at the inline start, so a plain width fills from the
|
|
438
|
-
// right under `dir="rtl"` with nothing extra.
|
|
439
|
-
className={cn(
|
|
440
|
-
"h-full rounded-full transition-[width] duration-300 motion-reduce:transition-none",
|
|
441
|
-
FILL[tone],
|
|
442
|
-
)}
|
|
443
|
-
style={{ width: `${fraction * 100}%` }}
|
|
444
|
-
/>
|
|
445
|
-
)}
|
|
446
|
-
</Tag>
|
|
447
|
-
{stacked && legend && segments.length > 0 && (
|
|
448
|
-
<ul className="mt-2 space-y-1 text-sm" data-part="legend">
|
|
449
|
-
{segments.map((seg, i) => (
|
|
450
|
-
<li key={seg.key ?? i} className="flex items-center gap-2">
|
|
451
|
-
<span
|
|
452
|
-
aria-hidden
|
|
453
|
-
className={cn("size-2.5 shrink-0 rounded-sm", fills[i])}
|
|
454
|
-
style={{ backgroundColor: seg.className ? undefined : seg.color }}
|
|
455
|
-
/>
|
|
456
|
-
{seg.label != null && (
|
|
457
|
-
// Wraps from Large up (text size §10.17, round 0.34 T1); the value
|
|
458
|
-
// beside it keeps its width.
|
|
459
|
-
<span className="min-w-0 flex-1 truncate-until-large text-secondary">{seg.label}</span>
|
|
460
|
-
)}
|
|
461
|
-
<span
|
|
462
|
-
data-part="legend-value"
|
|
463
|
-
data-private={priv}
|
|
464
|
-
className={cn(
|
|
465
|
-
"ms-auto shrink-0 text-xs tabular-nums",
|
|
466
|
-
toneTextClass((typeof legendTone === "function" ? legendTone(seg, i) : legendTone) ?? "muted"),
|
|
467
|
-
)}
|
|
468
|
-
>
|
|
469
|
-
{legendValue ? legendValue(seg, formatPart(seg.value), i) : formatPart(seg.value)}
|
|
470
|
-
</span>
|
|
471
|
-
</li>
|
|
472
|
-
))}
|
|
473
|
-
</ul>
|
|
474
|
-
)}
|
|
475
|
-
{overageNode}
|
|
476
|
-
{hintNode}
|
|
477
|
-
</Tag>
|
|
478
|
-
);
|
|
479
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react";
|
|
2
|
-
import type { ComponentPropsWithRef } from "react";
|
|
3
|
-
import { cn } from "../lib/cn";
|
|
4
|
-
import { encodeQr } from "../lib/qr-encode";
|
|
5
|
-
import type { QrErrorCorrection } from "../lib/qr-encode";
|
|
6
|
-
|
|
7
|
-
export interface QrCodeProps extends Omit<ComponentPropsWithRef<"svg">, "children" | "viewBox"> {
|
|
8
|
-
/** The text to encode (UTF-8) — an `otpauth://` URI, a URL, a pairing code. */
|
|
9
|
-
value: string;
|
|
10
|
-
/** The accessible name. Without it the code is decorative (`aria-hidden`): say what
|
|
11
|
-
* it is for, not what it encodes — nobody wants a URI read out. */
|
|
12
|
-
label?: string;
|
|
13
|
-
/** Default `"M"`, raised automatically where the size allows it. */
|
|
14
|
-
errorCorrection?: QrErrorCorrection;
|
|
15
|
-
/** The quiet zone, in modules. The spec asks for 4; less reads worse. Default 4. */
|
|
16
|
-
margin?: number;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* A QR code as one inline SVG — no canvas, no data URL, no dependency (see
|
|
21
|
-
* `lib/qr-encode.ts` for why the encoder lives in the kit).
|
|
22
|
-
*
|
|
23
|
-
* Sized by CSS (`className="size-48"`); the SVG scales without blurring because every
|
|
24
|
-
* module is a whole unit of the viewBox and `shape-rendering` is `crispEdges`.
|
|
25
|
-
*
|
|
26
|
-
* **Black on white, always — the one literal colour pair in the kit.** A camera looks
|
|
27
|
-
* for the contrast between the modules and their quiet zone; on the dark theme a
|
|
28
|
-
* surface-coloured background makes a code slow to acquire, and an inverted one is not
|
|
29
|
-
* read at all by several authenticator apps. The quiet zone is part of the SVG, so the
|
|
30
|
-
* code carries its own white border wherever it is placed.
|
|
31
|
-
*
|
|
32
|
-
* A value too long for any QR version (≈2.9 kB) renders nothing rather than throwing
|
|
33
|
-
* in render.
|
|
34
|
-
*/
|
|
35
|
-
export function QrCode({ value, label, errorCorrection = "M", margin = 4, className, ...rest }: QrCodeProps) {
|
|
36
|
-
const path = useMemo(() => {
|
|
37
|
-
try {
|
|
38
|
-
const { modules, size } = encodeQr(value, { errorCorrection });
|
|
39
|
-
// One path, one sub-path per horizontal run of dark modules: a few hundred
|
|
40
|
-
// commands rather than one <rect> per module.
|
|
41
|
-
let d = "";
|
|
42
|
-
for (let y = 0; y < size; y++) {
|
|
43
|
-
for (let x = 0; x < size;) {
|
|
44
|
-
if (!modules[y][x]) {
|
|
45
|
-
x++;
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
let run = 1;
|
|
49
|
-
while (x + run < size && modules[y][x + run]) run++;
|
|
50
|
-
d += `M${x + margin} ${y + margin}h${run}v1h-${run}z`;
|
|
51
|
-
x += run;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return { d, extent: size + margin * 2 };
|
|
55
|
-
} catch {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}, [value, errorCorrection, margin]);
|
|
59
|
-
|
|
60
|
-
if (!path) return null;
|
|
61
|
-
return (
|
|
62
|
-
<svg
|
|
63
|
-
{...rest}
|
|
64
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
65
|
-
viewBox={`0 0 ${path.extent} ${path.extent}`}
|
|
66
|
-
shapeRendering="crispEdges"
|
|
67
|
-
role={label ? "img" : undefined}
|
|
68
|
-
aria-label={label}
|
|
69
|
-
aria-hidden={label ? undefined : true}
|
|
70
|
-
className={cn("block", className)}
|
|
71
|
-
>
|
|
72
|
-
<rect width={path.extent} height={path.extent} fill="#ffffff" />
|
|
73
|
-
<path d={path.d} fill="#000000" />
|
|
74
|
-
</svg>
|
|
75
|
-
);
|
|
76
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// The English words of ./reauth-dialog, 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). ./reauth-dialog re-exports them.
|
|
4
|
-
|
|
5
|
-
import type { ReauthDialogLabels } from "./reauth-dialog";
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_REAUTH_DIALOG_LABELS: ReauthDialogLabels = {
|
|
8
|
-
title: "Confirm it’s you",
|
|
9
|
-
description: "Enter your current password to continue.",
|
|
10
|
-
password: "Current password",
|
|
11
|
-
submit: "Continue",
|
|
12
|
-
cancel: "Cancel",
|
|
13
|
-
};
|