@eifi1/ui-kit 0.51.4 → 0.51.6
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 +5 -5
- 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 +1 -4
- 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 +10 -8
- 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.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 +44 -56
- 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.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 +6 -8
- 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 +2 -7
- 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 +2 -8
- 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.map +1 -1
- package/dist/components/legal-page.js +14 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.js +12 -2
- 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.js +22 -10
- 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.d.ts +24 -2
- package/dist/components/treemap.js +28 -4
- 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.js +4 -1
- 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 +4 -1
- 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 +4 -1
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/es.js +4 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +4 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +4 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +4 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.js.map +1 -1
- package/dist/i18n/review.js +13 -7
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +16 -16
- 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 +4 -0
- 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-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.js +12 -6
- 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.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/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/contrast.d.ts +2 -2
- 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 +12 -42
- 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 +13 -14
- 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 +1 -3
- package/src/components/data-table-groups.tsx +3 -1
- package/src/components/data-table-head.tsx +27 -45
- 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 +489 -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 +6 -8
- 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 +4 -17
- package/src/components/image-grid.tsx +1 -6
- package/src/components/inline-edit-field.tsx +1 -5
- package/src/components/inline-entity-combobox.tsx +6 -21
- package/src/components/input.tsx +14 -2
- package/src/components/jump-calendar.tsx +2 -6
- package/src/components/legal-labels.ts +1 -2
- package/src/components/legal-page.tsx +18 -7
- package/src/components/legal.tsx +14 -5
- package/src/components/lightbox.tsx +1 -3
- package/src/components/line-items.tsx +7 -15
- package/src/components/list.tsx +29 -25
- 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 +59 -9
- 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 +12 -8
- 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 +33 -49
- package/src/i18n/kit-labels.tsx +5 -20
- package/src/i18n/languages.ts +2 -8
- package/src/i18n/locales/en.ts +11 -31
- package/src/i18n/locales/es.ts +35 -49
- package/src/i18n/locales/fr.ts +34 -51
- package/src/i18n/locales/hu.ts +26 -37
- package/src/i18n/locales/it.ts +35 -52
- package/src/i18n/locales/zh.ts +14 -32
- package/src/i18n/plurals.ts +4 -1
- package/src/i18n/review.ts +18 -7
- package/src/i18n/shared-labels.ts +1 -2
- package/src/index.ts +106 -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 +15 -3
- 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-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 +12 -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 +9 -8
- package/src/shell/topbar-controls.tsx +5 -19
- package/src/shell/tour-menu.tsx +9 -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
|
@@ -3,13 +3,7 @@ import { ChevronDown } from "lucide-react";
|
|
|
3
3
|
import type { ReactNode, Ref } from "react";
|
|
4
4
|
import { CurrencyOptionList, getCurrency } from "./currency-option-list";
|
|
5
5
|
import { useComboboxCore } from "./combobox-core";
|
|
6
|
-
import {
|
|
7
|
-
FIELD_BASE,
|
|
8
|
-
FIELD_DISPLAY,
|
|
9
|
-
FIELD_INVALID,
|
|
10
|
-
FLOATING_INPUT_CLASS,
|
|
11
|
-
FloatingField,
|
|
12
|
-
} from "./field-base";
|
|
6
|
+
import { FIELD_BASE, FIELD_DISPLAY, FIELD_INVALID, FLOATING_INPUT_CLASS, FloatingField } from "./field-base";
|
|
13
7
|
import { cn } from "../lib/cn";
|
|
14
8
|
import { currencyMinorDigits } from "../lib/format";
|
|
15
9
|
import { roundHalfAway } from "../lib/round";
|
|
@@ -316,7 +310,6 @@ export interface AmountInputProps extends FieldHelpProps, DataAttributes {
|
|
|
316
310
|
ref?: Ref<HTMLInputElement>;
|
|
317
311
|
}
|
|
318
312
|
|
|
319
|
-
|
|
320
313
|
/**
|
|
321
314
|
* A settled figure, rounded to `digits` (half away from zero) and clamped to
|
|
322
315
|
* `min`/`max`. Only a plain number is touched. A half-typed draft or an expression
|
|
@@ -356,10 +349,7 @@ const TONE_CLASS: Record<"neutral" | "outflow" | "inflow", string> = {
|
|
|
356
349
|
// reflow the figure as they are typed; FIELD_DISPLAY's own muted placeholder
|
|
357
350
|
// colour is what keeps an EMPTY form from painting its zero in the direction tint
|
|
358
351
|
// (`tone` is computed from 0, which reads as an inflow).
|
|
359
|
-
const DISPLAY_INPUT_CLASS = cn(
|
|
360
|
-
FIELD_DISPLAY,
|
|
361
|
-
"text-4xl font-semibold leading-tight tracking-tight tabular-nums",
|
|
362
|
-
);
|
|
352
|
+
const DISPLAY_INPUT_CLASS = cn(FIELD_DISPLAY, "text-4xl font-semibold leading-tight tracking-tight tabular-nums");
|
|
363
353
|
|
|
364
354
|
/**
|
|
365
355
|
* Is `text` the ANSWER to `previous`, or something typed OVER it?
|
|
@@ -381,7 +371,33 @@ function isResultOf(previous: string, text: string, settle: (text: string) => st
|
|
|
381
371
|
}
|
|
382
372
|
|
|
383
373
|
export function AmountInput(props: AmountInputProps) {
|
|
384
|
-
const {
|
|
374
|
+
const {
|
|
375
|
+
ref,
|
|
376
|
+
value,
|
|
377
|
+
onChange,
|
|
378
|
+
currency,
|
|
379
|
+
onCurrencyChange,
|
|
380
|
+
placeholder,
|
|
381
|
+
label,
|
|
382
|
+
className,
|
|
383
|
+
inputClassName,
|
|
384
|
+
id,
|
|
385
|
+
"aria-label": ariaLabel,
|
|
386
|
+
"aria-required": ariaRequired,
|
|
387
|
+
autoFocus,
|
|
388
|
+
tone = "neutral",
|
|
389
|
+
negative = false,
|
|
390
|
+
onNegativeChange,
|
|
391
|
+
align = "start",
|
|
392
|
+
labels,
|
|
393
|
+
currencyNames,
|
|
394
|
+
currencyOptions,
|
|
395
|
+
digits: digitsProp,
|
|
396
|
+
min,
|
|
397
|
+
max,
|
|
398
|
+
onCommit,
|
|
399
|
+
disabledReasonDisplay,
|
|
400
|
+
} = props;
|
|
385
401
|
const generatedId = useId();
|
|
386
402
|
const fieldId = id ?? generatedId;
|
|
387
403
|
// The sign is DISPLAYED, not stored (live #201 rework). `value` is the
|
|
@@ -440,10 +456,22 @@ export function AmountInput(props: AmountInputProps) {
|
|
|
440
456
|
const hasEnd = showCalc || Boolean(currency);
|
|
441
457
|
const [endRef, endWidth] = useEndWidth(hasEnd);
|
|
442
458
|
const trailingRoom = asDisplay
|
|
443
|
-
? currency
|
|
459
|
+
? currency
|
|
460
|
+
? editable
|
|
461
|
+
? "pe-16"
|
|
462
|
+
: "pe-12"
|
|
463
|
+
: undefined
|
|
444
464
|
: showCalc
|
|
445
|
-
? currency
|
|
446
|
-
|
|
465
|
+
? currency
|
|
466
|
+
? editable
|
|
467
|
+
? "pe-24"
|
|
468
|
+
: "pe-16"
|
|
469
|
+
: "pe-10"
|
|
470
|
+
: currency
|
|
471
|
+
? editable
|
|
472
|
+
? "pe-20"
|
|
473
|
+
: "pe-14"
|
|
474
|
+
: undefined;
|
|
447
475
|
const innerRef = useRef<HTMLInputElement>(null);
|
|
448
476
|
const setRefs = useMemo(() => mergeRefs(innerRef, ref), [ref]);
|
|
449
477
|
// While the typist is typing, the field shows THEIR text ("1.234,5" stays exactly
|
|
@@ -545,180 +573,180 @@ export function AmountInput(props: AmountInputProps) {
|
|
|
545
573
|
Tooltip), as NumberInput does; the root above keeps `className`, so nothing
|
|
546
574
|
reflows. */}
|
|
547
575
|
<LockedOrNot lock={lock} display={disabledReasonDisplay}>
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
576
|
+
<FloatingField
|
|
577
|
+
className="w-full"
|
|
578
|
+
htmlFor={fieldId}
|
|
579
|
+
label={label}
|
|
580
|
+
srOnlyLabel={asDisplay}
|
|
581
|
+
hint={numeric.hint.labelHint}
|
|
582
|
+
>
|
|
583
|
+
<input
|
|
584
|
+
ref={setRefs}
|
|
585
|
+
id={fieldId}
|
|
586
|
+
aria-label={ariaLabel}
|
|
587
|
+
type="text"
|
|
588
|
+
// eslint-disable-next-line jsx-a11y/no-autofocus -- opt-in per call site (feedback #70)
|
|
589
|
+
autoFocus={autoFocus}
|
|
590
|
+
// On mobile suppress the OS keyboard so our numpad sheet owns entry; the
|
|
591
|
+
// field keeps focus/caret. Desktop keeps the native decimal keypad.
|
|
592
|
+
inputMode={isMobile ? "none" : "decimal"}
|
|
593
|
+
autoComplete="off"
|
|
594
|
+
disabled={off}
|
|
595
|
+
// Locked: focusable, `readOnly`, `aria-disabled` — see `disabledReason`.
|
|
596
|
+
readOnly={locked || undefined}
|
|
597
|
+
aria-disabled={locked || undefined}
|
|
598
|
+
// The floating-label pattern needs a blank placeholder for its
|
|
599
|
+
// peer-placeholder-shown trick. The display shape has no floating label,
|
|
600
|
+
// so it spends the placeholder on what an empty borderless form actually
|
|
601
|
+
// needs: a zero to aim at, at full size. The caller supplies it because
|
|
602
|
+
// only the app knows the locale's decimal separator.
|
|
603
|
+
placeholder={asDisplay ? (placeholder ?? "0") : label !== undefined ? " " : placeholder}
|
|
604
|
+
value={display}
|
|
605
|
+
onChange={(e) => {
|
|
606
|
+
if (!locked) typed(e.target.value);
|
|
607
|
+
}}
|
|
608
|
+
onFocus={() => setFocused(true)}
|
|
609
|
+
onBlur={() => {
|
|
610
|
+
// Nothing settles under the lock — not even a draft typed before it arrived,
|
|
611
|
+
// which stays in the field for when it lifts.
|
|
612
|
+
if (!locked) commit();
|
|
613
|
+
setFocused(false);
|
|
614
|
+
}}
|
|
615
|
+
onKeyDown={(e) => {
|
|
616
|
+
if (e.key !== "Enter") return;
|
|
617
|
+
// Locked: Enter submits no form and settles nothing.
|
|
618
|
+
if (locked) e.preventDefault();
|
|
619
|
+
else commit();
|
|
620
|
+
}}
|
|
621
|
+
className={cn(
|
|
622
|
+
// With a label, use the floating-input padding (pt-4 pb-1) like every
|
|
623
|
+
// other labelled field so the value sits BELOW the floated label rather
|
|
624
|
+
// than vertically centred where it overlaps the resting label
|
|
625
|
+
// (feedback #314). FLOATING_INPUT_CLASS already bundles the peer +
|
|
626
|
+
// transparent-placeholder bits.
|
|
627
|
+
asDisplay ? DISPLAY_INPUT_CLASS : label !== undefined ? FLOATING_INPUT_CLASS : FIELD_BASE,
|
|
628
|
+
// The plain end padding, with nothing trailing: cosmetic, so the caller's
|
|
629
|
+
// to change (keksdose 0.24 — a symmetric `px-2` in a budget cell).
|
|
630
|
+
!trailingRoom && (asDisplay ? "pe-0" : "pe-3"),
|
|
631
|
+
// Centred display shape: centre in what is LEFT of the currency chip.
|
|
632
|
+
// `text-center` alone would centre the figure in the whole box, i.e.
|
|
633
|
+
// partly underneath the chip; the padding below is what takes the chip
|
|
634
|
+
// out of the centring, and nothing is added at the start because a
|
|
635
|
+
// mirrored reservation would spend the width twice (see `align`).
|
|
636
|
+
asDisplay && align === "center" && "text-center",
|
|
637
|
+
// Over the base class's own text colour.
|
|
638
|
+
TONE_CLASS[tone],
|
|
639
|
+
// The caller's, over all of the above — base, plain padding, alignment and
|
|
640
|
+
// tone — and under only what the field needs to work (see `inputClassName`).
|
|
641
|
+
inputClassName,
|
|
642
|
+
// Room for the trailing controls, after the caller's so a `px-2` cannot run
|
|
643
|
+
// the digits under the chip (NumberInput's order, which reserves its unit
|
|
644
|
+
// and calculator the same way).
|
|
645
|
+
trailingRoom,
|
|
646
|
+
invalid && FIELD_INVALID,
|
|
647
|
+
locked && "cursor-not-allowed",
|
|
648
|
+
)}
|
|
649
|
+
// The classes above are the fallback; once measured the field reserves exactly
|
|
650
|
+
// its trailing controls' width, inline so it wins over every class (see
|
|
651
|
+
// `trailingRoom`).
|
|
652
|
+
style={hasEnd && endWidth != null ? { paddingInlineEnd: endWidth + (asDisplay ? 4 : 8) } : undefined}
|
|
653
|
+
aria-invalid={invalid || undefined}
|
|
654
|
+
aria-describedby={numeric.describedBy}
|
|
655
|
+
aria-required={ariaRequired}
|
|
656
|
+
/>
|
|
657
|
+
{/* The label is FloatingField's, after these children (the floating trick
|
|
630
658
|
reads the input through `peer-*`). The display shape drops it VISUALLY,
|
|
631
659
|
not from the accessibility tree: a 36px tinted figure at the top of a
|
|
632
660
|
transaction form is legibly the amount, but a screen reader still needs
|
|
633
661
|
the name, and callers that pass `label` without `aria-label` would
|
|
634
662
|
otherwise be left with none. */}
|
|
635
|
-
|
|
663
|
+
{/* Trailing controls share one flex track so the calculator icon and the
|
|
636
664
|
currency suffix/picker sit side by side without overlapping. */}
|
|
637
|
-
|
|
665
|
+
{/* The display shape has no box to inset from, so the controls align to the
|
|
638
666
|
figure's own end edge and its baseline strip (`bottom-1`, matching the
|
|
639
667
|
input's pb-1) instead of floating inside a field. */}
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
className={cn(
|
|
644
|
-
"absolute flex items-center gap-0.5",
|
|
645
|
-
// Logical `end-*`: the chip and the calculator are the figure's trailing
|
|
646
|
-
// controls, so a right-to-left form carries them on the left.
|
|
647
|
-
asDisplay ? "bottom-1 end-0" : "inset-y-1 end-1",
|
|
648
|
-
)}
|
|
649
|
-
>
|
|
650
|
-
{showCalc && (
|
|
651
|
-
<CalculatorButton
|
|
652
|
-
// The mark the field shows but not the typist's grouping: the evaluator
|
|
653
|
-
// reads either mark, and "1.234,5" is two of them. The result comes back
|
|
654
|
-
// dot-decimal.
|
|
655
|
-
value={derived}
|
|
656
|
-
onChange={(result, expression) => {
|
|
657
|
-
setDraft(null);
|
|
658
|
-
const settled = settle(result);
|
|
659
|
-
handleText(settled, expression);
|
|
660
|
-
onCommit?.(settled);
|
|
661
|
-
}}
|
|
662
|
-
className="px-1.5"
|
|
663
|
-
aria-label={labels?.calculatorTrigger}
|
|
664
|
-
labels={labels?.calculator}
|
|
665
|
-
/>
|
|
666
|
-
)}
|
|
667
|
-
{currency && !editable && (
|
|
668
|
-
<span
|
|
669
|
-
aria-hidden
|
|
668
|
+
<div
|
|
669
|
+
// Measured for the input's end padding (see `trailingRoom`).
|
|
670
|
+
ref={endRef}
|
|
670
671
|
className={cn(
|
|
671
|
-
"
|
|
672
|
-
//
|
|
673
|
-
|
|
672
|
+
"absolute flex items-center gap-0.5",
|
|
673
|
+
// Logical `end-*`: the chip and the calculator are the figure's trailing
|
|
674
|
+
// controls, so a right-to-left form carries them on the left.
|
|
675
|
+
asDisplay ? "bottom-1 end-0" : "inset-y-1 end-1",
|
|
674
676
|
)}
|
|
675
677
|
>
|
|
676
|
-
{
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
selected ? common.fieldValue(currencyText.currency, selected.code) : currencyText.currency
|
|
693
|
-
}
|
|
694
|
-
className={cn(
|
|
695
|
-
"flex items-center gap-1 rounded px-2 py-1 font-medium text-secondary hover:bg-hover",
|
|
696
|
-
asDisplay ? "text-sm" : "text-xs",
|
|
678
|
+
{showCalc && (
|
|
679
|
+
<CalculatorButton
|
|
680
|
+
// The mark the field shows but not the typist's grouping: the evaluator
|
|
681
|
+
// reads either mark, and "1.234,5" is two of them. The result comes back
|
|
682
|
+
// dot-decimal.
|
|
683
|
+
value={derived}
|
|
684
|
+
onChange={(result, expression) => {
|
|
685
|
+
setDraft(null);
|
|
686
|
+
const settled = settle(result);
|
|
687
|
+
handleText(settled, expression);
|
|
688
|
+
onCommit?.(settled);
|
|
689
|
+
}}
|
|
690
|
+
className="px-1.5"
|
|
691
|
+
aria-label={labels?.calculatorTrigger}
|
|
692
|
+
labels={labels?.calculator}
|
|
693
|
+
/>
|
|
697
694
|
)}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
695
|
+
{currency && !editable && (
|
|
696
|
+
<span
|
|
697
|
+
aria-hidden
|
|
698
|
+
className={cn(
|
|
699
|
+
"pointer-events-none px-1 font-medium text-muted",
|
|
700
|
+
// A text-xs chip next to a 36px figure reads as a stray footnote.
|
|
701
|
+
asDisplay ? "text-sm" : "text-xs",
|
|
702
|
+
)}
|
|
703
|
+
>
|
|
704
|
+
{currency}
|
|
705
|
+
</span>
|
|
706
|
+
)}
|
|
707
|
+
{currency && editable && (
|
|
708
|
+
<button
|
|
709
|
+
ref={chipRef}
|
|
710
|
+
type="button"
|
|
711
|
+
onClick={() => setOpen((v) => !v)}
|
|
712
|
+
// A button that opens a listbox, and says so: the chip is a control inside
|
|
713
|
+
// a text field, not a field of its own, so not a combobox.
|
|
714
|
+
aria-haspopup="listbox"
|
|
715
|
+
aria-expanded={open}
|
|
716
|
+
aria-controls={listboxId}
|
|
717
|
+
aria-label={
|
|
718
|
+
// "Currency: EUR" through `common.fieldValue`, not a template literal:
|
|
719
|
+
// the colon-and-space is punctuation a translation has to own.
|
|
720
|
+
selected ? common.fieldValue(currencyText.currency, selected.code) : currencyText.currency
|
|
721
|
+
}
|
|
722
|
+
className={cn(
|
|
723
|
+
"flex items-center gap-1 rounded px-2 py-1 font-medium text-secondary hover:bg-hover",
|
|
724
|
+
asDisplay ? "text-sm" : "text-xs",
|
|
725
|
+
)}
|
|
726
|
+
>
|
|
727
|
+
{currency}
|
|
728
|
+
<ChevronDown className="size-3" />
|
|
729
|
+
</button>
|
|
730
|
+
)}
|
|
731
|
+
</div>
|
|
732
|
+
{editable && (
|
|
733
|
+
<CurrencyOptionList
|
|
734
|
+
core={core}
|
|
735
|
+
listboxId={listboxId}
|
|
736
|
+
value={currency}
|
|
737
|
+
codes={currencyOptions}
|
|
738
|
+
currencyNames={currencyNames}
|
|
739
|
+
locale={locale}
|
|
740
|
+
searchPlaceholder={currencyText.search}
|
|
741
|
+
// The phone sheet's title: what the chip is for.
|
|
742
|
+
sheetTitle={currencyText.currency}
|
|
743
|
+
onChoose={(code) => {
|
|
744
|
+
onCurrencyChange?.(code);
|
|
745
|
+
closeToTrigger();
|
|
746
|
+
}}
|
|
747
|
+
/>
|
|
748
|
+
)}
|
|
749
|
+
</FloatingField>
|
|
722
750
|
</LockedOrNot>
|
|
723
751
|
{/* Outside the relative box, as NumberInput's caption is: the trailing
|
|
724
752
|
controls are `inset-y-1` in it and would stretch down over a second line. */}
|
|
@@ -22,8 +22,7 @@ export interface AuthedImageLabels {
|
|
|
22
22
|
// Defined in ./authed-image-labels, which holds no component code (0.34, KS U8).
|
|
23
23
|
export { DEFAULT_AUTHED_IMAGE_LABELS };
|
|
24
24
|
|
|
25
|
-
export interface AuthedImageProps
|
|
26
|
-
extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "alt" | "children"> {
|
|
25
|
+
export interface AuthedImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "alt" | "children"> {
|
|
27
26
|
/** The image's URL — an API path when a {@link fetcher} is given. */
|
|
28
27
|
src: string | null | undefined;
|
|
29
28
|
/** Required: an image without a text alternative is a gap a reader falls into.
|
|
@@ -188,7 +187,9 @@ export function ImageStates({
|
|
|
188
187
|
))}
|
|
189
188
|
{failed &&
|
|
190
189
|
// `=== undefined`, not `??`: `null` is the caller asking for nothing at all.
|
|
191
|
-
(errorFallback !== undefined ?
|
|
190
|
+
(errorFallback !== undefined ? (
|
|
191
|
+
errorFallback
|
|
192
|
+
) : (
|
|
192
193
|
<span
|
|
193
194
|
// `role="img"` with the alt as its name: the picture that failed still
|
|
194
195
|
// occupies its place in the reading order, and "couldn't be loaded" is
|
|
@@ -198,7 +199,9 @@ export function ImageStates({
|
|
|
198
199
|
className="flex h-full min-h-16 w-full flex-col items-center justify-center gap-1 bg-hover p-2 text-center text-xs text-muted"
|
|
199
200
|
>
|
|
200
201
|
<ImageOff aria-hidden className="size-5 shrink-0" />
|
|
201
|
-
<span aria-hidden className="line-clamp-2">
|
|
202
|
+
<span aria-hidden className="line-clamp-2">
|
|
203
|
+
{labels.loadError}
|
|
204
|
+
</span>
|
|
202
205
|
</span>
|
|
203
206
|
))}
|
|
204
207
|
</span>
|
|
@@ -44,10 +44,11 @@ import type { CommitScope } from "./write-lock";
|
|
|
44
44
|
* are omitted. Everything else reaches the `<input>`, the way it does on {@link Input}.
|
|
45
45
|
*/
|
|
46
46
|
export interface AutocompleteProps<V extends string | number = string>
|
|
47
|
-
extends
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
extends
|
|
48
|
+
Omit<
|
|
49
|
+
ComponentPropsWithoutRef<"input">,
|
|
50
|
+
"value" | "defaultValue" | "onChange" | "onSelect" | "children" | "type" | "size"
|
|
51
|
+
>,
|
|
51
52
|
FieldHelpProps {
|
|
52
53
|
/** What is in the field. Controlled, and never reset by the component: opening,
|
|
53
54
|
* closing and a failed lookup all leave it exactly as typed. */
|
|
@@ -334,8 +335,7 @@ export function Autocomplete<V extends string | number = string>(props: Autocomp
|
|
|
334
335
|
const nativeSize = typeof size === "number" ? size : undefined;
|
|
335
336
|
// The caller's name wins; else the floating label, by reference so a non-string
|
|
336
337
|
// label still names the field.
|
|
337
|
-
const labelledBy =
|
|
338
|
-
ariaLabel === undefined ? (ariaLabelledBy ?? (hasLabel ? labelId : undefined)) : undefined;
|
|
338
|
+
const labelledBy = ariaLabel === undefined ? (ariaLabelledBy ?? (hasLabel ? labelId : undefined)) : undefined;
|
|
339
339
|
// While locked the field sits in the reason's Tooltip — in a fragment with a hidden
|
|
340
340
|
// copy of the reason, Button's anatomy; `block` so a full-width field stays full width.
|
|
341
341
|
const withLock = (box: ReactNode) =>
|
|
@@ -611,9 +611,7 @@ export function Autocomplete<V extends string | number = string>(props: Autocomp
|
|
|
611
611
|
</span>
|
|
612
612
|
)}
|
|
613
613
|
<span className="min-w-0 flex-1">
|
|
614
|
-
<span className="block truncate-until-large text-primary">
|
|
615
|
-
{o.label}
|
|
616
|
-
</span>
|
|
614
|
+
<span className="block truncate-until-large text-primary">{o.label}</span>
|
|
617
615
|
{o.sublabel && (
|
|
618
616
|
<span
|
|
619
617
|
className={cn(
|
|
@@ -329,9 +329,7 @@ export function BulkActionBar({
|
|
|
329
329
|
no room, so it was the item squeezed to nothing instead of a line breaking.
|
|
330
330
|
Its own width is its basis now; `truncate` is left for a label too long for a
|
|
331
331
|
line on its own. */}
|
|
332
|
-
<span className="min-w-0 flex-auto truncate text-sm font-medium text-primary">
|
|
333
|
-
{labels.selected(shownCount)}
|
|
334
|
-
</span>
|
|
332
|
+
<span className="min-w-0 flex-auto truncate text-sm font-medium text-primary">{labels.selected(shownCount)}</span>
|
|
335
333
|
{/* `contents`, so the caller's controls are flex items of the bar itself. */}
|
|
336
334
|
<div className="contents">{children}</div>
|
|
337
335
|
{!floating && clear}
|
|
@@ -352,10 +350,7 @@ export function BulkActionBar({
|
|
|
352
350
|
{toolbar}
|
|
353
351
|
<div
|
|
354
352
|
data-bulk-action-bar-panel=""
|
|
355
|
-
className={cn(
|
|
356
|
-
"border-t border-subtle px-3 py-3",
|
|
357
|
-
floating && "max-h-[60dvh] overflow-y-auto",
|
|
358
|
-
)}
|
|
353
|
+
className={cn("border-t border-subtle px-3 py-3", floating && "max-h-[60dvh] overflow-y-auto")}
|
|
359
354
|
>
|
|
360
355
|
{panel}
|
|
361
356
|
</div>
|
|
@@ -86,8 +86,7 @@ const ELEVATED_JOINED = "bg-surface shadow-lg";
|
|
|
86
86
|
// `elevated`, gapped: there is no frame, so each disc carries the shadow. Aimed at the
|
|
87
87
|
// control, not the tooltip's square wrapper span, whose shadow would be a box round a
|
|
88
88
|
// round disc.
|
|
89
|
-
const ELEVATED_GAPPED =
|
|
90
|
-
"[&>button]:shadow-md [&>a]:shadow-md [&>*>button]:shadow-md [&>*>a]:shadow-md";
|
|
89
|
+
const ELEVATED_GAPPED = "[&>button]:shadow-md [&>a]:shadow-md [&>*>button]:shadow-md [&>*>a]:shadow-md";
|
|
91
90
|
|
|
92
91
|
export interface ButtonGroupProps extends Omit<ComponentPropsWithRef<"div">, "role"> {
|
|
93
92
|
/** `horizontal` (default): side by side, in reading order. `vertical`: stacked —
|
|
@@ -28,13 +28,7 @@ import type { KitLinkComponent, KitLinkProps } from "../i18n/kit-labels";
|
|
|
28
28
|
* same look; a development build warns once per name). They are removed in 0.51, and
|
|
29
29
|
* `primary` will not come back with another meaning.
|
|
30
30
|
*/
|
|
31
|
-
export type ButtonVariant =
|
|
32
|
-
| "default"
|
|
33
|
-
| "accent"
|
|
34
|
-
| "secondary"
|
|
35
|
-
| "ghost"
|
|
36
|
-
| "danger"
|
|
37
|
-
| "link";
|
|
31
|
+
export type ButtonVariant = "default" | "accent" | "secondary" | "ghost" | "danger" | "link";
|
|
38
32
|
|
|
39
33
|
// Shared base ring for every button-styled element. Kept as a named const so the
|
|
40
34
|
// <Button> component and the {@link buttonClasses} helper draw from one source and
|
|
@@ -116,10 +110,8 @@ export const buttonVariantClasses: Record<ButtonVariant, string> = {
|
|
|
116
110
|
"border border-subtle bg-surface-2 text-primary hover:bg-active focus-visible:ring-brand",
|
|
117
111
|
secondary: `border border-subtle bg-transparent text-primary ${HOVER_INK} focus-visible:ring-brand`,
|
|
118
112
|
ghost: `bg-transparent text-primary ${HOVER_INK} focus-visible:ring-brand`,
|
|
119
|
-
danger:
|
|
120
|
-
|
|
121
|
-
accent:
|
|
122
|
-
"bg-brand text-brand-contrast hover:bg-brand-hover focus-visible:ring-brand",
|
|
113
|
+
danger: "bg-danger text-danger-contrast hover:bg-danger-hover focus-visible:ring-danger-strong",
|
|
114
|
+
accent: "bg-brand text-brand-contrast hover:bg-brand-hover focus-visible:ring-brand",
|
|
123
115
|
// A text link that is still a `<button>` — keksdose's six hand-rolled
|
|
124
116
|
// `<button className="text-brand underline">` sites ("Resend code", "Show all",
|
|
125
117
|
// "Undo" in a toast…), which act rather than navigate and so must not be anchors.
|
|
@@ -132,8 +124,7 @@ export const buttonVariantClasses: Record<ButtonVariant, string> = {
|
|
|
132
124
|
// colour-roles §13.3 decision 8): `--brand` is solved as a mark (3:1), and on More
|
|
133
125
|
// contrast's darker light well Moss's read 3.68:1; the derived dark brands sit at 3.0
|
|
134
126
|
// as text too. Both modes, since `contrast:` does not split them.
|
|
135
|
-
link:
|
|
136
|
-
"rounded-sm p-0 bg-transparent text-brand underline-offset-4 hover:underline focus-visible:ring-brand contrast:text-brand-muted",
|
|
127
|
+
link: "rounded-sm p-0 bg-transparent text-brand underline-offset-4 hover:underline focus-visible:ring-brand contrast:text-brand-muted",
|
|
137
128
|
};
|
|
138
129
|
|
|
139
130
|
/**
|
|
@@ -168,8 +159,7 @@ export type ButtonTone = "default" | "muted" | "danger";
|
|
|
168
159
|
// so tailwind-merge drops the link's `contrast:text-brand-muted` (0.36): a quiet link
|
|
169
160
|
// stays quiet under More contrast. On `ghost` it reads the same either way.
|
|
170
161
|
const BUTTON_TONES: Record<Exclude<ButtonTone, "default">, string> = {
|
|
171
|
-
muted:
|
|
172
|
-
"text-secondary hover:text-primary disabled:hover:text-secondary contrast:text-secondary",
|
|
162
|
+
muted: "text-secondary hover:text-primary disabled:hover:text-secondary contrast:text-secondary",
|
|
173
163
|
danger:
|
|
174
164
|
"text-secondary hover:text-danger focus-visible:ring-danger-strong disabled:hover:text-secondary contrast:text-secondary",
|
|
175
165
|
};
|
|
@@ -185,8 +175,7 @@ const BUTTON_BOXED_DANGER: Partial<Record<ButtonVariant, string>> = {
|
|
|
185
175
|
// IconButton's danger tone (0.33). On B′'s translucent ink `--danger` fell to 4.2:1
|
|
186
176
|
// over a light page.
|
|
187
177
|
ghost: "hover:bg-danger-soft",
|
|
188
|
-
secondary:
|
|
189
|
-
"border-danger bg-transparent text-danger hover:bg-danger-soft focus-visible:ring-danger-strong",
|
|
178
|
+
secondary: "border-danger bg-transparent text-danger hover:bg-danger-soft focus-visible:ring-danger-strong",
|
|
190
179
|
default:
|
|
191
180
|
"border-danger bg-danger-soft text-danger hover:border-[var(--danger)] hover:bg-danger hover:text-danger-contrast focus-visible:ring-danger-strong disabled:hover:border-danger disabled:hover:bg-danger-soft disabled:hover:text-danger",
|
|
192
181
|
};
|
|
@@ -319,10 +319,7 @@ function ButtonElement({
|
|
|
319
319
|
keeps an icon + text spaced as the button spaces them. */}
|
|
320
320
|
<span className="inline-flex items-center justify-center gap-[inherit] opacity-0">{children}</span>
|
|
321
321
|
{/* Decorative: `aria-busy` says it, as on FileButton. */}
|
|
322
|
-
<Spinner
|
|
323
|
-
label={null}
|
|
324
|
-
className="absolute inset-0 m-auto size-4 border-current/30 border-t-current"
|
|
325
|
-
/>
|
|
322
|
+
<Spinner label={null} className="absolute inset-0 m-auto size-4 border-current/30 border-t-current" />
|
|
326
323
|
</>
|
|
327
324
|
) : (
|
|
328
325
|
children
|