@eifi1/ui-kit 0.53.0 → 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -82
- package/dist/account/delete-account-setting.d.ts +3 -2
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/admin/plan-change.js +2 -2
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/user-roster.d.ts +6 -0
- package/dist/admin/user-roster.js +4 -0
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/auth-errors.d.ts +36 -0
- package/dist/auth/auth-errors.js +20 -0
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/billing/billing-labels.d.ts +26 -0
- package/dist/billing/billing-labels.js +9 -0
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/subscription-standing.d.ts +61 -0
- package/dist/billing/subscription-standing.js +51 -0
- package/dist/billing/subscription-standing.js.map +1 -0
- package/dist/billing/usage-meter.d.ts +52 -0
- package/dist/billing/usage-meter.js +52 -0
- package/dist/billing/usage-meter.js.map +1 -0
- package/dist/chart.d.ts +1 -0
- package/dist/chart.js +4 -0
- package/dist/chart.js.map +1 -1
- package/dist/components/alert-banner.js +2 -3
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +2 -1
- package/dist/components/amount-input.js +3 -15
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.js +2 -2
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.js +2 -1
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button.d.ts +35 -1
- package/dist/components/button.js +5 -9
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar-heatmap.js +6 -4
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/camera-button.d.ts +89 -0
- package/dist/components/camera-button.js +122 -0
- package/dist/components/camera-button.js.map +1 -0
- package/dist/components/camera-capture.d.ts +66 -0
- package/dist/components/camera-capture.js +190 -0
- package/dist/components/camera-capture.js.map +1 -0
- package/dist/components/camera-labels.d.ts +20 -0
- package/dist/components/camera-labels.js +15 -0
- package/dist/components/camera-labels.js.map +1 -0
- package/dist/components/chart-edge.d.ts +9 -0
- package/dist/components/chart-edge.js +14 -3
- package/dist/components/chart-edge.js.map +1 -1
- package/dist/components/chart-zoom-core.js +34 -29
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/checkbox-group.js +1 -1
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/combobox-core.js +3 -2
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +2 -2
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/consent-again-notice-labels.d.ts +25 -0
- package/dist/components/consent-again-notice-labels.js +15 -0
- package/dist/components/consent-again-notice-labels.js.map +1 -0
- package/dist/components/consent-again-notice.d.ts +85 -0
- package/dist/components/consent-again-notice.js +94 -0
- package/dist/components/consent-again-notice.js.map +1 -0
- package/dist/components/country-select.js +2 -7
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.d.ts +2 -1
- package/dist/components/currency-option-list.js +10 -3
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.d.ts +3 -1
- package/dist/components/currency-select.js +2 -2
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +22 -1
- package/dist/components/danger-confirm.js +52 -30
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-column-settings.js +2 -2
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filter-popover.d.ts +2 -1
- package/dist/components/data-table-filter-popover.js +3 -2
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +33 -3
- package/dist/components/data-table-filters.js +6 -4
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-virtual.js +13 -3
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/date-field.js +2 -2
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.js +2 -2
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js +2 -6
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/dialog-frame.d.ts +5 -1
- package/dist/components/dialog-frame.js +6 -2
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/dropdown.js +7 -3
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/entity-combobox.js +2 -2
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/field-parts.d.ts +108 -6
- package/dist/components/field-parts.js +59 -6
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-suggestion-labels.d.ts +2 -0
- package/dist/components/field-suggestion-labels.js +10 -0
- package/dist/components/field-suggestion-labels.js.map +1 -0
- package/dist/components/field.js +1 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-button.d.ts +1 -1
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/floating-panel.d.ts +7 -6
- package/dist/components/floating-panel.js +3 -17
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/form-actions.d.ts +3 -2
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/hover-menu.js +3 -2
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-button.d.ts +23 -5
- package/dist/components/icon-button.js +6 -8
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/inline-confirm.js +2 -1
- package/dist/components/inline-confirm.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +2 -2
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +2 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +3 -3
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal.d.ts +13 -1
- package/dist/components/legal.js +12 -0
- package/dist/components/legal.js.map +1 -1
- package/dist/components/legended-series-chart.d.ts +80 -0
- package/dist/components/legended-series-chart.js +70 -0
- package/dist/components/legended-series-chart.js.map +1 -0
- package/dist/components/lightbox.js +2 -1
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/mini-calendar.js +16 -7
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +48 -0
- package/dist/components/modal.js +26 -6
- package/dist/components/modal.js.map +1 -1
- package/dist/components/month-picker.d.ts +1 -1
- package/dist/components/month-picker.js +6 -6
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +2 -2
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.js +2 -6
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/number-input.js +2 -2
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/page-header-layout.d.ts +18 -0
- package/dist/components/page-header-layout.js +23 -0
- package/dist/components/page-header-layout.js.map +1 -0
- package/dist/components/page-header-skeleton.d.ts +41 -0
- package/dist/components/page-header-skeleton.js +52 -0
- package/dist/components/page-header-skeleton.js.map +1 -0
- package/dist/components/page-header.js +4 -17
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/popover.js +7 -2
- package/dist/components/popover.js.map +1 -1
- package/dist/components/release-notes-labels.d.ts +16 -0
- package/dist/components/release-notes-labels.js +18 -0
- package/dist/components/release-notes-labels.js.map +1 -0
- package/dist/components/release-notes.d.ts +65 -0
- package/dist/components/release-notes.js +65 -0
- package/dist/components/release-notes.js.map +1 -0
- package/dist/components/select.js +2 -2
- package/dist/components/select.js.map +1 -1
- package/dist/components/series-chart-labels.d.ts +9 -0
- package/dist/components/series-chart-labels.js +3 -1
- package/dist/components/series-chart-labels.js.map +1 -1
- package/dist/components/series-chart.d.ts +5 -0
- package/dist/components/series-chart.js +89 -36
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/stat-tile.d.ts +21 -2
- package/dist/components/stat-tile.js +4 -2
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/toggle-group.js +3 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/treemap-layout.js.map +1 -1
- package/dist/components/treemap.d.ts +17 -15
- package/dist/components/treemap.js +167 -85
- package/dist/components/treemap.js.map +1 -1
- package/dist/currencies.d.ts +16 -2
- package/dist/currencies.js +2 -1
- package/dist/currencies.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/eslint/role-utilities.d.ts +2 -2
- package/dist/eslint/role-utilities.js.map +1 -1
- package/dist/feedback/feedback-context-labels.js +2 -1
- package/dist/feedback/feedback-context-labels.js.map +1 -1
- package/dist/feedback/feedback-context.d.ts +19 -3
- package/dist/feedback/feedback-context.js +12 -1
- package/dist/feedback/feedback-context.js.map +1 -1
- package/dist/feedback/feedback-diagnostics.d.ts +17 -0
- package/dist/feedback/feedback-diagnostics.js +27 -0
- package/dist/feedback/feedback-diagnostics.js.map +1 -0
- package/dist/feedback/feedback-dialog.d.ts +10 -0
- package/dist/feedback/feedback-dialog.js +6 -4
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox-page.d.ts +260 -0
- package/dist/feedback/feedback-inbox-page.js +207 -0
- package/dist/feedback/feedback-inbox-page.js.map +1 -0
- package/dist/feedback/feedback-record.d.ts +5 -0
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.js +1 -0
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +3 -0
- package/dist/feedback/feedback-row-detail.js +3 -0
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
- package/dist/feedback/feedback-submit-dialog.js +15 -3
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-submit.d.ts +30 -2
- package/dist/feedback/feedback-submit.js +5 -2
- package/dist/feedback/feedback-submit.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.js +2 -2
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/feedback.d.ts +1 -0
- package/dist/feedback.js +6 -0
- package/dist/feedback.js.map +1 -1
- package/dist/hooks/use-debounce.d.ts +32 -5
- package/dist/hooks/use-debounce.js +6 -5
- package/dist/hooks/use-debounce.js.map +1 -1
- package/dist/hooks/use-file-picker.d.ts +3 -1
- package/dist/hooks/use-file-picker.js.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts +19 -3
- package/dist/hooks/use-focus-trap.js +15 -5
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-has-camera.d.ts +36 -0
- package/dist/hooks/use-has-camera.js +53 -0
- package/dist/hooks/use-has-camera.js.map +1 -0
- package/dist/hooks/use-hotkey.js +2 -1
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-overlay-history.d.ts +6 -1
- package/dist/hooks/use-overlay-history.js +10 -2
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/defaults.js +11 -1
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +78 -4
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +20 -0
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +95 -5
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +74 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +75 -3
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +77 -4
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +77 -4
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +74 -4
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +22 -1
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +27 -8
- package/dist/index.js +41 -2
- package/dist/index.js.map +1 -1
- package/dist/landing/landing-labels.d.ts +8 -0
- package/dist/landing/landing-labels.js +2 -1
- package/dist/landing/landing-labels.js.map +1 -1
- package/dist/lib/changelog.d.ts +130 -0
- package/dist/lib/changelog.js +137 -0
- package/dist/lib/changelog.js.map +1 -0
- package/dist/lib/clipboard-minus.js +2 -2
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/dates.d.ts +36 -4
- package/dist/lib/dates.js +49 -13
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/editable-content.d.ts +33 -0
- package/dist/lib/editable-content.js +15 -0
- package/dist/lib/editable-content.js.map +1 -0
- package/dist/lib/focus-left.d.ts +47 -1
- package/dist/lib/focus-left.js +11 -2
- package/dist/lib/focus-left.js.map +1 -1
- package/dist/lib/format.d.ts +37 -2
- package/dist/lib/format.js +25 -1
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/intl-cache.d.ts +4 -2
- package/dist/lib/intl-cache.js.map +1 -1
- package/dist/lib/server-wake.d.ts +49 -9
- package/dist/lib/server-wake.js +25 -14
- package/dist/lib/server-wake.js.map +1 -1
- package/dist/lib/session-refresh.d.ts +53 -0
- package/dist/lib/session-refresh.js +27 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/translation-review.d.ts +26 -0
- package/dist/lib/translation-review.js +14 -0
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/rhf/fields.js +3 -3
- package/dist/rhf/fields.js.map +1 -1
- package/dist/shell/app-shell.d.ts +25 -1
- package/dist/shell/app-shell.js +3 -1
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +3 -0
- package/dist/shell/dev-menu.js +4 -2
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/held-changes-banner-labels.d.ts +23 -0
- package/dist/shell/held-changes-banner-labels.js +14 -0
- package/dist/shell/held-changes-banner-labels.js.map +1 -0
- package/dist/shell/held-changes-banner.d.ts +75 -0
- package/dist/shell/held-changes-banner.js +106 -0
- package/dist/shell/held-changes-banner.js.map +1 -0
- package/dist/shell/sync-status-indicator.d.ts +27 -12
- package/dist/shell/sync-status-indicator.js +13 -4
- package/dist/shell/sync-status-indicator.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.d.ts +5 -0
- package/dist/shell/top-bar-parts-labels.js +3 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell.d.ts +2 -0
- package/dist/shell.js +3 -0
- package/dist/shell.js.map +1 -1
- package/dist/sync/engine.d.ts +11 -2
- package/dist/sync/engine.js +13 -5
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/hooks.d.ts +3 -2
- package/dist/sync/hooks.js +4 -2
- package/dist/sync/hooks.js.map +1 -1
- package/dist/testing/css-variables.generated.d.ts +2 -2
- package/dist/testing/css-variables.generated.js +1 -1
- package/dist/testing/css-variables.generated.js.map +1 -1
- package/dist/theme/chart-palette.d.ts +18 -0
- package/dist/theme/chart-palette.js +17 -1
- package/dist/theme/chart-palette.js.map +1 -1
- package/dist/theme/contrast-tokens.d.ts +3 -3
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/contrast.d.ts +4 -4
- package/dist/theme/contrast.js.map +1 -1
- package/dist/tour/tour-overlay.js +2 -1
- package/dist/tour/tour-overlay.js.map +1 -1
- package/package.json +5 -9
- package/tokens.css +19 -54
- package/src/account/account-parts.ts +0 -47
- package/src/account/account-settings-labels.ts +0 -240
- package/src/account/account-settings.tsx +0 -698
- package/src/account/data-export-setting-labels.ts +0 -20
- package/src/account/data-export-setting.tsx +0 -200
- package/src/account/delete-account-setting-labels.ts +0 -33
- package/src/account/delete-account-setting.tsx +0 -341
- package/src/account/email-change-setting-labels.ts +0 -31
- package/src/account/email-change-setting.tsx +0 -443
- package/src/account/passkeys-setting.tsx +0 -445
- package/src/account/sessions-setting-labels.ts +0 -24
- package/src/account/sessions-setting.tsx +0 -283
- package/src/admin/admin-action-confirm-labels.ts +0 -19
- package/src/admin/admin-action-confirm.tsx +0 -509
- package/src/admin/admin-action-log-labels.ts +0 -83
- package/src/admin/admin-action-log.tsx +0 -464
- package/src/admin/admin-area-labels.ts +0 -114
- package/src/admin/admin-forbidden.tsx +0 -75
- package/src/admin/admin-overview.tsx +0 -258
- package/src/admin/admin-parts.ts +0 -68
- package/src/admin/admin-sections.tsx +0 -208
- package/src/admin/admin-tool-links.tsx +0 -90
- package/src/admin/invitations-panel-labels.ts +0 -31
- package/src/admin/invitations-panel.tsx +0 -516
- package/src/admin/mail-test-card-labels.ts +0 -19
- package/src/admin/mail-test-card.tsx +0 -189
- package/src/admin/plan-change-labels.ts +0 -5
- package/src/admin/plan-change.tsx +0 -474
- package/src/admin/reviewer-scope-editor-labels.ts +0 -16
- package/src/admin/reviewer-scope-editor.tsx +0 -224
- package/src/admin/role-select-labels.ts +0 -16
- package/src/admin/role-select.tsx +0 -282
- package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
- package/src/admin/transfer-ownership-dialog.tsx +0 -162
- package/src/admin/user-roster-labels.ts +0 -17
- package/src/admin/user-roster.tsx +0 -559
- package/src/auth/accept-invitation-labels.ts +0 -21
- package/src/auth/accept-invitation.tsx +0 -210
- package/src/auth/auth-errors-labels.ts +0 -23
- package/src/auth/auth-errors.ts +0 -370
- package/src/auth/complete-name-dialog-labels.ts +0 -16
- package/src/auth/complete-name-dialog.tsx +0 -253
- package/src/auth/email-tag.ts +0 -75
- package/src/auth/forgot-password-form-labels.ts +0 -20
- package/src/auth/forgot-password-form.tsx +0 -221
- package/src/auth/form-rules.ts +0 -40
- package/src/auth/new-password-fields.tsx +0 -85
- package/src/auth/not-found-page-labels.ts +0 -12
- package/src/auth/not-found-page.tsx +0 -95
- package/src/auth/register-form-labels.ts +0 -31
- package/src/auth/register-form.tsx +0 -456
- package/src/auth/reset-password-form-labels.ts +0 -27
- package/src/auth/reset-password-form.tsx +0 -341
- package/src/auth/sign-in-form-labels.ts +0 -44
- package/src/auth/sign-in-form.tsx +0 -858
- package/src/auth/status-parts.tsx +0 -132
- package/src/auth/verify-email-labels.ts +0 -26
- package/src/auth/verify-email.tsx +0 -445
- package/src/billing/billing-banner.tsx +0 -258
- package/src/billing/billing-labels.ts +0 -381
- package/src/billing/billing-lock.ts +0 -108
- package/src/billing/billing-overview.ts +0 -157
- package/src/billing/billing-standing.ts +0 -80
- package/src/billing/cancel-request.ts +0 -97
- package/src/billing/cancel-subscription.tsx +0 -98
- package/src/billing/checkout-processing.ts +0 -394
- package/src/billing/checkout-return.ts +0 -90
- package/src/billing/pay-page.ts +0 -330
- package/src/billing/plan-card.tsx +0 -562
- package/src/billing/plan-change-labels.ts +0 -66
- package/src/billing/plan-limit-notice.tsx +0 -148
- package/src/billing/plan-limit-toast.tsx +0 -90
- package/src/billing/plan-limit.ts +0 -52
- package/src/billing/plan-price.ts +0 -98
- package/src/billing/plan-switch.tsx +0 -216
- package/src/billing/provider-page.ts +0 -84
- package/src/billing/subscription-actions.tsx +0 -247
- package/src/billing/subscription-status-chip.tsx +0 -95
- package/src/chart.ts +0 -103
- package/src/components/account-chips-labels.ts +0 -16
- package/src/components/account-chips.tsx +0 -474
- package/src/components/alert-banner.tsx +0 -670
- package/src/components/amount-input.tsx +0 -815
- package/src/components/appearance-labels.ts +0 -63
- package/src/components/authed-image-labels.ts +0 -11
- package/src/components/authed-image.tsx +0 -209
- package/src/components/autocomplete.tsx +0 -645
- package/src/components/breadcrumbs-labels.ts +0 -10
- package/src/components/breadcrumbs.tsx +0 -205
- package/src/components/bulk-action-bar-labels.ts +0 -11
- package/src/components/bulk-action-bar.tsx +0 -443
- package/src/components/button-group.tsx +0 -223
- package/src/components/button-look.ts +0 -256
- package/src/components/button.tsx +0 -339
- package/src/components/calculator.tsx +0 -341
- package/src/components/calendar-heatmap-labels.ts +0 -15
- package/src/components/calendar-heatmap.tsx +0 -594
- package/src/components/card.tsx +0 -377
- package/src/components/chart-edge.ts +0 -106
- package/src/components/chart-figure.tsx +0 -35
- package/src/components/chart-height.ts +0 -30
- package/src/components/chart-zoom-core.tsx +0 -627
- package/src/components/chart-zoom.tsx +0 -22
- package/src/components/chart.tsx +0 -554
- package/src/components/checkbox-group.tsx +0 -247
- package/src/components/checkbox.tsx +0 -346
- package/src/components/chip-input.tsx +0 -370
- package/src/components/chip-labels.ts +0 -13
- package/src/components/chip.tsx +0 -843
- package/src/components/choice-card.tsx +0 -544
- package/src/components/column-mapper-labels.ts +0 -38
- package/src/components/column-mapper.tsx +0 -655
- package/src/components/combobox-core.tsx +0 -1321
- package/src/components/combobox-suggestions.tsx +0 -131
- package/src/components/combobox.tsx +0 -716
- package/src/components/confirm-context.ts +0 -7
- package/src/components/confirm-dialog-labels.ts +0 -13
- package/src/components/confirm-dialog.tsx +0 -341
- package/src/components/copy-button-labels.ts +0 -13
- package/src/components/copy-button.tsx +0 -192
- package/src/components/country-select-labels.ts +0 -11
- package/src/components/country-select.tsx +0 -539
- package/src/components/currency-option-list.tsx +0 -180
- package/src/components/currency-select.tsx +0 -341
- package/src/components/danger-confirm-labels.ts +0 -20
- package/src/components/danger-confirm.tsx +0 -934
- package/src/components/data-table-cells.tsx +0 -118
- package/src/components/data-table-column-settings.tsx +0 -198
- package/src/components/data-table-filter-popover.tsx +0 -281
- package/src/components/data-table-filters.ts +0 -287
- package/src/components/data-table-fit.ts +0 -301
- package/src/components/data-table-groups.tsx +0 -288
- package/src/components/data-table-head.tsx +0 -280
- package/src/components/data-table-labels.ts +0 -198
- package/src/components/data-table-leading-row.tsx +0 -58
- package/src/components/data-table-mobile.tsx +0 -1117
- package/src/components/data-table-pagination.tsx +0 -202
- package/src/components/data-table-resize.ts +0 -188
- package/src/components/data-table-row-actions.tsx +0 -302
- package/src/components/data-table-row.tsx +0 -496
- package/src/components/data-table-selection.ts +0 -71
- package/src/components/data-table-shared.tsx +0 -287
- package/src/components/data-table-sort.ts +0 -163
- package/src/components/data-table-virtual.ts +0 -576
- package/src/components/data-table.tsx +0 -2598
- package/src/components/date-field.tsx +0 -684
- package/src/components/date-format-setting.tsx +0 -64
- package/src/components/date-picker.tsx +0 -404
- package/src/components/date-range-picker.tsx +0 -518
- package/src/components/description-list-labels.ts +0 -9
- package/src/components/description-list.tsx +0 -386
- package/src/components/dialog-frame-labels.ts +0 -7
- package/src/components/dialog-frame.tsx +0 -276
- package/src/components/disclosure.tsx +0 -476
- package/src/components/dropdown.tsx +0 -461
- package/src/components/empty-state.tsx +0 -136
- package/src/components/entity-combobox.tsx +0 -422
- package/src/components/error-boundary-labels.ts +0 -20
- package/src/components/error-boundary.tsx +0 -675
- package/src/components/facing-pair.ts +0 -93
- package/src/components/field-base-labels.ts +0 -20
- package/src/components/field-base.tsx +0 -656
- package/src/components/field-parts.tsx +0 -825
- package/src/components/field-strip.tsx +0 -129
- package/src/components/field.tsx +0 -206
- package/src/components/file-button.tsx +0 -295
- package/src/components/file-dropzone.tsx +0 -559
- package/src/components/floating-panel-labels.ts +0 -10
- package/src/components/floating-panel.tsx +0 -828
- package/src/components/focus-ring.ts +0 -16
- package/src/components/form-actions-labels.ts +0 -11
- package/src/components/form-actions.tsx +0 -578
- package/src/components/full-bleed-dialog.tsx +0 -294
- package/src/components/grouped-picker.tsx +0 -184
- package/src/components/help-popover.tsx +0 -117
- package/src/components/hover-menu.tsx +0 -343
- package/src/components/iban-input-labels.ts +0 -14
- package/src/components/iban-input.tsx +0 -236
- package/src/components/icon-button.tsx +0 -959
- package/src/components/icon-picker-labels.ts +0 -13
- package/src/components/icon-picker.tsx +0 -232
- package/src/components/image-grid-labels.ts +0 -11
- package/src/components/image-grid.tsx +0 -202
- package/src/components/inline-confirm.tsx +0 -116
- package/src/components/inline-edit-field-labels.ts +0 -11
- package/src/components/inline-edit-field.tsx +0 -552
- package/src/components/inline-entity-combobox.tsx +0 -849
- package/src/components/input.tsx +0 -394
- package/src/components/jump-calendar.tsx +0 -265
- package/src/components/language-select.tsx +0 -93
- package/src/components/legal-labels.ts +0 -105
- package/src/components/legal-page.tsx +0 -711
- package/src/components/legal.tsx +0 -668
- package/src/components/lightbox-labels.ts +0 -18
- package/src/components/lightbox.tsx +0 -399
- package/src/components/line-items-labels.ts +0 -14
- package/src/components/line-items.tsx +0 -602
- package/src/components/list-labels.ts +0 -12
- package/src/components/list.tsx +0 -870
- package/src/components/loading-state.tsx +0 -78
- package/src/components/measured-grid-labels.ts +0 -25
- package/src/components/measured-grid.tsx +0 -837
- package/src/components/menu-item.tsx +0 -241
- package/src/components/mini-calendar-labels.ts +0 -17
- package/src/components/mini-calendar.tsx +0 -789
- package/src/components/modal.tsx +0 -505
- package/src/components/money-draft.ts +0 -83
- package/src/components/money-field.tsx +0 -76
- package/src/components/month-grid.tsx +0 -229
- package/src/components/month-picker-labels.ts +0 -22
- package/src/components/month-picker.tsx +0 -1087
- package/src/components/multi-entity-combobox.tsx +0 -369
- package/src/components/multi-select.tsx +0 -376
- package/src/components/nav-pills.tsx +0 -198
- package/src/components/number-field.tsx +0 -327
- package/src/components/number-input.tsx +0 -558
- package/src/components/numeric-field.ts +0 -169
- package/src/components/numpad-sheet.tsx +0 -285
- package/src/components/one-time-code-input.tsx +0 -270
- package/src/components/page-contents-labels.ts +0 -9
- package/src/components/page-contents.tsx +0 -282
- package/src/components/page-header-context.ts +0 -8
- package/src/components/page-header.tsx +0 -298
- package/src/components/password-strength-labels.ts +0 -22
- package/src/components/password-strength.tsx +0 -241
- package/src/components/phone-input-labels.ts +0 -10
- package/src/components/phone-input.tsx +0 -282
- package/src/components/picker-sheet.tsx +0 -330
- package/src/components/pie-chart-labels.ts +0 -40
- package/src/components/pie-chart.tsx +0 -480
- package/src/components/popover-labels.ts +0 -14
- package/src/components/popover.tsx +0 -268
- package/src/components/progress-bar-labels.ts +0 -10
- package/src/components/progress-bar.tsx +0 -479
- package/src/components/qr-code.tsx +0 -76
- package/src/components/reauth-dialog-labels.ts +0 -13
- package/src/components/reauth-dialog.tsx +0 -265
- package/src/components/row-actions-labels.ts +0 -12
- package/src/components/row-actions.tsx +0 -795
- package/src/components/scroll-area.tsx +0 -123
- package/src/components/search-field.tsx +0 -192
- package/src/components/select.tsx +0 -294
- package/src/components/separator.tsx +0 -33
- package/src/components/series-chart-axes.ts +0 -342
- package/src/components/series-chart-budget.ts +0 -150
- package/src/components/series-chart-labels.ts +0 -33
- package/src/components/series-chart-thin.ts +0 -180
- package/src/components/series-chart-ticks.ts +0 -194
- package/src/components/series-chart.tsx +0 -1906
- package/src/components/server-wake-labels.ts +0 -11
- package/src/components/server-wake.tsx +0 -129
- package/src/components/settings-fields.tsx +0 -237
- package/src/components/share-card-labels.ts +0 -30
- package/src/components/share-card.tsx +0 -675
- package/src/components/signature-pad-labels.ts +0 -24
- package/src/components/signature-pad.tsx +0 -747
- package/src/components/signed-amount-labels.ts +0 -10
- package/src/components/signed-amount.tsx +0 -336
- package/src/components/skeleton.tsx +0 -80
- package/src/components/slider.tsx +0 -338
- package/src/components/sparkline-labels.ts +0 -14
- package/src/components/sparkline.tsx +0 -322
- package/src/components/spinner.tsx +0 -81
- package/src/components/stat-tile-labels.ts +0 -15
- package/src/components/stat-tile.tsx +0 -725
- package/src/components/status-dot.tsx +0 -170
- package/src/components/swatch-picker-labels.ts +0 -10
- package/src/components/swatch-picker.tsx +0 -283
- package/src/components/swipeable-row.tsx +0 -386
- package/src/components/switch.tsx +0 -273
- package/src/components/table-skeleton.tsx +0 -136
- package/src/components/table.tsx +0 -647
- package/src/components/tabs-labels.ts +0 -13
- package/src/components/tabs.tsx +0 -693
- package/src/components/text-link.tsx +0 -359
- package/src/components/text.tsx +0 -150
- package/src/components/textarea.tsx +0 -330
- package/src/components/tile-radio.tsx +0 -332
- package/src/components/time-input.tsx +0 -121
- package/src/components/toast-labels.ts +0 -12
- package/src/components/toast.tsx +0 -519
- package/src/components/toggle-group.tsx +0 -752
- package/src/components/toggle-legend.tsx +0 -394
- package/src/components/tooltip.tsx +0 -1149
- package/src/components/translation-review-editor.tsx +0 -290
- package/src/components/translation-review-labels.ts +0 -181
- package/src/components/translation-review-parts.tsx +0 -272
- package/src/components/translation-review.tsx +0 -1240
- package/src/components/tree-view.tsx +0 -589
- package/src/components/treemap-labels.ts +0 -47
- package/src/components/treemap-layout.ts +0 -210
- package/src/components/treemap.tsx +0 -1184
- package/src/components/trigger-aria.ts +0 -44
- package/src/components/use-anchor-dir.ts +0 -20
- package/src/components/use-mobile-reveal.ts +0 -62
- package/src/components/use-table-state.ts +0 -753
- package/src/components/user-avatar.tsx +0 -116
- package/src/components/wizard-stepper.tsx +0 -42
- package/src/components/write-lock-labels.ts +0 -10
- package/src/components/write-lock.tsx +0 -253
- package/src/currencies.ts +0 -70
- package/src/data-table.ts +0 -42
- package/src/demo/demo-banner.tsx +0 -153
- package/src/demo/demo-countdown.ts +0 -136
- package/src/demo/demo-ended.tsx +0 -90
- package/src/demo/demo-labels.ts +0 -78
- package/src/demo/demo-session.ts +0 -32
- package/src/demo/demo-start.tsx +0 -156
- package/src/eslint/index.ts +0 -161
- package/src/eslint/role-utilities.generated.ts +0 -146
- package/src/eslint/role-utilities.ts +0 -233
- package/src/feedback/feedback-attachment-download.tsx +0 -77
- package/src/feedback/feedback-attachment-labels.ts +0 -37
- package/src/feedback/feedback-attachment.tsx +0 -1239
- package/src/feedback/feedback-capture.ts +0 -287
- package/src/feedback/feedback-comment-thread.tsx +0 -353
- package/src/feedback/feedback-context-labels.ts +0 -10
- package/src/feedback/feedback-context.tsx +0 -213
- package/src/feedback/feedback-crash.ts +0 -547
- package/src/feedback/feedback-dialog-labels.ts +0 -29
- package/src/feedback/feedback-dialog.tsx +0 -440
- package/src/feedback/feedback-entry-file.tsx +0 -150
- package/src/feedback/feedback-inbox.tsx +0 -552
- package/src/feedback/feedback-labels.ts +0 -144
- package/src/feedback/feedback-menu-labels.ts +0 -12
- package/src/feedback/feedback-menu.tsx +0 -177
- package/src/feedback/feedback-mutation.ts +0 -20
- package/src/feedback/feedback-page-link.ts +0 -90
- package/src/feedback/feedback-public-labels.ts +0 -81
- package/src/feedback/feedback-public-list.tsx +0 -524
- package/src/feedback/feedback-public-switch.tsx +0 -102
- package/src/feedback/feedback-public-types.ts +0 -101
- package/src/feedback/feedback-record.ts +0 -423
- package/src/feedback/feedback-replies-context.ts +0 -9
- package/src/feedback/feedback-replies.tsx +0 -343
- package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
- package/src/feedback/feedback-row-detail-labels.ts +0 -30
- package/src/feedback/feedback-row-detail.tsx +0 -858
- package/src/feedback/feedback-status-undo.ts +0 -109
- package/src/feedback/feedback-submit-dialog.tsx +0 -118
- package/src/feedback/feedback-submit.tsx +0 -237
- package/src/feedback/feedback-swipe.tsx +0 -192
- package/src/feedback/feedback-table-labels.ts +0 -27
- package/src/feedback/feedback-table.tsx +0 -912
- package/src/feedback/feedback-thread-labels.ts +0 -22
- package/src/feedback/feedback-thread-parts-labels.ts +0 -41
- package/src/feedback/feedback-thread.tsx +0 -905
- package/src/feedback/feedback-vocabulary.ts +0 -263
- package/src/feedback/feedback-vote-button.tsx +0 -124
- package/src/feedback.ts +0 -116
- package/src/hooks/use-anchored-panel.ts +0 -396
- package/src/hooks/use-anchored-rect.ts +0 -77
- package/src/hooks/use-announce.ts +0 -85
- package/src/hooks/use-authed-src.ts +0 -167
- package/src/hooks/use-body-scroll-lock.ts +0 -119
- package/src/hooks/use-breakpoint.ts +0 -133
- package/src/hooks/use-close-transition.ts +0 -107
- package/src/hooks/use-copy-to-clipboard.ts +0 -122
- package/src/hooks/use-debounce.ts +0 -114
- package/src/hooks/use-dismiss.ts +0 -371
- package/src/hooks/use-document-title.ts +0 -33
- package/src/hooks/use-file-drop.ts +0 -121
- package/src/hooks/use-file-picker-labels.ts +0 -28
- package/src/hooks/use-file-picker.tsx +0 -359
- package/src/hooks/use-focus-trap.ts +0 -199
- package/src/hooks/use-hotkey.ts +0 -189
- package/src/hooks/use-large-text.ts +0 -41
- package/src/hooks/use-long-press.ts +0 -140
- package/src/hooks/use-media-query.ts +0 -39
- package/src/hooks/use-mounted.ts +0 -39
- package/src/hooks/use-noindex.ts +0 -37
- package/src/hooks/use-overlay-history.ts +0 -714
- package/src/hooks/use-row-swipe.ts +0 -207
- package/src/hooks/use-search-param-state.ts +0 -434
- package/src/hooks/use-windowed-rows.ts +0 -225
- package/src/i18n/defaults.ts +0 -267
- package/src/i18n/german.ts +0 -2057
- package/src/i18n/kit-labels.tsx +0 -1003
- package/src/i18n/languages.ts +0 -349
- package/src/i18n/locales/de-CH.ts +0 -24
- package/src/i18n/locales/en.ts +0 -267
- package/src/i18n/locales/es.ts +0 -1997
- package/src/i18n/locales/fr.ts +0 -2035
- package/src/i18n/locales/hu.ts +0 -2002
- package/src/i18n/locales/it.ts +0 -2012
- package/src/i18n/locales/zh.ts +0 -1910
- package/src/i18n/plurals.ts +0 -86
- package/src/i18n/review.ts +0 -475
- package/src/i18n/shared-labels.ts +0 -138
- package/src/i18n/swiss.ts +0 -29
- package/src/index.ts +0 -1179
- package/src/landing/access.ts +0 -93
- package/src/landing/landing-actions.tsx +0 -97
- package/src/landing/landing-labels.ts +0 -59
- package/src/landing/landing-sections.tsx +0 -341
- package/src/landing/page-seo.ts +0 -261
- package/src/landing/public-header.tsx +0 -121
- package/src/landing/public-page.tsx +0 -106
- package/src/landing/routing.tsx +0 -225
- package/src/lib/broadcast.ts +0 -52
- package/src/lib/calc.ts +0 -323
- package/src/lib/chip-edge-snap.ts +0 -212
- package/src/lib/clipboard-minus.ts +0 -107
- package/src/lib/clipping.ts +0 -34
- package/src/lib/cn.ts +0 -28
- package/src/lib/column-mapping.ts +0 -234
- package/src/lib/countries.ts +0 -91
- package/src/lib/data-attributes.ts +0 -14
- package/src/lib/date-format.ts +0 -227
- package/src/lib/dates.ts +0 -266
- package/src/lib/day-format.ts +0 -96
- package/src/lib/decimal-marks.ts +0 -108
- package/src/lib/describe-failure.ts +0 -18
- package/src/lib/device-settings.ts +0 -147
- package/src/lib/direction.ts +0 -74
- package/src/lib/document-navigation.ts +0 -17
- package/src/lib/document-title.ts +0 -41
- package/src/lib/download.ts +0 -172
- package/src/lib/float-clearance.ts +0 -70
- package/src/lib/floating-stack.ts +0 -70
- package/src/lib/focus-left.ts +0 -156
- package/src/lib/format.ts +0 -522
- package/src/lib/http-status.ts +0 -38
- package/src/lib/iban.ts +0 -251
- package/src/lib/ime.ts +0 -24
- package/src/lib/intl-cache.ts +0 -25
- package/src/lib/iso-day.ts +0 -13
- package/src/lib/lazy-with-fallback.ts +0 -82
- package/src/lib/logger.ts +0 -69
- package/src/lib/minus.ts +0 -50
- package/src/lib/path-pattern.ts +0 -55
- package/src/lib/person-name.ts +0 -155
- package/src/lib/phone.ts +0 -208
- package/src/lib/plain-text.ts +0 -22
- package/src/lib/presence.ts +0 -18
- package/src/lib/qr-encode.ts +0 -444
- package/src/lib/quiet-focus.ts +0 -32
- package/src/lib/reduced-motion.ts +0 -22
- package/src/lib/refs.ts +0 -22
- package/src/lib/round.ts +0 -43
- package/src/lib/safe-storage.ts +0 -119
- package/src/lib/server-wake.ts +0 -315
- package/src/lib/session-refresh.ts +0 -472
- package/src/lib/share-format.ts +0 -18
- package/src/lib/status-tone.ts +0 -43
- package/src/lib/strip-fade.ts +0 -287
- package/src/lib/table-text.ts +0 -554
- package/src/lib/text-case.ts +0 -19
- package/src/lib/text-match.ts +0 -169
- package/src/lib/thenable.ts +0 -19
- package/src/lib/translation-review.ts +0 -717
- package/src/notifications/device-zone-report.ts +0 -67
- package/src/notifications/feedback-notification-types-labels.ts +0 -33
- package/src/notifications/feedback-notification-types.ts +0 -71
- package/src/notifications/notification-bell.tsx +0 -119
- package/src/notifications/notification-inbox.tsx +0 -309
- package/src/notifications/notification-parts.tsx +0 -81
- package/src/notifications/notification-types-setting.tsx +0 -406
- package/src/notifications/notification-types.ts +0 -89
- package/src/notifications/notifications-labels.ts +0 -287
- package/src/notifications/push-device-setting.tsx +0 -230
- package/src/notifications/push-devices-setting.tsx +0 -374
- package/src/notifications/push-worker.ts +0 -168
- package/src/notifications/quiet-hours-setting.tsx +0 -238
- package/src/notifications/unsubscribe-panel.tsx +0 -200
- package/src/notifications/use-push-device.ts +0 -448
- package/src/offline/local-first.ts +0 -100
- package/src/offline/pwa-update-prompt-labels.ts +0 -9
- package/src/offline/pwa-update-prompt.tsx +0 -78
- package/src/offline/query-persistence.ts +0 -391
- package/src/offline/service-worker-updates.ts +0 -81
- package/src/offline/shared-computer-labels.ts +0 -8
- package/src/offline/shared-computer.tsx +0 -87
- package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
- package/src/offline/sign-out-pending-dialog.tsx +0 -135
- package/src/offline.ts +0 -37
- package/src/push-worker.ts +0 -25
- package/src/rhf/fields.tsx +0 -2187
- package/src/rhf/form-core.tsx +0 -324
- package/src/rhf/form.tsx +0 -12
- package/src/rhf/line-items.tsx +0 -135
- package/src/rhf/use-rhf-wizard-step.ts +0 -104
- package/src/rhf.ts +0 -21
- package/src/search/command-palette-labels.ts +0 -16
- package/src/search/command-palette.tsx +0 -624
- package/src/search/global-search-labels.ts +0 -13
- package/src/search/global-search.tsx +0 -660
- package/src/search/search-index.ts +0 -283
- package/src/search/use-command-key.ts +0 -23
- package/src/search.ts +0 -14
- package/src/settings/device-reset-setting-labels.ts +0 -20
- package/src/settings/device-reset-setting.tsx +0 -116
- package/src/settings/settings-card-classes.ts +0 -11
- package/src/settings/settings-catalogue.ts +0 -150
- package/src/settings/settings-context.ts +0 -33
- package/src/settings/settings-heading.tsx +0 -67
- package/src/settings/settings-labels.ts +0 -87
- package/src/settings/settings-layout.tsx +0 -471
- package/src/settings/settings-section.tsx +0 -108
- package/src/settings/use-account-appearance.ts +0 -148
- package/src/settings/use-account-language.ts +0 -146
- package/src/settings/use-settings-focus.ts +0 -128
- package/src/settings/use-settings-route.ts +0 -258
- package/src/shell/account-menu-language.tsx +0 -130
- package/src/shell/account-menu-text-size.tsx +0 -80
- package/src/shell/admin-menu.tsx +0 -183
- package/src/shell/app-shell-labels.ts +0 -11
- package/src/shell/app-shell.tsx +0 -1560
- package/src/shell/auth-layout.tsx +0 -186
- package/src/shell/company-switcher-labels.ts +0 -13
- package/src/shell/company-switcher.tsx +0 -136
- package/src/shell/dev-menu.tsx +0 -257
- package/src/shell/fill-height.tsx +0 -45
- package/src/shell/language-code.ts +0 -5
- package/src/shell/option-switcher-menu.tsx +0 -84
- package/src/shell/sync-status-indicator.tsx +0 -303
- package/src/shell/top-bar-actions.tsx +0 -87
- package/src/shell/top-bar-brand.tsx +0 -78
- package/src/shell/top-bar-parts-labels.ts +0 -148
- package/src/shell/top-bar.tsx +0 -40
- package/src/shell/topbar-action-menu.tsx +0 -567
- package/src/shell/topbar-controls.tsx +0 -269
- package/src/shell/tour-menu.tsx +0 -187
- package/src/shell.ts +0 -108
- package/src/sync/db.ts +0 -129
- package/src/sync/engine.ts +0 -1011
- package/src/sync/hooks.ts +0 -98
- package/src/sync/testing.ts +0 -73
- package/src/sync/wire.ts +0 -61
- package/src/sync.ts +0 -37
- package/src/table-text.ts +0 -8
- package/src/testing/css-variables.generated.ts +0 -112
- package/src/testing/css-variables.ts +0 -189
- package/src/testing/index.ts +0 -29
- package/src/testing/react.ts +0 -58
- package/src/testing/tour.ts +0 -41
- package/src/testing/viewport.ts +0 -357
- package/src/theme/chart-palette.ts +0 -232
- package/src/theme/color.ts +0 -272
- package/src/theme/contrast-tokens.ts +0 -268
- package/src/theme/contrast.ts +0 -250
- package/src/theme/palette-derive.ts +0 -825
- package/src/theme/palette-presets.ts +0 -544
- package/src/theme/palette-store.ts +0 -108
- package/src/theme/text-size.ts +0 -289
- package/src/theme/theme-store.ts +0 -157
- package/src/tour/tour-catalogue-labels.ts +0 -75
- package/src/tour/tour-catalogue.tsx +0 -335
- package/src/tour/tour-dock.ts +0 -134
- package/src/tour/tour-engine.ts +0 -37
- package/src/tour/tour-gates.ts +0 -218
- package/src/tour/tour-guide-button.tsx +0 -64
- package/src/tour/tour-guide-labels.ts +0 -15
- package/src/tour/tour-info.ts +0 -144
- package/src/tour/tour-labels.ts +0 -23
- package/src/tour/tour-overlay.tsx +0 -1170
- package/src/tour/tour.tsx +0 -750
- package/src/tour/use-tour-progress.ts +0 -671
- package/src/tour/use-tour-url-sync.ts +0 -266
- package/src/tour.ts +0 -21
- package/src/vite-env.d.ts +0 -23
- package/src/wizard/stepper-nav.tsx +0 -360
- package/src/wizard/types.ts +0 -275
- package/src/wizard/use-wizard.ts +0 -560
- package/src/wizard/validation.ts +0 -39
- package/src/wizard/wizard-context.tsx +0 -74
- package/src/wizard/wizard-labels.ts +0 -29
- package/src/wizard/wizard-step.tsx +0 -76
- package/src/wizard/wizard-summary.tsx +0 -84
- package/src/wizard.ts +0 -15
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { useLayoutEffect, useRef, useState } from "react";
|
|
2
|
-
import type { ReactNode, RefObject } from "react";
|
|
3
|
-
import { usePhoneLayout } from "../hooks/use-breakpoint";
|
|
4
|
-
import { useKitLocale } from "../i18n/kit-labels";
|
|
5
|
-
import { decimalMark, localizeMark, readTyped, showsTyped } from "../lib/decimal-marks";
|
|
6
|
-
import {
|
|
7
|
-
mergeDescribedBy,
|
|
8
|
-
useFieldError,
|
|
9
|
-
useFieldHint,
|
|
10
|
-
useLockReason,
|
|
11
|
-
type FieldHelpProps,
|
|
12
|
-
type FieldHintParts,
|
|
13
|
-
type LockReason,
|
|
14
|
-
} from "./field-parts";
|
|
15
|
-
import type { CommitScope } from "./write-lock";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The engine NumberInput and AmountInput share (DUP-10, refactor audit 2026-10): the
|
|
19
|
-
* lock, the hint and its caption, the error, the `aria-describedby` order, the typist's
|
|
20
|
-
* draft and what the field shows, the calculator and the phone's numpad, and the room
|
|
21
|
-
* its end controls take. They were two copies of it, and each fix had to be made twice —
|
|
22
|
-
* some reached only one: NumberInput measured its end controls (keksdose live #367) and
|
|
23
|
-
* took a `locale`, AmountInput did neither; the 0.32 FieldHint caption reached
|
|
24
|
-
* AmountInput two releases late.
|
|
25
|
-
*
|
|
26
|
-
* Each field keeps what is its own: the settle (money's minor unit and `min`/`max`
|
|
27
|
-
* against NumberInput's "what was typed"), the caller-owned sign, and its trailing
|
|
28
|
-
* controls. Package-private — not re-exported from the barrel.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
/** The props both fields take and this engine reads. */
|
|
32
|
-
export interface NumericFieldProps extends FieldHelpProps {
|
|
33
|
-
/** What names the `help` "?" — "About “<label>”" — with the `aria-label`. */
|
|
34
|
-
label?: ReactNode;
|
|
35
|
-
hint?: ReactNode;
|
|
36
|
-
error?: ReactNode;
|
|
37
|
-
invalid?: boolean;
|
|
38
|
-
disabled?: boolean;
|
|
39
|
-
disabledReason?: ReactNode;
|
|
40
|
-
commit?: CommitScope;
|
|
41
|
-
/** Show the desktop calculator trigger. Default `true`. */
|
|
42
|
-
calculator?: boolean;
|
|
43
|
-
variant?: "field" | "display";
|
|
44
|
-
locale?: string;
|
|
45
|
-
"aria-label"?: string;
|
|
46
|
-
"aria-describedby"?: string;
|
|
47
|
-
"aria-invalid"?: boolean | "true" | "false";
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface NumericFieldOptions {
|
|
51
|
-
/** The field's own settle, dot-decimal in and out — AmountInput's minor unit and
|
|
52
|
-
* `min` / `max`; NumberInput's identity (it never rounds). */
|
|
53
|
-
settle: (text: string) => string;
|
|
54
|
-
/** What the field shows while no typed draft stands, dot-decimal, given whether it
|
|
55
|
-
* has focus — spelt in the locale's mark here (`derived`). */
|
|
56
|
-
display: (focused: boolean) => string;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface NumericField {
|
|
60
|
-
/** The write lock: focusable, `readOnly`, nothing changes or commits. */
|
|
61
|
-
lock: LockReason;
|
|
62
|
-
locked: boolean;
|
|
63
|
-
/** Natively `disabled`: `disabled`, and no lock — a reason wins over it. */
|
|
64
|
-
off: boolean;
|
|
65
|
-
/** The hint, split into the caption under the field and the label line's "?". */
|
|
66
|
-
hint: FieldHintParts;
|
|
67
|
-
/** `invalid`, a message, or a form library's `aria-invalid`. */
|
|
68
|
-
isInvalid: boolean;
|
|
69
|
-
/** The caller's ids, the caption, a lock's reason, the error — Select's order. */
|
|
70
|
-
describedBy: string | undefined;
|
|
71
|
-
/** The message under the field, or `null`. */
|
|
72
|
-
errorEl: ReactNode;
|
|
73
|
-
/** The phone layout: the numpad sheet replaces the keyboard and the calculator. */
|
|
74
|
-
isMobile: boolean;
|
|
75
|
-
/** `variant="display"`, on a phone. */
|
|
76
|
-
asDisplay: boolean;
|
|
77
|
-
showCalc: boolean;
|
|
78
|
-
showNumpad: boolean;
|
|
79
|
-
focused: boolean;
|
|
80
|
-
setFocused: (focused: boolean) => void;
|
|
81
|
-
/** The locale's decimal mark — the field's `locale`, else the provider's. */
|
|
82
|
-
mark: "," | ".";
|
|
83
|
-
/** The typist's own text while a figure is typed, else `null`. */
|
|
84
|
-
draft: string | null;
|
|
85
|
-
setDraft: (draft: string | null) => void;
|
|
86
|
-
/** `display(focused)` in the locale's mark. */
|
|
87
|
-
derived: string;
|
|
88
|
-
/** The draft, while it still says what `canonical` (dot-decimal) says and holds
|
|
89
|
-
* nothing the field would drop — see `showsTyped`; else `null`. */
|
|
90
|
-
typedFor: (canonical: string) => string | null;
|
|
91
|
-
/** A keystroke's raw text: kept as the draft, and read as a number reads it —
|
|
92
|
-
* grouping off, dot-decimal. */
|
|
93
|
-
read: (raw: string) => string;
|
|
94
|
-
settle: (text: string) => string;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export function useNumericField(props: NumericFieldProps, { settle, display }: NumericFieldOptions): NumericField {
|
|
98
|
-
const lock = useLockReason(props.commit, props.disabledReason);
|
|
99
|
-
const locked = lock.locked;
|
|
100
|
-
// §4: a FieldHint is the caption at Large and on touch, as on every field.
|
|
101
|
-
// A `help` is the label line's one "?" and turns the hint into the caption (0.36).
|
|
102
|
-
const hint = useFieldHint(props.hint, props["aria-describedby"], {
|
|
103
|
-
help: props.help,
|
|
104
|
-
name: props.label ?? props["aria-label"],
|
|
105
|
-
});
|
|
106
|
-
// The standing advice first, the news second: the caller's ids, the caption, the
|
|
107
|
-
// error — a lock's reason between the last two, as on Select.
|
|
108
|
-
const field = useFieldError(
|
|
109
|
-
props.error,
|
|
110
|
-
props.invalid,
|
|
111
|
-
mergeDescribedBy(hint.describedBy, locked && lock.reasonId),
|
|
112
|
-
props["aria-invalid"],
|
|
113
|
-
);
|
|
114
|
-
// On phones the OS keyboard is suppressed (`inputMode="none"`) for the kit's numpad
|
|
115
|
-
// sheet, so the desktop calculator trigger is hidden (feedback #334). A locked field
|
|
116
|
-
// offers neither: their result would be a value.
|
|
117
|
-
const isMobile = usePhoneLayout();
|
|
118
|
-
const [focused, setFocused] = useState(false);
|
|
119
|
-
const mark = decimalMark(useKitLocale(props.locale));
|
|
120
|
-
const [draft, setDraft] = useState<string | null>(null);
|
|
121
|
-
return {
|
|
122
|
-
lock,
|
|
123
|
-
locked,
|
|
124
|
-
off: Boolean(props.disabled) && !locked,
|
|
125
|
-
hint,
|
|
126
|
-
isInvalid: field.isInvalid,
|
|
127
|
-
describedBy: field.describedBy,
|
|
128
|
-
errorEl: field.errorEl,
|
|
129
|
-
isMobile,
|
|
130
|
-
asDisplay: isMobile && props.variant === "display",
|
|
131
|
-
showCalc: (props.calculator ?? true) && !props.disabled && !locked && !isMobile,
|
|
132
|
-
showNumpad: isMobile && !props.disabled && !locked && focused,
|
|
133
|
-
focused,
|
|
134
|
-
setFocused,
|
|
135
|
-
mark,
|
|
136
|
-
draft,
|
|
137
|
-
setDraft,
|
|
138
|
-
derived: localizeMark(display(focused), mark),
|
|
139
|
-
typedFor: (canonical) => (draft !== null && showsTyped(draft, mark, canonical) ? draft : null),
|
|
140
|
-
read: (raw) => {
|
|
141
|
-
setDraft(raw);
|
|
142
|
-
return readTyped(raw, mark);
|
|
143
|
-
},
|
|
144
|
-
settle,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* The measured width of a field's end controls (keksdose live #367), and the ref for
|
|
150
|
-
* their track: `null` before the first measurement and wherever there is no layout
|
|
151
|
-
* (jsdom), where the field keeps its class fallback. A `ResizeObserver` calls back once
|
|
152
|
-
* on `observe`, and again whenever the controls change size (a chip's code, a translated
|
|
153
|
-
* label, the text size). A pair, so the width reads as the plain number it is.
|
|
154
|
-
*/
|
|
155
|
-
export function useEndWidth(present: boolean): [RefObject<HTMLDivElement | null>, number | null] {
|
|
156
|
-
const ref = useRef<HTMLDivElement>(null);
|
|
157
|
-
const [width, setWidth] = useState<number | null>(null);
|
|
158
|
-
useLayoutEffect(() => {
|
|
159
|
-
const el = ref.current;
|
|
160
|
-
if (!present || !el || typeof ResizeObserver === "undefined") return;
|
|
161
|
-
const observer = new ResizeObserver(() => {
|
|
162
|
-
const measured = el.getBoundingClientRect().width;
|
|
163
|
-
setWidth(measured > 0 ? Math.ceil(measured) : null);
|
|
164
|
-
});
|
|
165
|
-
observer.observe(el);
|
|
166
|
-
return () => observer.disconnect();
|
|
167
|
-
}, [present]);
|
|
168
|
-
return [ref, width];
|
|
169
|
-
}
|
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
import { createPortal } from "react-dom";
|
|
2
|
-
import { Delete } from "lucide-react";
|
|
3
|
-
import { useMemo } from "react";
|
|
4
|
-
import type { ReactNode } from "react";
|
|
5
|
-
import { cn } from "../lib/cn";
|
|
6
|
-
import { FOCUS_RING } from "./focus-ring";
|
|
7
|
-
import { useDismissLayer } from "../hooks/use-dismiss";
|
|
8
|
-
import { evaluateExpression, formatResult, sanitizeLive } from "../lib/calc";
|
|
9
|
-
import { DEFAULT_CALCULATOR_LABELS, useKitLabels, type CalculatorLabels } from "../i18n/kit-labels";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* A full calculator keypad rendered as a bottom sheet — the mobile counterpart to
|
|
13
|
-
* the desktop {@link CalculatorButton} popover, and the replacement for the old
|
|
14
|
-
* under-the-field operator bar (`MathKeys`, feedback #334).
|
|
15
|
-
*
|
|
16
|
-
* A native app (YNAB) can swap the system keyboard for its own keypad; a PWA
|
|
17
|
-
* cannot — but it CAN suppress the OS keyboard with `inputMode="none"` on the
|
|
18
|
-
* host field and paint its own keypad in the freed space. So the host input keeps
|
|
19
|
-
* real focus/caret/selection + the existing value/commit contract, while this
|
|
20
|
-
* sheet drives it: digits + operators + a live `= …` preview, evaluated through
|
|
21
|
-
* the shared {@link evaluateExpression} engine. Desktop is untouched (it keeps the
|
|
22
|
-
* native keyboard and the calculator popover); the host gates this to mobile.
|
|
23
|
-
*
|
|
24
|
-
* Buttons commit through the host's `onChange`/blur, so the sheet is stateless —
|
|
25
|
-
* the field text is the single source of truth. `onPointerDown` preventDefault on
|
|
26
|
-
* the root keeps the host input focused (caret stays, keyboard stays hidden) as
|
|
27
|
-
* the user taps keys; the buttons' `onClick` still fires.
|
|
28
|
-
*/
|
|
29
|
-
/** Names for the pad itself and its four non-digit keys. The first four are
|
|
30
|
-
* screen-reader names; `done` is the one string here that is READ OFF THE SCREEN —
|
|
31
|
-
* the brand-filled primary button — and it was a hardcoded English literal while
|
|
32
|
-
* its three neighbours each took an override, so a German phone showed "Done"
|
|
33
|
-
* among German labels with no prop able to change it. */
|
|
34
|
-
export interface NumberPadSheetLabels extends Partial<CalculatorLabels> {
|
|
35
|
-
/** The pad's own name — the `calculator.panel` key under its older name here. */
|
|
36
|
-
pad?: string;
|
|
37
|
-
backspace?: string;
|
|
38
|
-
clear?: string;
|
|
39
|
-
equals?: string;
|
|
40
|
-
/** Visible text on the primary key, not an `aria-label`. */
|
|
41
|
-
done?: string;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
type PadKey = { kind: "ins"; label: string; ins: string; accent?: boolean; name?: PadKeyName } | { kind: "back" };
|
|
45
|
-
|
|
46
|
-
/** The {@link CalculatorLabels} key naming a non-digit key; digits are their glyph. */
|
|
47
|
-
type PadKeyName = "plus" | "minus" | "times" | "divide" | "decimal";
|
|
48
|
-
|
|
49
|
-
// Insert chars `sanitizeLive` keeps as they are (`× ÷` and ASCII `+ - * /`; it maps the
|
|
50
|
-
// unicode minus `−` to "-" since 0.51.7, INP-3), so minus inserts the ASCII "-" its
|
|
51
|
-
// field shows while the key shows the nicer glyph. The evaluator normalises `× ÷` back
|
|
52
|
-
// to `* /`.
|
|
53
|
-
const PAD_KEYS: PadKey[] = [
|
|
54
|
-
{ kind: "ins", label: "7", ins: "7" },
|
|
55
|
-
{ kind: "ins", label: "8", ins: "8" },
|
|
56
|
-
{ kind: "ins", label: "9", ins: "9" },
|
|
57
|
-
{ kind: "ins", label: "÷", ins: "÷", accent: true, name: "divide" },
|
|
58
|
-
{ kind: "ins", label: "4", ins: "4" },
|
|
59
|
-
{ kind: "ins", label: "5", ins: "5" },
|
|
60
|
-
{ kind: "ins", label: "6", ins: "6" },
|
|
61
|
-
{ kind: "ins", label: "×", ins: "×", accent: true, name: "times" },
|
|
62
|
-
{ kind: "ins", label: "1", ins: "1" },
|
|
63
|
-
{ kind: "ins", label: "2", ins: "2" },
|
|
64
|
-
{ kind: "ins", label: "3", ins: "3" },
|
|
65
|
-
{ kind: "ins", label: "−", ins: "-", accent: true, name: "minus" },
|
|
66
|
-
{ kind: "ins", label: ".", ins: ".", name: "decimal" },
|
|
67
|
-
{ kind: "ins", label: "0", ins: "0" },
|
|
68
|
-
{ kind: "back" },
|
|
69
|
-
{ kind: "ins", label: "+", ins: "+", accent: true, name: "plus" },
|
|
70
|
-
];
|
|
71
|
-
|
|
72
|
-
/** Every key's shape — including the thing this pad used to delete without replacing.
|
|
73
|
-
*
|
|
74
|
-
* `focus:outline-none` alone is not a style choice, it is the removal of the only
|
|
75
|
-
* signal a keyboard user has; on a 4×4 grid of identical tiles it leaves no way at all
|
|
76
|
-
* to tell which key Enter is about to press (the audit's §a11y, and the same defect as
|
|
77
|
-
* the dropdown search box).
|
|
78
|
-
*
|
|
79
|
-
* `focus-visible` and `ring-inset`, for the two reasons {@link ToggleGroup} already
|
|
80
|
-
* writes down. This is a touch control first, and a plain `focus:` ring paints itself
|
|
81
|
-
* on every TAP, because a tap focuses the button. And the keys sit 6px apart, which is
|
|
82
|
-
* thinner than an outward ring plus the neighbour it would spill onto — inset keeps the
|
|
83
|
-
* ring inside the key it describes.
|
|
84
|
-
*
|
|
85
|
-
* --brand rather than --border-strong: the operator keys are filled with a step of the
|
|
86
|
-
* ink, and a ring in the colour of the thing it surrounds is not an indicator. */
|
|
87
|
-
const PAD_BTN = `flex h-14 items-center justify-center rounded-lg text-lg font-medium transition-transform select-none focus:outline-none ${FOCUS_RING} focus-visible:ring-inset active:scale-[0.97]`;
|
|
88
|
-
// Digits on the well, operators a step down on `--bg-active`, each pressing toward the
|
|
89
|
-
// other. `--bg-active`, not `--border` (0.33, docs/colour-roles-harmonization.md §12.9):
|
|
90
|
-
// More contrast steps the border until it is a 3:1 LINE, and as a fill under the label
|
|
91
|
-
// that left 2.7–3.3:1; `--bg-active` carries the ink at 7:1 and up at both levels.
|
|
92
|
-
const PAD_DIGIT = "bg-surface-2 text-primary active:bg-active";
|
|
93
|
-
const PAD_ACCENT = "bg-active text-primary active:bg-surface-2";
|
|
94
|
-
|
|
95
|
-
export function NumberPadSheet({
|
|
96
|
-
value,
|
|
97
|
-
onChange,
|
|
98
|
-
onDone,
|
|
99
|
-
label,
|
|
100
|
-
labels,
|
|
101
|
-
decimalMark = ".",
|
|
102
|
-
onResult,
|
|
103
|
-
}: {
|
|
104
|
-
value: string;
|
|
105
|
-
/** Fired with the raw (sanitised) field text on every key — same contract as
|
|
106
|
-
* the host field's own `onChange`. */
|
|
107
|
-
onChange: (value: string) => void;
|
|
108
|
-
/** The glyph on the decimal key — "," where the host shows a comma (AmountInput
|
|
109
|
-
* in fr-CH, kastlan 40). With "," the key inserts a comma and the text is handed
|
|
110
|
-
* back unsanitized, for the host to read by its locale (keksdose G1). */
|
|
111
|
-
decimalMark?: "." | ",";
|
|
112
|
-
/** "=": the evaluated result, dot-decimal. Default `onChange`. A host that reads
|
|
113
|
-
* typed text by the locale's marks takes it apart from keystrokes, since a result
|
|
114
|
-
* like "1.234" is a decimal and never a grouped thousand. */
|
|
115
|
-
onResult?: (value: string) => void;
|
|
116
|
-
/** Fired on "Done": the host blurs the input, which commits (evaluates) and
|
|
117
|
-
* unmounts the sheet via its existing blur handler. */
|
|
118
|
-
onDone: () => void;
|
|
119
|
-
/** Optional field label, echoed in the sheet header so the user still knows
|
|
120
|
-
* which field they're editing when the sheet covers it. */
|
|
121
|
-
label?: ReactNode;
|
|
122
|
-
/** Names for the pad itself and its non-digit keys — screen-reader names, except
|
|
123
|
-
* `done`, which is the visible text on the primary key. Merged over `calculator`
|
|
124
|
-
* from `<UiKitProvider labels>`: this is the same keypad as `CalculatorButton`'s,
|
|
125
|
-
* on a phone, and one translation covers both. Digits need no name — their glyph
|
|
126
|
-
* IS the name; the operators do (see {@link CalculatorLabels.plus}). */
|
|
127
|
-
labels?: NumberPadSheetLabels;
|
|
128
|
-
}) {
|
|
129
|
-
// `pad` is this sheet's older spelling of `panel`, so it is folded in as that.
|
|
130
|
-
const fromProps = useMemo(() => {
|
|
131
|
-
if (!labels) return undefined;
|
|
132
|
-
const { pad, ...rest } = labels;
|
|
133
|
-
return pad === undefined ? rest : { ...rest, panel: pad };
|
|
134
|
-
}, [labels]);
|
|
135
|
-
const text = useKitLabels("calculator", DEFAULT_CALCULATOR_LABELS, fromProps);
|
|
136
|
-
|
|
137
|
-
// NO `useBodyScrollLock`, and that is the point of the control (Keksdose live
|
|
138
|
-
// #317: *"Background not scrollable when the amount input calculator field is
|
|
139
|
-
// open"*).
|
|
140
|
-
//
|
|
141
|
-
// This sheet is a KEYBOARD, not a dialog. It is opened by focusing a field and
|
|
142
|
-
// exists only because a PWA cannot swap the system keyboard for its own — so it
|
|
143
|
-
// suppresses the OS keyboard with `inputMode="none"` and paints itself in the
|
|
144
|
-
// freed space. An OS keyboard does not freeze the page behind it; it takes the
|
|
145
|
-
// bottom of the screen and leaves you free to scroll what is left, which is how
|
|
146
|
-
// you reach the field you are typing into when the keys cover it.
|
|
147
|
-
//
|
|
148
|
-
// Locking here made the page unreachable at exactly the moment it matters most:
|
|
149
|
-
// correcting a receipt total against the running line sum, where the figure you
|
|
150
|
-
// are comparing against sits below the keypad. The other four holders of that
|
|
151
|
-
// hook are all modal — `Modal`, `PickerSheet`, `FullBleedDialog`, the DataTable
|
|
152
|
-
// row dialog — and they stay locked, because for them the page behind is not
|
|
153
|
-
// part of the task.
|
|
154
|
-
//
|
|
155
|
-
// The pad still does not scroll ITSELF away under a stray drag: the root's
|
|
156
|
-
// `onPointerDown` preventDefault (below) keeps the host input focused and eats
|
|
157
|
-
// the gesture on the sheet, so a touch that starts on a key is not a page scroll.
|
|
158
|
-
|
|
159
|
-
// ── NO focus trap either, and for a harder reason than the scroll lock ────────
|
|
160
|
-
//
|
|
161
|
-
// Wave 3 put `useFocusTrap` on every overlay in this package. This one is the
|
|
162
|
-
// exception, and it is not an oversight to be tidied up later: a trap here would
|
|
163
|
-
// DELETE THE COMPONENT IT WAS PROTECTING. Both hosts render the pad with
|
|
164
|
-
// `showNumpad = isMobile && !disabled && focused`, where `focused` is the host
|
|
165
|
-
// input's own focus state. Moving focus into the pad blurs that input, the host
|
|
166
|
-
// sets `focused` false, and the pad unmounts — on mount, before a single key can be
|
|
167
|
-
// pressed. The blur also COMMITS, so the trap would evaluate a half-typed
|
|
168
|
-
// expression on the way out.
|
|
169
|
-
//
|
|
170
|
-
// That is the contract, not an accident of it. This sheet exists because a PWA
|
|
171
|
-
// cannot swap the system keyboard for its own: the host keeps real focus, caret and
|
|
172
|
-
// selection while `inputMode="none"` suppresses the OS keys, and the root's
|
|
173
|
-
// `onPointerDown` preventDefault below is there for the same reason. The pad is
|
|
174
|
-
// `role="group"`, not a dialog. A keyboard does not trap focus; it is what you type
|
|
175
|
-
// WITH.
|
|
176
|
-
//
|
|
177
|
-
// What was genuinely missing is a way OUT that is not a tap. A layer on the kit's
|
|
178
|
-
// Escape stack and not a handler on the sheet, because the sheet never has the focus
|
|
179
|
-
// a keydown would bubble from — the host does, and the host is not this component.
|
|
180
|
-
// Escape does what the Done key does rather than cancelling, because committing on
|
|
181
|
-
// blur is the host's contract and a cancel would have to be the host's to offer.
|
|
182
|
-
//
|
|
183
|
-
// Inside a `Modal` the pad opened over the dialog, so the stack hands the first
|
|
184
|
-
// Escape to the pad and the next to the dialog (Wave 2, DUP-1). It used to be the
|
|
185
|
-
// other way round, written down here as the limit: the dialog's own handler stopped
|
|
186
|
-
// the key before a document listener saw it, and the press closed the dialog.
|
|
187
|
-
useDismissLayer(true, onDone);
|
|
188
|
-
|
|
189
|
-
const result = evaluateExpression(value);
|
|
190
|
-
const preview = result !== null && formatResult(result) !== value.trim() ? `= ${formatResult(result)}` : "";
|
|
191
|
-
|
|
192
|
-
// With a "," mark the host keeps the typist's own text (AmountInput, keksdose G1):
|
|
193
|
-
// the key inserts the comma it shows, and the host, not this pad, decides which mark
|
|
194
|
-
// is the decimal one — sanitizing here would fold a grouping "." into a decimal.
|
|
195
|
-
const insert = (ch: string) =>
|
|
196
|
-
onChange(decimalMark === "," ? value + (ch === "." ? "," : ch) : sanitizeLive(value + ch));
|
|
197
|
-
const backspace = () => onChange(value.slice(0, -1));
|
|
198
|
-
const clearAll = () => onChange("");
|
|
199
|
-
const equals = () => {
|
|
200
|
-
if (result !== null) (onResult ?? onChange)(formatResult(result));
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
const sheet = (
|
|
204
|
-
<div
|
|
205
|
-
role="group"
|
|
206
|
-
aria-label={text.panel}
|
|
207
|
-
// A kit layer, and the bottom layer a docked tour card stays clear of (0.50,
|
|
208
|
-
// docs/tours-harmonization.md §11.6).
|
|
209
|
-
data-kit-layer=""
|
|
210
|
-
data-tour-obstruction=""
|
|
211
|
-
// Keep the host input focused when tapping the pad: preventDefault on
|
|
212
|
-
// pointerdown blocks the focus/blur, while the buttons' click still fires.
|
|
213
|
-
onPointerDown={(e) => e.preventDefault()}
|
|
214
|
-
className="fixed inset-x-0 bottom-0 z-50 border-t border-subtle bg-surface px-2 pt-2 shadow-[0_-4px_24px_rgba(0,0,0,0.12)]"
|
|
215
|
-
style={{ paddingBottom: "max(0.5rem, env(safe-area-inset-bottom))" }}
|
|
216
|
-
>
|
|
217
|
-
{/* Header display: which field + the running expression and live result, so
|
|
218
|
-
the value stays visible even when the sheet covers the field. */}
|
|
219
|
-
<div className="flex items-end justify-between gap-3 px-2 pb-2">
|
|
220
|
-
{label != null && <span className="truncate pb-1 text-xs font-medium text-money-neutral">{label}</span>}
|
|
221
|
-
{/* At the logical end, opposite the label; the figures themselves stay
|
|
222
|
-
left-to-right and right-aligned, like the desktop calculator's. */}
|
|
223
|
-
<div className="ms-auto min-w-0">
|
|
224
|
-
<div dir="ltr" className="truncate text-right font-mono text-lg leading-tight text-primary">
|
|
225
|
-
{value || "0"}
|
|
226
|
-
</div>
|
|
227
|
-
<div dir="ltr" className="h-4 text-right font-mono text-xs text-money-neutral">
|
|
228
|
-
{preview}
|
|
229
|
-
</div>
|
|
230
|
-
</div>
|
|
231
|
-
</div>
|
|
232
|
-
|
|
233
|
-
<div className="grid grid-cols-4 gap-1.5">
|
|
234
|
-
{PAD_KEYS.map((key, i) =>
|
|
235
|
-
key.kind === "back" ? (
|
|
236
|
-
<button
|
|
237
|
-
key="back"
|
|
238
|
-
type="button"
|
|
239
|
-
aria-label={text.backspace}
|
|
240
|
-
onClick={backspace}
|
|
241
|
-
className={cn(PAD_BTN, PAD_ACCENT)}
|
|
242
|
-
>
|
|
243
|
-
<Delete className="size-5" />
|
|
244
|
-
</button>
|
|
245
|
-
) : (
|
|
246
|
-
<button
|
|
247
|
-
key={`${key.ins}-${i}`}
|
|
248
|
-
type="button"
|
|
249
|
-
aria-label={key.name ? text[key.name] : key.label}
|
|
250
|
-
onClick={() => insert(key.ins)}
|
|
251
|
-
className={cn(PAD_BTN, key.accent ? PAD_ACCENT : PAD_DIGIT)}
|
|
252
|
-
>
|
|
253
|
-
{key.kind === "ins" && key.name === "decimal" ? decimalMark : key.label}
|
|
254
|
-
</button>
|
|
255
|
-
),
|
|
256
|
-
)}
|
|
257
|
-
</div>
|
|
258
|
-
|
|
259
|
-
<div className="mt-1.5 grid grid-cols-4 gap-1.5">
|
|
260
|
-
<button type="button" aria-label={text.clear} onClick={clearAll} className={cn(PAD_BTN, PAD_ACCENT)}>
|
|
261
|
-
C
|
|
262
|
-
</button>
|
|
263
|
-
<button type="button" aria-label={text.equals} onClick={equals} className={cn(PAD_BTN, PAD_ACCENT)}>
|
|
264
|
-
=
|
|
265
|
-
</button>
|
|
266
|
-
<button
|
|
267
|
-
type="button"
|
|
268
|
-
onClick={onDone}
|
|
269
|
-
// The one key whose own fill is --brand, so it rings in the colour that fill
|
|
270
|
-
// was chosen to be legible against instead (tailwind-merge keeps the later
|
|
271
|
-
// ring colour). A --brand ring here would be present in the DOM and invisible
|
|
272
|
-
// on screen, which is the defect this change exists to fix.
|
|
273
|
-
className={cn(
|
|
274
|
-
PAD_BTN,
|
|
275
|
-
"col-span-2 bg-brand text-brand-contrast focus-visible:ring-brand-contrast active:bg-brand-hover",
|
|
276
|
-
)}
|
|
277
|
-
>
|
|
278
|
-
{text.done}
|
|
279
|
-
</button>
|
|
280
|
-
</div>
|
|
281
|
-
</div>
|
|
282
|
-
);
|
|
283
|
-
|
|
284
|
-
return createPortal(sheet, document.body);
|
|
285
|
-
}
|