@eifi1/ui-kit 0.51.7 → 0.53.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 +178 -67
- package/dist/account/account-parts.d.ts +10 -8
- package/dist/account/account-parts.js +1 -18
- package/dist/account/account-parts.js.map +1 -1
- package/dist/account/data-export-setting-labels.js +1 -1
- package/dist/account/data-export-setting-labels.js.map +1 -1
- package/dist/account/delete-account-setting-labels.js +1 -1
- package/dist/account/delete-account-setting-labels.js.map +1 -1
- package/dist/account/email-change-setting-labels.js +1 -1
- package/dist/account/email-change-setting-labels.js.map +1 -1
- package/dist/account/passkeys-setting.d.ts +9 -2
- package/dist/account/passkeys-setting.js +41 -29
- package/dist/account/passkeys-setting.js.map +1 -1
- package/dist/account/sessions-setting.d.ts +3 -2
- package/dist/account/sessions-setting.js +10 -8
- package/dist/account/sessions-setting.js.map +1 -1
- package/dist/admin/admin-action-confirm.js +1 -3
- package/dist/admin/admin-action-confirm.js.map +1 -1
- package/dist/admin/admin-parts.d.ts +6 -3
- package/dist/admin/admin-parts.js +6 -21
- package/dist/admin/admin-parts.js.map +1 -1
- package/dist/admin/mail-test-card-labels.js +1 -1
- package/dist/admin/mail-test-card-labels.js.map +1 -1
- package/dist/admin/plan-change-labels.d.ts +2 -2
- package/dist/admin/plan-change-labels.js +1 -17
- package/dist/admin/plan-change-labels.js.map +1 -1
- package/dist/admin/plan-change.d.ts +3 -42
- package/dist/admin/plan-change.js +1 -1
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/reviewer-scope-editor.js +3 -3
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/auth/auth-errors-labels.d.ts +11 -0
- package/dist/auth/auth-errors-labels.js +13 -0
- package/dist/auth/auth-errors-labels.js.map +1 -0
- package/dist/auth/auth-errors.d.ts +7 -23
- package/dist/auth/auth-errors.js +2 -15
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/complete-name-dialog.js +2 -1
- package/dist/auth/complete-name-dialog.js.map +1 -1
- package/dist/auth/forgot-password-form-labels.js +1 -1
- package/dist/auth/forgot-password-form-labels.js.map +1 -1
- package/dist/auth/forgot-password-form.js +7 -2
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/register-form-labels.js +1 -1
- package/dist/auth/register-form-labels.js.map +1 -1
- package/dist/auth/reset-password-form-labels.js +1 -1
- package/dist/auth/reset-password-form-labels.js.map +1 -1
- package/dist/auth/reset-password-form.js +5 -1
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form-labels.js +1 -1
- package/dist/auth/sign-in-form-labels.js.map +1 -1
- package/dist/auth/status-parts.d.ts +0 -3
- package/dist/auth/status-parts.js +0 -4
- package/dist/auth/status-parts.js.map +1 -1
- package/dist/auth/verify-email-labels.js +1 -1
- package/dist/auth/verify-email-labels.js.map +1 -1
- package/dist/auth/verify-email.js +7 -2
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/cancel-subscription.d.ts +10 -7
- package/dist/billing/cancel-subscription.js +6 -6
- package/dist/billing/cancel-subscription.js.map +1 -1
- package/dist/billing/plan-card.d.ts +5 -3
- package/dist/billing/plan-card.js +7 -8
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-change-labels.d.ts +42 -0
- package/dist/billing/plan-change-labels.js +22 -0
- package/dist/billing/plan-change-labels.js.map +1 -0
- package/dist/billing/plan-switch.d.ts +9 -6
- package/dist/billing/plan-switch.js +7 -5
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/chart.d.ts +4 -3
- package/dist/chart.js +72 -4
- package/dist/chart.js.map +1 -1
- package/dist/components/account-chips.d.ts +5 -5
- package/dist/components/account-chips.js +11 -13
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.d.ts +16 -5
- package/dist/components/alert-banner.js +46 -1
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +13 -0
- package/dist/components/amount-input.js +1 -0
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.js +57 -65
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.d.ts +12 -2
- package/dist/components/bulk-action-bar.js +65 -21
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-look.d.ts +5 -5
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/button.d.ts +2 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/chart-edge.d.ts +16 -0
- package/dist/components/chart-edge.js +14 -1
- package/dist/components/chart-edge.js.map +1 -1
- package/dist/components/chart-figure.d.ts +13 -0
- package/dist/components/chart-figure.js +15 -0
- package/dist/components/chart-figure.js.map +1 -0
- package/dist/components/chart-zoom-core.js +1 -4
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/chart.d.ts +8 -1
- package/dist/components/chart.js +19 -10
- package/dist/components/chart.js.map +1 -1
- package/dist/components/combobox-core.d.ts +111 -2
- package/dist/components/combobox-core.js +148 -42
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +1 -1
- package/dist/components/combobox.js +141 -130
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/copy-button.d.ts +6 -5
- package/dist/components/copy-button.js +5 -3
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.js +2 -2
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/data-table-column-settings.d.ts +1 -1
- package/dist/components/data-table-column-settings.js +33 -7
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +4 -2
- package/dist/components/data-table-filters.js +2 -2
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.d.ts +6 -4
- package/dist/components/data-table-fit.js +4 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-groups.d.ts +1 -1
- package/dist/components/data-table-groups.js.map +1 -1
- package/dist/components/data-table-head.d.ts +1 -1
- package/dist/components/data-table-head.js +15 -12
- package/dist/components/data-table-head.js.map +1 -1
- package/dist/components/data-table-mobile.d.ts +12 -7
- package/dist/components/data-table-mobile.js +43 -30
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table-pagination.js +11 -6
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-resize.d.ts +1 -1
- package/dist/components/data-table-resize.js.map +1 -1
- package/dist/components/data-table-row-actions.d.ts +2 -2
- package/dist/components/data-table-row-actions.js.map +1 -1
- package/dist/components/data-table-row.d.ts +6 -2
- package/dist/components/data-table-row.js +17 -10
- package/dist/components/data-table-row.js.map +1 -1
- package/dist/components/data-table-selection.d.ts +1 -1
- package/dist/components/data-table-selection.js.map +1 -1
- package/dist/components/data-table-shared.d.ts +10 -2
- package/dist/components/data-table-shared.js +18 -0
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table-sort.d.ts +21 -2
- package/dist/components/data-table-sort.js +24 -0
- package/dist/components/data-table-sort.js.map +1 -1
- package/dist/components/data-table-virtual.d.ts +1 -1
- package/dist/components/data-table-virtual.js +18 -6
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/data-table.d.ts +13 -4
- package/dist/components/data-table.js +139 -36
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-field.d.ts +25 -3
- package/dist/components/date-field.js +33 -8
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.d.ts +16 -3
- package/dist/components/date-picker.js +55 -26
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.d.ts +38 -24
- package/dist/components/date-range-picker.js +23 -7
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/error-boundary.js +37 -30
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
- package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
- package/dist/components/field-base-labels.js.map +1 -0
- package/dist/components/field-base.d.ts +4 -3
- package/dist/components/field-base.js +3 -3
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/form-actions.js +11 -5
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/hover-menu.d.ts +3 -0
- package/dist/components/hover-menu.js +5 -3
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-button.js +14 -9
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/inline-confirm.d.ts +43 -0
- package/dist/components/inline-confirm.js +67 -0
- package/dist/components/inline-confirm.js.map +1 -0
- package/dist/components/inline-entity-combobox.d.ts +4 -3
- package/dist/components/inline-entity-combobox.js +148 -140
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +28 -112
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal-page.d.ts +3 -1
- package/dist/components/legal-page.js +3 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +4 -2
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox.d.ts +2 -2
- package/dist/components/lightbox.js +17 -6
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/list.d.ts +6 -2
- package/dist/components/list.js +3 -2
- package/dist/components/list.js.map +1 -1
- package/dist/components/measured-grid.d.ts +1 -1
- package/dist/components/measured-grid.js +2 -1
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/mini-calendar.js +3 -5
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.js +3 -1
- package/dist/components/modal.js.map +1 -1
- package/dist/components/month-grid.d.ts +55 -0
- package/dist/components/month-grid.js +148 -0
- package/dist/components/month-grid.js.map +1 -0
- package/dist/components/month-picker.d.ts +36 -4
- package/dist/components/month-picker.js +123 -146
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-select.d.ts +2 -2
- package/dist/components/multi-select.js +11 -6
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/nav-pills.d.ts +1 -1
- package/dist/components/nav-pills.js.map +1 -1
- package/dist/components/picker-sheet.js +2 -1
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart-labels.d.ts +7 -0
- package/dist/components/pie-chart-labels.js +1 -0
- package/dist/components/pie-chart-labels.js.map +1 -1
- package/dist/components/pie-chart.d.ts +5 -3
- package/dist/components/pie-chart.js +7 -22
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.d.ts +3 -0
- package/dist/components/popover.js +7 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/row-actions.js +2 -1
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/series-chart-axes.d.ts +4 -4
- package/dist/components/series-chart-axes.js.map +1 -1
- package/dist/components/series-chart-labels.d.ts +7 -4
- package/dist/components/series-chart-labels.js.map +1 -1
- package/dist/components/series-chart.d.ts +92 -23
- package/dist/components/series-chart.js +74 -30
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/share-card.js +3 -3
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/tabs-labels.d.ts +2 -0
- package/dist/components/tabs-labels.js +11 -0
- package/dist/components/tabs-labels.js.map +1 -0
- package/dist/components/tabs.d.ts +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/toggle-legend.d.ts +2 -2
- package/dist/components/toggle-legend.js +6 -6
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/translation-review-editor.d.ts +4 -2
- package/dist/components/translation-review-editor.js +2 -3
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review.d.ts +2 -1
- package/dist/components/translation-review.js +2 -2
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/treemap-labels.d.ts +31 -0
- package/dist/components/treemap-labels.js +10 -0
- package/dist/components/treemap-labels.js.map +1 -0
- package/dist/components/treemap-layout.d.ts +62 -0
- package/dist/components/treemap-layout.js +126 -0
- package/dist/components/treemap-layout.js.map +1 -0
- package/dist/components/treemap.d.ts +167 -19
- package/dist/components/treemap.js +340 -100
- package/dist/components/treemap.js.map +1 -1
- package/dist/components/use-table-state.d.ts +5 -5
- package/dist/components/use-table-state.js +4 -1
- package/dist/components/use-table-state.js.map +1 -1
- package/dist/data-table.d.ts +1 -2
- package/dist/data-table.js +1 -4
- package/dist/data-table.js.map +1 -1
- package/dist/demo/demo-countdown.d.ts +0 -5
- package/dist/demo/demo-countdown.js +0 -4
- package/dist/demo/demo-countdown.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/eslint/role-utilities.d.ts +36 -7
- package/dist/eslint/role-utilities.js +42 -9
- package/dist/eslint/role-utilities.js.map +1 -1
- package/dist/feedback/feedback-dialog.d.ts +25 -16
- package/dist/feedback/feedback-dialog.js +6 -2
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-mutation.d.ts +18 -0
- package/dist/feedback/feedback-mutation.js +8 -0
- package/dist/feedback/feedback-mutation.js.map +1 -0
- package/dist/feedback/feedback-page-link.d.ts +53 -0
- package/dist/feedback/feedback-page-link.js +37 -0
- package/dist/feedback/feedback-page-link.js.map +1 -0
- package/dist/feedback/feedback-public-list.d.ts +8 -4
- package/dist/feedback/feedback-public-list.js +2 -2
- package/dist/feedback/feedback-public-list.js.map +1 -1
- package/dist/feedback/feedback-replies.d.ts +3 -1
- package/dist/feedback/feedback-replies.js +5 -4
- package/dist/feedback/feedback-replies.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.js +0 -3
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +33 -44
- package/dist/feedback/feedback-row-detail.js +28 -34
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.d.ts +17 -14
- package/dist/feedback/feedback-status-undo.js +10 -15
- package/dist/feedback/feedback-status-undo.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
- package/dist/feedback/feedback-submit-dialog.js +1 -1
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-submit.js +9 -3
- package/dist/feedback/feedback-submit.js.map +1 -1
- package/dist/feedback/feedback-swipe.d.ts +1 -1
- package/dist/feedback/feedback-swipe.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +21 -9
- package/dist/feedback/feedback-table.js +45 -25
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread-labels.d.ts +2 -2
- package/dist/feedback/feedback-thread-labels.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +15 -23
- package/dist/feedback/feedback-thread.js +2 -1
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback.d.ts +6 -6
- package/dist/feedback.js +90 -6
- package/dist/feedback.js.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts +35 -0
- package/dist/hooks/use-focus-trap.js +6 -4
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-hotkey.d.ts +5 -2
- package/dist/hooks/use-hotkey.js +5 -4
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-long-press.d.ts +7 -4
- package/dist/hooks/use-long-press.js +3 -0
- package/dist/hooks/use-long-press.js.map +1 -1
- package/dist/hooks/use-media-query.js +12 -4
- package/dist/hooks/use-media-query.js.map +1 -1
- package/dist/hooks/use-mounted.d.ts +22 -0
- package/dist/hooks/use-mounted.js +24 -0
- package/dist/hooks/use-mounted.js.map +1 -0
- package/dist/hooks/use-overlay-history.js +19 -3
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/defaults.js +4 -9
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +7 -18
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +9 -11
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +15 -64
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +7 -18
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +20 -27
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +9 -18
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +7 -19
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +8 -18
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +12 -2
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js +0 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +21 -23
- package/dist/index.js +50 -65
- package/dist/index.js.map +1 -1
- package/dist/landing/routing.d.ts +3 -1
- package/dist/landing/routing.js +4 -7
- package/dist/landing/routing.js.map +1 -1
- package/dist/lib/broadcast.d.ts +17 -0
- package/dist/lib/broadcast.js +30 -0
- package/dist/lib/broadcast.js.map +1 -0
- package/dist/lib/date-format.d.ts +37 -2
- package/dist/lib/date-format.js +34 -8
- package/dist/lib/date-format.js.map +1 -1
- package/dist/lib/day-format.d.ts +46 -0
- package/dist/lib/day-format.js +46 -0
- package/dist/lib/day-format.js.map +1 -0
- package/dist/lib/describe-failure.d.ts +14 -0
- package/dist/lib/describe-failure.js +9 -0
- package/dist/lib/describe-failure.js.map +1 -0
- package/dist/lib/direction.d.ts +16 -0
- package/dist/lib/direction.js +9 -1
- package/dist/lib/direction.js.map +1 -1
- package/dist/lib/focus-left.d.ts +63 -0
- package/dist/lib/focus-left.js +67 -0
- package/dist/lib/focus-left.js.map +1 -0
- package/dist/lib/format.js +5 -14
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/http-status.d.ts +24 -0
- package/dist/lib/http-status.js +14 -0
- package/dist/lib/http-status.js.map +1 -0
- package/dist/lib/intl-cache.d.ts +14 -0
- package/dist/lib/intl-cache.js +15 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/iso-day.d.ts +11 -0
- package/dist/lib/iso-day.js +8 -0
- package/dist/lib/iso-day.js.map +1 -0
- package/dist/lib/lazy-with-fallback.d.ts +31 -0
- package/dist/lib/lazy-with-fallback.js +40 -0
- package/dist/lib/lazy-with-fallback.js.map +1 -0
- package/dist/lib/path-pattern.d.ts +34 -0
- package/dist/lib/path-pattern.js +24 -0
- package/dist/lib/path-pattern.js.map +1 -0
- package/dist/lib/reduced-motion.d.ts +2 -1
- package/dist/lib/reduced-motion.js.map +1 -1
- package/dist/lib/round.d.ts +2 -1
- package/dist/lib/round.js +2 -1
- package/dist/lib/round.js.map +1 -1
- package/dist/lib/safe-storage.d.ts +24 -5
- package/dist/lib/safe-storage.js +27 -2
- package/dist/lib/safe-storage.js.map +1 -1
- package/dist/lib/session-refresh.js +1 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/share-format.d.ts +13 -0
- package/dist/lib/share-format.js +10 -0
- package/dist/lib/share-format.js.map +1 -0
- package/dist/lib/text-case.d.ts +17 -0
- package/dist/lib/text-case.js +8 -0
- package/dist/lib/text-case.js.map +1 -0
- package/dist/lib/text-match.d.ts +29 -0
- package/dist/lib/text-match.js +20 -2
- package/dist/lib/text-match.js.map +1 -1
- package/dist/lib/thenable.d.ts +13 -0
- package/dist/lib/thenable.js +8 -0
- package/dist/lib/thenable.js.map +1 -0
- package/dist/lib/translation-review.d.ts +7 -2
- package/dist/lib/translation-review.js +4 -4
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/notifications/device-zone-report.js +1 -1
- package/dist/notifications/device-zone-report.js.map +1 -1
- package/dist/notifications/notification-bell.d.ts +2 -1
- package/dist/notifications/notification-bell.js +3 -3
- package/dist/notifications/notification-bell.js.map +1 -1
- package/dist/notifications/notification-inbox.d.ts +10 -6
- package/dist/notifications/notification-inbox.js +26 -48
- package/dist/notifications/notification-inbox.js.map +1 -1
- package/dist/notifications/notification-parts.d.ts +3 -2
- package/dist/notifications/notification-parts.js +1 -3
- package/dist/notifications/notification-parts.js.map +1 -1
- package/dist/notifications/notification-types-setting.js +1 -1
- package/dist/notifications/notification-types-setting.js.map +1 -1
- package/dist/notifications/notifications-labels.d.ts +6 -0
- package/dist/notifications/notifications-labels.js +1 -0
- package/dist/notifications/notifications-labels.js.map +1 -1
- package/dist/notifications/push-device-setting.js +1 -1
- package/dist/notifications/push-device-setting.js.map +1 -1
- package/dist/notifications/push-devices-setting.d.ts +2 -1
- package/dist/notifications/push-devices-setting.js +27 -49
- package/dist/notifications/push-devices-setting.js.map +1 -1
- package/dist/notifications/quiet-hours-setting.d.ts +10 -3
- package/dist/notifications/quiet-hours-setting.js +65 -26
- package/dist/notifications/quiet-hours-setting.js.map +1 -1
- package/dist/notifications/unsubscribe-panel.js +4 -7
- package/dist/notifications/unsubscribe-panel.js.map +1 -1
- package/dist/notifications/use-push-device.d.ts +39 -1
- package/dist/notifications/use-push-device.js +28 -7
- package/dist/notifications/use-push-device.js.map +1 -1
- package/dist/offline/query-persistence.d.ts +3 -1
- package/dist/offline/query-persistence.js +19 -2
- package/dist/offline/query-persistence.js.map +1 -1
- package/dist/rhf/fields.d.ts +11 -4
- package/dist/rhf/fields.js.map +1 -1
- package/dist/search/command-palette.js +1 -1
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search.js +19 -9
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/search-index.d.ts +0 -6
- package/dist/search/search-index.js +0 -4
- package/dist/search/search-index.js.map +1 -1
- package/dist/search/use-command-key.d.ts +12 -1
- package/dist/search/use-command-key.js +3 -12
- package/dist/search/use-command-key.js.map +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/search.js +6 -1
- package/dist/search.js.map +1 -1
- package/dist/settings/use-settings-focus.js +1 -0
- package/dist/settings/use-settings-focus.js.map +1 -1
- package/dist/shell/account-menu-language.d.ts +5 -3
- package/dist/shell/account-menu-language.js +2 -2
- package/dist/shell/account-menu-language.js.map +1 -1
- package/dist/shell/account-menu-text-size.d.ts +9 -6
- package/dist/shell/account-menu-text-size.js +2 -2
- package/dist/shell/account-menu-text-size.js.map +1 -1
- package/dist/shell/app-shell.d.ts +0 -10
- package/dist/shell/app-shell.js +1 -7
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/company-switcher.d.ts +1 -1
- package/dist/shell/company-switcher.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +1 -1
- package/dist/shell/dev-menu.js +5 -18
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/top-bar-actions.d.ts +1 -1
- package/dist/shell/top-bar-actions.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.d.ts +1 -3
- package/dist/shell/top-bar-parts-labels.js +0 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell.d.ts +7 -10
- package/dist/shell.js +14 -23
- package/dist/shell.js.map +1 -1
- package/dist/sync/engine.d.ts +30 -4
- package/dist/sync/engine.js +172 -52
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync.d.ts +2 -2
- package/dist/sync.js +2 -10
- package/dist/sync.js.map +1 -1
- package/dist/testing/css-variables.js +3 -8
- package/dist/testing/css-variables.js.map +1 -1
- package/dist/theme/chart-palette.d.ts +0 -5
- package/dist/theme/chart-palette.js +0 -2
- package/dist/theme/chart-palette.js.map +1 -1
- package/dist/theme/contrast.d.ts +2 -1
- package/dist/theme/contrast.js +3 -8
- package/dist/theme/contrast.js.map +1 -1
- package/dist/theme/palette-store.js +6 -6
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js +3 -8
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +3 -6
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/tour/tour-catalogue.d.ts +7 -4
- package/dist/tour/tour-catalogue.js +12 -10
- package/dist/tour/tour-catalogue.js.map +1 -1
- package/dist/tour/tour-dock.d.ts +0 -2
- package/dist/tour/tour-dock.js +0 -2
- package/dist/tour/tour-dock.js.map +1 -1
- package/dist/tour/tour-gates.d.ts +4 -0
- package/dist/tour/tour-gates.js +14 -0
- package/dist/tour/tour-gates.js.map +1 -1
- package/dist/tour/tour-overlay.d.ts +27 -0
- package/dist/tour/tour-overlay.js +741 -0
- package/dist/tour/tour-overlay.js.map +1 -0
- package/dist/tour/tour.d.ts +13 -3
- package/dist/tour/tour.js +59 -781
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour/use-tour-progress.js +1 -1
- package/dist/tour/use-tour-progress.js.map +1 -1
- package/dist/wizard/stepper-nav.d.ts +5 -1
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.d.ts +6 -2
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.d.ts +3 -1
- package/dist/wizard/use-wizard.js.map +1 -1
- package/dist/wizard/validation.d.ts +3 -1
- package/dist/wizard/validation.js.map +1 -1
- package/package.json +10 -6
- package/src/account/account-parts.ts +5 -25
- package/src/account/data-export-setting-labels.ts +1 -1
- package/src/account/delete-account-setting-labels.ts +1 -1
- package/src/account/email-change-setting-labels.ts +1 -1
- package/src/account/passkeys-setting.tsx +60 -38
- package/src/account/sessions-setting.tsx +18 -12
- package/src/admin/admin-action-confirm.tsx +1 -5
- package/src/admin/admin-parts.ts +11 -25
- package/src/admin/mail-test-card-labels.ts +1 -1
- package/src/admin/plan-change-labels.ts +5 -23
- package/src/admin/plan-change.tsx +7 -44
- package/src/admin/reviewer-scope-editor.tsx +3 -3
- package/src/auth/auth-errors-labels.ts +23 -0
- package/src/auth/auth-errors.ts +11 -38
- package/src/auth/complete-name-dialog.tsx +4 -1
- package/src/auth/forgot-password-form-labels.ts +1 -1
- package/src/auth/forgot-password-form.tsx +11 -6
- package/src/auth/register-form-labels.ts +1 -1
- package/src/auth/reset-password-form-labels.ts +1 -1
- package/src/auth/reset-password-form.tsx +8 -4
- package/src/auth/sign-in-form-labels.ts +1 -1
- package/src/auth/status-parts.tsx +0 -6
- package/src/auth/verify-email-labels.ts +1 -1
- package/src/auth/verify-email.tsx +11 -6
- package/src/billing/cancel-subscription.tsx +15 -12
- package/src/billing/plan-card.tsx +18 -10
- package/src/billing/plan-change-labels.ts +66 -0
- package/src/billing/plan-switch.tsx +15 -12
- package/src/chart.ts +73 -6
- package/src/components/account-chips.tsx +20 -23
- package/src/components/alert-banner.tsx +82 -5
- package/src/components/amount-input.tsx +18 -7
- package/src/components/autocomplete.tsx +64 -70
- package/src/components/bulk-action-bar.tsx +70 -2
- package/src/components/button-look.ts +5 -5
- package/src/components/button.tsx +2 -2
- package/src/components/chart-edge.ts +34 -1
- package/src/components/chart-figure.tsx +35 -0
- package/src/components/chart-zoom-core.tsx +6 -5
- package/src/components/chart.tsx +26 -5
- package/src/components/combobox-core.tsx +293 -62
- package/src/components/combobox.tsx +183 -153
- package/src/components/copy-button.tsx +34 -23
- package/src/components/country-select.tsx +16 -11
- package/src/components/data-table-column-settings.tsx +52 -10
- package/src/components/data-table-filters.ts +6 -4
- package/src/components/data-table-fit.ts +19 -5
- package/src/components/data-table-groups.tsx +1 -1
- package/src/components/data-table-head.tsx +32 -22
- package/src/components/data-table-mobile.tsx +61 -26
- package/src/components/data-table-pagination.tsx +21 -6
- package/src/components/data-table-resize.ts +1 -1
- package/src/components/data-table-row-actions.tsx +3 -3
- package/src/components/data-table-row.tsx +25 -14
- package/src/components/data-table-selection.ts +1 -1
- package/src/components/data-table-shared.tsx +33 -1
- package/src/components/data-table-sort.ts +57 -2
- package/src/components/data-table-virtual.ts +32 -8
- package/src/components/data-table.tsx +239 -68
- package/src/components/date-field.tsx +66 -9
- package/src/components/date-picker.tsx +125 -49
- package/src/components/date-range-picker.tsx +71 -36
- package/src/components/error-boundary.tsx +53 -39
- package/src/components/field-base-labels.ts +20 -0
- package/src/components/field-base.tsx +13 -7
- package/src/components/form-actions.tsx +20 -5
- package/src/components/hover-menu.tsx +18 -8
- package/src/components/icon-button.tsx +14 -9
- package/src/components/inline-confirm.tsx +116 -0
- package/src/components/inline-entity-combobox.tsx +197 -153
- package/src/components/input.tsx +1 -1
- package/src/components/jump-calendar.tsx +30 -146
- package/src/components/legal-page.tsx +10 -7
- package/src/components/legal.tsx +4 -2
- package/src/components/lightbox.tsx +21 -8
- package/src/components/list.tsx +10 -4
- package/src/components/measured-grid.tsx +8 -4
- package/src/components/mini-calendar.tsx +6 -5
- package/src/components/modal.tsx +6 -1
- package/src/components/month-grid.tsx +229 -0
- package/src/components/month-picker.tsx +192 -200
- package/src/components/multi-select.tsx +21 -9
- package/src/components/nav-pills.tsx +1 -1
- package/src/components/picker-sheet.tsx +12 -9
- package/src/components/pie-chart-labels.ts +8 -0
- package/src/components/pie-chart.tsx +22 -28
- package/src/components/popover.tsx +18 -1
- package/src/components/row-actions.tsx +2 -1
- package/src/components/series-chart-axes.ts +9 -4
- package/src/components/series-chart-labels.ts +7 -4
- package/src/components/series-chart.tsx +253 -87
- package/src/components/share-card.tsx +6 -6
- package/src/components/tabs-labels.ts +13 -0
- package/src/components/tabs.tsx +2 -2
- package/src/components/toggle-legend.tsx +16 -11
- package/src/components/translation-review-editor.tsx +6 -5
- package/src/components/translation-review.tsx +4 -3
- package/src/components/treemap-labels.ts +47 -0
- package/src/components/treemap-layout.ts +210 -0
- package/src/components/treemap.tsx +780 -138
- package/src/components/use-table-state.ts +12 -9
- package/src/data-table.ts +1 -4
- package/src/demo/demo-countdown.ts +3 -8
- package/src/eslint/role-utilities.ts +97 -19
- package/src/feedback/feedback-dialog.tsx +30 -19
- package/src/feedback/feedback-mutation.ts +20 -0
- package/src/feedback/feedback-page-link.ts +90 -0
- package/src/feedback/feedback-public-list.tsx +13 -7
- package/src/feedback/feedback-replies.tsx +13 -6
- package/src/feedback/feedback-row-detail-labels.ts +0 -3
- package/src/feedback/feedback-row-detail.tsx +70 -84
- package/src/feedback/feedback-status-undo.ts +28 -28
- package/src/feedback/feedback-submit-dialog.tsx +2 -2
- package/src/feedback/feedback-submit.tsx +21 -7
- package/src/feedback/feedback-swipe.tsx +1 -1
- package/src/feedback/feedback-table.tsx +86 -38
- package/src/feedback/feedback-thread-labels.ts +2 -2
- package/src/feedback/feedback-thread.tsx +18 -26
- package/src/feedback.ts +89 -6
- package/src/hooks/use-focus-trap.ts +8 -24
- package/src/hooks/use-hotkey.ts +24 -7
- package/src/hooks/use-long-press.ts +16 -2
- package/src/hooks/use-media-query.ts +20 -4
- package/src/hooks/use-mounted.ts +39 -0
- package/src/hooks/use-overlay-history.ts +32 -3
- package/src/i18n/defaults.ts +4 -9
- package/src/i18n/german.ts +8 -19
- package/src/i18n/kit-labels.tsx +9 -11
- package/src/i18n/locales/es.ts +8 -19
- package/src/i18n/locales/fr.ts +21 -30
- package/src/i18n/locales/hu.ts +10 -19
- package/src/i18n/locales/it.ts +8 -20
- package/src/i18n/locales/zh.ts +9 -19
- package/src/i18n/review.ts +12 -2
- package/src/i18n/shared-labels.ts +0 -1
- package/src/index.ts +57 -49
- package/src/landing/routing.tsx +14 -10
- package/src/lib/broadcast.ts +52 -0
- package/src/lib/date-format.ts +89 -13
- package/src/lib/day-format.ts +96 -0
- package/src/lib/describe-failure.ts +18 -0
- package/src/lib/direction.ts +39 -0
- package/src/lib/focus-left.ts +156 -0
- package/src/lib/format.ts +5 -17
- package/src/lib/http-status.ts +38 -0
- package/src/lib/intl-cache.ts +25 -0
- package/src/lib/iso-day.ts +13 -0
- package/src/lib/lazy-with-fallback.ts +82 -0
- package/src/lib/path-pattern.ts +55 -0
- package/src/lib/reduced-motion.ts +2 -1
- package/src/lib/round.ts +7 -2
- package/src/lib/safe-storage.ts +48 -6
- package/src/lib/session-refresh.ts +1 -1
- package/src/lib/share-format.ts +18 -0
- package/src/lib/text-case.ts +19 -0
- package/src/lib/text-match.ts +57 -2
- package/src/lib/thenable.ts +19 -0
- package/src/lib/translation-review.ts +13 -5
- package/src/notifications/device-zone-report.ts +1 -1
- package/src/notifications/notification-bell.tsx +7 -4
- package/src/notifications/notification-inbox.tsx +40 -58
- package/src/notifications/notification-parts.tsx +3 -4
- package/src/notifications/notification-types-setting.tsx +1 -1
- package/src/notifications/notifications-labels.ts +7 -0
- package/src/notifications/push-device-setting.tsx +1 -1
- package/src/notifications/push-devices-setting.tsx +30 -55
- package/src/notifications/quiet-hours-setting.tsx +93 -31
- package/src/notifications/unsubscribe-panel.tsx +4 -7
- package/src/notifications/use-push-device.ts +76 -10
- package/src/offline/query-persistence.ts +35 -3
- package/src/rhf/fields.tsx +11 -4
- package/src/search/command-palette.tsx +2 -4
- package/src/search/global-search.tsx +36 -15
- package/src/search/search-index.ts +0 -15
- package/src/search/use-command-key.ts +13 -12
- package/src/search.ts +10 -1
- package/src/settings/use-settings-focus.ts +3 -0
- package/src/shell/account-menu-language.tsx +6 -4
- package/src/shell/account-menu-text-size.tsx +10 -7
- package/src/shell/app-shell.tsx +0 -13
- package/src/shell/company-switcher.tsx +1 -1
- package/src/shell/dev-menu.tsx +8 -22
- package/src/shell/top-bar-actions.tsx +1 -1
- package/src/shell/top-bar-parts-labels.ts +1 -4
- package/src/shell.ts +21 -17
- package/src/sync/engine.ts +339 -61
- package/src/sync.ts +2 -8
- package/src/testing/css-variables.ts +8 -9
- package/src/theme/chart-palette.ts +0 -2
- package/src/theme/contrast.ts +8 -9
- package/src/theme/palette-store.ts +9 -9
- package/src/theme/text-size.ts +6 -8
- package/src/theme/theme-store.ts +7 -9
- package/src/tour/tour-catalogue.tsx +26 -15
- package/src/tour/tour-dock.ts +0 -2
- package/src/tour/tour-gates.ts +23 -0
- package/src/tour/tour-overlay.tsx +1170 -0
- package/src/tour/tour.tsx +108 -1202
- package/src/tour/use-tour-progress.ts +1 -1
- package/src/wizard/stepper-nav.tsx +3 -1
- package/src/wizard/types.ts +11 -2
- package/src/wizard/use-wizard.ts +2 -1
- package/src/wizard/validation.ts +8 -2
- package/tokens.css +6 -5
- package/dist/components/field-sync-labels.d.ts +0 -2
- package/dist/components/field-sync-labels.js +0 -12
- package/dist/components/field-sync-labels.js.map +0 -1
- package/dist/components/field-sync.d.ts +0 -164
- package/dist/components/field-sync.js +0 -269
- package/dist/components/field-sync.js.map +0 -1
- package/dist/components/section-nav.d.ts +0 -37
- package/dist/components/section-nav.js +0 -33
- package/dist/components/section-nav.js.map +0 -1
- package/dist/components/sign-chip-labels.d.ts +0 -2
- package/dist/components/sign-chip-labels.js +0 -11
- package/dist/components/sign-chip-labels.js.map +0 -1
- package/dist/components/sign-chip.d.ts +0 -68
- package/dist/components/sign-chip.js +0 -47
- package/dist/components/sign-chip.js.map +0 -1
- package/dist/components/ui-labels.js.map +0 -1
- package/dist/lib/isin.d.ts +0 -28
- package/dist/lib/isin.js +0 -36
- package/dist/lib/isin.js.map +0 -1
- package/dist/shell/dev-switchers.d.ts +0 -6
- package/dist/shell/dev-switchers.js +0 -12
- package/dist/shell/dev-switchers.js.map +0 -1
- package/dist/shell/role-switcher.d.ts +0 -21
- package/dist/shell/role-switcher.js +0 -31
- package/dist/shell/role-switcher.js.map +0 -1
- package/src/components/field-sync-labels.ts +0 -13
- package/src/components/field-sync.tsx +0 -482
- package/src/components/section-nav.tsx +0 -65
- package/src/components/sign-chip-labels.ts +0 -12
- package/src/components/sign-chip.tsx +0 -124
- package/src/components/ui-labels.ts +0 -24
- package/src/lib/isin.ts +0 -62
- package/src/shell/dev-switchers.tsx +0 -18
- package/src/shell/role-switcher.tsx +0 -46
|
@@ -48,9 +48,9 @@ export interface MultiSelectOption<V extends string | number = string | number>
|
|
|
48
48
|
* ids and `string[]` for string ones, and no call site casts. */
|
|
49
49
|
export interface MultiSelectProps<V extends string | number = string | number>
|
|
50
50
|
extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
|
|
51
|
-
options: MultiSelectOption<V>[];
|
|
51
|
+
options: readonly MultiSelectOption<V>[];
|
|
52
52
|
/** The chosen values — the select family's `value` (API-4). */
|
|
53
|
-
value?: V[];
|
|
53
|
+
value?: readonly V[];
|
|
54
54
|
onChange: (next: V[]) => void;
|
|
55
55
|
/** Singular/plural countable label, used when 1+ items are selected. Default:
|
|
56
56
|
* `labels.selectedCount`, else `multiSelect.selectedCount` from the provider — the
|
|
@@ -116,6 +116,10 @@ export interface MultiSelectProps<V extends string | number = string | number>
|
|
|
116
116
|
ref?: Ref<HTMLButtonElement>;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
/** "Select all" and "Clear": dimmed, with no hover, while there is nothing for them to do. */
|
|
120
|
+
const TOOLBAR_BUTTON =
|
|
121
|
+
"rounded px-2 py-0.5 text-secondary hover:bg-hover aria-disabled:cursor-not-allowed aria-disabled:opacity-40 aria-disabled:hover:bg-transparent";
|
|
122
|
+
|
|
119
123
|
/**
|
|
120
124
|
* Pick several of a fixed list — a filter's accounts, a comparison's data sets — with a
|
|
121
125
|
* search box, "Select all" and "Clear"; nothing picked reads as "all".
|
|
@@ -158,7 +162,7 @@ export function MultiSelect<V extends string | number = string | number>(props:
|
|
|
158
162
|
"aria-required": ariaRequired,
|
|
159
163
|
...rest
|
|
160
164
|
} = props;
|
|
161
|
-
const value = useMemo<V[]>(() => valueProp ?? [], [valueProp]);
|
|
165
|
+
const value = useMemo<readonly V[]>(() => valueProp ?? [], [valueProp]);
|
|
162
166
|
// The rows as the family's options — the hint is the sublabel, searched like the label.
|
|
163
167
|
const comboOptions = useMemo(
|
|
164
168
|
() =>
|
|
@@ -338,21 +342,29 @@ export function MultiSelect<V extends string | number = string | number>(props:
|
|
|
338
342
|
// hints are why it was widened at all (keksdose #147).
|
|
339
343
|
width={{ minRem: 16, fit: true, maxRem: 32 }}
|
|
340
344
|
className={panelClassName}
|
|
345
|
+
// Reached by Tab from the search box (the panel's rows are not tab stops), and
|
|
346
|
+
// `aria-disabled` with a guarded click rather than `disabled`: a pressed "Clear"
|
|
347
|
+
// with nothing left to clear disabled itself under the focus, which dropped it to
|
|
348
|
+
// <body> — JumpCalendar's arrows are the rule (refactor audit 2026-10-30, INP-9).
|
|
341
349
|
toolbar={
|
|
342
350
|
<div className="flex items-center justify-between gap-2 px-2 py-1.5 text-xs">
|
|
343
351
|
<button
|
|
344
352
|
type="button"
|
|
345
|
-
onClick={
|
|
346
|
-
|
|
347
|
-
|
|
353
|
+
onClick={() => {
|
|
354
|
+
if (canSelectAll) selectAll();
|
|
355
|
+
}}
|
|
356
|
+
aria-disabled={!canSelectAll || undefined}
|
|
357
|
+
className={TOOLBAR_BUTTON}
|
|
348
358
|
>
|
|
349
359
|
{text.selectAll}
|
|
350
360
|
</button>
|
|
351
361
|
<button
|
|
352
362
|
type="button"
|
|
353
|
-
onClick={
|
|
354
|
-
|
|
355
|
-
|
|
363
|
+
onClick={() => {
|
|
364
|
+
if (canClear) clearAll();
|
|
365
|
+
}}
|
|
366
|
+
aria-disabled={!canClear || undefined}
|
|
367
|
+
className={TOOLBAR_BUTTON}
|
|
356
368
|
>
|
|
357
369
|
{text.clear}
|
|
358
370
|
</button>
|
|
@@ -59,7 +59,7 @@ export interface NavPillsProps<T extends string> extends Omit<
|
|
|
59
59
|
* 0.49: `wrap` (default) puts the pills on as many rows as they need. `scroll` keeps
|
|
60
60
|
* them on ONE row that scrolls sideways — faded at a cut edge, the current pill
|
|
61
61
|
* scrolled into view (the row only, never the page) — for a strip that must stay one
|
|
62
|
-
* line high, as
|
|
62
|
+
* line high, as a section's pages under a page title on a phone.
|
|
63
63
|
*/
|
|
64
64
|
layout?: "wrap" | "scroll";
|
|
65
65
|
/** The `<nav>` (or the `<div role="group">`) — hence `HTMLElement` (0.34, API-2,
|
|
@@ -3,6 +3,7 @@ import { createPortal } from "react-dom";
|
|
|
3
3
|
import { X } from "lucide-react";
|
|
4
4
|
import type { ComponentPropsWithoutRef, KeyboardEvent, ReactNode, Ref, RefObject } from "react";
|
|
5
5
|
import { cn } from "../lib/cn";
|
|
6
|
+
import { hasContent } from "../lib/presence";
|
|
6
7
|
import { mergeRefs } from "./field-parts";
|
|
7
8
|
import { CLIPS_ATTRIBUTE } from "../lib/clipping";
|
|
8
9
|
import { DropdownSearchHeader } from "./dropdown";
|
|
@@ -119,7 +120,8 @@ export function PickerSheet({
|
|
|
119
120
|
// one way out of a full-screen sheet speak the app's language without each of
|
|
120
121
|
// them having to (see the prop's note in `EntityCombobox`).
|
|
121
122
|
const labels = useKitLabels("pickerSheet", DEFAULT_PICKER_SHEET_LABELS, { close: closeLabel, done: doneLabel });
|
|
122
|
-
|
|
123
|
+
// `hasContent`, so a `footer` of "" draws no empty bar (refactor audit 2026-10-30, DUP-14).
|
|
124
|
+
const hasFooter = hasContent(footer) || Boolean(done);
|
|
123
125
|
useBodyScrollLock(open);
|
|
124
126
|
/**
|
|
125
127
|
* Back closes THE SHEET, not the dialog it was opened from (Keksdose live #309:
|
|
@@ -169,14 +171,15 @@ export function PickerSheet({
|
|
|
169
171
|
* sheet knows when its own input exists. Popping the keyboard is the POINT here,
|
|
170
172
|
* where in a form dialog it is the cost.
|
|
171
173
|
*
|
|
172
|
-
* **`restoreFocus` is off**, which is the uncomfortable half.
|
|
173
|
-
*
|
|
174
|
-
* to that field on close re-opens the sheet the user has just
|
|
175
|
-
* would select a value and immediately put the list back over
|
|
176
|
-
* opened it is the only thing that knows whether re-focusing it
|
|
177
|
-
* that cannot tell must not guess.
|
|
178
|
-
*
|
|
179
|
-
*
|
|
174
|
+
* **`restoreFocus` is off**, which is the uncomfortable half. `Combobox` and
|
|
175
|
+
* `InlineEntityCombobox` open the sheet from the field's own `onFocus` handler, so
|
|
176
|
+
* handing focus back to that field on close re-opens the sheet the user has just
|
|
177
|
+
* dismissed — a row tap would select a value and immediately put the list back over
|
|
178
|
+
* it. The field that opened it is the only thing that knows whether re-focusing it
|
|
179
|
+
* means "open"; a sheet that cannot tell must not guess. So the caller does it in
|
|
180
|
+
* `onClose` where it can: `ComboboxPanel`'s triggers open on a click, and its
|
|
181
|
+
* `onClose` hands focus back to the trigger (0.52, refactor audit 2026-10-30, INP-7) —
|
|
182
|
+
* a screen-reader user is in exactly this layout, and <body> was where they landed.
|
|
180
183
|
*/
|
|
181
184
|
useFocusTrap(sheetRef, {
|
|
182
185
|
active: open,
|
|
@@ -15,6 +15,13 @@ export interface PieChartLabels {
|
|
|
15
15
|
* German, "42%" in English) — the function only arranges them.
|
|
16
16
|
*/
|
|
17
17
|
slice: (label: string, value: string, percent: string) => string;
|
|
18
|
+
/**
|
|
19
|
+
* One slice's accessible name under `redact` (0.52): the label and the share, with no
|
|
20
|
+
* amount. `redact` blurs every figure on screen but not the ring, and the ring's names
|
|
21
|
+
* are attributes on untagged elements, which a session replay or a redaction keyed on
|
|
22
|
+
* `[data-private]` reads as they are. `percent` as for {@link PieChartLabels.slice}.
|
|
23
|
+
*/
|
|
24
|
+
sliceShare: (label: string, percent: string) => string;
|
|
18
25
|
/** The caption over the donut's centre figure. */
|
|
19
26
|
total: string;
|
|
20
27
|
/** What a chart with nothing to draw says, when the caller passes no `empty`. */
|
|
@@ -26,6 +33,7 @@ export interface PieChartLabels {
|
|
|
26
33
|
export const DEFAULT_PIE_CHART_LABELS: PieChartLabels = {
|
|
27
34
|
slices: "Chart slices",
|
|
28
35
|
slice: (label, value, percent) => `${label}: ${value} (${percent})`,
|
|
36
|
+
sliceShare: (label, percent) => `${label}: ${percent}`,
|
|
29
37
|
total: "Total",
|
|
30
38
|
empty: "No data",
|
|
31
39
|
legend: "Categories",
|
|
@@ -12,7 +12,8 @@ import type { ComponentProps, ComponentPropsWithRef, KeyboardEvent, ReactNode }
|
|
|
12
12
|
import { Pie, PieChart as RechartsPieChart, Sector } from "recharts";
|
|
13
13
|
import type { PieLabelRenderProps, PieSectorShapeProps } from "recharts";
|
|
14
14
|
import { cn } from "../lib/cn";
|
|
15
|
-
import {
|
|
15
|
+
import { dirOf, rovingTarget } from "../lib/direction";
|
|
16
|
+
import { shareFormat } from "../lib/share-format";
|
|
16
17
|
import { useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
|
|
17
18
|
import { paletteFor } from "../theme/chart-palette";
|
|
18
19
|
import { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from "./chart";
|
|
@@ -93,7 +94,8 @@ export interface PieChartProps extends Omit<ComponentPropsWithRef<"div">, "child
|
|
|
93
94
|
* Tag every figure ON SCREEN `data-private` — the tooltip bubble, the centre and
|
|
94
95
|
* `"value"` slice labels — so the host's demo-mode rule blurs it. A percentage alone
|
|
95
96
|
* reveals no amount, so `"percent"` labels stay readable, and the slices themselves
|
|
96
|
-
* are not tagged: a blurred ring is no picture at all.
|
|
97
|
+
* are not tagged: a blurred ring is no picture at all. So a slice's NAME says no
|
|
98
|
+
* amount either (0.52): "Occupied: 60%" (`labels.sliceShare`), not `labels.slice`.
|
|
97
99
|
*/
|
|
98
100
|
redact?: boolean;
|
|
99
101
|
/** What to show with nothing to draw. Default: `labels.empty`. */
|
|
@@ -138,8 +140,9 @@ function RedactedTooltipContent(props: ComponentProps<typeof ChartTooltipContent
|
|
|
138
140
|
* clockwise from twelve o'clock, the order of the legend — with ←/→ following the
|
|
139
141
|
* reading direction in RTL; Home/End go to the first and last. Each slice is named
|
|
140
142
|
* "Label: value (xx%)" (`labels.slice`), because a colour and an angle are nothing a
|
|
141
|
-
* screen reader can say
|
|
142
|
-
* `onSliceClick`, Enter and Space
|
|
143
|
+
* screen reader can say — under `redact` "Label: xx%" (`labels.sliceShare`) — and
|
|
144
|
+
* focusing one reads it out in the donut's centre. With `onSliceClick`, Enter and Space
|
|
145
|
+
* activate it as a click does.
|
|
143
146
|
*
|
|
144
147
|
* The legend switches slices off (`legend="toggle"`); the percentages are always of
|
|
145
148
|
* what is drawn. The plot is not mirrored in RTL (see `ChartContainer`); the legend
|
|
@@ -177,25 +180,14 @@ export function PieChart({
|
|
|
177
180
|
const { scale } = useTextSize();
|
|
178
181
|
const box = chartHeightProps(height);
|
|
179
182
|
const numberFormat = useMemo(() => new Intl.NumberFormat(locale), [locale]);
|
|
180
|
-
const percentFormats = useMemo(
|
|
181
|
-
() => ({
|
|
182
|
-
whole: new Intl.NumberFormat(locale, { style: "percent", maximumFractionDigits: 0 }),
|
|
183
|
-
fine: new Intl.NumberFormat(locale, { style: "percent", maximumFractionDigits: 1 }),
|
|
184
|
-
}),
|
|
185
|
-
[locale],
|
|
186
|
-
);
|
|
187
183
|
// Memoised, like everything the sectors are drawn from: they must not be rebuilt on
|
|
188
184
|
// this component's own re-renders (see `pie` below).
|
|
189
185
|
const formatValue = useCallback(
|
|
190
186
|
(v: number) => (formatValueProp ? formatValueProp(v) : formatWithMinus(numberFormat, v)),
|
|
191
187
|
[formatValueProp, numberFormat],
|
|
192
188
|
);
|
|
193
|
-
// One decimal under 10 %,
|
|
194
|
-
|
|
195
|
-
const formatShare = useCallback(
|
|
196
|
-
(share: number) => (share < 0.1 ? percentFormats.fine : percentFormats.whole).format(share),
|
|
197
|
-
[percentFormats],
|
|
198
|
-
);
|
|
189
|
+
// One decimal under 10 %, the rule Treemap says its shares by too (lib/share-format).
|
|
190
|
+
const formatShare = useMemo(() => shareFormat(locale), [locale]);
|
|
199
191
|
|
|
200
192
|
const [ownHidden, setOwnHidden] = useState<ReadonlySet<string>>(() => new Set());
|
|
201
193
|
const hidden = hiddenProp ?? ownHidden;
|
|
@@ -273,17 +265,11 @@ export function PieChart({
|
|
|
273
265
|
const d = drawn[index];
|
|
274
266
|
if (!d) return <Sector key={key ?? undefined} {...sector} />;
|
|
275
267
|
const onKeyDown = (event: KeyboardEvent<SVGGElement>) => {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
if (step) target = index + step;
|
|
279
|
-
else if (event.key === "ArrowDown") target = index + 1;
|
|
280
|
-
else if (event.key === "ArrowUp") target = index - 1;
|
|
281
|
-
else if (event.key === "Home") target = 0;
|
|
282
|
-
else if (event.key === "End") target = drawn.length - 1;
|
|
268
|
+
// Round the circle: past the last slice is the first, as the eye goes.
|
|
269
|
+
const target = rovingTarget(event.key, dirOf(event.currentTarget), index, drawn.length, true);
|
|
283
270
|
if (target !== undefined) {
|
|
284
271
|
event.preventDefault();
|
|
285
|
-
|
|
286
|
-
refs.current[((target % drawn.length) + drawn.length) % drawn.length]?.focus();
|
|
272
|
+
refs.current[target]?.focus();
|
|
287
273
|
} else if (clickable && (event.key === "Enter" || event.key === " ")) {
|
|
288
274
|
event.preventDefault();
|
|
289
275
|
clickRef.current?.(d.slice.key, d.slice);
|
|
@@ -297,7 +283,15 @@ export function PieChart({
|
|
|
297
283
|
role={clickable ? "button" : "img"}
|
|
298
284
|
// The first slice until the effect below moves the stop.
|
|
299
285
|
tabIndex={index === 0 ? 0 : -1}
|
|
300
|
-
|
|
286
|
+
// Under `redact` with no amount: the ring is left untagged so it stays a picture,
|
|
287
|
+
// and its names are attributes a session replay or a redaction keyed on
|
|
288
|
+
// `[data-private]` reads as they are — "Occupied: €6.00 (60%)" told the amount the
|
|
289
|
+
// blurred centre and tooltip hid (0.52 code review; Marcel's decision).
|
|
290
|
+
aria-label={
|
|
291
|
+
redact
|
|
292
|
+
? labels.sliceShare(d.slice.label, formatShare(d.share))
|
|
293
|
+
: labels.slice(d.slice.label, formatValue(d.value), formatShare(d.share))
|
|
294
|
+
}
|
|
301
295
|
data-slice={d.slice.key}
|
|
302
296
|
onKeyDown={onKeyDown}
|
|
303
297
|
onFocus={() => {
|
|
@@ -313,7 +307,7 @@ export function PieChart({
|
|
|
313
307
|
</g>
|
|
314
308
|
);
|
|
315
309
|
},
|
|
316
|
-
[drawn, labels, formatValue, formatShare, clickable],
|
|
310
|
+
[drawn, labels, formatValue, formatShare, clickable, redact],
|
|
317
311
|
);
|
|
318
312
|
|
|
319
313
|
const label = useCallback(
|
|
@@ -37,6 +37,9 @@ export { DEFAULT_POPOVER_LABELS };
|
|
|
37
37
|
*/
|
|
38
38
|
export interface PopoverProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
|
|
39
39
|
trigger: (state: { open: boolean; toggle: () => void; ref: RefObject<HTMLButtonElement | null> }) => ReactNode;
|
|
40
|
+
/** The panel's content. `close` shuts the panel and, when focus is in it, puts focus
|
|
41
|
+
* on the trigger before returning — so a dialog the same handler opens gives it back
|
|
42
|
+
* there (0.52). */
|
|
40
43
|
children: (close: () => void) => ReactNode;
|
|
41
44
|
/**
|
|
42
45
|
* The panel's width: `"18rem"` (the default) grows with the text size — the panel
|
|
@@ -125,6 +128,17 @@ export function Popover({
|
|
|
125
128
|
// across a right-to-left calendar or filter rendered left-to-right.
|
|
126
129
|
const [dir, setDir] = useState<Direction>("ltr");
|
|
127
130
|
const close = () => setOpen(false);
|
|
131
|
+
// The `close` the children get also hands focus to the trigger, AT ONCE, when it is
|
|
132
|
+
// inside the panel. The trap restores it too, but only after the commit — and a dialog
|
|
133
|
+
// opened in the same handler records its own restore target during that commit's
|
|
134
|
+
// render: the menu item that is about to go. RowActions' "Delete" asks first, and the
|
|
135
|
+
// answered confirm dropped focus on <body>, mid-table (refactor audit 2026-10-30,
|
|
136
|
+
// INP-2). Escape and an outside press keep the plain close: nothing opens after them.
|
|
137
|
+
const closeFromPanel = () => {
|
|
138
|
+
const focusInside = panelRef.current?.contains(document.activeElement) ?? false;
|
|
139
|
+
setOpen(false);
|
|
140
|
+
if (focusInside) triggerRef.current?.focus();
|
|
141
|
+
};
|
|
128
142
|
const toggle = () => {
|
|
129
143
|
setDir(dirOf(triggerRef.current));
|
|
130
144
|
setOpen((v) => !v);
|
|
@@ -242,7 +256,10 @@ export function Popover({
|
|
|
242
256
|
className,
|
|
243
257
|
)}
|
|
244
258
|
>
|
|
245
|
-
{
|
|
259
|
+
{
|
|
260
|
+
// eslint-disable-next-line react-hooks/refs -- handed to the items' handlers: it reads the trigger and the focus when an item is chosen, never while rendering
|
|
261
|
+
children(closeFromPanel)
|
|
262
|
+
}
|
|
246
263
|
</div>,
|
|
247
264
|
document.body,
|
|
248
265
|
)}
|
|
@@ -3,6 +3,7 @@ import type { KeyboardEvent, MouseEvent, ReactElement, ReactNode } from "react";
|
|
|
3
3
|
import { MoreHorizontal } from "lucide-react";
|
|
4
4
|
import type { LucideIcon } from "lucide-react";
|
|
5
5
|
import { cn } from "../lib/cn";
|
|
6
|
+
import { hasContent } from "../lib/presence";
|
|
6
7
|
import { useLargeText } from "../hooks/use-large-text";
|
|
7
8
|
import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
|
|
8
9
|
import { Popover } from "./popover";
|
|
@@ -466,7 +467,7 @@ function stopActivationKeys(e: KeyboardEvent) {
|
|
|
466
467
|
*/
|
|
467
468
|
function useActionHref(action: RowAction): string | undefined {
|
|
468
469
|
const reason = useCommitReason(action.commit, action.disabledReason);
|
|
469
|
-
const refused = reason
|
|
470
|
+
const refused = hasContent(reason);
|
|
470
471
|
return action.href !== undefined && !action.pending && !refused ? action.href : undefined;
|
|
471
472
|
}
|
|
472
473
|
|
|
@@ -143,8 +143,8 @@ export function oneAxis(
|
|
|
143
143
|
|
|
144
144
|
/** One source's samples: an abscissa and the channels measured against it. */
|
|
145
145
|
export interface SeriesSource {
|
|
146
|
-
x: number[];
|
|
147
|
-
channels: Record<string, number[]
|
|
146
|
+
x: readonly number[];
|
|
147
|
+
channels: Readonly<Record<string, readonly number[]>>;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/**
|
|
@@ -155,7 +155,7 @@ export interface SeriesSource {
|
|
|
155
155
|
* has no sample the key is absent, and `connectNulls` bridges the hole with the same
|
|
156
156
|
* straight segment an interpolation would have drawn — without claiming a measurement.
|
|
157
157
|
*/
|
|
158
|
-
export function mergeSeries(sources: SeriesSource[]): Record<string, number>[] {
|
|
158
|
+
export function mergeSeries(sources: readonly SeriesSource[]): Record<string, number>[] {
|
|
159
159
|
const byAbscissa = new Map<number, Record<string, number>>();
|
|
160
160
|
for (const source of sources) {
|
|
161
161
|
source.x.forEach((value, index) => {
|
|
@@ -212,7 +212,12 @@ export function anchoredBand(extent: readonly [number, number] | undefined): [nu
|
|
|
212
212
|
* it in its neighbour's colour on each click. Resolving the colours on the full list
|
|
213
213
|
* and filtering after keeps each series in the colour its legend entry shows.
|
|
214
214
|
*/
|
|
215
|
-
|
|
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>[] {
|
|
216
221
|
return series
|
|
217
222
|
.map((entry, index) => ({ ...entry, color: entry.color ?? paletteFor(index) }))
|
|
218
223
|
.filter((entry) => !hidden.has(entry.key));
|
|
@@ -8,15 +8,18 @@
|
|
|
8
8
|
export interface SeriesChartLabels {
|
|
9
9
|
/** The button that puts a zoomed chart back to its full extent. Visible text. */
|
|
10
10
|
resetZoom: string;
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
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. */
|
|
13
15
|
zoomHint: string;
|
|
14
16
|
/** What a chart with nothing to draw says, when the caller passes no `empty`. */
|
|
15
17
|
empty: string;
|
|
16
18
|
/** Accessible name of a `ToggleLegend` — a group of switches, one per series. */
|
|
17
19
|
legend: string;
|
|
18
|
-
/** Accessible name of the group of keyboard stops a
|
|
19
|
-
*
|
|
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. */
|
|
20
23
|
points: string;
|
|
21
24
|
}
|
|
22
25
|
|