@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,476 +0,0 @@
|
|
|
1
|
-
import { Children, Fragment, isValidElement, useEffect, useId, useState } from "react";
|
|
2
|
-
import type { ComponentPropsWithoutRef, ComponentPropsWithRef, ReactNode } from "react";
|
|
3
|
-
import { ChevronDown } from "lucide-react";
|
|
4
|
-
|
|
5
|
-
import { cn } from "../lib/cn";
|
|
6
|
-
import { FOCUS_RING } from "./focus-ring";
|
|
7
|
-
// Read at the moment of closing, as `useCloseTransition` does: the setting can change
|
|
8
|
-
// under a long-lived page.
|
|
9
|
-
import { skipsExitAnimation } from "../hooks/use-close-transition";
|
|
10
|
-
|
|
11
|
-
/** How long the fold takes, in ms. The same number as the `duration-200` below and as
|
|
12
|
-
* the unmount timer, because they are the same movement. */
|
|
13
|
-
const COLLAPSE_MS = 200;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* `extends` the div's props so an `id` (what a trigger's `aria-controls` points at), a
|
|
17
|
-
* `data-tour` anchor or a test id reaches the element that folds.
|
|
18
|
-
*/
|
|
19
|
-
export interface CollapseProps extends ComponentPropsWithRef<"div"> {
|
|
20
|
-
open: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Keep the children mounted while shut (hidden and `inert`) instead of unmounting
|
|
23
|
-
* them once the fold has finished closing.
|
|
24
|
-
*
|
|
25
|
-
* Off by default, and that default is a behaviour contract rather than a
|
|
26
|
-
* performance note: Lenkbank's disclosure bodies FETCH, and a body that only exists
|
|
27
|
-
* while open is what stops a closed card asking — without every caller carrying its
|
|
28
|
-
* own `enabled: open`. On for a body whose state must outlive a close (a half-typed
|
|
29
|
-
* form) or that must be found by the browser's find-in-page.
|
|
30
|
-
*/
|
|
31
|
-
keepMounted?: boolean;
|
|
32
|
-
children: ReactNode;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* The fold on its own: content that opens and shuts in place, animated to a height
|
|
37
|
-
* nobody measured.
|
|
38
|
-
*
|
|
39
|
-
* THE TECHNIQUE is `AppShell`'s sidebar group's, lifted out so there is one copy of it.
|
|
40
|
-
* A `grid-template-rows` transition from `0fr` to `1fr` is the one way to animate to a
|
|
41
|
-
* content-sized height without measuring it — so a chart that resizes inside it, or a
|
|
42
|
-
* translated line that wraps, is still exactly as tall as it needs. `visibility` rides
|
|
43
|
-
* the same transition, so a shut body leaves the accessibility tree only once it has
|
|
44
|
-
* finished closing; `inert` takes it out of the tab order immediately.
|
|
45
|
-
*
|
|
46
|
-
* THE CHILDREN are unmounted once closed (see {@link CollapseProps.keepMounted}), but
|
|
47
|
-
* only once the track has finished closing: the track is what animates, so the
|
|
48
|
-
* children have to survive the movement that hides them. Under reduced motion they
|
|
49
|
-
* go at once — there is no movement to wait for — and the opening half is silenced by
|
|
50
|
-
* `motion-reduce:transition-none`, since tokens.css only silences the overlay
|
|
51
|
-
* animations by name.
|
|
52
|
-
*
|
|
53
|
-
* Padding and margins belong on a child: on this element, or the clipping one inside
|
|
54
|
-
* it, they would hold the row open by that much.
|
|
55
|
-
*/
|
|
56
|
-
export function Collapse({ open, keepMounted = false, children, className, style, ...rest }: CollapseProps) {
|
|
57
|
-
// Whether the children are still on their way out. Adjusted DURING render when
|
|
58
|
-
// `open` flips (React's "storing information from previous renders"), so a close
|
|
59
|
-
// under reduced motion unmounts in the same render that shut it — a test, and a
|
|
60
|
-
// screen reader, see the body go on the click — and a re-open mid-fold simply
|
|
61
|
-
// cancels the linger.
|
|
62
|
-
const [lingering, setLingering] = useState(false);
|
|
63
|
-
const [prevOpen, setPrevOpen] = useState(open);
|
|
64
|
-
if (open !== prevOpen) {
|
|
65
|
-
setPrevOpen(open);
|
|
66
|
-
setLingering(!open && !skipsExitAnimation());
|
|
67
|
-
}
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
if (!lingering) return;
|
|
70
|
-
const timer = setTimeout(() => setLingering(false), COLLAPSE_MS);
|
|
71
|
-
return () => clearTimeout(timer);
|
|
72
|
-
}, [lingering]);
|
|
73
|
-
|
|
74
|
-
const mounted = open || lingering || keepMounted;
|
|
75
|
-
|
|
76
|
-
return (
|
|
77
|
-
<div
|
|
78
|
-
{...rest}
|
|
79
|
-
inert={!open}
|
|
80
|
-
className={cn(
|
|
81
|
-
"grid transition-[grid-template-rows,visibility] duration-200 ease-out motion-reduce:transition-none",
|
|
82
|
-
className,
|
|
83
|
-
)}
|
|
84
|
-
// Inline rather than `grid-rows-[…]` classes: a caller's `className` must not be
|
|
85
|
-
// able to pin the track open, and the two values ARE the state.
|
|
86
|
-
style={{ ...style, gridTemplateRows: open ? "1fr" : "0fr", visibility: open ? "visible" : "hidden" }}
|
|
87
|
-
>
|
|
88
|
-
<div
|
|
89
|
-
className={cn(
|
|
90
|
-
"min-h-0 overflow-hidden transition-opacity duration-200 ease-out motion-reduce:transition-none",
|
|
91
|
-
open ? "opacity-100" : "opacity-0",
|
|
92
|
-
)}
|
|
93
|
-
>
|
|
94
|
-
{mounted && children}
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* What {@link DisclosureProps.triggerProps} may put on the header button: its own
|
|
102
|
-
* attributes and handlers, and any `data-*`. Not the ones the disclosure owns —
|
|
103
|
-
* `aria-expanded`, `aria-controls`, `disabled`, `onClick`, `type` and the content — nor
|
|
104
|
-
* `className`, which is {@link DisclosureProps.headerClassName}.
|
|
105
|
-
*/
|
|
106
|
-
export type DisclosureTriggerProps = Omit<
|
|
107
|
-
ComponentPropsWithoutRef<"button">,
|
|
108
|
-
"type" | "aria-expanded" | "aria-controls" | "disabled" | "onClick" | "children" | "className"
|
|
109
|
-
> & { [data: `data-${string}`]: string | number | boolean | undefined };
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* `title` is omitted from the div's own props because this component already owns the
|
|
113
|
-
* name: here it is the header's content (and a ReactNode), not the browser's tooltip.
|
|
114
|
-
* Everything else reaches the outer element.
|
|
115
|
-
*/
|
|
116
|
-
export interface DisclosureProps extends Omit<ComponentPropsWithRef<"div">, "title"> {
|
|
117
|
-
/** What the header says. A node, so a status chip or a count can sit in it. */
|
|
118
|
-
title: ReactNode;
|
|
119
|
-
/** The smaller line under the title — what is inside, for a reader deciding whether
|
|
120
|
-
* to open it. */
|
|
121
|
-
hint?: ReactNode;
|
|
122
|
-
/**
|
|
123
|
-
* Who decides whether this one is open. Left out, the disclosure decides for itself,
|
|
124
|
-
* which is what one standing on its own wants. Passed, the caller does — a set of
|
|
125
|
-
* which one is open at a time, or an open state kept in the URL so the view can be
|
|
126
|
-
* linked to. There is no accordion component: "one open at a time" is a few lines in
|
|
127
|
-
* the caller and it usually owns a URL parameter, which is app state.
|
|
128
|
-
*/
|
|
129
|
-
open?: boolean;
|
|
130
|
-
/** Whether an UNCONTROLLED disclosure starts open. Ignored when `open` is passed. */
|
|
131
|
-
defaultOpen?: boolean;
|
|
132
|
-
/** Called with the next state on every toggle, controlled or not. */
|
|
133
|
-
onOpenChange?: (open: boolean) => void;
|
|
134
|
-
/**
|
|
135
|
-
* `card` (default) draws the kit's `Card` surface round header and body, with the
|
|
136
|
-
* chevron trailing the header and turning over — the "section that opens" of a
|
|
137
|
-
* settings or analysis page. `bare` draws nothing: a leading chevron that turns
|
|
138
|
-
* down, for an inline "Show 3 hidden accounts" inside something that already has
|
|
139
|
-
* its own surface.
|
|
140
|
-
*
|
|
141
|
-
* `menu` is a row of a `HoverMenu`: the top bar's menu-item look
|
|
142
|
-
* (`TOPBAR_MENU_ITEM_CLASS` — full-width, `px-3 py-2`, regular weight, square, the
|
|
143
|
-
* hover wash with the text colour left alone), an INSET focus ring so the menu's
|
|
144
|
-
* clipping edge cannot cut it off, the chevron at the end (`chevronPosition`
|
|
145
|
-
* defaults to `end` here) and a body with no padding of its own, so the sub-list's
|
|
146
|
-
* rows sit flush like the rows around them. keksdose's account menu opens its
|
|
147
|
-
* language sub-list this way, and on `bare` it took four header overrides and a
|
|
148
|
-
* body one to get there (account-menu.tsx).
|
|
149
|
-
*/
|
|
150
|
-
variant?: "card" | "bare" | "menu";
|
|
151
|
-
/**
|
|
152
|
-
* Where a `bare` disclosure draws its chevron. `start` (default) is the leading
|
|
153
|
-
* chevron that turns from the reading direction to down. `end` puts it at the far
|
|
154
|
-
* end of the row, pointing down and turning up as the card's does — keksdose's
|
|
155
|
-
* account menu, whose language sub-list reads "Language 🇩🇪 ⌄" with the chevron
|
|
156
|
-
* after the flag, like every other menu row with a sub-list. With `trailing`, the
|
|
157
|
-
* chevron follows it, as on a card. A `card` always has it at the end, so this is
|
|
158
|
-
* ignored there. A `menu` defaults to `end`, like the menu rows around it.
|
|
159
|
-
*
|
|
160
|
-
* `after-title` sits it right after the title's text, pointing down and turning up —
|
|
161
|
-
* "Net profit ⌄ ······ 1,234.50", Lenkbank's result rows, where the far end of the
|
|
162
|
-
* row belongs to a figure (see {@link trailingInTrigger}) and a leading chevron
|
|
163
|
-
* would push every label off the column the non-expandable rows' labels start on.
|
|
164
|
-
* Not a card's: its chevron keeps the end.
|
|
165
|
-
*/
|
|
166
|
-
chevronPosition?: "start" | "end" | "after-title";
|
|
167
|
-
/**
|
|
168
|
-
* Wrap the header button in a heading of this level. The WAI-ARIA disclosure pattern
|
|
169
|
-
* puts the button INSIDE the heading when the disclosure titles a section, so the
|
|
170
|
-
* page's heading outline still lists it. Off by default: an inline "show more" is
|
|
171
|
-
* not a section.
|
|
172
|
-
*/
|
|
173
|
-
headingAs?: "h2" | "h3" | "h4" | "h5" | "h6";
|
|
174
|
-
/** See {@link CollapseProps.keepMounted}. */
|
|
175
|
-
keepMounted?: boolean;
|
|
176
|
-
disabled?: boolean;
|
|
177
|
-
/** Extra classes for the header button. */
|
|
178
|
-
headerClassName?: string;
|
|
179
|
-
/**
|
|
180
|
-
* Attributes for the header BUTTON — the outer props go to the wrapping div — such as
|
|
181
|
-
* an `aria-label`, an `id` or a `data-*` test hook. A function of the open state
|
|
182
|
-
* when they depend on it: keksdose's budget table names each group's toggle
|
|
183
|
-
* "Expand group Food" / "Collapse group Food", because the visible title is only the
|
|
184
|
-
* group's name:
|
|
185
|
-
*
|
|
186
|
-
* ```tsx
|
|
187
|
-
* triggerProps={(open) => ({ "aria-label": t(open ? "collapseGroup" : "expandGroup", { name }) })}
|
|
188
|
-
* ```
|
|
189
|
-
*
|
|
190
|
-
* An `aria-label` REPLACES the title as the button's name, so it must still contain
|
|
191
|
-
* the title's words (WCAG 2.5.3, label in name). See {@link DisclosureTriggerProps}
|
|
192
|
-
* for what the disclosure keeps for itself.
|
|
193
|
-
*/
|
|
194
|
-
triggerProps?: DisclosureTriggerProps | ((open: boolean) => DisclosureTriggerProps);
|
|
195
|
-
/** Extra classes for the body's wrapper — where its padding and spacing live. */
|
|
196
|
-
bodyClassName?: string;
|
|
197
|
-
/**
|
|
198
|
-
* Content at the far end of the header row, beside the title: a count, a date, a
|
|
199
|
-
* status chip, an action button. It is a SIBLING of the header button, never inside
|
|
200
|
-
* it — a button may not contain another interactive element, and a count inside it
|
|
201
|
-
* would also be read as part of the button's name. The header button still spans
|
|
202
|
-
* the row under it (a stretched hit area), so clicking the empty space or the
|
|
203
|
-
* card's chevron still toggles, while whatever sits in `trailing` gets its own
|
|
204
|
-
* clicks. With `trailing`, the card's chevron moves after it, to the row's end.
|
|
205
|
-
*
|
|
206
|
-
* Unless {@link trailingInTrigger} is set, which moves it INTO the button.
|
|
207
|
-
*/
|
|
208
|
-
trailing?: ReactNode;
|
|
209
|
-
/**
|
|
210
|
-
* Render {@link trailing} inside the header button instead of beside it, so the
|
|
211
|
-
* whole row — figure included — is one click target and the figure is part of the
|
|
212
|
-
* button's accessible name: "Net profit 1,234.50, collapsed" rather than a button
|
|
213
|
-
* called "Net profit" next to an unexplained number.
|
|
214
|
-
*
|
|
215
|
-
* Lenkbank's result rows (features/steering/results-panel.tsx) are the case: label,
|
|
216
|
-
* chevron, and the value at the far end, all one `<button>`, because a result row
|
|
217
|
-
* has nothing else it could mean.
|
|
218
|
-
*
|
|
219
|
-
* ⚠️ Only for NON-interactive content — a count, a figure, a status chip. A button
|
|
220
|
-
* may not contain another interactive element; an action belongs in the default,
|
|
221
|
-
* sibling `trailing`. The content is rendered in a `<span>`, so keep it phrasing
|
|
222
|
-
* content too (no `div`s).
|
|
223
|
-
*/
|
|
224
|
-
trailingInTrigger?: boolean;
|
|
225
|
-
/**
|
|
226
|
-
* Trigger-only mode: the id of an element the CALLER renders elsewhere — the hidden
|
|
227
|
-
* rows of a table, a panel in another column — which this header shows and hides.
|
|
228
|
-
* The header's `aria-controls` points at it and the disclosure renders no body of
|
|
229
|
-
* its own (`children`, `bodyClassName` and `keepMounted` are ignored). Pair it with
|
|
230
|
-
* `open` / `onOpenChange`: the caller owns the state, since the caller renders what
|
|
231
|
-
* it governs.
|
|
232
|
-
*
|
|
233
|
-
* It is an IDREF LIST, as `aria-controls` is: several space-separated ids when what
|
|
234
|
-
* folds is several elements — a budget group's category rows, each its own `<li>`,
|
|
235
|
-
* siblings of this header (keksdose's budget-mobile-list joins their ids with
|
|
236
|
-
* `" "`). It may be the EMPTY string: trigger-only mode with nothing to point at yet
|
|
237
|
-
* (a group whose rows are all filtered away, rows that are not rendered while shut).
|
|
238
|
-
* The header then carries no `aria-controls` at all rather than an empty one, and
|
|
239
|
-
* still toggles.
|
|
240
|
-
*
|
|
241
|
-
* A table's leading row — keksdose's "Upcoming" toggle over the scheduled rows of
|
|
242
|
-
* its transactions table — is this mode too: the rows it folds are the TABLE's, so
|
|
243
|
-
* the disclosure is only the header, and the table renders or drops them from the
|
|
244
|
-
* same state.
|
|
245
|
-
*
|
|
246
|
-
* ```tsx
|
|
247
|
-
* <DataTable
|
|
248
|
-
* rows={showFuture ? [...scheduled, ...posted] : posted}
|
|
249
|
-
* leadingRow={
|
|
250
|
-
* <Disclosure
|
|
251
|
-
* variant="bare"
|
|
252
|
-
* title={upcomingLabel}
|
|
253
|
-
* open={showFuture}
|
|
254
|
-
* onOpenChange={setShowFuture}
|
|
255
|
-
* // The scheduled rows' ids while they are rendered; "" while they are not.
|
|
256
|
-
* controls={showFuture ? scheduled.map((tx) => `row-s${tx.id}`).join(" ") : ""}
|
|
257
|
-
* headerClassName="px-3 py-2"
|
|
258
|
-
* />
|
|
259
|
-
* }
|
|
260
|
-
* …
|
|
261
|
-
* />
|
|
262
|
-
* ```
|
|
263
|
-
*/
|
|
264
|
-
controls?: string;
|
|
265
|
-
/** The body. Not rendered in trigger-only mode ({@link DisclosureProps.controls}),
|
|
266
|
-
* nor when there is none (0.48): no children, no empty box under the header.
|
|
267
|
-
* `null`, `false`, `undefined` and an empty fragment (`<></>`) count as none. */
|
|
268
|
-
children?: ReactNode;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* A section that opens in place: a header button with `aria-expanded` and
|
|
273
|
-
* `aria-controls`, and a {@link Collapse} under it.
|
|
274
|
-
*
|
|
275
|
-
* Both apps had written this by hand — Lenkbank as a shared `CollapsibleCard` with ten
|
|
276
|
-
* importers, Keksdose three separate times (accounts, twice; the support panel) — and
|
|
277
|
-
* the copies had drifted: none of Keksdose's animated, and all three swapped a
|
|
278
|
-
* `ChevronRight` for a `ChevronDown` rather than turning one. Here the chevron is one
|
|
279
|
-
* icon that rotates, so the change of state is one element moving rather than two
|
|
280
|
-
* trading places.
|
|
281
|
-
*
|
|
282
|
-
* The body is unmounted while shut; see {@link CollapseProps.keepMounted} for why that
|
|
283
|
-
* is the default and when to opt out.
|
|
284
|
-
*/
|
|
285
|
-
export function Disclosure({
|
|
286
|
-
title,
|
|
287
|
-
hint,
|
|
288
|
-
open: controlled,
|
|
289
|
-
defaultOpen = false,
|
|
290
|
-
onOpenChange,
|
|
291
|
-
variant = "card",
|
|
292
|
-
chevronPosition,
|
|
293
|
-
headingAs: Heading,
|
|
294
|
-
keepMounted,
|
|
295
|
-
disabled,
|
|
296
|
-
headerClassName,
|
|
297
|
-
triggerProps,
|
|
298
|
-
bodyClassName,
|
|
299
|
-
trailing,
|
|
300
|
-
trailingInTrigger = false,
|
|
301
|
-
controls,
|
|
302
|
-
className,
|
|
303
|
-
children,
|
|
304
|
-
...rest
|
|
305
|
-
}: DisclosureProps) {
|
|
306
|
-
const [own, setOwn] = useState(defaultOpen);
|
|
307
|
-
const open = controlled ?? own;
|
|
308
|
-
const bodyId = useId();
|
|
309
|
-
const card = variant === "card";
|
|
310
|
-
const menu = variant === "menu";
|
|
311
|
-
// The card's chevron trails always; a menu row's unless asked otherwise; a bare
|
|
312
|
-
// one only when asked to.
|
|
313
|
-
const chevronAt = card ? "end" : (chevronPosition ?? (menu ? "end" : "start"));
|
|
314
|
-
const chevronAtEnd = chevronAt === "end";
|
|
315
|
-
const chevronAfterTitle = chevronAt === "after-title";
|
|
316
|
-
const triggerOnly = controls !== undefined;
|
|
317
|
-
// 0.48 (keksdose dev #603): no children, no body — an empty padded box under the
|
|
318
|
-
// header made an open disclosure 8px taller than a shut one, and its `aria-controls`
|
|
319
|
-
// named a region with nothing in it. `null`, `false` and `undefined` are nothing, and
|
|
320
|
-
// so is a fragment of nothing (`cond ? <X /> : <></>`, keksdose N1).
|
|
321
|
-
const hasBody = !triggerOnly && hasBodyContent(children);
|
|
322
|
-
// The card's header squares its lower corners only when a body opens under it.
|
|
323
|
-
const joined = open && hasBody;
|
|
324
|
-
const hasTrailing = trailing !== undefined && trailing !== null && trailing !== false;
|
|
325
|
-
// `trailing` beside the button, which then stretches under it; inside the button,
|
|
326
|
-
// the row is simply the button.
|
|
327
|
-
const trailingInside = hasTrailing && trailingInTrigger;
|
|
328
|
-
const trailingBeside = hasTrailing && !trailingInTrigger;
|
|
329
|
-
|
|
330
|
-
const toggle = () => {
|
|
331
|
-
const next = !open;
|
|
332
|
-
if (controlled === undefined) setOwn(next);
|
|
333
|
-
onOpenChange?.(next);
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
const extraTriggerProps = typeof triggerProps === "function" ? triggerProps(open) : triggerProps;
|
|
337
|
-
|
|
338
|
-
const button = (
|
|
339
|
-
<button
|
|
340
|
-
{...extraTriggerProps}
|
|
341
|
-
type="button"
|
|
342
|
-
aria-expanded={open}
|
|
343
|
-
// `||`: an empty `controls` is trigger-only with nothing to name, not `aria-controls=""`.
|
|
344
|
-
aria-controls={triggerOnly ? controls || undefined : hasBody ? bodyId : undefined}
|
|
345
|
-
disabled={disabled}
|
|
346
|
-
onClick={toggle}
|
|
347
|
-
data-disclosure-trigger=""
|
|
348
|
-
className={cn(
|
|
349
|
-
"flex w-full gap-2 text-start outline-none disabled:cursor-not-allowed disabled:opacity-50",
|
|
350
|
-
trailingBeside
|
|
351
|
-
? // Stretched over the whole header row (the row is `relative`), so the space
|
|
352
|
-
// round `trailing` and the card's chevron still toggle; the ring and the
|
|
353
|
-
// card's hover paint on the stretched area / the row, not the text box.
|
|
354
|
-
cn(
|
|
355
|
-
"min-w-0 flex-1 after:absolute after:inset-0 after:content-['']",
|
|
356
|
-
"focus-visible:after:ring-focus focus-visible:after:ring-inset focus-visible:after:ring-brand",
|
|
357
|
-
card ? cn("after:rounded-lg", joined && "after:rounded-b-none") : !menu && "after:rounded-sm",
|
|
358
|
-
)
|
|
359
|
-
: FOCUS_RING,
|
|
360
|
-
card
|
|
361
|
-
? cn(
|
|
362
|
-
"items-center justify-between rounded-lg p-4",
|
|
363
|
-
trailingBeside ? "pe-0" : "hover:bg-hover focus-visible:ring-inset",
|
|
364
|
-
joined && "rounded-b-none",
|
|
365
|
-
)
|
|
366
|
-
: menu
|
|
367
|
-
? // TOPBAR_MENU_ITEM_CLASS's row, spelled out rather than imported: a
|
|
368
|
-
// component does not reach up into the shell. A test holds the two to
|
|
369
|
-
// the same classes.
|
|
370
|
-
"items-center justify-between gap-3 px-3 py-2 text-sm text-secondary hover:bg-hover focus-visible:ring-inset"
|
|
371
|
-
: "items-center rounded-sm text-sm font-medium text-secondary hover:text-primary",
|
|
372
|
-
headerClassName,
|
|
373
|
-
)}
|
|
374
|
-
>
|
|
375
|
-
{chevronAt === "start" && <Chevron open={open} leading />}
|
|
376
|
-
{/* `flex-1`: the title takes the row, so whatever a caller puts at its end sits
|
|
377
|
-
at the header's far edge. */}
|
|
378
|
-
<span className="min-w-0 flex-1">
|
|
379
|
-
{chevronAfterTitle ? (
|
|
380
|
-
// The chevron hugs the text, however long the translation: the text wraps
|
|
381
|
-
// before the chevron is pushed away from it.
|
|
382
|
-
<span className="flex items-center gap-1">
|
|
383
|
-
<span className="min-w-0">{title}</span>
|
|
384
|
-
<Chevron open={open} small />
|
|
385
|
-
</span>
|
|
386
|
-
) : (
|
|
387
|
-
<span className={cn("block", card && "text-sm font-semibold text-primary")}>{title}</span>
|
|
388
|
-
)}
|
|
389
|
-
{hint !== undefined && <span className="mt-0.5 block text-xs font-normal text-muted">{hint}</span>}
|
|
390
|
-
</span>
|
|
391
|
-
{/* The space is for the accessible name — "Net profit 1,234.50", not
|
|
392
|
-
"Net profit1,234.50"; between flex items it renders as nothing. */}
|
|
393
|
-
{trailingInside && " "}
|
|
394
|
-
{trailingInside && (
|
|
395
|
-
<span data-disclosure-trailing="" className="flex shrink-0 items-center gap-2">
|
|
396
|
-
{trailing}
|
|
397
|
-
</span>
|
|
398
|
-
)}
|
|
399
|
-
{chevronAtEnd && !trailingBeside && <Chevron open={open} small={!card} />}
|
|
400
|
-
</button>
|
|
401
|
-
);
|
|
402
|
-
|
|
403
|
-
// Preflight already makes h1–h6 inherit size and weight, so the heading adds
|
|
404
|
-
// structure and nothing visible.
|
|
405
|
-
const header = Heading ? (
|
|
406
|
-
<Heading className={trailingBeside ? "min-w-0 flex-1" : undefined}>{button}</Heading>
|
|
407
|
-
) : (
|
|
408
|
-
button
|
|
409
|
-
);
|
|
410
|
-
|
|
411
|
-
return (
|
|
412
|
-
<div {...rest} className={cn(card && "rounded-lg border border-subtle bg-surface shadow-sm", className)}>
|
|
413
|
-
{trailingBeside ? (
|
|
414
|
-
<div
|
|
415
|
-
className={cn(
|
|
416
|
-
"relative flex items-center gap-2",
|
|
417
|
-
card &&
|
|
418
|
-
cn("rounded-lg pe-4 has-[[data-disclosure-trigger]:enabled:hover]:bg-hover", joined && "rounded-b-none"),
|
|
419
|
-
)}
|
|
420
|
-
>
|
|
421
|
-
{header}
|
|
422
|
-
{/* Positioned, so it paints over the stretched button and takes its own
|
|
423
|
-
clicks; the chevron is not, so a click on it lands on the button. */}
|
|
424
|
-
<div className="relative flex shrink-0 items-center gap-2">{trailing}</div>
|
|
425
|
-
{chevronAtEnd && <Chevron open={open} small={!card} />}
|
|
426
|
-
</div>
|
|
427
|
-
) : (
|
|
428
|
-
header
|
|
429
|
-
)}
|
|
430
|
-
{hasBody && (
|
|
431
|
-
<Collapse id={bodyId} open={open} keepMounted={keepMounted}>
|
|
432
|
-
<div className={cn(card ? "space-y-3 px-4 pb-4" : !menu && "space-y-2 pt-2", bodyClassName)}>{children}</div>
|
|
433
|
-
</Collapse>
|
|
434
|
-
)}
|
|
435
|
-
</div>
|
|
436
|
-
);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
/**
|
|
440
|
-
* One icon for both variants, turned rather than swapped. `leading` (bare) points it
|
|
441
|
-
* along the reading direction while shut — right in LTR, left in RTL — and down when
|
|
442
|
-
* open; trailing (card) points down while shut and up when open, which is the card
|
|
443
|
-
* header's convention. Rotation, not a mirrored glyph, so RTL needs one opposite angle
|
|
444
|
-
* and no `scale` composing with the turn.
|
|
445
|
-
*/
|
|
446
|
-
function Chevron({
|
|
447
|
-
open,
|
|
448
|
-
leading = false,
|
|
449
|
-
small = leading,
|
|
450
|
-
}: {
|
|
451
|
-
open: boolean;
|
|
452
|
-
leading?: boolean;
|
|
453
|
-
/** The bare variant's size, which a bare chevron keeps at either end of its row. */
|
|
454
|
-
small?: boolean;
|
|
455
|
-
}) {
|
|
456
|
-
return (
|
|
457
|
-
<ChevronDown
|
|
458
|
-
aria-hidden
|
|
459
|
-
className={cn(
|
|
460
|
-
"shrink-0 text-muted transition-transform duration-200 ease-out motion-reduce:transition-none",
|
|
461
|
-
small ? "size-3.5" : "size-4",
|
|
462
|
-
leading ? !open && "-rotate-90 rtl:rotate-90" : open && "rotate-180",
|
|
463
|
-
)}
|
|
464
|
-
/>
|
|
465
|
-
);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
/** Whether `children` holds anything to draw: `null`/`false`/`undefined`/`""` are nothing,
|
|
469
|
-
* and a fragment counts by what is in it (an empty `<></>` is nothing). */
|
|
470
|
-
function hasBodyContent(children: ReactNode): boolean {
|
|
471
|
-
return Children.toArray(children).some((child) =>
|
|
472
|
-
isValidElement<{ children?: ReactNode }>(child) && child.type === Fragment
|
|
473
|
-
? hasBodyContent(child.props.children)
|
|
474
|
-
: child !== "",
|
|
475
|
-
);
|
|
476
|
-
}
|