@eifi1/ui-kit 0.54.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 +90 -76
- 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/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.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 +2 -2
- 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-select.js +2 -2
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.js +2 -2
- 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-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 +3 -1
- 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 +13 -5
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +23 -2
- package/dist/components/modal.js +24 -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/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/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-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-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 +1 -10
- 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 +75 -3
- 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 +92 -4
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +71 -3
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +72 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +74 -3
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +74 -3
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +71 -3
- 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 +24 -5
- package/dist/index.js +35 -1
- 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 +29 -3
- package/dist/lib/dates.js +41 -12
- 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/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/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 -342
- 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 -439
- 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 -816
- 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 -600
- 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 -188
- package/src/components/currency-select.tsx +0 -343
- package/src/components/danger-confirm-labels.ts +0 -20
- package/src/components/danger-confirm.tsx +0 -987
- 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 -289
- package/src/components/data-table-filters.ts +0 -315
- 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 -284
- 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 -792
- package/src/components/modal.tsx +0 -534
- 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 -559
- 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 -754
- 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 -90
- 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 -11
- package/src/feedback/feedback-context.tsx +0 -245
- package/src/feedback/feedback-crash.ts +0 -547
- package/src/feedback/feedback-diagnostics.tsx +0 -41
- package/src/feedback/feedback-dialog-labels.ts +0 -29
- package/src/feedback/feedback-dialog.tsx +0 -452
- 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 -428
- 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 -31
- package/src/feedback/feedback-row-detail.tsx +0 -871
- package/src/feedback/feedback-status-undo.ts +0 -109
- package/src/feedback/feedback-submit-dialog.tsx +0 -131
- package/src/feedback/feedback-submit.tsx +0 -270
- 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 -212
- 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 -2059
- 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 -1999
- package/src/i18n/locales/fr.ts +0 -2037
- package/src/i18n/locales/hu.ts +0 -2004
- package/src/i18n/locales/it.ts +0 -2014
- package/src/i18n/locales/zh.ts +0 -1912
- 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 -1191
- 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 -288
- 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 -585
- 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 -27
- 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 -769
- 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,327 +0,0 @@
|
|
|
1
|
-
import { useId, useState } from "react";
|
|
2
|
-
import type { ComponentProps, ReactNode } from "react";
|
|
3
|
-
import { NumberInput } from "./number-input";
|
|
4
|
-
import { evaluateExpression, formatResult } from "../lib/calc";
|
|
5
|
-
import { decimalMark } from "../lib/decimal-marks";
|
|
6
|
-
import { roundHalfAway } from "../lib/round";
|
|
7
|
-
import { useKitLocale } from "../i18n/kit-labels";
|
|
8
|
-
|
|
9
|
-
type NumberInputProps = ComponentProps<typeof NumberInput>;
|
|
10
|
-
|
|
11
|
-
export interface NumberFieldProps extends Omit<
|
|
12
|
-
NumberInputProps,
|
|
13
|
-
"value" | "onChange" | "onCommit" | "suffix" | "invalid" | "error" | "locale"
|
|
14
|
-
> {
|
|
15
|
-
/** The committed number. `null` is "no value" — shown as an empty field. So is a
|
|
16
|
-
* number that is not finite (NaN, ±Infinity). */
|
|
17
|
-
value: number | null;
|
|
18
|
-
/**
|
|
19
|
-
* The parsed number, on blur or Enter and once per calculator session (see
|
|
20
|
-
* {@link NumberInput}'s `onCommit`) — never per keystroke — and only when it differs
|
|
21
|
-
* from the last one committed. Already rounded to `digits` and clamped into
|
|
22
|
-
* `[min, max]`. `null` only when `nullable` and the field was emptied.
|
|
23
|
-
*/
|
|
24
|
-
onCommit: (value: number | null) => void;
|
|
25
|
-
/**
|
|
26
|
-
* LIVE MODE: the number the text reads as, on every keystroke (and every step
|
|
27
|
-
* key) — for a calculator that recomputes as the user types, while `onCommit`
|
|
28
|
-
* stays the one to save on.
|
|
29
|
-
*
|
|
30
|
-
* What it is NOT, until the commit: rounded to `digits` or clamped into
|
|
31
|
-
* `[min, max]` — a half-typed "1" on the way to "150" must not read as the
|
|
32
|
-
* minimum of 100. A calculation reads as its result ("12+5" → 17); an empty field
|
|
33
|
-
* as `null` (whether or not `nullable`); a draft that is no number yet ("-", "12+")
|
|
34
|
-
* fires nothing, so the last number stands. On blur/Enter it fires once more with
|
|
35
|
-
* the committed value if that differs from the last one it reported — the rounded,
|
|
36
|
-
* clamped or snapped-back number — so a live consumer always ends where `onCommit`
|
|
37
|
-
* does.
|
|
38
|
-
*
|
|
39
|
-
* Feeding it back into `value` is safe: a `value` equal to the number this field
|
|
40
|
-
* last reported does not re-render the text, so "1," stays "1," while the rest of
|
|
41
|
-
* the form already shows 1. Not called when `value` changes from outside.
|
|
42
|
-
*/
|
|
43
|
-
onValueChange?: (value: number | null) => void;
|
|
44
|
-
/** Round to this many decimals on commit, and show at most this many (trailing
|
|
45
|
-
* zeros are trimmed: `digits={2}` shows 12.5, not 12.50). Omit for no rounding. */
|
|
46
|
-
digits?: number;
|
|
47
|
-
/** Clamp the committed number into `[min, max]`. Applied after rounding. */
|
|
48
|
-
min?: number;
|
|
49
|
-
max?: number;
|
|
50
|
-
/** An emptied field commits `null`. Without it an empty field is not an answer
|
|
51
|
-
* and snaps back to the last value, like any other unparsable text. */
|
|
52
|
-
nullable?: boolean;
|
|
53
|
-
/** The unit — "mm", "%", "km/h". */
|
|
54
|
-
unit?: ReactNode;
|
|
55
|
-
/** Where `unit` goes: `"suffix"` (default) is NumberInput's read-out at the
|
|
56
|
-
* field's end edge; `"label"` appends it to the label as "Label (unit)", for rows
|
|
57
|
-
* of narrow fields where a suffix would eat the digits. */
|
|
58
|
-
unitPlacement?: "suffix" | "label";
|
|
59
|
-
/** BCP 47 tag for the decimal mark, else the `<UiKitProvider locale>`, else the
|
|
60
|
-
* runtime's. */
|
|
61
|
-
locale?: string;
|
|
62
|
-
/** See {@link Input}'s `invalid`. */
|
|
63
|
-
invalid?: boolean;
|
|
64
|
-
/** See {@link Input}'s `error`: shown under the field, attached via
|
|
65
|
-
* `aria-describedby`, implies `invalid`. */
|
|
66
|
-
error?: ReactNode;
|
|
67
|
-
/** Merged with the error's id. Accepted so a form library's control slot (which
|
|
68
|
-
* injects `id` / `aria-describedby` / `aria-invalid`) can wrap this directly. */
|
|
69
|
-
"aria-describedby"?: string;
|
|
70
|
-
"aria-invalid"?: boolean | "true" | "false";
|
|
71
|
-
/**
|
|
72
|
-
* Set on the `<input>`. Declared, with `id` (from NumberInput) and the two above, so
|
|
73
|
-
* `Field`'s render-prop spread — `{(ids) => <NumberField {...ids} … />}`, kastlan's
|
|
74
|
-
* wizard steps — is typed and reaches the input rather than being dropped: before
|
|
75
|
-
* this, `aria-required` was not in the type and a required number was announced as
|
|
76
|
-
* optional.
|
|
77
|
-
*/
|
|
78
|
-
"aria-required"?: boolean | "true" | "false";
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** What the draft reads as while it is being typed — see `onValueChange`. `undefined`
|
|
82
|
-
* is "not a number yet", distinct from `null` (empty). */
|
|
83
|
-
function parseLive(text: string): number | null | undefined {
|
|
84
|
-
const t = text.trim().replace(/,/g, ".");
|
|
85
|
-
if (t === "") return null;
|
|
86
|
-
if (/^-?\d*\.?\d*$/.test(t)) {
|
|
87
|
-
// "-", "." and "-." pass the pattern and are no number yet.
|
|
88
|
-
if (!/\d/.test(t)) return undefined;
|
|
89
|
-
const n = Number(t);
|
|
90
|
-
return Number.isFinite(n) ? n : undefined;
|
|
91
|
-
}
|
|
92
|
-
return evaluateExpression(t) ?? undefined;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** `n` at `digits` decimals, half away from zero as WRITTEN — lib/round's
|
|
96
|
-
* `roundHalfAway`, shared with `roundToCurrency` and AmountInput (BUG-11 follow-up,
|
|
97
|
-
* refactor audit 2026-10). The `toFixed` this was turned 1.005 into 1.00 (1.005 is
|
|
98
|
-
* 1.00499… in binary) and −0.004 into −0; neither `Math.round(n * 10^d)` nor `toFixed`
|
|
99
|
-
* rounds the figure a person typed. `digits` is cut to a whole 0–100. */
|
|
100
|
-
function roundTo(n: number, digits: number | undefined): number {
|
|
101
|
-
if (digits === undefined) return n;
|
|
102
|
-
return roundHalfAway(n, Math.min(Math.max(Math.trunc(digits), 0), 100));
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* A number field whose value IS a number: {@link NumberInput}'s text, calculator and
|
|
107
|
-
* numpad, with the parse/commit/revert loop every consumer was writing on top of it.
|
|
108
|
-
*
|
|
109
|
-
* WHY THE DRAFT. Half-typed values — "-", "1,", "12+" — are not numbers, and
|
|
110
|
-
* reformatting them mid-keystroke moves the caret and fights the typist; committing
|
|
111
|
-
* per keystroke would also fire whatever a commit fires (a recalculation, a save) for
|
|
112
|
-
* every meaningless intermediate. So the field keeps a draft STRING while it is being
|
|
113
|
-
* typed and resolves it on blur/Enter:
|
|
114
|
-
*
|
|
115
|
-
* - a number (or a calculation, "2700+50") → rounded to `digits`, clamped into
|
|
116
|
-
* `[min, max]`, committed, and the draft re-rendered from the result;
|
|
117
|
-
* - empty → `null` when `nullable`, otherwise the same as the next case — `Number("")`
|
|
118
|
-
* is 0, and clearing a wheelbase and tabbing away must not set it to zero;
|
|
119
|
-
* - anything else unparsable → the draft SNAPS BACK to the last committed value
|
|
120
|
-
* rather than sending NaN on for a server to reject.
|
|
121
|
-
*
|
|
122
|
-
* The draft follows `value` when it changes from outside (a reset, a loaded record);
|
|
123
|
-
* a change that came from here arrives back identical and is a no-op.
|
|
124
|
-
*
|
|
125
|
-
* LIVE MODE. A calculator that recomputes per keystroke used to have to pick: this
|
|
126
|
-
* field (limits, rounding, but a number only on blur) or a bare NumberInput (every
|
|
127
|
-
* keystroke, but a string and no limits). `onValueChange` is the per-keystroke
|
|
128
|
-
* channel here, next to the commit rather than instead of it: live numbers for the
|
|
129
|
-
* read-out, `onCommit` for the save. It lives on this field rather than as
|
|
130
|
-
* `min`/`max`/`digits` on NumberInput because parsing, the locale's mark and the
|
|
131
|
-
* limits are what this field already is — a second copy on the string field would be
|
|
132
|
-
* a second, subtly different NumberField.
|
|
133
|
-
*
|
|
134
|
-
* STEPS. `step` (with `min`/`max` as bounds) turns on ArrowUp/ArrowDown and PageUp/
|
|
135
|
-
* PageDown (×10) — see NumberInput's `step`. A step is a draft change like a
|
|
136
|
-
* keystroke: `onValueChange` hears it at once, `onCommit` on blur/Enter. Pick a
|
|
137
|
-
* `step` that `digits` can show (0.25 needs `digits={2}`), or the commit rounds it.
|
|
138
|
-
*
|
|
139
|
-
* LOCALE. The decimal mark is the locale's: a German user sees and types "1,5".
|
|
140
|
-
* NumberInput normalises every keystroke to a dot (so its evaluator reads one
|
|
141
|
-
* alphabet); this field maps the dot back before the draft is shown. The field never
|
|
142
|
-
* WRITES digit grouping — "1.000" would read as a thousand in German and as one in
|
|
143
|
-
* English, and a field that parses its own display back must not have that ambiguity —
|
|
144
|
-
* but since 0.22 it READS it, through NumberInput (keksdose K5): "1.234,56" typed by a
|
|
145
|
-
* German user commits 1234.56 rather than 1.23456, and "1,234.56" by an English one
|
|
146
|
-
* likewise. While a figure is typed the typist's own text stays on screen ("1.234,5",
|
|
147
|
-
* or a dot typed as the decimal in a comma locale); it is re-spelt in the locale's mark
|
|
148
|
-
* when it commits.
|
|
149
|
-
*
|
|
150
|
-
* LOCKED (0.33.1, Kurvenschmiede). A field that saves itself takes `commit` (or a
|
|
151
|
-
* `disabledReason` of its own), NumberInput's: under a locked `WriteLockProvider` it
|
|
152
|
-
* stays in the tab order showing its value, `readOnly`, with the lock's reason in the
|
|
153
|
-
* kit Tooltip and its description; the step keys, the calculator and the numpad are
|
|
154
|
-
* off, and nothing reaches `onValueChange` or `onCommit`. `disabled` takes it out of
|
|
155
|
-
* the tab order, which is what a lock must not do.
|
|
156
|
-
*
|
|
157
|
-
* NOT FOR MONEY. `digits={2}` rounds, but a currency is more than two decimals: JPY has
|
|
158
|
-
* none, a unit price has four, and the chip, the minor-unit default and `min`/`max` on
|
|
159
|
-
* the SIGNED figure are {@link MoneyField}'s (number value) and {@link AmountInput}'s
|
|
160
|
-
* (string value). A NumberField whose `unit` is a currency says so on the console in
|
|
161
|
-
* development — see NumberInput's money guard.
|
|
162
|
-
*/
|
|
163
|
-
export function NumberField(props: NumberFieldProps) {
|
|
164
|
-
const {
|
|
165
|
-
value: stored,
|
|
166
|
-
onCommit,
|
|
167
|
-
onValueChange,
|
|
168
|
-
digits,
|
|
169
|
-
min,
|
|
170
|
-
max,
|
|
171
|
-
nullable = false,
|
|
172
|
-
unit,
|
|
173
|
-
unitPlacement = "suffix",
|
|
174
|
-
locale: localeProp,
|
|
175
|
-
label,
|
|
176
|
-
invalid,
|
|
177
|
-
error,
|
|
178
|
-
id,
|
|
179
|
-
"aria-describedby": ariaDescribedBy,
|
|
180
|
-
"aria-invalid": ariaInvalid,
|
|
181
|
-
"aria-required": ariaRequired,
|
|
182
|
-
...rest
|
|
183
|
-
} = props;
|
|
184
|
-
// A number that is not finite is no value. NaN in particular never equals itself, and
|
|
185
|
-
// the external-change check below re-read it as new on every render until React threw
|
|
186
|
-
// "Too many re-renders" (refactor audit 2026-10-30, INP-11).
|
|
187
|
-
const value = stored === null || Number.isFinite(stored) ? stored : null;
|
|
188
|
-
const locale = useKitLocale(localeProp);
|
|
189
|
-
const mark = decimalMark(locale);
|
|
190
|
-
const localize = (text: string) => (mark === "," ? text.replace(/\./g, ",") : text);
|
|
191
|
-
// `formatResult` for fixed notation: `String(1e-7)` is "1e-7", which the field
|
|
192
|
-
// would read back as 17 (see calc.ts).
|
|
193
|
-
const format = (n: number | null) =>
|
|
194
|
-
n === null || !Number.isFinite(n) ? "" : localize(formatResult(roundTo(n, digits)));
|
|
195
|
-
|
|
196
|
-
const [draft, setDraft] = useState(() => format(value));
|
|
197
|
-
// Everything the displayed text depends on, not just `value`: switching the
|
|
198
|
-
// provider's language or a field's `digits` has to re-render the draft too.
|
|
199
|
-
const [seen, setSeen] = useState({ value, mark, digits });
|
|
200
|
-
// The last number handed to `onCommit`, so Enter-then-blur (both commit) and a
|
|
201
|
-
// parent that does not echo the value back cannot commit the same number twice.
|
|
202
|
-
// State rather than a ref because the external-change branch below resets it
|
|
203
|
-
// during render, and a ref may not be written there.
|
|
204
|
-
const [committed, setCommitted] = useState(value);
|
|
205
|
-
// The last number handed to `onValueChange` — state for the same reason.
|
|
206
|
-
const [reported, setReported] = useState(value);
|
|
207
|
-
|
|
208
|
-
// Adjust state during render rather than in an effect: React re-renders at once
|
|
209
|
-
// with the new draft, before anything is painted, so there is no frame showing
|
|
210
|
-
// the old text. `Object.is`, not `!==`, under which NaN is new on every render: the
|
|
211
|
-
// value is read above, but a NaN `digits` looped the same way.
|
|
212
|
-
if (!Object.is(seen.value, value) || seen.mark !== mark || !Object.is(seen.digits, digits)) {
|
|
213
|
-
setSeen({ value, mark, digits });
|
|
214
|
-
// Live mode echoing back what it was just told: the draft already says it, in
|
|
215
|
-
// the typist's own spelling ("1," or "12+5"), and reformatting would fight them.
|
|
216
|
-
// Only a changed `value` qualifies — a new mark or `digits` still re-renders.
|
|
217
|
-
const echo = onValueChange !== undefined && value === reported && seen.mark === mark && seen.digits === digits;
|
|
218
|
-
if (!echo) {
|
|
219
|
-
setDraft(format(value));
|
|
220
|
-
setCommitted(value);
|
|
221
|
-
setReported(value);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
const report = (next: number | null) => {
|
|
226
|
-
if (next === reported) return;
|
|
227
|
-
setReported(next);
|
|
228
|
-
onValueChange?.(next);
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
const onText = (text: string) => {
|
|
232
|
-
setDraft(localize(text));
|
|
233
|
-
const live = parseLive(text);
|
|
234
|
-
if (live !== undefined) report(live);
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
const commit = (text: string) => {
|
|
238
|
-
const trimmed = text.trim();
|
|
239
|
-
let next: number | null;
|
|
240
|
-
const snapBack = () => {
|
|
241
|
-
setDraft(format(committed));
|
|
242
|
-
report(committed);
|
|
243
|
-
};
|
|
244
|
-
if (trimmed === "") {
|
|
245
|
-
if (!nullable) return snapBack();
|
|
246
|
-
next = null;
|
|
247
|
-
} else {
|
|
248
|
-
// `text` is NumberInput's committed form: an evaluated calculation, dot-decimal.
|
|
249
|
-
// What survives its digits-only fallback can still be "-" or "." alone.
|
|
250
|
-
const parsed = Number(trimmed.replace(/,/g, "."));
|
|
251
|
-
if (!Number.isFinite(parsed)) return snapBack();
|
|
252
|
-
next = roundTo(parsed, digits);
|
|
253
|
-
if (min !== undefined) next = Math.max(min, next);
|
|
254
|
-
if (max !== undefined) next = Math.min(max, next);
|
|
255
|
-
}
|
|
256
|
-
// Always re-render the draft from the result — "007" becomes "7", a clamped 500
|
|
257
|
-
// shows the 100 it was clamped to — even when there is nothing new to commit.
|
|
258
|
-
setDraft(format(next));
|
|
259
|
-
report(next);
|
|
260
|
-
if (next !== committed) {
|
|
261
|
-
setCommitted(next);
|
|
262
|
-
onCommit(next);
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
|
|
266
|
-
const generatedId = useId();
|
|
267
|
-
const fieldId = id ?? generatedId;
|
|
268
|
-
|
|
269
|
-
// Straight onto NumberInput's <input>, which declares both now. They used to be set
|
|
270
|
-
// on the DOM node from an effect, because NumberInput had no props for them.
|
|
271
|
-
const required = ariaRequired === true || ariaRequired === "true";
|
|
272
|
-
|
|
273
|
-
const labelWithUnit =
|
|
274
|
-
unit !== undefined && unitPlacement === "label" ? (
|
|
275
|
-
label === undefined || label === "" ? (
|
|
276
|
-
unit
|
|
277
|
-
) : typeof label === "string" && typeof unit === "string" ? (
|
|
278
|
-
`${label} (${unit})`
|
|
279
|
-
) : (
|
|
280
|
-
<>
|
|
281
|
-
{label} ({unit})
|
|
282
|
-
</>
|
|
283
|
-
)
|
|
284
|
-
) : (
|
|
285
|
-
label
|
|
286
|
-
);
|
|
287
|
-
|
|
288
|
-
return (
|
|
289
|
-
<NumberInput
|
|
290
|
-
{...rest}
|
|
291
|
-
id={fieldId}
|
|
292
|
-
aria-describedby={ariaDescribedBy}
|
|
293
|
-
aria-required={required || undefined}
|
|
294
|
-
label={labelWithUnit}
|
|
295
|
-
value={draft}
|
|
296
|
-
onChange={onText}
|
|
297
|
-
onCommit={commit}
|
|
298
|
-
min={min}
|
|
299
|
-
max={max}
|
|
300
|
-
// The mark this field spells its draft in, so the two can never disagree when
|
|
301
|
-
// this field's `locale` is not the provider's.
|
|
302
|
-
locale={locale}
|
|
303
|
-
suffix={unitPlacement === "suffix" ? unit : undefined}
|
|
304
|
-
invalid={invalid || ariaInvalid === true || ariaInvalid === "true"}
|
|
305
|
-
// NumberInput's `error` — the message, the description, the paint, and Input's
|
|
306
|
-
// steady box: no wrapper for a field that never takes `error`, and the SAME one
|
|
307
|
-
// for a field that does, message or not, so the message coming or going never
|
|
308
|
-
// remounts the <input> mid-keystroke. Only forwarded when it was passed, since
|
|
309
|
-
// passing the key is what asks for the box.
|
|
310
|
-
{...("error" in props ? { error } : {})}
|
|
311
|
-
/>
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* A {@link NumberField} for whole numbers: `digits={0}` and `calculator={false}` as
|
|
317
|
-
* defaults, each overridable — the preset `RhfIntegerField` (`@eifi1/ui-kit/rhf`) applies to a
|
|
318
|
-
* form-bound field, for the plain one (kastlan 51: a building's construction year in a
|
|
319
|
-
* wizard's local state, an entity id in the document upload spelled the two props out
|
|
320
|
-
* by hand).
|
|
321
|
-
*
|
|
322
|
-
* `??` rather than a spread over the defaults, so a wrapper forwarding its own optional
|
|
323
|
-
* `digits={props.digits}` still gets the preset.
|
|
324
|
-
*/
|
|
325
|
-
export function IntegerField(props: NumberFieldProps) {
|
|
326
|
-
return <NumberField {...props} digits={props.digits ?? 0} calculator={props.calculator ?? false} />;
|
|
327
|
-
}
|