@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
|
@@ -237,49 +237,45 @@ export function FloatingActionButton({
|
|
|
237
237
|
// tooltip replaces it outright.
|
|
238
238
|
const nativeTip = !wrapped && nativeTitle && title !== "" ? (title ?? label) : undefined;
|
|
239
239
|
const button = (
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
)}
|
|
273
|
-
>
|
|
274
|
-
{icon}
|
|
275
|
-
{/* Visible words, not the name: `aria-label` already is the name, and the
|
|
240
|
+
<button
|
|
241
|
+
{...rest}
|
|
242
|
+
hidden={wrapped ? undefined : hidden}
|
|
243
|
+
ref={buttonRef}
|
|
244
|
+
type={type}
|
|
245
|
+
dir={dir}
|
|
246
|
+
aria-label={label}
|
|
247
|
+
aria-pressed={pressed ?? rest["aria-pressed"]}
|
|
248
|
+
title={nativeTip}
|
|
249
|
+
style={wrapped ? style : { ...cornerStyle(corner, offset), ...style }}
|
|
250
|
+
className={cn(
|
|
251
|
+
// Wrapped, the wrapper is the fixed thing and the button sits in it.
|
|
252
|
+
!wrapped && "fixed z-40",
|
|
253
|
+
"inline-flex items-center justify-center rounded-full",
|
|
254
|
+
extended ? "h-12 gap-2 px-4 text-sm font-medium [&_svg]:size-5" : "size-12 [&_svg]:size-6",
|
|
255
|
+
"shadow-lg transition-colors disabled:cursor-default",
|
|
256
|
+
!toggle && variant === "accent" && "bg-brand text-brand-contrast hover:bg-brand-hover",
|
|
257
|
+
!toggle &&
|
|
258
|
+
variant === "surface" &&
|
|
259
|
+
"border border-subtle bg-surface text-primary hover:bg-hover disabled:hover:bg-surface",
|
|
260
|
+
// A toggle sits on the page's surface — a solid brand disc would read as
|
|
261
|
+
// "on" in both states — and says "on" in the brand family.
|
|
262
|
+
toggle && "border border-subtle",
|
|
263
|
+
pressed === false && "bg-surface text-secondary hover:bg-hover hover:text-primary",
|
|
264
|
+
pressed === true && "border-brand bg-brand-soft text-brand hover:bg-brand-soft-hover hover:text-brand-muted",
|
|
265
|
+
"outline-none focus-visible:ring-offset-2",
|
|
266
|
+
FOCUS_RING,
|
|
267
|
+
className,
|
|
268
|
+
)}
|
|
269
|
+
>
|
|
270
|
+
{icon}
|
|
271
|
+
{/* Visible words, not the name: `aria-label` already is the name, and the
|
|
276
272
|
span would only repeat it. */}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
273
|
+
{extended && (
|
|
274
|
+
<span aria-hidden className="whitespace-nowrap">
|
|
275
|
+
{label}
|
|
276
|
+
</span>
|
|
277
|
+
)}
|
|
278
|
+
</button>
|
|
283
279
|
);
|
|
284
280
|
return (
|
|
285
281
|
<>
|
|
@@ -561,14 +557,15 @@ export function FloatingPanel({
|
|
|
561
557
|
setOpen(false);
|
|
562
558
|
}}
|
|
563
559
|
aria-label={labels.close}
|
|
564
|
-
className={cn(
|
|
560
|
+
className={cn(
|
|
561
|
+
"-me-1.5 shrink-0 rounded p-1.5 text-muted outline-none hover:bg-hover hover:text-secondary",
|
|
562
|
+
FOCUS_RING,
|
|
563
|
+
)}
|
|
565
564
|
>
|
|
566
565
|
<X aria-hidden className="size-5" />
|
|
567
566
|
</button>
|
|
568
567
|
</div>
|
|
569
|
-
<div className={cn("min-h-0 flex-1 overflow-y-auto overscroll-contain p-4", bodyClassName)}>
|
|
570
|
-
{children}
|
|
571
|
-
</div>
|
|
568
|
+
<div className={cn("min-h-0 flex-1 overflow-y-auto overscroll-contain p-4", bodyClassName)}>{children}</div>
|
|
572
569
|
</div>,
|
|
573
570
|
document.body,
|
|
574
571
|
)}
|
|
@@ -796,11 +793,7 @@ export function FloatingAction({
|
|
|
796
793
|
};
|
|
797
794
|
const { children: content, ...anchor } = linkProps;
|
|
798
795
|
const render = pickLinkRenderer(renderLink, kitLink, href);
|
|
799
|
-
member = render ?
|
|
800
|
-
<RenderedFloatingLink render={render} {...linkProps} />
|
|
801
|
-
) : (
|
|
802
|
-
<a {...anchor}>{content}</a>
|
|
803
|
-
);
|
|
796
|
+
member = render ? <RenderedFloatingLink render={render} {...linkProps} /> : <a {...anchor}>{content}</a>;
|
|
804
797
|
} else {
|
|
805
798
|
member = (
|
|
806
799
|
<button
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* card — write `focus-visible:after:ring-focus` or `has-[:focus-visible]:outline-focus`
|
|
10
10
|
* rather than spelling the width out.
|
|
11
11
|
*/
|
|
12
|
-
export const FOCUS_RING =
|
|
13
|
-
"focus-visible:outline-none focus-visible:ring-focus focus-visible:ring-brand";
|
|
12
|
+
export const FOCUS_RING = "focus-visible:outline-none focus-visible:ring-focus focus-visible:ring-brand";
|
|
14
13
|
|
|
15
14
|
/** Just the width of {@link FOCUS_RING}, for a ring in another colour (a danger control's,
|
|
16
15
|
* `--brand-contrast` on a filled button): `cn(FOCUS_RING_WIDTH, "focus-visible:ring-brand-contrast")`. */
|
|
@@ -90,9 +90,7 @@ const BREAKPOINTS = ["xl", "lg", "md", "sm"] as const;
|
|
|
90
90
|
* `base`. The queries are subscribed unconditionally (hooks cannot be skipped); a
|
|
91
91
|
* plain string ignores them. Without `matchMedia` (SSR, tests) none match, so the row
|
|
92
92
|
* renders its `base`, the phone's. The same resolution as BulkActionBar's variant. */
|
|
93
|
-
function useResolvedPlacement(
|
|
94
|
-
placement: FormActionsPlacement | ResponsiveFormActionsPlacement,
|
|
95
|
-
): FormActionsPlacement {
|
|
93
|
+
function useResolvedPlacement(placement: FormActionsPlacement | ResponsiveFormActionsPlacement): FormActionsPlacement {
|
|
96
94
|
const matches = {
|
|
97
95
|
xl: useBreakpoint("xl"),
|
|
98
96
|
lg: useBreakpoint("lg"),
|
|
@@ -328,7 +326,6 @@ export interface FormActionsProps extends Omit<ComponentPropsWithoutRef<"div">,
|
|
|
328
326
|
ref?: Ref<HTMLDivElement>;
|
|
329
327
|
}
|
|
330
328
|
|
|
331
|
-
|
|
332
329
|
/**
|
|
333
330
|
* Where {@link FormActionsProps.submitShortcut} listens: the form Save submits (named
|
|
334
331
|
* by `formId`, else the enclosing one), else the nearest dialog, else the row's parent.
|
|
@@ -2,7 +2,7 @@ import { useCallback, useId, useMemo } from "react";
|
|
|
2
2
|
import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
|
|
3
3
|
import { ChevronDown } from "lucide-react";
|
|
4
4
|
import { cn } from "../lib/cn";
|
|
5
|
-
import {
|
|
5
|
+
import { matchesSearch, searchWords } from "../lib/text-match";
|
|
6
6
|
import { ComboboxPanel, useComboboxCore, type ComboOption } from "./combobox-core";
|
|
7
7
|
import { assignRef } from "./field-parts";
|
|
8
8
|
import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
|
|
@@ -90,22 +90,27 @@ export function GroupedPicker({
|
|
|
90
90
|
// plain `toLowerCase` gets wrong), and now the accents too — "zurich" finds Zürich.
|
|
91
91
|
const locale = useKitLocale();
|
|
92
92
|
const results = useMemo(() => {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
// Every word of the query (0.51.4): all in the group's name keeps the whole group;
|
|
94
|
+
// otherwise an item stays when each word is in its label or its group's name, so
|
|
95
|
+
// "migros 8004" finds Migros' 8004 shop.
|
|
96
|
+
const words = searchWords(query, locale);
|
|
97
|
+
const kept =
|
|
98
|
+
words.length > 0
|
|
99
|
+
? groups
|
|
100
|
+
.map((g) =>
|
|
101
|
+
matchesSearch(words, [g.label], locale)
|
|
102
|
+
? g
|
|
103
|
+
: { ...g, items: g.items.filter((i) => matchesSearch(words, [g.label, i.label], locale)) },
|
|
104
|
+
)
|
|
105
|
+
.filter((g) => g.items.length > 0)
|
|
106
|
+
: groups;
|
|
100
107
|
return kept.flatMap((g) =>
|
|
101
|
-
g.items.map(
|
|
102
|
-
(item)
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}),
|
|
108
|
-
),
|
|
108
|
+
g.items.map((item): ComboOption<string> => ({
|
|
109
|
+
value: itemValue(g.key, item.key),
|
|
110
|
+
label: item.label,
|
|
111
|
+
icon: item.icon,
|
|
112
|
+
group: g.label,
|
|
113
|
+
})),
|
|
109
114
|
);
|
|
110
115
|
}, [groups, query, locale]);
|
|
111
116
|
// Back to keys for `onSelect`, by the value the row carries.
|
|
@@ -310,10 +310,7 @@ export function HoverMenu({
|
|
|
310
310
|
{open && (
|
|
311
311
|
<div
|
|
312
312
|
ref={panelRef}
|
|
313
|
-
className={cn(
|
|
314
|
-
"absolute top-full z-40 pt-2",
|
|
315
|
-
ALIGN_CLASS[align],
|
|
316
|
-
)}
|
|
313
|
+
className={cn("absolute top-full z-40 pt-2", ALIGN_CLASS[align])}
|
|
317
314
|
style={shiftX ? { transform: `translateX(${shiftX}px)` } : undefined}
|
|
318
315
|
>
|
|
319
316
|
<div
|
|
@@ -7,8 +7,7 @@ import type { IbanInputLabels } from "./iban-input";
|
|
|
7
7
|
export const DEFAULT_IBAN_INPUT_LABELS: IbanInputLabels = {
|
|
8
8
|
format: "An IBAN starts with a two-letter country code and two check digits.",
|
|
9
9
|
country: (code) => `“${code}” is not the country code of an IBAN.`,
|
|
10
|
-
length: (actual, expected) =>
|
|
11
|
-
`An IBAN from this country has ${expected} characters — this one has ${actual}.`,
|
|
10
|
+
length: (actual, expected) => `An IBAN from this country has ${expected} characters — this one has ${actual}.`,
|
|
12
11
|
checksum: "The check digits don’t match — a character is probably mistyped.",
|
|
13
12
|
qrRequired: "This is a regular IBAN. A QR-bill needs the account’s QR-IBAN.",
|
|
14
13
|
qrNotAllowed: "This is a QR-IBAN, which only receives QR-bill payments. Enter the account’s regular IBAN.",
|
|
@@ -139,25 +139,21 @@ type ColouredTone = "danger" | "warning" | "info" | "success" | "custom";
|
|
|
139
139
|
|
|
140
140
|
const ICON_BUTTON_TONES: Record<ColouredTone, { quiet: string; toned: string }> = {
|
|
141
141
|
danger: {
|
|
142
|
-
quiet:
|
|
143
|
-
"text-placeholder hover:bg-danger-soft hover:text-danger focus-visible:ring-danger-strong",
|
|
142
|
+
quiet: "text-placeholder hover:bg-danger-soft hover:text-danger focus-visible:ring-danger-strong",
|
|
144
143
|
toned: "text-danger hover:bg-danger-soft focus-visible:ring-danger-strong",
|
|
145
144
|
},
|
|
146
145
|
warning: {
|
|
147
|
-
quiet:
|
|
148
|
-
"text-placeholder hover:bg-warning-soft hover:text-warning focus-visible:ring-warning-strong",
|
|
146
|
+
quiet: "text-placeholder hover:bg-warning-soft hover:text-warning focus-visible:ring-warning-strong",
|
|
149
147
|
// The ring is warning's loud line (0.33, k27): `--warning-border`, amber-300, was a
|
|
150
148
|
// focus ring at 1.1:1 on the light surfaces.
|
|
151
149
|
toned: "text-warning hover:bg-warning-soft focus-visible:ring-warning-strong",
|
|
152
150
|
},
|
|
153
151
|
info: {
|
|
154
|
-
quiet:
|
|
155
|
-
"text-placeholder hover:bg-info-soft hover:text-info focus-visible:ring-[var(--info-border)]",
|
|
152
|
+
quiet: "text-placeholder hover:bg-info-soft hover:text-info focus-visible:ring-[var(--info-border)]",
|
|
156
153
|
toned: "text-info hover:bg-info-soft focus-visible:ring-[var(--info-border)]",
|
|
157
154
|
},
|
|
158
155
|
success: {
|
|
159
|
-
quiet:
|
|
160
|
-
"text-placeholder hover:bg-success-soft hover:text-success focus-visible:ring-[var(--success-border)]",
|
|
156
|
+
quiet: "text-placeholder hover:bg-success-soft hover:text-success focus-visible:ring-[var(--success-border)]",
|
|
161
157
|
toned: "text-success hover:bg-success-soft focus-visible:ring-[var(--success-border)]",
|
|
162
158
|
},
|
|
163
159
|
// The hover fill and the ring are MIXED from the one colour, since a custom tone
|
|
@@ -520,7 +516,8 @@ export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>
|
|
|
520
516
|
* that explains why it cannot be followed is a job for a disabled BUTTON.
|
|
521
517
|
*/
|
|
522
518
|
export interface IconButtonLinkProps
|
|
523
|
-
extends
|
|
519
|
+
extends
|
|
520
|
+
Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "type" | "href">,
|
|
524
521
|
Pick<
|
|
525
522
|
IconButtonProps,
|
|
526
523
|
| "variant"
|
|
@@ -636,7 +633,10 @@ function iconButtonLook({
|
|
|
636
633
|
return cn(
|
|
637
634
|
ICON_BUTTON_BASE,
|
|
638
635
|
withText
|
|
639
|
-
? cn(
|
|
636
|
+
? cn(
|
|
637
|
+
"font-medium whitespace-nowrap",
|
|
638
|
+
stretch ? ICON_BUTTON_TEXT_STRETCH_SIZES[size] : ICON_BUTTON_TEXT_SIZES[size],
|
|
639
|
+
)
|
|
640
640
|
: stretch
|
|
641
641
|
? ICON_BUTTON_STRETCH_SIZES[size]
|
|
642
642
|
: ICON_BUTTON_SIZES[size],
|
|
@@ -822,44 +822,42 @@ function IconButtonLink({
|
|
|
822
822
|
);
|
|
823
823
|
}
|
|
824
824
|
|
|
825
|
-
function IconButtonElement(
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
}: IconButtonProps,
|
|
862
|
-
) {
|
|
825
|
+
function IconButtonElement({
|
|
826
|
+
variant = "ghost",
|
|
827
|
+
size = "md",
|
|
828
|
+
tone: toneProp,
|
|
829
|
+
quiet,
|
|
830
|
+
pressed,
|
|
831
|
+
stopPropagation,
|
|
832
|
+
stretch,
|
|
833
|
+
shape = "square",
|
|
834
|
+
toneColor,
|
|
835
|
+
label,
|
|
836
|
+
labelVisible,
|
|
837
|
+
tooltip = true,
|
|
838
|
+
tooltipSide,
|
|
839
|
+
tooltipPortal,
|
|
840
|
+
tooltipLazy = true,
|
|
841
|
+
disabledReason: ownDisabledReason,
|
|
842
|
+
disabledReasonDisplay,
|
|
843
|
+
commit,
|
|
844
|
+
pending,
|
|
845
|
+
glyphSize,
|
|
846
|
+
badge,
|
|
847
|
+
disabledStyle = "dim",
|
|
848
|
+
className,
|
|
849
|
+
style,
|
|
850
|
+
onClick,
|
|
851
|
+
onKeyDown,
|
|
852
|
+
children,
|
|
853
|
+
href: _href,
|
|
854
|
+
renderLink: _renderLink,
|
|
855
|
+
external: _external,
|
|
856
|
+
replace: _replace,
|
|
857
|
+
reloadDocument: _reloadDocument,
|
|
858
|
+
ref,
|
|
859
|
+
...rest
|
|
860
|
+
}: IconButtonProps) {
|
|
863
861
|
const tone = toneProp ?? (toneColor !== undefined ? "custom" : "default");
|
|
864
862
|
const keep = disabledStyle === "keep";
|
|
865
863
|
const withText = useIconButtonText(label, labelVisible, variant, tooltip);
|
|
@@ -6,7 +6,7 @@ import { SearchField } from "./search-field";
|
|
|
6
6
|
import { TILE_SIZE, TileRadioGroup } from "./tile-radio";
|
|
7
7
|
import type { TileItem, TileSize } from "./tile-radio";
|
|
8
8
|
import { hasContent } from "../lib/presence";
|
|
9
|
-
import {
|
|
9
|
+
import { matchesSearch, searchWords } from "../lib/text-match";
|
|
10
10
|
import { LabelStrip, useFieldMessages, type FieldHelpProps } from "./field-parts";
|
|
11
11
|
import { DEFAULT_ICON_PICKER_LABELS } from "./icon-picker-labels";
|
|
12
12
|
|
|
@@ -52,8 +52,7 @@ export interface IconOption<T extends string> {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
export interface IconPickerProps<T extends string>
|
|
55
|
-
extends Omit<ComponentPropsWithRef<"div">, "onChange" | "children" | "defaultValue">,
|
|
56
|
-
FieldHelpProps {
|
|
55
|
+
extends Omit<ComponentPropsWithRef<"div">, "onChange" | "children" | "defaultValue">, FieldHelpProps {
|
|
57
56
|
options: IconOption<T>[];
|
|
58
57
|
/** The chosen icon, or `null` for none. */
|
|
59
58
|
value: T | null;
|
|
@@ -147,16 +146,13 @@ export function IconPicker<T extends string>({
|
|
|
147
146
|
});
|
|
148
147
|
const [query, setQuery] = useState("");
|
|
149
148
|
// Case- and accent-insensitive, so "cafe" finds "Café" — every kit list's fold (DUP-5).
|
|
150
|
-
|
|
149
|
+
// Every word of the query, in the label or a keyword (0.51.4).
|
|
150
|
+
const words = useMemo(() => searchWords(query, locale), [query, locale]);
|
|
151
|
+
const needle = words.length > 0;
|
|
151
152
|
|
|
152
153
|
const visible = useMemo(
|
|
153
|
-
() =>
|
|
154
|
-
|
|
155
|
-
? options.filter((o) =>
|
|
156
|
-
[o.label, ...(o.keywords ?? [])].some((w) => foldForSearch(w, locale).includes(needle)),
|
|
157
|
-
)
|
|
158
|
-
: options,
|
|
159
|
-
[options, needle, locale],
|
|
154
|
+
() => (needle ? options.filter((o) => matchesSearch(words, [o.label, ...(o.keywords ?? [])], locale)) : options),
|
|
155
|
+
[options, needle, words, locale],
|
|
160
156
|
);
|
|
161
157
|
const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);
|
|
162
158
|
const items: TileItem<T>[] = [
|
|
@@ -207,17 +203,10 @@ export function IconPicker<T extends string>({
|
|
|
207
203
|
const Icon = item.key === null ? undefined : byValue.get(item.key)?.icon;
|
|
208
204
|
return Icon ? <Icon aria-hidden className={TILE_SIZE[size].glyph} /> : null;
|
|
209
205
|
}}
|
|
210
|
-
tileClassName={(_item, selected) =>
|
|
211
|
-
cn(
|
|
212
|
-
selected ? "text-primary" : "text-secondary",
|
|
213
|
-
tileClassName,
|
|
214
|
-
)
|
|
215
|
-
}
|
|
206
|
+
tileClassName={(_item, selected) => cn(selected ? "text-primary" : "text-secondary", tileClassName)}
|
|
216
207
|
/>
|
|
217
208
|
</div>
|
|
218
|
-
{needle && visible.length === 0 &&
|
|
219
|
-
<p className="text-xs text-muted">{text.noResults}</p>
|
|
220
|
-
)}
|
|
209
|
+
{needle && visible.length === 0 && <p className="text-xs text-muted">{text.noResults}</p>}
|
|
221
210
|
{mixed && (
|
|
222
211
|
<span id={mixedId} hidden>
|
|
223
212
|
{text.mixed}
|
|
@@ -119,12 +119,7 @@ export function ImageGrid({
|
|
|
119
119
|
|
|
120
120
|
return (
|
|
121
121
|
<>
|
|
122
|
-
<ul
|
|
123
|
-
aria-label={labels.list}
|
|
124
|
-
{...rest}
|
|
125
|
-
className={cn("grid gap-2", className)}
|
|
126
|
-
style={gridStyle}
|
|
127
|
-
>
|
|
122
|
+
<ul aria-label={labels.list} {...rest} className={cn("grid gap-2", className)} style={gridStyle}>
|
|
128
123
|
{items.map((item, i) => {
|
|
129
124
|
const name = item.alt || labels.item(i + 1, count);
|
|
130
125
|
const kind = imageItemKind(item);
|
|
@@ -423,11 +423,7 @@ export function InlineEditField<T = string>(props: InlineEditFieldProps<T>) {
|
|
|
423
423
|
|
|
424
424
|
const private_ = redact ? { "data-private": true } : undefined;
|
|
425
425
|
const shown = display ? display(value) : value === null || value === undefined ? "" : String(value);
|
|
426
|
-
const content = hasContent(shown) ?
|
|
427
|
-
shown
|
|
428
|
-
) : (
|
|
429
|
-
<span className="text-muted">{placeholder ?? labels.empty}</span>
|
|
430
|
-
);
|
|
426
|
+
const content = hasContent(shown) ? shown : <span className="text-muted">{placeholder ?? labels.empty}</span>;
|
|
431
427
|
const alignClass = align === "end" ? "text-end" : "text-start";
|
|
432
428
|
|
|
433
429
|
let body: ReactNode;
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
type ComboOption,
|
|
25
25
|
} from "./combobox-core";
|
|
26
26
|
import { DEFAULT_COMBOBOX_LABELS, useKitLabels, useKitLocale } from "../i18n/kit-labels";
|
|
27
|
-
import {
|
|
27
|
+
import { matchesSearch, rankMatch, searchWords } from "../lib/text-match";
|
|
28
28
|
import {
|
|
29
29
|
EndHintRow,
|
|
30
30
|
FieldCaption,
|
|
@@ -50,8 +50,7 @@ const CREATE_ROW_CLASS = "flex items-center gap-2 font-medium text-brand";
|
|
|
50
50
|
/** `id` is the INPUT's and `onChange` is the field's — see {@link ComboboxProps}
|
|
51
51
|
* for why the div's spellings of them are omitted. */
|
|
52
52
|
export interface InlineEntityComboboxProps<V extends string | number, C extends ComboClearValue = null>
|
|
53
|
-
extends Omit<ComponentPropsWithoutRef<"div">, "id" | "onChange">,
|
|
54
|
-
FieldHelpProps {
|
|
53
|
+
extends Omit<ComponentPropsWithoutRef<"div">, "id" | "onChange">, FieldHelpProps {
|
|
55
54
|
/** Selected option id; `null` or `clearValue` when nothing is selected. */
|
|
56
55
|
value: V | C | null;
|
|
57
56
|
/** Required and unanswered — see {@link Combobox}'s `invalid`. */
|
|
@@ -311,8 +310,9 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
311
310
|
const matches = useMemo(() => {
|
|
312
311
|
let ranked = options;
|
|
313
312
|
if (query) {
|
|
314
|
-
|
|
315
|
-
const
|
|
313
|
+
// Every word of the query, in the label or the sublabel (0.51.4).
|
|
314
|
+
const words = searchWords(query, locale);
|
|
315
|
+
const hit = (o: ComboOption<V>) => matchesSearch(words, [o.label, o.sublabel], locale);
|
|
316
316
|
// The label's whole name or its start first (`rankMatch` 0 and 1), then a match
|
|
317
317
|
// anywhere in the label or the sublabel. Not the group (0.40, kk run 79): with
|
|
318
318
|
// first-letter groups one typed letter matched its whole group.
|
|
@@ -321,7 +321,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
321
321
|
return rank === 0 || rank === 1;
|
|
322
322
|
};
|
|
323
323
|
const starts = options.filter(leads);
|
|
324
|
-
const rest = options.filter((o) => !leads(o) &&
|
|
324
|
+
const rest = options.filter((o) => !leads(o) && hit(o));
|
|
325
325
|
ranked = [...starts, ...rest];
|
|
326
326
|
}
|
|
327
327
|
if (!ranked.some((o) => o.group)) return ranked;
|
|
@@ -357,9 +357,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
357
357
|
const createText = createQuery ? labels.create(createQuery) : createEmptyLabel;
|
|
358
358
|
// Every row the keyboard can land on: the options, then the create row — passed over
|
|
359
359
|
// like a disabled option while a write lock holds it.
|
|
360
|
-
const rows: readonly { disabled?: boolean }[] = showCreate
|
|
361
|
-
? [...matches, { disabled: createLocked }]
|
|
362
|
-
: matches;
|
|
360
|
+
const rows: readonly { disabled?: boolean }[] = showCreate ? [...matches, { disabled: createLocked }] : matches;
|
|
363
361
|
const createIndex = matches.length;
|
|
364
362
|
|
|
365
363
|
// Pointer-device only: the phone's rows live in a {@link PickerSheet} whose own
|
|
@@ -413,9 +411,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
413
411
|
} else {
|
|
414
412
|
// A disabled option's label typed out in full is not a way round `disabled`:
|
|
415
413
|
// it is not a hit, so the text reverts like any other non-answer.
|
|
416
|
-
const hits = options.filter(
|
|
417
|
-
(o) => !o.disabled && o.label.toLowerCase() === q.toLowerCase(),
|
|
418
|
-
);
|
|
414
|
+
const hits = options.filter((o) => !o.disabled && o.label.toLowerCase() === q.toLowerCase());
|
|
419
415
|
const ids = new Set(hits.map((h) => h.value));
|
|
420
416
|
if (ids.size === 1 && hits[0].value !== value) onChange(hits[0].value);
|
|
421
417
|
}
|
|
@@ -434,9 +430,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
434
430
|
<span className="min-w-0 flex-1">
|
|
435
431
|
<span className="block truncate-until-large">{createText}</span>
|
|
436
432
|
{createLocked && (
|
|
437
|
-
<span className="block truncate-until-large text-xs font-normal text-placeholder">
|
|
438
|
-
{createReason}
|
|
439
|
-
</span>
|
|
433
|
+
<span className="block truncate-until-large text-xs font-normal text-placeholder">{createReason}</span>
|
|
440
434
|
)}
|
|
441
435
|
</span>
|
|
442
436
|
</>
|
|
@@ -701,11 +695,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
701
695
|
aria-selected={false}
|
|
702
696
|
aria-disabled={createLocked || undefined}
|
|
703
697
|
onClick={create}
|
|
704
|
-
className={cn(
|
|
705
|
-
SHEET_ROW_CLASS,
|
|
706
|
-
CREATE_ROW_CLASS,
|
|
707
|
-
createLocked && DISABLED_ROW_CLASS,
|
|
708
|
-
)}
|
|
698
|
+
className={cn(SHEET_ROW_CLASS, CREATE_ROW_CLASS, createLocked && DISABLED_ROW_CLASS)}
|
|
709
699
|
>
|
|
710
700
|
{createRowContent}
|
|
711
701
|
</button>
|
|
@@ -771,11 +761,7 @@ export function InlineEntityCombobox<V extends string | number, C extends ComboC
|
|
|
771
761
|
)}
|
|
772
762
|
>
|
|
773
763
|
{o.label}
|
|
774
|
-
{o.sublabel &&
|
|
775
|
-
<span className="ms-2 text-xs text-placeholder">
|
|
776
|
-
{o.sublabel}
|
|
777
|
-
</span>
|
|
778
|
-
)}
|
|
764
|
+
{o.sublabel && <span className="ms-2 text-xs text-placeholder">{o.sublabel}</span>}
|
|
779
765
|
</button>
|
|
780
766
|
</li>
|
|
781
767
|
</Fragment>
|
package/src/components/input.tsx
CHANGED
|
@@ -299,7 +299,13 @@ export function Input(props: InputProps) {
|
|
|
299
299
|
aria-describedby={describedBy}
|
|
300
300
|
onClick={handleClick}
|
|
301
301
|
onChange={onChange}
|
|
302
|
-
className={cn(
|
|
302
|
+
className={cn(
|
|
303
|
+
FIELD_BASE,
|
|
304
|
+
ownClass,
|
|
305
|
+
inputClassName,
|
|
306
|
+
isInvalid && FIELD_INVALID,
|
|
307
|
+
locked && "cursor-not-allowed",
|
|
308
|
+
)}
|
|
303
309
|
/>
|
|
304
310
|
</EndHintRow>,
|
|
305
311
|
)}
|
|
@@ -321,7 +327,13 @@ export function Input(props: InputProps) {
|
|
|
321
327
|
aria-invalid={isInvalid || rest["aria-invalid"] || undefined}
|
|
322
328
|
aria-describedby={describedBy}
|
|
323
329
|
onChange={onChange}
|
|
324
|
-
className={cn(
|
|
330
|
+
className={cn(
|
|
331
|
+
FIELD_BASE,
|
|
332
|
+
"pe-9",
|
|
333
|
+
inputClassName,
|
|
334
|
+
isInvalid && FIELD_INVALID,
|
|
335
|
+
locked && "cursor-not-allowed",
|
|
336
|
+
)}
|
|
325
337
|
/>
|
|
326
338
|
{revealToggle}
|
|
327
339
|
</div>
|
|
@@ -19,8 +19,7 @@ import { claimEscape } from "../hooks/use-dismiss";
|
|
|
19
19
|
/** A "YYYY-MM" key as a count of months, and back: month arithmetic with no `Date`
|
|
20
20
|
* rollover to step around. */
|
|
21
21
|
const monthIndex = (key: string) => Number(key.slice(0, 4)) * 12 + Number(key.slice(5, 7)) - 1;
|
|
22
|
-
const keyOfIndex = (index: number) =>
|
|
23
|
-
`${String(Math.floor(index / 12)).padStart(4, "0")}-${pad((index % 12) + 1)}`;
|
|
22
|
+
const keyOfIndex = (index: number) => `${String(Math.floor(index / 12)).padStart(4, "0")}-${pad((index % 12) + 1)}`;
|
|
24
23
|
const shiftKey = (key: string, delta: number) => keyOfIndex(monthIndex(key) + delta);
|
|
25
24
|
/** The 1st of a "YYYY-MM" month, for `Intl` to name. */
|
|
26
25
|
const firstOfKey = (key: string) => new Date(Number(key.slice(0, 4)), Number(key.slice(5, 7)) - 1, 1);
|
|
@@ -287,10 +286,7 @@ function JumpCalendar({
|
|
|
287
286
|
<span id={captionId} aria-live="polite" className="truncate">
|
|
288
287
|
{caption}
|
|
289
288
|
</span>
|
|
290
|
-
<ChevronDown
|
|
291
|
-
aria-hidden
|
|
292
|
-
className={cn("size-3.5 shrink-0 text-muted", !inDays && "rotate-180")}
|
|
293
|
-
/>
|
|
289
|
+
<ChevronDown aria-hidden className={cn("size-3.5 shrink-0 text-muted", !inDays && "rotate-180")} />
|
|
294
290
|
</button>
|
|
295
291
|
<button
|
|
296
292
|
type="button"
|
|
@@ -10,6 +10,8 @@ export const DEFAULT_LEGAL_LABELS: LegalLabels = {
|
|
|
10
10
|
impressum: "Imprint",
|
|
11
11
|
privacy: "Privacy Policy",
|
|
12
12
|
terms: "Terms",
|
|
13
|
+
security: "Security",
|
|
14
|
+
accessibility: "Accessibility",
|
|
13
15
|
},
|
|
14
16
|
titles: {
|
|
15
17
|
impressum: "Imprint",
|
|
@@ -24,11 +26,14 @@ export const DEFAULT_LEGAL_LABELS: LegalLabels = {
|
|
|
24
26
|
"Closed beta. The legal wording below has not been reviewed by a lawyer yet and will be before a public launch. The technical descriptions — what is stored, where, and who can read it — describe what the software actually does today, and are meant to be checked against it.",
|
|
25
27
|
},
|
|
26
28
|
translation: {
|
|
27
|
-
note: (o) =>
|
|
28
|
-
`This is a translation for your convenience. The ${o.bindingLanguage} version is binding.`,
|
|
29
|
+
note: (o) => `This is a translation for your convenience. The ${o.bindingLanguage} version is binding.`,
|
|
29
30
|
show: (o) => `Show the ${o.bindingLanguage} version`,
|
|
30
31
|
},
|
|
31
32
|
updated: (date) => `Last updated: ${date}`,
|
|
33
|
+
summary: {
|
|
34
|
+
title: "In short",
|
|
35
|
+
note: "This summary is for orientation; only the full text is binding.",
|
|
36
|
+
},
|
|
32
37
|
sections: {
|
|
33
38
|
impressum: {
|
|
34
39
|
operator: {
|
|
@@ -83,7 +88,7 @@ export const DEFAULT_LEGAL_LABELS: LegalLabels = {
|
|
|
83
88
|
},
|
|
84
89
|
changes: {
|
|
85
90
|
title: "Changes to these terms",
|
|
86
|
-
body: "We may update these terms as the service evolves. We announce a material change at least 30 days before it takes effect, by email and in the app, together with the new text. If you do not agree, you can object or delete your account before that date, and you can export your data until then. If you keep using the service after that date, the changed terms apply.",
|
|
91
|
+
body: "We may update these terms as the service evolves. We announce a material change at least 30 days before it takes effect, by email and in the app, together with the new text. If you do not agree, you can object or delete your account before that date, and you can export your data until then. If you keep using the service after that date, the changed terms apply. Changes that only benefit you, or that the law requires, apply without this notice and cannot be objected to. If you object to a change, we may end your account on the date it takes effect. If you have paid for a period that runs beyond that date, we refund the unused part.",
|
|
87
92
|
},
|
|
88
93
|
language: {
|
|
89
94
|
title: "Language",
|