@eifi1/ui-kit 0.51.7 → 0.52.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 +141 -23
- 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 +20 -8
- package/dist/billing/cancel-subscription.js +7 -5
- package/dist/billing/cancel-subscription.js.map +1 -1
- package/dist/billing/dialog-close.d.ts +29 -0
- package/dist/billing/dialog-close.js +8 -0
- package/dist/billing/dialog-close.js.map +1 -0
- package/dist/billing/plan-card.d.ts +14 -4
- package/dist/billing/plan-card.js +15 -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 +19 -7
- package/dist/billing/plan-switch.js +8 -4
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/chart.d.ts +12 -0
- package/dist/chart.js +16 -1
- 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 +24 -2
- package/dist/components/date-field.js +33 -8
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.d.ts +15 -2
- 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 +47 -20
- 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/field-sync-labels.d.ts +1 -0
- package/dist/components/field-sync-labels.js.map +1 -1
- package/dist/components/field-sync.d.ts +23 -1
- package/dist/components/field-sync.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/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/section-nav.d.ts +7 -0
- package/dist/components/section-nav.js.map +1 -1
- package/dist/components/series-chart-axes.d.ts +3 -3
- 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 +31 -7
- package/dist/components/series-chart.js +72 -29
- 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/sign-chip-labels.d.ts +1 -0
- package/dist/components/sign-chip-labels.js.map +1 -1
- package/dist/components/sign-chip.d.ts +10 -1
- package/dist/components/sign-chip.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 +26 -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 +140 -17
- package/dist/components/treemap.js +324 -97
- 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 +6 -2
- package/dist/data-table.js +7 -2
- package/dist/data-table.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 +30 -0
- package/dist/feedback/feedback-mutation.js +16 -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 +12 -3
- package/dist/feedback/feedback-public-list.js +2 -1
- 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 +5 -0
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +64 -28
- package/dist/feedback/feedback-row-detail.js +30 -28
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.d.ts +30 -11
- 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 +24 -23
- package/dist/feedback/feedback-thread.js +2 -1
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback.d.ts +34 -0
- package/dist/feedback.js +42 -0
- 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 -5
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +7 -1
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +9 -2
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +20 -41
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +7 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +20 -10
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +9 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +7 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +8 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +5 -0
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +64 -17
- package/dist/index.js +77 -12
- 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/isin.d.ts +10 -0
- package/dist/lib/isin.js.map +1 -1
- 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/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 +7 -0
- package/dist/search.js +10 -0
- 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 +21 -5
- package/dist/shell/account-menu-language.js +3 -1
- package/dist/shell/account-menu-language.js.map +1 -1
- package/dist/shell/account-menu-text-size.d.ts +26 -9
- package/dist/shell/account-menu-text-size.js +3 -2
- package/dist/shell/account-menu-text-size.js.map +1 -1
- package/dist/shell/dev-menu.js +5 -18
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/role-switcher.d.ts +7 -0
- package/dist/shell/role-switcher.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 +0 -2
- 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 +27 -8
- package/dist/shell.js +28 -7
- 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 +6 -2
- package/dist/sync.js +6 -1
- 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/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 +26 -12
- package/src/billing/dialog-close.ts +34 -0
- package/src/billing/plan-card.tsx +36 -11
- package/src/billing/plan-change-labels.ts +66 -0
- package/src/billing/plan-switch.tsx +26 -12
- package/src/chart.ts +21 -3
- 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 +65 -8
- package/src/components/date-picker.tsx +125 -48
- package/src/components/date-range-picker.tsx +82 -31
- 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/field-sync-labels.ts +1 -0
- package/src/components/field-sync.tsx +23 -1
- 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/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/section-nav.tsx +7 -0
- package/src/components/series-chart-axes.ts +3 -3
- package/src/components/series-chart-labels.ts +7 -4
- package/src/components/series-chart.tsx +178 -69
- package/src/components/share-card.tsx +6 -6
- package/src/components/sign-chip-labels.ts +1 -0
- package/src/components/sign-chip.tsx +10 -1
- 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 +39 -0
- package/src/components/treemap-layout.ts +210 -0
- package/src/components/treemap.tsx +722 -133
- package/src/components/use-table-state.ts +12 -9
- package/src/data-table.ts +9 -2
- package/src/eslint/role-utilities.ts +97 -19
- package/src/feedback/feedback-dialog.tsx +30 -19
- package/src/feedback/feedback-mutation.ts +41 -0
- package/src/feedback/feedback-page-link.ts +90 -0
- package/src/feedback/feedback-public-list.tsx +17 -5
- package/src/feedback/feedback-replies.tsx +13 -6
- package/src/feedback/feedback-row-detail-labels.ts +5 -0
- package/src/feedback/feedback-row-detail.tsx +103 -67
- package/src/feedback/feedback-status-undo.ts +41 -27
- 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 +27 -25
- package/src/feedback.ts +42 -0
- 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 -5
- package/src/i18n/german.ts +8 -2
- package/src/i18n/kit-labels.tsx +9 -2
- package/src/i18n/locales/es.ts +8 -2
- package/src/i18n/locales/fr.ts +21 -13
- package/src/i18n/locales/hu.ts +10 -2
- package/src/i18n/locales/it.ts +8 -2
- package/src/i18n/locales/zh.ts +9 -2
- package/src/i18n/review.ts +5 -0
- package/src/index.ts +103 -13
- 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/isin.ts +10 -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/use-command-key.ts +13 -12
- package/src/search.ts +9 -0
- package/src/settings/use-settings-focus.ts +3 -0
- package/src/shell/account-menu-language.tsx +27 -5
- package/src/shell/account-menu-text-size.tsx +32 -10
- package/src/shell/dev-menu.tsx +7 -21
- package/src/shell/role-switcher.tsx +7 -0
- package/src/shell/top-bar-actions.tsx +1 -1
- package/src/shell/top-bar-parts-labels.ts +0 -3
- package/src/shell.ts +40 -9
- package/src/sync/engine.ts +339 -61
- package/src/sync.ts +8 -1
- package/src/testing/css-variables.ts +8 -9
- 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 +2 -1
- package/dist/components/ui-labels.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/src/components/ui-labels.ts +0 -24
- package/src/shell/dev-switchers.tsx +0 -18
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
// The id-keyed sibling of Combobox. Moved out of combobox.tsx as it was (MOD-9,
|
|
2
2
|
// refactor audit 2026-10); combobox still exports `InlineEntityCombobox` and its props.
|
|
3
|
-
import {
|
|
4
|
-
import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
|
|
3
|
+
import { useId, useMemo, useRef, useState } from "react";
|
|
4
|
+
import type { ComponentPropsWithoutRef, KeyboardEvent, ReactNode, Ref } from "react";
|
|
5
5
|
import { ChevronDown, Plus, X } from "lucide-react";
|
|
6
6
|
import { FIELD_BASE, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
|
|
7
7
|
import { cn } from "../lib/cn";
|
|
8
8
|
import { useDropdown } from "./dropdown";
|
|
9
|
-
import { takeEscape, useDismissLayer } from "../hooks/use-dismiss";
|
|
9
|
+
import { claimEscape, takeEscape, useDismissLayer } from "../hooks/use-dismiss";
|
|
10
10
|
import { isImeEnter } from "../lib/ime";
|
|
11
11
|
import { isQuietFocus } from "../lib/quiet-focus";
|
|
12
12
|
import { usePhoneLayout } from "../hooks/use-breakpoint";
|
|
13
13
|
import { PickerSheet, SHEET_ROW_CLASS } from "./picker-sheet";
|
|
14
14
|
import {
|
|
15
|
+
anchoredHeadingClass,
|
|
15
16
|
ComboboxFieldLabel,
|
|
16
17
|
DISABLED_ROW_CLASS,
|
|
17
18
|
endHintRowProps,
|
|
18
|
-
|
|
19
|
+
GroupedOptions,
|
|
20
|
+
groupRuns,
|
|
19
21
|
isOptionEnabled,
|
|
20
22
|
offersCreate,
|
|
23
|
+
SHEET_HEADING_CLASS,
|
|
21
24
|
stepEnabled,
|
|
22
|
-
|
|
25
|
+
useTypedListStatus,
|
|
23
26
|
type ComboClearValue,
|
|
24
27
|
type ComboOption,
|
|
25
28
|
} from "./combobox-core";
|
|
26
29
|
import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
|
|
27
|
-
import {
|
|
30
|
+
import { sameName, searchRanked } from "../lib/text-match";
|
|
28
31
|
import {
|
|
29
32
|
EndHintRow,
|
|
30
33
|
FieldCaption,
|
|
@@ -65,7 +68,7 @@ export interface InlineEntityComboboxProps<V extends string | number, C extends
|
|
|
65
68
|
/** What a clear emits — `null` by default, `""` for a schema that wants an empty
|
|
66
69
|
* string. See {@link EntityCombobox}'s `clearValue`. */
|
|
67
70
|
clearValue?: C;
|
|
68
|
-
options: ComboOption<V>[];
|
|
71
|
+
options: readonly ComboOption<V>[];
|
|
69
72
|
/** The visible label — see {@link Combobox}'s `label` (a ReactNode since 0.34, API-9). */
|
|
70
73
|
label?: ReactNode;
|
|
71
74
|
id?: string;
|
|
@@ -81,8 +84,9 @@ export interface InlineEntityComboboxProps<V extends string | number, C extends
|
|
|
81
84
|
/** Phone sheet only — the anchored list has the field itself to type in. Falls
|
|
82
85
|
* back to `placeholder`, then to `combobox.search` from the {@link UiKitProvider}. */
|
|
83
86
|
searchPlaceholder?: string;
|
|
84
|
-
/**
|
|
85
|
-
*
|
|
87
|
+
/** What a query that finds nothing says: on the phone sheet, where a full screen
|
|
88
|
+
* showing nothing has to say why, and in the field's live status (0.52) — the anchored
|
|
89
|
+
* list itself simply does not open. Default: `combobox.noResults` from the provider. */
|
|
86
90
|
emptyLabel?: string;
|
|
87
91
|
closeLabel?: string;
|
|
88
92
|
/** The phone sheet's heading (and, as a string, its accessible name) for a field
|
|
@@ -310,19 +314,14 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
310
314
|
const matches = useMemo(() => {
|
|
311
315
|
let ranked = options;
|
|
312
316
|
if (query) {
|
|
313
|
-
// Every word of the query, in the label or the sublabel (0.51.4).
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
return rank === 0 || rank === 1;
|
|
322
|
-
};
|
|
323
|
-
const starts = options.filter(leads);
|
|
324
|
-
const rest = options.filter((o) => !leads(o) && hit(o));
|
|
325
|
-
ranked = [...starts, ...rest];
|
|
317
|
+
// Every word of the query, in the label or the sublabel (0.51.4). The label's whole
|
|
318
|
+
// name or its start first (rank 0 and 1), then a match anywhere in the label or the
|
|
319
|
+
// sublabel; a stable sort keeps the options' order within each. Not the group
|
|
320
|
+
// (0.40, kk run 79): with first-letter groups one typed letter matched its whole
|
|
321
|
+
// group. Each option folded once (`searchRanked`).
|
|
322
|
+
ranked = searchRanked(options, query, (o) => [o.label, o.sublabel], { locale })
|
|
323
|
+
.sort((a, b) => Number(a.rank > 1) - Number(b.rank > 1))
|
|
324
|
+
.map((x) => x.row);
|
|
326
325
|
}
|
|
327
326
|
if (!ranked.some((o) => o.group)) return ranked;
|
|
328
327
|
// Keep each group contiguous so the headings below appear once instead of
|
|
@@ -361,20 +360,27 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
361
360
|
const rows: readonly { disabled?: boolean }[] = showCreate ? [...matches, { disabled: createLocked }] : matches;
|
|
362
361
|
const createIndex = matches.length;
|
|
363
362
|
|
|
364
|
-
// Pointer-device only: the phone's rows live in a {@link PickerSheet} whose own
|
|
365
|
-
// search box holds focus, so the field behind it must not claim to be pointing at
|
|
366
|
-
// one of them.
|
|
367
|
-
// A disabled row is never the keyboard's, even if the list changed under it.
|
|
368
|
-
const activeId = !isPhone && isOptionEnabled(rows[active]) ? optionId(active) : undefined;
|
|
369
|
-
useActiveOptionScroll(activeId);
|
|
370
|
-
|
|
371
363
|
const close = () => {
|
|
372
364
|
setOpen(false);
|
|
373
365
|
setActive(-1);
|
|
374
366
|
setSheetQuery("");
|
|
375
367
|
};
|
|
376
|
-
//
|
|
377
|
-
|
|
368
|
+
// Whether a list shows, the row the keyboard is on — in the anchored list or the phone
|
|
369
|
+
// sheet, whose search box takes the same keys (INP-6) — and the live status, as
|
|
370
|
+
// Combobox has them. A disabled row is never the keyboard's, even if the list changed
|
|
371
|
+
// under it.
|
|
372
|
+
const { showing, expanded, activeOption, statusRegion } = useTypedListStatus({
|
|
373
|
+
isPhone,
|
|
374
|
+
open,
|
|
375
|
+
inert,
|
|
376
|
+
rowCount: matches.length,
|
|
377
|
+
extraRow: showCreate,
|
|
378
|
+
query,
|
|
379
|
+
active: isOptionEnabled(rows[active]) ? active : -1,
|
|
380
|
+
optionId,
|
|
381
|
+
labels,
|
|
382
|
+
});
|
|
383
|
+
// A layer while the list SHOWS, and Escape puts the label back.
|
|
378
384
|
useDismissLayer(showing, () => {
|
|
379
385
|
setText(null);
|
|
380
386
|
close();
|
|
@@ -403,6 +409,13 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
403
409
|
setText(null);
|
|
404
410
|
close();
|
|
405
411
|
};
|
|
412
|
+
// The ONE option a name typed out in full names, else null. A disabled option's label
|
|
413
|
+
// is not a hit — typing it is not a way round `disabled` — and a label is typed out in
|
|
414
|
+
// full as the list matches it, so "cafe" names Café (DUP-5).
|
|
415
|
+
const exactHit = (q: string): ComboOption<V> | null => {
|
|
416
|
+
const hits = options.filter((o) => !o.disabled && sameName(o.label, q, locale));
|
|
417
|
+
return new Set(hits.map((h) => h.value)).size === 1 ? hits[0] : null;
|
|
418
|
+
};
|
|
406
419
|
const reconcile = () => {
|
|
407
420
|
// Locked, loose text is dropped rather than judged: nothing reaches `onChange`.
|
|
408
421
|
if (text !== null && !locked) {
|
|
@@ -410,17 +423,60 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
410
423
|
if (!q) {
|
|
411
424
|
if (value != null) onChange(clearValue);
|
|
412
425
|
} else {
|
|
413
|
-
//
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
const hits = options.filter((o) => !o.disabled && sameName(o.label, q, locale));
|
|
417
|
-
const ids = new Set(hits.map((h) => h.value));
|
|
418
|
-
if (ids.size === 1 && hits[0].value !== value) onChange(hits[0].value);
|
|
426
|
+
// Anything but a hit reverts, like any other non-answer.
|
|
427
|
+
const hit = exactHit(q);
|
|
428
|
+
if (hit && hit.value !== value) onChange(hit.value);
|
|
419
429
|
}
|
|
420
430
|
}
|
|
421
431
|
setText(null);
|
|
422
432
|
close();
|
|
423
433
|
};
|
|
434
|
+
// The phone sheet's way out — the X, Escape, Back — keeps the value and judges nothing.
|
|
435
|
+
// Not `reconcile`: on a phone `text` is never typed in (the sheet's own box is), so it
|
|
436
|
+
// only holds what the field showed at focus, and that is "" for a value whose option
|
|
437
|
+
// has not loaded yet — judged, it read as "the user emptied the field" and the X
|
|
438
|
+
// cleared the answer (0.52 code review, inline-entity-combobox.tsx).
|
|
439
|
+
const dismissSheet = () => {
|
|
440
|
+
setText(null);
|
|
441
|
+
close();
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
/** The list's keys — in the field and, on a phone, in the sheet's search box (INP-6).
|
|
445
|
+
* Disabled rows are passed over; Up from "nothing highlighted" lands on the first
|
|
446
|
+
* takeable row, as it always landed on row 0. The create row is the last row the
|
|
447
|
+
* arrows reach. */
|
|
448
|
+
const listKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
|
|
449
|
+
if (e.key === "ArrowDown") {
|
|
450
|
+
e.preventDefault();
|
|
451
|
+
setOpen(true);
|
|
452
|
+
setActive((i) => stepEnabled(rows, i, 1));
|
|
453
|
+
} else if (e.key === "ArrowUp") {
|
|
454
|
+
e.preventDefault();
|
|
455
|
+
setActive((i) => (i < 0 ? stepEnabled(rows, -1, 1) : stepEnabled(rows, i, -1)));
|
|
456
|
+
} else if (e.key === "Enter") {
|
|
457
|
+
// An IME's Enter takes nothing, and judges no loose text (BUG-9).
|
|
458
|
+
if (isImeEnter(e)) return;
|
|
459
|
+
if (open && isOptionEnabled(rows[active])) {
|
|
460
|
+
e.preventDefault();
|
|
461
|
+
if (active === createIndex && showCreate) create();
|
|
462
|
+
else take(matches[active]);
|
|
463
|
+
} else if (isPhone) {
|
|
464
|
+
// The sheet's search box: its QUERY is what was typed, and a name typed out in
|
|
465
|
+
// full is taken, as the desktop field takes it. Anything else leaves the sheet
|
|
466
|
+
// and its search as they are — the panel pickers' sheet does the same. This was
|
|
467
|
+
// `reconcile`, which judged the field's text from before the sheet opened and
|
|
468
|
+
// closed: the search was thrown away and "Groceries" typed out was not taken
|
|
469
|
+
// (0.52 code review, inline-entity-combobox.tsx).
|
|
470
|
+
const hit = exactHit(sheetQuery.trim());
|
|
471
|
+
if (hit) {
|
|
472
|
+
e.preventDefault();
|
|
473
|
+
take(hit);
|
|
474
|
+
}
|
|
475
|
+
} else {
|
|
476
|
+
reconcile();
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
};
|
|
424
480
|
|
|
425
481
|
// The create row's inside, one for both shells: a "+" (it is an action, not a record),
|
|
426
482
|
// the words, and — while a write lock holds it — the lock's reason as a second line.
|
|
@@ -447,6 +503,21 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
447
503
|
box
|
|
448
504
|
);
|
|
449
505
|
|
|
506
|
+
/** The rows in their runs, each group a `role="group"` its heading names (INP-8), for
|
|
507
|
+
* the sheet or the anchored list — a group heading at each boundary rather than the
|
|
508
|
+
* group on every row (feedback #136). `matches` is group-contiguous, so comparing with
|
|
509
|
+
* the row above is enough. An option may deliberately appear in two groups (see
|
|
510
|
+
* `reconcile`): a value is a row's key within its group. */
|
|
511
|
+
const groupedRows = (sheet: boolean, row: (o: ComboOption<V>, i: number) => ReactNode) => (
|
|
512
|
+
<GroupedOptions
|
|
513
|
+
runs={groupRuns(matches, (o) => o.group)}
|
|
514
|
+
listboxId={listboxId}
|
|
515
|
+
rowKey={(o) => String(o.value)}
|
|
516
|
+
row={row}
|
|
517
|
+
headingClassName={(run) => (sheet ? SHEET_HEADING_CLASS : anchoredHeadingClass(run))}
|
|
518
|
+
/>
|
|
519
|
+
);
|
|
520
|
+
|
|
450
521
|
return (
|
|
451
522
|
// `rest` dresses the outer box — a `data-tour` anchor, a test id. Not the NAME,
|
|
452
523
|
// description, invalid or required state: those belong on the <input> below,
|
|
@@ -478,12 +549,14 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
478
549
|
// already exposes its value separately.
|
|
479
550
|
aria-label={ariaLabel}
|
|
480
551
|
role="combobox"
|
|
481
|
-
aria-expanded={
|
|
552
|
+
aria-expanded={expanded}
|
|
482
553
|
// Required by the role, and the half that was missing: the field said it
|
|
483
554
|
// was expanded and never said what it had expanded (ESLint's
|
|
484
555
|
// `role-has-required-aria-props`, the audit's §a11y).
|
|
485
556
|
aria-controls={listboxId}
|
|
486
|
-
|
|
557
|
+
// Pointer-device only: on a phone the sheet's own search box holds focus
|
|
558
|
+
// and names the row; the field behind it must not claim one.
|
|
559
|
+
aria-activedescendant={isPhone ? undefined : activeOption}
|
|
487
560
|
aria-autocomplete="list"
|
|
488
561
|
aria-invalid={field.isInvalid || undefined}
|
|
489
562
|
aria-describedby={mergeDescribedBy(field.describedBy, locked && lock.reasonId)}
|
|
@@ -540,30 +613,17 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
540
613
|
}}
|
|
541
614
|
onKeyDown={(e) => {
|
|
542
615
|
if (locked) return lockedKeyDown(e);
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
// the last row the arrows reach.
|
|
546
|
-
if (e.key === "ArrowDown") {
|
|
547
|
-
e.preventDefault();
|
|
548
|
-
setOpen(true);
|
|
549
|
-
setActive((i) => stepEnabled(rows, i, 1));
|
|
550
|
-
} else if (e.key === "ArrowUp") {
|
|
551
|
-
e.preventDefault();
|
|
552
|
-
setActive((i) => (i < 0 ? stepEnabled(rows, -1, 1) : stepEnabled(rows, i, -1)));
|
|
553
|
-
} else if (e.key === "Enter") {
|
|
554
|
-
// An IME's Enter takes nothing, and judges no loose text (BUG-9).
|
|
555
|
-
if (isImeEnter(e)) return;
|
|
556
|
-
if (open && isOptionEnabled(rows[active])) {
|
|
557
|
-
e.preventDefault();
|
|
558
|
-
if (active === createIndex && showCreate) create();
|
|
559
|
-
else take(matches[active]);
|
|
560
|
-
} else {
|
|
561
|
-
reconcile();
|
|
562
|
-
}
|
|
563
|
-
} else if (e.key === "Escape") {
|
|
616
|
+
listKeyDown(e);
|
|
617
|
+
if (e.key === "Escape") {
|
|
564
618
|
// A showing list takes the key and stops it — see the twin in
|
|
565
619
|
// {@link Combobox} (round 0.34 BUG-1).
|
|
566
620
|
if (showing && takeEscape(e)) return;
|
|
621
|
+
// With no list, putting loose text back is this field's own undo step,
|
|
622
|
+
// and the step is all the key does: claimed, so the dialog around the
|
|
623
|
+
// field stays — it closed with the form in it (refactor audit
|
|
624
|
+
// 2026-10-30, INP-5; ChipInput's draft is the rule). With nothing to
|
|
625
|
+
// undo the key goes on, as before.
|
|
626
|
+
if (text !== null && text !== (selected?.label ?? "")) claimEscape(e);
|
|
567
627
|
setText(null);
|
|
568
628
|
close();
|
|
569
629
|
} else if (e.key === "Tab") {
|
|
@@ -637,12 +697,13 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
637
697
|
)}
|
|
638
698
|
<FieldCaption parts={hintParts} />
|
|
639
699
|
{field.errorEl}
|
|
700
|
+
{/* The live status — see `useTypedListStatus` for where it goes and why. */}
|
|
701
|
+
{!isPhone && statusRegion}
|
|
640
702
|
{isPhone && (
|
|
641
703
|
<PickerSheet
|
|
642
704
|
open={open && !inert}
|
|
643
|
-
// Closing without choosing keeps the value
|
|
644
|
-
|
|
645
|
-
onClose={reconcile}
|
|
705
|
+
// Closing without choosing keeps the value — see `dismissSheet`.
|
|
706
|
+
onClose={dismissSheet}
|
|
646
707
|
title={sheetTitle ?? label}
|
|
647
708
|
query={sheetQuery}
|
|
648
709
|
onQueryChange={(v) => {
|
|
@@ -652,121 +713,104 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
652
713
|
searchPlaceholder={searchPlaceholder ?? placeholder ?? labels.search}
|
|
653
714
|
inputRef={sheetInputRef}
|
|
654
715
|
closeLabel={closeLabel}
|
|
716
|
+
// The field's own keys, in the box focus is in while the sheet is up: arrows
|
|
717
|
+
// and Enter there did nothing (INP-6, as BUG-5 gave the panel pickers).
|
|
718
|
+
onSearchKeyDown={listKeyDown}
|
|
719
|
+
listboxId={listboxId}
|
|
720
|
+
activeId={activeOption}
|
|
655
721
|
>
|
|
656
722
|
<ul id={listboxId} role="listbox">
|
|
657
|
-
{
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
aria-selected={o.value === value}
|
|
678
|
-
aria-disabled={o.disabled || undefined}
|
|
679
|
-
onClick={() => take(o)}
|
|
680
|
-
className={cn(
|
|
681
|
-
SHEET_ROW_CLASS,
|
|
682
|
-
o.value === value && "font-medium",
|
|
683
|
-
o.disabled && DISABLED_ROW_CLASS,
|
|
684
|
-
)}
|
|
685
|
-
>
|
|
686
|
-
{o.label}
|
|
687
|
-
</button>
|
|
688
|
-
</li>
|
|
689
|
-
</Fragment>
|
|
723
|
+
{groupedRows(true, (o, i) => (
|
|
724
|
+
<li role="presentation">
|
|
725
|
+
<button
|
|
726
|
+
type="button"
|
|
727
|
+
id={optionId(i)}
|
|
728
|
+
role="option"
|
|
729
|
+
aria-selected={o.value === value}
|
|
730
|
+
aria-disabled={o.disabled || undefined}
|
|
731
|
+
onClick={() => take(o)}
|
|
732
|
+
className={cn(
|
|
733
|
+
SHEET_ROW_CLASS,
|
|
734
|
+
// The row the sheet's arrows are on.
|
|
735
|
+
i === active && !o.disabled && "bg-active",
|
|
736
|
+
o.value === value && "font-medium",
|
|
737
|
+
o.disabled && DISABLED_ROW_CLASS,
|
|
738
|
+
)}
|
|
739
|
+
>
|
|
740
|
+
{o.label}
|
|
741
|
+
</button>
|
|
742
|
+
</li>
|
|
690
743
|
))}
|
|
691
744
|
{showCreate && (
|
|
692
745
|
<li role="presentation">
|
|
693
746
|
<button
|
|
694
747
|
type="button"
|
|
748
|
+
id={optionId(createIndex)}
|
|
695
749
|
role="option"
|
|
696
750
|
// An action, never chosen — see `onCreate`.
|
|
697
751
|
aria-selected={false}
|
|
698
752
|
aria-disabled={createLocked || undefined}
|
|
699
753
|
onClick={create}
|
|
700
|
-
className={cn(
|
|
754
|
+
className={cn(
|
|
755
|
+
SHEET_ROW_CLASS,
|
|
756
|
+
CREATE_ROW_CLASS,
|
|
757
|
+
active === createIndex && !createLocked && "bg-active",
|
|
758
|
+
createLocked && DISABLED_ROW_CLASS,
|
|
759
|
+
)}
|
|
701
760
|
>
|
|
702
761
|
{createRowContent}
|
|
703
762
|
</button>
|
|
704
763
|
</li>
|
|
705
764
|
)}
|
|
706
765
|
{/* "Nothing matched" only when there is nothing to do either: with a create
|
|
707
|
-
row the list is not empty, it is offering to fill itself.
|
|
766
|
+
row the list is not empty, it is offering to fill itself. A picture: the
|
|
767
|
+
status below says it to a reader. */}
|
|
708
768
|
{matches.length === 0 && !showCreate && (
|
|
709
|
-
<li className="px-4 py-3 text-sm text-muted">
|
|
769
|
+
<li aria-hidden className="px-4 py-3 text-sm text-muted">
|
|
770
|
+
{labels.noResults}
|
|
771
|
+
</li>
|
|
710
772
|
)}
|
|
711
773
|
</ul>
|
|
774
|
+
{statusRegion}
|
|
712
775
|
</PickerSheet>
|
|
713
776
|
)}
|
|
714
777
|
{showing && (
|
|
715
778
|
<SuggestionList id={listboxId} anchorRef={fieldRef} panelRef={panelRef}>
|
|
716
|
-
{
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
//
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
take(o);
|
|
752
|
-
}}
|
|
753
|
-
onMouseEnter={() => {
|
|
754
|
-
if (!o.disabled) setActive(i);
|
|
755
|
-
}}
|
|
756
|
-
className={cn(
|
|
757
|
-
rowClass(i === active && !o.disabled),
|
|
758
|
-
o.disabled && DISABLED_ROW_CLASS,
|
|
759
|
-
// Indented under its heading, so the hierarchy is readable at a
|
|
760
|
-
// glance instead of inferred from grey trailing text.
|
|
761
|
-
o.group && "ps-6",
|
|
762
|
-
o.value === value && "font-medium",
|
|
763
|
-
)}
|
|
764
|
-
>
|
|
765
|
-
{o.label}
|
|
766
|
-
{o.sublabel && <span className="ms-2 text-xs text-placeholder">{o.sublabel}</span>}
|
|
767
|
-
</button>
|
|
768
|
-
</li>
|
|
769
|
-
</Fragment>
|
|
779
|
+
{groupedRows(false, (o, i) => (
|
|
780
|
+
<li role="presentation">
|
|
781
|
+
<button
|
|
782
|
+
type="button"
|
|
783
|
+
id={optionId(i)}
|
|
784
|
+
// See {@link Combobox}: the role rides the button, `aria-selected` is the
|
|
785
|
+
// CHOSEN row, and the keyboard's row is the field's
|
|
786
|
+
// `aria-activedescendant`.
|
|
787
|
+
role="option"
|
|
788
|
+
aria-selected={o.value === value}
|
|
789
|
+
aria-disabled={o.disabled || undefined}
|
|
790
|
+
tabIndex={-1}
|
|
791
|
+
onMouseDown={(e) => {
|
|
792
|
+
// mousedown (not click) so the input's blur can't close the list
|
|
793
|
+
// before the selection registers. Prevented on a disabled row too, so
|
|
794
|
+
// pressing one leaves the field focused and open.
|
|
795
|
+
e.preventDefault();
|
|
796
|
+
take(o);
|
|
797
|
+
}}
|
|
798
|
+
onMouseEnter={() => {
|
|
799
|
+
if (!o.disabled) setActive(i);
|
|
800
|
+
}}
|
|
801
|
+
className={cn(
|
|
802
|
+
rowClass(i === active && !o.disabled),
|
|
803
|
+
o.disabled && DISABLED_ROW_CLASS,
|
|
804
|
+
// Indented under its heading, so the hierarchy is readable at a glance
|
|
805
|
+
// instead of inferred from grey trailing text.
|
|
806
|
+
o.group && "ps-6",
|
|
807
|
+
o.value === value && "font-medium",
|
|
808
|
+
)}
|
|
809
|
+
>
|
|
810
|
+
{o.label}
|
|
811
|
+
{o.sublabel && <span className="ms-2 text-xs text-placeholder">{o.sublabel}</span>}
|
|
812
|
+
</button>
|
|
813
|
+
</li>
|
|
770
814
|
))}
|
|
771
815
|
{showCreate && (
|
|
772
816
|
<li role="presentation">
|
package/src/components/input.tsx
CHANGED