@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
|
@@ -52,7 +52,13 @@ export interface AdminToolLinksProps {
|
|
|
52
52
|
*
|
|
53
53
|
* With no visible link it renders nothing.
|
|
54
54
|
*/
|
|
55
|
-
export function AdminToolLinks({
|
|
55
|
+
export function AdminToolLinks({
|
|
56
|
+
links,
|
|
57
|
+
variant = "sidebar",
|
|
58
|
+
renderLink,
|
|
59
|
+
labels: labelsProp,
|
|
60
|
+
className,
|
|
61
|
+
}: AdminToolLinksProps) {
|
|
56
62
|
const labels = useAdminAreaLabels(labelsProp);
|
|
57
63
|
const headingId = useId();
|
|
58
64
|
const shown = links.filter((l) => l.visible !== false);
|
|
@@ -241,9 +241,7 @@ export function InvitationsPanel<R extends string = string>({
|
|
|
241
241
|
const [invalid, setInvalid] = useState(false);
|
|
242
242
|
const [role, setRole] = useState<R | undefined>(defaultRole ?? offered[0]);
|
|
243
243
|
const [scope, setScope] = useState("");
|
|
244
|
-
const [locale, setLocale] = useState<KitLanguageCode>(() =>
|
|
245
|
-
resolveLanguage([defaultLocale, kitLocale], languages),
|
|
246
|
-
);
|
|
244
|
+
const [locale, setLocale] = useState<KitLanguageCode>(() => resolveLanguage([defaultLocale, kitLocale], languages));
|
|
247
245
|
const [note, setNote] = useState("");
|
|
248
246
|
// One request at a time, for the whole panel; the key says which control spins.
|
|
249
247
|
const [busy, setBusy] = useState<string | null>(null);
|
|
@@ -341,13 +339,7 @@ export function InvitationsPanel<R extends string = string>({
|
|
|
341
339
|
}}
|
|
342
340
|
/>
|
|
343
341
|
{choosesRole && (
|
|
344
|
-
<RoleSelect<R>
|
|
345
|
-
label={labels.role}
|
|
346
|
-
value={role}
|
|
347
|
-
roles={roles}
|
|
348
|
-
offered={offered}
|
|
349
|
-
onChange={setRole}
|
|
350
|
-
/>
|
|
342
|
+
<RoleSelect<R> label={labels.role} value={role} roles={roles} offered={offered} onChange={setRole} />
|
|
351
343
|
)}
|
|
352
344
|
{scopes && scopes.length > 0 && (
|
|
353
345
|
<Select
|
|
@@ -433,7 +425,9 @@ export function InvitationsPanel<R extends string = string>({
|
|
|
433
425
|
typeof invitation.invited_by === "string" ? invitation.invited_by : nameOf(invitation.invited_by);
|
|
434
426
|
const facts = [
|
|
435
427
|
dayText(invitation.created_at) && labels.sent(dayText(invitation.created_at)),
|
|
436
|
-
open &&
|
|
428
|
+
open &&
|
|
429
|
+
dayText(invitation.expires_at ?? null) &&
|
|
430
|
+
labels.expires(dayText(invitation.expires_at ?? null)),
|
|
437
431
|
by && labels.invitedBy(by),
|
|
438
432
|
].filter(Boolean);
|
|
439
433
|
return (
|
|
@@ -52,8 +52,7 @@ export interface MailTestAnswer {
|
|
|
52
52
|
/** The card's default DOM id: its catalogue entry's `anchor`, the `?focus=` target. */
|
|
53
53
|
export const MAIL_TEST_ANCHOR = "admin-mail-test";
|
|
54
54
|
|
|
55
|
-
export interface MailTestCardProps
|
|
56
|
-
extends Omit<SettingsSectionProps, "anchor" | "title" | "description" | "children"> {
|
|
55
|
+
export interface MailTestCardProps extends Omit<SettingsSectionProps, "anchor" | "title" | "description" | "children"> {
|
|
57
56
|
/** The installation's transport, as the admin page has it (`mail_backend`): the chip
|
|
58
57
|
* before a send. After one, the answer's. Optional (0.46): without it the chip shows
|
|
59
58
|
* from the first answer on, and an app needs no query only for the chip. */
|
|
@@ -140,8 +140,9 @@ export function ReviewerScopeEditor({
|
|
|
140
140
|
labels: labelsProp,
|
|
141
141
|
}: ReviewerScopeEditorProps) {
|
|
142
142
|
const labels = useKitLabels("reviewerScope", DEFAULT_REVIEWER_SCOPE_LABELS, labelsProp);
|
|
143
|
-
const areaOptions: readonly ReviewerScopeArea[] =
|
|
144
|
-
|
|
143
|
+
const areaOptions: readonly ReviewerScopeArea[] = areasProp ?? [
|
|
144
|
+
{ value: "legal", label: labels.legalOnly, hint: labels.legalOnlyHint },
|
|
145
|
+
];
|
|
145
146
|
const savedLocales = [...(value.locales ?? [])];
|
|
146
147
|
const savedAreas = [...(value.areas ?? [])];
|
|
147
148
|
const [locales, setLocales] = useState<string[]>(savedLocales);
|
|
@@ -216,13 +217,7 @@ export function ReviewerScopeEditor({
|
|
|
216
217
|
{locked ? (
|
|
217
218
|
<Caption>{disabledReason}</Caption>
|
|
218
219
|
) : (
|
|
219
|
-
<FormActions
|
|
220
|
-
onSubmit={save}
|
|
221
|
-
onCancel={onCancel}
|
|
222
|
-
pending={pending}
|
|
223
|
-
submitDisabled={!dirty}
|
|
224
|
-
commit={commit}
|
|
225
|
-
/>
|
|
220
|
+
<FormActions onSubmit={save} onCancel={onCancel} pending={pending} submitDisabled={!dirty} commit={commit} />
|
|
226
221
|
)}
|
|
227
222
|
</div>
|
|
228
223
|
);
|
|
@@ -85,8 +85,10 @@ function keysOf<R extends string>(roles: RoleVocabulary<R>): R[] {
|
|
|
85
85
|
|
|
86
86
|
/* ── RoleSelect ─────────────────────────────────────────────────────────────── */
|
|
87
87
|
|
|
88
|
-
export interface RoleSelectProps<R extends string = string>
|
|
89
|
-
|
|
88
|
+
export interface RoleSelectProps<R extends string = string> extends Omit<
|
|
89
|
+
SelectProps,
|
|
90
|
+
"value" | "defaultValue" | "onChange" | "children" | "multiple" | "disabledReason"
|
|
91
|
+
> {
|
|
90
92
|
/** The role the server has. Controlled: a pick does not move the select until the
|
|
91
93
|
* app's request lands and the row comes back with the new role. */
|
|
92
94
|
value: R | null | undefined;
|
|
@@ -81,9 +81,7 @@ export interface AdminUserStateFields {
|
|
|
81
81
|
|
|
82
82
|
/** One state chip of a row: an {@link AccountState}, or one with its `date` (the
|
|
83
83
|
* `deletion` day), a `tone` or the app's own words. */
|
|
84
|
-
export type RosterState =
|
|
85
|
-
| AccountState
|
|
86
|
-
| { state: AccountState; date?: DateInput; tone?: ChipTone; label?: ReactNode };
|
|
84
|
+
export type RosterState = AccountState | { state: AccountState; date?: DateInput; tone?: ChipTone; label?: ReactNode };
|
|
87
85
|
|
|
88
86
|
/**
|
|
89
87
|
* The contract's row as state chips (§3.2: "map 1:1 to the kit's AccountStateChip"):
|
|
@@ -234,14 +232,7 @@ export interface UserRowActionsProps {
|
|
|
234
232
|
*/
|
|
235
233
|
export function UserRowActions({ actions, name, labels: labelsProp }: UserRowActionsProps) {
|
|
236
234
|
const labels = useKitLabels("userRoster", DEFAULT_USER_ROSTER_LABELS, labelsProp);
|
|
237
|
-
return
|
|
238
|
-
<RowActions
|
|
239
|
-
actions={actions}
|
|
240
|
-
name={name}
|
|
241
|
-
collapse="menu"
|
|
242
|
-
labels={{ actionsFor: labels.actionsFor }}
|
|
243
|
-
/>
|
|
244
|
-
);
|
|
235
|
+
return <RowActions actions={actions} name={name} collapse="menu" labels={{ actionsFor: labels.actionsFor }} />;
|
|
245
236
|
}
|
|
246
237
|
|
|
247
238
|
/* ── The preset ─────────────────────────────────────────────────────────────── */
|
|
@@ -139,13 +139,7 @@ export function AcceptInvitation({
|
|
|
139
139
|
});
|
|
140
140
|
|
|
141
141
|
const outcome: Outcome | "accepting" =
|
|
142
|
-
token === ""
|
|
143
|
-
? "invalid"
|
|
144
|
-
: settled?.token === token
|
|
145
|
-
? settled.outcome
|
|
146
|
-
: signedIn
|
|
147
|
-
? "accepting"
|
|
148
|
-
: "signIn";
|
|
142
|
+
token === "" ? "invalid" : settled?.token === token ? settled.outcome : signedIn ? "accepting" : "signIn";
|
|
149
143
|
|
|
150
144
|
const continueButton = (variant: "accent" | "secondary") => (
|
|
151
145
|
<Button href={continueHref} replace variant={variant}>
|
package/src/auth/auth-errors.ts
CHANGED
|
@@ -84,12 +84,7 @@ export type AccountErrorCode =
|
|
|
84
84
|
* mail, uploads, the account export (§6.4).
|
|
85
85
|
*/
|
|
86
86
|
export type DemoErrorCode =
|
|
87
|
-
| "
|
|
88
|
-
| "demo_rate_limited"
|
|
89
|
-
| "demo_capacity"
|
|
90
|
-
| "demo_not_ready"
|
|
91
|
-
| "demo_read_only"
|
|
92
|
-
| "demo_refused";
|
|
87
|
+
"demo_disabled" | "demo_rate_limited" | "demo_capacity" | "demo_not_ready" | "demo_read_only" | "demo_refused";
|
|
93
88
|
|
|
94
89
|
/**
|
|
95
90
|
* 0.32.0: billing's coded refusals (docs/billing-harmonization.md §3.3, §3.4, §4, §12.3) —
|
|
@@ -45,8 +45,7 @@ export { DEFAULT_FORGOT_PASSWORD_LABELS };
|
|
|
45
45
|
|
|
46
46
|
/* ── The form ────────────────────────────────────────────────────────────── */
|
|
47
47
|
|
|
48
|
-
export interface ForgotPasswordFormProps
|
|
49
|
-
extends Omit<ComponentPropsWithRef<"div">, "onSubmit" | "children" | "title"> {
|
|
48
|
+
export interface ForgotPasswordFormProps extends Omit<ComponentPropsWithRef<"div">, "onSubmit" | "children" | "title"> {
|
|
50
49
|
/**
|
|
51
50
|
* The address was submitted, trimmed: send `POST /auth/password-reset/request`.
|
|
52
51
|
* Resolve when the server answered — whatever it answered: it is `204` whether or not
|
|
@@ -185,11 +184,7 @@ export function ForgotPasswordForm({
|
|
|
185
184
|
|
|
186
185
|
return (
|
|
187
186
|
<div {...rest} data-state="form" className={cn("space-y-3", className)}>
|
|
188
|
-
<form
|
|
189
|
-
className="space-y-3"
|
|
190
|
-
aria-labelledby={title === null ? undefined : headingId}
|
|
191
|
-
onSubmit={submit}
|
|
192
|
-
>
|
|
187
|
+
<form className="space-y-3" aria-labelledby={title === null ? undefined : headingId} onSubmit={submit}>
|
|
193
188
|
{heading}
|
|
194
189
|
<p className={INTRO_CLASS}>{labels.intro}</p>
|
|
195
190
|
{formContent}
|
|
@@ -262,8 +262,7 @@ export function RegisterForm({
|
|
|
262
262
|
const working = busy !== null;
|
|
263
263
|
const suggestion = emailTag ? taggedEmail(email, emailTag) : null;
|
|
264
264
|
// The invitee took the tagged address: offer the way back to the invited one.
|
|
265
|
-
const backToInvited =
|
|
266
|
-
invitedEmail !== undefined && email.trim() !== invitedEmail.trim() ? invitedEmail.trim() : null;
|
|
265
|
+
const backToInvited = invitedEmail !== undefined && email.trim() !== invitedEmail.trim() ? invitedEmail.trim() : null;
|
|
267
266
|
const canSubmit =
|
|
268
267
|
personNameOk(firstName) &&
|
|
269
268
|
personNameOk(lastName) &&
|
|
@@ -311,12 +310,12 @@ export function RegisterForm({
|
|
|
311
310
|
: isRateLimited(error)
|
|
312
311
|
? (labels.rateLimited ?? DEFAULT_REGISTER_LABELS.rateLimited)(retryAfterSeconds(error))
|
|
313
312
|
: code === "registration_closed"
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
313
|
+
? labels.registrationClosed
|
|
314
|
+
: code === "invitation_invalid"
|
|
315
|
+
? labels.invitationInvalid
|
|
316
|
+
: code === "invitation_expired"
|
|
317
|
+
? labels.invitationExpired
|
|
318
|
+
: labels.failed,
|
|
320
319
|
);
|
|
321
320
|
},
|
|
322
321
|
);
|
|
@@ -94,12 +94,9 @@ export interface ResetPasswordResult {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
type Phase =
|
|
97
|
-
|
|
98
|
-
| { kind: "invalid" }
|
|
99
|
-
| { kind: "done"; result: ResetPasswordResult };
|
|
97
|
+
{ kind: "form"; check: ResetPasswordCheck } | { kind: "invalid" } | { kind: "done"; result: ResetPasswordResult };
|
|
100
98
|
|
|
101
|
-
export interface ResetPasswordFormProps
|
|
102
|
-
extends Omit<ComponentPropsWithRef<"div">, "onSubmit" | "children" | "title"> {
|
|
99
|
+
export interface ResetPasswordFormProps extends Omit<ComponentPropsWithRef<"div">, "onSubmit" | "children" | "title"> {
|
|
103
100
|
/** The link's token — the app's `?token=` (keksdose, kastlan: `/reset-password?token=…`).
|
|
104
101
|
* Empty: the link was cut short, and the page says so without asking anyone. */
|
|
105
102
|
token: string;
|
|
@@ -431,9 +431,7 @@ export function SignInForm({
|
|
|
431
431
|
const [recovery, setRecovery] = useState("");
|
|
432
432
|
const [newPassword, setNewPassword] = useState("");
|
|
433
433
|
const [confirm, setConfirm] = useState("");
|
|
434
|
-
const [challenge, setChallenge] = useState<{ token: string; extra?: Readonly<Record<string, unknown>> } | null>(
|
|
435
|
-
null,
|
|
436
|
-
);
|
|
434
|
+
const [challenge, setChallenge] = useState<{ token: string; extra?: Readonly<Record<string, unknown>> } | null>(null);
|
|
437
435
|
// What is running: one call at a time. "done" after `signed-in` — the app has the
|
|
438
436
|
// session and is leaving; the buttons stay busy so nothing is sent twice meanwhile.
|
|
439
437
|
const [busy, setBusy] = useState<SignInAction | "done" | null>(null);
|
|
@@ -494,7 +492,8 @@ export function SignInForm({
|
|
|
494
492
|
// After the app's words, before the kit's generic ones (0.30.0): a throttle is
|
|
495
493
|
// neither a wrong password nor a wrong code, and saying so sends the person to try
|
|
496
494
|
// another one — which the limiter counts too.
|
|
497
|
-
if (isRateLimited(error))
|
|
495
|
+
if (isRateLimited(error))
|
|
496
|
+
return (labels.rateLimited ?? DEFAULT_SIGN_IN_LABELS.rateLimited)(retryAfterSeconds(error));
|
|
498
497
|
if (action === "password") return code === "invalid_credentials" ? labels.invalidCredentials : labels.failed;
|
|
499
498
|
if (action === "passkey") return labels.passkeyFailed;
|
|
500
499
|
if (action === "code") {
|
|
@@ -642,8 +641,7 @@ export function SignInForm({
|
|
|
642
641
|
setUseRecovery((on) => !on);
|
|
643
642
|
};
|
|
644
643
|
const codeError = failure?.action === "code" ? failure.message : undefined;
|
|
645
|
-
const content =
|
|
646
|
-
typeof twoFactorContent === "function" ? twoFactorContent(challenge.token) : twoFactorContent;
|
|
644
|
+
const content = typeof twoFactorContent === "function" ? twoFactorContent(challenge.token) : twoFactorContent;
|
|
647
645
|
return (
|
|
648
646
|
<div {...rest} data-step="2fa" className={rootClass}>
|
|
649
647
|
<form className="space-y-3" aria-labelledby={headingId} onSubmit={submitCode}>
|
|
@@ -731,9 +729,7 @@ export function SignInForm({
|
|
|
731
729
|
{content}
|
|
732
730
|
{/* Which account the new password is for, for the password manager: it files
|
|
733
731
|
the new password under this username instead of guessing. */}
|
|
734
|
-
{email !== "" &&
|
|
735
|
-
<input type="email" name="username" autoComplete="username" value={email} readOnly hidden />
|
|
736
|
-
)}
|
|
732
|
+
{email !== "" && <input type="email" name="username" autoComplete="username" value={email} readOnly hidden />}
|
|
737
733
|
<NewPasswordFields
|
|
738
734
|
password={newPassword}
|
|
739
735
|
confirm={confirm}
|
|
@@ -767,7 +763,9 @@ export function SignInForm({
|
|
|
767
763
|
|
|
768
764
|
const refused = failure?.code === "invalid_credentials";
|
|
769
765
|
const tagged =
|
|
770
|
-
refused && failure?.action === "password" && emailTag && failure.email
|
|
766
|
+
refused && failure?.action === "password" && emailTag && failure.email
|
|
767
|
+
? taggedEmail(failure.email, emailTag)
|
|
768
|
+
: null;
|
|
771
769
|
const showDeactivated = refused && hasContent(deactivatedContact);
|
|
772
770
|
|
|
773
771
|
return (
|
|
@@ -802,13 +800,16 @@ export function SignInForm({
|
|
|
802
800
|
<AlertBanner tone="danger" size="sm">
|
|
803
801
|
{failure.message}
|
|
804
802
|
</AlertBanner>
|
|
805
|
-
{showDeactivated && (
|
|
806
|
-
<p className={HINT_CLASS}>{withContact(labels.deactivatedHint, deactivatedContact)}</p>
|
|
807
|
-
)}
|
|
803
|
+
{showDeactivated && <p className={HINT_CLASS}>{withContact(labels.deactivatedHint, deactivatedContact)}</p>}
|
|
808
804
|
{tagged && <p className={HINT_CLASS}>{labels.tagHint(tagged)}</p>}
|
|
809
805
|
</div>
|
|
810
806
|
)}
|
|
811
|
-
<Button
|
|
807
|
+
<Button
|
|
808
|
+
type="submit"
|
|
809
|
+
className="w-full"
|
|
810
|
+
pending={busy === "password" || busy === "done"}
|
|
811
|
+
disabled={busy === "passkey"}
|
|
812
|
+
>
|
|
812
813
|
{labels.submit}
|
|
813
814
|
</Button>
|
|
814
815
|
{onPasskey && (
|
|
@@ -159,10 +159,7 @@ function ResendStatus({
|
|
|
159
159
|
: labels.resendError))
|
|
160
160
|
: "";
|
|
161
161
|
return (
|
|
162
|
-
<span
|
|
163
|
-
role="status"
|
|
164
|
-
className={cn(phase === "failed" ? "text-danger" : "text-success", className)}
|
|
165
|
-
>
|
|
162
|
+
<span role="status" className={cn(phase === "failed" ? "text-danger" : "text-success", className)}>
|
|
166
163
|
{phase === "sent" ? labels.resent : failed}
|
|
167
164
|
</span>
|
|
168
165
|
);
|
|
@@ -259,9 +256,7 @@ export function VerifyEmailStatus({
|
|
|
259
256
|
useOncePerKey(token === "" ? null : token, onVerify, (key, result) => {
|
|
260
257
|
// Without a classifier, the coded refusal decides (0.30.0): `token_expired` is
|
|
261
258
|
// "expired", anything else "invalid".
|
|
262
|
-
const next: VerifyOutcome = result.ok
|
|
263
|
-
? "verified"
|
|
264
|
-
: (classifyError ?? defaultVerifyFailure)(result.error);
|
|
259
|
+
const next: VerifyOutcome = result.ok ? "verified" : (classifyError ?? defaultVerifyFailure)(result.error);
|
|
265
260
|
setSettled({ token: key, outcome: next });
|
|
266
261
|
announce(labels[next]);
|
|
267
262
|
});
|
|
@@ -26,12 +26,7 @@ import { ExternalMark } from "./subscription-actions";
|
|
|
26
26
|
* - `processing` — back from checkout before the webhook landed (§12.21).
|
|
27
27
|
*/
|
|
28
28
|
export type BillingBannerKind =
|
|
29
|
-
| "
|
|
30
|
-
| "grant-ending"
|
|
31
|
-
| "payment-failed"
|
|
32
|
-
| "plan-ended"
|
|
33
|
-
| "guest"
|
|
34
|
-
| "processing";
|
|
29
|
+
"trial-ending" | "grant-ending" | "payment-failed" | "plan-ended" | "guest" | "processing";
|
|
35
30
|
|
|
36
31
|
/** A `div`'s props, `ref` included since 0.35 (round 0.35 R4, the follow-up to API-2): they
|
|
37
32
|
* go on to the {@link AlertBanner}, so the ref is the banner's `<div>` — with an × too,
|
|
@@ -223,7 +218,8 @@ export function BillingBanner(props: BillingBannerProps) {
|
|
|
223
218
|
const words = actionLabel ?? ownAction;
|
|
224
219
|
const newTab = actionNewTab ?? (kind === "payment-failed" && actionHref === undefined && onAction !== undefined);
|
|
225
220
|
const action =
|
|
226
|
-
askBuyer || words === undefined || (actionHref === undefined && onAction === undefined) ? undefined : actionHref !==
|
|
221
|
+
askBuyer || words === undefined || (actionHref === undefined && onAction === undefined) ? undefined : actionHref !==
|
|
222
|
+
undefined ? (
|
|
227
223
|
<Button href={actionHref} variant="secondary" size="sm" external={newTab || undefined}>
|
|
228
224
|
{words}
|
|
229
225
|
{newTab && <ExternalMark />}
|
|
@@ -307,8 +307,11 @@ export const DEFAULT_BILLING_LABELS: BillingLabels = {
|
|
|
307
307
|
paymentFailed: "Your last payment didn’t go through. Update your payment method to keep your plan.",
|
|
308
308
|
planEnded: "Your plan has ended. You can still view and export everything; choose a plan to make changes again.",
|
|
309
309
|
guestReadOnly: (item) =>
|
|
310
|
-
item
|
|
311
|
-
|
|
310
|
+
item
|
|
311
|
+
? `“${item}” is read-only for now; its owner can lift that.`
|
|
312
|
+
: "This is read-only for now; its owner can lift that.",
|
|
313
|
+
processing:
|
|
314
|
+
"Your payment is being processed. Your plan starts as soon as it’s confirmed; this page updates by itself.",
|
|
312
315
|
choosePlan: "Choose a plan",
|
|
313
316
|
updatePayment: "Update payment method",
|
|
314
317
|
paymentFailedAskBuyer: (buyer) =>
|
|
@@ -359,8 +362,7 @@ export const DEFAULT_BILLING_LABELS: BillingLabels = {
|
|
|
359
362
|
"You have free access with no end date. A purchase won’t change your plan while the free access runs: you would pay for a plan that doesn’t apply.",
|
|
360
363
|
grantWarningAction: "Buy anyway",
|
|
361
364
|
|
|
362
|
-
waitingChanges: (count) =>
|
|
363
|
-
count === 1 ? "1 change waiting for a plan" : `${count} changes waiting for a plan`,
|
|
365
|
+
waitingChanges: (count) => (count === 1 ? "1 change waiting for a plan" : `${count} changes waiting for a plan`),
|
|
364
366
|
discardWaiting: "Discard waiting changes",
|
|
365
367
|
|
|
366
368
|
notConfigured: "Payments aren't set up yet. Please try again later.",
|
|
@@ -80,7 +80,8 @@ interface PlanDisplayProps {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
export interface PlanCardProps
|
|
83
|
-
extends
|
|
83
|
+
extends
|
|
84
|
+
Omit<ChoiceCardProps, "type" | "title" | "description" | "icon" | "indeterminate" | "value" | "labels">,
|
|
84
85
|
PlanDisplayProps {
|
|
85
86
|
plan: BillingPlan;
|
|
86
87
|
/** See {@link PlanRelation}. `current` draws the "Current plan" chip — a word in the
|
|
@@ -170,9 +171,7 @@ export function PlanCard({
|
|
|
170
171
|
data-part="price"
|
|
171
172
|
className={cn(
|
|
172
173
|
"tabular-nums",
|
|
173
|
-
price.kind === "not-offered"
|
|
174
|
-
? "text-xs text-muted"
|
|
175
|
-
: "text-lg font-semibold leading-tight text-primary",
|
|
174
|
+
price.kind === "not-offered" ? "text-xs text-muted" : "text-lg font-semibold leading-tight text-primary",
|
|
176
175
|
)}
|
|
177
176
|
>
|
|
178
177
|
{figure}
|
|
@@ -371,9 +370,7 @@ export function PlanPicker({
|
|
|
371
370
|
|
|
372
371
|
const [ownValue, setOwnValue] = useState<string | null>(() => defaultValue ?? current ?? null);
|
|
373
372
|
const [ownInterval, setOwnInterval] = useState<BillingInterval>(defaultInterval);
|
|
374
|
-
const [ownCurrency, setOwnCurrency] = useState<BillingCurrency>(
|
|
375
|
-
() => defaultCurrency ?? billingCurrencyFor(locale),
|
|
376
|
-
);
|
|
373
|
+
const [ownCurrency, setOwnCurrency] = useState<BillingCurrency>(() => defaultCurrency ?? billingCurrencyFor(locale));
|
|
377
374
|
const value = valueProp !== undefined ? valueProp : ownValue;
|
|
378
375
|
const interval = intervalProp ?? ownInterval;
|
|
379
376
|
const currency = currencyProp ?? ownCurrency;
|
|
@@ -413,7 +410,11 @@ export function PlanPicker({
|
|
|
413
410
|
: undefined;
|
|
414
411
|
|
|
415
412
|
return (
|
|
416
|
-
<div
|
|
413
|
+
<div
|
|
414
|
+
className={cn("min-w-0 space-y-3", className)}
|
|
415
|
+
data-billing-interval={interval}
|
|
416
|
+
data-billing-currency={currency}
|
|
417
|
+
>
|
|
417
418
|
{(intervals.length > 1 || currencies.length > 1) && (
|
|
418
419
|
<div className="flex flex-wrap items-center gap-2">
|
|
419
420
|
{intervals.length > 1 && (
|
|
@@ -58,8 +58,7 @@ export function usePlanLimitToast(options: PlanLimitToastOptions): (hit?: PlanLi
|
|
|
58
58
|
(hit?: PlanLimitRefusal) => {
|
|
59
59
|
const dimension = hit?.dimension ?? "";
|
|
60
60
|
const name = dimensionLabels?.[dimension] ?? dimension;
|
|
61
|
-
const figure = (value: number) =>
|
|
62
|
-
formatValue ? formatValue(dimension, value) : formatNumber(value, { locale });
|
|
61
|
+
const figure = (value: number) => (formatValue ? formatValue(dimension, value) : formatNumber(value, { locale }));
|
|
63
62
|
// A body without `used` was refused for being AT the limit (PlanLimitNotice's rule).
|
|
64
63
|
const usage =
|
|
65
64
|
hit?.limit !== undefined
|
|
@@ -18,8 +18,7 @@ export interface PlanLimitRefusal {
|
|
|
18
18
|
/** keksdose's code before §3.4: `402 {detail, code: "plan_budget_limit", plan, limit}`. */
|
|
19
19
|
const LEGACY_BUDGET_LIMIT = "plan_budget_limit";
|
|
20
20
|
|
|
21
|
-
const text = (value: unknown): string | undefined =>
|
|
22
|
-
typeof value === "string" && value !== "" ? value : undefined;
|
|
21
|
+
const text = (value: unknown): string | undefined => (typeof value === "string" && value !== "" ? value : undefined);
|
|
23
22
|
const count = (value: unknown): number | undefined =>
|
|
24
23
|
typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
25
24
|
|
|
@@ -34,10 +34,7 @@ export type PlanPrices = Partial<Record<BillingCurrency, PlanIntervalPrices>>;
|
|
|
34
34
|
* - `free` — a plan with no prices at all (keksdose's free plan), or a price of 0;
|
|
35
35
|
* - `not-offered` — a plan with prices, but none for this currency and period.
|
|
36
36
|
*/
|
|
37
|
-
export type PlanPriceAnswer =
|
|
38
|
-
| { kind: "price"; minor: number }
|
|
39
|
-
| { kind: "free" }
|
|
40
|
-
| { kind: "not-offered" };
|
|
37
|
+
export type PlanPriceAnswer = { kind: "price"; minor: number } | { kind: "free" } | { kind: "not-offered" };
|
|
41
38
|
|
|
42
39
|
/** Whether a price table holds any figure at all. */
|
|
43
40
|
function hasAnyPrice(prices: PlanPrices | null | undefined): boolean {
|
|
@@ -125,8 +125,7 @@ export function PlanSwitchConfirm({
|
|
|
125
125
|
|
|
126
126
|
const period = (interval: BillingInterval) => (interval === "year" ? labels.yearly : labels.monthly);
|
|
127
127
|
const side = (s: PlanSwitchSide) => `${planName(s.plan.toLowerCase())} (${period(s.interval)})`;
|
|
128
|
-
const money = (minor: number, currency: string) =>
|
|
129
|
-
formatMoney(minorToMajor(minor, currency), currency, { locale });
|
|
128
|
+
const money = (minor: number, currency: string) => formatMoney(minorToMajor(minor, currency), currency, { locale });
|
|
130
129
|
const figure = (dimension: string, value: number) =>
|
|
131
130
|
formatLimit ? formatLimit(dimension, value) : formatNumber(value, { locale });
|
|
132
131
|
|
|
@@ -169,7 +169,9 @@ export function SubscriptionActions({
|
|
|
169
169
|
const portalCancel = onCancel ?? (onPortal ? () => onPortal("cancel") : undefined);
|
|
170
170
|
// Under "buyer_only" the in-app cancel only; under "open" the portal's first, the
|
|
171
171
|
// in-app cancel only where no way to the portal's is given.
|
|
172
|
-
const cancelCall = buyerOnly
|
|
172
|
+
const cancelCall = buyerOnly
|
|
173
|
+
? onCancelInApp
|
|
174
|
+
: (portalCancel ?? (cancelHref === undefined ? onCancelInApp : undefined));
|
|
173
175
|
// 0.43: what was asked in the app wins over the row until the row moves.
|
|
174
176
|
const scheduled = cancelRequested === "cancel" ? true : cancelRequested === "resume" ? false : cancelAtPeriodEnd;
|
|
175
177
|
// 0.43 (§17): the portal's actions are marked, a link opens a tab of its own.
|
|
@@ -229,7 +231,8 @@ export function SubscriptionActions({
|
|
|
229
231
|
if (!manage && !cancel) return null;
|
|
230
232
|
// The note while a way to the portal shows: "Payment and invoices open at Paddle in a
|
|
231
233
|
// new tab; Kastlan stays open here."
|
|
232
|
-
const portalShown =
|
|
234
|
+
const portalShown =
|
|
235
|
+
!buyerOnly && (manage !== null || (cancel !== null && portalCancelShown && !(scheduled && onResume)));
|
|
233
236
|
return (
|
|
234
237
|
<div {...rest} className={cn("flex flex-wrap items-center gap-x-4 gap-y-2", className)}>
|
|
235
238
|
{manage}
|
|
@@ -216,13 +216,7 @@ export function AccountRoleChip<R extends string = string>({
|
|
|
216
216
|
* state, as keksdose's state column does.
|
|
217
217
|
*/
|
|
218
218
|
export type AccountState =
|
|
219
|
-
| "
|
|
220
|
-
| "inactive"
|
|
221
|
-
| "invited"
|
|
222
|
-
| "registered"
|
|
223
|
-
| "unverified"
|
|
224
|
-
| "passwordChange"
|
|
225
|
-
| "deletion";
|
|
219
|
+
"active" | "inactive" | "invited" | "registered" | "unverified" | "passwordChange" | "deletion";
|
|
226
220
|
|
|
227
221
|
/**
|
|
228
222
|
* The `accountState` namespace. One word per state, plus the two forms of `deletion`.
|
|
@@ -84,11 +84,7 @@ export function alertFrameClass(tone: AlertTone, size: AlertSize = "md"): string
|
|
|
84
84
|
* border, 1px — a strip is a band across the top of a page, and its one visible edge
|
|
85
85
|
* is the line it draws under itself. kastlan's trial, past-due and tour banners. */
|
|
86
86
|
function stripFrameClass(tone: AlertTone, size: AlertSize): string {
|
|
87
|
-
return cn(
|
|
88
|
-
TONE_FRAME[tone],
|
|
89
|
-
"rounded-none border-0 border-b",
|
|
90
|
-
size === "sm" ? "px-4 py-1.5" : "px-4 py-2",
|
|
91
|
-
);
|
|
87
|
+
return cn(TONE_FRAME[tone], "rounded-none border-0 border-b", size === "sm" ? "px-4 py-1.5" : "px-4 py-2");
|
|
92
88
|
}
|
|
93
89
|
|
|
94
90
|
const TONE_TEXT: Record<AlertTone, string> = {
|
|
@@ -429,9 +425,7 @@ export function AlertBanner({
|
|
|
429
425
|
)}
|
|
430
426
|
</div>
|
|
431
427
|
) : (
|
|
432
|
-
<Body className={cn(!inlineRow && (nested ? "flex-1" : grow), "min-w-0 text-start")}>
|
|
433
|
-
{children}
|
|
434
|
-
</Body>
|
|
428
|
+
<Body className={cn(!inlineRow && (nested ? "flex-1" : grow), "min-w-0 text-start")}>{children}</Body>
|
|
435
429
|
);
|
|
436
430
|
const content = (
|
|
437
431
|
<>
|