@eifi1/ui-kit 0.51.6 → 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 +146 -26
- 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 +3 -7
- 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.d.ts +3 -2
- package/dist/auth/complete-name-dialog.js +3 -5
- 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-request.d.ts +11 -2
- package/dist/billing/cancel-request.js +15 -3
- package/dist/billing/cancel-request.js.map +1 -1
- package/dist/billing/cancel-subscription.d.ts +22 -10
- package/dist/billing/cancel-subscription.js +8 -11
- 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 +21 -9
- package/dist/billing/plan-switch.js +10 -8
- 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 +22 -4
- package/dist/components/amount-input.js +3 -3
- 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/calculator.d.ts +21 -2
- package/dist/components/calculator.js +53 -14
- package/dist/components/calculator.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 +119 -7
- package/dist/components/combobox-core.js +151 -46
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +1 -1
- package/dist/components/combobox.js +142 -131
- 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 +36 -7
- package/dist/components/data-table-mobile.js +63 -31
- 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 +25 -8
- package/dist/components/data-table.js +154 -25
- 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/dialog-frame.d.ts +2 -1
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/entity-combobox.js +4 -2
- package/dist/components/entity-combobox.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 +150 -141
- 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 +4 -3
- 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.d.ts +24 -0
- package/dist/components/modal.js +12 -4
- package/dist/components/modal.js.map +1 -1
- package/dist/components/money-draft.js +7 -5
- package/dist/components/money-draft.js.map +1 -1
- package/dist/components/money-field.d.ts +2 -2
- package/dist/components/money-field.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-entity-combobox.js +2 -1
- package/dist/components/multi-entity-combobox.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/number-field.d.ts +6 -4
- package/dist/components/number-field.js +3 -2
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +4 -1
- package/dist/components/number-input.js +3 -2
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.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/reauth-dialog.d.ts +4 -5
- package/dist/components/reauth-dialog.js +1 -4
- package/dist/components/reauth-dialog.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 +10 -3
- package/dist/components/series-chart-axes.js +1 -0
- 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 +13 -11
- 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-dismiss.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.d.ts +7 -1
- package/dist/hooks/use-overlay-history.js +35 -5
- 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/calc.d.ts +7 -1
- package/dist/lib/calc.js +3 -1
- package/dist/lib/calc.js.map +1 -1
- package/dist/lib/clipboard-minus.d.ts +2 -2
- package/dist/lib/clipboard-minus.js +1 -1
- package/dist/lib/clipboard-minus.js.map +1 -1
- 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/decimal-marks.d.ts +7 -1
- package/dist/lib/decimal-marks.js +5 -2
- package/dist/lib/decimal-marks.js.map +1 -1
- 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.d.ts +5 -3
- package/dist/lib/format.js +16 -13
- 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 +38 -0
- package/dist/lib/text-match.js +24 -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 +16 -4
- package/dist/tour/tour.js +62 -778
- 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/tour/use-tour-url-sync.js +2 -2
- package/dist/tour/use-tour-url-sync.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 +12 -8
- 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 +5 -10
- 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 +9 -8
- 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-request.ts +28 -6
- package/src/billing/cancel-subscription.tsx +29 -22
- 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 +31 -20
- 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 +32 -14
- 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/calculator.tsx +98 -17
- 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 +303 -69
- package/src/components/combobox.tsx +184 -155
- 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 +110 -27
- 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 +267 -41
- 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/dialog-frame.tsx +2 -1
- package/src/components/entity-combobox.tsx +4 -1
- 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 +198 -152
- 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 +14 -5
- package/src/components/measured-grid.tsx +8 -4
- package/src/components/mini-calendar.tsx +6 -5
- package/src/components/modal.tsx +45 -4
- package/src/components/money-draft.ts +16 -5
- package/src/components/money-field.tsx +2 -2
- package/src/components/month-grid.tsx +229 -0
- package/src/components/month-picker.tsx +192 -200
- package/src/components/multi-entity-combobox.tsx +1 -0
- package/src/components/multi-select.tsx +21 -9
- package/src/components/number-field.tsx +14 -7
- package/src/components/number-input.tsx +9 -3
- package/src/components/numpad-sheet.tsx +4 -3
- 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/reauth-dialog.tsx +6 -10
- package/src/components/row-actions.tsx +2 -1
- package/src/components/section-nav.tsx +7 -0
- package/src/components/series-chart-axes.ts +11 -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 +35 -19
- 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-dismiss.ts +3 -2
- 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 +70 -5
- 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/calc.ts +13 -2
- package/src/lib/clipboard-minus.ts +14 -4
- package/src/lib/date-format.ts +89 -13
- package/src/lib/day-format.ts +96 -0
- package/src/lib/decimal-marks.ts +12 -3
- 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 +34 -19
- 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 +69 -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 +116 -1193
- package/src/tour/use-tour-progress.ts +1 -1
- package/src/tour/use-tour-url-sync.ts +7 -3
- 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
|
@@ -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
|
/**
|
|
@@ -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,
|
|
@@ -61,18 +62,34 @@ const STEP_ROW_STACK_AT_LARGE = cn(
|
|
|
61
62
|
// (`[&_button:focus]:ring-1 [&_button:focus]:ring-inset` on the row) also reached the
|
|
62
63
|
// label's "?" and thinned its 2px focus frame to 1.
|
|
63
64
|
|
|
64
|
-
/**
|
|
65
|
+
/**
|
|
66
|
+
* One ‹ / › day-step (or today) button, sized to sit flush beside the field.
|
|
67
|
+
*
|
|
68
|
+
* Two kinds of "cannot" (refactor audit 2026-10-30, INP-4). `off` is natively `disabled`,
|
|
69
|
+
* out of the tab order: the field is `disabled`, or empty with nothing to step from — no
|
|
70
|
+
* press of these buttons gets there, so the focus is never on one as it turns. `refused`
|
|
71
|
+
* is `aria-disabled` with a click that does nothing, JumpCalendar's rule: › pressed onto
|
|
72
|
+
* `max`, ‹ onto `min` and Today onto today are refused by the very press the focus is on,
|
|
73
|
+
* and a focused button that turns `disabled` drops the focus to <body>, mid-form
|
|
74
|
+
* (keksdose's shared date field passes `step` and `today` in 14 files). A lock refuses
|
|
75
|
+
* too, and the lock's reason describes the button.
|
|
76
|
+
*/
|
|
65
77
|
function StepButton({
|
|
66
78
|
icon: Icon,
|
|
67
79
|
label,
|
|
68
|
-
|
|
80
|
+
off,
|
|
81
|
+
refused,
|
|
82
|
+
reasonId,
|
|
69
83
|
onClick,
|
|
70
84
|
mirror,
|
|
71
85
|
className,
|
|
72
86
|
}: {
|
|
73
87
|
icon: ComponentType<{ className?: string }>;
|
|
74
88
|
label: string;
|
|
75
|
-
|
|
89
|
+
off: boolean;
|
|
90
|
+
refused: boolean;
|
|
91
|
+
/** While locked: the id of the lock's reason, which the row's frame shows. */
|
|
92
|
+
reasonId?: string;
|
|
76
93
|
onClick: () => void;
|
|
77
94
|
/** Flip the icon in RTL — for the ‹ › day steps, whose "previous" points to the
|
|
78
95
|
* reading start. Not for the today icon, which has no direction. */
|
|
@@ -80,29 +97,42 @@ function StepButton({
|
|
|
80
97
|
/** The button's corners in the joined group (see DatePicker). */
|
|
81
98
|
className?: string;
|
|
82
99
|
}) {
|
|
100
|
+
const button = (
|
|
101
|
+
<button
|
|
102
|
+
type="button"
|
|
103
|
+
aria-label={label}
|
|
104
|
+
disabled={off}
|
|
105
|
+
aria-disabled={(!off && refused) || undefined}
|
|
106
|
+
aria-describedby={reasonId}
|
|
107
|
+
onClick={() => {
|
|
108
|
+
if (!refused) onClick();
|
|
109
|
+
}}
|
|
110
|
+
className={cn(
|
|
111
|
+
FIELD_BASE,
|
|
112
|
+
// FIELD_BASE is `block w-full` for text inputs; a step button is neither, and
|
|
113
|
+
// px-3 would make it wider than it needs to be. twMerge lets these win.
|
|
114
|
+
"relative flex h-full w-10 shrink-0 items-center justify-center px-0 text-muted",
|
|
115
|
+
"hover:bg-hover hover:text-secondary",
|
|
116
|
+
// Dimmed ICON, not a dimmed box: at 40% opacity the whole button — border
|
|
117
|
+
// included — faded out of the group and read as a broken, detached control. The
|
|
118
|
+
// same look for the focusable kind (INP-4).
|
|
119
|
+
"disabled:cursor-not-allowed disabled:text-placeholder disabled:opacity-60 disabled:hover:bg-surface",
|
|
120
|
+
"aria-disabled:cursor-not-allowed aria-disabled:text-placeholder aria-disabled:opacity-60 aria-disabled:hover:bg-surface",
|
|
121
|
+
// A part of a joined row: FIELD_BASE's 2px focus line, whole at 125 % (K5, the
|
|
122
|
+
// note above this function).
|
|
123
|
+
className,
|
|
124
|
+
)}
|
|
125
|
+
>
|
|
126
|
+
<Icon className={cn("size-4", mirror && "rtl:-scale-x-100")} />
|
|
127
|
+
</button>
|
|
128
|
+
);
|
|
129
|
+
// Locked, the row's frame holds the reason's bubble; a name bubble of its own as well
|
|
130
|
+
// would be two on one hover (IconButton drops its own the same way). The wrapper stays
|
|
131
|
+
// — STEP_ROW_STACK_AT_LARGE lays the buttons out by it.
|
|
132
|
+
if (reasonId) return <span className="relative inline-flex">{button}</span>;
|
|
83
133
|
return (
|
|
84
134
|
<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>
|
|
135
|
+
{button}
|
|
106
136
|
</Tooltip>
|
|
107
137
|
);
|
|
108
138
|
}
|
|
@@ -114,7 +144,8 @@ export interface DatePickerProps extends DatePickerBaseProps {
|
|
|
114
144
|
/**
|
|
115
145
|
* Flank the field with ‹ › buttons that move the value one day. For fields whose
|
|
116
146
|
* typical edit is a day or two — opening a calendar to go "yesterday" is three
|
|
117
|
-
* interactions for what should be one.
|
|
147
|
+
* interactions for what should be one. A button whose day is outside `min` / `max` is
|
|
148
|
+
* refused (`aria-disabled`, still focusable — 0.52); with no value both are disabled.
|
|
118
149
|
*
|
|
119
150
|
* Off by default: on a filter or a far-away date the buttons are dead weight, and
|
|
120
151
|
* they cost ~5rem of width that a narrow layout may not have.
|
|
@@ -127,7 +158,9 @@ export interface DatePickerProps extends DatePickerBaseProps {
|
|
|
127
158
|
stepLabels?: { prev: string; next: string };
|
|
128
159
|
/**
|
|
129
160
|
* Today's date as ISO "YYYY-MM-DD". Adds a jump-to-today button beside the field,
|
|
130
|
-
*
|
|
161
|
+
* refused once the value already is that day — `aria-disabled`, so the focus stays on
|
|
162
|
+
* the button that was just pressed (0.52) — and disabled while that day is outside
|
|
163
|
+
* `min` / `max`.
|
|
131
164
|
*
|
|
132
165
|
* Passed in rather than read from a clock here: a component that decides what "today"
|
|
133
166
|
* is cannot be tested at a fixed date, and the consumer already has one definition of
|
|
@@ -138,6 +171,15 @@ export interface DatePickerProps extends DatePickerBaseProps {
|
|
|
138
171
|
today?: string;
|
|
139
172
|
/** Accessible name for the today button; wins over `datePicker.today`. */
|
|
140
173
|
todayLabel?: string;
|
|
174
|
+
/**
|
|
175
|
+
* This picker COMMITS — picking a date saves it (a row's date edited in place, a
|
|
176
|
+
* filter kept as it moves). Under a locked {@link WriteLockProvider} it is locked the
|
|
177
|
+
* `disabledReason` way, with the lock's reason; a {@link CommitScope}, as on every kit
|
|
178
|
+
* control. A date field inside a form with its own Save stays editable under the lock —
|
|
179
|
+
* leave this off there, and put `commit` on the Save. 0.52 (refactor audit 2026-10-30,
|
|
180
|
+
* API-3).
|
|
181
|
+
*/
|
|
182
|
+
commit?: CommitScope;
|
|
141
183
|
}
|
|
142
184
|
|
|
143
185
|
/** Single-date picker: a field showing the formatted date, opening a calendar. */
|
|
@@ -162,6 +204,9 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
162
204
|
clearable,
|
|
163
205
|
clearLabel,
|
|
164
206
|
disabled,
|
|
207
|
+
disabledReason,
|
|
208
|
+
disabledReasonDisplay,
|
|
209
|
+
commit,
|
|
165
210
|
invalid,
|
|
166
211
|
hint,
|
|
167
212
|
help,
|
|
@@ -176,8 +221,15 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
176
221
|
const locale = useKitLocale(localeProp);
|
|
177
222
|
const text = useDatePickerLabels(clearLabel, stepLabels, todayLabel);
|
|
178
223
|
const render = useTriggerFormat("datePicker", locale, formatOptions, formatValue);
|
|
224
|
+
// The write lock (API-3): Select's — the trigger stays reachable and says why.
|
|
225
|
+
const lock = useLockReason(commit, disabledReason);
|
|
226
|
+
const locked = lock.locked;
|
|
227
|
+
const change = (iso: string) => {
|
|
228
|
+
if (!locked) onChange(iso);
|
|
229
|
+
};
|
|
179
230
|
// 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
|
|
231
|
+
// (the element a screen reader is on) after any description of the caller's own; a
|
|
232
|
+
// lock's reason between the two, as on Select.
|
|
181
233
|
const messages = useFieldMessages({
|
|
182
234
|
hint,
|
|
183
235
|
help,
|
|
@@ -186,6 +238,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
186
238
|
invalid,
|
|
187
239
|
describedBy: rest["aria-describedby"],
|
|
188
240
|
ariaInvalid: rest["aria-invalid"],
|
|
241
|
+
reasonId: locked && lock.reasonId,
|
|
189
242
|
});
|
|
190
243
|
// With a step or a today button beside it the field is no longer the outermost
|
|
191
244
|
// element — the flex row at the bottom is, and a caller's attributes belong on
|
|
@@ -207,14 +260,18 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
207
260
|
clearLabel={text.clear}
|
|
208
261
|
panelLabel={text.panel}
|
|
209
262
|
disabled={disabled}
|
|
263
|
+
locked={locked}
|
|
210
264
|
invalid={messages.isInvalid}
|
|
211
|
-
|
|
265
|
+
// In the row, the field fills what the buttons leave and the caller's classes are
|
|
266
|
+
// the row's — with `today` alone too: dressed on `step` alone, a today-only row put
|
|
267
|
+
// them on both (refactor audit 2026-10-30, INP-13). Locked, they are the frame's.
|
|
268
|
+
className={wrapped ? "min-w-0 flex-1" : locked ? undefined : className}
|
|
212
269
|
// Named for STEP_ROW_STACK_AT_LARGE; only in the row, so a caller's own
|
|
213
270
|
// `data-slot` on a bare field is left alone.
|
|
214
271
|
{...(wrapped ? { "data-slot": "date-step-field" } : {})}
|
|
215
272
|
hasValue={Boolean(value)}
|
|
216
273
|
triggerText={value ? render(value) : (placeholder ?? "")}
|
|
217
|
-
onClear={() =>
|
|
274
|
+
onClear={() => change("")}
|
|
218
275
|
>
|
|
219
276
|
{(close) => (
|
|
220
277
|
<PanelCalendar
|
|
@@ -228,7 +285,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
228
285
|
max={max}
|
|
229
286
|
labels={calendarLabels}
|
|
230
287
|
onSelect={(iso) => {
|
|
231
|
-
|
|
288
|
+
change(iso);
|
|
232
289
|
close();
|
|
233
290
|
}}
|
|
234
291
|
/>
|
|
@@ -238,23 +295,32 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
238
295
|
// Passed at all — even as `undefined` — the field keeps its box; see FieldBox.
|
|
239
296
|
const reserve = "error" in props || "hint" in props;
|
|
240
297
|
const endHint = label === undefined ? messages.labelHint : undefined;
|
|
298
|
+
// Locked, the field — or the whole row, whose buttons change the value too — sits in
|
|
299
|
+
// the reason's frame (the line, or the Tooltip), which becomes the outermost box: the
|
|
300
|
+
// caller's classes move onto it, as on Select, so a lock does not reflow the form.
|
|
301
|
+
const withReason = (box: ReactNode) =>
|
|
302
|
+
locked ? (
|
|
303
|
+
<LockedReason lock={lock} display={disabledReasonDisplay} className={cn("block", className)}>
|
|
304
|
+
{box}
|
|
305
|
+
</LockedReason>
|
|
306
|
+
) : (
|
|
307
|
+
box
|
|
308
|
+
);
|
|
241
309
|
if (!wrapped) {
|
|
242
310
|
return (
|
|
243
311
|
<FieldBox below={messages.below} reserve={reserve}>
|
|
244
|
-
{withEndHint(field, endHint)}
|
|
312
|
+
{withReason(withEndHint(field, endHint))}
|
|
245
313
|
</FieldBox>
|
|
246
314
|
);
|
|
247
315
|
}
|
|
248
316
|
|
|
249
|
-
// An empty field has nothing to step from, so both buttons are
|
|
250
|
-
//
|
|
317
|
+
// An empty field has nothing to step from, so both buttons are off until a date is
|
|
318
|
+
// picked. Bounds are compared as strings: "YYYY-MM-DD" sorts chronologically.
|
|
251
319
|
const target = (days: number) => (value ? addDaysIso(value, days) : "");
|
|
252
320
|
const outOfBounds = (iso: string) => Boolean((min && iso < min) || (max && iso > max));
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
return outOfBounds(next);
|
|
257
|
-
};
|
|
321
|
+
// A lock's reason wins over `disabled`, as on Select: the buttons stay focusable then.
|
|
322
|
+
const fieldOff = Boolean(disabled) && !locked;
|
|
323
|
+
const reasonId = locked ? lock.reasonId : undefined;
|
|
258
324
|
const row = (
|
|
259
325
|
// ONE joined control, not three boxes in a row: the buttons and the field share
|
|
260
326
|
// their borders (each piece overlaps the previous by a pixel) and only the outer
|
|
@@ -283,7 +349,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
283
349
|
// …and its line is 2px, so no side of it reads half-strength at 125 % (live #394,
|
|
284
350
|
// fourth round): FIELD_BASE's inset ring, which every part of the row carries.
|
|
285
351
|
STEP_ROW_STACK_AT_LARGE,
|
|
286
|
-
className,
|
|
352
|
+
!locked && className,
|
|
287
353
|
)}
|
|
288
354
|
>
|
|
289
355
|
{step && (
|
|
@@ -291,8 +357,10 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
291
357
|
icon={ChevronLeft}
|
|
292
358
|
mirror
|
|
293
359
|
label={text.previousDay}
|
|
294
|
-
|
|
295
|
-
|
|
360
|
+
off={fieldOff || !value}
|
|
361
|
+
refused={locked || outOfBounds(target(-1))}
|
|
362
|
+
reasonId={reasonId}
|
|
363
|
+
onClick={() => change(target(-1))}
|
|
296
364
|
className="rounded-e-none"
|
|
297
365
|
/>
|
|
298
366
|
)}
|
|
@@ -302,17 +370,26 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
302
370
|
icon={ChevronRight}
|
|
303
371
|
mirror
|
|
304
372
|
label={text.nextDay}
|
|
305
|
-
|
|
306
|
-
|
|
373
|
+
off={fieldOff || !value}
|
|
374
|
+
refused={locked || outOfBounds(target(1))}
|
|
375
|
+
reasonId={reasonId}
|
|
376
|
+
onClick={() => change(target(1))}
|
|
307
377
|
className={cn("rounded-s-none", today && "rounded-e-none")}
|
|
308
378
|
/>
|
|
309
379
|
)}
|
|
310
380
|
{today && (
|
|
381
|
+
// Refused once the value is today: pressable as a no-op would keep the focus too
|
|
382
|
+
// (INP-4), and this also says there is nothing to jump to. Today outside the
|
|
383
|
+
// bounds is `off`: no press here gets there, as MonthPicker's stepper has it — it
|
|
384
|
+
// was refused, a tab stop that could never do anything (0.52 code review,
|
|
385
|
+
// date-picker.tsx). A lock wins, focusable, to say why.
|
|
311
386
|
<StepButton
|
|
312
387
|
icon={CalendarClock}
|
|
313
388
|
label={text.today}
|
|
314
|
-
|
|
315
|
-
|
|
389
|
+
off={fieldOff || (!locked && outOfBounds(today))}
|
|
390
|
+
refused={locked || value === today}
|
|
391
|
+
reasonId={reasonId}
|
|
392
|
+
onClick={() => change(today)}
|
|
316
393
|
className="rounded-s-none"
|
|
317
394
|
/>
|
|
318
395
|
)}
|
|
@@ -322,7 +399,7 @@ export function DatePicker(props: DatePickerProps) {
|
|
|
322
399
|
// the date, and the steppers are part of how it is entered.
|
|
323
400
|
return (
|
|
324
401
|
<FieldBox below={messages.below} reserve={reserve}>
|
|
325
|
-
{withEndHint(row, endHint)}
|
|
402
|
+
{withReason(withEndHint(row, endHint))}
|
|
326
403
|
</FieldBox>
|
|
327
404
|
);
|
|
328
405
|
}
|