@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,223 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithoutRef, ComponentPropsWithRef, MouseEvent, ReactElement, ReactNode, Ref } from "react";
|
|
2
|
-
import { cn } from "../lib/cn";
|
|
3
|
-
import { buttonClasses, type ButtonSize, type ButtonVariant } from "./button-look";
|
|
4
|
-
import { useKitLink } from "../i18n/kit-labels";
|
|
5
|
-
import { pickLinkRenderer } from "./text-link";
|
|
6
|
-
|
|
7
|
-
// Every class below is spelled out in full rather than assembled from parts: the
|
|
8
|
-
// consumer's Tailwind build finds classes by scanning this package's source as text,
|
|
9
|
-
// and a class that exists only after a template literal runs is never generated.
|
|
10
|
-
//
|
|
11
|
-
// Each rule is written twice, once for a direct child and once for a `<button>` one
|
|
12
|
-
// level down. The second is for a Tooltip-wrapped IconButton — the map zoom's + and −
|
|
13
|
-
// both carry a tooltip — where the direct child is the tooltip's wrapper span and the
|
|
14
|
-
// button that draws the border and the corners sits inside it. The same again for an
|
|
15
|
-
// `<a>` one level down: a router link member (see {@link ButtonGroupLink}) under a
|
|
16
|
-
// tooltip. A bare link is a direct child and needs nothing extra.
|
|
17
|
-
const JOINED_COMMON = cn(
|
|
18
|
-
"inline-flex rounded-md border border-subtle",
|
|
19
|
-
// The group draws the frame; each member gives up its own border, radius and shadow.
|
|
20
|
-
"[&>*]:rounded-none [&>*]:border-0 [&>*]:shadow-none",
|
|
21
|
-
"[&>*>button]:rounded-none [&>*>button]:border-0 [&>*>button]:shadow-none",
|
|
22
|
-
"[&>*>a]:rounded-none [&>*>a]:border-0 [&>*>a]:shadow-none",
|
|
23
|
-
"[&>*]:border-subtle",
|
|
24
|
-
// A focused member rises above its neighbours so its ring is not painted over by
|
|
25
|
-
// the next one's background.
|
|
26
|
-
"[&>*]:relative [&>*:focus-within]:z-10",
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* A joined row at Large and Extra large wraps rather than run past its container (0.32.1,
|
|
31
|
-
* the 360 px Extra-large sweep; docs/text-size-harmonization.md §4 "nothing
|
|
32
|
-
* overflows"): "Buttons | Chips | Feedback" was 329 px at 150 %, 67 px past a 360 px
|
|
33
|
-
* phone's card. A wrapped row cannot keep one frame with dividers between members — the
|
|
34
|
-
* second line's first member would carry a divider against the frame and no line would
|
|
35
|
-
* part the rows — so at Large the frame is drawn by the members: each its own 1px
|
|
36
|
-
* border, overlapping its neighbours by a pixel on both axes (the container's `ps-px
|
|
37
|
-
* pt-px` takes the overlap back at the edges). On one row that draws the same frame and
|
|
38
|
-
* dividers as Normal; wrapped, every line and every member is parted by one hairline,
|
|
39
|
-
* and the members share out each line (`grow`), so the lines make one block. A group
|
|
40
|
-
* that fits is only as wide as its members, so nothing grows there. A `large:` class,
|
|
41
|
-
* so Normal keeps the frame it has, and it costs no render.
|
|
42
|
-
*/
|
|
43
|
-
const JOINED_WRAP_AT_LARGE = cn(
|
|
44
|
-
"large:max-w-full large:flex-wrap large:border-0 large:ps-px large:pt-px",
|
|
45
|
-
"large:[&>*]:border large:[&>*]:-ms-px large:[&>*]:-mt-px",
|
|
46
|
-
"large:[&>*]:grow large:[&>*>button]:grow large:[&>*>a]:grow",
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const JOINED: Record<"horizontal" | "vertical", string> = {
|
|
50
|
-
// Logical edges and corners throughout (`border-s`, `rounded-s-*`), so in RTL the
|
|
51
|
-
// first member sits on the right with the right-hand corners rounded — the physical
|
|
52
|
-
// pair would round the outside of the last button and square off the first.
|
|
53
|
-
horizontal: cn(
|
|
54
|
-
JOINED_COMMON,
|
|
55
|
-
"flex-row items-stretch",
|
|
56
|
-
"[&>*:not(:first-child)]:border-s",
|
|
57
|
-
"[&>:first-child]:rounded-s-md [&>:last-child]:rounded-e-md",
|
|
58
|
-
"[&>:first-child>button]:rounded-s-md [&>:last-child>button]:rounded-e-md",
|
|
59
|
-
"[&>:first-child>a]:rounded-s-md [&>:last-child>a]:rounded-e-md",
|
|
60
|
-
JOINED_WRAP_AT_LARGE,
|
|
61
|
-
),
|
|
62
|
-
// The block axis is top-to-bottom in both reading directions, so top/bottom are
|
|
63
|
-
// already the logical edges here.
|
|
64
|
-
vertical: cn(
|
|
65
|
-
JOINED_COMMON,
|
|
66
|
-
"flex-col items-stretch",
|
|
67
|
-
"[&>*:not(:first-child)]:border-t",
|
|
68
|
-
"[&>:first-child]:rounded-t-md [&>:last-child]:rounded-b-md",
|
|
69
|
-
"[&>:first-child>button]:rounded-t-md [&>:last-child>button]:rounded-b-md",
|
|
70
|
-
"[&>:first-child>a]:rounded-t-md [&>:last-child>a]:rounded-b-md",
|
|
71
|
-
),
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
// `gapped`: the members keep their own shape — round overlay discs, each its own
|
|
75
|
-
// border and radius — and sit apart. Nothing is stripped, so there is nothing to
|
|
76
|
-
// restore per edge, and the gap is logical by nature.
|
|
77
|
-
const GAPPED: Record<"horizontal" | "vertical", string> = {
|
|
78
|
-
horizontal: "inline-flex flex-row items-center gap-1",
|
|
79
|
-
vertical: "inline-flex flex-col items-center gap-1",
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
// `elevated`, joined: the frame itself floats — a filled surface under the members (a
|
|
83
|
-
// ghost member would otherwise show the content through it) and the shadow of a
|
|
84
|
-
// control lifted over the page.
|
|
85
|
-
const ELEVATED_JOINED = "bg-surface shadow-lg";
|
|
86
|
-
// `elevated`, gapped: there is no frame, so each disc carries the shadow. Aimed at the
|
|
87
|
-
// control, not the tooltip's square wrapper span, whose shadow would be a box round a
|
|
88
|
-
// round disc.
|
|
89
|
-
const ELEVATED_GAPPED = "[&>button]:shadow-md [&>a]:shadow-md [&>*>button]:shadow-md [&>*>a]:shadow-md";
|
|
90
|
-
|
|
91
|
-
export interface ButtonGroupProps extends Omit<ComponentPropsWithRef<"div">, "role"> {
|
|
92
|
-
/** `horizontal` (default): side by side, in reading order. `vertical`: stacked —
|
|
93
|
-
* the map's zoom + over −. */
|
|
94
|
-
orientation?: "horizontal" | "vertical";
|
|
95
|
-
/**
|
|
96
|
-
* `joined` (default): one frame, hairline dividers, outer corners rounded. `gapped`:
|
|
97
|
-
* separate controls with a small gap, each keeping its own shape — the overlay
|
|
98
|
-
* discs of keksdose's receipt preview zoom (scan-file-preview.tsx:362, the − and +
|
|
99
|
-
* `IconButton variant="overlay"` in a hand-made `flex gap-1`), where a joined frame
|
|
100
|
-
* would be a box drawn over the photo.
|
|
101
|
-
*/
|
|
102
|
-
variant?: "joined" | "gapped";
|
|
103
|
-
/**
|
|
104
|
-
* Float it: a surface with a shadow, for a toolbar that sits OVER content (a map's
|
|
105
|
-
* zoom, a photo's controls) rather than in the page's flow — keksdose adds
|
|
106
|
-
* `shadow-sm` to each disc on the receipt preview by hand. On a joined group the
|
|
107
|
-
* frame is filled and shadowed; on a gapped one, each member.
|
|
108
|
-
*/
|
|
109
|
-
elevated?: boolean;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Adjacent `Button`s or `IconButton`s drawn as one joined control: a single frame,
|
|
114
|
-
* hairline dividers between the members, rounded only at the outer corners.
|
|
115
|
-
*
|
|
116
|
-
* keksdose asked for it twice — "collapse all / expand all" above its category
|
|
117
|
-
* tree, and the + and − of its map zoom — both hand-built with negative margins and
|
|
118
|
-
* physical `rounded-l` / `rounded-r`, which came out inside-out under `dir="rtl"`.
|
|
119
|
-
*
|
|
120
|
-
* `role="group"` with a name: a reader then introduces the pair as "Zoom, group"
|
|
121
|
-
* before reading "Zoom in", which is what tells a listener that the next button
|
|
122
|
-
* belongs with this one. Pass `aria-label` (or `aria-labelledby`); a group with no
|
|
123
|
-
* name is one more unlabelled wrapper. It is NOT a toolbar — it adds no arrow-key
|
|
124
|
-
* roving, and every member keeps its own tab stop, as plain adjacent buttons do.
|
|
125
|
-
* For one-of-many selection use `ToggleGroup`, which has the radio semantics.
|
|
126
|
-
*/
|
|
127
|
-
export function ButtonGroup({
|
|
128
|
-
orientation = "horizontal",
|
|
129
|
-
variant = "joined",
|
|
130
|
-
elevated = false,
|
|
131
|
-
className,
|
|
132
|
-
...rest
|
|
133
|
-
}: ButtonGroupProps) {
|
|
134
|
-
const joined = variant === "joined";
|
|
135
|
-
return (
|
|
136
|
-
<div
|
|
137
|
-
{...rest}
|
|
138
|
-
role="group"
|
|
139
|
-
data-orientation={orientation}
|
|
140
|
-
data-variant={variant}
|
|
141
|
-
className={cn(
|
|
142
|
-
joined ? JOINED[orientation] : GAPPED[orientation],
|
|
143
|
-
elevated && (joined ? ELEVATED_JOINED : ELEVATED_GAPPED),
|
|
144
|
-
className,
|
|
145
|
-
)}
|
|
146
|
-
/>
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/** What {@link ButtonGroupLinkProps.renderLink} is handed. Spread it onto your router's
|
|
151
|
-
* link, mapping `href` — `renderLink={({ href, ...p }) => <Link to={href} {...p} />}`. */
|
|
152
|
-
export interface ButtonGroupLinkRenderProps {
|
|
153
|
-
href: string;
|
|
154
|
-
/** The button look — keep it, or the member is a bare link in the frame. */
|
|
155
|
-
className: string;
|
|
156
|
-
children: ReactNode;
|
|
157
|
-
ref?: Ref<HTMLAnchorElement>;
|
|
158
|
-
"aria-current"?: "page";
|
|
159
|
-
onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
|
|
160
|
-
[key: `aria-${string}`]: string | boolean | number | undefined;
|
|
161
|
-
[key: `data-${string}`]: unknown;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export interface ButtonGroupLinkProps extends Omit<ComponentPropsWithoutRef<"a">, "href" | "className" | "children"> {
|
|
165
|
-
href: string;
|
|
166
|
-
/** The {@link Button} variant it looks like. Default `secondary`, the usual member. */
|
|
167
|
-
variant?: ButtonVariant;
|
|
168
|
-
size?: ButtonSize;
|
|
169
|
-
/** The member for the page you are on: `aria-current="page"` and the "on" look of a
|
|
170
|
-
* pressed member, so a link row reads as a segmented switch between pages. */
|
|
171
|
-
current?: boolean;
|
|
172
|
-
/** Render through your router's `Link` — see {@link ButtonGroupLinkRenderProps}.
|
|
173
|
-
* Default: the `<UiKitProvider linkComponent>`, then `<a>`. */
|
|
174
|
-
renderLink?: (props: ButtonGroupLinkRenderProps) => ReactElement;
|
|
175
|
-
className?: string;
|
|
176
|
-
children: ReactNode;
|
|
177
|
-
ref?: Ref<HTMLAnchorElement>;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// The brand AS TEXT is `--brand-muted` (0.33, docs/colour-roles-harmonization.md §5.5):
|
|
181
|
-
// `--brand` itself is solved to 3:1 and read 2.97:1 on its own wash in the derived dark
|
|
182
|
-
// presets; the muted form holds 4.5:1 on it in every preset.
|
|
183
|
-
const LINK_CURRENT = "bg-brand-soft text-brand-muted hover:bg-brand-soft-hover";
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* A {@link ButtonGroup} member that navigates: a link drawn as a {@link Button}, so it
|
|
187
|
-
* joins the frame like one. A group mixing actions and pages — "Export" beside "Open
|
|
188
|
-
* report" — had to either make the page a button with an `onClick` navigate (no
|
|
189
|
-
* middle-click, no "open in new tab", no link semantics) or style an `<a>` whose
|
|
190
|
-
* corners the group did not know about. Plain `<a>` by default; `renderLink` for the
|
|
191
|
-
* router's `Link`, the kit's usual shape (`Chip`, `MenuItem`, `StatTile`).
|
|
192
|
-
*/
|
|
193
|
-
export function ButtonGroupLink({
|
|
194
|
-
href,
|
|
195
|
-
variant = "secondary",
|
|
196
|
-
size,
|
|
197
|
-
current = false,
|
|
198
|
-
renderLink,
|
|
199
|
-
className,
|
|
200
|
-
children,
|
|
201
|
-
...rest
|
|
202
|
-
}: ButtonGroupLinkProps) {
|
|
203
|
-
const kitLink = useKitLink();
|
|
204
|
-
const props: ButtonGroupLinkRenderProps = {
|
|
205
|
-
...rest,
|
|
206
|
-
href,
|
|
207
|
-
"aria-current": current ? "page" : undefined,
|
|
208
|
-
className: buttonClasses(variant, { size, className: cn(current && LINK_CURRENT, className) }),
|
|
209
|
-
children,
|
|
210
|
-
};
|
|
211
|
-
const render = pickLinkRenderer(renderLink, kitLink, href);
|
|
212
|
-
if (render) return <RenderedGroupLink render={render} {...props} />;
|
|
213
|
-
const { children: content, ...anchor } = props;
|
|
214
|
-
return <a {...anchor}>{content}</a>;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/** Calls `renderLink` as a component, so the router link's hooks are its own. */
|
|
218
|
-
function RenderedGroupLink({
|
|
219
|
-
render,
|
|
220
|
-
...props
|
|
221
|
-
}: ButtonGroupLinkRenderProps & { render: (props: ButtonGroupLinkRenderProps) => ReactElement }) {
|
|
222
|
-
return render(props);
|
|
223
|
-
}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { cn } from "../lib/cn";
|
|
2
|
-
import { FOCUS_RING_WIDTH } from "./focus-ring";
|
|
3
|
-
import type { KitLinkComponent, KitLinkProps } from "../i18n/kit-labels";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The button look, which {@link Button} and {@link IconButton} share (0.34, MOD-2, refactor
|
|
7
|
-
* audit 2026-10). In ui.tsx it was the one knot in an otherwise one-way graph: Button drew
|
|
8
|
-
* IconButton's pressed look, and IconButton drew Button's variant colours, its hover ink
|
|
9
|
-
* and its router link. Both now draw from this module, which renders nothing, so neither
|
|
10
|
-
* imports the other.
|
|
11
|
-
*
|
|
12
|
-
* Public through the barrel (src/index.ts) by name: `buttonClasses`, `TOUCH_TARGET_LARGE`
|
|
13
|
-
* and the four types. The other exports are the two buttons' shared parts (`@internal`).
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* A button's look.
|
|
18
|
-
*
|
|
19
|
-
* - `default`: the quiet action — a warm filled chip with a hairline border. What a
|
|
20
|
-
* Button with no `variant` draws.
|
|
21
|
-
* - `accent`: the strong one, solid `--brand` with `--brand-contrast` text — the one
|
|
22
|
-
* call to action a view leads with. "Accent" is the button's role here, painted in
|
|
23
|
-
* `--brand`; it is not the palette's second anchor colour, also called `accent`
|
|
24
|
-
* (theme/palette-derive.ts), which no button paints.
|
|
25
|
-
* - `secondary`: an outline. `ghost`: text or glyph only. `danger`: solid `--danger`,
|
|
26
|
-
* for an action that destroys something. `link`: a text link that acts (a `<button>`).
|
|
27
|
-
*
|
|
28
|
-
* 0.49's `primary` and `brand` (aliases of `default` and `accent`) were removed in 0.51;
|
|
29
|
-
* `primary` will not come back with another meaning.
|
|
30
|
-
*/
|
|
31
|
-
export type ButtonVariant = "default" | "accent" | "secondary" | "ghost" | "danger" | "link";
|
|
32
|
-
|
|
33
|
-
// Shared base ring for every button-styled element. Kept as a named const so the
|
|
34
|
-
// <Button> component and the {@link buttonClasses} helper draw from one source and
|
|
35
|
-
// can never drift apart.
|
|
36
|
-
//
|
|
37
|
-
// The ring is the kit's focus frame (§5): {@link FOCUS_RING_WIDTH} wide, on keyboard focus
|
|
38
|
-
// (`focus-visible`) — a tap or a click no longer leaves a ring on the button — in each
|
|
39
|
-
// variant's own colour below.
|
|
40
|
-
//
|
|
41
|
-
// `[&_svg]:shrink-0` (0.32.2, kastlan's 0.32.1 report): an icon beside a label keeps its
|
|
42
|
-
// size when the label wraps at Large. Without it the svg was a flex item like the text,
|
|
43
|
-
// and a two-line label squeezed it to a sliver ("New invoice" in a page header at 360 px
|
|
44
|
-
// / Extra large).
|
|
45
|
-
const BUTTON_BASE = cn(
|
|
46
|
-
"inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:shrink-0",
|
|
47
|
-
FOCUS_RING_WIDTH,
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* The touch target at Large and Extra large (docs/text-size-harmonization.md §4): at
|
|
52
|
-
* least 48 px, the size a finger needs whatever the type. In px on purpose, like the
|
|
53
|
-
* field floor ({@link FIELD_TOUCH_TEXT}): it is a physical threshold, not a size that
|
|
54
|
-
* follows the text. Normal keeps the kit's own heights; a `large:` variant, so it costs
|
|
55
|
-
* no render and is right on the first paint.
|
|
56
|
-
*/
|
|
57
|
-
export const TOUCH_TARGET_LARGE = "large:min-h-[48px] large:min-w-[48px]";
|
|
58
|
-
|
|
59
|
-
/** The 48 px target at Large for a control whose BOX cannot grow (a chip's or a tab's
|
|
60
|
-
* action, IconButton `2xs`; Tabs' overflow cues, 0.48 KS N3): an invisible `::after`
|
|
61
|
-
* centred on it takes the taps a finger lands round the glyph. Not public. */
|
|
62
|
-
export const HIT_AREA_LARGE =
|
|
63
|
-
"relative large:after:absolute large:after:inset-[calc((100%-48px)/2)] large:after:content-['']";
|
|
64
|
-
|
|
65
|
-
export type ButtonSize = "sm" | "md";
|
|
66
|
-
|
|
67
|
-
// Box geometry per size, split out of the base so the two cannot be merged into one
|
|
68
|
-
// string that a size then has to fight. `md` is the pre-0.8.0 look, unchanged. `sm` is
|
|
69
|
-
// the compact secondary action keksdose repeats by hand as `px-2 py-1 text-xs` (and
|
|
70
|
-
// `px-2 py-0.5 text-xs`) on the buttons in a toolbar or a table header; one rung is
|
|
71
|
-
// enough, so the two spellings meet at `py-1`. There is no `lg`: no app has asked for
|
|
72
|
-
// a bigger text button (IconButton's `lg` is a touch target, not a text size). The
|
|
73
|
-
// variant map comes AFTER the size, so `link`'s `p-0` still wins at either size.
|
|
74
|
-
//
|
|
75
|
-
// At Large and above (§4) `sm` grows to `md`'s height — the padding that makes its
|
|
76
|
-
// 1rem line as tall as `md`'s 1.25rem one — and both reach the 48 px touch target. The
|
|
77
|
-
// type stays `sm`'s: the compact button is still the quieter one. Not on `link`, which
|
|
78
|
-
// is a word in a sentence and has no box to grow (see `buttonLook`).
|
|
79
|
-
const BUTTON_SIZES: Record<ButtonSize, string> = {
|
|
80
|
-
md: "gap-2 px-3 py-2 text-sm",
|
|
81
|
-
sm: "gap-1.5 px-2 py-1 text-xs",
|
|
82
|
-
};
|
|
83
|
-
const BUTTON_SIZES_LARGE: Record<ButtonSize, string> = {
|
|
84
|
-
md: "large:min-h-[48px]",
|
|
85
|
-
sm: "large:min-h-[48px] large:py-2.5",
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* The hover of a control that may sit on the page, a card or a well (0.33, B′ —
|
|
90
|
-
* docs/colour-roles-harmonization.md §12.1, §12.10): the body ink at 7 %, TRANSLUCENT,
|
|
91
|
-
* so it darkens (in dark, lightens) whatever is under it by the same step — 1.11:1 or
|
|
92
|
-
* more on all three surfaces, both themes, with the label at 7:1 and up. It was
|
|
93
|
-
* `--bg-surface-2`, which since 0.33 is the page itself in light: a ghost button on the
|
|
94
|
-
* page would not have moved at all. Not `--bg-hover` either, which is mixed against the
|
|
95
|
-
* CARD and stands only 1.04:1 from the page. IconButton's `custom` tone uses the same
|
|
96
|
-
* recipe at 12 %.
|
|
97
|
-
*/
|
|
98
|
-
export const HOVER_INK = "hover:bg-[color-mix(in_srgb,var(--text-primary)_7%,transparent)]";
|
|
99
|
-
|
|
100
|
-
// Warm, palette-token-driven so buttons blend with the fields + cards in every theme.
|
|
101
|
-
// Actions default to a warm bordered look (`default` = filled warm chip, secondary =
|
|
102
|
-
// outline); `accent` is the solid brand fill for the rare strong CTA; `danger` takes the
|
|
103
|
-
// semantic `--danger` family (destructive semantics), so a consumer can re-point the
|
|
104
|
-
// destructive hue instead of inheriting a hard-coded red. Focus rings follow each
|
|
105
|
-
// variant's own accent: brand for the four neutral ones, danger for `danger`.
|
|
106
|
-
export const buttonVariantClasses: Record<ButtonVariant, string> = {
|
|
107
|
-
default:
|
|
108
|
-
// Hovers onto `--bg-active`, not `--border` (0.33, §12.9): More contrast steps the
|
|
109
|
-
// border until it is a 3:1 LINE, and as a fill under the label that left 2.7:1.
|
|
110
|
-
"border border-subtle bg-surface-2 text-primary hover:bg-active focus-visible:ring-brand",
|
|
111
|
-
secondary: `border border-subtle bg-transparent text-primary ${HOVER_INK} focus-visible:ring-brand`,
|
|
112
|
-
ghost: `bg-transparent text-primary ${HOVER_INK} focus-visible:ring-brand`,
|
|
113
|
-
danger: "bg-danger text-danger-contrast hover:bg-danger-hover focus-visible:ring-danger-strong",
|
|
114
|
-
accent: "bg-brand text-brand-contrast hover:bg-brand-hover focus-visible:ring-brand",
|
|
115
|
-
// A text link that is still a `<button>` — keksdose's six hand-rolled
|
|
116
|
-
// `<button className="text-brand underline">` sites ("Resend code", "Show all",
|
|
117
|
-
// "Undo" in a toast…), which act rather than navigate and so must not be anchors.
|
|
118
|
-
// The box padding goes (`p-0`) so it sits in a sentence at the text's own size, but
|
|
119
|
-
// the base's focus ring stays: those copies had `outline-none` and no ring, so
|
|
120
|
-
// a keyboard user tabbing onto them saw nothing at all. `rounded-sm` keeps that
|
|
121
|
-
// ring hugging the word instead of drawing a pill round it.
|
|
122
|
-
//
|
|
123
|
-
// Under More contrast the word reads `--brand-muted`, the brand AS TEXT (0.36,
|
|
124
|
-
// colour-roles §13.3 decision 8): `--brand` is solved as a mark (3:1), and on More
|
|
125
|
-
// contrast's darker light well Moss's read 3.68:1; the derived dark brands sit at 3.0
|
|
126
|
-
// as text too. Both modes, since `contrast:` does not split them.
|
|
127
|
-
link: "rounded-sm p-0 bg-transparent text-brand underline-offset-4 hover:underline focus-visible:ring-brand contrast:text-brand-muted",
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* The text colour of a `link` or `ghost` button, over the variant's own.
|
|
132
|
-
*
|
|
133
|
-
* `muted` is the QUIET link keksdose hand-rolls in six places (tours-page:321's "Mark
|
|
134
|
-
* undone", transaction-fields:176/215's "Add line" / "Fill total",
|
|
135
|
-
* invoice-lines-table:376, invoice-review:464): secondary text that darkens to the
|
|
136
|
-
* body colour under the pointer, for an action that must be findable but not compete
|
|
137
|
-
* with the brand-coloured one beside it. `danger` is the same quiet look turning
|
|
138
|
-
* `--danger` on hover — transaction-editor:401's "Remove split", which is a text
|
|
139
|
-
* action that destroys something.
|
|
140
|
-
*
|
|
141
|
-
* A `tone` rather than a `link-muted` variant, because it is the axis IconButton
|
|
142
|
-
* already has (`tone="muted"`, `tone="danger"`, same quiet-until-hover meaning), and
|
|
143
|
-
* because the same two looks are wanted on `ghost`.
|
|
144
|
-
*
|
|
145
|
-
* `danger` also reaches the two NEUTRAL boxed variants, where the box carries it:
|
|
146
|
-
* `secondary` becomes an outlined destructive button (`--danger` text and a
|
|
147
|
-
* `--danger-border` outline, the quiet danger fill on hover) and `default` a soft one
|
|
148
|
-
* (the quiet fill at rest, solid `--danger` on hover). kastlan's meeting-invitations-
|
|
149
|
-
* tab.tsx "Remove all" is `variant="secondary" className="text-destructive"` — a
|
|
150
|
-
* destructive action that must sit in a row of secondary buttons without shouting
|
|
151
|
-
* like the solid `variant="danger"` would, and whose red text alone left the border
|
|
152
|
-
* and hover saying "neutral". `muted` stays a text look and does nothing on a box, and
|
|
153
|
-
* `danger`, `accent` and `link`'s own colours are left alone: a tone that recoloured a
|
|
154
|
-
* solid danger or accent button would be a second variant under another name.
|
|
155
|
-
*/
|
|
156
|
-
export type ButtonTone = "default" | "muted" | "danger";
|
|
157
|
-
|
|
158
|
-
// `contrast:text-secondary` restates the tone's own colour under the `contrast:` variant,
|
|
159
|
-
// so tailwind-merge drops the link's `contrast:text-brand-muted` (0.36): a quiet link
|
|
160
|
-
// stays quiet under More contrast. On `ghost` it reads the same either way.
|
|
161
|
-
const BUTTON_TONES: Record<Exclude<ButtonTone, "default">, string> = {
|
|
162
|
-
muted: "text-secondary hover:text-primary disabled:hover:text-secondary contrast:text-secondary",
|
|
163
|
-
danger:
|
|
164
|
-
"text-secondary hover:text-danger focus-visible:ring-danger-strong disabled:hover:text-secondary contrast:text-secondary",
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
/** Only the two transparent variants take every tone; see {@link ButtonTone}. */
|
|
168
|
-
const TONED_VARIANTS = new Set<ButtonVariant>(["link", "ghost"]);
|
|
169
|
-
|
|
170
|
-
// `tone="danger"` on the neutral boxed variants — see {@link ButtonTone}. Each string
|
|
171
|
-
// restates every colour the variant sets (border, fill, text, hover, ring) so none of
|
|
172
|
-
// the neutral ones survives the merge.
|
|
173
|
-
const BUTTON_BOXED_DANGER: Partial<Record<ButtonVariant, string>> = {
|
|
174
|
-
// Not boxed, but its hover is a fill: the danger wash under the danger text, as
|
|
175
|
-
// IconButton's danger tone (0.33). On B′'s translucent ink `--danger` fell to 4.2:1
|
|
176
|
-
// over a light page.
|
|
177
|
-
ghost: "hover:bg-danger-soft",
|
|
178
|
-
secondary: "border-danger bg-transparent text-danger hover:bg-danger-soft focus-visible:ring-danger-strong",
|
|
179
|
-
default:
|
|
180
|
-
"border-danger bg-danger-soft text-danger hover:border-[var(--danger)] hover:bg-danger hover:text-danger-contrast focus-visible:ring-danger-strong disabled:hover:border-danger disabled:hover:bg-danger-soft disabled:hover:text-danger",
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
// `pressed` on a `link`: the brand colour and a heavier weight, which is exactly what
|
|
184
|
-
// lenkbank's "All speeds" toggle paints by hand (gear/hysteresis-charts.tsx:482). After
|
|
185
|
-
// the tone, so a pressed muted link is brand, and an unpressed one is quiet grey. Under
|
|
186
|
-
// More contrast the brand as text, `--brand-muted`, at rest and hovered (0.36, as the
|
|
187
|
-
// `link` variant), whatever the tone.
|
|
188
|
-
export const BUTTON_LINK_PRESSED =
|
|
189
|
-
"font-medium text-brand hover:text-brand disabled:hover:text-brand contrast:text-brand-muted contrast:hover:text-brand-muted contrast:disabled:hover:text-brand-muted";
|
|
190
|
-
|
|
191
|
-
/** The second argument of {@link buttonClasses} in its options form. */
|
|
192
|
-
export interface ButtonClassesOptions {
|
|
193
|
-
/** See {@link ButtonProps.size}. */
|
|
194
|
-
size?: ButtonSize;
|
|
195
|
-
className?: string;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Button classes for the rare case where the styling must land on a non-`<button>`
|
|
200
|
-
* element that {@link Button} can't render — e.g. a router `<Link>` or a Radix
|
|
201
|
-
* AlertDialog Action/Cancel (which must stay the Radix element). Everywhere a real
|
|
202
|
-
* button works, prefer `<Button>`. Draws from the same base, size and variant maps as
|
|
203
|
-
* `<Button>`, so the two stay in lockstep.
|
|
204
|
-
*
|
|
205
|
-
* The second argument is either the extra classes (the pre-0.8.0 form) or
|
|
206
|
-
* `{ size, className }` — `buttonClasses("secondary", { size: "sm" })` for keksdose's
|
|
207
|
-
* compact toolbar links.
|
|
208
|
-
*/
|
|
209
|
-
export function buttonClasses(
|
|
210
|
-
variant: ButtonVariant = "default",
|
|
211
|
-
classNameOrOptions?: string | ButtonClassesOptions,
|
|
212
|
-
): string {
|
|
213
|
-
const { size = "md", className } =
|
|
214
|
-
typeof classNameOrOptions === "object" ? classNameOrOptions : { className: classNameOrOptions };
|
|
215
|
-
return cn(
|
|
216
|
-
BUTTON_BASE,
|
|
217
|
-
BUTTON_SIZES[size],
|
|
218
|
-
variant !== "link" && BUTTON_SIZES_LARGE[size],
|
|
219
|
-
buttonVariantClasses[variant],
|
|
220
|
-
className,
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// `pressed`: a toggle that is on. The brand glyph on the quiet brand fill — the
|
|
225
|
-
// "selected" look of a Chip or a SegmentedControl option, so an on toggle reads as on
|
|
226
|
-
// beside them. After the tone, so a pressed `muted` button is brand, not grey. On hover
|
|
227
|
-
// the glyph turns brand-muted: `--brand` on `--brand-bg-hover` is 2.69–2.80 in four dark
|
|
228
|
-
// presets, under an icon's 3:1 (colour-roles §12.12). Button's `pressed` draws it on its
|
|
229
|
-
// boxed variants too, which is why it lives here and not in ./icon-button.
|
|
230
|
-
export const ICON_BUTTON_PRESSED =
|
|
231
|
-
"bg-brand-soft text-brand hover:bg-brand-soft-hover hover:text-brand-muted disabled:hover:bg-brand-soft disabled:hover:text-brand";
|
|
232
|
-
|
|
233
|
-
/** @internal The button look shared by the `<button>` and the `<a>` form. */
|
|
234
|
-
export function buttonLook(variant: ButtonVariant, size: ButtonSize, stretch: boolean | undefined, tone: ButtonTone) {
|
|
235
|
-
return cn(
|
|
236
|
-
BUTTON_BASE,
|
|
237
|
-
BUTTON_SIZES[size],
|
|
238
|
-
// §4: `sm` at `md`'s height and the 48 px target at Large — not on a `link`. In the
|
|
239
|
-
// order `buttonClasses` has it, so the two strings stay identical.
|
|
240
|
-
variant !== "link" && BUTTON_SIZES_LARGE[size],
|
|
241
|
-
// In a flex row next to a taller labelled field, `stretch` makes the button
|
|
242
|
-
// fill the field's height so the two line up (self-stretch overrides the row's
|
|
243
|
-
// align-items). No effect outside a flex row / when it's already the tallest.
|
|
244
|
-
stretch && "self-stretch",
|
|
245
|
-
buttonVariantClasses[variant],
|
|
246
|
-
tone !== "default" && TONED_VARIANTS.has(variant) && BUTTON_TONES[tone],
|
|
247
|
-
tone === "danger" && BUTTON_BOXED_DANGER[variant],
|
|
248
|
-
);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/** @internal Calls a `renderLink` / provider link as a function, as ListItem and Chip
|
|
252
|
-
* do — an inline `renderLink` arrow would otherwise be a new component type every
|
|
253
|
-
* render. Both buttons' link forms render through it. */
|
|
254
|
-
export function RenderedButtonLink({ render, ...props }: KitLinkProps & { render: KitLinkComponent }) {
|
|
255
|
-
return render(props);
|
|
256
|
-
}
|