@eifi1/ui-kit 0.51.3 → 0.51.5
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 +6 -6
- package/dist/account/account-settings-labels.js.map +1 -1
- package/dist/account/account-settings.js +11 -9
- package/dist/account/account-settings.js.map +1 -1
- package/dist/account/delete-account-setting.js +56 -65
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/account/email-change-setting-labels.js.map +1 -1
- package/dist/account/email-change-setting.js.map +1 -1
- package/dist/account/passkeys-setting.js.map +1 -1
- 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-action-log.js.map +1 -1
- package/dist/admin/admin-area-labels.js +4 -1
- package/dist/admin/admin-area-labels.js.map +1 -1
- package/dist/admin/admin-overview.js +19 -11
- package/dist/admin/admin-overview.js.map +1 -1
- package/dist/admin/admin-sections.js.map +1 -1
- package/dist/admin/admin-tool-links.d.ts +1 -1
- package/dist/admin/admin-tool-links.js +7 -1
- package/dist/admin/admin-tool-links.js.map +1 -1
- package/dist/admin/invitations-panel.js +2 -13
- package/dist/admin/invitations-panel.js.map +1 -1
- package/dist/admin/mail-test-card.js.map +1 -1
- package/dist/admin/reviewer-scope-editor.js +4 -11
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/admin/role-select.js.map +1 -1
- package/dist/admin/user-roster.js +1 -9
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/accept-invitation.js.map +1 -1
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/forgot-password-form.js +23 -31
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/register-form.js.map +1 -1
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form.js +13 -5
- package/dist/auth/sign-in-form.js.map +1 -1
- package/dist/auth/verify-email.js +1 -8
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/billing-banner.js.map +1 -1
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/checkout-processing.js.map +1 -1
- package/dist/billing/plan-card.js +91 -85
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-limit-toast.js.map +1 -1
- package/dist/billing/plan-limit.js.map +1 -1
- package/dist/billing/plan-price.js.map +1 -1
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/billing/subscription-actions.js.map +1 -1
- package/dist/bin/eifi1-pay-page.mjs +6 -1
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.js +1 -5
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.js +29 -12
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/authed-image.js.map +1 -1
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.js +1 -4
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/button.js +1 -7
- package/dist/components/button.js.map +1 -1
- package/dist/components/calculator.js +5 -5
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/calendar-heatmap.js +4 -10
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/card.js +1 -8
- package/dist/components/card.js.map +1 -1
- package/dist/components/chart-zoom-core.js +3 -17
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/chart.d.ts +1 -1
- package/dist/components/chart.js +4 -22
- package/dist/components/chart.js.map +1 -1
- package/dist/components/checkbox-group.js +1 -4
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/chip-input.js +4 -1
- package/dist/components/chip-input.js.map +1 -1
- package/dist/components/chip.js +10 -5
- package/dist/components/chip.js.map +1 -1
- package/dist/components/choice-card.js +58 -74
- package/dist/components/choice-card.js.map +1 -1
- package/dist/components/column-mapper-labels.js.map +1 -1
- package/dist/components/column-mapper.js +167 -227
- package/dist/components/column-mapper.js.map +1 -1
- package/dist/components/combobox-core.js +5 -9
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +1 -4
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.d.ts +5 -4
- package/dist/components/country-select.js +3 -19
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.js +13 -11
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.js +1 -6
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-cells.js.map +1 -1
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filter-popover.js +2 -18
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.js +7 -5
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-groups.js +3 -1
- package/dist/components/data-table-groups.js.map +1 -1
- package/dist/components/data-table-head.js +49 -57
- package/dist/components/data-table-head.js.map +1 -1
- package/dist/components/data-table-mobile.js +31 -44
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-row-actions.js +19 -16
- package/dist/components/data-table-row-actions.js.map +1 -1
- package/dist/components/data-table-row.js.map +1 -1
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table-sort.js.map +1 -1
- package/dist/components/data-table-virtual.js +4 -1
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/data-table.d.ts +8 -0
- package/dist/components/data-table.js +30 -39
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +1 -6
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/description-list.js +10 -10
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog-frame.js +9 -2
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/disclosure.js +17 -27
- package/dist/components/disclosure.js.map +1 -1
- package/dist/components/dropdown.js +25 -35
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/empty-state.js.map +1 -1
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/field-base.js +5 -5
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/field-parts.d.ts +1 -1
- package/dist/components/field-parts.js +10 -14
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-sync.js +8 -10
- package/dist/components/field-sync.js.map +1 -1
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/floating-panel.js +4 -1
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/focus-ring.js.map +1 -1
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/grouped-picker.js +11 -12
- package/dist/components/grouped-picker.js.map +1 -1
- package/dist/components/hover-menu.js +1 -4
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/iban-input-labels.js.map +1 -1
- package/dist/components/icon-button.js +4 -1
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon-picker.js +6 -10
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/image-grid.js +41 -50
- package/dist/components/image-grid.js.map +1 -1
- package/dist/components/inline-edit-field.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +6 -12
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +14 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +1 -7
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal-labels.js +8 -2
- package/dist/components/legal-labels.js.map +1 -1
- package/dist/components/legal-page.d.ts +18 -1
- package/dist/components/legal-page.js +27 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +40 -5
- package/dist/components/legal.js +41 -5
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/line-items.js +26 -36
- package/dist/components/line-items.js.map +1 -1
- package/dist/components/list-labels.js +3 -1
- package/dist/components/list-labels.js.map +1 -1
- package/dist/components/list.d.ts +18 -1
- package/dist/components/list.js +54 -13
- package/dist/components/list.js.map +1 -1
- package/dist/components/measured-grid.js +29 -53
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/mini-calendar.js +13 -31
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-picker.js +10 -21
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +3 -16
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/nav-pills.js +10 -1
- package/dist/components/nav-pills.js.map +1 -1
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.js +1 -7
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.js +1 -4
- package/dist/components/numpad-sheet.js.map +1 -1
- package/dist/components/one-time-code-input.js +1 -7
- package/dist/components/one-time-code-input.js.map +1 -1
- package/dist/components/page-contents.js +13 -22
- package/dist/components/page-contents.js.map +1 -1
- package/dist/components/page-header.js +1 -11
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/password-strength-labels.js.map +1 -1
- package/dist/components/password-strength.js +2 -8
- package/dist/components/password-strength.js.map +1 -1
- package/dist/components/phone-input.js +42 -57
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart.js +1 -8
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress-bar.js +16 -9
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/qr-code.js +1 -8
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/row-actions.js +5 -1
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/select.js +28 -38
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.js +1 -5
- package/dist/components/separator.js.map +1 -1
- package/dist/components/series-chart-axes.js +4 -1
- package/dist/components/series-chart-axes.js.map +1 -1
- package/dist/components/series-chart-budget.js.map +1 -1
- package/dist/components/series-chart-ticks.js.map +1 -1
- package/dist/components/series-chart.js +29 -45
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/settings-fields.js +21 -17
- package/dist/components/settings-fields.js.map +1 -1
- package/dist/components/share-card.js +4 -9
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/sign-chip.js.map +1 -1
- package/dist/components/signature-pad.js +4 -13
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/signed-amount.js +12 -5
- package/dist/components/signed-amount.js.map +1 -1
- package/dist/components/skeleton.js +2 -17
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.js +13 -36
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sparkline.js.map +1 -1
- package/dist/components/stat-tile.js +14 -10
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/swatch-picker.js +14 -4
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/swipeable-row.d.ts +1 -1
- package/dist/components/swipeable-row.js +1 -8
- package/dist/components/swipeable-row.js.map +1 -1
- package/dist/components/table-skeleton.js +4 -1
- package/dist/components/table-skeleton.js.map +1 -1
- package/dist/components/table.js +12 -9
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +5 -24
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/text-link.js.map +1 -1
- package/dist/components/text.js.map +1 -1
- package/dist/components/tile-radio.js +1 -7
- package/dist/components/tile-radio.js.map +1 -1
- package/dist/components/time-input.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js +6 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle-legend.js +2 -11
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/tooltip.js +2 -22
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/translation-review-editor.js +1 -4
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review-parts.d.ts +1 -1
- package/dist/components/translation-review-parts.js +7 -1
- package/dist/components/translation-review-parts.js.map +1 -1
- package/dist/components/translation-review.js +18 -7
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/tree-view.js +14 -10
- package/dist/components/tree-view.js.map +1 -1
- package/dist/components/treemap.js +1 -13
- package/dist/components/treemap.js.map +1 -1
- package/dist/components/trigger-aria.js.map +1 -1
- package/dist/components/use-table-state.js +14 -11
- package/dist/components/use-table-state.js.map +1 -1
- package/dist/components/user-avatar.js +3 -26
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/demo/demo-start.js +8 -4
- package/dist/demo/demo-start.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/feedback/feedback-attachment-labels.js.map +1 -1
- package/dist/feedback/feedback-attachment.js +1 -8
- package/dist/feedback/feedback-attachment.js.map +1 -1
- package/dist/feedback/feedback-capture.d.ts +1 -1
- package/dist/feedback/feedback-capture.js +3 -1
- package/dist/feedback/feedback-capture.js.map +1 -1
- package/dist/feedback/feedback-comment-thread.js +27 -13
- package/dist/feedback/feedback-comment-thread.js.map +1 -1
- package/dist/feedback/feedback-context.js +1 -4
- package/dist/feedback/feedback-context.js.map +1 -1
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox.js.map +1 -1
- package/dist/feedback/feedback-public-list.js +7 -1
- package/dist/feedback/feedback-public-list.js.map +1 -1
- package/dist/feedback/feedback-record.js +1 -5
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-replies.js +25 -10
- package/dist/feedback/feedback-replies.js.map +1 -1
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +3 -1
- package/dist/feedback/feedback-table.js +22 -5
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread.js +2 -13
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/feedback/feedback-vote-button.js.map +1 -1
- package/dist/hooks/use-anchored-rect.js.map +1 -1
- package/dist/hooks/use-document-title.js.map +1 -1
- package/dist/hooks/use-file-drop.js.map +1 -1
- package/dist/hooks/use-file-picker-labels.js.map +1 -1
- package/dist/hooks/use-file-picker.js.map +1 -1
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-overlay-history.js +10 -5
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/hooks/use-row-swipe.d.ts +1 -1
- package/dist/hooks/use-row-swipe.js +1 -6
- package/dist/hooks/use-row-swipe.js.map +1 -1
- package/dist/i18n/defaults.js +1 -4
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +15 -4
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.js +2 -8
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.js.map +1 -1
- package/dist/i18n/locales/en.js +19 -4
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/es.js +15 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +15 -4
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +15 -4
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +15 -4
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +11 -3
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.js.map +1 -1
- package/dist/i18n/review.js +15 -7
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +17 -17
- package/dist/index.js +40 -23
- package/dist/index.js.map +1 -1
- package/dist/landing/access.js +1 -4
- package/dist/landing/access.js.map +1 -1
- package/dist/landing/landing-sections.js +35 -38
- package/dist/landing/landing-sections.js.map +1 -1
- package/dist/landing/page-seo.js.map +1 -1
- package/dist/lib/calc.js.map +1 -1
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/decimal-marks.js.map +1 -1
- package/dist/lib/device-settings.js +2 -1
- package/dist/lib/device-settings.js.map +1 -1
- package/dist/lib/direction.js.map +1 -1
- package/dist/lib/iban.js.map +1 -1
- package/dist/lib/logger.js +1 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/person-name.js.map +1 -1
- package/dist/lib/phone.js.map +1 -1
- package/dist/lib/qr-encode.js +344 -8
- package/dist/lib/qr-encode.js.map +1 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/table-text.js +15 -3
- package/dist/lib/table-text.js.map +1 -1
- package/dist/lib/text-match.d.ts +20 -0
- package/dist/lib/text-match.js +11 -1
- package/dist/lib/text-match.js.map +1 -1
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/notifications/notification-inbox.js +63 -44
- package/dist/notifications/notification-inbox.js.map +1 -1
- package/dist/notifications/notification-parts.js.map +1 -1
- package/dist/notifications/notification-types-setting.js.map +1 -1
- package/dist/notifications/notifications-labels.js.map +1 -1
- package/dist/notifications/push-device-setting.js +6 -1
- package/dist/notifications/push-device-setting.js.map +1 -1
- package/dist/notifications/push-devices-setting.js.map +1 -1
- package/dist/notifications/push-worker.js.map +1 -1
- package/dist/notifications/quiet-hours-setting.js.map +1 -1
- package/dist/notifications/use-push-device.js +4 -1
- package/dist/notifications/use-push-device.js.map +1 -1
- package/dist/offline/pwa-update-prompt.d.ts +1 -1
- package/dist/offline/pwa-update-prompt.js +7 -1
- package/dist/offline/pwa-update-prompt.js.map +1 -1
- package/dist/offline/query-persistence.js.map +1 -1
- package/dist/offline.d.ts +1 -1
- package/dist/offline.js +6 -1
- package/dist/offline.js.map +1 -1
- package/dist/pay/pay.css +8 -1
- package/dist/rhf/fields.d.ts +1 -2
- package/dist/rhf/fields.js +1 -10
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form-core.js +1 -4
- package/dist/rhf/form-core.js.map +1 -1
- package/dist/rhf/line-items.js.map +1 -1
- package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
- package/dist/search/command-palette.js +71 -62
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search.js +34 -5
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/search-index.js.map +1 -1
- package/dist/settings/device-reset-setting.js +1 -6
- package/dist/settings/device-reset-setting.js.map +1 -1
- package/dist/settings/settings-heading.js.map +1 -1
- package/dist/settings/settings-layout.js +9 -20
- package/dist/settings/settings-layout.js.map +1 -1
- package/dist/settings/use-settings-focus.d.ts +7 -0
- package/dist/settings/use-settings-focus.js +2 -0
- package/dist/settings/use-settings-focus.js.map +1 -1
- package/dist/settings/use-settings-route.js.map +1 -1
- package/dist/shell/app-shell.js +62 -31
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/auth-layout.js +1 -10
- package/dist/shell/auth-layout.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +5 -0
- package/dist/shell/dev-menu.js +14 -7
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/option-switcher-menu.js.map +1 -1
- package/dist/shell/sync-status-indicator.js +7 -6
- package/dist/shell/sync-status-indicator.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell/topbar-action-menu.d.ts +14 -1
- package/dist/shell/topbar-action-menu.js +85 -34
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell/topbar-controls.js +1 -10
- package/dist/shell/topbar-controls.js.map +1 -1
- package/dist/shell/tour-menu.js +9 -1
- package/dist/shell/tour-menu.js.map +1 -1
- package/dist/shell.d.ts +1 -1
- package/dist/shell.js +2 -1
- package/dist/shell.js.map +1 -1
- package/dist/sync/db.js.map +1 -1
- package/dist/sync/engine.js +24 -6
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync.d.ts +2 -2
- package/dist/sync.js +7 -1
- package/dist/sync.js.map +1 -1
- package/dist/testing/css-variables.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/react.js.map +1 -1
- package/dist/testing/viewport.js +7 -4
- package/dist/testing/viewport.js.map +1 -1
- package/dist/theme/contrast-tokens.js +13 -2
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/palette-derive.d.ts +1 -1
- package/dist/theme/palette-derive.js +18 -29
- package/dist/theme/palette-derive.js.map +1 -1
- package/dist/theme/palette-presets.js.map +1 -1
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +1 -3
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/tour/tour-catalogue.js.map +1 -1
- package/dist/tour/tour-dock.js +5 -1
- package/dist/tour/tour-dock.js.map +1 -1
- package/dist/tour/tour-engine.js +1 -4
- package/dist/tour/tour-engine.js.map +1 -1
- package/dist/tour/tour.js +21 -12
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour/use-tour-progress.js.map +1 -1
- package/dist/tour/use-tour-url-sync.js.map +1 -1
- package/dist/wizard/stepper-nav.js +3 -24
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.js +24 -28
- package/dist/wizard/use-wizard.js.map +1 -1
- package/dist/wizard/validation.js.map +1 -1
- package/dist/wizard/wizard-context.js.map +1 -1
- package/dist/wizard/wizard-step.d.ts +1 -1
- package/dist/wizard/wizard-step.js +1 -8
- package/dist/wizard/wizard-step.js.map +1 -1
- package/dist/wizard/wizard-summary.js.map +1 -1
- package/package.json +5 -2
- package/src/account/account-settings-labels.ts +1 -2
- package/src/account/account-settings.tsx +11 -17
- package/src/account/delete-account-setting.tsx +1 -6
- package/src/account/email-change-setting-labels.ts +1 -2
- package/src/account/email-change-setting.tsx +3 -1
- package/src/account/passkeys-setting.tsx +1 -3
- package/src/account/sessions-setting.tsx +4 -2
- package/src/admin/admin-action-confirm.tsx +4 -7
- package/src/admin/admin-action-log.tsx +29 -29
- package/src/admin/admin-area-labels.ts +4 -1
- package/src/admin/admin-overview.tsx +8 -2
- package/src/admin/admin-sections.tsx +3 -1
- package/src/admin/admin-tool-links.tsx +7 -1
- package/src/admin/invitations-panel.tsx +5 -11
- package/src/admin/mail-test-card.tsx +1 -2
- package/src/admin/reviewer-scope-editor.tsx +4 -9
- package/src/admin/role-select.tsx +4 -2
- package/src/admin/user-roster.tsx +2 -11
- package/src/auth/accept-invitation.tsx +1 -7
- package/src/auth/auth-errors.ts +1 -6
- package/src/auth/forgot-password-form.tsx +2 -7
- package/src/auth/register-form.tsx +7 -8
- package/src/auth/reset-password-form.tsx +2 -5
- package/src/auth/sign-in-form.tsx +15 -14
- package/src/auth/verify-email.tsx +2 -7
- package/src/billing/billing-banner.tsx +3 -7
- package/src/billing/billing-labels.ts +6 -4
- package/src/billing/checkout-processing.ts +0 -1
- package/src/billing/plan-card.tsx +9 -8
- package/src/billing/plan-limit-toast.tsx +1 -2
- package/src/billing/plan-limit.ts +1 -2
- package/src/billing/plan-price.ts +1 -4
- package/src/billing/plan-switch.tsx +1 -2
- package/src/billing/subscription-actions.tsx +5 -2
- package/src/components/account-chips.tsx +1 -7
- package/src/components/alert-banner.tsx +2 -8
- package/src/components/amount-input.tsx +206 -178
- package/src/components/authed-image.tsx +7 -4
- package/src/components/autocomplete.tsx +7 -9
- package/src/components/bulk-action-bar.tsx +2 -7
- package/src/components/button-group.tsx +1 -2
- package/src/components/button-look.ts +6 -17
- package/src/components/button.tsx +1 -4
- package/src/components/calculator.tsx +6 -9
- package/src/components/calendar-heatmap.tsx +5 -10
- package/src/components/card.tsx +9 -13
- package/src/components/chart-zoom-core.tsx +6 -33
- package/src/components/chart.tsx +8 -31
- package/src/components/checkbox-group.tsx +1 -4
- package/src/components/chip-input.tsx +6 -6
- package/src/components/chip.tsx +14 -26
- package/src/components/choice-card.tsx +4 -18
- package/src/components/column-mapper-labels.ts +3 -10
- package/src/components/column-mapper.tsx +33 -122
- package/src/components/combobox-core.tsx +17 -47
- package/src/components/combobox.tsx +2 -6
- package/src/components/confirm-dialog.tsx +1 -3
- package/src/components/copy-button.tsx +2 -4
- package/src/components/country-select.tsx +9 -21
- package/src/components/currency-option-list.tsx +16 -18
- package/src/components/currency-select.tsx +2 -7
- package/src/components/danger-confirm.tsx +8 -9
- package/src/components/data-table-cells.tsx +1 -2
- package/src/components/data-table-column-settings.tsx +1 -3
- package/src/components/data-table-filter-popover.tsx +5 -19
- package/src/components/data-table-filters.ts +1 -6
- package/src/components/data-table-fit.ts +7 -7
- package/src/components/data-table-groups.tsx +3 -1
- package/src/components/data-table-head.tsx +32 -46
- package/src/components/data-table-mobile.tsx +99 -108
- package/src/components/data-table-pagination.tsx +2 -6
- package/src/components/data-table-row-actions.tsx +25 -24
- package/src/components/data-table-row.tsx +16 -17
- package/src/components/data-table-shared.tsx +10 -16
- package/src/components/data-table-sort.ts +1 -2
- package/src/components/data-table-virtual.ts +9 -4
- package/src/components/data-table.tsx +497 -501
- package/src/components/date-picker.tsx +1 -7
- package/src/components/date-range-picker.tsx +3 -13
- package/src/components/description-list.tsx +7 -13
- package/src/components/dialog-frame.tsx +12 -3
- package/src/components/disclosure.tsx +8 -12
- package/src/components/dropdown.tsx +3 -11
- package/src/components/empty-state.tsx +1 -3
- package/src/components/entity-combobox.tsx +2 -6
- package/src/components/error-boundary.tsx +7 -7
- package/src/components/field-base.tsx +8 -14
- package/src/components/field-parts.tsx +12 -23
- package/src/components/field-sync.tsx +7 -11
- package/src/components/file-button.tsx +7 -3
- package/src/components/file-dropzone.tsx +7 -12
- package/src/components/floating-panel.tsx +44 -51
- package/src/components/focus-ring.ts +1 -2
- package/src/components/form-actions.tsx +1 -4
- package/src/components/grouped-picker.tsx +21 -16
- package/src/components/hover-menu.tsx +1 -4
- package/src/components/iban-input-labels.ts +1 -2
- package/src/components/icon-button.tsx +46 -48
- package/src/components/icon-picker.tsx +9 -20
- package/src/components/image-grid.tsx +1 -6
- package/src/components/inline-edit-field.tsx +1 -5
- package/src/components/inline-entity-combobox.tsx +11 -25
- package/src/components/input.tsx +14 -2
- package/src/components/jump-calendar.tsx +2 -6
- package/src/components/legal-labels.ts +8 -3
- package/src/components/legal-page.tsx +56 -6
- package/src/components/legal.tsx +83 -10
- package/src/components/lightbox.tsx +1 -3
- package/src/components/line-items.tsx +7 -15
- package/src/components/list-labels.ts +2 -0
- package/src/components/list.tsx +81 -27
- package/src/components/measured-grid.tsx +8 -30
- package/src/components/menu-item.tsx +1 -3
- package/src/components/mini-calendar.tsx +129 -159
- package/src/components/money-field.tsx +4 -2
- package/src/components/month-picker.tsx +14 -21
- package/src/components/multi-entity-combobox.tsx +6 -26
- package/src/components/multi-select.tsx +5 -9
- package/src/components/nav-pills.tsx +10 -2
- package/src/components/number-field.tsx +18 -15
- package/src/components/number-input.tsx +3 -19
- package/src/components/numpad-sheet.tsx +9 -13
- package/src/components/one-time-code-input.tsx +6 -11
- package/src/components/page-contents.tsx +2 -9
- package/src/components/page-header.tsx +5 -10
- package/src/components/password-strength-labels.ts +1 -2
- package/src/components/password-strength.tsx +6 -9
- package/src/components/phone-input.tsx +2 -13
- package/src/components/picker-sheet.tsx +2 -5
- package/src/components/pie-chart.tsx +6 -12
- package/src/components/popover.tsx +2 -1
- package/src/components/progress-bar.tsx +16 -25
- package/src/components/qr-code.tsx +2 -9
- package/src/components/row-actions.tsx +9 -1
- package/src/components/search-field.tsx +4 -5
- package/src/components/select.tsx +2 -10
- package/src/components/separator.tsx +1 -5
- package/src/components/series-chart-axes.ts +5 -5
- package/src/components/series-chart-budget.ts +1 -4
- package/src/components/series-chart-ticks.ts +1 -4
- package/src/components/series-chart.tsx +43 -83
- package/src/components/settings-fields.tsx +20 -15
- package/src/components/share-card.tsx +6 -14
- package/src/components/sign-chip.tsx +16 -16
- package/src/components/signature-pad.tsx +21 -13
- package/src/components/signed-amount.tsx +6 -14
- package/src/components/skeleton.tsx +2 -13
- package/src/components/slider.tsx +9 -20
- package/src/components/sparkline.tsx +2 -13
- package/src/components/stat-tile.tsx +13 -24
- package/src/components/swatch-picker.tsx +8 -3
- package/src/components/swipeable-row.tsx +2 -11
- package/src/components/table-skeleton.tsx +4 -1
- package/src/components/table.tsx +12 -8
- package/src/components/tabs.tsx +24 -39
- package/src/components/text-link.tsx +6 -6
- package/src/components/text.tsx +1 -2
- package/src/components/tile-radio.tsx +6 -19
- package/src/components/time-input.tsx +4 -5
- package/src/components/toast.tsx +3 -12
- package/src/components/toggle-group.tsx +9 -9
- package/src/components/toggle-legend.tsx +4 -16
- package/src/components/tooltip.tsx +9 -48
- package/src/components/translation-review-editor.tsx +4 -4
- package/src/components/translation-review-parts.tsx +7 -1
- package/src/components/translation-review.tsx +15 -16
- package/src/components/tree-view.tsx +17 -20
- package/src/components/treemap.tsx +3 -15
- package/src/components/trigger-aria.ts +1 -4
- package/src/components/use-table-state.ts +16 -17
- package/src/components/user-avatar.tsx +4 -21
- package/src/demo/demo-start.tsx +8 -4
- package/src/feedback/feedback-attachment-labels.ts +2 -1
- package/src/feedback/feedback-attachment.tsx +16 -29
- package/src/feedback/feedback-capture.ts +3 -1
- package/src/feedback/feedback-comment-thread.tsx +9 -6
- package/src/feedback/feedback-context.tsx +1 -4
- package/src/feedback/feedback-dialog.tsx +3 -4
- package/src/feedback/feedback-inbox.tsx +3 -9
- package/src/feedback/feedback-public-list.tsx +7 -1
- package/src/feedback/feedback-record.ts +6 -14
- package/src/feedback/feedback-replies.tsx +10 -5
- package/src/feedback/feedback-row-detail.tsx +2 -5
- package/src/feedback/feedback-status-undo.ts +1 -4
- package/src/feedback/feedback-submit-dialog.tsx +4 -4
- package/src/feedback/feedback-table.tsx +29 -9
- package/src/feedback/feedback-thread.tsx +4 -16
- package/src/feedback/feedback-vocabulary.ts +72 -82
- package/src/feedback/feedback-vote-button.tsx +9 -8
- package/src/hooks/use-anchored-rect.ts +1 -4
- package/src/hooks/use-document-title.ts +3 -1
- package/src/hooks/use-file-drop.ts +1 -3
- package/src/hooks/use-file-picker-labels.ts +1 -2
- package/src/hooks/use-file-picker.tsx +1 -5
- package/src/hooks/use-focus-trap.ts +1 -2
- package/src/hooks/use-overlay-history.ts +10 -5
- package/src/hooks/use-row-swipe.ts +1 -6
- package/src/i18n/defaults.ts +1 -4
- package/src/i18n/german.ts +42 -50
- package/src/i18n/kit-labels.tsx +5 -20
- package/src/i18n/languages.ts +2 -8
- package/src/i18n/locales/en.ts +15 -31
- package/src/i18n/locales/es.ts +44 -50
- package/src/i18n/locales/fr.ts +43 -52
- package/src/i18n/locales/hu.ts +35 -38
- package/src/i18n/locales/it.ts +44 -53
- package/src/i18n/locales/zh.ts +23 -33
- package/src/i18n/plurals.ts +4 -1
- package/src/i18n/review.ts +20 -7
- package/src/i18n/shared-labels.ts +1 -2
- package/src/index.ts +107 -32
- package/src/landing/access.ts +2 -7
- package/src/landing/landing-sections.tsx +14 -15
- package/src/landing/page-seo.ts +1 -3
- package/src/lib/calc.ts +4 -1
- package/src/lib/clipboard-minus.ts +4 -1
- package/src/lib/dates.ts +2 -10
- package/src/lib/decimal-marks.ts +1 -3
- package/src/lib/device-settings.ts +2 -1
- package/src/lib/direction.ts +1 -3
- package/src/lib/iban.ts +89 -9
- package/src/lib/logger.ts +1 -5
- package/src/lib/person-name.ts +1 -3
- package/src/lib/phone.ts +5 -8
- package/src/lib/qr-encode.ts +32 -8
- package/src/lib/session-refresh.ts +5 -6
- package/src/lib/table-text.ts +24 -6
- package/src/lib/text-match.ts +43 -1
- package/src/lib/translation-review.ts +1 -3
- package/src/notifications/notification-inbox.tsx +17 -4
- package/src/notifications/notification-parts.tsx +1 -2
- package/src/notifications/notification-types-setting.tsx +19 -18
- package/src/notifications/notifications-labels.ts +1 -2
- package/src/notifications/push-device-setting.tsx +7 -1
- package/src/notifications/push-devices-setting.tsx +7 -3
- package/src/notifications/push-worker.ts +10 -2
- package/src/notifications/quiet-hours-setting.tsx +4 -1
- package/src/notifications/use-push-device.ts +4 -1
- package/src/offline/pwa-update-prompt.tsx +7 -1
- package/src/offline/query-persistence.ts +9 -6
- package/src/offline.ts +6 -1
- package/src/rhf/fields.tsx +50 -19
- package/src/rhf/form-core.tsx +2 -6
- package/src/rhf/line-items.tsx +5 -7
- package/src/rhf/use-rhf-wizard-step.ts +3 -12
- package/src/search/command-palette.tsx +15 -23
- package/src/search/global-search.tsx +38 -8
- package/src/search/search-index.ts +5 -1
- package/src/settings/device-reset-setting.tsx +5 -8
- package/src/settings/settings-heading.tsx +3 -1
- package/src/settings/settings-layout.tsx +6 -13
- package/src/settings/use-settings-focus.ts +8 -0
- package/src/settings/use-settings-route.ts +4 -3
- package/src/shell/app-shell.tsx +48 -24
- package/src/shell/auth-layout.tsx +1 -6
- package/src/shell/dev-menu.tsx +18 -6
- package/src/shell/option-switcher-menu.tsx +1 -3
- package/src/shell/sync-status-indicator.tsx +14 -12
- package/src/shell/top-bar-parts-labels.ts +1 -3
- package/src/shell/topbar-action-menu.tsx +130 -45
- package/src/shell/topbar-controls.tsx +5 -19
- package/src/shell/tour-menu.tsx +9 -1
- package/src/shell.ts +1 -1
- package/src/sync/db.ts +5 -1
- package/src/sync/engine.ts +44 -12
- package/src/sync.ts +16 -2
- package/src/testing/css-variables.ts +1 -2
- package/src/testing/index.ts +1 -6
- package/src/testing/react.ts +1 -2
- package/src/testing/viewport.ts +9 -9
- package/src/theme/contrast-tokens.ts +13 -2
- package/src/theme/palette-derive.ts +24 -50
- package/src/theme/palette-presets.ts +0 -1
- package/src/theme/palette-store.ts +1 -4
- package/src/theme/text-size.ts +1 -1
- package/src/theme/theme-store.ts +2 -6
- package/src/tour/tour-catalogue.tsx +4 -2
- package/src/tour/tour-dock.ts +5 -1
- package/src/tour/tour-engine.ts +2 -6
- package/src/tour/tour.tsx +28 -12
- package/src/tour/use-tour-progress.ts +8 -2
- package/src/tour/use-tour-url-sync.ts +3 -1
- package/src/vite-env.d.ts +1 -4
- package/src/wizard/stepper-nav.tsx +10 -35
- package/src/wizard/types.ts +1 -4
- package/src/wizard/use-wizard.ts +28 -43
- package/src/wizard/validation.ts +1 -5
- package/src/wizard/wizard-context.tsx +2 -6
- package/src/wizard/wizard-step.tsx +1 -8
- package/src/wizard/wizard-summary.tsx +2 -6
- package/tokens.css +393 -152
|
@@ -6,14 +6,7 @@ import { hasContent } from "../lib/presence";
|
|
|
6
6
|
import { FOCUS_RING, FOCUS_RING_WIDTH } from "./focus-ring";
|
|
7
7
|
import { horizontalStep } from "../lib/direction";
|
|
8
8
|
import { useAnnounce } from "../hooks/use-announce";
|
|
9
|
-
import {
|
|
10
|
-
addMonthsClamped,
|
|
11
|
-
localeWeekStart,
|
|
12
|
-
monthKey,
|
|
13
|
-
parseIsoDate,
|
|
14
|
-
sameYmd,
|
|
15
|
-
toLocalIso,
|
|
16
|
-
} from "../lib/dates";
|
|
9
|
+
import { addMonthsClamped, localeWeekStart, monthKey, parseIsoDate, sameYmd, toLocalIso } from "../lib/dates";
|
|
17
10
|
import { useKitLabels, useKitLocale, useKitWeekStart, type LabelOverride } from "../i18n/kit-labels";
|
|
18
11
|
import { DEFAULT_MINI_CALENDAR_LABELS } from "./mini-calendar-labels";
|
|
19
12
|
|
|
@@ -514,41 +507,39 @@ export function MiniCalendar({
|
|
|
514
507
|
{monthLabel}
|
|
515
508
|
</div>
|
|
516
509
|
) : (
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
510
|
+
<div className={cn("flex items-center justify-between", lg ? "pb-2" : "pb-1")}>
|
|
511
|
+
<button
|
|
512
|
+
type="button"
|
|
513
|
+
onClick={() => moveMonth(-1)}
|
|
514
|
+
aria-label={labels.previousMonth}
|
|
515
|
+
className="rounded p-1 text-muted hover:bg-hover"
|
|
516
|
+
>
|
|
517
|
+
{/* Mirrored in RTL: "previous" points to the reading START, which is right. */}
|
|
518
|
+
<ChevronLeft className="size-4 rtl:-scale-x-100" aria-hidden />
|
|
519
|
+
</button>
|
|
520
|
+
{/* Named by this element rather than by a string of its own, and `aria-live`
|
|
528
521
|
so paging months says which month you have landed on — the caption is the
|
|
529
522
|
only thing on screen that changes when the grid moves, and the user
|
|
530
523
|
pressing the arrow is not inside the grid to hear the cells change. */}
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
524
|
+
<div
|
|
525
|
+
id={monthId}
|
|
526
|
+
aria-live="polite"
|
|
527
|
+
className={cn(
|
|
528
|
+
"capitalize",
|
|
529
|
+
lg ? "text-base font-semibold text-primary" : "text-xs font-medium text-secondary",
|
|
530
|
+
)}
|
|
531
|
+
>
|
|
532
|
+
{monthLabel}
|
|
533
|
+
</div>
|
|
534
|
+
<button
|
|
535
|
+
type="button"
|
|
536
|
+
onClick={() => moveMonth(1)}
|
|
537
|
+
aria-label={labels.nextMonth}
|
|
538
|
+
className="rounded p-1 text-muted hover:bg-hover"
|
|
539
|
+
>
|
|
540
|
+
<ChevronRight className="size-4 rtl:-scale-x-100" aria-hidden />
|
|
541
|
+
</button>
|
|
542
542
|
</div>
|
|
543
|
-
<button
|
|
544
|
-
type="button"
|
|
545
|
-
onClick={() => moveMonth(1)}
|
|
546
|
-
aria-label={labels.nextMonth}
|
|
547
|
-
className="rounded p-1 text-muted hover:bg-hover"
|
|
548
|
-
>
|
|
549
|
-
<ChevronRight className="size-4 rtl:-scale-x-100" aria-hidden />
|
|
550
|
-
</button>
|
|
551
|
-
</div>
|
|
552
543
|
)}
|
|
553
544
|
<div
|
|
554
545
|
ref={gridRef}
|
|
@@ -559,27 +550,18 @@ export function MiniCalendar({
|
|
|
559
550
|
"grid",
|
|
560
551
|
// The month view is RULED: a 1px gap over a border-coloured ground draws the
|
|
561
552
|
// lines between the cells, the way a wall calendar does.
|
|
562
|
-
lg
|
|
563
|
-
? "gap-px overflow-hidden rounded-lg border border-subtle bg-[var(--border)]"
|
|
564
|
-
: "gap-y-0.5",
|
|
553
|
+
lg ? "gap-px overflow-hidden rounded-lg border border-subtle bg-[var(--border)]" : "gap-y-0.5",
|
|
565
554
|
)}
|
|
566
555
|
>
|
|
567
556
|
<div
|
|
568
557
|
role="row"
|
|
569
558
|
className={cn(
|
|
570
559
|
"grid grid-cols-7 text-center font-medium",
|
|
571
|
-
lg
|
|
572
|
-
? "gap-px text-xs text-muted"
|
|
573
|
-
: "text-micro uppercase text-placeholder",
|
|
560
|
+
lg ? "gap-px text-xs text-muted" : "text-micro uppercase text-placeholder",
|
|
574
561
|
)}
|
|
575
562
|
>
|
|
576
563
|
{weekdayLabels.map((w, i) => (
|
|
577
|
-
<div
|
|
578
|
-
key={i}
|
|
579
|
-
role="columnheader"
|
|
580
|
-
aria-label={w.long}
|
|
581
|
-
className={lg ? "bg-surface py-2" : "py-0.5"}
|
|
582
|
-
>
|
|
564
|
+
<div key={i} role="columnheader" aria-label={w.long} className={lg ? "bg-surface py-2" : "py-0.5"}>
|
|
583
565
|
{lg ? w.short : w.narrow}
|
|
584
566
|
</div>
|
|
585
567
|
))}
|
|
@@ -592,13 +574,7 @@ export function MiniCalendar({
|
|
|
592
574
|
// The padding cells still have to BE cells, or the rows are ragged and
|
|
593
575
|
// a screen reader's "column 3" stops meaning Wednesday.
|
|
594
576
|
if (!d) {
|
|
595
|
-
return (
|
|
596
|
-
<div
|
|
597
|
-
key={di}
|
|
598
|
-
role="gridcell"
|
|
599
|
-
className={lg ? cn(LG_CELL_HEIGHT, "bg-surface-2") : "h-8"}
|
|
600
|
-
/>
|
|
601
|
-
);
|
|
577
|
+
return <div key={di} role="gridcell" className={lg ? cn(LG_CELL_HEIGHT, "bg-surface-2") : "h-8"} />;
|
|
602
578
|
}
|
|
603
579
|
const iso = toLocalIso(d);
|
|
604
580
|
const disabled = isDisabled(d);
|
|
@@ -678,8 +654,7 @@ export function MiniCalendar({
|
|
|
678
654
|
// or the month breaks it. Only when both ends exist and differ — a lone
|
|
679
655
|
// start is a dot, not a band of one. The month view tints whole cells
|
|
680
656
|
// instead, so it has no band.
|
|
681
|
-
const banded =
|
|
682
|
-
!lg && hasBand && !disabled && (isStart || isEnd || isInRange);
|
|
657
|
+
const banded = !lg && hasBand && !disabled && (isStart || isEnd || isInRange);
|
|
683
658
|
const lastOfMonth = d.getDate() === daysInMonth(d);
|
|
684
659
|
const band = banded
|
|
685
660
|
? cn(
|
|
@@ -695,109 +670,104 @@ export function MiniCalendar({
|
|
|
695
670
|
<div
|
|
696
671
|
key={di}
|
|
697
672
|
role="none"
|
|
698
|
-
className={cn(
|
|
699
|
-
"relative flex",
|
|
700
|
-
lg ? "min-w-0" : "h-8 items-center justify-center",
|
|
701
|
-
)}
|
|
702
|
-
>
|
|
703
|
-
{band && <span aria-hidden className={band} />}
|
|
704
|
-
<button
|
|
705
|
-
key={di}
|
|
706
|
-
type="button"
|
|
707
|
-
role="gridcell"
|
|
708
|
-
data-iso={iso}
|
|
709
|
-
// The roving tabindex: ONE tab stop for the whole month. Every day
|
|
710
|
-
// being tabbable meant 31 stops between a date field and the next
|
|
711
|
-
// control, which is the same reason the pattern exists.
|
|
712
|
-
tabIndex={isActive ? 0 : -1}
|
|
713
|
-
aria-label={labels.day(formatDay(d))}
|
|
714
|
-
// The custom content is the day's DESCRIPTION: `aria-label` replaces
|
|
715
|
-
// the button's text as its name, so without this link a screen
|
|
716
|
-
// reader would hear the date and never the events drawn under it.
|
|
717
|
-
aria-describedby={filled ? contentId : undefined}
|
|
718
|
-
aria-selected={isSelected}
|
|
719
|
-
aria-disabled={disabled || undefined}
|
|
720
|
-
aria-current={isToday ? "date" : undefined}
|
|
721
|
-
onClick={() => handleClick(d)}
|
|
722
|
-
onKeyDown={onDayKeyDown}
|
|
723
|
-
className={
|
|
724
|
-
lg
|
|
725
|
-
? cn(
|
|
726
|
-
"flex w-full min-w-0 flex-col items-stretch gap-1 overflow-hidden p-1.5 text-start text-xs transition-colors",
|
|
727
|
-
LG_CELL_HEIGHT,
|
|
728
|
-
FOCUS_RING,
|
|
729
|
-
"focus-visible:ring-inset",
|
|
730
|
-
disabled
|
|
731
|
-
? "cursor-not-allowed bg-surface text-placeholder"
|
|
732
|
-
: isSelected
|
|
733
|
-
? "bg-brand-soft text-primary hover:bg-brand-soft-hover"
|
|
734
|
-
: "bg-surface text-primary hover:bg-hover",
|
|
735
|
-
)
|
|
736
|
-
: cn(
|
|
737
|
-
"relative size-8 rounded-full text-xs tabular-nums transition-colors",
|
|
738
|
-
// A grid you can walk with the keyboard needs to show where the
|
|
739
|
-
// keyboard IS. Inset because the cells sit half a pixel apart and
|
|
740
|
-
// an outset ring would be drawn over by its neighbours; the
|
|
741
|
-
// colour flips on the selected days for the reason the numpad's
|
|
742
|
-
// "Done" key does — a --brand ring on a --brand fill is a ring
|
|
743
|
-
// that exists only in the DOM.
|
|
744
|
-
FOCUS_RING_WIDTH,
|
|
745
|
-
"focus-visible:outline-none focus-visible:ring-inset",
|
|
746
|
-
isStart || isEnd
|
|
747
|
-
? "focus-visible:ring-brand-contrast"
|
|
748
|
-
: "focus-visible:ring-brand",
|
|
749
|
-
disabled
|
|
750
|
-
? "cursor-not-allowed text-placeholder"
|
|
751
|
-
// The two selected states are the BRAND, not a fixed sky: the endpoints
|
|
752
|
-
// are the solid fill and the days between them its soft tint. Hardcoding
|
|
753
|
-
// them left an app that changed `--brand` with a calendar in the old
|
|
754
|
-
// colour (docs/module-audit-2026-09-22.md §theming). Both token pairs
|
|
755
|
-
// flip light/dark themselves, so there is no `dark:` partner to carry —
|
|
756
|
-
// one would override the token and bring the hardcoded hue back.
|
|
757
|
-
: isStart || isEnd
|
|
758
|
-
? "bg-brand text-brand-contrast hover:bg-brand-hover"
|
|
759
|
-
: isInRange
|
|
760
|
-
? "font-medium text-brand-muted hover:bg-brand-soft-hover"
|
|
761
|
-
: "text-primary hover:bg-hover",
|
|
762
|
-
isToday && !isStart && !isEnd && !isInRange && !disabled && "ring-1 ring-inset ring-strong",
|
|
763
|
-
)
|
|
764
|
-
}
|
|
673
|
+
className={cn("relative flex", lg ? "min-w-0" : "h-8 items-center justify-center")}
|
|
765
674
|
>
|
|
766
|
-
{
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
675
|
+
{band && <span aria-hidden className={band} />}
|
|
676
|
+
<button
|
|
677
|
+
key={di}
|
|
678
|
+
type="button"
|
|
679
|
+
role="gridcell"
|
|
680
|
+
data-iso={iso}
|
|
681
|
+
// The roving tabindex: ONE tab stop for the whole month. Every day
|
|
682
|
+
// being tabbable meant 31 stops between a date field and the next
|
|
683
|
+
// control, which is the same reason the pattern exists.
|
|
684
|
+
tabIndex={isActive ? 0 : -1}
|
|
685
|
+
aria-label={labels.day(formatDay(d))}
|
|
686
|
+
// The custom content is the day's DESCRIPTION: `aria-label` replaces
|
|
687
|
+
// the button's text as its name, so without this link a screen
|
|
688
|
+
// reader would hear the date and never the events drawn under it.
|
|
689
|
+
aria-describedby={filled ? contentId : undefined}
|
|
690
|
+
aria-selected={isSelected}
|
|
691
|
+
aria-disabled={disabled || undefined}
|
|
692
|
+
aria-current={isToday ? "date" : undefined}
|
|
693
|
+
onClick={() => handleClick(d)}
|
|
694
|
+
onKeyDown={onDayKeyDown}
|
|
695
|
+
className={
|
|
696
|
+
lg
|
|
697
|
+
? cn(
|
|
698
|
+
"flex w-full min-w-0 flex-col items-stretch gap-1 overflow-hidden p-1.5 text-start text-xs transition-colors",
|
|
699
|
+
LG_CELL_HEIGHT,
|
|
700
|
+
FOCUS_RING,
|
|
701
|
+
"focus-visible:ring-inset",
|
|
702
|
+
disabled
|
|
703
|
+
? "cursor-not-allowed bg-surface text-placeholder"
|
|
704
|
+
: isSelected
|
|
705
|
+
? "bg-brand-soft text-primary hover:bg-brand-soft-hover"
|
|
706
|
+
: "bg-surface text-primary hover:bg-hover",
|
|
707
|
+
)
|
|
708
|
+
: cn(
|
|
709
|
+
"relative size-8 rounded-full text-xs tabular-nums transition-colors",
|
|
710
|
+
// A grid you can walk with the keyboard needs to show where the
|
|
711
|
+
// keyboard IS. Inset because the cells sit half a pixel apart and
|
|
712
|
+
// an outset ring would be drawn over by its neighbours; the
|
|
713
|
+
// colour flips on the selected days for the reason the numpad's
|
|
714
|
+
// "Done" key does — a --brand ring on a --brand fill is a ring
|
|
715
|
+
// that exists only in the DOM.
|
|
716
|
+
FOCUS_RING_WIDTH,
|
|
717
|
+
"focus-visible:outline-none focus-visible:ring-inset",
|
|
718
|
+
isStart || isEnd ? "focus-visible:ring-brand-contrast" : "focus-visible:ring-brand",
|
|
719
|
+
disabled
|
|
720
|
+
? "cursor-not-allowed text-placeholder"
|
|
721
|
+
: // The two selected states are the BRAND, not a fixed sky: the endpoints
|
|
722
|
+
// are the solid fill and the days between them its soft tint. Hardcoding
|
|
723
|
+
// them left an app that changed `--brand` with a calendar in the old
|
|
724
|
+
// colour (docs/module-audit-2026-09-22.md §theming). Both token pairs
|
|
725
|
+
// flip light/dark themselves, so there is no `dark:` partner to carry —
|
|
726
|
+
// one would override the token and bring the hardcoded hue back.
|
|
727
|
+
isStart || isEnd
|
|
728
|
+
? "bg-brand text-brand-contrast hover:bg-brand-hover"
|
|
729
|
+
: isInRange
|
|
730
|
+
? "font-medium text-brand-muted hover:bg-brand-soft-hover"
|
|
731
|
+
: "text-primary hover:bg-hover",
|
|
732
|
+
isToday && !isStart && !isEnd && !isInRange && !disabled && "ring-1 ring-inset ring-strong",
|
|
733
|
+
)
|
|
734
|
+
}
|
|
735
|
+
>
|
|
736
|
+
{lg ? (
|
|
737
|
+
<>
|
|
791
738
|
<span
|
|
792
|
-
|
|
793
|
-
|
|
739
|
+
className={cn(
|
|
740
|
+
"inline-flex size-6 shrink-0 items-center justify-center self-start rounded-full tabular-nums",
|
|
741
|
+
isStart || isEnd
|
|
742
|
+
? "bg-brand font-semibold text-brand-contrast"
|
|
743
|
+
: isToday && !disabled
|
|
744
|
+
? "font-semibold text-brand ring-1 ring-inset ring-brand"
|
|
745
|
+
: isInRange && "font-medium text-brand-muted",
|
|
746
|
+
)}
|
|
794
747
|
>
|
|
795
|
-
{
|
|
748
|
+
{label}
|
|
796
749
|
</span>
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
750
|
+
{filled && (
|
|
751
|
+
<span id={contentId} className="flex min-w-0 flex-col gap-0.5">
|
|
752
|
+
{content}
|
|
753
|
+
</span>
|
|
754
|
+
)}
|
|
755
|
+
</>
|
|
756
|
+
) : (
|
|
757
|
+
<>
|
|
758
|
+
{label}
|
|
759
|
+
{/* Under the number, inside the circle: room for a dot or two. */}
|
|
760
|
+
{filled && (
|
|
761
|
+
<span
|
|
762
|
+
id={contentId}
|
|
763
|
+
className="pointer-events-none absolute inset-x-0 bottom-0.5 flex justify-center gap-px leading-none"
|
|
764
|
+
>
|
|
765
|
+
{content}
|
|
766
|
+
</span>
|
|
767
|
+
)}
|
|
768
|
+
</>
|
|
769
|
+
)}
|
|
770
|
+
</button>
|
|
801
771
|
</div>
|
|
802
772
|
);
|
|
803
773
|
})}
|
|
@@ -4,8 +4,10 @@ import { useMoneyDraft } from "./money-draft";
|
|
|
4
4
|
|
|
5
5
|
type AmountInputProps = ComponentProps<typeof AmountInput>;
|
|
6
6
|
|
|
7
|
-
export interface MoneyFieldProps
|
|
8
|
-
|
|
7
|
+
export interface MoneyFieldProps extends Omit<
|
|
8
|
+
AmountInputProps,
|
|
9
|
+
"value" | "onChange" | "onCommit" | "negative" | "onNegativeChange" | "ref"
|
|
10
|
+
> {
|
|
9
11
|
/** The amount, or `null` for an empty field. */
|
|
10
12
|
value: number | null;
|
|
11
13
|
/**
|
|
@@ -13,7 +13,14 @@ import { splitTriggerAria } from "./trigger-aria";
|
|
|
13
13
|
import type { TriggerAria } from "./trigger-aria";
|
|
14
14
|
import { useKitDateFormatter, useKitLabels, useKitLocale, type LabelOverride } from "../i18n/kit-labels";
|
|
15
15
|
import { hasContent } from "../lib/presence";
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
FieldBox,
|
|
18
|
+
FieldLabelLine,
|
|
19
|
+
LABEL_ABOVE_BOX,
|
|
20
|
+
mergeRefs,
|
|
21
|
+
useFieldMessages,
|
|
22
|
+
type FieldHelpProps,
|
|
23
|
+
} from "./field-parts";
|
|
17
24
|
import { DEFAULT_MONTH_PICKER_LABELS } from "./month-picker-labels";
|
|
18
25
|
|
|
19
26
|
/**
|
|
@@ -381,10 +388,7 @@ function MonthFieldTrigger({
|
|
|
381
388
|
"Septiembre De 2026". It wraps from Large up, as DatePicker's value does
|
|
382
389
|
(`truncate-until-large`, text size §10.17; round 0.34 T1: the sweep read
|
|
383
390
|
"Choose a mo…" at 360 px / Extra large). */}
|
|
384
|
-
<span
|
|
385
|
-
id={valueId}
|
|
386
|
-
className={cn("truncate-until-large", !hasValue && "text-placeholder")}
|
|
387
|
-
>
|
|
391
|
+
<span id={valueId} className={cn("truncate-until-large", !hasValue && "text-placeholder")}>
|
|
388
392
|
{triggerText || " "}
|
|
389
393
|
</span>
|
|
390
394
|
</button>
|
|
@@ -425,8 +429,7 @@ function MonthGrid({
|
|
|
425
429
|
currentKey: string;
|
|
426
430
|
labels: MonthPickerLabels;
|
|
427
431
|
}) {
|
|
428
|
-
const outOfBounds = (key: string) =>
|
|
429
|
-
Boolean((minKey && key < minKey) || (maxKey && key > maxKey));
|
|
432
|
+
const outOfBounds = (key: string) => Boolean((minKey && key < minKey) || (maxKey && key > maxKey));
|
|
430
433
|
|
|
431
434
|
// The month holding the tab order, and with it the year on screen — one piece of
|
|
432
435
|
// state, as in MiniCalendar, so the two cannot disagree. Opens on the value, or on
|
|
@@ -448,9 +451,7 @@ function MonthGrid({
|
|
|
448
451
|
return Array.from({ length: 12 }, (_, i) => fmt.format(new Date(2000, i, 1)));
|
|
449
452
|
}, [locale]);
|
|
450
453
|
const longName = useMemo(() => new Intl.DateTimeFormat(locale, MONTH_NAME_FORMAT), [locale]);
|
|
451
|
-
const yearCaption = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(
|
|
452
|
-
firstOf({ year, month: 1 }),
|
|
453
|
-
);
|
|
454
|
+
const yearCaption = new Intl.DateTimeFormat(locale, { year: "numeric" }).format(firstOf({ year, month: 1 }));
|
|
454
455
|
|
|
455
456
|
// A month whose cell must take focus after the next commit. Arrowing across a year
|
|
456
457
|
// boundary re-labels the same twelve buttons, so the one to focus is a DIFFERENT
|
|
@@ -536,11 +537,7 @@ function MonthGrid({
|
|
|
536
537
|
</button>
|
|
537
538
|
{/* Names the grid, and `aria-live` so stepping a year says which one you are
|
|
538
539
|
on — the user pressing the arrow is not inside the grid to hear it change. */}
|
|
539
|
-
<div
|
|
540
|
-
id={captionId}
|
|
541
|
-
aria-live="polite"
|
|
542
|
-
className="text-sm font-semibold tabular-nums text-primary"
|
|
543
|
-
>
|
|
540
|
+
<div id={captionId} aria-live="polite" className="text-sm font-semibold tabular-nums text-primary">
|
|
544
541
|
{yearCaption}
|
|
545
542
|
</div>
|
|
546
543
|
<button
|
|
@@ -585,9 +582,7 @@ function MonthGrid({
|
|
|
585
582
|
FOCUS_RING_WIDTH,
|
|
586
583
|
"focus-visible:outline-none focus-visible:ring-inset",
|
|
587
584
|
// A --brand ring on a --brand fill exists only in the DOM.
|
|
588
|
-
selected && !disabled
|
|
589
|
-
? "focus-visible:ring-brand-contrast"
|
|
590
|
-
: "focus-visible:ring-brand",
|
|
585
|
+
selected && !disabled ? "focus-visible:ring-brand-contrast" : "focus-visible:ring-brand",
|
|
591
586
|
disabled
|
|
592
587
|
? "cursor-not-allowed text-placeholder"
|
|
593
588
|
: selected
|
|
@@ -776,9 +771,7 @@ function YearGrid({
|
|
|
776
771
|
"rounded px-2 py-1.5 text-sm tabular-nums transition-colors",
|
|
777
772
|
FOCUS_RING_WIDTH,
|
|
778
773
|
"focus-visible:outline-none focus-visible:ring-inset",
|
|
779
|
-
selected && !disabled
|
|
780
|
-
? "focus-visible:ring-brand-contrast"
|
|
781
|
-
: "focus-visible:ring-brand",
|
|
774
|
+
selected && !disabled ? "focus-visible:ring-brand-contrast" : "focus-visible:ring-brand",
|
|
782
775
|
disabled
|
|
783
776
|
? "cursor-not-allowed text-placeholder"
|
|
784
777
|
: selected
|
|
@@ -3,19 +3,8 @@ import { X } from "lucide-react";
|
|
|
3
3
|
import { cn } from "../lib/cn";
|
|
4
4
|
import { FieldChevron, FIELD_TRIGGER, FIELD_FLOATING_PAD, FIELD_INVALID } from "./field-base";
|
|
5
5
|
import { FieldLabel } from "./field-parts";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
endHintRowProps,
|
|
9
|
-
offersCreate,
|
|
10
|
-
useComboboxCore,
|
|
11
|
-
type ComboOption,
|
|
12
|
-
} from "./combobox-core";
|
|
13
|
-
import {
|
|
14
|
-
DEFAULT_COMBOBOX_LABELS,
|
|
15
|
-
DEFAULT_COMMON_LABELS,
|
|
16
|
-
useKitLabels,
|
|
17
|
-
useKitLocale,
|
|
18
|
-
} from "../i18n/kit-labels";
|
|
6
|
+
import { ComboboxPanel, endHintRowProps, offersCreate, useComboboxCore, type ComboOption } from "./combobox-core";
|
|
7
|
+
import { DEFAULT_COMBOBOX_LABELS, DEFAULT_COMMON_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
|
|
19
8
|
import {
|
|
20
9
|
assignRef,
|
|
21
10
|
EndHintRow,
|
|
@@ -35,8 +24,7 @@ import { useCommitReason, type CommitScope } from "./write-lock";
|
|
|
35
24
|
/** `onChange` is the kit's — "a selection was made", carrying values — rather
|
|
36
25
|
* than the div's form event, so the DOM's spelling of it is omitted. */
|
|
37
26
|
export interface MultiEntityComboboxProps<V extends string | number>
|
|
38
|
-
extends Omit<ComponentPropsWithoutRef<"div">, "onChange">,
|
|
39
|
-
FieldHelpProps {
|
|
27
|
+
extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
|
|
40
28
|
/** Selected ids. */
|
|
41
29
|
value: V[];
|
|
42
30
|
onChange: (value: V[]) => void;
|
|
@@ -210,17 +198,12 @@ export function MultiEntityCombobox<V extends string | number>(props: MultiEntit
|
|
|
210
198
|
// natural fit for a summary, but in ja/zh it concatenates the names with nothing
|
|
211
199
|
// between them at all.
|
|
212
200
|
const locale = useKitLocale();
|
|
213
|
-
const listFormat = useMemo(
|
|
214
|
-
() => new Intl.ListFormat(locale, { type: "conjunction", style: "narrow" }),
|
|
215
|
-
[locale],
|
|
216
|
-
);
|
|
201
|
+
const listFormat = useMemo(() => new Intl.ListFormat(locale, { type: "conjunction", style: "narrow" }), [locale]);
|
|
217
202
|
const summary = (() => {
|
|
218
203
|
if (value.length === 0) return placeholder ?? "";
|
|
219
204
|
if (itemLabel) return itemLabel(value.length);
|
|
220
205
|
const chosen = value.map(resolve);
|
|
221
|
-
return chosen.every(Boolean)
|
|
222
|
-
? listFormat.format(chosen.map((o) => o!.label))
|
|
223
|
-
: labels.selectedCount(value.length);
|
|
206
|
+
return chosen.every(Boolean) ? listFormat.format(chosen.map((o) => o!.label)) : labels.selectedCount(value.length);
|
|
224
207
|
})();
|
|
225
208
|
|
|
226
209
|
// While locked the trigger sits in the reason's Tooltip, as on EntityCombobox.
|
|
@@ -282,10 +265,7 @@ export function MultiEntityCombobox<V extends string | number>(props: MultiEntit
|
|
|
282
265
|
// A caller's own name wins over the composition: two fields labelled
|
|
283
266
|
// "Account" on a transfer form are the from and the to, and only the
|
|
284
267
|
// caller knows which is which.
|
|
285
|
-
aria-label={
|
|
286
|
-
ariaLabel ??
|
|
287
|
-
(typeof label === "string" ? common.fieldValue(label, summary) : undefined)
|
|
288
|
-
}
|
|
268
|
+
aria-label={ariaLabel ?? (typeof label === "string" ? common.fieldValue(label, summary) : undefined)}
|
|
289
269
|
// Focusable while locked — see EntityCombobox.
|
|
290
270
|
disabled={lock.locked ? undefined : disabled}
|
|
291
271
|
aria-disabled={lock.locked || undefined}
|
|
@@ -47,8 +47,7 @@ export interface MultiSelectOption<V extends string | number = string | number>
|
|
|
47
47
|
* inferred from `options` and `value`, so `onChange` hands back `number[]` for number
|
|
48
48
|
* ids and `string[]` for string ones, and no call site casts. */
|
|
49
49
|
export interface MultiSelectProps<V extends string | number = string | number>
|
|
50
|
-
extends Omit<ComponentPropsWithoutRef<"div">, "onChange">,
|
|
51
|
-
FieldHelpProps {
|
|
50
|
+
extends Omit<ComponentPropsWithoutRef<"div">, "onChange">, FieldHelpProps {
|
|
52
51
|
options: MultiSelectOption<V>[];
|
|
53
52
|
/** The chosen values — the select family's `value` (API-4). */
|
|
54
53
|
value?: V[];
|
|
@@ -162,7 +161,8 @@ export function MultiSelect<V extends string | number = string | number>(props:
|
|
|
162
161
|
const value = useMemo<V[]>(() => valueProp ?? [], [valueProp]);
|
|
163
162
|
// The rows as the family's options — the hint is the sublabel, searched like the label.
|
|
164
163
|
const comboOptions = useMemo(
|
|
165
|
-
() =>
|
|
164
|
+
() =>
|
|
165
|
+
options.map((o): ComboOption<V> => ({ value: o.value, label: o.label, sublabel: o.hint, disabled: o.disabled })),
|
|
166
166
|
[options],
|
|
167
167
|
);
|
|
168
168
|
// Back closes the open list, as it did on `useDropdown` (keksdose live #309).
|
|
@@ -213,9 +213,7 @@ export function MultiSelect<V extends string | number = string | number>(props:
|
|
|
213
213
|
const valueSet = useMemo(() => new Set<V>(value), [value]);
|
|
214
214
|
const allChecked = options.length > 0 && options.every((o) => valueSet.has(o.value));
|
|
215
215
|
const selectedSummary =
|
|
216
|
-
value.length === 0 || allChecked
|
|
217
|
-
? (labelsProp?.all ?? placeholder ?? text.all)
|
|
218
|
-
: text.selectedCount(value.length);
|
|
216
|
+
value.length === 0 || allChecked ? (labelsProp?.all ?? placeholder ?? text.all) : text.selectedCount(value.length);
|
|
219
217
|
|
|
220
218
|
const toggle = (o: ComboOption<V>) => {
|
|
221
219
|
if (lock.locked) return;
|
|
@@ -256,9 +254,7 @@ export function MultiSelect<V extends string | number = string | number>(props:
|
|
|
256
254
|
// siblings use, so a form row of pickers reads the same way throughout.
|
|
257
255
|
// A caller's own name wins: two filters labelled "Accounts" on one screen have
|
|
258
256
|
// to be told apart, and only the caller knows by what.
|
|
259
|
-
aria-label={
|
|
260
|
-
ariaLabel ?? (typeof label === "string" ? common.fieldValue(label, selectedSummary) : undefined)
|
|
261
|
-
}
|
|
257
|
+
aria-label={ariaLabel ?? (typeof label === "string" ? common.fieldValue(label, selectedSummary) : undefined)}
|
|
262
258
|
onClick={() => {
|
|
263
259
|
if (!inert) setOpen((v) => !v);
|
|
264
260
|
}}
|
|
@@ -31,7 +31,10 @@ export interface NavPillLinkProps {
|
|
|
31
31
|
/** The `aria-current` token the current pill carries. */
|
|
32
32
|
export type NavPillsCurrent = "page" | "step" | "location" | "true";
|
|
33
33
|
|
|
34
|
-
export interface NavPillsProps<T extends string> extends Omit<
|
|
34
|
+
export interface NavPillsProps<T extends string> extends Omit<
|
|
35
|
+
ComponentPropsWithoutRef<"nav">,
|
|
36
|
+
"children" | "onSelect"
|
|
37
|
+
> {
|
|
35
38
|
items: NavPillItem<T>[];
|
|
36
39
|
/** The pill that is current. `null` or a value not in `items`: none is. */
|
|
37
40
|
current: T | null;
|
|
@@ -161,7 +164,12 @@ export function NavPills<T extends string>({
|
|
|
161
164
|
) : kit ? (
|
|
162
165
|
<RenderedKitLink render={kit} props={props} />
|
|
163
166
|
) : (
|
|
164
|
-
<a
|
|
167
|
+
<a
|
|
168
|
+
href={props.href}
|
|
169
|
+
className={props.className}
|
|
170
|
+
aria-current={props["aria-current"]}
|
|
171
|
+
onClick={props.onClick}
|
|
172
|
+
>
|
|
165
173
|
{props.children}
|
|
166
174
|
</a>
|
|
167
175
|
);
|
|
@@ -8,8 +8,10 @@ import { useKitLocale } from "../i18n/kit-labels";
|
|
|
8
8
|
|
|
9
9
|
type NumberInputProps = ComponentProps<typeof NumberInput>;
|
|
10
10
|
|
|
11
|
-
export interface NumberFieldProps
|
|
12
|
-
|
|
11
|
+
export interface NumberFieldProps extends Omit<
|
|
12
|
+
NumberInputProps,
|
|
13
|
+
"value" | "onChange" | "onCommit" | "suffix" | "invalid" | "error" | "locale"
|
|
14
|
+
> {
|
|
13
15
|
/** The committed number. `null` is "no value" — shown as an empty field. */
|
|
14
16
|
value: number | null;
|
|
15
17
|
/**
|
|
@@ -205,8 +207,7 @@ export function NumberField(props: NumberFieldProps) {
|
|
|
205
207
|
// Live mode echoing back what it was just told: the draft already says it, in
|
|
206
208
|
// the typist's own spelling ("1," or "12+5"), and reformatting would fight them.
|
|
207
209
|
// Only a changed `value` qualifies — a new mark or `digits` still re-renders.
|
|
208
|
-
const echo =
|
|
209
|
-
onValueChange !== undefined && value === reported && seen.mark === mark && seen.digits === digits;
|
|
210
|
+
const echo = onValueChange !== undefined && value === reported && seen.mark === mark && seen.digits === digits;
|
|
210
211
|
if (!echo) {
|
|
211
212
|
setDraft(format(value));
|
|
212
213
|
setCommitted(value);
|
|
@@ -263,17 +264,19 @@ export function NumberField(props: NumberFieldProps) {
|
|
|
263
264
|
const required = ariaRequired === true || ariaRequired === "true";
|
|
264
265
|
|
|
265
266
|
const labelWithUnit =
|
|
266
|
-
unit !== undefined && unitPlacement === "label"
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
267
|
+
unit !== undefined && unitPlacement === "label" ? (
|
|
268
|
+
label === undefined || label === "" ? (
|
|
269
|
+
unit
|
|
270
|
+
) : typeof label === "string" && typeof unit === "string" ? (
|
|
271
|
+
`${label} (${unit})`
|
|
272
|
+
) : (
|
|
273
|
+
<>
|
|
274
|
+
{label} ({unit})
|
|
275
|
+
</>
|
|
276
|
+
)
|
|
277
|
+
) : (
|
|
278
|
+
label
|
|
279
|
+
);
|
|
277
280
|
|
|
278
281
|
return (
|
|
279
282
|
<NumberInput
|