@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,795 +0,0 @@
|
|
|
1
|
-
import { isValidElement, useContext } from "react";
|
|
2
|
-
import type { KeyboardEvent, MouseEvent, ReactElement, ReactNode } from "react";
|
|
3
|
-
import { MoreHorizontal } from "lucide-react";
|
|
4
|
-
import type { LucideIcon } from "lucide-react";
|
|
5
|
-
import { cn } from "../lib/cn";
|
|
6
|
-
import { hasContent } from "../lib/presence";
|
|
7
|
-
import { useLargeText } from "../hooks/use-large-text";
|
|
8
|
-
import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
|
|
9
|
-
import { Popover } from "./popover";
|
|
10
|
-
import { Button } from "./button";
|
|
11
|
-
import { CompactControls } from "./field-parts";
|
|
12
|
-
import { IconButton } from "./icon-button";
|
|
13
|
-
import { useCommitReason, type CommitScope } from "./write-lock";
|
|
14
|
-
import type { IconButtonGlyphSize, IconButtonSize } from "./icon-button";
|
|
15
|
-
import type { TooltipSide } from "./tooltip";
|
|
16
|
-
import type { DataTableColumn } from "./data-table";
|
|
17
|
-
import { TableHeaderCell, type TableHeaderCellProps } from "./table";
|
|
18
|
-
import { DEFAULT_ROW_ACTIONS_LABELS } from "./row-actions-labels";
|
|
19
|
-
import { ConfirmContext } from "./confirm-context";
|
|
20
|
-
import { ConfirmProvider } from "./confirm-dialog";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* A row's actions — inline icons at Normal, one "⋯" menu at Large and above
|
|
24
|
-
* (docs/text-size-harmonization.md §10.8).
|
|
25
|
-
*
|
|
26
|
-
* At Large an IconButton shows its label as text (§4). In a dense row — a register's
|
|
27
|
-
* action column, a list row's end — every label at once does not fit: Kurvenschmiede
|
|
28
|
-
* has 44 IconButtons in rows, kastlan 119. So a row's actions collapse instead, into
|
|
29
|
-
* the menu the user roster has used since 0.31 (`UserRowActions`, now built on this):
|
|
30
|
-
* one "⋯" button, and a menu with each action's icon AND words, where a locked one stays
|
|
31
|
-
* listed and says why.
|
|
32
|
-
*
|
|
33
|
-
* The data is the roster's `UserRowActionList`, generalised: entries, and `false` /
|
|
34
|
-
* `null` for the ones a condition left out (`row.locked || {…}`).
|
|
35
|
-
*
|
|
36
|
-
* Destructive actions belong in the menu (0.49 KIT-12): a `tone: "danger"` action goes
|
|
37
|
-
* into the "⋯" menu while the others stay inline (`dangerPlacement`), and choosing it
|
|
38
|
-
* opens a `ConfirmDialog` before `onSelect` runs (`confirm`; `false` to opt out). A
|
|
39
|
-
* delete is then never a bin icon in every row, one stray tap from gone.
|
|
40
|
-
*
|
|
41
|
-
* 0.33 (§10.16): an action carries its state at both sizes — a toggle (`pressed`), a
|
|
42
|
-
* disclosure (`expanded`, `controls`), a tone, a tour anchor (`dataTour`) — so a row
|
|
43
|
-
* with an "on" share button or a tour step no longer keeps hand-rolled IconButtons at
|
|
44
|
-
* Normal and this only at Large (keksdose k15).
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
/** An action's colour: IconButton's tone inline; in the menu the glyph takes it and the
|
|
48
|
-
* words keep the text colour, except `danger`, whose words are the danger text. */
|
|
49
|
-
export type RowActionTone = "default" | "muted" | "info" | "warning" | "danger";
|
|
50
|
-
|
|
51
|
-
/** One action of a row. */
|
|
52
|
-
export interface RowAction {
|
|
53
|
-
/** React key. Default: the label. */
|
|
54
|
-
key?: string;
|
|
55
|
-
/** The action's name: the inline icon's name and tooltip, the menu entry's words. */
|
|
56
|
-
label: string;
|
|
57
|
-
/**
|
|
58
|
-
* Runs it. The kit sends nothing — it calls this, after a `tone: "danger"` action's
|
|
59
|
-
* confirmation (see {@link confirm}). Optional only beside `href`; an action has one or
|
|
60
|
-
* the other (or both: `onSelect` then runs as the link is followed).
|
|
61
|
-
*/
|
|
62
|
-
onSelect?: () => void;
|
|
63
|
-
/**
|
|
64
|
-
* 0.49 KIT-12: ask before `onSelect`. A `tone: "danger"` action asks by default — a
|
|
65
|
-
* `ConfirmDialog` (the provider's `useConfirm`, else one of its own) titled with the
|
|
66
|
-
* action and the row's name, "Delete “Ada Example”?", the consequence under it
|
|
67
|
-
* (`rowActions.confirmBody`), the action's label on the danger button and focus on
|
|
68
|
-
* Cancel. Pass the words to say more, or `false` when the app confirms in `onSelect`
|
|
69
|
-
* itself or offers an undo instead. Any other tone asks only when given one. Not for
|
|
70
|
-
* an `href` action: a link only navigates.
|
|
71
|
-
*/
|
|
72
|
-
confirm?: boolean | RowActionConfirm;
|
|
73
|
-
/**
|
|
74
|
-
* The action NAVIGATES — an edit page, a mail to compose (0.32.1, kastlan's 0.32
|
|
75
|
-
* report): a real link inline and in the menu, so open in a new tab, a middle click
|
|
76
|
-
* and the URL on hover work, which `onSelect` + `navigate` lost. The kit's link rule
|
|
77
|
-
* applies ({@link Button}'s `href`): in-app through the provider's `linkComponent`, an
|
|
78
|
-
* external or `#anchor` one a plain `<a>`, `mailto:` included.
|
|
79
|
-
*
|
|
80
|
-
* A link cannot carry a reason or a spinner, so an action with a `disabledReason`
|
|
81
|
-
* (or under a write lock, with `commit`) or `pending` stays a button and says why.
|
|
82
|
-
*/
|
|
83
|
-
href?: string;
|
|
84
|
-
/** With `href`: leaves the app — a new tab, and a screen reader is told so. */
|
|
85
|
-
external?: boolean;
|
|
86
|
-
/**
|
|
87
|
-
* The glyph: a Lucide icon (`Pencil`), or an element (`<Pencil />`, an app's own
|
|
88
|
-
* svg) — DataTable's `rowActions` hand their `icon` node through. Inline, an action
|
|
89
|
-
* without one is a small text button; in the menu it is the words alone.
|
|
90
|
-
*/
|
|
91
|
-
icon?: LucideIcon | ReactElement;
|
|
92
|
-
/**
|
|
93
|
-
* `danger` for delete, revoke, erase: the quiet red of IconButton's `tone="danger"`
|
|
94
|
-
* inline, the danger text tone in the menu. `muted` (an open or add that should not
|
|
95
|
-
* compete), `info` (a notice-worthy, harmless action: keksdose's reconcile) and
|
|
96
|
-
* `warning` (a flag that wants attention): IconButton's tone inline; in the menu the
|
|
97
|
-
* glyph takes it and the words keep the text colour, so `muted` looks like `default`
|
|
98
|
-
* there (0.33).
|
|
99
|
-
*/
|
|
100
|
-
tone?: RowActionTone;
|
|
101
|
-
/** Why it is not available for this row. It stays listed, focusable, and says so — an
|
|
102
|
-
* action that silently vanished would leave the reader looking for it. */
|
|
103
|
-
disabledReason?: ReactNode;
|
|
104
|
-
/**
|
|
105
|
-
* This action COMMITS — it saves, sends, deletes: under a locked
|
|
106
|
-
* {@link WriteLockProvider} it is refused with the lock's reason, as {@link Button}'s
|
|
107
|
-
* `commit` is, inline and in the menu alike. No provider, or an unlocked one: no effect.
|
|
108
|
-
*/
|
|
109
|
-
commit?: CommitScope;
|
|
110
|
-
/**
|
|
111
|
-
* In flight — the request it started has not answered. Inline, the icon turns into
|
|
112
|
-
* IconButton's spinner (`pending`); collapsed, the "⋯" button does, since the menu
|
|
113
|
-
* closed when the action was chosen. Either way nothing in the row can be pressed again
|
|
114
|
-
* until it settles: the "⋯" opens no menu while busy.
|
|
115
|
-
*/
|
|
116
|
-
pending?: boolean;
|
|
117
|
-
/**
|
|
118
|
-
* Not available for a moment, with nothing to explain — another action of the list
|
|
119
|
-
* is in flight (an admin panel's `busy`). The plain `disabled`; a lasting refusal is a
|
|
120
|
-
* `disabledReason`, which says why.
|
|
121
|
-
*/
|
|
122
|
-
disabled?: boolean;
|
|
123
|
-
/** Leave it out for this row. */
|
|
124
|
-
hidden?: boolean;
|
|
125
|
-
/**
|
|
126
|
-
* A toggle (0.33): `aria-pressed` and IconButton's "on" look inline, `aria-pressed` on
|
|
127
|
-
* the menu entry. Keep the label the same in both states ("Share budget"): the pressed
|
|
128
|
-
* state already says whether it is on. Not on an `href` action — a link is not a
|
|
129
|
-
* toggle — nor with `expanded`.
|
|
130
|
-
*/
|
|
131
|
-
pressed?: boolean;
|
|
132
|
-
/**
|
|
133
|
-
* Opens or closes something IN THE PAGE (0.33) — a share card under the row, an
|
|
134
|
-
* add-category row: `aria-expanded`, inline and on the menu entry. Not with `pressed`:
|
|
135
|
-
* a disclosure says open, not on. Not on an `href` action.
|
|
136
|
-
*/
|
|
137
|
-
expanded?: boolean;
|
|
138
|
-
/** The `id` of what `expanded` opens: `aria-controls`, inline and on the menu entry. */
|
|
139
|
-
controls?: string;
|
|
140
|
-
/**
|
|
141
|
-
* A tour anchor (0.33, §10.18): `data-tour` on ONE element per action at a time.
|
|
142
|
-
* Inline, on the action's own control (the IconButton, the small text button, the
|
|
143
|
-
* link). Collapsed, on an `aria-hidden` box laid over the "⋯" button — `[data-tour=x]`
|
|
144
|
-
* resolves to a box the size of the "⋯", whose `data-slot="row-actions"` box holds the
|
|
145
|
-
* button, two anchored actions in one row don't fight over one attribute, and a tap
|
|
146
|
-
* still reaches the button. Never on the entry in the open menu: the kit's tour takes
|
|
147
|
-
* the first visible match and the menu is portalled after the row, so a copy there
|
|
148
|
-
* would never be found, only make the selector match twice. The kit's name for it, as
|
|
149
|
-
* `AppShellNavItem.dataTour`.
|
|
150
|
-
*/
|
|
151
|
-
dataTour?: string;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/** The words of a {@link RowAction.confirm}; each defaults as described there. */
|
|
155
|
-
export interface RowActionConfirm {
|
|
156
|
-
title?: ReactNode;
|
|
157
|
-
body?: ReactNode;
|
|
158
|
-
confirmLabel?: ReactNode;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/** What a row's actions may be: entries, and `false` / `null` / `undefined` for the ones
|
|
162
|
-
* a condition left out. */
|
|
163
|
-
export type RowActionList = readonly (RowAction | false | null | undefined)[];
|
|
164
|
-
|
|
165
|
-
export interface RowActionsLabels {
|
|
166
|
-
/** The menu button's name when the row has no name of its own; also the actions
|
|
167
|
-
* column's (hidden) header in {@link rowActionsColumn}. */
|
|
168
|
-
actions: string;
|
|
169
|
-
/** The menu button's name, given the row's: "Actions for Ada Example". */
|
|
170
|
-
actionsFor: (name: string) => string;
|
|
171
|
-
/** 0.49 KIT-12: a danger action's confirmation title, given the action's label and the
|
|
172
|
-
* row's name when it has one: "Delete “Ada Example”?", "Delete?". */
|
|
173
|
-
confirmTitle: (action: string, name?: string) => string;
|
|
174
|
-
/** 0.49 KIT-12: the line under it — "This cannot be undone." */
|
|
175
|
-
confirmBody: string;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// Defined in ./row-actions-labels, which holds no component code (0.34, KS U8).
|
|
179
|
-
export { DEFAULT_ROW_ACTIONS_LABELS };
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* - `"auto"` (default): the icons inline at Normal; the "⋯" menu at Large and Extra
|
|
183
|
-
* large once there are two or more (§10.8). A single action stays inline at every
|
|
184
|
-
* size, with its label as text at Large — one label fits a row, and a menu of one is
|
|
185
|
-
* a detour.
|
|
186
|
-
* - `"menu"`: the menu at every size — the roster's choice, whose actions grow (§2.4
|
|
187
|
-
* there) and do not fit a phone card as a strip.
|
|
188
|
-
* - `"inline"`: the icons at every size — for a row the app knows has room; at Large
|
|
189
|
-
* each then shows its label (IconButton's `labelVisible`).
|
|
190
|
-
*/
|
|
191
|
-
export type RowActionsCollapse = "auto" | "menu" | "inline";
|
|
192
|
-
|
|
193
|
-
/** The sizes a row action comes in: IconButton's row steps. `2xs` is DataTable's
|
|
194
|
-
* compact density. At Large every one is at least a 48 px target (IconButton). */
|
|
195
|
-
export type RowActionsSize = Extract<IconButtonSize, "md" | "sm" | "xs" | "2xs">;
|
|
196
|
-
|
|
197
|
-
export interface RowActionsProps {
|
|
198
|
-
actions: RowActionList;
|
|
199
|
-
/**
|
|
200
|
-
* 0.49 KIT-12: where `tone: "danger"` actions go while the others are inline. `"menu"`
|
|
201
|
-
* (default): into the row's "⋯" menu, so a delete is never one stray tap in every
|
|
202
|
-
* row — the other actions stay icons beside it. `"inline"`: an icon like the rest.
|
|
203
|
-
* `collapse="inline"` keeps every action inline, `collapse="menu"` every one in the menu.
|
|
204
|
-
*/
|
|
205
|
-
dangerPlacement?: "menu" | "inline";
|
|
206
|
-
/** The row's name, for the menu button's name — "Actions for Ada Example". Without it
|
|
207
|
-
* (or `null`, as API fields often are) the button is "Actions". */
|
|
208
|
-
name?: string | null;
|
|
209
|
-
/** When the actions collapse into the menu — see {@link RowActionsCollapse}. */
|
|
210
|
-
collapse?: RowActionsCollapse;
|
|
211
|
-
/** The inline icons' and the "⋯" button's size. Default `xs`, a list row's action. */
|
|
212
|
-
size?: RowActionsSize;
|
|
213
|
-
/** The menu's width. Default `"15rem"`, in rem so it grows with the words (§3.2). */
|
|
214
|
-
menuWidth?: `${number}rem`;
|
|
215
|
-
/** On the wrapper: the inline strip, or the box round the "⋯" button. */
|
|
216
|
-
className?: string;
|
|
217
|
-
/** The inline glyphs' size, IconButton's `glyphSize` — e.g. 14 in a dense header strip
|
|
218
|
-
* (keksdose's category group header). The "⋯" button keeps its box's own. */
|
|
219
|
-
glyphSize?: IconButtonGlyphSize;
|
|
220
|
-
/** The inline tooltips' side, IconButton's `tooltipSide` — `"start"` for a table's last
|
|
221
|
-
* column, so a bubble does not run off the row's end. Per row: every inline action. */
|
|
222
|
-
tooltipSide?: TooltipSide;
|
|
223
|
-
labels?: LabelOverride<RowActionsLabels>;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function visibleActions(actions: RowActionList): RowAction[] {
|
|
227
|
-
return actions.filter((a): a is RowAction => Boolean(a) && !(a as RowAction).hidden);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/** An action's glyph as a node: a component is rendered, an element is used as is. */
|
|
231
|
-
function glyphOf(icon: RowAction["icon"]): ReactNode {
|
|
232
|
-
if (icon === undefined) return null;
|
|
233
|
-
if (isValidElement(icon)) return icon;
|
|
234
|
-
const Icon = icon as LucideIcon;
|
|
235
|
-
return <Icon />;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/** The menu glyph's tint per tone (0.33): the words keep the text colour, so the glyph
|
|
239
|
-
* carries `info` and `warning` — IconButton's toned colours. `danger` colours the words
|
|
240
|
-
* through Button's tone, and `muted` is the default look in a menu. */
|
|
241
|
-
const MENU_GLYPH_TONE: Partial<Record<RowActionTone, string>> = {
|
|
242
|
-
info: "text-info",
|
|
243
|
-
warning: "text-warning",
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
/** The state an action's control says, inline and in the menu alike: `aria-expanded` and
|
|
247
|
-
* `aria-controls` for a disclosure (a toggle's `aria-pressed` goes through the button's
|
|
248
|
-
* own `pressed`, which also draws the "on" look). */
|
|
249
|
-
function stateAttrs(action: RowAction) {
|
|
250
|
-
return {
|
|
251
|
-
"aria-expanded": action.expanded,
|
|
252
|
-
"aria-controls": action.expanded === undefined ? undefined : action.controls,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/** An action's tone on its inline control, for a caller's CSS and a test: `data-tone`,
|
|
257
|
-
* left off for the default look. */
|
|
258
|
-
function toneAttr(tone: RowActionTone | undefined) {
|
|
259
|
-
return { "data-tone": tone === undefined || tone === "default" ? undefined : tone };
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* A row's actions, inline or as a "⋯" menu — see {@link RowActionsCollapse}. Every
|
|
264
|
-
* control stops its click (and the Enter/Space it stands for) from reaching the row, so
|
|
265
|
-
* a clickable row or a DataTable `rowLink` does not open as well; in a DataTable column
|
|
266
|
-
* also set `noRowLink: true` and `role: "actions"`, as {@link rowActionsColumn} does.
|
|
267
|
-
*
|
|
268
|
-
* Inline, the icons sit in a {@link CompactControls} region at Normal: their labels
|
|
269
|
-
* stay the names and the tooltips, and a locked one keeps its reason in the tooltip — a
|
|
270
|
-
* line under one icon of a row would break the row. In the menu a locked action's
|
|
271
|
-
* reason is a line under its words at Large and on touch (Button's
|
|
272
|
-
* `disabledReasonDisplay`).
|
|
273
|
-
*
|
|
274
|
-
* The menu is portalled, so a table's scroller cannot clip it; Escape and an outside
|
|
275
|
-
* press close it, and focus goes back to the "⋯" button, which is where a confirmation
|
|
276
|
-
* dialog then returns it.
|
|
277
|
-
*/
|
|
278
|
-
export function RowActions(props: RowActionsProps) {
|
|
279
|
-
const outer = useContext(ConfirmContext);
|
|
280
|
-
// A danger action asks first (0.49 KIT-12). Under the app's ConfirmProvider through
|
|
281
|
-
// it; without one, through a provider of this row's own — only when there is
|
|
282
|
-
// something to ask, so a plain row adds nothing.
|
|
283
|
-
if (outer === null && visibleActions(props.actions).some(asksFirst)) {
|
|
284
|
-
return (
|
|
285
|
-
<ConfirmProvider>
|
|
286
|
-
<RowActionsBody {...props} />
|
|
287
|
-
</ConfirmProvider>
|
|
288
|
-
);
|
|
289
|
-
}
|
|
290
|
-
return <RowActionsBody {...props} />;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/** Whether choosing `action` opens a confirmation first: a danger action unless it says
|
|
294
|
-
* `confirm: false`, any other when it passes one; never a link. */
|
|
295
|
-
function asksFirst(action: RowAction): boolean {
|
|
296
|
-
if (action.href !== undefined || action.confirm === false) return false;
|
|
297
|
-
return action.confirm !== undefined || action.tone === "danger";
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/** `action.onSelect`, after its confirmation when it {@link asksFirst}. */
|
|
301
|
-
function useRunAction(name: string | null | undefined, labels: RowActionsLabels) {
|
|
302
|
-
const confirm = useContext(ConfirmContext);
|
|
303
|
-
return (action: RowAction) => {
|
|
304
|
-
if (!asksFirst(action) || confirm === null) {
|
|
305
|
-
action.onSelect?.();
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
const words = typeof action.confirm === "object" ? action.confirm : {};
|
|
309
|
-
void confirm({
|
|
310
|
-
title: words.title ?? labels.confirmTitle(action.label, name ?? undefined),
|
|
311
|
-
body: words.body ?? labels.confirmBody,
|
|
312
|
-
confirmLabel: words.confirmLabel ?? action.label,
|
|
313
|
-
tone: "danger",
|
|
314
|
-
commit: action.commit,
|
|
315
|
-
}).then((ok) => {
|
|
316
|
-
if (ok) action.onSelect?.();
|
|
317
|
-
});
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
function RowActionsBody({
|
|
322
|
-
actions,
|
|
323
|
-
name,
|
|
324
|
-
collapse = "auto",
|
|
325
|
-
dangerPlacement = "menu",
|
|
326
|
-
size = "xs",
|
|
327
|
-
menuWidth = "15rem",
|
|
328
|
-
className,
|
|
329
|
-
glyphSize,
|
|
330
|
-
tooltipSide,
|
|
331
|
-
labels: labelsProp,
|
|
332
|
-
}: RowActionsProps) {
|
|
333
|
-
const labels = useKitLabels("rowActions", DEFAULT_ROW_ACTIONS_LABELS, labelsProp);
|
|
334
|
-
const large = useLargeText();
|
|
335
|
-
const run = useRunAction(name, labels);
|
|
336
|
-
const entries = visibleActions(actions);
|
|
337
|
-
if (entries.length === 0) return null;
|
|
338
|
-
const asMenu = collapse === "menu" || (collapse === "auto" && large && entries.length > 1);
|
|
339
|
-
// Inline, a danger action still goes into the "⋯" menu (KIT-12) unless the app keeps it
|
|
340
|
-
// inline: the other actions stay icons, the menu holds the destructive ones.
|
|
341
|
-
const toMenu = (action: RowAction) =>
|
|
342
|
-
asMenu || (collapse === "auto" && dangerPlacement === "menu" && action.tone === "danger");
|
|
343
|
-
const inline = entries.filter((action) => !toMenu(action));
|
|
344
|
-
const menu = entries.filter(toMenu);
|
|
345
|
-
const title = name ? labels.actionsFor(name) : labels.actions;
|
|
346
|
-
const menuButton = menu.length > 0 && (
|
|
347
|
-
<RowActionsMenu
|
|
348
|
-
entries={menu}
|
|
349
|
-
title={title}
|
|
350
|
-
size={size}
|
|
351
|
-
menuWidth={menuWidth}
|
|
352
|
-
run={run}
|
|
353
|
-
className={inline.length === 0 ? className : undefined}
|
|
354
|
-
/>
|
|
355
|
-
);
|
|
356
|
-
if (inline.length === 0) return menuButton || null;
|
|
357
|
-
const strip = (
|
|
358
|
-
<div data-slot="row-actions" className={cn("inline-flex items-center gap-0.5", className)}>
|
|
359
|
-
{inline.map((action) => (
|
|
360
|
-
<InlineAction
|
|
361
|
-
key={action.key ?? action.label}
|
|
362
|
-
action={action}
|
|
363
|
-
size={size}
|
|
364
|
-
glyphSize={glyphSize}
|
|
365
|
-
tooltipSide={tooltipSide}
|
|
366
|
-
run={run}
|
|
367
|
-
/>
|
|
368
|
-
))}
|
|
369
|
-
{menuButton}
|
|
370
|
-
</div>
|
|
371
|
-
);
|
|
372
|
-
// Compact at Normal (no room for a reason line in a row); at Large an inline action
|
|
373
|
-
// is the app's choice ("inline") or the row's only one, and shows its words.
|
|
374
|
-
return large ? strip : <CompactControls>{strip}</CompactControls>;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
/** The "⋯" button and its menu of `entries`. */
|
|
378
|
-
function RowActionsMenu({
|
|
379
|
-
entries,
|
|
380
|
-
title,
|
|
381
|
-
size,
|
|
382
|
-
menuWidth,
|
|
383
|
-
run,
|
|
384
|
-
className,
|
|
385
|
-
}: {
|
|
386
|
-
entries: RowAction[];
|
|
387
|
-
title: string;
|
|
388
|
-
size: RowActionsSize;
|
|
389
|
-
menuWidth: `${number}rem`;
|
|
390
|
-
run: (action: RowAction) => void;
|
|
391
|
-
className?: string;
|
|
392
|
-
}) {
|
|
393
|
-
// The menu closed when the action was chosen, so what is in flight shows on "⋯".
|
|
394
|
-
const busy = entries.some((action) => action.pending);
|
|
395
|
-
const anchored = entries.filter((action) => action.dataTour);
|
|
396
|
-
return (
|
|
397
|
-
// The "⋯" in a box of its own, the inline strip's slot: the tour anchors of the
|
|
398
|
-
// collapsed actions lie over the button in it (see `dataTour`), and `className`
|
|
399
|
-
// places the box as it places the strip.
|
|
400
|
-
<div data-slot="row-actions" className={cn("relative inline-flex", className)}>
|
|
401
|
-
<Popover
|
|
402
|
-
width={menuWidth}
|
|
403
|
-
aria-label={title}
|
|
404
|
-
className="p-1"
|
|
405
|
-
trigger={({ open, toggle, ref }) => (
|
|
406
|
-
<IconButton
|
|
407
|
-
ref={ref}
|
|
408
|
-
size={size}
|
|
409
|
-
label={title}
|
|
410
|
-
// "⋯" is read by everyone as "more actions"; the menu it opens is the words.
|
|
411
|
-
labelVisible={false}
|
|
412
|
-
aria-haspopup="dialog"
|
|
413
|
-
aria-expanded={open}
|
|
414
|
-
pending={busy}
|
|
415
|
-
stopPropagation
|
|
416
|
-
onClick={toggle}
|
|
417
|
-
>
|
|
418
|
-
<MoreHorizontal />
|
|
419
|
-
</IconButton>
|
|
420
|
-
)}
|
|
421
|
-
// React carries an event out of a portal along the COMPONENT tree, so a click in
|
|
422
|
-
// the menu reached a clickable row or a DataTable `onRowClick` the menu was opened
|
|
423
|
-
// from, though the panel is nowhere near it in the page — only the "⋯" trigger
|
|
424
|
-
// stopped its own (keksdose's 0.32 report). Stopped on the PANEL itself, its padding
|
|
425
|
-
// and border included (0.32.2: 0.32.1 stopped it on an inner box, and a click on
|
|
426
|
-
// the panel's `p-1` still went through): clicks, and the Enter / Space a row also
|
|
427
|
-
// listens for. Escape goes on, to the popover's own handler that closes it.
|
|
428
|
-
onClick={stopClick}
|
|
429
|
-
onKeyDown={stopActivationKeys}
|
|
430
|
-
>
|
|
431
|
-
{(close) => (
|
|
432
|
-
<ul data-slot="row-actions-menu" className="space-y-0.5">
|
|
433
|
-
{entries.map((action) => (
|
|
434
|
-
<li key={action.key ?? action.label}>
|
|
435
|
-
<MenuAction action={action} close={close} run={run} />
|
|
436
|
-
</li>
|
|
437
|
-
))}
|
|
438
|
-
</ul>
|
|
439
|
-
)}
|
|
440
|
-
</Popover>
|
|
441
|
-
{anchored.map((action) => (
|
|
442
|
-
// The More cell's TourAnchor: decoration over the button, which keeps every tap.
|
|
443
|
-
<span
|
|
444
|
-
key={action.key ?? action.label}
|
|
445
|
-
aria-hidden
|
|
446
|
-
data-tour={action.dataTour}
|
|
447
|
-
className="pointer-events-none absolute inset-0"
|
|
448
|
-
/>
|
|
449
|
-
))}
|
|
450
|
-
</div>
|
|
451
|
-
);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
function stopClick(e: MouseEvent) {
|
|
455
|
-
e.stopPropagation();
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
function stopActivationKeys(e: KeyboardEvent) {
|
|
459
|
-
if (e.key === "Enter" || e.key === " ") e.stopPropagation();
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
/**
|
|
463
|
-
* The `href` an action renders as a link with, or `undefined` for a button: a link
|
|
464
|
-
* cannot carry a reason or a spinner (Button's link form has neither), so a refused
|
|
465
|
-
* action — its own `disabledReason`, or a write lock on a `commit` — and a pending one
|
|
466
|
-
* stay buttons and say so.
|
|
467
|
-
*/
|
|
468
|
-
function useActionHref(action: RowAction): string | undefined {
|
|
469
|
-
const reason = useCommitReason(action.commit, action.disabledReason);
|
|
470
|
-
const refused = hasContent(reason);
|
|
471
|
-
return action.href !== undefined && !action.pending && !refused ? action.href : undefined;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
/** One entry of the "⋯" menu: the words, as a link for an `href`, else a button. */
|
|
475
|
-
function MenuAction({
|
|
476
|
-
action,
|
|
477
|
-
close,
|
|
478
|
-
run,
|
|
479
|
-
}: {
|
|
480
|
-
action: RowAction;
|
|
481
|
-
close: () => void;
|
|
482
|
-
run: (action: RowAction) => void;
|
|
483
|
-
}) {
|
|
484
|
-
const href = useActionHref(action);
|
|
485
|
-
const glyph = glyphOf(action.icon);
|
|
486
|
-
const glyphTone = action.tone === undefined ? undefined : MENU_GLYPH_TONE[action.tone];
|
|
487
|
-
const words = (
|
|
488
|
-
<>
|
|
489
|
-
{glyph && (
|
|
490
|
-
<span
|
|
491
|
-
aria-hidden
|
|
492
|
-
data-tone={glyphTone ? action.tone : undefined}
|
|
493
|
-
className={cn("flex shrink-0 [&_svg]:size-4", glyphTone)}
|
|
494
|
-
>
|
|
495
|
-
{glyph}
|
|
496
|
-
</span>
|
|
497
|
-
)}
|
|
498
|
-
{action.label}
|
|
499
|
-
</>
|
|
500
|
-
);
|
|
501
|
-
const tone = action.tone === "danger" ? "danger" : undefined;
|
|
502
|
-
const select = () => {
|
|
503
|
-
close();
|
|
504
|
-
run(action);
|
|
505
|
-
};
|
|
506
|
-
if (href !== undefined) {
|
|
507
|
-
return (
|
|
508
|
-
<Button
|
|
509
|
-
href={href}
|
|
510
|
-
external={action.external}
|
|
511
|
-
variant="ghost"
|
|
512
|
-
size="sm"
|
|
513
|
-
stretch
|
|
514
|
-
tone={tone}
|
|
515
|
-
disabled={action.disabled}
|
|
516
|
-
className="w-full justify-start text-start"
|
|
517
|
-
onClick={select}
|
|
518
|
-
>
|
|
519
|
-
{words}
|
|
520
|
-
</Button>
|
|
521
|
-
);
|
|
522
|
-
}
|
|
523
|
-
return (
|
|
524
|
-
<Button
|
|
525
|
-
{...stateAttrs(action)}
|
|
526
|
-
type="button"
|
|
527
|
-
variant="ghost"
|
|
528
|
-
size="sm"
|
|
529
|
-
stretch
|
|
530
|
-
tone={tone}
|
|
531
|
-
pressed={action.pressed}
|
|
532
|
-
disabledReason={action.disabledReason}
|
|
533
|
-
commit={action.commit}
|
|
534
|
-
pending={action.pending}
|
|
535
|
-
disabled={action.disabled}
|
|
536
|
-
className="w-full justify-start text-start"
|
|
537
|
-
onClick={select}
|
|
538
|
-
>
|
|
539
|
-
{words}
|
|
540
|
-
</Button>
|
|
541
|
-
);
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
/** One inline action: an IconButton with its icon, else a small text button — each a
|
|
545
|
-
* link for an `href` (see {@link useActionHref}). The control carries the action's
|
|
546
|
-
* state, its tone and its tour anchor. */
|
|
547
|
-
function InlineAction({
|
|
548
|
-
action,
|
|
549
|
-
size,
|
|
550
|
-
glyphSize,
|
|
551
|
-
tooltipSide,
|
|
552
|
-
run,
|
|
553
|
-
}: {
|
|
554
|
-
action: RowAction;
|
|
555
|
-
size: RowActionsSize;
|
|
556
|
-
glyphSize?: IconButtonGlyphSize;
|
|
557
|
-
tooltipSide?: TooltipSide;
|
|
558
|
-
run: (action: RowAction) => void;
|
|
559
|
-
}) {
|
|
560
|
-
const href = useActionHref(action);
|
|
561
|
-
const glyph = glyphOf(action.icon);
|
|
562
|
-
const iconTone = action.tone === "default" ? undefined : action.tone;
|
|
563
|
-
// A text button has Button's two tones; `info` and `warning` are a glyph's colours.
|
|
564
|
-
const textTone = action.tone === "danger" || action.tone === "muted" ? action.tone : undefined;
|
|
565
|
-
const marks = { "data-tour": action.dataTour, ...toneAttr(action.tone) };
|
|
566
|
-
if (glyph) {
|
|
567
|
-
if (href !== undefined) {
|
|
568
|
-
return (
|
|
569
|
-
<IconButton
|
|
570
|
-
{...marks}
|
|
571
|
-
href={href}
|
|
572
|
-
external={action.external}
|
|
573
|
-
size={size}
|
|
574
|
-
glyphSize={glyphSize}
|
|
575
|
-
label={action.label}
|
|
576
|
-
tooltipSide={tooltipSide}
|
|
577
|
-
tone={iconTone}
|
|
578
|
-
disabled={action.disabled}
|
|
579
|
-
stopPropagation
|
|
580
|
-
onClick={() => action.onSelect?.()}
|
|
581
|
-
>
|
|
582
|
-
{glyph}
|
|
583
|
-
</IconButton>
|
|
584
|
-
);
|
|
585
|
-
}
|
|
586
|
-
return (
|
|
587
|
-
<IconButton
|
|
588
|
-
{...marks}
|
|
589
|
-
{...stateAttrs(action)}
|
|
590
|
-
size={size}
|
|
591
|
-
glyphSize={glyphSize}
|
|
592
|
-
label={action.label}
|
|
593
|
-
tooltipSide={tooltipSide}
|
|
594
|
-
tone={iconTone}
|
|
595
|
-
pressed={action.pressed}
|
|
596
|
-
disabledReason={action.disabledReason}
|
|
597
|
-
commit={action.commit}
|
|
598
|
-
pending={action.pending}
|
|
599
|
-
disabled={action.disabled}
|
|
600
|
-
stopPropagation
|
|
601
|
-
onClick={() => run(action)}
|
|
602
|
-
>
|
|
603
|
-
{glyph}
|
|
604
|
-
</IconButton>
|
|
605
|
-
);
|
|
606
|
-
}
|
|
607
|
-
// A row listening for clicks must not open as well (IconButton's stopPropagation).
|
|
608
|
-
const stop = {
|
|
609
|
-
onClick: (e: MouseEvent) => {
|
|
610
|
-
e.stopPropagation();
|
|
611
|
-
run(action);
|
|
612
|
-
},
|
|
613
|
-
onKeyDown: (e: KeyboardEvent) => {
|
|
614
|
-
if (e.key === "Enter" || e.key === " ") e.stopPropagation();
|
|
615
|
-
},
|
|
616
|
-
};
|
|
617
|
-
if (href !== undefined) {
|
|
618
|
-
return (
|
|
619
|
-
<Button
|
|
620
|
-
{...marks}
|
|
621
|
-
href={href}
|
|
622
|
-
external={action.external}
|
|
623
|
-
variant="ghost"
|
|
624
|
-
size="sm"
|
|
625
|
-
tone={textTone}
|
|
626
|
-
disabled={action.disabled}
|
|
627
|
-
{...stop}
|
|
628
|
-
>
|
|
629
|
-
{action.label}
|
|
630
|
-
</Button>
|
|
631
|
-
);
|
|
632
|
-
}
|
|
633
|
-
return (
|
|
634
|
-
<Button
|
|
635
|
-
{...marks}
|
|
636
|
-
{...stateAttrs(action)}
|
|
637
|
-
type="button"
|
|
638
|
-
variant="ghost"
|
|
639
|
-
size="sm"
|
|
640
|
-
tone={textTone}
|
|
641
|
-
pressed={action.pressed}
|
|
642
|
-
disabledReason={action.disabledReason}
|
|
643
|
-
commit={action.commit}
|
|
644
|
-
pending={action.pending}
|
|
645
|
-
disabled={action.disabled}
|
|
646
|
-
{...stop}
|
|
647
|
-
>
|
|
648
|
-
{action.label}
|
|
649
|
-
</Button>
|
|
650
|
-
);
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
/** The actions column's heading, in the provider's words: on screen since 0.46.1 (keksdose
|
|
654
|
-
* dev#598 rework), a screen reader's name only with `hidden`. */
|
|
655
|
-
function RowActionsHeader({
|
|
656
|
-
text,
|
|
657
|
-
labels,
|
|
658
|
-
hidden,
|
|
659
|
-
}: {
|
|
660
|
-
text?: string;
|
|
661
|
-
labels?: LabelOverride<RowActionsLabels>;
|
|
662
|
-
hidden?: boolean;
|
|
663
|
-
}) {
|
|
664
|
-
const resolved = useKitLabels("rowActions", DEFAULT_ROW_ACTIONS_LABELS, labels);
|
|
665
|
-
const word = text ?? resolved.actions;
|
|
666
|
-
return hidden ? <span className="sr-only">{word}</span> : <>{word}</>;
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
/** The actions cell's classes — `rowActionsColumn`'s `className`: the column hugs its
|
|
670
|
-
* buttons, on one line, at the row's end. A hand-built table's `<TableCell>` takes them
|
|
671
|
-
* around its {@link RowActions} (0.47, keksdose N17). */
|
|
672
|
-
export const ROW_ACTIONS_CELL_CLASS = "w-px whitespace-nowrap text-end";
|
|
673
|
-
/** The actions heading's classes — `rowActionsColumn`'s `headClassName`, which
|
|
674
|
-
* {@link RowActionsHead} draws: hugging, end-aligned over the buttons (0.47, N17). */
|
|
675
|
-
export const ROW_ACTIONS_HEAD_CLASS = "w-px text-end";
|
|
676
|
-
|
|
677
|
-
export interface RowActionsHeadProps extends Omit<TableHeaderCellProps, "children"> {
|
|
678
|
-
/** The heading. Default: the provider's `rowActions.actions` ("Actions"). */
|
|
679
|
-
children?: ReactNode;
|
|
680
|
-
/** Named for a screen reader only — `rowActionsColumn`'s `header: false`. */
|
|
681
|
-
hideLabel?: boolean;
|
|
682
|
-
labels?: LabelOverride<RowActionsLabels>;
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
/**
|
|
686
|
-
* A hand-built table's actions heading (0.47, keksdose N17): the `<th>` `rowActionsColumn`
|
|
687
|
-
* gives a DataTable — "Actions" on screen in the provider's words, end-aligned over the
|
|
688
|
-
* buttons, hugging them. Pair it with `<TableCell className={ROW_ACTIONS_CELL_CLASS}>`
|
|
689
|
-
* around each row's {@link RowActions}. Every other `TableHeaderCell` prop passes on
|
|
690
|
-
* (`size`, the app's `className`, merged last).
|
|
691
|
-
*
|
|
692
|
-
* <RowActionsHead size="sm" className={TH} />
|
|
693
|
-
*/
|
|
694
|
-
export function RowActionsHead({ children, hideLabel, labels, className, ...rest }: RowActionsHeadProps) {
|
|
695
|
-
return (
|
|
696
|
-
<TableHeaderCell align="end" {...rest} className={cn(ROW_ACTIONS_HEAD_CLASS, className)}>
|
|
697
|
-
{typeof children === "string" || children == null ? (
|
|
698
|
-
<RowActionsHeader text={children ?? undefined} labels={labels} hidden={hideLabel} />
|
|
699
|
-
) : (
|
|
700
|
-
children
|
|
701
|
-
)}
|
|
702
|
-
</TableHeaderCell>
|
|
703
|
-
);
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
export interface RowActionsColumnOptions<T> {
|
|
707
|
-
/** The column's key. Default `"actions"`. */
|
|
708
|
-
key?: string;
|
|
709
|
-
/** The row's actions — `false` / `null` for the ones a condition leaves out. */
|
|
710
|
-
actions: (row: T) => RowActionList;
|
|
711
|
-
/** The row's name, for the "⋯" button's name ("Actions for Ada Example"). `null` and
|
|
712
|
-
* `undefined` both mean "Actions". */
|
|
713
|
-
name?: (row: T) => string | null | undefined;
|
|
714
|
-
collapse?: RowActionsCollapse;
|
|
715
|
-
/** Default `xs`. */
|
|
716
|
-
size?: RowActionsSize;
|
|
717
|
-
/** See {@link RowActionsProps.glyphSize}. */
|
|
718
|
-
glyphSize?: IconButtonGlyphSize;
|
|
719
|
-
/** See {@link RowActionsProps.tooltipSide} — `"start"` in a table's last column. */
|
|
720
|
-
tooltipSide?: TooltipSide;
|
|
721
|
-
/**
|
|
722
|
-
* The column's name as plain text — the column-settings checklist and the phone
|
|
723
|
-
* card's label read it (`DataTableColumn.headerText`). Pass the app's own word; left
|
|
724
|
-
* out, the heading shows the provider's `rowActions.actions` and the plain-text
|
|
725
|
-
* places fall back to the column's `key`.
|
|
726
|
-
*/
|
|
727
|
-
headerText?: string;
|
|
728
|
-
/**
|
|
729
|
-
* The heading (0.46.1, keksdose dev#598 rework — Marcel: a VISIBLE "Actions" heading on
|
|
730
|
-
* every table with an actions column). Default: `headerText`, else the provider's
|
|
731
|
-
* `rowActions.actions` ("Actions"), shown, end-aligned over the buttons. A node
|
|
732
|
-
* replaces it; `false` keeps the pre-0.46.1 heading, named for a screen reader only.
|
|
733
|
-
*/
|
|
734
|
-
header?: ReactNode | false;
|
|
735
|
-
labels?: LabelOverride<RowActionsLabels>;
|
|
736
|
-
/** Anything else for the column (`mobileHidden`, `cellProps`, another `role`…), merged last. */
|
|
737
|
-
column?: Partial<DataTableColumn<T>>;
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
/**
|
|
741
|
-
* A DataTable column of {@link RowActions} — an app's action column in one line
|
|
742
|
-
* (§10.8): inline icons at Normal, the "⋯" menu at Large with two or more actions.
|
|
743
|
-
*
|
|
744
|
-
* columns={[...columns, rowActionsColumn({ actions: (r) => [...], name: (r) => r.name })]}
|
|
745
|
-
*
|
|
746
|
-
* The heading says "Actions" on screen (0.46.1; `header` changes or hides it), the
|
|
747
|
-
* column hugs its content at the row's end, and `noRowLink` keeps a `rowHref` anchor off it, so the
|
|
748
|
-
* buttons keep their own clicks. It is `role: "actions"` (0.49 KIT-7): DataTable's default
|
|
749
|
-
* phone card draws it after its three fields, at the card's end, and never counts it as
|
|
750
|
-
* one of them. Set `column: { mobileHidden: true }` to drop it there (with
|
|
751
|
-
* `mobileDetailsInRow` it then shows in the opened row instead).
|
|
752
|
-
*/
|
|
753
|
-
export function rowActionsColumn<T>({
|
|
754
|
-
key = "actions",
|
|
755
|
-
actions,
|
|
756
|
-
name,
|
|
757
|
-
collapse,
|
|
758
|
-
size,
|
|
759
|
-
glyphSize,
|
|
760
|
-
tooltipSide,
|
|
761
|
-
headerText,
|
|
762
|
-
header,
|
|
763
|
-
labels,
|
|
764
|
-
column,
|
|
765
|
-
}: RowActionsColumnOptions<T>): DataTableColumn<T> {
|
|
766
|
-
return {
|
|
767
|
-
key,
|
|
768
|
-
header:
|
|
769
|
-
header === false || header == null ? (
|
|
770
|
-
<RowActionsHeader text={headerText} labels={labels} hidden={header === false} />
|
|
771
|
-
) : (
|
|
772
|
-
header
|
|
773
|
-
),
|
|
774
|
-
headerText,
|
|
775
|
-
cell: (row) => (
|
|
776
|
-
<RowActions
|
|
777
|
-
actions={actions(row)}
|
|
778
|
-
name={name?.(row)}
|
|
779
|
-
collapse={collapse}
|
|
780
|
-
size={size}
|
|
781
|
-
glyphSize={glyphSize}
|
|
782
|
-
tooltipSide={tooltipSide}
|
|
783
|
-
labels={labels}
|
|
784
|
-
/>
|
|
785
|
-
),
|
|
786
|
-
className: ROW_ACTIONS_CELL_CLASS,
|
|
787
|
-
// The heading over the buttons, at the row's end (0.46.1); a hand-built table's
|
|
788
|
-
// `RowActionsHead` (0.47).
|
|
789
|
-
headClassName: ROW_ACTIONS_HEAD_CLASS,
|
|
790
|
-
noRowLink: true,
|
|
791
|
-
// After the phone card's fields, never one of them (0.49 KIT-7).
|
|
792
|
-
role: "actions",
|
|
793
|
-
...column,
|
|
794
|
-
};
|
|
795
|
-
}
|