@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
package/src/hooks/use-hotkey.ts
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef } from "react";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* A key combination: modifiers and one key, joined by "+", case-insensitive —
|
|
5
|
-
* `"Ctrl+Shift+F"`, `"Mod+K"`, `"Alt+ArrowUp"`, `"Escape"`, `"?"`.
|
|
6
|
-
*
|
|
7
|
-
* Modifiers: `Ctrl` (`Control`), `Meta` (`Cmd`, `Command`), `Shift`, `Alt` (`Option`),
|
|
8
|
-
* and `Mod` — Cmd on Apple platforms, Ctrl everywhere else, the one to use for an
|
|
9
|
-
* app shortcut. The key is `KeyboardEvent.key` ("f", "Enter", "ArrowUp", "/"), or a
|
|
10
|
-
* `KeyboardEvent.code` ("KeyF", "Digit1") when the physical key is what matters.
|
|
11
|
-
* Several combos: pass an array.
|
|
12
|
-
*/
|
|
13
|
-
export type Hotkey = string;
|
|
14
|
-
|
|
15
|
-
export interface UseHotkeyOptions {
|
|
16
|
-
/** Off while `false` (default `true`). */
|
|
17
|
-
enabled?: boolean;
|
|
18
|
-
/** Call `preventDefault()` on a match (default `true`): Ctrl+Shift+F must not also
|
|
19
|
-
* open the browser's own dialog. */
|
|
20
|
-
preventDefault?: boolean;
|
|
21
|
-
/** Where to listen. Default `document`. A ref, an element, or `window`. */
|
|
22
|
-
target?: EventTarget | null | { current: EventTarget | null };
|
|
23
|
-
/**
|
|
24
|
-
* Fire while the focus is in a text field, select or contenteditable too. Default
|
|
25
|
-
* `false`: a shortcut must not steal the letters someone is typing. A combo with Ctrl,
|
|
26
|
-
* Meta or Alt is not typing — those still fire unless this is `"never"`.
|
|
27
|
-
*/
|
|
28
|
-
allowInInputs?: boolean | "never";
|
|
29
|
-
/** `keydown` (default) or `keyup`. */
|
|
30
|
-
event?: "keydown" | "keyup";
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface ParsedHotkey {
|
|
34
|
-
ctrl: boolean;
|
|
35
|
-
meta: boolean;
|
|
36
|
-
shift: boolean;
|
|
37
|
-
alt: boolean;
|
|
38
|
-
key: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** Whether this is an Apple platform, where `Mod` means Cmd. */
|
|
42
|
-
export function isApplePlatform(): boolean {
|
|
43
|
-
if (typeof navigator === "undefined") return false;
|
|
44
|
-
const nav = navigator as Navigator & { userAgentData?: { platform?: string } };
|
|
45
|
-
return /mac|iphone|ipad|ipod/i.test(nav.userAgentData?.platform || nav.platform || nav.userAgent);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Parse one combo. `apple` decides what `Mod` is. Throws on an empty key. */
|
|
49
|
-
export function parseHotkey(combo: Hotkey, apple = isApplePlatform()): ParsedHotkey {
|
|
50
|
-
const parts = combo
|
|
51
|
-
.split("+")
|
|
52
|
-
.map((p) => p.trim())
|
|
53
|
-
// "Ctrl++" is Ctrl and "+": an empty part after a "+" is the plus key itself.
|
|
54
|
-
.map((p, i, all) => (p === "" && i === all.length - 1 ? "+" : p))
|
|
55
|
-
.filter((p) => p !== "");
|
|
56
|
-
const out: ParsedHotkey = { ctrl: false, meta: false, shift: false, alt: false, key: "" };
|
|
57
|
-
for (const part of parts) {
|
|
58
|
-
switch (part.toLowerCase()) {
|
|
59
|
-
case "ctrl":
|
|
60
|
-
case "control":
|
|
61
|
-
out.ctrl = true;
|
|
62
|
-
break;
|
|
63
|
-
case "meta":
|
|
64
|
-
case "cmd":
|
|
65
|
-
case "command":
|
|
66
|
-
out.meta = true;
|
|
67
|
-
break;
|
|
68
|
-
case "mod":
|
|
69
|
-
if (apple) out.meta = true;
|
|
70
|
-
else out.ctrl = true;
|
|
71
|
-
break;
|
|
72
|
-
case "shift":
|
|
73
|
-
out.shift = true;
|
|
74
|
-
break;
|
|
75
|
-
case "alt":
|
|
76
|
-
case "option":
|
|
77
|
-
out.alt = true;
|
|
78
|
-
break;
|
|
79
|
-
default:
|
|
80
|
-
out.key = part;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (!out.key) throw new Error(`useHotkey: "${combo}" names no key`);
|
|
84
|
-
return out;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const KEY_ALIASES: Record<string, string> = {
|
|
88
|
-
esc: "escape",
|
|
89
|
-
space: " ",
|
|
90
|
-
del: "delete",
|
|
91
|
-
up: "arrowup",
|
|
92
|
-
down: "arrowdown",
|
|
93
|
-
left: "arrowleft",
|
|
94
|
-
right: "arrowright",
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
/** One letter of a script other than Latin: what a Russian, Greek or Hebrew layout's letter keys type. */
|
|
98
|
-
const NON_LATIN_LETTER = /^(?!\p{Script=Latin})\p{L}$/u;
|
|
99
|
-
|
|
100
|
-
/** Whether `e` is `combo` — every modifier as named (no more, no fewer), and the key. */
|
|
101
|
-
export function matchesHotkey(e: KeyboardEvent, combo: ParsedHotkey): boolean {
|
|
102
|
-
if (e.ctrlKey !== combo.ctrl || e.metaKey !== combo.meta || e.altKey !== combo.alt) return false;
|
|
103
|
-
const want = KEY_ALIASES[combo.key.toLowerCase()] ?? combo.key.toLowerCase();
|
|
104
|
-
const key = (e.key ?? "").toLowerCase();
|
|
105
|
-
const code = (e.code ?? "").toLowerCase();
|
|
106
|
-
// On a non-Latin layout `key` is the local letter — Ctrl+K types "л" on a Russian one —
|
|
107
|
-
// so a letter chord never fired there, ⌘K included (0.52 code review, use-hotkey.ts; the
|
|
108
|
-
// hand-written ⌘K listener before 0.52 compared `key` alone and missed it too). The
|
|
109
|
-
// physical key stands in for the letter there, and only there: a Latin layout's letter
|
|
110
|
-
// is wherever it types (Dvorak's K is on QWERTY's V).
|
|
111
|
-
const physical = /^[a-z]$/.test(want) && NON_LATIN_LETTER.test(e.key ?? "") && code === `key${want}`;
|
|
112
|
-
if (key !== want && code !== want && !physical) return false;
|
|
113
|
-
// Shift must match exactly for a letter or a named key; for a symbol it is how the
|
|
114
|
-
// symbol is typed ("?" is Shift+/ on a US layout, a plain key on others), so an
|
|
115
|
-
// unnamed Shift is not held against it. Space is a named key, not a symbol, though its
|
|
116
|
-
// alias is one character: "Space" fired on Shift+Space, the browser's page-up, and
|
|
117
|
-
// cancelled it (0.52 code review, use-hotkey.ts).
|
|
118
|
-
const symbol = want.length === 1 && !/[a-z0-9 ]/.test(want);
|
|
119
|
-
return symbol && !combo.shift ? true : e.shiftKey === combo.shift;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** Is the focus somewhere that takes typed characters? */
|
|
123
|
-
function isTypingTarget(target: EventTarget | null): boolean {
|
|
124
|
-
if (!(target instanceof HTMLElement)) return false;
|
|
125
|
-
if (target.isContentEditable) return true;
|
|
126
|
-
if (target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement) return true;
|
|
127
|
-
if (target instanceof HTMLInputElement) {
|
|
128
|
-
return !["button", "checkbox", "radio", "submit", "reset", "range", "color", "file", "image"].includes(target.type);
|
|
129
|
-
}
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Call `handler` when `combo` is pressed — kastlan's feedback button (Ctrl+Shift+F,
|
|
135
|
-
* feedback-button:60) wired it by hand, and so will every next shortcut.
|
|
136
|
-
*
|
|
137
|
-
* - `Mod` is Cmd on a Mac and Ctrl elsewhere, read once per mount.
|
|
138
|
-
* - Modifiers match EXACTLY: `"Ctrl+K"` does not fire on Ctrl+Shift+K.
|
|
139
|
-
* - Typing in a field is left alone unless `allowInInputs`, except for a combo with
|
|
140
|
-
* Ctrl / Meta / Alt, which no one types as text.
|
|
141
|
-
* - A key held down fires once, not on every repeat — and its repeats are cancelled as
|
|
142
|
-
* the first press was, or the browser acts on them.
|
|
143
|
-
* - The newest `handler` is always called; changing it does not re-attach the listener.
|
|
144
|
-
*
|
|
145
|
-
* `useCommandKey` (the ⌘K palette hook) is this with `"Mod+K"` and `allowInInputs`
|
|
146
|
-
* since 0.52, and FormActions' Ctrl/Cmd+Enter is {@link matchesHotkey} (refactor audit
|
|
147
|
-
* 2026-10-30, DUP-12): one reading of a chord.
|
|
148
|
-
*/
|
|
149
|
-
export function useHotkey(
|
|
150
|
-
combo: Hotkey | ReadonlyArray<Hotkey>,
|
|
151
|
-
handler: (event: KeyboardEvent) => void,
|
|
152
|
-
options: UseHotkeyOptions = {},
|
|
153
|
-
): void {
|
|
154
|
-
const { enabled = true, preventDefault = true, target, allowInInputs = false, event = "keydown" } = options;
|
|
155
|
-
const handlerRef = useRef(handler);
|
|
156
|
-
useEffect(() => {
|
|
157
|
-
handlerRef.current = handler;
|
|
158
|
-
});
|
|
159
|
-
const key = typeof combo === "string" ? combo : combo.join("\u0000");
|
|
160
|
-
const targetEl = target && "current" in target ? undefined : target;
|
|
161
|
-
const targetRef = target && "current" in target ? target : undefined;
|
|
162
|
-
|
|
163
|
-
useEffect(() => {
|
|
164
|
-
if (!enabled) return;
|
|
165
|
-
const node: EventTarget | null =
|
|
166
|
-
targetRef?.current ?? targetEl ?? (typeof document === "undefined" ? null : document);
|
|
167
|
-
if (!node) return;
|
|
168
|
-
const apple = isApplePlatform();
|
|
169
|
-
const parsed = key.split("\u0000").map((c) => parseHotkey(c, apple));
|
|
170
|
-
const listener = (raw: Event) => {
|
|
171
|
-
const e = raw as KeyboardEvent;
|
|
172
|
-
const hit = parsed.find((p) => matchesHotkey(e, p));
|
|
173
|
-
if (!hit) return;
|
|
174
|
-
if (allowInInputs !== true && isTypingTarget(e.target)) {
|
|
175
|
-
const chorded = hit.ctrl || hit.meta || hit.alt;
|
|
176
|
-
if (allowInInputs === "never" || !chorded) return;
|
|
177
|
-
}
|
|
178
|
-
if (preventDefault) e.preventDefault();
|
|
179
|
-
// A held key's repeats are cancelled like its first press, and call nothing. They
|
|
180
|
-
// returned before the `preventDefault` once, so a held Ctrl+K's repeats reached the
|
|
181
|
-
// browser's own Ctrl+K and took the focus out of the palette ⌘K had just opened
|
|
182
|
-
// (0.52 code review, use-hotkey.ts; the hand-written ⌘K listener cancelled them).
|
|
183
|
-
if (e.repeat) return;
|
|
184
|
-
handlerRef.current(e);
|
|
185
|
-
};
|
|
186
|
-
node.addEventListener(event, listener);
|
|
187
|
-
return () => node.removeEventListener(event, listener);
|
|
188
|
-
}, [key, enabled, preventDefault, allowInInputs, event, targetEl, targetRef]);
|
|
189
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { useTextSize } from "../theme/text-size";
|
|
2
|
-
import { useMediaQuery } from "./use-media-query";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The two questions the kit's 0.32 behaviours ask (docs/text-size-harmonization.md §4,
|
|
6
|
-
* §10.7–10.9), answered in one place so every part draws the line where the others do.
|
|
7
|
-
*
|
|
8
|
-
* Prefer CSS where it can: a class that differs at Large is a `large:` variant
|
|
9
|
-
* (tokens.css), and a layout switch is a breakpoint, which already scales. These hooks
|
|
10
|
-
* are for what CSS cannot decide — whether a tooltip is rendered at all, whether a label
|
|
11
|
-
* becomes text, whether a row's actions collapse into a menu.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/** Large or Extra large is in force (`<html data-text-size>`) — the JS twin of the
|
|
15
|
-
* `large:` variant. */
|
|
16
|
-
export function useLargeText(): boolean {
|
|
17
|
-
return useTextSize().size !== "normal";
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The primary pointer is a finger (`pointer: coarse`): a hover never happens, so a
|
|
22
|
-
* tooltip opens only on the taps that do nothing else. A pointer query, so it stays
|
|
23
|
-
* `useMediaQuery` (§10.4). `false` without `matchMedia` (SSR, jsdom).
|
|
24
|
-
*/
|
|
25
|
-
export function useCoarsePointer(): boolean {
|
|
26
|
-
return useMediaQuery("(pointer: coarse)", false);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Whether a fact may NOT live only in a tooltip here (§4 "No fact only in a tooltip"):
|
|
31
|
-
* at Large and Extra large, where the reader is the one who asked for bigger type, and
|
|
32
|
-
* on a touch screen at every size, where a tooltip cannot be hovered open. Where this
|
|
33
|
-
* is true the kit draws the fact in the layout — a `disabledReason` as a line under its
|
|
34
|
-
* control, a FieldHint as the field's caption, a StatTile hint as text — and keeps the
|
|
35
|
-
* bubble only where there is no room (a top bar, a dense row's inline actions).
|
|
36
|
-
*/
|
|
37
|
-
export function useInlineFacts(): boolean {
|
|
38
|
-
const large = useLargeText();
|
|
39
|
-
const coarse = useCoarsePointer();
|
|
40
|
-
return large || coarse;
|
|
41
|
-
}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef, type PointerEvent as ReactPointerEvent } from "react";
|
|
2
|
-
|
|
3
|
-
// The press-and-hold that puts DataTable's phone cards into selection mode (0.40,
|
|
4
|
-
// keksdose live #421). Taken over from keksdose's register list
|
|
5
|
-
// (frontend/src/shared/hooks/use-long-press.ts, its feedback #153) so the kit's cards
|
|
6
|
-
// and kk's register answer the same gesture the same way: 500 ms, an 8 px dead zone,
|
|
7
|
-
// cancelled by a scroll, the trailing click swallowed. Public since 0.52 (DUP-8, refactor
|
|
8
|
-
// audit 2026-10-30): private, it left keksdose keeping the original beside the copy.
|
|
9
|
-
|
|
10
|
-
const LONG_PRESS_MS = 500;
|
|
11
|
-
/** The same 8 px dead zone `useRowSwipe` locks its axis at: the press is dead by the
|
|
12
|
-
* time the swipe hook takes pointer capture on its (ancestor) layer. */
|
|
13
|
-
const SLOP_PX = 8;
|
|
14
|
-
|
|
15
|
-
const movedBeyondSlop = (from: { x: number; y: number }, x: number, y: number) =>
|
|
16
|
-
Math.hypot(x - from.x, y - from.y) > SLOP_PX;
|
|
17
|
-
|
|
18
|
-
export interface LongPressOptions {
|
|
19
|
-
/** Default `true`. Off, a press does nothing and the context menu is the browser's. */
|
|
20
|
-
enabled?: boolean;
|
|
21
|
-
/** How long a press is held, in ms. Default 500. */
|
|
22
|
-
delay?: number;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface LongPressResult {
|
|
26
|
-
handlers: {
|
|
27
|
-
onPointerDown: (e: ReactPointerEvent) => void;
|
|
28
|
-
onPointerMove: (e: ReactPointerEvent) => void;
|
|
29
|
-
onContextMenu: (e: { preventDefault: () => void }) => void;
|
|
30
|
-
};
|
|
31
|
-
/** True exactly once after a long press fired: call it from an `onClickCapture` to
|
|
32
|
-
* swallow the click the browser still sends when the finger lifts. */
|
|
33
|
-
consumeClick: () => boolean;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* A press-and-hold on a touch row that may ALSO be swipeable.
|
|
38
|
-
*
|
|
39
|
-
* - The cancel listeners live on `window`: `useRowSwipe` captures the pointer on an
|
|
40
|
-
* ancestor once a drag resolves to the x axis, after which the pressed element's
|
|
41
|
-
* own pointer handlers stop firing, and a timer cancelled only there would fire
|
|
42
|
-
* mid-swipe.
|
|
43
|
-
* - A scroll cancels too (`touch-action: pan-y` hands vertical panning to the
|
|
44
|
-
* browser, which sends `pointercancel`; the capture-phase `scroll` is the backstop).
|
|
45
|
-
* - `contextmenu` is suppressed while enabled — Android fires it at ~500 ms. Pair it
|
|
46
|
-
* with `select-none [-webkit-touch-callout:none]` on the element: iOS's callout
|
|
47
|
-
* only yields to that CSS.
|
|
48
|
-
*/
|
|
49
|
-
export function useLongPress(
|
|
50
|
-
onLongPress: () => void,
|
|
51
|
-
{ enabled = true, delay = LONG_PRESS_MS }: LongPressOptions = {},
|
|
52
|
-
): LongPressResult {
|
|
53
|
-
const timer = useRef<number | null>(null);
|
|
54
|
-
const start = useRef({ x: 0, y: 0 });
|
|
55
|
-
const fired = useRef(false);
|
|
56
|
-
const teardown = useRef<(() => void) | null>(null);
|
|
57
|
-
const cbRef = useRef(onLongPress);
|
|
58
|
-
useEffect(() => {
|
|
59
|
-
cbRef.current = onLongPress;
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
const cancel = useCallback(() => {
|
|
63
|
-
if (timer.current !== null) {
|
|
64
|
-
window.clearTimeout(timer.current);
|
|
65
|
-
timer.current = null;
|
|
66
|
-
}
|
|
67
|
-
teardown.current?.();
|
|
68
|
-
teardown.current = null;
|
|
69
|
-
}, []);
|
|
70
|
-
|
|
71
|
-
const onPointerDown = useCallback(
|
|
72
|
-
(e: ReactPointerEvent) => {
|
|
73
|
-
// Cleared above every early return: a press whose trailing click never arrives
|
|
74
|
-
// (the finger lifted over another row) would otherwise leave the latch armed,
|
|
75
|
-
// and it would eat the next real tap once the card has switched modes.
|
|
76
|
-
fired.current = false;
|
|
77
|
-
if (!enabled) return;
|
|
78
|
-
if (e.pointerType === "mouse" && e.button !== 0) return;
|
|
79
|
-
cancel();
|
|
80
|
-
start.current = { x: e.clientX, y: e.clientY };
|
|
81
|
-
|
|
82
|
-
const onEnd = () => cancel();
|
|
83
|
-
const onMove = (ev: PointerEvent) => {
|
|
84
|
-
if (movedBeyondSlop(start.current, ev.clientX, ev.clientY)) cancel();
|
|
85
|
-
};
|
|
86
|
-
window.addEventListener("pointerup", onEnd);
|
|
87
|
-
window.addEventListener("pointercancel", onEnd);
|
|
88
|
-
window.addEventListener("pointermove", onMove);
|
|
89
|
-
window.addEventListener("scroll", onEnd, { capture: true, passive: true });
|
|
90
|
-
teardown.current = () => {
|
|
91
|
-
window.removeEventListener("pointerup", onEnd);
|
|
92
|
-
window.removeEventListener("pointercancel", onEnd);
|
|
93
|
-
window.removeEventListener("pointermove", onMove);
|
|
94
|
-
window.removeEventListener("scroll", onEnd, { capture: true });
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
timer.current = window.setTimeout(() => {
|
|
98
|
-
cancel();
|
|
99
|
-
fired.current = true;
|
|
100
|
-
// The swipe stages' haptic vocabulary; absent on iOS Safari.
|
|
101
|
-
navigator.vibrate?.(20);
|
|
102
|
-
cbRef.current();
|
|
103
|
-
}, delay);
|
|
104
|
-
},
|
|
105
|
-
[cancel, delay, enabled],
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
// Also on the element: it still cancels if an ancestor stops the native event
|
|
109
|
-
// before it reaches `window`.
|
|
110
|
-
const onPointerMove = useCallback(
|
|
111
|
-
(e: ReactPointerEvent) => {
|
|
112
|
-
if (timer.current === null) return;
|
|
113
|
-
if (movedBeyondSlop(start.current, e.clientX, e.clientY)) cancel();
|
|
114
|
-
},
|
|
115
|
-
[cancel],
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
const onContextMenu = useCallback(
|
|
119
|
-
(e: { preventDefault: () => void }) => {
|
|
120
|
-
if (enabled) e.preventDefault();
|
|
121
|
-
},
|
|
122
|
-
[enabled],
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
const consumeClick = useCallback(() => {
|
|
126
|
-
if (!fired.current) return false;
|
|
127
|
-
fired.current = false;
|
|
128
|
-
return true;
|
|
129
|
-
}, []);
|
|
130
|
-
|
|
131
|
-
// Turned off mid-press: the armed timer still fired, entering selection mode against the
|
|
132
|
-
// caller's wish and arming `consumeClick` for the next click (0.52 code review).
|
|
133
|
-
useEffect(() => {
|
|
134
|
-
if (!enabled) cancel();
|
|
135
|
-
}, [enabled, cancel]);
|
|
136
|
-
|
|
137
|
-
useEffect(() => cancel, [cancel]);
|
|
138
|
-
|
|
139
|
-
return { handlers: { onPointerDown, onPointerMove, onContextMenu }, consumeClick };
|
|
140
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { useEffect, useEffectEvent, useState } from "react";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Subscribe to a CSS media query, returning whether it currently matches and
|
|
5
|
-
* re-rendering when it changes. `fallback` is the value used during SSR / when
|
|
6
|
-
* `window.matchMedia` is unavailable.
|
|
7
|
-
*/
|
|
8
|
-
export function useMediaQuery(query: string, fallback: boolean): boolean {
|
|
9
|
-
const get = () =>
|
|
10
|
-
typeof window !== "undefined" && typeof window.matchMedia === "function"
|
|
11
|
-
? window.matchMedia(query).matches
|
|
12
|
-
: fallback;
|
|
13
|
-
// The answer is kept with the query it answers, and a new query is asked during the
|
|
14
|
-
// render that brings it. Read at mount only, the first commit after a new query still
|
|
15
|
-
// answered the OLD one, until the effect corrected it: `useBreakpoint` asks a new query
|
|
16
|
-
// when the text size changes, and at Large in a 700 px window the tour card was drawn
|
|
17
|
-
// un-docked for a frame before it docked (0.52 code review, use-breakpoint.ts).
|
|
18
|
-
const [state, setState] = useState(() => ({ query, matches: get() }));
|
|
19
|
-
let matches = state.matches;
|
|
20
|
-
if (state.query !== query) {
|
|
21
|
-
matches = get();
|
|
22
|
-
setState({ query, matches });
|
|
23
|
-
}
|
|
24
|
-
const answered = useEffectEvent(() => matches);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
27
|
-
const mql = window.matchMedia(query);
|
|
28
|
-
const update = () =>
|
|
29
|
-
setState((prev) =>
|
|
30
|
-
prev.query === query && prev.matches === mql.matches ? prev : { query, matches: mql.matches },
|
|
31
|
-
);
|
|
32
|
-
// A change between the render and this subscription. Only then: an update that
|
|
33
|
-
// changes nothing still costs a render (and a commit) right after a new query.
|
|
34
|
-
if (mql.matches !== answered()) update();
|
|
35
|
-
mql.addEventListener("change", update);
|
|
36
|
-
return () => mql.removeEventListener("change", update);
|
|
37
|
-
}, [query]);
|
|
38
|
-
return matches;
|
|
39
|
-
}
|
package/src/hooks/use-mounted.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef } from "react";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* A mounted guard and a callback-to-promise bridge, for a card that awaits an app's
|
|
5
|
-
* callback and must not set state after the page moved on.
|
|
6
|
-
*
|
|
7
|
-
* Written for the account settings parts (0.34) and then imported by seven notifications
|
|
8
|
-
* modules out of `account/account-parts.ts`: a generic helper living in a feature folder
|
|
9
|
-
* that the folder beside it reached into sideways (refactor audit 2026-10-30, MOD-6).
|
|
10
|
-
* `account-parts.ts` re-exports both, so nothing that imported them there moved, and
|
|
11
|
-
* `admin/admin-parts.ts` re-exports `settle` in place of its own copy (0.52 code review).
|
|
12
|
-
*
|
|
13
|
-
* @internal Not part of the barrel.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/** Whether the component is still mounted — a late answer after the app navigated away
|
|
17
|
-
* (the deletion signs out) must not set state. */
|
|
18
|
-
export function useMounted(): { readonly current: boolean } {
|
|
19
|
-
const mounted = useRef(true);
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
mounted.current = true;
|
|
22
|
-
return () => {
|
|
23
|
-
mounted.current = false;
|
|
24
|
-
};
|
|
25
|
-
}, []);
|
|
26
|
-
return mounted;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Call `call` and hand back a promise, a throw included — a callback may return
|
|
30
|
-
* nothing (done at once), a promise, or throw before it returns one. Typed by what it
|
|
31
|
-
* answers, so the admin parts' copy, which kept the type, could go (0.52 code review,
|
|
32
|
-
* admin/admin-parts.ts). */
|
|
33
|
-
export function settle<R>(call: () => R): Promise<Awaited<R>> {
|
|
34
|
-
try {
|
|
35
|
-
return Promise.resolve(call());
|
|
36
|
-
} catch (error) {
|
|
37
|
-
return Promise.reject(error);
|
|
38
|
-
}
|
|
39
|
-
}
|
package/src/hooks/use-noindex.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { useEffect } from "react";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Marks the current page as not for search engines: a `<meta name="robots"
|
|
5
|
-
* content="noindex">` in the document head while the calling component is mounted.
|
|
6
|
-
*
|
|
7
|
-
* keksdose's hook (shared/hooks/use-noindex.ts, feedback #97 and #129), for every app:
|
|
8
|
-
* the contract puts it on the three legal pages and on every auth page
|
|
9
|
-
* (docs/legal-harmonization.md §3.2). {@link LegalPage} calls it itself.
|
|
10
|
-
*
|
|
11
|
-
* It is the best-effort, client-side half. The authoritative half is the web server's
|
|
12
|
-
* `X-Robots-Tag: noindex` on those routes (keksdose's Caddy `@noindex`), which a crawler
|
|
13
|
-
* reads without running any script; this covers the dev server and any setup without
|
|
14
|
-
* that header.
|
|
15
|
-
*
|
|
16
|
-
* The cleanup is the point of a hook rather than a tag in `index.html`: in a single-page
|
|
17
|
-
* app the head outlives the page, so without it a visitor's navigation from a legal page
|
|
18
|
-
* into the app would carry the marker onto pages that should be indexed. Each call adds
|
|
19
|
-
* its OWN element and removes exactly that one, so two mounted callers (a page and a
|
|
20
|
-
* dialog on it) never take each other's marker away.
|
|
21
|
-
*
|
|
22
|
-
* `active = false` adds nothing — for a page component that is also rendered as a
|
|
23
|
-
* preview inside another page (the showcase), where the host page's indexing is not its
|
|
24
|
-
* business. Hooks cannot be called conditionally, so the switch is an argument.
|
|
25
|
-
*/
|
|
26
|
-
export function useNoIndex(active: boolean = true): void {
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (!active) return;
|
|
29
|
-
const meta = document.createElement("meta");
|
|
30
|
-
meta.name = "robots";
|
|
31
|
-
meta.content = "noindex";
|
|
32
|
-
document.head.appendChild(meta);
|
|
33
|
-
return () => {
|
|
34
|
-
meta.remove();
|
|
35
|
-
};
|
|
36
|
-
}, [active]);
|
|
37
|
-
}
|