@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/lib/person-name.ts
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A person's name as the reader's language writes it — the one rule of
|
|
3
|
-
* docs/auth-harmonization.md §3.2 for every place a name is shown: the top bar, the
|
|
4
|
-
* account menu, user lists, avatars, feedback, the greeting in a mail.
|
|
5
|
-
*
|
|
6
|
-
* WHY A FUNCTION AND NOT `${first} ${last}`. The three apps move from one free-text
|
|
7
|
-
* `display_name` to `first_name` + `last_name` (§2.3), and the moment a name has two
|
|
8
|
-
* parts, their ORDER is a language rule, not a data rule:
|
|
9
|
-
*
|
|
10
|
-
* - "First Last" in de-CH, en, fr, it and es — "Ada Example";
|
|
11
|
-
* - **"Last First" in hu** — Hungarian puts the family name first: "Example Ada";
|
|
12
|
-
* - **"LastFirst" with no space in zh** — a Chinese name is written family name first
|
|
13
|
-
* and run together: 李 + 小龙 → "李小龙". Only a name written in CJK characters,
|
|
14
|
-
* though: BOTH parts must hold Han (or kana, or hangul) characters. A Latin name read
|
|
15
|
-
* in Chinese stays as it is written — "Ada Lovelace", not "LovelaceAda" (the
|
|
16
|
-
* coordinator's refinement of §3.2, 2026-10-06).
|
|
17
|
-
*
|
|
18
|
-
* WHOSE language (§3.2, §10.6): on screen the READER's, so this takes the locale of the
|
|
19
|
-
* UI, never the locale stored with the person. A mail uses the recipient's and a frozen
|
|
20
|
-
* stamp the author's — that is server-kit's `full_name(first, last, locale)`, which
|
|
21
|
-
* follows exactly these rules so a name reads the same in the app and in its mails.
|
|
22
|
-
*
|
|
23
|
-
* NOTHING IS GUESSED. Both parts are trimmed, and an empty part simply drops out: a
|
|
24
|
-
* migrated keksdose or Kurvenschmiede user keeps the whole old display name as the
|
|
25
|
-
* first name and an empty last name until they complete it (§3.3), and "Ada Example"
|
|
26
|
-
* with no last name must still read "Ada Example" — not "Ada Example " and not a split
|
|
27
|
-
* at the space. Inner spaces are the person's own and stay as typed.
|
|
28
|
-
*
|
|
29
|
-
* Only the language subtag counts ("de-CH" → "de", "zh-Hant-TW" → "zh"), and a language
|
|
30
|
-
* this does not know reads "First Last", the order of the kit's five other languages.
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/** The two parts of a person's name. Either may be missing or blank: a migrated row
|
|
34
|
-
* has an empty `last` until it is completed (§3.3), and APIs send `null` for "none". */
|
|
35
|
-
export interface PersonName {
|
|
36
|
-
/** The given name — `first_name`. */
|
|
37
|
-
first?: string | null;
|
|
38
|
-
/** The family name — `last_name`. */
|
|
39
|
-
last?: string | null;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
type NameOrder = "given-first" | "family-first" | "family-first-joined";
|
|
43
|
-
|
|
44
|
-
/** A part written in CJK characters: Han, and kana or hangul where they occur (a
|
|
45
|
-
* Japanese or Korean name in a Chinese UI). One such character is enough. */
|
|
46
|
-
const CJK = /\p{Script=Han}|\p{Script=Hiragana}|\p{Script=Katakana}|\p{Script=Hangul}/u;
|
|
47
|
-
|
|
48
|
-
function language(locale: string | undefined): string {
|
|
49
|
-
return (locale ?? "").split(/[-_]/)[0]!.toLowerCase();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* The order the reader's language writes THIS name in. See the module note: hu puts the
|
|
54
|
-
* family name first for every name; zh runs a CJK name together family-first and leaves
|
|
55
|
-
* any other name as it is written; the rest write the given name first. A part that is
|
|
56
|
-
* empty passes the CJK test, so a one-part name orders by the part it has. Called with
|
|
57
|
-
* at least one part filled in.
|
|
58
|
-
*/
|
|
59
|
-
function nameOrder(locale: string | undefined, first: string, last: string): NameOrder {
|
|
60
|
-
const lang = language(locale);
|
|
61
|
-
if (lang === "hu") return "family-first";
|
|
62
|
-
if (lang === "zh" && (!first || CJK.test(first)) && (!last || CJK.test(last))) {
|
|
63
|
-
return "family-first-joined";
|
|
64
|
-
}
|
|
65
|
-
return "given-first";
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function clean(part: string | null | undefined): string {
|
|
69
|
-
return (part ?? "").trim();
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* The full name in the reader's order: "Ada Example" (en, de, fr, it, es), "Example Ada"
|
|
74
|
-
* (hu), "李小龙" (zh, for a name in CJK characters — "Ada Lovelace" stays so). Trimmed;
|
|
75
|
-
* with one part empty, the other alone; with both empty, `""` — so a caller can fall
|
|
76
|
-
* back with `||` (`formatPersonName(p, l) || email`).
|
|
77
|
-
*
|
|
78
|
-
* `locale` is the READER's — the UI language, `useKitLocale()` in a component. Left out,
|
|
79
|
-
* the given-name-first order.
|
|
80
|
-
*/
|
|
81
|
-
export function formatPersonName(name: PersonName, locale?: string): string {
|
|
82
|
-
const first = clean(name.first);
|
|
83
|
-
const last = clean(name.last);
|
|
84
|
-
if (!last) return first;
|
|
85
|
-
if (!first) return last;
|
|
86
|
-
switch (nameOrder(locale, first, last)) {
|
|
87
|
-
case "family-first":
|
|
88
|
-
return `${last} ${first}`;
|
|
89
|
-
case "family-first-joined":
|
|
90
|
-
return `${last}${first}`;
|
|
91
|
-
default:
|
|
92
|
-
return `${first} ${last}`;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/** One segmenter for every avatar on the page, made on first use. `null`: the runtime
|
|
97
|
-
* has none, and code points have to do. */
|
|
98
|
-
let graphemes: Intl.Segmenter | null | undefined;
|
|
99
|
-
|
|
100
|
-
/** The first user-perceived character — "É" whether it was typed as one code point or
|
|
101
|
-
* as E + a combining accent, a whole emoji rather than half a surrogate pair. */
|
|
102
|
-
function firstGrapheme(text: string): string {
|
|
103
|
-
graphemes ??=
|
|
104
|
-
typeof Intl !== "undefined" && "Segmenter" in Intl
|
|
105
|
-
? new Intl.Segmenter(undefined, { granularity: "grapheme" })
|
|
106
|
-
: null;
|
|
107
|
-
if (graphemes) {
|
|
108
|
-
const segment = graphemes.segment(text)[Symbol.iterator]().next();
|
|
109
|
-
if (!segment.done) return segment.value.segment;
|
|
110
|
-
}
|
|
111
|
-
return [...text][0] ?? "";
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/** Upper case under the reader's rules (Turkish "i" → "İ"), and plain upper case for a
|
|
115
|
-
* locale tag the runtime refuses rather than a thrown RangeError in a render. */
|
|
116
|
-
function upper(text: string, locale: string | undefined): string {
|
|
117
|
-
try {
|
|
118
|
-
return text.toLocaleUpperCase(locale);
|
|
119
|
-
} catch {
|
|
120
|
-
return text.toUpperCase();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* The initials for an avatar, in the same order as {@link formatPersonName}:
|
|
126
|
-
*
|
|
127
|
-
* - "AE" for Ada Example in en, de, fr, it and es;
|
|
128
|
-
* - "EA" in hu, family name first;
|
|
129
|
-
* - **one character in zh for a name in CJK characters, the family name's first** —
|
|
130
|
-
* "李" for 李小龙. Two Chinese characters are not initials, they are most of a name.
|
|
131
|
-
* A Latin name in zh is "AE", as it is written.
|
|
132
|
-
*
|
|
133
|
-
* With only one part (a migrated user's whole old display name in `first`, §3.3), the
|
|
134
|
-
* initials are what {@link avatarInitials} has always made of a display name: the first
|
|
135
|
-
* letters of its first two words ("Ada Example" → "AE"), or the first two letters of a
|
|
136
|
-
* single word ("Ada" → "AD") — so nobody's avatar changes when their account migrates.
|
|
137
|
-
* In zh, a part in CJK characters gives its first character.
|
|
138
|
-
*
|
|
139
|
-
* `""` when both parts are blank; {@link UserAvatar} then falls back to the email.
|
|
140
|
-
*/
|
|
141
|
-
export function personInitials(name: PersonName, locale?: string): string {
|
|
142
|
-
const first = clean(name.first);
|
|
143
|
-
const last = clean(name.last);
|
|
144
|
-
if (!first && !last) return "";
|
|
145
|
-
const order = nameOrder(locale, first, last);
|
|
146
|
-
if (order === "family-first-joined") return upper(firstGrapheme(last || first), locale);
|
|
147
|
-
if (!first || !last) {
|
|
148
|
-
const words = (first || last).split(/\s+/);
|
|
149
|
-
const initials =
|
|
150
|
-
words.length >= 2 ? firstGrapheme(words[0]!) + firstGrapheme(words[1]!) : [...words[0]!].slice(0, 2).join("");
|
|
151
|
-
return upper(initials, locale);
|
|
152
|
-
}
|
|
153
|
-
const pair = order === "family-first" ? [last, first] : [first, last];
|
|
154
|
-
return upper(firstGrapheme(pair[0]!) + firstGrapheme(pair[1]!), locale);
|
|
155
|
-
}
|
package/src/lib/phone.ts
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Phone numbers — E.164 in, grouped out — for kastlan's contacts, without a
|
|
3
|
-
* libphonenumber dependency.
|
|
4
|
-
*
|
|
5
|
-
* kastlan stored whatever was typed ("079 …", "+41 (0)79 …", "0041 79 …") and could
|
|
6
|
-
* neither dial nor de-duplicate it. What it needs is one canonical form to store —
|
|
7
|
-
* E.164, "+41210000001" — and a readable one to show. libphonenumber gets both right
|
|
8
|
-
* for every country, at ~150 kB of metadata in every app's bundle; the kit's apps are
|
|
9
|
-
* Swiss and their neighbours, so this is **light per-country rules** for the six that
|
|
10
|
-
* matter and a generic shape check for the rest:
|
|
11
|
-
*
|
|
12
|
-
* - **CH, LI, DE, AT, FR, IT**: the national trunk prefix is dropped (a leading 0 —
|
|
13
|
-
* but NOT for Italy, whose fixed-line numbers keep their 0 after +39, and not for
|
|
14
|
-
* Liechtenstein, which has none), and the remaining national number has to be a
|
|
15
|
-
* plausible length for the country.
|
|
16
|
-
* - **Anything else** typed with its own "+" (or "00"): the digits, 8 to 15 in all,
|
|
17
|
-
* are taken as an E.164 number as they stand.
|
|
18
|
-
*
|
|
19
|
-
* **The limitation:** a plausible length is not a valid number. There is no check of
|
|
20
|
-
* area codes or number ranges, so a well-formed number that does not exist passes, and
|
|
21
|
-
* a German or Austrian number (whose area codes run from one to five digits) is
|
|
22
|
-
* grouped only where the split is known (mobile prefixes, the largest cities) and
|
|
23
|
-
* otherwise shown in one block. A number these rules cannot read is not an error —
|
|
24
|
-
* {@link parsePhone} returns `null` and the field keeps the text as typed.
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
/** The countries with their own rules. */
|
|
28
|
-
export type PhoneCountryCode = "CH" | "LI" | "DE" | "AT" | "FR" | "IT";
|
|
29
|
-
|
|
30
|
-
/** A country with rules, or `"other"`: a number typed with its own "+". */
|
|
31
|
-
export type PhoneCountry = PhoneCountryCode | "other";
|
|
32
|
-
|
|
33
|
-
interface CountryRule {
|
|
34
|
-
/** The country calling code, without the "+". */
|
|
35
|
-
dial: string;
|
|
36
|
-
/** A national number starts with a trunk 0 that is dropped after the country code. */
|
|
37
|
-
trunk: boolean;
|
|
38
|
-
/** The national significant number itself may start with 0 (Italy's fixed lines). */
|
|
39
|
-
zeroStart?: boolean;
|
|
40
|
-
/** The national significant number's length, inclusive. */
|
|
41
|
-
min: number;
|
|
42
|
-
max: number;
|
|
43
|
-
/** Groups for display, given the national significant number. */
|
|
44
|
-
group: (nsn: string) => string[];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** `nsn` cut into the given sizes; whatever is left is one last group. */
|
|
48
|
-
function cut(nsn: string, sizes: number[]): string[] {
|
|
49
|
-
const out: string[] = [];
|
|
50
|
-
let at = 0;
|
|
51
|
-
for (const size of sizes) {
|
|
52
|
-
if (at >= nsn.length) break;
|
|
53
|
-
out.push(nsn.slice(at, at + size));
|
|
54
|
-
at += size;
|
|
55
|
-
}
|
|
56
|
-
if (at < nsn.length) out.push(nsn.slice(at));
|
|
57
|
-
return out;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const RULES: Record<PhoneCountryCode, CountryRule> = {
|
|
61
|
-
// 9 digits, 2-3-2-2 ("21 000 00 01"); the 08xx/09xx service numbers 3-3-3.
|
|
62
|
-
CH: {
|
|
63
|
-
dial: "41",
|
|
64
|
-
trunk: true,
|
|
65
|
-
min: 9,
|
|
66
|
-
max: 9,
|
|
67
|
-
group: (n) => (/^[89]/.test(n) ? cut(n, [3, 3, 3]) : cut(n, [2, 3, 2, 2])),
|
|
68
|
-
},
|
|
69
|
-
// 7 digits, 3-2-2 ("100 00 01"), and 9 for some mobile ranges (3-3-3). No trunk prefix.
|
|
70
|
-
LI: {
|
|
71
|
-
dial: "423",
|
|
72
|
-
trunk: false,
|
|
73
|
-
min: 7,
|
|
74
|
-
max: 9,
|
|
75
|
-
group: (n) => (n.length === 7 ? cut(n, [3, 2, 2]) : n.length === 9 ? cut(n, [3, 3, 3]) : [n]),
|
|
76
|
-
},
|
|
77
|
-
// Area codes of two to five digits: only the mobile prefixes and the four
|
|
78
|
-
// two-digit cities are split; anything else is one block rather than a wrong split.
|
|
79
|
-
DE: {
|
|
80
|
-
dial: "49",
|
|
81
|
-
trunk: true,
|
|
82
|
-
min: 6,
|
|
83
|
-
max: 13,
|
|
84
|
-
group: (n) =>
|
|
85
|
-
/^15/.test(n) ? cut(n, [4]) : /^1[67]/.test(n) ? cut(n, [3]) : /^(30|40|69|89)/.test(n) ? cut(n, [2]) : [n],
|
|
86
|
-
},
|
|
87
|
-
// Vienna is "1"; mobile numbers start 6xx; other area codes vary, so one block.
|
|
88
|
-
AT: {
|
|
89
|
-
dial: "43",
|
|
90
|
-
trunk: true,
|
|
91
|
-
min: 6,
|
|
92
|
-
max: 13,
|
|
93
|
-
group: (n) => (/^6/.test(n) ? cut(n, [3]) : /^1/.test(n) ? cut(n, [1]) : [n]),
|
|
94
|
-
},
|
|
95
|
-
// 9 digits, 1-2-2-2-2 ("1 99 00 00 01").
|
|
96
|
-
FR: { dial: "33", trunk: true, min: 9, max: 9, group: (n) => cut(n, [1, 2, 2, 2, 2]) },
|
|
97
|
-
// The 0 of a fixed line is part of the number ("+39 06 …"); mobiles start with 3.
|
|
98
|
-
IT: {
|
|
99
|
-
dial: "39",
|
|
100
|
-
trunk: false,
|
|
101
|
-
zeroStart: true,
|
|
102
|
-
min: 6,
|
|
103
|
-
max: 11,
|
|
104
|
-
group: (n) => (/^3/.test(n) ? cut(n, [3, 3]) : /^0[26]/.test(n) ? cut(n, [2, 4]) : [n]),
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
/** The country calling codes with rules, "+" left off: `{ CH: "41", … }`. */
|
|
109
|
-
export const PHONE_DIAL_CODES: Readonly<Record<PhoneCountryCode, string>> = Object.freeze({
|
|
110
|
-
CH: RULES.CH.dial,
|
|
111
|
-
LI: RULES.LI.dial,
|
|
112
|
-
DE: RULES.DE.dial,
|
|
113
|
-
AT: RULES.AT.dial,
|
|
114
|
-
FR: RULES.FR.dial,
|
|
115
|
-
IT: RULES.IT.dial,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
/** The countries with rules, in the order a picker offers them by default. */
|
|
119
|
-
export const PHONE_COUNTRIES: readonly PhoneCountryCode[] = Object.freeze(["CH", "LI", "DE", "AT", "FR", "IT"]);
|
|
120
|
-
|
|
121
|
-
/** Longest dial code first, so "+423" is Liechtenstein before anything shorter. */
|
|
122
|
-
const BY_DIAL = [...PHONE_COUNTRIES].sort((a, b) => RULES[b].dial.length - RULES[a].dial.length);
|
|
123
|
-
|
|
124
|
-
/** What {@link parsePhone} reads out of a number. */
|
|
125
|
-
export interface ParsedPhone {
|
|
126
|
-
/** The number in E.164: "+", the country code, the national number. */
|
|
127
|
-
e164: string;
|
|
128
|
-
/** The country whose rules read it, or `null` for a generic "+…" number. */
|
|
129
|
-
country: PhoneCountryCode | null;
|
|
130
|
-
/** The national significant number — the digits after the country code. For a
|
|
131
|
-
* generic number, every digit after the "+" (the country code is not split off). */
|
|
132
|
-
national: string;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/** A national significant number that passes `rule`, or `null`. */
|
|
136
|
-
function national(digits: string, rule: CountryRule): string | null {
|
|
137
|
-
const nsn = rule.trunk && digits.startsWith("0") ? digits.slice(1) : digits;
|
|
138
|
-
// A national number starts with 0 only where 0 is part of it (Italy's fixed lines).
|
|
139
|
-
if (nsn.startsWith("0") && !rule.zeroStart) return null;
|
|
140
|
-
if (nsn.length < rule.min || nsn.length > rule.max) return null;
|
|
141
|
-
return nsn;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Read a typed number. With a leading "+" or "00" the number carries its own country
|
|
146
|
-
* code — one of the six with rules, or any other (8–15 digits in all, the E.164
|
|
147
|
-
* limit). Without one it is a national number of `country` (default `"CH"`), its
|
|
148
|
-
* trunk 0 optional; with `country="other"` a number without "+" cannot be read.
|
|
149
|
-
*
|
|
150
|
-
* Spaces, hyphens, dots, slashes and parentheses are ignored ("(030) 1234567"), and
|
|
151
|
-
* so is the "(0)" of "+41 (0)21 …". Anything else — a letter, an extension ("ext. 12"), a note —
|
|
152
|
-
* and the result is `null`: the text is not a number these rules can read, and a field
|
|
153
|
-
* keeps it as it is rather than guess.
|
|
154
|
-
*/
|
|
155
|
-
export function parsePhone(input: string, country: PhoneCountry = "CH"): ParsedPhone | null {
|
|
156
|
-
const text = input.trim();
|
|
157
|
-
if (text === "" || !/^\+?[\d\s().\-/]+$/.test(text)) return null;
|
|
158
|
-
let digits = text.replace(/\D/g, "");
|
|
159
|
-
let international = text.startsWith("+");
|
|
160
|
-
if (!international && digits.startsWith("00")) {
|
|
161
|
-
international = true;
|
|
162
|
-
digits = digits.slice(2);
|
|
163
|
-
}
|
|
164
|
-
if (international) {
|
|
165
|
-
// "+41 (0)21 …": the bracketed trunk prefix written for callers inside the country.
|
|
166
|
-
digits = text
|
|
167
|
-
.replace(/\(\s*0\s*\)/g, "")
|
|
168
|
-
.replace(/\D/g, "")
|
|
169
|
-
.replace(/^00/, "");
|
|
170
|
-
if (digits.startsWith("0")) return null;
|
|
171
|
-
const known = BY_DIAL.find((c) => digits.startsWith(RULES[c].dial));
|
|
172
|
-
if (known) {
|
|
173
|
-
const rule = RULES[known];
|
|
174
|
-
const nsn = national(digits.slice(rule.dial.length), rule);
|
|
175
|
-
return nsn === null ? null : { e164: `+${rule.dial}${nsn}`, country: known, national: nsn };
|
|
176
|
-
}
|
|
177
|
-
if (digits.length < 8 || digits.length > 15) return null;
|
|
178
|
-
return { e164: `+${digits}`, country: null, national: digits };
|
|
179
|
-
}
|
|
180
|
-
if (country === "other") return null;
|
|
181
|
-
const rule = RULES[country];
|
|
182
|
-
const nsn = national(digits, rule);
|
|
183
|
-
return nsn === null ? null : { e164: `+${rule.dial}${nsn}`, country, national: nsn };
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/** The national number grouped by its country's rules ("21 000 00 01"). */
|
|
187
|
-
export function formatNationalPhone(nsn: string, country: PhoneCountryCode): string {
|
|
188
|
-
return RULES[country].group(nsn).join(" ");
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* A number for display: an E.164 number (or anything {@link parsePhone} reads with a
|
|
193
|
-
* "+") grouped by its country's rules — "+41 21 000 00 01" — and a generic one as
|
|
194
|
-
* "+" and its digits. Anything it cannot read comes back exactly as it went in, so a
|
|
195
|
-
* list of contacts can format every row without first sorting out the free text.
|
|
196
|
-
*/
|
|
197
|
-
export function formatPhone(value: string): string {
|
|
198
|
-
const parsed = value.trim().startsWith("+") ? parsePhone(value, "other") : null;
|
|
199
|
-
if (!parsed) return value;
|
|
200
|
-
if (!parsed.country) return parsed.e164;
|
|
201
|
-
return `+${RULES[parsed.country].dial} ${formatNationalPhone(parsed.national, parsed.country)}`;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/** Whether `value` is in E.164 shape: "+" and 8–15 digits, nothing else. Shape only —
|
|
205
|
-
* what {@link PhoneInput} emits for every number it could read. */
|
|
206
|
-
export function isE164(value: string): boolean {
|
|
207
|
-
return /^\+[1-9]\d{7,14}$/.test(value);
|
|
208
|
-
}
|
package/src/lib/plain-text.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { isValidElement } from "react";
|
|
2
|
-
import type { ReactNode } from "react";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The text of a label node: a string or number as is, an element by its children,
|
|
6
|
-
* recursively, whitespace collapsed. A `<Tooltip label="…">Spend</Tooltip>` label yields
|
|
7
|
-
* "Spend" — the text the reader sees, not the bubble's. `undefined` when there is no text
|
|
8
|
-
* to find (an icon), so the caller falls back to a name of its own.
|
|
9
|
-
*
|
|
10
|
-
* Package-private — not re-exported from the barrel. StatTile names its sparkline by it;
|
|
11
|
-
* a field names its `help` "?" by it ("About “<label>”", round 0.36).
|
|
12
|
-
*/
|
|
13
|
-
export function plainText(node: ReactNode): string | undefined {
|
|
14
|
-
const walk = (n: ReactNode): string => {
|
|
15
|
-
if (typeof n === "string" || typeof n === "number") return String(n);
|
|
16
|
-
if (Array.isArray(n)) return n.map(walk).join("");
|
|
17
|
-
if (isValidElement<{ children?: ReactNode }>(n)) return walk(n.props.children);
|
|
18
|
-
return "";
|
|
19
|
-
};
|
|
20
|
-
const text = walk(node).replace(/\s+/g, " ").trim();
|
|
21
|
-
return text === "" ? undefined : text;
|
|
22
|
-
}
|
package/src/lib/presence.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Whether a node says anything — the one copy of the rule (DUP-11, refactor audit
|
|
5
|
-
* 2026-10: it was written fourteen times as `hasContent` / `hasMessage` / `hasReason` /
|
|
6
|
-
* `present` / `given`, and FeedbackComposer's own `!= null && !== false` drifted from it
|
|
7
|
-
* and took `""` for a reason).
|
|
8
|
-
*
|
|
9
|
-
* `undefined`, `null`, `false` and `""` are what a caller's `cond && "…"` or
|
|
10
|
-
* `touched && errors.x` evaluates to when there is nothing to say; none of them is
|
|
11
|
-
* content, and pointing a control's `aria-describedby` at one would describe it with an
|
|
12
|
-
* empty node. A numeric `0` is content.
|
|
13
|
-
*
|
|
14
|
-
* Package-private — not re-exported from the barrel.
|
|
15
|
-
*/
|
|
16
|
-
export function hasContent(node: ReactNode): boolean {
|
|
17
|
-
return node !== undefined && node !== null && node !== false && node !== "";
|
|
18
|
-
}
|