@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// the clear button — and the props, label hook and trigger format the two share.
|
|
3
3
|
// Moved out of date-picker.tsx as it was (MOD-9, refactor audit 2026-10); date-picker
|
|
4
4
|
// still exports the one public name here, `DateTriggerAttributes`.
|
|
5
|
-
import { useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
5
|
+
import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
6
6
|
import type { ComponentPropsWithoutRef, ReactNode, Ref, RefObject } from "react";
|
|
7
7
|
import { Calendar, X } from "lucide-react";
|
|
8
8
|
import { cn } from "../lib/cn";
|
|
@@ -19,7 +19,13 @@ import {
|
|
|
19
19
|
import { splitTriggerAria } from "./trigger-aria";
|
|
20
20
|
import type { TriggerAria } from "./trigger-aria";
|
|
21
21
|
import { FIELD_TRIGGER, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
|
|
22
|
-
import {
|
|
22
|
+
import {
|
|
23
|
+
assignRef,
|
|
24
|
+
FieldLabelLine,
|
|
25
|
+
LABEL_ABOVE_BOX,
|
|
26
|
+
type DisabledReasonDisplay,
|
|
27
|
+
type FieldHelpProps,
|
|
28
|
+
} from "./field-parts";
|
|
23
29
|
import { FullBleedDialog } from "./full-bleed-dialog";
|
|
24
30
|
import type { RemLength } from "../hooks/use-breakpoint";
|
|
25
31
|
import type { MiniCalendarProps } from "./mini-calendar";
|
|
@@ -50,6 +56,22 @@ export interface DatePickerBaseProps extends Omit<ComponentPropsWithoutRef<"div"
|
|
|
50
56
|
* `<UiKitProvider labels>`; kept as a prop because it predates the provider. */
|
|
51
57
|
clearLabel?: string;
|
|
52
58
|
disabled?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Why the date cannot be changed — {@link Select}'s `disabledReason`, for a picker that
|
|
61
|
+
* SAVES on change (a report's period kept per user, a filter persisted as it moves).
|
|
62
|
+
* The trigger stays focusable and `aria-disabled`, the calendar does not open, the ‹ ›
|
|
63
|
+
* and Today buttons refuse, the clear is not offered, and `onChange` never fires; the
|
|
64
|
+
* reason is a line under the field at Large and on a touch screen, else in the kit
|
|
65
|
+
* {@link Tooltip} (`disabledReasonDisplay`), and on the trigger's `aria-describedby`.
|
|
66
|
+
* Wins over `disabled`.
|
|
67
|
+
*
|
|
68
|
+
* 0.52 (refactor audit 2026-10-30, API-3): the date pickers and MonthPicker were the
|
|
69
|
+
* only value fields with no lock opt-in.
|
|
70
|
+
*/
|
|
71
|
+
disabledReason?: ReactNode;
|
|
72
|
+
/** Where the reason shows — {@link Button}'s `disabledReasonDisplay`: a line under the
|
|
73
|
+
* field at Large and on a touch screen by default, the tooltip otherwise. */
|
|
74
|
+
disabledReasonDisplay?: DisabledReasonDisplay;
|
|
53
75
|
/** Required and unanswered — {@link FIELD_INVALID}. See {@link Input}'s `invalid`. */
|
|
54
76
|
invalid?: boolean;
|
|
55
77
|
/**
|
|
@@ -115,7 +137,7 @@ export interface DatePickerBaseProps extends Omit<ComponentPropsWithoutRef<"div"
|
|
|
115
137
|
*
|
|
116
138
|
* Off by default: the caption becomes one more stop in the panel's tab order, which a
|
|
117
139
|
* 0.x minor does not spring on a form. Works in the popover and in
|
|
118
|
-
* `DateRangePicker`'s phone sheet alike, beside presets and
|
|
140
|
+
* `DateRangePicker`'s phone sheet alike, beside presets and with `apply`
|
|
119
141
|
* (a preset picked while the months are open goes back to the days, on its start).
|
|
120
142
|
*
|
|
121
143
|
* Why not a two-month panel (`months={2}`) instead, or beside it: for a twelve-month
|
|
@@ -185,6 +207,9 @@ export interface DateTriggerAttributes {
|
|
|
185
207
|
/** The field's required state — `Field required` hands it down with the id pair. */
|
|
186
208
|
"aria-required"?: boolean | "true" | "false";
|
|
187
209
|
disabled?: boolean;
|
|
210
|
+
/** Locked by the write lock (0.52, `commit` / `disabledReason`): focusable, and the
|
|
211
|
+
* click opens nothing. Dress a custom trigger for it as for `disabled`. */
|
|
212
|
+
"aria-disabled"?: true;
|
|
188
213
|
onClick: () => void;
|
|
189
214
|
className: string;
|
|
190
215
|
}
|
|
@@ -235,6 +260,7 @@ function DateFieldTrigger({
|
|
|
235
260
|
valueId,
|
|
236
261
|
padded,
|
|
237
262
|
disabled,
|
|
263
|
+
locked,
|
|
238
264
|
invalid,
|
|
239
265
|
required,
|
|
240
266
|
panelId,
|
|
@@ -260,6 +286,8 @@ function DateFieldTrigger({
|
|
|
260
286
|
valueId: string;
|
|
261
287
|
padded: boolean;
|
|
262
288
|
disabled?: boolean;
|
|
289
|
+
/** The write lock: the focusable kind of disabled (see `disabledReason`). */
|
|
290
|
+
locked: boolean;
|
|
263
291
|
invalid?: boolean;
|
|
264
292
|
/** `aria-required`, on the trigger with the rest of the field's ARIA. */
|
|
265
293
|
required?: boolean | "true" | "false";
|
|
@@ -300,8 +328,15 @@ function DateFieldTrigger({
|
|
|
300
328
|
const attrs: DateTriggerAttributes = {
|
|
301
329
|
ref: triggerRef,
|
|
302
330
|
type: "button",
|
|
303
|
-
disabled
|
|
304
|
-
|
|
331
|
+
// The focusable kind of disabled while locked (Button's rule): native `disabled`
|
|
332
|
+
// would take the field out of the tab order, and the reason with it.
|
|
333
|
+
disabled: locked ? undefined : disabled,
|
|
334
|
+
"aria-disabled": locked || undefined,
|
|
335
|
+
// Locked, the calendar does not open. One open when the lock arrives closes: the
|
|
336
|
+
// picker moves the field into the reason's frame, which remounts it, as Select's.
|
|
337
|
+
onClick: () => {
|
|
338
|
+
if (!locked) toggle();
|
|
339
|
+
},
|
|
305
340
|
// The name has to carry the VALUE. A bare `aria-label={label}` — which is what
|
|
306
341
|
// this was — replaces the button's text outright, so the one field in the form
|
|
307
342
|
// whose entire job is to show a date announced "Due date" and stopped there,
|
|
@@ -335,7 +370,7 @@ function DateFieldTrigger({
|
|
|
335
370
|
FIELD_TRIGGER,
|
|
336
371
|
"pe-9",
|
|
337
372
|
padded && FIELD_FLOATING_PAD,
|
|
338
|
-
disabled && "cursor-not-allowed opacity-50",
|
|
373
|
+
(disabled || locked) && "cursor-not-allowed opacity-50",
|
|
339
374
|
// An `aria-invalid` from a Field spread paints too, as on Input and AmountInput.
|
|
340
375
|
isInvalid && FIELD_INVALID,
|
|
341
376
|
),
|
|
@@ -389,6 +424,7 @@ export function DateField({
|
|
|
389
424
|
hasValue,
|
|
390
425
|
label,
|
|
391
426
|
disabled,
|
|
427
|
+
locked = false,
|
|
392
428
|
clearable,
|
|
393
429
|
clearLabel,
|
|
394
430
|
panelLabel,
|
|
@@ -416,6 +452,9 @@ export function DateField({
|
|
|
416
452
|
/** A `FieldHint` for the label line, beside the label. */
|
|
417
453
|
labelHint?: ReactNode;
|
|
418
454
|
disabled?: boolean;
|
|
455
|
+
/** The write lock is on: the trigger is focusable and opens nothing, no clear. The
|
|
456
|
+
* picker draws the reason's frame around the field (or its step row). */
|
|
457
|
+
locked?: boolean;
|
|
419
458
|
clearable?: boolean;
|
|
420
459
|
/** Already resolved by the picker (prop > provider > English). */
|
|
421
460
|
clearLabel: string;
|
|
@@ -435,8 +474,19 @@ export function DateField({
|
|
|
435
474
|
renderTrigger?: TriggerRenderer;
|
|
436
475
|
children: (close: () => void, frame: PanelFrame) => ReactNode;
|
|
437
476
|
}) {
|
|
438
|
-
|
|
477
|
+
// A clear is a change like any other: not offered while locked.
|
|
478
|
+
const showClear = Boolean(clearable && hasValue && !disabled && !locked);
|
|
439
479
|
const [aria, wrapperRest] = splitTriggerAria(rest);
|
|
480
|
+
// The trigger, for the clear to hand the focus to (INP-10, below), beside the picker's
|
|
481
|
+
// own `ref`.
|
|
482
|
+
const triggerEl = useRef<HTMLButtonElement | null>(null);
|
|
483
|
+
const toTrigger = useCallback(
|
|
484
|
+
(node: HTMLButtonElement | null) => {
|
|
485
|
+
triggerEl.current = node;
|
|
486
|
+
assignRef(fieldRef, node);
|
|
487
|
+
},
|
|
488
|
+
[fieldRef],
|
|
489
|
+
);
|
|
440
490
|
// The panel is portalled to <body> and leaves the subtree whose `dir` it inherited,
|
|
441
491
|
// so a calendar in an RTL form opened LTR — the grid's columns, its arrow keys and
|
|
442
492
|
// its chevrons all the wrong way round. Read at the moment of opening (the only way
|
|
@@ -524,10 +574,11 @@ export function DateField({
|
|
|
524
574
|
valueId={valueId}
|
|
525
575
|
padded={label !== undefined}
|
|
526
576
|
disabled={disabled}
|
|
577
|
+
locked={locked}
|
|
527
578
|
invalid={invalid}
|
|
528
579
|
required={ariaRequired}
|
|
529
580
|
renderTrigger={renderTrigger}
|
|
530
|
-
fieldRef={
|
|
581
|
+
fieldRef={toTrigger}
|
|
531
582
|
/>
|
|
532
583
|
);
|
|
533
584
|
return (
|
|
@@ -573,7 +624,13 @@ export function DateField({
|
|
|
573
624
|
<button
|
|
574
625
|
type="button"
|
|
575
626
|
aria-label={clearLabel}
|
|
576
|
-
onClick={
|
|
627
|
+
onClick={() => {
|
|
628
|
+
onClear();
|
|
629
|
+
// The × goes with the value, so a keyboard clear left the focus on a button
|
|
630
|
+
// that was about to unmount — and it fell to <body> (refactor audit
|
|
631
|
+
// 2026-10-30, INP-10). The trigger, as SearchField's clear does.
|
|
632
|
+
triggerEl.current?.focus();
|
|
633
|
+
}}
|
|
577
634
|
className="absolute end-1.5 top-1/2 -translate-y-1/2 rounded p-1 text-placeholder hover:text-secondary"
|
|
578
635
|
>
|
|
579
636
|
<X className="size-4" />
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type { ComponentType } from "react";
|
|
1
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
2
|
import { CalendarClock, ChevronLeft, ChevronRight } from "lucide-react";
|
|
3
3
|
import { cn } from "../lib/cn";
|
|
4
4
|
import { addDaysIso } from "../lib/dates";
|
|
5
5
|
import { useKitLocale } from "../i18n/kit-labels";
|
|
6
6
|
import { splitTriggerAria } from "./trigger-aria";
|
|
7
7
|
import { FIELD_BASE } from "./field-base";
|
|
8
|
-
import { FieldBox, useFieldMessages } from "./field-parts";
|
|
8
|
+
import { FieldBox, LockedReason, useFieldMessages, useLockReason } from "./field-parts";
|
|
9
9
|
import { Tooltip } from "./tooltip";
|
|
10
|
+
import type { CommitScope } from "./write-lock";
|
|
10
11
|
import { DateField, useDatePickerLabels, useTriggerFormat, withEndHint, type DatePickerBaseProps } from "./date-field";
|
|
11
12
|
import { PanelCalendar } from "./jump-calendar";
|
|
12
13
|
// The shared field, the month-jump calendar and the range picker live in date-field.tsx,
|
|
@@ -15,7 +16,6 @@ import { PanelCalendar } from "./jump-calendar";
|
|
|
15
16
|
export type { DateTriggerAttributes } from "./date-field";
|
|
16
17
|
export { DateRangePicker } from "./date-range-picker";
|
|
17
18
|
export type {
|
|
18
|
-
DateRangeCommit,
|
|
19
19
|
DateRangeDraftSummary,
|
|
20
20
|
DateRangePickerPreset,
|
|
21
21
|
DateRangePickerProps,
|
|
@@ -61,18 +61,34 @@ const STEP_ROW_STACK_AT_LARGE = cn(
|
|
|
61
61
|
// (`[&_button:focus]:ring-1 [&_button:focus]:ring-inset` on the row) also reached the
|
|
62
62
|
// label's "?" and thinned its 2px focus frame to 1.
|
|
63
63
|
|
|
64
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* One ‹ / › day-step (or today) button, sized to sit flush beside the field.
|
|
66
|
+
*
|
|
67
|
+
* Two kinds of "cannot" (refactor audit 2026-10-30, INP-4). `off` is natively `disabled`,
|
|
68
|
+
* out of the tab order: the field is `disabled`, or empty with nothing to step from — no
|
|
69
|
+
* press of these buttons gets there, so the focus is never on one as it turns. `refused`
|
|
70
|
+
* is `aria-disabled` with a click that does nothing, JumpCalendar's rule: › pressed onto
|
|
71
|
+
* `max`, ‹ onto `min` and Today onto today are refused by the very press the focus is on,
|
|
72
|
+
* and a focused button that turns `disabled` drops the focus to <body>, mid-form
|
|
73
|
+
* (keksdose's shared date field passes `step` and `today` in 14 files). A lock refuses
|
|
74
|
+
* too, and the lock's reason describes the button.
|
|
75
|
+
*/
|
|
65
76
|
function StepButton({
|
|
66
77
|
icon: Icon,
|
|
67
78
|
label,
|
|
68
|
-
|
|
79
|
+
off,
|
|
80
|
+
refused,
|
|
81
|
+
reasonId,
|
|
69
82
|
onClick,
|
|
70
83
|
mirror,
|
|
71
84
|
className,
|
|
72
85
|
}: {
|
|
73
86
|
icon: ComponentType<{ className?: string }>;
|
|
74
87
|
label: string;
|
|
75
|
-
|
|
88
|
+
off: boolean;
|
|
89
|
+
refused: boolean;
|
|
90
|
+
/** While locked: the id of the lock's reason, which the row's frame shows. */
|
|
91
|
+
reasonId?: string;
|
|
76
92
|
onClick: () => void;
|
|
77
93
|
/** Flip the icon in RTL — for the ‹ › day steps, whose "previous" points to the
|
|
78
94
|
* reading start. Not for the today icon, which has no direction. */
|
|
@@ -80,29 +96,42 @@ function StepButton({
|
|
|
80
96
|
/** The button's corners in the joined group (see DatePicker). */
|
|
81
97
|
className?: string;
|
|
82
98
|
}) {
|
|
99
|
+
const button = (
|
|
100
|
+
<button
|
|
101
|
+
type="button"
|
|
102
|
+
aria-label={label}
|
|
103
|
+
disabled={off}
|
|
104
|
+
aria-disabled={(!off && refused) || undefined}
|
|
105
|
+
aria-describedby={reasonId}
|
|
106
|
+
onClick={() => {
|
|
107
|
+
if (!refused) onClick();
|
|
108
|
+
}}
|
|
109
|
+
className={cn(
|
|
110
|
+
FIELD_BASE,
|
|
111
|
+
// FIELD_BASE is `block w-full` for text inputs; a step button is neither, and
|
|
112
|
+
// px-3 would make it wider than it needs to be. twMerge lets these win.
|
|
113
|
+
"relative flex h-full w-10 shrink-0 items-center justify-center px-0 text-muted",
|
|
114
|
+
"hover:bg-hover hover:text-secondary",
|
|
115
|
+
// Dimmed ICON, not a dimmed box: at 40% opacity the whole button — border
|
|
116
|
+
// included — faded out of the group and read as a broken, detached control. The
|
|
117
|
+
// same look for the focusable kind (INP-4).
|
|
118
|
+
"disabled:cursor-not-allowed disabled:text-placeholder disabled:opacity-60 disabled:hover:bg-surface",
|
|
119
|
+
"aria-disabled:cursor-not-allowed aria-disabled:text-placeholder aria-disabled:opacity-60 aria-disabled:hover:bg-surface",
|
|
120
|
+
// A part of a joined row: FIELD_BASE's 2px focus line, whole at 125 % (K5, the
|
|
121
|
+
// note above this function).
|
|
122
|
+
className,
|
|
123
|
+
)}
|
|
124
|
+
>
|
|
125
|
+
<Icon className={cn("size-4", mirror && "rtl:-scale-x-100")} />
|
|
126
|
+
</button>
|
|
127
|
+
);
|
|
128
|
+
// Locked, the row's frame holds the reason's bubble; a name bubble of its own as well
|
|
129
|
+
// would be two on one hover (IconButton drops its own the same way). The wrapper stays
|
|
130
|
+
// — STEP_ROW_STACK_AT_LARGE lays the buttons out by it.
|
|
131
|
+
if (reasonId) return <span className="relative inline-flex">{button}</span>;
|
|
83
132
|
return (
|
|
84
133
|
<Tooltip label={label} portal>
|
|
85
|
-
|
|
86
|
-
type="button"
|
|
87
|
-
aria-label={label}
|
|
88
|
-
disabled={disabled}
|
|
89
|
-
onClick={onClick}
|
|
90
|
-
className={cn(
|
|
91
|
-
FIELD_BASE,
|
|
92
|
-
// FIELD_BASE is `block w-full` for text inputs; a step button is neither, and
|
|
93
|
-
// px-3 would make it wider than it needs to be. twMerge lets these win.
|
|
94
|
-
"relative flex h-full w-10 shrink-0 items-center justify-center px-0 text-muted",
|
|
95
|
-
"hover:bg-hover hover:text-secondary",
|
|
96
|
-
// Dimmed ICON, not a dimmed box: at 40% opacity the whole button — border
|
|
97
|
-
// included — faded out of the group and read as a broken, detached control.
|
|
98
|
-
"disabled:cursor-not-allowed disabled:text-placeholder disabled:opacity-60 disabled:hover:bg-surface",
|
|
99
|
-
// A part of a joined row: FIELD_BASE's 2px focus line, whole at 125 % (K5, the
|
|
100
|
-
// note above this function).
|
|
101
|
-
className,
|
|
102
|
-
)}
|
|
103
|
-
>
|
|
104
|
-
<Icon className={cn("size-4", mirror && "rtl:-scale-x-100")} />
|
|
105
|
-
</button>
|
|
134
|
+
{button}
|
|
106
135
|
</Tooltip>
|
|
107
136
|
);
|
|
108
137
|
}
|
|
@@ -114,7 +143,8 @@ export interface DatePickerProps extends DatePickerBaseProps {
|
|
|
114
143
|
/**
|
|
115
144
|
* Flank the field with ‹ › buttons that move the value one day. For fields whose
|
|
116
145
|
* typical edit is a day or two — opening a calendar to go "yesterday" is three
|
|
117
|
-
* interactions for what should be one.
|
|
146
|
+
* interactions for what should be one. A button whose day is outside `min` / `max` is
|
|
147
|
+
* refused (`aria-disabled`, still focusable — 0.52); with no value both are disabled.
|
|
118
148
|
*
|
|
119
149
|
* Off by default: on a filter or a far-away date the buttons are dead weight, and
|
|
120
150
|
* they cost ~5rem of width that a narrow layout may not have.
|
|
@@ -127,7 +157,9 @@ export interface DatePickerProps extends DatePickerBaseProps {
|
|
|
127
157
|
stepLabels?: { prev: string; next: string };
|
|
128
158
|
/**
|
|
129
159
|
* Today's date as ISO "YYYY-MM-DD". Adds a jump-to-today button beside the field,
|
|
130
|
-
*
|
|
160
|
+
* refused once the value already is that day — `aria-disabled`, so the focus stays on
|
|
161
|
+
* the button that was just pressed (0.52) — and disabled while that day is outside
|
|
162
|
+
* `min` / `max`.
|
|
131
163
|
*
|
|
132
164
|
* Passed in rather than read from a clock here: a component that decides what "today"
|
|
133
165
|
* is cannot be tested at a fixed date, and the consumer already has one definition of
|
|
@@ -138,6 +170,15 @@ export interface DatePickerProps extends DatePickerBaseProps {
|
|
|
138
170
|
today?: string;
|
|
139
171
|
/** Accessible name for the today button; wins over `datePicker.today`. */
|
|
140
172
|
todayLabel?: string;
|
|
173
|
+
/**
|
|
174
|
+
* This picker COMMITS — picking a date saves it (a row's date edited in place, a
|
|
175
|
+
* filter kept as it moves). Under a locked {@link WriteLockProvider} it is locked the
|
|
176
|
+
* `disabledReason` way, with the lock's reason; a {@link CommitScope}, as on every kit
|
|
177
|
+
* control. A date field inside a form with its own Save stays editable under the lock —
|
|
178
|
+
* leave this off there, and put `commit` on the Save. 0.52 (refactor audit 2026-10-30,
|
|
179
|
+
* API-3).
|
|
180
|
+
*/
|
|
181
|
+
commit?: CommitScope;
|
|
141
182
|
}
|
|
142
183
|
|
|
143
184
|
/** Single-date picker: a field showing the formatted date, opening a calendar. */
|
|
@@ -162,6 +203,9 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
162
203
|
clearable,
|
|
163
204
|
clearLabel,
|
|
164
205
|
disabled,
|
|
206
|
+
disabledReason,
|
|
207
|
+
disabledReasonDisplay,
|
|
208
|
+
commit,
|
|
165
209
|
invalid,
|
|
166
210
|
hint,
|
|
167
211
|
help,
|
|
@@ -176,8 +220,15 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
176
220
|
const locale = useKitLocale(localeProp);
|
|
177
221
|
const text = useDatePickerLabels(clearLabel, stepLabels, todayLabel);
|
|
178
222
|
const render = useTriggerFormat("datePicker", locale, formatOptions, formatValue);
|
|
223
|
+
// The write lock (API-3): Select's — the trigger stays reachable and says why.
|
|
224
|
+
const lock = useLockReason(commit, disabledReason);
|
|
225
|
+
const locked = lock.locked;
|
|
226
|
+
const change = (iso: string) => {
|
|
227
|
+
if (!locked) onChange(iso);
|
|
228
|
+
};
|
|
179
229
|
// keksdose K4: the caption and the error under the field, attached to the TRIGGER
|
|
180
|
-
// (the element a screen reader is on) after any description of the caller's own
|
|
230
|
+
// (the element a screen reader is on) after any description of the caller's own; a
|
|
231
|
+
// lock's reason between the two, as on Select.
|
|
181
232
|
const messages = useFieldMessages({
|
|
182
233
|
hint,
|
|
183
234
|
help,
|
|
@@ -186,6 +237,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
186
237
|
invalid,
|
|
187
238
|
describedBy: rest["aria-describedby"],
|
|
188
239
|
ariaInvalid: rest["aria-invalid"],
|
|
240
|
+
reasonId: locked && lock.reasonId,
|
|
189
241
|
});
|
|
190
242
|
// With a step or a today button beside it the field is no longer the outermost
|
|
191
243
|
// element — the flex row at the bottom is, and a caller's attributes belong on
|
|
@@ -207,14 +259,18 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
207
259
|
clearLabel={text.clear}
|
|
208
260
|
panelLabel={text.panel}
|
|
209
261
|
disabled={disabled}
|
|
262
|
+
locked={locked}
|
|
210
263
|
invalid={messages.isInvalid}
|
|
211
|
-
|
|
264
|
+
// In the row, the field fills what the buttons leave and the caller's classes are
|
|
265
|
+
// the row's — with `today` alone too: dressed on `step` alone, a today-only row put
|
|
266
|
+
// them on both (refactor audit 2026-10-30, INP-13). Locked, they are the frame's.
|
|
267
|
+
className={wrapped ? "min-w-0 flex-1" : locked ? undefined : className}
|
|
212
268
|
// Named for STEP_ROW_STACK_AT_LARGE; only in the row, so a caller's own
|
|
213
269
|
// `data-slot` on a bare field is left alone.
|
|
214
270
|
{...(wrapped ? { "data-slot": "date-step-field" } : {})}
|
|
215
271
|
hasValue={Boolean(value)}
|
|
216
272
|
triggerText={value ? render(value) : (placeholder ?? "")}
|
|
217
|
-
onClear={() =>
|
|
273
|
+
onClear={() => change("")}
|
|
218
274
|
>
|
|
219
275
|
{(close) => (
|
|
220
276
|
<PanelCalendar
|
|
@@ -228,7 +284,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
228
284
|
max={max}
|
|
229
285
|
labels={calendarLabels}
|
|
230
286
|
onSelect={(iso) => {
|
|
231
|
-
|
|
287
|
+
change(iso);
|
|
232
288
|
close();
|
|
233
289
|
}}
|
|
234
290
|
/>
|
|
@@ -238,23 +294,32 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
238
294
|
// Passed at all — even as `undefined` — the field keeps its box; see FieldBox.
|
|
239
295
|
const reserve = "error" in props || "hint" in props;
|
|
240
296
|
const endHint = label === undefined ? messages.labelHint : undefined;
|
|
297
|
+
// Locked, the field — or the whole row, whose buttons change the value too — sits in
|
|
298
|
+
// the reason's frame (the line, or the Tooltip), which becomes the outermost box: the
|
|
299
|
+
// caller's classes move onto it, as on Select, so a lock does not reflow the form.
|
|
300
|
+
const withReason = (box: ReactNode) =>
|
|
301
|
+
locked ? (
|
|
302
|
+
<LockedReason lock={lock} display={disabledReasonDisplay} className={cn("block", className)}>
|
|
303
|
+
{box}
|
|
304
|
+
</LockedReason>
|
|
305
|
+
) : (
|
|
306
|
+
box
|
|
307
|
+
);
|
|
241
308
|
if (!wrapped) {
|
|
242
309
|
return (
|
|
243
310
|
<FieldBox below={messages.below} reserve={reserve}>
|
|
244
|
-
{withEndHint(field, endHint)}
|
|
311
|
+
{withReason(withEndHint(field, endHint))}
|
|
245
312
|
</FieldBox>
|
|
246
313
|
);
|
|
247
314
|
}
|
|
248
315
|
|
|
249
|
-
// An empty field has nothing to step from, so both buttons are
|
|
250
|
-
//
|
|
316
|
+
// An empty field has nothing to step from, so both buttons are off until a date is
|
|
317
|
+
// picked. Bounds are compared as strings: "YYYY-MM-DD" sorts chronologically.
|
|
251
318
|
const target = (days: number) => (value ? addDaysIso(value, days) : "");
|
|
252
319
|
const outOfBounds = (iso: string) => Boolean((min && iso < min) || (max && iso > max));
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
return outOfBounds(next);
|
|
257
|
-
};
|
|
320
|
+
// A lock's reason wins over `disabled`, as on Select: the buttons stay focusable then.
|
|
321
|
+
const fieldOff = Boolean(disabled) && !locked;
|
|
322
|
+
const reasonId = locked ? lock.reasonId : undefined;
|
|
258
323
|
const row = (
|
|
259
324
|
// ONE joined control, not three boxes in a row: the buttons and the field share
|
|
260
325
|
// their borders (each piece overlaps the previous by a pixel) and only the outer
|
|
@@ -283,7 +348,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
283
348
|
// …and its line is 2px, so no side of it reads half-strength at 125 % (live #394,
|
|
284
349
|
// fourth round): FIELD_BASE's inset ring, which every part of the row carries.
|
|
285
350
|
STEP_ROW_STACK_AT_LARGE,
|
|
286
|
-
className,
|
|
351
|
+
!locked && className,
|
|
287
352
|
)}
|
|
288
353
|
>
|
|
289
354
|
{step && (
|
|
@@ -291,8 +356,10 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
291
356
|
icon={ChevronLeft}
|
|
292
357
|
mirror
|
|
293
358
|
label={text.previousDay}
|
|
294
|
-
|
|
295
|
-
|
|
359
|
+
off={fieldOff || !value}
|
|
360
|
+
refused={locked || outOfBounds(target(-1))}
|
|
361
|
+
reasonId={reasonId}
|
|
362
|
+
onClick={() => change(target(-1))}
|
|
296
363
|
className="rounded-e-none"
|
|
297
364
|
/>
|
|
298
365
|
)}
|
|
@@ -302,17 +369,26 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
302
369
|
icon={ChevronRight}
|
|
303
370
|
mirror
|
|
304
371
|
label={text.nextDay}
|
|
305
|
-
|
|
306
|
-
|
|
372
|
+
off={fieldOff || !value}
|
|
373
|
+
refused={locked || outOfBounds(target(1))}
|
|
374
|
+
reasonId={reasonId}
|
|
375
|
+
onClick={() => change(target(1))}
|
|
307
376
|
className={cn("rounded-s-none", today && "rounded-e-none")}
|
|
308
377
|
/>
|
|
309
378
|
)}
|
|
310
379
|
{today && (
|
|
380
|
+
// Refused once the value is today: pressable as a no-op would keep the focus too
|
|
381
|
+
// (INP-4), and this also says there is nothing to jump to. Today outside the
|
|
382
|
+
// bounds is `off`: no press here gets there, as MonthPicker's stepper has it — it
|
|
383
|
+
// was refused, a tab stop that could never do anything (0.52 code review,
|
|
384
|
+
// date-picker.tsx). A lock wins, focusable, to say why.
|
|
311
385
|
<StepButton
|
|
312
386
|
icon={CalendarClock}
|
|
313
387
|
label={text.today}
|
|
314
|
-
|
|
315
|
-
|
|
388
|
+
off={fieldOff || (!locked && outOfBounds(today))}
|
|
389
|
+
refused={locked || value === today}
|
|
390
|
+
reasonId={reasonId}
|
|
391
|
+
onClick={() => change(today)}
|
|
316
392
|
className="rounded-s-none"
|
|
317
393
|
/>
|
|
318
394
|
)}
|
|
@@ -322,7 +398,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
322
398
|
// the date, and the steppers are part of how it is entered.
|
|
323
399
|
return (
|
|
324
400
|
<FieldBox below={messages.below} reserve={reserve}>
|
|
325
|
-
{withEndHint(row, endHint)}
|
|
401
|
+
{withReason(withEndHint(row, endHint))}
|
|
326
402
|
</FieldBox>
|
|
327
403
|
);
|
|
328
404
|
}
|