@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,342 +0,0 @@
|
|
|
1
|
-
// The series chart's pure half: the axis bands, the padded and anchored domains, the
|
|
2
|
-
// series keys and colours, and the abscissa reduced to a number line. No React, no
|
|
3
|
-
// recharts and no JSX here (chart-zoom-core lends the one name `DEFAULT_Y_AXIS`) —
|
|
4
|
-
// arithmetic over rows and axes, which is why apps import some of it in
|
|
5
|
-
// files that draw no chart (Kurvenschmiede's curve-chart-model.ts builds its series
|
|
6
|
-
// keys with `seriesKey`).
|
|
7
|
-
//
|
|
8
|
-
// Moved out of series-chart.tsx as it was (MOD-9, refactor audit 2026-10). The public
|
|
9
|
-
// names are still exported from series-chart.tsx, so `/chart` and the barrel are
|
|
10
|
-
// unchanged; this module is not an entry of its own. The names below that series-chart
|
|
11
|
-
// does not re-export (the tick-band constants, `xModel`, `finite`, …) stay internal.
|
|
12
|
-
import { DEFAULT_Y_AXIS } from "./chart-zoom-core";
|
|
13
|
-
import type { TimeTickUnit } from "./series-chart-ticks";
|
|
14
|
-
import { paletteFor } from "../theme/chart-palette";
|
|
15
|
-
import type {
|
|
16
|
-
SeriesChartAxis,
|
|
17
|
-
SeriesChartRow,
|
|
18
|
-
SeriesChartSeries,
|
|
19
|
-
SeriesChartTickValues,
|
|
20
|
-
SeriesChartX,
|
|
21
|
-
SeriesChartXValue,
|
|
22
|
-
} from "./series-chart";
|
|
23
|
-
|
|
24
|
-
/** How much of an axis band the rotated title takes, in px at Normal — × the text size's
|
|
25
|
-
* scale on the chart (§3.2), since the title is text. Reserved rather than shared with
|
|
26
|
-
* the ticks: a title merely offset inside the band prints on top of a five-figure tick,
|
|
27
|
-
* and which gives way depends on the data. */
|
|
28
|
-
export const AXIS_TITLE_STRIP = 16;
|
|
29
|
-
|
|
30
|
-
/** Where inside its strip the rotated title sits. */
|
|
31
|
-
export const AXIS_TITLE_OFFSET = 10;
|
|
32
|
-
|
|
33
|
-
/** The tallest band tilted x ticks reserve, in px at Normal (× the scale). A category
|
|
34
|
-
* name longer than this at its angle is clipped rather than squeezing the plot down to
|
|
35
|
-
* a strip. */
|
|
36
|
-
const MAX_TILTED_TICK_BAND = 120;
|
|
37
|
-
|
|
38
|
-
/** What one character of a tick label is taken to be, in px at Normal, for the tilted
|
|
39
|
-
* band — the shell's `text-xs`. An estimate: the SVG is not laid out yet when the band
|
|
40
|
-
* is decided. Both grow with the text size, as `text-xs` does (§3.2). */
|
|
41
|
-
const TICK_CHAR_WIDTH = 7;
|
|
42
|
-
const TICK_LINE_HEIGHT = 12;
|
|
43
|
-
/** recharts' gap between the axis line and a bottom tick's text — px, at every size:
|
|
44
|
-
* recharts draws it, not the type. */
|
|
45
|
-
const TICK_GAP = 8;
|
|
46
|
-
/** recharts' own band under level x ticks. */
|
|
47
|
-
const LEVEL_TICK_BAND = 30;
|
|
48
|
-
/** The least room recharts' x ticks keep between labels, in px at Normal. */
|
|
49
|
-
export const MIN_TICK_GAP = 32;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* The height the x axis reserves for its ticks at a text `scale`: tilted by `angle`
|
|
53
|
-
* degrees, the rotated box of the longest label, from its length; level, recharts' own
|
|
54
|
-
* 30 px grown with the labels. `undefined` for level ticks at Normal, where recharts'
|
|
55
|
-
* default is exactly that.
|
|
56
|
-
*/
|
|
57
|
-
export function tiltedTickBand(labels: readonly string[], angle: number, scale = 1): number | undefined {
|
|
58
|
-
if (!angle) return scale === 1 ? undefined : Math.ceil(LEVEL_TICK_BAND * scale);
|
|
59
|
-
const rad = (Math.abs(angle) * Math.PI) / 180;
|
|
60
|
-
const longest = Math.max(0, ...labels.map((label) => label.length)) * TICK_CHAR_WIDTH * scale;
|
|
61
|
-
const band = Math.sin(rad) * longest + Math.cos(rad) * TICK_LINE_HEIGHT * scale + TICK_GAP;
|
|
62
|
-
return Math.min(
|
|
63
|
-
Math.round(MAX_TILTED_TICK_BAND * scale),
|
|
64
|
-
Math.max(Math.ceil(LEVEL_TICK_BAND * scale), Math.ceil(band)),
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** The width the ticks of a y axis get when a caller does not say, in px at Normal. */
|
|
69
|
-
export const AXIS_TICK_WIDTH = 48;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* How much air a FITTED axis leaves between the data and its frame, as a fraction of
|
|
73
|
-
* the range. Recharts fits `[dataMin, dataMax]`, which draws a peak half a stroke
|
|
74
|
-
* outside the plot and a curve running to its limit indistinguishable from the frame.
|
|
75
|
-
*/
|
|
76
|
-
const AUTO_PAD = 0.04;
|
|
77
|
-
|
|
78
|
-
/** The band a fitted axis draws, padded — and a real band for constant data, which is
|
|
79
|
-
* a zero-height domain recharts cannot scale into. `undefined` when nothing finite. */
|
|
80
|
-
export function paddedDomain(values: Iterable<number>): [number, number] | undefined {
|
|
81
|
-
let low = Infinity;
|
|
82
|
-
let high = -Infinity;
|
|
83
|
-
for (const value of values) {
|
|
84
|
-
if (!Number.isFinite(value)) continue;
|
|
85
|
-
if (value < low) low = value;
|
|
86
|
-
if (value > high) high = value;
|
|
87
|
-
}
|
|
88
|
-
return padBand(low, high);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* {@link paddedDomain} for a caller that has already walked its own data — so a row
|
|
93
|
-
* of charts can share one scale without building an array to find two numbers in, and
|
|
94
|
-
* without a second padding rule. `low > high` means "nothing was seen": `undefined`.
|
|
95
|
-
*/
|
|
96
|
-
export function padBand(low: number, high: number): [number, number] | undefined {
|
|
97
|
-
if (!(low <= high)) return undefined;
|
|
98
|
-
const pad = (high - low) * AUTO_PAD || Math.abs(high) * AUTO_PAD || 1;
|
|
99
|
-
return [low - pad, high + pad];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* The whole band a y axis occupies: its ticks, and its title when it draws one. For
|
|
104
|
-
* lining a heading up over a PLOT rather than over its column.
|
|
105
|
-
*
|
|
106
|
-
* `scale` is the text size's (`useTextSize().scale`, §3.2, §10.10): the chart draws every
|
|
107
|
-
* band — the default 48 px and a caller's own `width` alike (keksdose's
|
|
108
|
-
* `MONEY_AXIS_WIDTH`) — this many times wider, because the ticks in it are `text-xs`
|
|
109
|
-
* and grow with the text. A heading lined up over the plot has to pass the same scale.
|
|
110
|
-
* One factor for both sides of a facing pair, so the mirrored bands stay equal.
|
|
111
|
-
*/
|
|
112
|
-
export function axisBandWidth(tickWidth: number | undefined, titled: boolean, scale = 1): number {
|
|
113
|
-
const band = (tickWidth ?? AXIS_TICK_WIDTH) + (titled ? AXIS_TITLE_STRIP : 0);
|
|
114
|
-
return scale === 1 ? band : Math.round(band * scale);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* The colour an axis TITLE takes, or `undefined` for the neutral one.
|
|
119
|
-
*
|
|
120
|
-
* An axis measuring exactly one line is that line's, and saying so in the title lets a
|
|
121
|
-
* reader find a channel's scale without counting axes. An axis measuring several is
|
|
122
|
-
* nobody's — a title in the first one's colour would be claiming it. Counted off the
|
|
123
|
-
* series, so toggling a second line onto an axis gives the colour up in the same render.
|
|
124
|
-
*/
|
|
125
|
-
export function soleSeriesColor(
|
|
126
|
-
axis: Pick<SeriesChartAxis, "id" | "color">,
|
|
127
|
-
series: readonly Pick<SeriesChartSeries, "axis">[],
|
|
128
|
-
): string | undefined {
|
|
129
|
-
const mine = series.filter((entry) => (entry.axis ?? DEFAULT_Y_AXIS) === axis.id);
|
|
130
|
-
return mine.length === 1 ? axis.color : undefined;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/** The single-axis case, which is most charts. `width` is what the TICKS need;
|
|
134
|
-
* `orientation` is which side they stand on. */
|
|
135
|
-
export function oneAxis(
|
|
136
|
-
format: ((value: number) => string) | undefined,
|
|
137
|
-
title: string,
|
|
138
|
-
width?: number,
|
|
139
|
-
orientation?: "left" | "right",
|
|
140
|
-
): SeriesChartAxis[] {
|
|
141
|
-
return [{ id: DEFAULT_Y_AXIS, format, title, width, orientation }];
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/** One source's samples: an abscissa and the channels measured against it. */
|
|
145
|
-
export interface SeriesSource {
|
|
146
|
-
x: readonly number[];
|
|
147
|
-
channels: Readonly<Record<string, readonly number[]>>;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Merge sources sampled on different grids into rows the chart can draw.
|
|
152
|
-
*
|
|
153
|
-
* Merged ON THE ABSCISSA VALUE ITSELF, never interpolated onto a common grid: a line
|
|
154
|
-
* through invented points looks exactly like one through measured ones. Where a source
|
|
155
|
-
* has no sample the key is absent, and `connectNulls` bridges the hole with the same
|
|
156
|
-
* straight segment an interpolation would have drawn — without claiming a measurement.
|
|
157
|
-
*/
|
|
158
|
-
export function mergeSeries(sources: readonly SeriesSource[]): Record<string, number>[] {
|
|
159
|
-
const byAbscissa = new Map<number, Record<string, number>>();
|
|
160
|
-
for (const source of sources) {
|
|
161
|
-
source.x.forEach((value, index) => {
|
|
162
|
-
const row = byAbscissa.get(value) ?? { x: value };
|
|
163
|
-
for (const [key, channel] of Object.entries(source.channels)) row[key] = channel[index];
|
|
164
|
-
byAbscissa.set(value, row);
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
return [...byAbscissa.values()].sort((a, b) => a.x - b.x);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* A series key built out of parts — as a CSS identifier.
|
|
172
|
-
*
|
|
173
|
-
* The chart shell paints each series through `--color-<key>`, and skips (with a
|
|
174
|
-
* console warning) any key that is not `[A-Za-z_][A-Za-z0-9_-]*`. A line whose colour
|
|
175
|
-
* was skipped has no stroke at all: an axis, a grid and nothing between them. So a key
|
|
176
|
-
* assembled out of DATA — an id, an enum, a side — goes through here: every other
|
|
177
|
-
* character becomes `_`, the parts are joined with `_`, and a key that would start with
|
|
178
|
-
* a digit or a hyphen gets a leading `_`.
|
|
179
|
-
*/
|
|
180
|
-
export function seriesKey(...parts: (string | number)[]): string {
|
|
181
|
-
const key = parts.map((part) => String(part).replace(/[^A-Za-z0-9_-]/g, "_")).join("_");
|
|
182
|
-
return /^[A-Za-z_]/.test(key) ? key : `_${key}`;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* The band an axis carrying bars or areas draws: the data's extent with ZERO in it,
|
|
187
|
-
* padded only on the sides that are not zero — bars standing on a frame's bottom edge,
|
|
188
|
-
* not floating four per cent above it on a band of air nobody asked for.
|
|
189
|
-
* `undefined` when there is nothing to fit.
|
|
190
|
-
*
|
|
191
|
-
* All-zero data (a quiet period, a zoom window over empty months) is `[0, 1]`: one unit
|
|
192
|
-
* on the free side, the unit {@link padBand} pads a zero extent by. d3 maps every value
|
|
193
|
-
* of a zero-height domain to the range's midpoint, so `[0, 0]` stood the bars on a
|
|
194
|
-
* baseline in the middle of the plot, the "0" tick beside it (audit 2026-10-30 DSP-10;
|
|
195
|
-
* keksdose's weekday pattern drew seven 4 px stubs mid-card for a period with no
|
|
196
|
-
* spending).
|
|
197
|
-
*/
|
|
198
|
-
export function anchoredBand(extent: readonly [number, number] | undefined): [number, number] | undefined {
|
|
199
|
-
if (!extent) return undefined;
|
|
200
|
-
const low = Math.min(0, extent[0]);
|
|
201
|
-
const high = Math.max(0, extent[1]);
|
|
202
|
-
if (low === 0 && high === 0) return [0, 1];
|
|
203
|
-
const pad = (high - low) * AUTO_PAD || 1;
|
|
204
|
-
return [low < 0 ? low - pad : 0, high > 0 ? high + pad : 0];
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Series with their colours settled BEFORE any are switched off.
|
|
209
|
-
*
|
|
210
|
-
* A series with no `color` takes `paletteFor(its position)` — and a legend toggle that
|
|
211
|
-
* hands the chart a shorter list moves every later series one position up, repainting
|
|
212
|
-
* it in its neighbour's colour on each click. Resolving the colours on the full list
|
|
213
|
-
* and filtering after keeps each series in the colour its legend entry shows.
|
|
214
|
-
*/
|
|
215
|
-
// Generic so a typed list comes back typed (0.53): a chart of `Month` rows takes it, and
|
|
216
|
-
// its `dot`s still read `point.row` as a `Month`.
|
|
217
|
-
export function visibleSeries<TRow extends object>(
|
|
218
|
-
series: readonly SeriesChartSeries<TRow>[],
|
|
219
|
-
hidden: ReadonlySet<string>,
|
|
220
|
-
): SeriesChartSeries<TRow>[] {
|
|
221
|
-
return series
|
|
222
|
-
.map((entry, index) => ({ ...entry, color: entry.color ?? paletteFor(index) }))
|
|
223
|
-
.filter((entry) => !hidden.has(entry.key));
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/** Where a category or time chart keeps each row's plotted position. Not the caller's
|
|
227
|
-
* key: that one still holds their own value, which `format` and a hit hand back. */
|
|
228
|
-
const PLOTTED_X = "__seriesChartX";
|
|
229
|
-
|
|
230
|
-
/** A finite number, or `undefined` — the only thing a row cell counts as a sample. */
|
|
231
|
-
export const finite = (value: unknown): number | undefined =>
|
|
232
|
-
typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
233
|
-
|
|
234
|
-
/** A time value as epoch ms. A date-only ISO string is LOCAL midnight (see
|
|
235
|
-
* `SeriesChartX.type`); anything unreadable is `undefined`, i.e. not plotted. */
|
|
236
|
-
function toTime(value: unknown): number | undefined {
|
|
237
|
-
if (value instanceof Date) return finite(value.getTime());
|
|
238
|
-
if (typeof value === "number") return finite(value);
|
|
239
|
-
if (typeof value !== "string") return undefined;
|
|
240
|
-
const day = /^(\d{4})-(\d{2})(?:-(\d{2}))?$/.exec(value);
|
|
241
|
-
if (day) return new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3] ?? 1)).getTime();
|
|
242
|
-
return finite(Date.parse(value));
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/** A category's identity, so a Date matches another Date of the same instant. */
|
|
246
|
-
const categoryId = (value: unknown) =>
|
|
247
|
-
value instanceof Date ? `d:${value.getTime()}` : `${typeof value}:${String(value)}`;
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* The abscissa, reduced to a number line — which is all the plot, the ticks and the
|
|
251
|
-
* zoom ever deal in. A number stays itself; a category becomes its slot index; a time
|
|
252
|
-
* its epoch ms. Everything the caller sees (ticks, tooltip, hits) is turned back.
|
|
253
|
-
*/
|
|
254
|
-
export interface XModel {
|
|
255
|
-
kind: "number" | "category" | "time";
|
|
256
|
-
/** The caller's key, still holding their value. */
|
|
257
|
-
sourceKey: string;
|
|
258
|
-
/** The key the plot reads. The same as `sourceKey` on a number line. */
|
|
259
|
-
plotKey: string;
|
|
260
|
-
/** The rows as plotted. The caller's own on a number line. */
|
|
261
|
-
rows: readonly SeriesChartRow[];
|
|
262
|
-
/** The caller's rows, which dots and hits hand back. */
|
|
263
|
-
source: readonly SeriesChartRow[];
|
|
264
|
-
position: (value: unknown) => number | undefined;
|
|
265
|
-
valueAt: (position: number) => SeriesChartXValue;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
export function xModel(rows: readonly SeriesChartRow[], x: SeriesChartX): XModel {
|
|
269
|
-
const sourceKey = x.key ?? "x";
|
|
270
|
-
if (x.type === "category") {
|
|
271
|
-
const slots = new Map<string, number>();
|
|
272
|
-
rows.forEach((row, index) => {
|
|
273
|
-
const id = categoryId(row[sourceKey]);
|
|
274
|
-
if (!slots.has(id)) slots.set(id, index);
|
|
275
|
-
});
|
|
276
|
-
return {
|
|
277
|
-
kind: "category",
|
|
278
|
-
sourceKey,
|
|
279
|
-
plotKey: PLOTTED_X,
|
|
280
|
-
rows: rows.map((row, index) => ({ ...row, [PLOTTED_X]: index })),
|
|
281
|
-
source: rows,
|
|
282
|
-
position: (value) => slots.get(categoryId(value)),
|
|
283
|
-
valueAt: (position) => rows[Math.round(position)]?.[sourceKey] as SeriesChartXValue,
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
if (x.type === "time") {
|
|
287
|
-
return {
|
|
288
|
-
kind: "time",
|
|
289
|
-
sourceKey,
|
|
290
|
-
plotKey: PLOTTED_X,
|
|
291
|
-
rows: rows.map((row) => ({ ...row, [PLOTTED_X]: toTime(row[sourceKey]) })),
|
|
292
|
-
source: rows,
|
|
293
|
-
position: toTime,
|
|
294
|
-
valueAt: (position) => new Date(position),
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
return {
|
|
298
|
-
kind: "number",
|
|
299
|
-
sourceKey,
|
|
300
|
-
plotKey: sourceKey,
|
|
301
|
-
rows,
|
|
302
|
-
source: rows,
|
|
303
|
-
position: finite,
|
|
304
|
-
valueAt: (position) => position,
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/** Caller ticks, as positions inside the domain on show. */
|
|
309
|
-
export function resolveTicks<T>(
|
|
310
|
-
values: SeriesChartTickValues<T> | undefined,
|
|
311
|
-
domain: [number, number] | undefined,
|
|
312
|
-
position: (value: T) => number | undefined,
|
|
313
|
-
): number[] | undefined {
|
|
314
|
-
if (!values || !domain) return undefined;
|
|
315
|
-
const list = typeof values === "function" ? values(domain) : values;
|
|
316
|
-
if (!list) return undefined;
|
|
317
|
-
const slack = (domain[1] - domain[0]) * 1e-9;
|
|
318
|
-
return list
|
|
319
|
-
.map(position)
|
|
320
|
-
.filter((at): at is number => at !== undefined && at >= domain[0] - slack && at <= domain[1] + slack);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/** A low/high pair widened by some values, or `undefined` if there is still none. */
|
|
324
|
-
export function extend(
|
|
325
|
-
span: readonly [number, number] | undefined,
|
|
326
|
-
values: readonly (number | undefined)[],
|
|
327
|
-
): [number, number] | undefined {
|
|
328
|
-
let out: [number, number] | undefined = span ? [span[0], span[1]] : undefined;
|
|
329
|
-
for (const value of values) {
|
|
330
|
-
if (value === undefined || !Number.isFinite(value)) continue;
|
|
331
|
-
out = out ? [Math.min(out[0], value), Math.max(out[1], value)] : [value, value];
|
|
332
|
-
}
|
|
333
|
-
return out;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/** How a time tick is written, by what one step of the ticks is. */
|
|
337
|
-
export const TIME_TICK_FORMAT: Record<TimeTickUnit, Intl.DateTimeFormatOptions> = {
|
|
338
|
-
hour: { hour: "2-digit", minute: "2-digit" },
|
|
339
|
-
day: { day: "numeric", month: "short" },
|
|
340
|
-
month: { month: "short", year: "2-digit" },
|
|
341
|
-
year: { year: "numeric" },
|
|
342
|
-
};
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
// The axis budget of a series chart: which of its y axes are drawn, when there are more
|
|
2
|
-
// than the width can carry. Pure, and apart from the chart, so the rule is tested on
|
|
3
|
-
// numbers rather than on a jsdom that has no layout to measure.
|
|
4
|
-
//
|
|
5
|
-
// lenkbank's curve plot declares four visible axes — velocity, position and acceleration
|
|
6
|
-
// on the left, loads on the right — and every one reserves its band of ticks and title.
|
|
7
|
-
// At 1280 px that is a quarter of the card; at 390 px it is all of it, and the plot the
|
|
8
|
-
// axes are for is ten pixels wide. An axis over budget is drawn the way a `hide: true`
|
|
9
|
-
// one always was: it still scales its lines (and the zoom still refits it), but it draws
|
|
10
|
-
// no ticks, no title, and reserves no width.
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* How many y axes a chart draws. A number caps the TOTAL; `{ left, right }` caps each
|
|
14
|
-
* side (a side left out is not capped). Axes over the cap are hidden in declaration
|
|
15
|
-
* order — the first of each side is the last to go, see {@link budgetedAxes}.
|
|
16
|
-
*/
|
|
17
|
-
export type SeriesChartAxisBudget = number | { left?: number; right?: number };
|
|
18
|
-
|
|
19
|
-
/** The part of an axis the budget reads. */
|
|
20
|
-
interface BudgetAxis {
|
|
21
|
-
id: string;
|
|
22
|
-
orientation?: "left" | "right";
|
|
23
|
-
hide?: boolean;
|
|
24
|
-
title?: string;
|
|
25
|
-
width?: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* The narrowest the plot may get before the automatic budget steps in, in px at Normal —
|
|
30
|
-
* × the text size's scale since 0.32 (see {@link autoAxisBudget}).
|
|
31
|
-
*
|
|
32
|
-
* About a phone's plot with one axis a side (390 px viewport, card padding, two bands
|
|
33
|
-
* of 48 + 16), where a curve's shape still reads. It is the point below which the chart
|
|
34
|
-
* is already broken today — a plot the width of a thumb between four columns of numbers
|
|
35
|
-
* — so the rule changes nothing that was working.
|
|
36
|
-
*/
|
|
37
|
-
export const MIN_PLOT_WIDTH = 160;
|
|
38
|
-
|
|
39
|
-
/** The budget the automatic rule applies: one axis a side. */
|
|
40
|
-
export const NARROW_AXIS_BUDGET: SeriesChartAxisBudget = { left: 1, right: 1 };
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* The automatic rule's second step: the left axis alone — for a chart with an axis on
|
|
44
|
-
* each side that even one a side leaves too little plot (0.32, see {@link autoAxisBudget}).
|
|
45
|
-
*/
|
|
46
|
-
export const LEFT_AXIS_BUDGET: SeriesChartAxisBudget = { left: 1, right: 0 };
|
|
47
|
-
|
|
48
|
-
/** The plot's margin on a side no axis band covers — `SeriesPlot`'s own. */
|
|
49
|
-
const BARE_SIDE_MARGIN = 10;
|
|
50
|
-
|
|
51
|
-
const sideOf = (axis: BudgetAxis) => axis.orientation ?? "left";
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* The ids of the VISIBLE axes a budget hides — axes already `hide: true` are neither
|
|
55
|
-
* counted nor returned. Empty for no budget.
|
|
56
|
-
*
|
|
57
|
-
* Kept, in order of priority: the first visible axis of each side (in declaration order,
|
|
58
|
-
* so the axis a caller lists first — the one the grid hangs its rules off — always
|
|
59
|
-
* stays), then the rest in declaration order, until the cap. Per side, that is simply the
|
|
60
|
-
* first `left` left-hand axes and the first `right` right-hand ones.
|
|
61
|
-
*/
|
|
62
|
-
export function budgetedAxes(axes: readonly BudgetAxis[], budget: SeriesChartAxisBudget | undefined): string[] {
|
|
63
|
-
if (budget === undefined) return [];
|
|
64
|
-
const visible = axes.filter((axis) => !axis.hide);
|
|
65
|
-
if (typeof budget === "number") {
|
|
66
|
-
const cap = Math.max(0, Math.floor(budget));
|
|
67
|
-
const firsts = new Set<string>();
|
|
68
|
-
const seen = new Set<string>();
|
|
69
|
-
for (const axis of visible) {
|
|
70
|
-
if (!seen.has(sideOf(axis))) firsts.add(axis.id);
|
|
71
|
-
seen.add(sideOf(axis));
|
|
72
|
-
}
|
|
73
|
-
const priority = [
|
|
74
|
-
...visible.filter((axis) => firsts.has(axis.id)),
|
|
75
|
-
...visible.filter((axis) => !firsts.has(axis.id)),
|
|
76
|
-
];
|
|
77
|
-
const kept = new Set(priority.slice(0, cap).map((axis) => axis.id));
|
|
78
|
-
return visible.filter((axis) => !kept.has(axis.id)).map((axis) => axis.id);
|
|
79
|
-
}
|
|
80
|
-
const used = { left: 0, right: 0 };
|
|
81
|
-
const out: string[] = [];
|
|
82
|
-
for (const axis of visible) {
|
|
83
|
-
const side = sideOf(axis);
|
|
84
|
-
const cap = budget[side];
|
|
85
|
-
if (cap !== undefined && used[side] >= Math.max(0, Math.floor(cap))) out.push(axis.id);
|
|
86
|
-
else used[side] += 1;
|
|
87
|
-
}
|
|
88
|
-
return out;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* The automatic budget for a chart `width` px wide, in two steps — each taken only when
|
|
93
|
-
* the plot would otherwise be narrower than {@link MIN_PLOT_WIDTH} × `scale`:
|
|
94
|
-
*
|
|
95
|
-
* 1. {@link NARROW_AXIS_BUDGET}, one axis a side, when some side draws more than one
|
|
96
|
-
* (lenkbank's four-axis curve plot on a phone);
|
|
97
|
-
* 2. {@link LEFT_AXIS_BUDGET}, the left axis alone, when the chart has an axis on EACH
|
|
98
|
-
* side and one a side still leaves the plot too narrow (0.32,
|
|
99
|
-
* docs/text-size-harmonization.md §4, §10.10). At 150 % a 390 px phone's two bands
|
|
100
|
-
* are 96 px each and the plot kept about 80 px. The right-hand axis is the secondary
|
|
101
|
-
* one — the grid hangs its rules off the left — so it goes: its lines keep their own
|
|
102
|
-
* scale, and its unit moves into the tooltip, the readout and the legend
|
|
103
|
-
* ({@link axisUnit}, `seriesLegendEntries`), where its values stay readable.
|
|
104
|
-
*
|
|
105
|
-
* `scale` is the text size's (`useTextSize().scale`): the bands grow with the type
|
|
106
|
-
* (`bandWidth` is handed the scaled ones), and so does the floor (§3.2, "a chart's axis
|
|
107
|
-
* width and tick spacing are multiplied by `scale`") — the room a curve needs between
|
|
108
|
-
* labels grows with the labels.
|
|
109
|
-
*
|
|
110
|
-
* `undefined` when neither step is needed, for a single-axis chart (a facing pair's two
|
|
111
|
-
* charts each have one) and for a width that is not known (no layout, no
|
|
112
|
-
* `ResizeObserver`).
|
|
113
|
-
*
|
|
114
|
-
* Decided on the CHART's width and the axes as declared, never on the plot the budget
|
|
115
|
-
* produced, so hiding an axis cannot widen the plot back over the line and bring it
|
|
116
|
-
* back: the rule has no feedback to oscillate on.
|
|
117
|
-
*/
|
|
118
|
-
export function autoAxisBudget(
|
|
119
|
-
axes: readonly BudgetAxis[],
|
|
120
|
-
width: number | undefined,
|
|
121
|
-
bandWidth: (axis: BudgetAxis) => number,
|
|
122
|
-
scale = 1,
|
|
123
|
-
): SeriesChartAxisBudget | undefined {
|
|
124
|
-
if (width === undefined || !(width > 0)) return undefined;
|
|
125
|
-
const visible = axes.filter((axis) => !axis.hide);
|
|
126
|
-
const left = visible.filter((axis) => sideOf(axis) === "left");
|
|
127
|
-
const right = visible.filter((axis) => sideOf(axis) === "right");
|
|
128
|
-
const floor = MIN_PLOT_WIDTH * scale;
|
|
129
|
-
/** The plot's width with `drawn` axes drawn: what their bands and the bare sides leave. */
|
|
130
|
-
const plot = (drawn: readonly BudgetAxis[]) => {
|
|
131
|
-
const onLeft = drawn.some((axis) => sideOf(axis) === "left");
|
|
132
|
-
const onRight = drawn.some((axis) => sideOf(axis) === "right");
|
|
133
|
-
const bands = drawn.reduce((sum, axis) => sum + bandWidth(axis), 0);
|
|
134
|
-
return width - bands - (onLeft ? 0 : BARE_SIDE_MARGIN) - (onRight ? 0 : BARE_SIDE_MARGIN);
|
|
135
|
-
};
|
|
136
|
-
if (left.length && right.length && plot([left[0], right[0]]) < floor) return LEFT_AXIS_BUDGET;
|
|
137
|
-
if (left.length <= 1 && right.length <= 1) return undefined;
|
|
138
|
-
return plot(visible) < floor ? NARROW_AXIS_BUDGET : undefined;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* The unit an axis' series say when the axis is not drawn: its `unit`, or else the
|
|
143
|
-
* parenthesised tail of its title — "Load (N)" says "N", which is how the apps write
|
|
144
|
-
* every axis title. `undefined` when neither says one.
|
|
145
|
-
*/
|
|
146
|
-
export function axisUnit(axis: { unit?: string; title?: string }): string | undefined {
|
|
147
|
-
if (axis.unit !== undefined) return axis.unit || undefined;
|
|
148
|
-
const tail = /\(([^()]+)\)\s*$/.exec(axis.title ?? "");
|
|
149
|
-
return tail?.[1].trim() || undefined;
|
|
150
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// All user-facing strings for the series chart family — `SeriesChart`, its drag-to-zoom
|
|
2
|
-
// layer and `ToggleLegend` — as the `seriesChart` namespace of `<UiKitProvider labels>`,
|
|
3
|
-
// and per chart the `labels` prop over that.
|
|
4
|
-
//
|
|
5
|
-
// A module of its own, with no recharts in it, so the label registry (src/i18n) can
|
|
6
|
-
// import the defaults without pulling the chart library in behind them.
|
|
7
|
-
|
|
8
|
-
export interface SeriesChartLabels {
|
|
9
|
-
/** The button that puts a zoomed chart back to its full extent. Visible text. */
|
|
10
|
-
resetZoom: string;
|
|
11
|
-
/** The drag-to-zoom gesture, said at the end of a zoomable chart's description (the
|
|
12
|
-
* figure's `aria-describedby`; until 0.52 the name of the drag surface, an
|
|
13
|
-
* `application` nothing could focus). It is the only place the gesture is explained,
|
|
14
|
-
* so it says how the drag is read and how to undo it. */
|
|
15
|
-
zoomHint: string;
|
|
16
|
-
/** What a chart with nothing to draw says, when the caller passes no `empty`. */
|
|
17
|
-
empty: string;
|
|
18
|
-
/** Accessible name of a `ToggleLegend` — a group of switches, one per series. */
|
|
19
|
-
legend: string;
|
|
20
|
-
/** Accessible name of the group of keyboard stops a chart lays over its bars or
|
|
21
|
-
* periods — one tab stop, arrow keys between them; buttons with `onPointClick`, and
|
|
22
|
-
* since 0.52 images to read without. */
|
|
23
|
-
points: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export const DEFAULT_SERIES_CHART_LABELS: SeriesChartLabels = {
|
|
27
|
-
resetZoom: "Reset zoom",
|
|
28
|
-
zoomHint:
|
|
29
|
-
"Drag to zoom: a roughly square selection zooms both axes, a long thin one only its own. Double-click to reset.",
|
|
30
|
-
empty: "No data",
|
|
31
|
-
legend: "Series",
|
|
32
|
-
points: "Chart values",
|
|
33
|
-
};
|