@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,359 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithoutRef, KeyboardEvent, MouseEvent, ReactElement, ReactNode, Ref } from "react";
|
|
2
|
-
import { ExternalLink } from "lucide-react";
|
|
3
|
-
import type { LucideIcon } from "lucide-react";
|
|
4
|
-
import { cn } from "../lib/cn";
|
|
5
|
-
import { DEFAULT_COMMON_LABELS, useKitLabels, useKitLink } from "../i18n/kit-labels";
|
|
6
|
-
import type { KitLinkComponent } from "../i18n/kit-labels";
|
|
7
|
-
import { documentNavigation } from "../lib/document-navigation";
|
|
8
|
-
|
|
9
|
-
/* ── Choosing what draws a link ──────────────────────────────────────────── */
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* An `href` that leaves the app: a scheme (`https:`, `mailto:`, `tel:`) or a
|
|
13
|
-
* protocol-relative `//host`. A router's link is for paths inside the app, so the
|
|
14
|
-
* provider's `linkComponent` is never handed one of these — they stay a plain `<a>`.
|
|
15
|
-
*
|
|
16
|
-
* NOT external, and so handed to the router link: a path (`/x`, `x`, `?q=1`) and the
|
|
17
|
-
* hash-router form `#/x` — that IS a route in a `HashRouter` app, which maps it to
|
|
18
|
-
* `to="/x"`. A plain in-page anchor (`#section`) is not external either, but it is not
|
|
19
|
-
* a route: see {@link isInPageAnchor}.
|
|
20
|
-
*/
|
|
21
|
-
export function isExternalHref(href: string): boolean {
|
|
22
|
-
return /^(?:[a-z][a-z\d+.-]*:|\/\/)/i.test(href);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* An `href` that only scrolls the current page: `#section` (or a bare `#`). The
|
|
27
|
-
* hash-router form `#/x` is a ROUTE, not an anchor, and is not one of these. A router
|
|
28
|
-
* link must not get an anchor — under a `HashRouter` `#section` would navigate to the
|
|
29
|
-
* path `/section` — so every kit link draws it as a plain `<a>`.
|
|
30
|
-
*/
|
|
31
|
-
export function isInPageAnchor(href: string): boolean {
|
|
32
|
-
return href.startsWith("#") && !href.startsWith("#/");
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Whether the provider's `linkComponent` (or a kit component's router fallback) draws
|
|
37
|
-
* `href`: an in-app path, `#/x` included — not an external `href`
|
|
38
|
-
* ({@link isExternalHref}) and not an in-page `#anchor` ({@link isInPageAnchor}).
|
|
39
|
-
*/
|
|
40
|
-
export function isRoutableHref(href: string): boolean {
|
|
41
|
-
return !isExternalHref(href) && !isInPageAnchor(href);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* What draws a kit link to `href`: the component's own `renderLink` when it was given
|
|
46
|
-
* one (it always wins — the caller asked for it by name), else the
|
|
47
|
-
* `<UiKitProvider linkComponent>` for a routable `href` ({@link isRoutableHref}), else
|
|
48
|
-
* `undefined` — a plain `<a>`. The one rule every kit link follows: `https:` /
|
|
49
|
-
* `mailto:` / `//host` and `#section` stay plain anchors; `/x`, `x` and a hash-router
|
|
50
|
-
* `#/x` go to the router link. Every kit link props type is a subset of the anchor
|
|
51
|
-
* attributes `KitLinkProps` describes, which is what makes the cast sound.
|
|
52
|
-
* @internal Shared by the kit's link-bearing components; not part of the barrel.
|
|
53
|
-
*/
|
|
54
|
-
export function pickLinkRenderer<P>(
|
|
55
|
-
own: ((props: P) => ReactElement) | undefined,
|
|
56
|
-
kitLink: KitLinkComponent | undefined,
|
|
57
|
-
href: string | undefined,
|
|
58
|
-
): ((props: P) => ReactElement) | undefined {
|
|
59
|
-
if (own) return own;
|
|
60
|
-
if (!kitLink || href === undefined || !isRoutableHref(href)) return undefined;
|
|
61
|
-
return kitLink as unknown as (props: P) => ReactElement;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** The plain primary click a page navigates on — not a middle click, not ⌘ / Ctrl /
|
|
65
|
-
* Shift / Alt (new tab, new window, download), and not one a handler already took. */
|
|
66
|
-
function isPlainNavigationClick(event: MouseEvent<HTMLAnchorElement>): boolean {
|
|
67
|
-
return (
|
|
68
|
-
!event.defaultPrevented &&
|
|
69
|
-
event.button === 0 &&
|
|
70
|
-
!event.metaKey &&
|
|
71
|
-
!event.ctrlKey &&
|
|
72
|
-
!event.shiftKey &&
|
|
73
|
-
!event.altKey
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* The `onClick` of a PLAIN `<a>` whose kit link was asked to `replace` (keksdose F1).
|
|
79
|
-
*
|
|
80
|
-
* A router link replaces the history entry itself (it is handed `replace`, see
|
|
81
|
-
* {@link routerLinkNavigation}); a plain `<a>` has no attribute that says so, and the
|
|
82
|
-
* browser's own navigation always pushes. So a plain click is taken over — the caller's
|
|
83
|
-
* `onClick` runs first and may still `preventDefault` — and becomes
|
|
84
|
-
* `location.replace(href)`: the same document load, with Back skipping the one-shot URL.
|
|
85
|
-
* That is the case of `replace` together with `reloadDocument`, or an app with no
|
|
86
|
-
* `linkComponent`. A modified click (new tab) and a `target` other than `_self` are left
|
|
87
|
-
* to the browser: they do not navigate THIS history. Without `replace`, `onClick` comes
|
|
88
|
-
* back untouched.
|
|
89
|
-
* @internal
|
|
90
|
-
*/
|
|
91
|
-
export function replacingClick(
|
|
92
|
-
onClick: ((event: MouseEvent<HTMLAnchorElement>) => void) | undefined,
|
|
93
|
-
href: string,
|
|
94
|
-
replace: boolean | undefined,
|
|
95
|
-
target?: string,
|
|
96
|
-
): ((event: MouseEvent<HTMLAnchorElement>) => void) | undefined {
|
|
97
|
-
if (!replace || (target !== undefined && target !== "" && target !== "_self")) return onClick;
|
|
98
|
-
return (event) => {
|
|
99
|
-
onClick?.(event);
|
|
100
|
-
if (!isPlainNavigationClick(event)) return;
|
|
101
|
-
event.preventDefault();
|
|
102
|
-
documentNavigation.replace(href);
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* What a ROUTER link is handed for `replace`: `{ replace: true }` when asked, else
|
|
108
|
-
* nothing at all — so a provider link that spreads its props onto a DOM `<a>` never
|
|
109
|
-
* receives an unknown attribute from a link that did not ask (see `KitLinkProps.replace`).
|
|
110
|
-
* @internal
|
|
111
|
-
*/
|
|
112
|
-
export function routerLinkNavigation(replace: boolean | undefined): { replace?: true } {
|
|
113
|
-
return replace ? { replace: true } : {};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Draws `props` through `render` as a component of its own, so a router link's hooks
|
|
118
|
-
* belong to it and not to the kit component calling it — for the kit components that
|
|
119
|
-
* call their own `renderLink` inline and reach the provider's link through here.
|
|
120
|
-
* @internal
|
|
121
|
-
*/
|
|
122
|
-
export function RenderedKitLink<P>({ render, props }: { render: (props: P) => ReactElement; props: P }) {
|
|
123
|
-
return render(props);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/* ── TextLink ─────────────────────────────────────────────────────────────── */
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* `brand` (default) for a link in running text, `muted` for footer and meta links
|
|
130
|
-
* that should not compete with the content, `danger` for a destructive one ("Leave
|
|
131
|
-
* group"), `inherit` for a link that takes its surroundings' colour.
|
|
132
|
-
*
|
|
133
|
-
* `primary` and `secondary` are the body and the secondary text colour, UNDERLINED
|
|
134
|
-
* (keksdose F3): a link that must read as part of the text around it — a name in a
|
|
135
|
-
* list row, a reference in a card's meta line — where `brand` repaints it in the accent
|
|
136
|
-
* and `muted` is a step too light to read as content. `secondary` darkens to the body
|
|
137
|
-
* colour under the pointer, as `muted` does; `primary` has nowhere darker to go, so its
|
|
138
|
-
* underline thickens instead.
|
|
139
|
-
*
|
|
140
|
-
* `warning` is the kit's `--warning` text colour, underlined (kastlan 46): a link inside
|
|
141
|
-
* a `<Tone tone="warning">` sentence or a warning banner, which `brand` would paint in a
|
|
142
|
-
* second hue and `inherit` would leave indistinguishable from the sentence. Like
|
|
143
|
-
* `primary`, it keeps its colour on hover and thickens the underline.
|
|
144
|
-
*
|
|
145
|
-
* The three colours that sit IN the text default to `underline="always"`: with the
|
|
146
|
-
* colour of their surroundings, the underline is the only thing that says "link"
|
|
147
|
-
* (WCAG 1.4.1). An explicit `underline` still wins.
|
|
148
|
-
*/
|
|
149
|
-
export type TextLinkTone = "brand" | "muted" | "danger" | "inherit" | "primary" | "secondary" | "warning";
|
|
150
|
-
|
|
151
|
-
/** `hover` (the default for `brand`, `muted`, `danger`, `inherit`): underlined under
|
|
152
|
-
* the pointer — the idiom all three apps draw. `always` (the default for `primary`,
|
|
153
|
-
* `secondary`, `warning`) for a link inside prose, where colour alone must not be the
|
|
154
|
-
* only mark (WCAG 1.4.1). `none` where the context already says "link" (a footer nav). */
|
|
155
|
-
export type TextLinkUnderline = "hover" | "always" | "none";
|
|
156
|
-
|
|
157
|
-
/** The `aria-current` token. `true` on {@link TextLinkProps.current} means `page`. */
|
|
158
|
-
export type TextLinkCurrent = "page" | "step" | "location" | "date" | "time" | "true";
|
|
159
|
-
|
|
160
|
-
/** What {@link TextLinkProps.renderLink} (and the provider's `linkComponent`) is
|
|
161
|
-
* handed. Spread it onto your router's link — `({ href, ...p }) => <Link to={href} {...p} />`. */
|
|
162
|
-
export interface TextLinkRenderProps {
|
|
163
|
-
href: string;
|
|
164
|
-
/** The link's look — keep it, or the tone, underline and focus ring go. */
|
|
165
|
-
className: string;
|
|
166
|
-
children: ReactNode;
|
|
167
|
-
ref?: Ref<HTMLAnchorElement>;
|
|
168
|
-
onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
|
|
169
|
-
onKeyDown?: (event: KeyboardEvent<HTMLAnchorElement>) => void;
|
|
170
|
-
"aria-current"?: TextLinkCurrent;
|
|
171
|
-
id?: string;
|
|
172
|
-
title?: string;
|
|
173
|
-
/** Present, as `true`, only when the link was given `replace` — see
|
|
174
|
-
* `KitLinkProps.replace`. Map it to your router's replace; never onto a DOM `<a>`. */
|
|
175
|
-
replace?: boolean;
|
|
176
|
-
[key: `aria-${string}`]: string | boolean | number | undefined;
|
|
177
|
-
[key: `data-${string}`]: unknown;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export interface TextLinkProps extends Omit<
|
|
181
|
-
ComponentPropsWithoutRef<"a">,
|
|
182
|
-
"href" | "children" | "aria-current" | "onClick" | "onKeyDown"
|
|
183
|
-
> {
|
|
184
|
-
href: string;
|
|
185
|
-
children: ReactNode;
|
|
186
|
-
/** Default `brand`. */
|
|
187
|
-
tone?: TextLinkTone;
|
|
188
|
-
/** Default `always` for `primary`, `secondary` and `warning`, else `hover`. */
|
|
189
|
-
underline?: TextLinkUnderline;
|
|
190
|
-
/**
|
|
191
|
-
* Navigate by replacing the current history entry, so Back does not return to this
|
|
192
|
-
* URL — keksdose F1, a one-shot URL (a confirmation landing, a `?done=1` hop). Handed
|
|
193
|
-
* to the router link as `replace` (see `KitLinkProps.replace` for mapping it); on a
|
|
194
|
-
* plain `<a>` (no `linkComponent`, or `reloadDocument`) a plain click becomes
|
|
195
|
-
* `location.replace(href)`. Ignored on an `external` link, which opens a new tab.
|
|
196
|
-
*/
|
|
197
|
-
replace?: boolean;
|
|
198
|
-
/**
|
|
199
|
-
* A plain `<a>` for an in-app `href`: the browser loads the whole document instead of
|
|
200
|
-
* the router swapping the view — keksdose F1, a route served outside the SPA (a file
|
|
201
|
-
* download, a server-rendered page, a logout that must drop every in-memory cache).
|
|
202
|
-
* Wins over `renderLink` and the provider's `linkComponent`: it is the caller saying
|
|
203
|
-
* "not the router" for this one link.
|
|
204
|
-
*/
|
|
205
|
-
reloadDocument?: boolean;
|
|
206
|
-
/**
|
|
207
|
-
* The link leaves the app: a plain `<a target="_blank" rel="noopener noreferrer">`
|
|
208
|
-
* (never the router's), an external-link mark after the text (mirrored in RTL), and
|
|
209
|
-
* "opens in a new tab" (`common.opensInNewTab`) read after it — the mark says it
|
|
210
|
-
* only to the eye. kastlan's BWO / BFS source links (rent-increase-calculator-page).
|
|
211
|
-
*/
|
|
212
|
-
external?: boolean;
|
|
213
|
-
/**
|
|
214
|
-
* Keep the click (and the Enter that activates the link) from reaching an ancestor —
|
|
215
|
-
* a link in a DataTable row with `onRowClick` goes to its own target instead of
|
|
216
|
-
* running the row's action. kastlan's `CellLink` did this by hand.
|
|
217
|
-
*/
|
|
218
|
-
stopPropagation?: boolean;
|
|
219
|
-
/** Mark the link as the current one of a set — `true` is `aria-current="page"`, the
|
|
220
|
-
* legal footer's link to the page you are on. Drawn in semibold. */
|
|
221
|
-
current?: boolean | TextLinkCurrent;
|
|
222
|
-
/** A Lucide icon before the text, at the text's size — kastlan's "← Back" link. */
|
|
223
|
-
icon?: LucideIcon;
|
|
224
|
-
/** Your router's link for an in-app `href`. Default: the `<UiKitProvider
|
|
225
|
-
* linkComponent>`, then a plain `<a>`. Ignored on an `external` link. */
|
|
226
|
-
renderLink?: (props: TextLinkRenderProps) => ReactElement;
|
|
227
|
-
onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
|
|
228
|
-
onKeyDown?: (event: KeyboardEvent<HTMLAnchorElement>) => void;
|
|
229
|
-
ref?: Ref<HTMLAnchorElement>;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const TONE: Record<TextLinkTone, string> = {
|
|
233
|
-
// Under More contrast the brand as text, `--brand-muted`, at rest and hovered (0.36,
|
|
234
|
-
// colour-roles §13.3 decision 8): `--brand` is a mark's colour, solved to 3:1.
|
|
235
|
-
brand: "text-brand hover:text-[var(--brand-hover)] contrast:text-brand-muted contrast:hover:text-brand-muted",
|
|
236
|
-
muted: "text-muted hover:text-primary",
|
|
237
|
-
danger: "text-danger hover:text-[var(--danger-hover)]",
|
|
238
|
-
inherit: "",
|
|
239
|
-
primary: "text-primary hover:decoration-2",
|
|
240
|
-
secondary: "text-secondary hover:text-primary",
|
|
241
|
-
warning: "text-warning hover:decoration-2",
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
/** The tones whose colour is their surroundings' — underlined by default; see
|
|
245
|
-
* {@link TextLinkTone}. */
|
|
246
|
-
const UNDERLINED_BY_DEFAULT = new Set<TextLinkTone>(["primary", "secondary", "warning"]);
|
|
247
|
-
|
|
248
|
-
const UNDERLINE: Record<TextLinkUnderline, string> = {
|
|
249
|
-
hover: "no-underline hover:underline",
|
|
250
|
-
always: "underline",
|
|
251
|
-
none: "no-underline",
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* The one inline link: a real `<a href>` (middle click, "open in new tab", link
|
|
256
|
-
* semantics) through the app's router for an in-app path, in one of four tones.
|
|
257
|
-
*
|
|
258
|
-
* kastlan draws this link a dozen ways by hand — `EntityLink` and `CellLink` (text-primary,
|
|
259
|
-
* hover underline, one stopping the row click), the legal pages' back link and footer,
|
|
260
|
-
* the feedback page's URL links, the calculator's external sources with a hand-placed
|
|
261
|
-
* ↗ and no word for a screen reader — and the lease wizard's unit step (lease-unit-step)
|
|
262
|
-
* used a raw `<a>` to an in-app route, which reloads the whole app. Here the router
|
|
263
|
-
* link comes from `<UiKitProvider linkComponent>`, set once.
|
|
264
|
-
*
|
|
265
|
-
* Inline, not `inline-flex`: a link inside a sentence must wrap with it. The icons sit
|
|
266
|
-
* on the text's baseline at the text's size, so they scale with whatever type the link
|
|
267
|
-
* is set in. The focus ring is an outline, which follows every line of a wrapped link.
|
|
268
|
-
*/
|
|
269
|
-
export function TextLink({
|
|
270
|
-
href,
|
|
271
|
-
children,
|
|
272
|
-
tone = "brand",
|
|
273
|
-
underline: underlineProp,
|
|
274
|
-
external = false,
|
|
275
|
-
replace,
|
|
276
|
-
reloadDocument = false,
|
|
277
|
-
stopPropagation = false,
|
|
278
|
-
current,
|
|
279
|
-
icon: Icon,
|
|
280
|
-
renderLink,
|
|
281
|
-
className,
|
|
282
|
-
onClick,
|
|
283
|
-
onKeyDown,
|
|
284
|
-
ref,
|
|
285
|
-
...rest
|
|
286
|
-
}: TextLinkProps) {
|
|
287
|
-
const common = useKitLabels("common", DEFAULT_COMMON_LABELS);
|
|
288
|
-
const kitLink = useKitLink();
|
|
289
|
-
const underline = underlineProp ?? (UNDERLINED_BY_DEFAULT.has(tone) ? "always" : "hover");
|
|
290
|
-
const ariaCurrent: TextLinkCurrent | undefined = current === true ? "page" : current === false ? undefined : current;
|
|
291
|
-
|
|
292
|
-
const look = cn(
|
|
293
|
-
"rounded-sm underline-offset-2 transition-colors",
|
|
294
|
-
"focus-visible:outline-focus focus-visible:outline-offset-2 focus-visible:outline-brand",
|
|
295
|
-
TONE[tone],
|
|
296
|
-
UNDERLINE[underline],
|
|
297
|
-
ariaCurrent && "font-semibold",
|
|
298
|
-
className,
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
const body = (
|
|
302
|
-
<>
|
|
303
|
-
{Icon && <Icon aria-hidden className="me-1 inline size-[1em] shrink-0 align-[-0.125em]" />}
|
|
304
|
-
{children}
|
|
305
|
-
{external && (
|
|
306
|
-
<>
|
|
307
|
-
<ExternalLink aria-hidden className="ms-1 inline size-[0.85em] align-[-0.1em] rtl:-scale-x-100" />{" "}
|
|
308
|
-
<span className="sr-only">({common.opensInNewTab})</span>
|
|
309
|
-
</>
|
|
310
|
-
)}
|
|
311
|
-
</>
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
const handleClick: TextLinkRenderProps["onClick"] = stopPropagation
|
|
315
|
-
? (event) => {
|
|
316
|
-
event.stopPropagation();
|
|
317
|
-
onClick?.(event);
|
|
318
|
-
}
|
|
319
|
-
: onClick;
|
|
320
|
-
const props: TextLinkRenderProps = {
|
|
321
|
-
...(rest as Partial<TextLinkRenderProps>),
|
|
322
|
-
ref,
|
|
323
|
-
href,
|
|
324
|
-
className: look,
|
|
325
|
-
"aria-current": ariaCurrent,
|
|
326
|
-
onClick: handleClick,
|
|
327
|
-
onKeyDown: stopPropagation
|
|
328
|
-
? (event) => {
|
|
329
|
-
if (event.key === "Enter") event.stopPropagation();
|
|
330
|
-
onKeyDown?.(event);
|
|
331
|
-
}
|
|
332
|
-
: onKeyDown,
|
|
333
|
-
children: body,
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
const render = external || reloadDocument ? undefined : pickLinkRenderer(renderLink, kitLink, href);
|
|
337
|
-
if (render) return <RenderedTextLink render={render} {...props} {...routerLinkNavigation(replace)} />;
|
|
338
|
-
// A plain `<a>` never gets `replace` as an attribute; asked for, it takes the click.
|
|
339
|
-
const plainClick = external ? handleClick : replacingClick(handleClick, href, replace, rest.target);
|
|
340
|
-
const { children: content, ...anchor } = props;
|
|
341
|
-
return (
|
|
342
|
-
<a
|
|
343
|
-
{...anchor}
|
|
344
|
-
href={href}
|
|
345
|
-
onClick={plainClick}
|
|
346
|
-
{...(external ? { target: "_blank", rel: "noopener noreferrer" } : null)}
|
|
347
|
-
>
|
|
348
|
-
{content}
|
|
349
|
-
</a>
|
|
350
|
-
);
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/** Calls the link renderer as a component, so a router link's hooks are its own. */
|
|
354
|
-
function RenderedTextLink({
|
|
355
|
-
render,
|
|
356
|
-
...props
|
|
357
|
-
}: TextLinkRenderProps & { render: (props: TextLinkRenderProps) => ReactElement }) {
|
|
358
|
-
return render(props);
|
|
359
|
-
}
|
package/src/components/text.tsx
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithoutRef, ElementType, ReactNode, Ref } from "react";
|
|
2
|
-
import { cn } from "../lib/cn";
|
|
3
|
-
|
|
4
|
-
/* ── SectionLabel ─────────────────────────────────────────────────────────── */
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* `xs` is 10px — the size `LegendGroup`'s title and the top-bar menus' heading row draw;
|
|
8
|
-
* `sm` (default) is 12px — the size `StatTile`'s label and lenkbank's section headings
|
|
9
|
-
* (control-page.tsx:119/123/127) draw. Two sizes because the label sits either inside a
|
|
10
|
-
* dense panel (a legend, a menu) or above a block of page content, and one size looked
|
|
11
|
-
* wrong in the other place.
|
|
12
|
-
*
|
|
13
|
-
* `md` (0.11.0) is 11px, the rung between them: keksdose's budget-summary card labels
|
|
14
|
-
* its figures ("Assigned", "Activity", "Upcoming", "Available" —
|
|
15
|
-
* budget-summary-card:258/264/286/297) and its support thread its day divider and a message's meta line
|
|
16
|
-
* (support-thread:153/223) at `text-[11px]` by hand — 10px read as a footnote under a
|
|
17
|
-
* figure that size, 12px competed with it. Named `md` rather than slotted in order
|
|
18
|
-
* because `sm` was already the default and renaming it would move every caller.
|
|
19
|
-
*
|
|
20
|
-
* `md` is also the heading over a CHART COLUMN (lenkbank P9): the small label centred
|
|
21
|
-
* over each of a pair of facing charts, or over each column of a small-multiples grid.
|
|
22
|
-
* There the label names a plot, not a section of the page, so `sm` (12px, the page's
|
|
23
|
-
* section heading) out-ranks the card title above it, and `xs` (10px, a legend's
|
|
24
|
-
* title) sinks below the axis ticks it sits beside. Rule of thumb: `xs` inside a
|
|
25
|
-
* control (legend, menu), `md` over a figure or a plot, `sm` over a block of page
|
|
26
|
-
* content.
|
|
27
|
-
*/
|
|
28
|
-
export type SectionLabelSize = "xs" | "md" | "sm";
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* The small, uppercase, tracked, muted label — as a class string, per size.
|
|
32
|
-
*
|
|
33
|
-
* Exported because `LegendGroup` and `StatTile` already draw it inline, and a class a
|
|
34
|
-
* caller has to position itself (a `<th>`, a `<legend>`, a menu `<li>`) is better
|
|
35
|
-
* reached as a string than wrapped in a component that only takes a `className`. The
|
|
36
|
-
* uppercase is CSS, so a screen reader reads the text as written: write it in normal
|
|
37
|
-
* case.
|
|
38
|
-
*
|
|
39
|
-
* The sizes are the kit's named rem steps since 0.32 (`text-micro` 0.625rem,
|
|
40
|
-
* `text-caption` 0.6875rem — 10 and 11 px at Normal), so a label grows with the text
|
|
41
|
-
* size like everything around it (docs/text-size-harmonization.md §3.2).
|
|
42
|
-
*/
|
|
43
|
-
export const SECTION_LABEL_CLASS: Record<SectionLabelSize, string> = {
|
|
44
|
-
xs: "text-micro font-semibold uppercase tracking-wide text-muted",
|
|
45
|
-
md: "text-caption font-semibold uppercase tracking-wide text-muted",
|
|
46
|
-
sm: "text-xs font-semibold uppercase tracking-wide text-muted",
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* `plain` (default): the label alone, as above.
|
|
51
|
-
*
|
|
52
|
-
* `band` (0.13, keksdose F5): the label on a full-width `surface-2` bar with a bottom
|
|
53
|
-
* border — the day-group header of keksdose's mobile transaction list
|
|
54
|
-
* (mobile-transaction-list.tsx:171), which separates one day's rows from the next.
|
|
55
|
-
* Its type is kept as keksdose drew it — `font-medium` in the SECONDARY text colour,
|
|
56
|
-
* not the plain label's semibold muted — so adopting the kit does not restyle a live
|
|
57
|
-
* list: the bar already sets the label apart, and needs no extra weight. The padding (`px-4 py-2`) lines the text up with a
|
|
58
|
-
* `ListItem density="comfortable"` row below it; override it with `className` for a
|
|
59
|
-
* list at another density. A sticky header is the caller's: add `sticky top-0`.
|
|
60
|
-
*/
|
|
61
|
-
export type SectionLabelVariant = "plain" | "band";
|
|
62
|
-
|
|
63
|
-
/** The band's own type and box, per size — spelled out rather than merged over
|
|
64
|
-
* {@link SECTION_LABEL_CLASS}, so the result does not hang on tailwind-merge telling
|
|
65
|
-
* a font-size arbitrary `text-` value from a colour one. (Not spelt out as class
|
|
66
|
-
* names here: Tailwind scans comments, and a literal one broke the showcase CSS.) */
|
|
67
|
-
const SECTION_LABEL_BAND_CLASS: Record<SectionLabelSize, string> = {
|
|
68
|
-
xs: "text-micro",
|
|
69
|
-
md: "text-caption",
|
|
70
|
-
sm: "text-xs",
|
|
71
|
-
};
|
|
72
|
-
const BAND = "block border-b border-subtle bg-surface-2 px-4 py-2 font-medium uppercase tracking-wide text-secondary";
|
|
73
|
-
|
|
74
|
-
type SectionLabelElement = "h2" | "h3" | "h4" | "h5" | "h6" | "p" | "span" | "div" | "legend";
|
|
75
|
-
|
|
76
|
-
export interface SectionLabelProps extends ComponentPropsWithoutRef<"h3"> {
|
|
77
|
-
/**
|
|
78
|
-
* The element — which is the heading LEVEL, and so is the caller's to pick: the kit
|
|
79
|
-
* cannot know where in the outline the label sits. Default `h3`, which is what
|
|
80
|
-
* lenkbank's control page writes under its `h2` card title. Pass `span` or `p` for a
|
|
81
|
-
* label that is not a heading at all (a legend group's title).
|
|
82
|
-
*/
|
|
83
|
-
as?: SectionLabelElement;
|
|
84
|
-
size?: SectionLabelSize;
|
|
85
|
-
/** `band` draws the label on a `surface-2` bar with a bottom border — a list's group
|
|
86
|
-
* header. See {@link SectionLabelVariant}. */
|
|
87
|
-
variant?: SectionLabelVariant;
|
|
88
|
-
children: ReactNode;
|
|
89
|
-
/** The element `as` names — hence `HTMLElement` (0.34, API-2, refactor audit 2026-10). */
|
|
90
|
-
ref?: Ref<HTMLElement>;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* A section's small uppercase label. lenkbank spells
|
|
95
|
-
* `text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400`
|
|
96
|
-
* on every `<h3>` of its control page and more; keksdose's budget switcher writes the
|
|
97
|
-
* 10px version on a menu row. One component, the token colour, and the level chosen
|
|
98
|
-
* where the outline is known.
|
|
99
|
-
*/
|
|
100
|
-
export function SectionLabel({
|
|
101
|
-
as = "h3",
|
|
102
|
-
size = "sm",
|
|
103
|
-
variant = "plain",
|
|
104
|
-
className,
|
|
105
|
-
children,
|
|
106
|
-
...rest
|
|
107
|
-
}: SectionLabelProps) {
|
|
108
|
-
const Tag = as as ElementType;
|
|
109
|
-
const type = variant === "band" ? cn(SECTION_LABEL_BAND_CLASS[size], BAND) : SECTION_LABEL_CLASS[size];
|
|
110
|
-
return (
|
|
111
|
-
<Tag {...rest} className={cn(type, className)}>
|
|
112
|
-
{children}
|
|
113
|
-
</Tag>
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/* ── Caption ──────────────────────────────────────────────────────────────── */
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* The caption type as a class string: `text-caption` (0.6875rem, 11 px at Normal, §3.2),
|
|
121
|
-
* snug, muted. lenkbank's `CAPTION`
|
|
122
|
-
* (shared/ui/caption.ts:23) — written out 31 times before it was a constant — as a
|
|
123
|
-
* token colour rather than `slate-500 dark:slate-400`, so it follows the palette.
|
|
124
|
-
* Exported for the same reason lenkbank's is a string: every caller positions it
|
|
125
|
-
* differently (`mt-1`, `self-end pb-2`, `border-t`), and what must be one thing is the
|
|
126
|
-
* type, not the box.
|
|
127
|
-
*/
|
|
128
|
-
export const CAPTION_CLASS = "text-caption leading-snug text-muted";
|
|
129
|
-
|
|
130
|
-
export interface CaptionProps extends ComponentPropsWithoutRef<"p"> {
|
|
131
|
-
/** Default `p`; `span` for a caption inside a line of other content. */
|
|
132
|
-
as?: "p" | "span" | "div";
|
|
133
|
-
children: ReactNode;
|
|
134
|
-
/** The element `as` names — hence `HTMLElement` (0.34, API-2, refactor audit 2026-10). */
|
|
135
|
-
ref?: Ref<HTMLElement>;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* The small grey sentence under a field, a table or a button — prose ABOUT the thing
|
|
140
|
-
* above it. Not `FieldHint`, which hides behind a field label's "?" so a paragraph does
|
|
141
|
-
* not make one field taller than its neighbour (lenkbank feedback #27).
|
|
142
|
-
*/
|
|
143
|
-
export function Caption({ as = "p", className, children, ...rest }: CaptionProps) {
|
|
144
|
-
const Tag = as as ElementType;
|
|
145
|
-
return (
|
|
146
|
-
<Tag {...rest} className={cn(CAPTION_CLASS, className)}>
|
|
147
|
-
{children}
|
|
148
|
-
</Tag>
|
|
149
|
-
);
|
|
150
|
-
}
|