@eifi1/ui-kit 0.51.4 → 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 +3 -3
- package/dist/account/account-settings-labels.js.map +1 -1
- package/dist/account/account-settings.js +11 -9
- package/dist/account/account-settings.js.map +1 -1
- package/dist/account/delete-account-setting.js +56 -65
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/account/email-change-setting-labels.js.map +1 -1
- package/dist/account/email-change-setting.js.map +1 -1
- package/dist/account/passkeys-setting.js.map +1 -1
- package/dist/account/sessions-setting.js.map +1 -1
- package/dist/admin/admin-action-confirm.js +1 -3
- package/dist/admin/admin-action-confirm.js.map +1 -1
- package/dist/admin/admin-action-log.js.map +1 -1
- package/dist/admin/admin-area-labels.js +4 -1
- package/dist/admin/admin-area-labels.js.map +1 -1
- package/dist/admin/admin-overview.js +19 -11
- package/dist/admin/admin-overview.js.map +1 -1
- package/dist/admin/admin-sections.js.map +1 -1
- package/dist/admin/admin-tool-links.d.ts +1 -1
- package/dist/admin/admin-tool-links.js +7 -1
- package/dist/admin/admin-tool-links.js.map +1 -1
- package/dist/admin/invitations-panel.js +2 -13
- package/dist/admin/invitations-panel.js.map +1 -1
- package/dist/admin/mail-test-card.js.map +1 -1
- package/dist/admin/reviewer-scope-editor.js +4 -11
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/admin/role-select.js.map +1 -1
- package/dist/admin/user-roster.js +1 -9
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/accept-invitation.js.map +1 -1
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/forgot-password-form.js +23 -31
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/register-form.js.map +1 -1
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form.js +13 -5
- package/dist/auth/sign-in-form.js.map +1 -1
- package/dist/auth/verify-email.js +1 -8
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/billing-banner.js.map +1 -1
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/checkout-processing.js.map +1 -1
- package/dist/billing/plan-card.js +91 -85
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-limit-toast.js.map +1 -1
- package/dist/billing/plan-limit.js.map +1 -1
- package/dist/billing/plan-price.js.map +1 -1
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/billing/subscription-actions.js.map +1 -1
- package/dist/bin/eifi1-pay-page.mjs +6 -1
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.js +1 -5
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.js +29 -12
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/authed-image.js.map +1 -1
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.js +1 -4
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/button.js +1 -7
- package/dist/components/button.js.map +1 -1
- package/dist/components/calculator.js +5 -5
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/calendar-heatmap.js +4 -10
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/card.js +1 -8
- package/dist/components/card.js.map +1 -1
- package/dist/components/chart-zoom-core.js +3 -17
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/chart.d.ts +1 -1
- package/dist/components/chart.js +4 -22
- package/dist/components/chart.js.map +1 -1
- package/dist/components/checkbox-group.js +1 -4
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/chip-input.js +4 -1
- package/dist/components/chip-input.js.map +1 -1
- package/dist/components/chip.js +10 -5
- package/dist/components/chip.js.map +1 -1
- package/dist/components/choice-card.js +58 -74
- package/dist/components/choice-card.js.map +1 -1
- package/dist/components/column-mapper-labels.js.map +1 -1
- package/dist/components/column-mapper.js +167 -227
- package/dist/components/column-mapper.js.map +1 -1
- package/dist/components/combobox-core.js +1 -4
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +1 -4
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.d.ts +5 -4
- package/dist/components/country-select.js +3 -19
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.js +10 -8
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.js +1 -6
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-cells.js.map +1 -1
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filter-popover.js +2 -18
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-groups.js +3 -1
- package/dist/components/data-table-groups.js.map +1 -1
- package/dist/components/data-table-head.js +44 -56
- package/dist/components/data-table-head.js.map +1 -1
- package/dist/components/data-table-mobile.js +31 -44
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-row-actions.js +19 -16
- package/dist/components/data-table-row-actions.js.map +1 -1
- package/dist/components/data-table-row.js.map +1 -1
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table-sort.js.map +1 -1
- package/dist/components/data-table-virtual.js +4 -1
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/data-table.js +30 -39
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +1 -6
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/description-list.js +10 -10
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog-frame.js +9 -2
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/disclosure.js +17 -27
- package/dist/components/disclosure.js.map +1 -1
- package/dist/components/dropdown.js +25 -35
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/empty-state.js.map +1 -1
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/field-base.js +5 -5
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/field-parts.d.ts +1 -1
- package/dist/components/field-parts.js +10 -14
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-sync.js +8 -10
- package/dist/components/field-sync.js.map +1 -1
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/floating-panel.js +4 -1
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/focus-ring.js.map +1 -1
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/grouped-picker.js +6 -8
- package/dist/components/grouped-picker.js.map +1 -1
- package/dist/components/hover-menu.js +1 -4
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/iban-input-labels.js.map +1 -1
- package/dist/components/icon-button.js +4 -1
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon-picker.js +2 -7
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/image-grid.js +41 -50
- package/dist/components/image-grid.js.map +1 -1
- package/dist/components/inline-edit-field.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +2 -8
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +14 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +1 -7
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal-labels.js.map +1 -1
- package/dist/components/legal-page.js +14 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.js +12 -2
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/line-items.js +26 -36
- package/dist/components/line-items.js.map +1 -1
- package/dist/components/list.js +22 -10
- package/dist/components/list.js.map +1 -1
- package/dist/components/measured-grid.js +29 -53
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/mini-calendar.js +13 -31
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-picker.js +10 -21
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +3 -16
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/nav-pills.js +10 -1
- package/dist/components/nav-pills.js.map +1 -1
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.js +1 -7
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.js +1 -4
- package/dist/components/numpad-sheet.js.map +1 -1
- package/dist/components/one-time-code-input.js +1 -7
- package/dist/components/one-time-code-input.js.map +1 -1
- package/dist/components/page-contents.js +13 -22
- package/dist/components/page-contents.js.map +1 -1
- package/dist/components/page-header.js +1 -11
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/password-strength-labels.js.map +1 -1
- package/dist/components/password-strength.js +2 -8
- package/dist/components/password-strength.js.map +1 -1
- package/dist/components/phone-input.js +42 -57
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart.js +1 -8
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress-bar.js +16 -9
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/qr-code.js +1 -8
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/row-actions.js +5 -1
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/select.js +28 -38
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.js +1 -5
- package/dist/components/separator.js.map +1 -1
- package/dist/components/series-chart-axes.js +4 -1
- package/dist/components/series-chart-axes.js.map +1 -1
- package/dist/components/series-chart-budget.js.map +1 -1
- package/dist/components/series-chart-ticks.js.map +1 -1
- package/dist/components/series-chart.js +29 -45
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/settings-fields.js +21 -17
- package/dist/components/settings-fields.js.map +1 -1
- package/dist/components/share-card.js +4 -9
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/sign-chip.js.map +1 -1
- package/dist/components/signature-pad.js +4 -13
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/signed-amount.js +12 -5
- package/dist/components/signed-amount.js.map +1 -1
- package/dist/components/skeleton.js +2 -17
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.js +13 -36
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sparkline.js.map +1 -1
- package/dist/components/stat-tile.js +14 -10
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/swatch-picker.js +14 -4
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/swipeable-row.d.ts +1 -1
- package/dist/components/swipeable-row.js +1 -8
- package/dist/components/swipeable-row.js.map +1 -1
- package/dist/components/table-skeleton.js +4 -1
- package/dist/components/table-skeleton.js.map +1 -1
- package/dist/components/table.js +12 -9
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +5 -24
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/text-link.js.map +1 -1
- package/dist/components/text.js.map +1 -1
- package/dist/components/tile-radio.js +1 -7
- package/dist/components/tile-radio.js.map +1 -1
- package/dist/components/time-input.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js +6 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle-legend.js +2 -11
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/tooltip.js +2 -22
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/translation-review-editor.js +1 -4
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review-parts.d.ts +1 -1
- package/dist/components/translation-review-parts.js +7 -1
- package/dist/components/translation-review-parts.js.map +1 -1
- package/dist/components/translation-review.js +18 -7
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/tree-view.js +14 -10
- package/dist/components/tree-view.js.map +1 -1
- package/dist/components/treemap.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.js +4 -1
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread.js +2 -13
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/feedback/feedback-vote-button.js.map +1 -1
- package/dist/hooks/use-anchored-rect.js.map +1 -1
- package/dist/hooks/use-document-title.js.map +1 -1
- package/dist/hooks/use-file-drop.js.map +1 -1
- package/dist/hooks/use-file-picker-labels.js.map +1 -1
- package/dist/hooks/use-file-picker.js.map +1 -1
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-overlay-history.js +10 -5
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/hooks/use-row-swipe.d.ts +1 -1
- package/dist/hooks/use-row-swipe.js +1 -6
- package/dist/hooks/use-row-swipe.js.map +1 -1
- package/dist/i18n/defaults.js +1 -4
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +4 -1
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.js +2 -8
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.js.map +1 -1
- package/dist/i18n/locales/en.js +4 -1
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/es.js +4 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +4 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +4 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +4 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.js.map +1 -1
- package/dist/i18n/review.js +13 -7
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.js +40 -23
- package/dist/index.js.map +1 -1
- package/dist/landing/access.js +1 -4
- package/dist/landing/access.js.map +1 -1
- package/dist/landing/landing-sections.js +35 -38
- package/dist/landing/landing-sections.js.map +1 -1
- package/dist/landing/page-seo.js.map +1 -1
- package/dist/lib/calc.js.map +1 -1
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/decimal-marks.js.map +1 -1
- package/dist/lib/device-settings.js +2 -1
- package/dist/lib/device-settings.js.map +1 -1
- package/dist/lib/direction.js.map +1 -1
- package/dist/lib/iban.js.map +1 -1
- package/dist/lib/logger.js +1 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/person-name.js.map +1 -1
- package/dist/lib/phone.js.map +1 -1
- package/dist/lib/qr-encode.js +344 -8
- package/dist/lib/qr-encode.js.map +1 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/table-text.js +15 -3
- package/dist/lib/table-text.js.map +1 -1
- package/dist/lib/text-match.d.ts +4 -0
- package/dist/lib/text-match.js.map +1 -1
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/notifications/notification-inbox.js +63 -44
- package/dist/notifications/notification-inbox.js.map +1 -1
- package/dist/notifications/notification-parts.js.map +1 -1
- package/dist/notifications/notification-types-setting.js.map +1 -1
- package/dist/notifications/notifications-labels.js.map +1 -1
- package/dist/notifications/push-device-setting.js +6 -1
- package/dist/notifications/push-device-setting.js.map +1 -1
- package/dist/notifications/push-devices-setting.js.map +1 -1
- package/dist/notifications/push-worker.js.map +1 -1
- package/dist/notifications/quiet-hours-setting.js.map +1 -1
- package/dist/notifications/use-push-device.js +4 -1
- package/dist/notifications/use-push-device.js.map +1 -1
- package/dist/offline/pwa-update-prompt.d.ts +1 -1
- package/dist/offline/pwa-update-prompt.js +7 -1
- package/dist/offline/pwa-update-prompt.js.map +1 -1
- package/dist/offline/query-persistence.js.map +1 -1
- package/dist/offline.d.ts +1 -1
- package/dist/offline.js +6 -1
- package/dist/offline.js.map +1 -1
- package/dist/pay/pay.css +8 -1
- package/dist/rhf/fields.d.ts +1 -2
- package/dist/rhf/fields.js +1 -10
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form-core.js +1 -4
- package/dist/rhf/form-core.js.map +1 -1
- package/dist/rhf/line-items.js.map +1 -1
- package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
- package/dist/search/command-palette.js +71 -62
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search.js +34 -5
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/search-index.js.map +1 -1
- package/dist/settings/device-reset-setting.js +1 -6
- package/dist/settings/device-reset-setting.js.map +1 -1
- package/dist/settings/settings-heading.js.map +1 -1
- package/dist/settings/settings-layout.js +9 -20
- package/dist/settings/settings-layout.js.map +1 -1
- package/dist/settings/use-settings-route.js.map +1 -1
- package/dist/shell/app-shell.js +62 -31
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/auth-layout.js +1 -10
- package/dist/shell/auth-layout.js.map +1 -1
- package/dist/shell/dev-menu.js +12 -6
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/option-switcher-menu.js.map +1 -1
- package/dist/shell/sync-status-indicator.js +7 -6
- package/dist/shell/sync-status-indicator.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell/topbar-controls.js +1 -10
- package/dist/shell/topbar-controls.js.map +1 -1
- package/dist/shell/tour-menu.js +9 -1
- package/dist/shell/tour-menu.js.map +1 -1
- package/dist/sync/db.js.map +1 -1
- package/dist/sync/engine.js +24 -6
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync.d.ts +2 -2
- package/dist/sync.js +7 -1
- package/dist/sync.js.map +1 -1
- package/dist/testing/css-variables.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/react.js.map +1 -1
- package/dist/testing/viewport.js +7 -4
- package/dist/testing/viewport.js.map +1 -1
- package/dist/theme/contrast-tokens.js +13 -2
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/palette-derive.d.ts +1 -1
- package/dist/theme/palette-derive.js +18 -29
- package/dist/theme/palette-derive.js.map +1 -1
- package/dist/theme/palette-presets.js.map +1 -1
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +1 -3
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/tour/tour-catalogue.js.map +1 -1
- package/dist/tour/tour-dock.js +5 -1
- package/dist/tour/tour-dock.js.map +1 -1
- package/dist/tour/tour-engine.js +1 -4
- package/dist/tour/tour-engine.js.map +1 -1
- package/dist/tour/tour.js +21 -12
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour/use-tour-progress.js.map +1 -1
- package/dist/tour/use-tour-url-sync.js.map +1 -1
- package/dist/wizard/stepper-nav.js +3 -24
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.js +24 -28
- package/dist/wizard/use-wizard.js.map +1 -1
- package/dist/wizard/validation.js.map +1 -1
- package/dist/wizard/wizard-context.js.map +1 -1
- package/dist/wizard/wizard-step.d.ts +1 -1
- package/dist/wizard/wizard-step.js +1 -8
- package/dist/wizard/wizard-step.js.map +1 -1
- package/dist/wizard/wizard-summary.js.map +1 -1
- package/package.json +5 -2
- package/src/account/account-settings-labels.ts +1 -2
- package/src/account/account-settings.tsx +11 -17
- package/src/account/delete-account-setting.tsx +1 -6
- package/src/account/email-change-setting-labels.ts +1 -2
- package/src/account/email-change-setting.tsx +3 -1
- package/src/account/passkeys-setting.tsx +1 -3
- package/src/account/sessions-setting.tsx +4 -2
- package/src/admin/admin-action-confirm.tsx +4 -7
- package/src/admin/admin-action-log.tsx +29 -29
- package/src/admin/admin-area-labels.ts +4 -1
- package/src/admin/admin-overview.tsx +8 -2
- package/src/admin/admin-sections.tsx +3 -1
- package/src/admin/admin-tool-links.tsx +7 -1
- package/src/admin/invitations-panel.tsx +5 -11
- package/src/admin/mail-test-card.tsx +1 -2
- package/src/admin/reviewer-scope-editor.tsx +4 -9
- package/src/admin/role-select.tsx +4 -2
- package/src/admin/user-roster.tsx +2 -11
- package/src/auth/accept-invitation.tsx +1 -7
- package/src/auth/auth-errors.ts +1 -6
- package/src/auth/forgot-password-form.tsx +2 -7
- package/src/auth/register-form.tsx +7 -8
- package/src/auth/reset-password-form.tsx +2 -5
- package/src/auth/sign-in-form.tsx +15 -14
- package/src/auth/verify-email.tsx +2 -7
- package/src/billing/billing-banner.tsx +3 -7
- package/src/billing/billing-labels.ts +6 -4
- package/src/billing/checkout-processing.ts +0 -1
- package/src/billing/plan-card.tsx +9 -8
- package/src/billing/plan-limit-toast.tsx +1 -2
- package/src/billing/plan-limit.ts +1 -2
- package/src/billing/plan-price.ts +1 -4
- package/src/billing/plan-switch.tsx +1 -2
- package/src/billing/subscription-actions.tsx +5 -2
- package/src/components/account-chips.tsx +1 -7
- package/src/components/alert-banner.tsx +2 -8
- package/src/components/amount-input.tsx +206 -178
- package/src/components/authed-image.tsx +7 -4
- package/src/components/autocomplete.tsx +7 -9
- package/src/components/bulk-action-bar.tsx +2 -7
- package/src/components/button-group.tsx +1 -2
- package/src/components/button-look.ts +6 -17
- package/src/components/button.tsx +1 -4
- package/src/components/calculator.tsx +6 -9
- package/src/components/calendar-heatmap.tsx +5 -10
- package/src/components/card.tsx +9 -13
- package/src/components/chart-zoom-core.tsx +6 -33
- package/src/components/chart.tsx +8 -31
- package/src/components/checkbox-group.tsx +1 -4
- package/src/components/chip-input.tsx +6 -6
- package/src/components/chip.tsx +14 -26
- package/src/components/choice-card.tsx +4 -18
- package/src/components/column-mapper-labels.ts +3 -10
- package/src/components/column-mapper.tsx +33 -122
- package/src/components/combobox-core.tsx +12 -42
- package/src/components/combobox.tsx +2 -6
- package/src/components/confirm-dialog.tsx +1 -3
- package/src/components/copy-button.tsx +2 -4
- package/src/components/country-select.tsx +9 -21
- package/src/components/currency-option-list.tsx +13 -14
- package/src/components/currency-select.tsx +2 -7
- package/src/components/danger-confirm.tsx +8 -9
- package/src/components/data-table-cells.tsx +1 -2
- package/src/components/data-table-column-settings.tsx +1 -3
- package/src/components/data-table-filter-popover.tsx +5 -19
- package/src/components/data-table-filters.ts +1 -6
- package/src/components/data-table-fit.ts +1 -3
- package/src/components/data-table-groups.tsx +3 -1
- package/src/components/data-table-head.tsx +27 -45
- package/src/components/data-table-mobile.tsx +99 -108
- package/src/components/data-table-pagination.tsx +2 -6
- package/src/components/data-table-row-actions.tsx +25 -24
- package/src/components/data-table-row.tsx +16 -17
- package/src/components/data-table-shared.tsx +10 -16
- package/src/components/data-table-sort.ts +1 -2
- package/src/components/data-table-virtual.ts +9 -4
- package/src/components/data-table.tsx +489 -501
- package/src/components/date-picker.tsx +1 -7
- package/src/components/date-range-picker.tsx +3 -13
- package/src/components/description-list.tsx +7 -13
- package/src/components/dialog-frame.tsx +12 -3
- package/src/components/disclosure.tsx +8 -12
- package/src/components/dropdown.tsx +3 -11
- package/src/components/empty-state.tsx +1 -3
- package/src/components/entity-combobox.tsx +2 -6
- package/src/components/error-boundary.tsx +7 -7
- package/src/components/field-base.tsx +8 -14
- package/src/components/field-parts.tsx +12 -23
- package/src/components/field-sync.tsx +7 -11
- package/src/components/file-button.tsx +7 -3
- package/src/components/file-dropzone.tsx +7 -12
- package/src/components/floating-panel.tsx +44 -51
- package/src/components/focus-ring.ts +1 -2
- package/src/components/form-actions.tsx +1 -4
- package/src/components/grouped-picker.tsx +6 -8
- package/src/components/hover-menu.tsx +1 -4
- package/src/components/iban-input-labels.ts +1 -2
- package/src/components/icon-button.tsx +46 -48
- package/src/components/icon-picker.tsx +4 -17
- package/src/components/image-grid.tsx +1 -6
- package/src/components/inline-edit-field.tsx +1 -5
- package/src/components/inline-entity-combobox.tsx +6 -21
- package/src/components/input.tsx +14 -2
- package/src/components/jump-calendar.tsx +2 -6
- package/src/components/legal-labels.ts +1 -2
- package/src/components/legal-page.tsx +18 -7
- package/src/components/legal.tsx +14 -5
- package/src/components/lightbox.tsx +1 -3
- package/src/components/line-items.tsx +7 -15
- package/src/components/list.tsx +29 -25
- package/src/components/measured-grid.tsx +8 -30
- package/src/components/menu-item.tsx +1 -3
- package/src/components/mini-calendar.tsx +129 -159
- package/src/components/money-field.tsx +4 -2
- package/src/components/month-picker.tsx +14 -21
- package/src/components/multi-entity-combobox.tsx +6 -26
- package/src/components/multi-select.tsx +5 -9
- package/src/components/nav-pills.tsx +10 -2
- package/src/components/number-field.tsx +18 -15
- package/src/components/number-input.tsx +3 -19
- package/src/components/numpad-sheet.tsx +9 -13
- package/src/components/one-time-code-input.tsx +6 -11
- package/src/components/page-contents.tsx +2 -9
- package/src/components/page-header.tsx +5 -10
- package/src/components/password-strength-labels.ts +1 -2
- package/src/components/password-strength.tsx +6 -9
- package/src/components/phone-input.tsx +2 -13
- package/src/components/picker-sheet.tsx +2 -5
- package/src/components/pie-chart.tsx +6 -12
- package/src/components/popover.tsx +2 -1
- package/src/components/progress-bar.tsx +16 -25
- package/src/components/qr-code.tsx +2 -9
- package/src/components/row-actions.tsx +9 -1
- package/src/components/search-field.tsx +4 -5
- package/src/components/select.tsx +2 -10
- package/src/components/separator.tsx +1 -5
- package/src/components/series-chart-axes.ts +5 -5
- package/src/components/series-chart-budget.ts +1 -4
- package/src/components/series-chart-ticks.ts +1 -4
- package/src/components/series-chart.tsx +43 -83
- package/src/components/settings-fields.tsx +20 -15
- package/src/components/share-card.tsx +6 -14
- package/src/components/sign-chip.tsx +16 -16
- package/src/components/signature-pad.tsx +21 -13
- package/src/components/signed-amount.tsx +6 -14
- package/src/components/skeleton.tsx +2 -13
- package/src/components/slider.tsx +9 -20
- package/src/components/sparkline.tsx +2 -13
- package/src/components/stat-tile.tsx +13 -24
- package/src/components/swatch-picker.tsx +8 -3
- package/src/components/swipeable-row.tsx +2 -11
- package/src/components/table-skeleton.tsx +4 -1
- package/src/components/table.tsx +12 -8
- package/src/components/tabs.tsx +24 -39
- package/src/components/text-link.tsx +6 -6
- package/src/components/text.tsx +1 -2
- package/src/components/tile-radio.tsx +6 -19
- package/src/components/time-input.tsx +4 -5
- package/src/components/toast.tsx +3 -12
- package/src/components/toggle-group.tsx +9 -9
- package/src/components/toggle-legend.tsx +4 -16
- package/src/components/tooltip.tsx +9 -48
- package/src/components/translation-review-editor.tsx +4 -4
- package/src/components/translation-review-parts.tsx +7 -1
- package/src/components/translation-review.tsx +15 -16
- package/src/components/tree-view.tsx +17 -20
- package/src/components/treemap.tsx +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 +12 -8
- package/src/feedback/feedback-thread.tsx +4 -16
- package/src/feedback/feedback-vocabulary.ts +72 -82
- package/src/feedback/feedback-vote-button.tsx +9 -8
- package/src/hooks/use-anchored-rect.ts +1 -4
- package/src/hooks/use-document-title.ts +3 -1
- package/src/hooks/use-file-drop.ts +1 -3
- package/src/hooks/use-file-picker-labels.ts +1 -2
- package/src/hooks/use-file-picker.tsx +1 -5
- package/src/hooks/use-focus-trap.ts +1 -2
- package/src/hooks/use-overlay-history.ts +10 -5
- package/src/hooks/use-row-swipe.ts +1 -6
- package/src/i18n/defaults.ts +1 -4
- package/src/i18n/german.ts +33 -49
- package/src/i18n/kit-labels.tsx +5 -20
- package/src/i18n/languages.ts +2 -8
- package/src/i18n/locales/en.ts +11 -31
- package/src/i18n/locales/es.ts +35 -49
- package/src/i18n/locales/fr.ts +34 -51
- package/src/i18n/locales/hu.ts +26 -37
- package/src/i18n/locales/it.ts +35 -52
- package/src/i18n/locales/zh.ts +14 -32
- package/src/i18n/plurals.ts +4 -1
- package/src/i18n/review.ts +18 -7
- package/src/i18n/shared-labels.ts +1 -2
- package/src/index.ts +106 -32
- package/src/landing/access.ts +2 -7
- package/src/landing/landing-sections.tsx +14 -15
- package/src/landing/page-seo.ts +1 -3
- package/src/lib/calc.ts +4 -1
- package/src/lib/clipboard-minus.ts +4 -1
- package/src/lib/dates.ts +2 -10
- package/src/lib/decimal-marks.ts +1 -3
- package/src/lib/device-settings.ts +2 -1
- package/src/lib/direction.ts +1 -3
- package/src/lib/iban.ts +89 -9
- package/src/lib/logger.ts +1 -5
- package/src/lib/person-name.ts +1 -3
- package/src/lib/phone.ts +5 -8
- package/src/lib/qr-encode.ts +32 -8
- package/src/lib/session-refresh.ts +5 -6
- package/src/lib/table-text.ts +24 -6
- package/src/lib/text-match.ts +15 -3
- package/src/lib/translation-review.ts +1 -3
- package/src/notifications/notification-inbox.tsx +17 -4
- package/src/notifications/notification-parts.tsx +1 -2
- package/src/notifications/notification-types-setting.tsx +19 -18
- package/src/notifications/notifications-labels.ts +1 -2
- package/src/notifications/push-device-setting.tsx +7 -1
- package/src/notifications/push-devices-setting.tsx +7 -3
- package/src/notifications/push-worker.ts +10 -2
- package/src/notifications/quiet-hours-setting.tsx +4 -1
- package/src/notifications/use-push-device.ts +4 -1
- package/src/offline/pwa-update-prompt.tsx +7 -1
- package/src/offline/query-persistence.ts +9 -6
- package/src/offline.ts +6 -1
- package/src/rhf/fields.tsx +50 -19
- package/src/rhf/form-core.tsx +2 -6
- package/src/rhf/line-items.tsx +5 -7
- package/src/rhf/use-rhf-wizard-step.ts +3 -12
- package/src/search/command-palette.tsx +15 -23
- package/src/search/global-search.tsx +38 -8
- package/src/search/search-index.ts +5 -1
- package/src/settings/device-reset-setting.tsx +5 -8
- package/src/settings/settings-heading.tsx +3 -1
- package/src/settings/settings-layout.tsx +6 -13
- package/src/settings/use-settings-route.ts +4 -3
- package/src/shell/app-shell.tsx +48 -24
- package/src/shell/auth-layout.tsx +1 -6
- package/src/shell/dev-menu.tsx +12 -6
- package/src/shell/option-switcher-menu.tsx +1 -3
- package/src/shell/sync-status-indicator.tsx +14 -12
- package/src/shell/top-bar-parts-labels.ts +1 -3
- package/src/shell/topbar-action-menu.tsx +9 -8
- package/src/shell/topbar-controls.tsx +5 -19
- package/src/shell/tour-menu.tsx +9 -1
- package/src/sync/db.ts +5 -1
- package/src/sync/engine.ts +44 -12
- package/src/sync.ts +16 -2
- package/src/testing/css-variables.ts +1 -2
- package/src/testing/index.ts +1 -6
- package/src/testing/react.ts +1 -2
- package/src/testing/viewport.ts +9 -9
- package/src/theme/contrast-tokens.ts +13 -2
- package/src/theme/palette-derive.ts +24 -50
- package/src/theme/palette-presets.ts +0 -1
- package/src/theme/palette-store.ts +1 -4
- package/src/theme/text-size.ts +1 -1
- package/src/theme/theme-store.ts +2 -6
- package/src/tour/tour-catalogue.tsx +4 -2
- package/src/tour/tour-dock.ts +5 -1
- package/src/tour/tour-engine.ts +2 -6
- package/src/tour/tour.tsx +28 -12
- package/src/tour/use-tour-progress.ts +8 -2
- package/src/tour/use-tour-url-sync.ts +3 -1
- package/src/vite-env.d.ts +1 -4
- package/src/wizard/stepper-nav.tsx +10 -35
- package/src/wizard/types.ts +1 -4
- package/src/wizard/use-wizard.ts +28 -43
- package/src/wizard/validation.ts +1 -5
- package/src/wizard/wizard-context.tsx +2 -6
- package/src/wizard/wizard-step.tsx +1 -8
- package/src/wizard/wizard-summary.tsx +2 -6
- package/tokens.css +393 -152
|
@@ -30,8 +30,7 @@ const AVATAR_SIZES = {
|
|
|
30
30
|
lg: "size-12 text-base",
|
|
31
31
|
} as const;
|
|
32
32
|
|
|
33
|
-
const CHIP =
|
|
34
|
-
"inline-flex shrink-0 items-center justify-center rounded-full bg-inverse font-semibold text-inverse";
|
|
33
|
+
const CHIP = "inline-flex shrink-0 items-center justify-center rounded-full bg-inverse font-semibold text-inverse";
|
|
35
34
|
|
|
36
35
|
/** The dot grows with the avatar: 8px on `sm`, 10px on `md` (keksdose's), 12px on `lg`. */
|
|
37
36
|
const BADGE_SIZES: Record<keyof typeof AVATAR_SIZES, StatusDotSize> = { sm: "sm", md: "md", lg: "lg" };
|
|
@@ -90,22 +89,10 @@ export function UserAvatar({ name, email, person, size = "md", badge, className,
|
|
|
90
89
|
// also contains the sr-only text.
|
|
91
90
|
return (
|
|
92
91
|
<span {...rest} className="relative inline-flex shrink-0">
|
|
93
|
-
<span
|
|
94
|
-
aria-hidden
|
|
95
|
-
className={cn(
|
|
96
|
-
CHIP,
|
|
97
|
-
AVATAR_SIZES[size],
|
|
98
|
-
className,
|
|
99
|
-
)}
|
|
100
|
-
>
|
|
92
|
+
<span aria-hidden className={cn(CHIP, AVATAR_SIZES[size], className)}>
|
|
101
93
|
{initials}
|
|
102
94
|
</span>
|
|
103
|
-
<StatusDot
|
|
104
|
-
ring
|
|
105
|
-
tone={badge.tone ?? "danger"}
|
|
106
|
-
size={BADGE_SIZES[size]}
|
|
107
|
-
className="absolute -end-0.5 -top-0.5"
|
|
108
|
-
/>
|
|
95
|
+
<StatusDot ring tone={badge.tone ?? "danger"} size={BADGE_SIZES[size]} className="absolute -end-0.5 -top-0.5" />
|
|
109
96
|
<span className="sr-only">{badge.label}</span>
|
|
110
97
|
</span>
|
|
111
98
|
);
|
|
@@ -121,11 +108,7 @@ export function UserAvatar({ name, email, person, size = "md", badge, className,
|
|
|
121
108
|
// `aria-label` arrives through `...rest` and wins.
|
|
122
109
|
aria-hidden
|
|
123
110
|
{...rest}
|
|
124
|
-
className={cn(
|
|
125
|
-
CHIP,
|
|
126
|
-
AVATAR_SIZES[size],
|
|
127
|
-
className,
|
|
128
|
-
)}
|
|
111
|
+
className={cn(CHIP, AVATAR_SIZES[size], className)}
|
|
129
112
|
>
|
|
130
113
|
{initials}
|
|
131
114
|
</span>
|
package/src/demo/demo-start.tsx
CHANGED
|
@@ -116,10 +116,14 @@ export function DemoStart<T>({
|
|
|
116
116
|
const accessLink = useAccessAction(access, landingLabels);
|
|
117
117
|
const [refusal, setRefusal] = useState<Refusal | null>(null);
|
|
118
118
|
useNoIndex(noIndex);
|
|
119
|
-
useOncePerKey<T>(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
useOncePerKey<T>(
|
|
120
|
+
ONCE,
|
|
121
|
+
() => start(),
|
|
122
|
+
(_key, result) => {
|
|
123
|
+
if (result.ok) onStarted(result.value);
|
|
124
|
+
else setRefusal(refusalOf(result.error));
|
|
125
|
+
},
|
|
126
|
+
);
|
|
123
127
|
|
|
124
128
|
return (
|
|
125
129
|
<div {...rest} className={cn("flex flex-col items-center gap-4 py-4 text-center", className)}>
|
|
@@ -22,7 +22,8 @@ import type { FeedbackAttachmentFieldLabels } from "./feedback-attachment";
|
|
|
22
22
|
export const DEFAULT_FEEDBACK_ATTACHMENT_LABELS: FeedbackAttachmentFieldLabels = {
|
|
23
23
|
attachmentAdd: "Add attachment",
|
|
24
24
|
attachmentCapture: "Capture screenshot",
|
|
25
|
-
attachmentPaste:
|
|
25
|
+
attachmentPaste:
|
|
26
|
+
"…or paste a screenshot straight from the clipboard, so you can show one corner rather than the whole page.",
|
|
26
27
|
attachmentRemove: "Remove attachment",
|
|
27
28
|
attachmentList: "Attachments",
|
|
28
29
|
attachmentScreenshot: "Screenshot",
|
|
@@ -328,9 +328,7 @@ export interface FeedbackAttachmentFieldRefsProps extends FeedbackAttachmentFiel
|
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
export type FeedbackAttachmentFieldProps =
|
|
331
|
-
|
|
|
332
|
-
| FeedbackAttachmentFieldMultipleProps
|
|
333
|
-
| FeedbackAttachmentFieldRefsProps;
|
|
331
|
+
FeedbackAttachmentFieldSingleProps | FeedbackAttachmentFieldMultipleProps | FeedbackAttachmentFieldRefsProps;
|
|
334
332
|
|
|
335
333
|
/**
|
|
336
334
|
* Picking one picture: the file dialog, a capture of the app view, or a paste.
|
|
@@ -444,11 +442,7 @@ function SingleField({
|
|
|
444
442
|
{value ? (
|
|
445
443
|
<div className="flex items-start gap-2">
|
|
446
444
|
{value.type.startsWith("image/") && preview ? (
|
|
447
|
-
<img
|
|
448
|
-
src={preview}
|
|
449
|
-
alt={value.name}
|
|
450
|
-
className="h-20 w-20 rounded border border-subtle object-cover"
|
|
451
|
-
/>
|
|
445
|
+
<img src={preview} alt={value.name} className="h-20 w-20 rounded border border-subtle object-cover" />
|
|
452
446
|
) : (
|
|
453
447
|
// Non-image attachments (PDF, text) can't preview as an <img>, so
|
|
454
448
|
// show a neutral file tile with the name/size beside it instead.
|
|
@@ -458,9 +452,7 @@ function SingleField({
|
|
|
458
452
|
)}
|
|
459
453
|
<div className="min-w-0 flex-1">
|
|
460
454
|
<div className="truncate-until-large text-sm text-secondary">{value.name}</div>
|
|
461
|
-
<div className="text-xs text-muted">
|
|
462
|
-
{fileText.size(value.size)}
|
|
463
|
-
</div>
|
|
455
|
+
<div className="text-xs text-muted">{fileText.size(value.size)}</div>
|
|
464
456
|
</div>
|
|
465
457
|
<RemoveButton label={text.attachmentRemove} onClick={() => onChange(null)} disabled={disabled} />
|
|
466
458
|
</div>
|
|
@@ -489,9 +481,7 @@ function SingleField({
|
|
|
489
481
|
</div>
|
|
490
482
|
{/* Said out loud, because a gesture with no affordance is a gesture
|
|
491
483
|
nobody finds. */}
|
|
492
|
-
<p className="text-xs text-muted">
|
|
493
|
-
{text.attachmentPaste}
|
|
494
|
-
</p>
|
|
484
|
+
<p className="text-xs text-muted">{text.attachmentPaste}</p>
|
|
495
485
|
</div>
|
|
496
486
|
)}
|
|
497
487
|
<input
|
|
@@ -614,8 +604,7 @@ function MultipleField({
|
|
|
614
604
|
const root = rootRef.current;
|
|
615
605
|
if (!root) return;
|
|
616
606
|
const removes = root.querySelectorAll<HTMLElement>("[data-attachment-remove]");
|
|
617
|
-
const target =
|
|
618
|
-
removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
|
|
607
|
+
const target = removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
|
|
619
608
|
target?.focus();
|
|
620
609
|
}, [value, screenshot]);
|
|
621
610
|
|
|
@@ -650,7 +639,9 @@ function MultipleField({
|
|
|
650
639
|
<div className="truncate-until-large text-xs text-muted">
|
|
651
640
|
{/* The screenshot's file name moves down here: still there for the
|
|
652
641
|
reporter who wants to know what will be sent, not its title. */}
|
|
653
|
-
{chip.screenshot
|
|
642
|
+
{chip.screenshot
|
|
643
|
+
? `${chip.file.name} · ${fileText.size(chip.file.size)}`
|
|
644
|
+
: fileText.size(chip.file.size)}
|
|
654
645
|
</div>
|
|
655
646
|
</div>
|
|
656
647
|
<RemoveButton
|
|
@@ -692,9 +683,7 @@ function MultipleField({
|
|
|
692
683
|
)}
|
|
693
684
|
</div>
|
|
694
685
|
)}
|
|
695
|
-
<p className="text-xs text-muted">
|
|
696
|
-
{room > 0 ? text.attachmentPaste : limitLabel(max)}
|
|
697
|
-
</p>
|
|
686
|
+
<p className="text-xs text-muted">{room > 0 ? text.attachmentPaste : limitLabel(max)}</p>
|
|
698
687
|
<input
|
|
699
688
|
ref={fileInputRef}
|
|
700
689
|
type="file"
|
|
@@ -857,8 +846,7 @@ function RefsField({
|
|
|
857
846
|
const root = rootRef.current;
|
|
858
847
|
if (!root) return;
|
|
859
848
|
const removes = root.querySelectorAll<HTMLElement>("[data-attachment-remove]");
|
|
860
|
-
const target =
|
|
861
|
-
removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
|
|
849
|
+
const target = removes[index] ?? root.querySelector<HTMLElement>("[data-attachment-action]") ?? removes[index - 1];
|
|
862
850
|
target?.focus();
|
|
863
851
|
}, [value]);
|
|
864
852
|
|
|
@@ -973,18 +961,18 @@ function RefsField({
|
|
|
973
961
|
function RefGlyph({ type }: { type?: string }) {
|
|
974
962
|
return (
|
|
975
963
|
<span className="flex size-12 shrink-0 items-center justify-center rounded border border-subtle bg-surface-2 text-placeholder">
|
|
976
|
-
{type?.startsWith("image/") ?
|
|
964
|
+
{type?.startsWith("image/") ? (
|
|
965
|
+
<ImageIcon aria-hidden className="size-6" />
|
|
966
|
+
) : (
|
|
967
|
+
<FileText aria-hidden className="size-6" />
|
|
968
|
+
)}
|
|
977
969
|
</span>
|
|
978
970
|
);
|
|
979
971
|
}
|
|
980
972
|
|
|
981
973
|
function Heading({ text, className }: { text?: string; className?: string }) {
|
|
982
974
|
if (!text) return null;
|
|
983
|
-
return (
|
|
984
|
-
<div className={cn("mb-1 text-xs font-medium uppercase tracking-wide text-muted", className)}>
|
|
985
|
-
{text}
|
|
986
|
-
</div>
|
|
987
|
-
);
|
|
975
|
+
return <div className={cn("mb-1 text-xs font-medium uppercase tracking-wide text-muted", className)}>{text}</div>;
|
|
988
976
|
}
|
|
989
977
|
|
|
990
978
|
function CaptureButton({
|
|
@@ -1064,7 +1052,6 @@ function RemoveButton({
|
|
|
1064
1052
|
);
|
|
1065
1053
|
}
|
|
1066
1054
|
|
|
1067
|
-
|
|
1068
1055
|
/**
|
|
1069
1056
|
* The {@link FeedbackAttachmentErrorInfo} builder of one field: its limits, and the
|
|
1070
1057
|
* sentence for each refusal. The sentences are the `filePicker` namespace's — the ones
|
|
@@ -260,7 +260,9 @@ export interface CaptureAppScreenshotOptions {
|
|
|
260
260
|
* Call it from the "Capture screenshot" button's own click and nowhere else (keksdose
|
|
261
261
|
* checked: running it at dialog OPEN was suspected and was never the cause of the wait).
|
|
262
262
|
*/
|
|
263
|
-
export async function captureAppScreenshot({
|
|
263
|
+
export async function captureAppScreenshot({
|
|
264
|
+
rootId = "root",
|
|
265
|
+
}: CaptureAppScreenshotOptions = {}): Promise<File | null> {
|
|
264
266
|
let domToBlob: (typeof import("modern-screenshot"))["domToBlob"];
|
|
265
267
|
try {
|
|
266
268
|
({ domToBlob } = await import("modern-screenshot"));
|
|
@@ -128,10 +128,7 @@ type Entry = { at: number; order: number; message: FeedbackThreadMessage };
|
|
|
128
128
|
|
|
129
129
|
/** The admin's Hide / Unhide as a promise — a sync throw or a `void` return included —
|
|
130
130
|
* so the click can catch it as Delete's does. */
|
|
131
|
-
const hideComment = async (
|
|
132
|
-
onHide: NonNullable<FeedbackCommentThreadProps["onHide"]>,
|
|
133
|
-
comment: FeedbackComment,
|
|
134
|
-
) => {
|
|
131
|
+
const hideComment = async (onHide: NonNullable<FeedbackCommentThreadProps["onHide"]>, comment: FeedbackComment) => {
|
|
135
132
|
await onHide(comment, !comment.hidden);
|
|
136
133
|
};
|
|
137
134
|
|
|
@@ -186,7 +183,10 @@ export function FeedbackCommentThread({
|
|
|
186
183
|
? [{ name: attachmentName(reply.attachment_url), url: reply.attachment_url }]
|
|
187
184
|
: undefined,
|
|
188
185
|
badge: (
|
|
189
|
-
<span
|
|
186
|
+
<span
|
|
187
|
+
className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1"
|
|
188
|
+
data-feedback-entry-kind="rework"
|
|
189
|
+
>
|
|
190
190
|
<FeedbackReworkEntryChip />
|
|
191
191
|
{reply.status_to && (
|
|
192
192
|
<span className="inline-flex items-center gap-1" data-feedback-reply-status={reply.status_to}>
|
|
@@ -215,7 +215,10 @@ export function FeedbackCommentThread({
|
|
|
215
215
|
: undefined,
|
|
216
216
|
staff: true,
|
|
217
217
|
badge: reply.status_to ? (
|
|
218
|
-
<span
|
|
218
|
+
<span
|
|
219
|
+
className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1"
|
|
220
|
+
data-feedback-reply-status={reply.status_to}
|
|
221
|
+
>
|
|
219
222
|
<span className="sr-only">{replyLabels.statusChanged}</span>
|
|
220
223
|
<span aria-hidden>→</span>
|
|
221
224
|
<FeedbackStatusBadge status={reply.status_to} />
|
|
@@ -179,10 +179,7 @@ export function FeedbackContextBox({
|
|
|
179
179
|
const lead = line.endsWith(submitter) ? line.slice(0, line.length - submitter.length) : null;
|
|
180
180
|
return (
|
|
181
181
|
<div
|
|
182
|
-
className={cn(
|
|
183
|
-
"space-y-1 rounded-md border border-subtle bg-surface-2 px-3 py-2 text-xs text-muted",
|
|
184
|
-
className,
|
|
185
|
-
)}
|
|
182
|
+
className={cn("space-y-1 rounded-md border border-subtle bg-surface-2 px-3 py-2 text-xs text-muted", className)}
|
|
186
183
|
>
|
|
187
184
|
<div className="[overflow-wrap:anywhere]">
|
|
188
185
|
{lead === null ? (
|
|
@@ -251,16 +251,15 @@ export function FeedbackDialog(props: FeedbackDialogProps) {
|
|
|
251
251
|
const [files, setFiles] = useState<File[]>([]);
|
|
252
252
|
const isMobile = usePhoneLayout();
|
|
253
253
|
const noticeId = useId();
|
|
254
|
-
const hasNotice =
|
|
254
|
+
const hasNotice =
|
|
255
|
+
publicNotice !== undefined && publicNotice !== null && publicNotice !== false && publicNotice !== "";
|
|
255
256
|
const labels = useKitLabels("feedbackDialog", DEFAULT_FEEDBACK_DIALOG_LABELS, labelsProp);
|
|
256
257
|
const attachmentText = useKitLabels("feedbackAttachment", DEFAULT_FEEDBACK_ATTACHMENT_LABELS, labelsProp);
|
|
257
258
|
// Under `multiple` the heading is `attachmentList` — a screenshot AND photos — which
|
|
258
259
|
// also names the chip list beneath it: one string, so the two cannot disagree. Its old
|
|
259
260
|
// second name, `feedbackDialog.attachments`, went in 0.34.
|
|
260
261
|
const listHeading =
|
|
261
|
-
labelsProp?.attachmentList ??
|
|
262
|
-
attachmentText.attachmentList ??
|
|
263
|
-
DEFAULT_FEEDBACK_ATTACHMENT_LABELS.attachmentList!;
|
|
262
|
+
labelsProp?.attachmentList ?? attachmentText.attachmentList ?? DEFAULT_FEEDBACK_ATTACHMENT_LABELS.attachmentList!;
|
|
264
263
|
// The attachment field resolves its own keys from `feedbackAttachment`; it gets the
|
|
265
264
|
// prop's (so a caller's `attachmentAdd` still wins) plus the resolved heading.
|
|
266
265
|
const attachmentLabels =
|
|
@@ -239,9 +239,7 @@ export function FeedbackStatusTransitions({
|
|
|
239
239
|
variant === "icon"
|
|
240
240
|
? cn(
|
|
241
241
|
"flex size-7 items-center justify-center rounded",
|
|
242
|
-
active
|
|
243
|
-
? cn(meta.activeBg, meta.activeText)
|
|
244
|
-
: "text-placeholder hover:text-secondary",
|
|
242
|
+
active ? cn(meta.activeBg, meta.activeText) : "text-placeholder hover:text-secondary",
|
|
245
243
|
)
|
|
246
244
|
: cn(
|
|
247
245
|
"inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs font-medium",
|
|
@@ -529,9 +527,7 @@ export function FeedbackDetailSection({
|
|
|
529
527
|
return (
|
|
530
528
|
<div>
|
|
531
529
|
<div className="mb-1 flex items-center justify-between gap-2">
|
|
532
|
-
<div className="text-xs font-medium uppercase tracking-wide text-muted">
|
|
533
|
-
{title}
|
|
534
|
-
</div>
|
|
530
|
+
<div className="text-xs font-medium uppercase tracking-wide text-muted">{title}</div>
|
|
535
531
|
{action}
|
|
536
532
|
</div>
|
|
537
533
|
{children}
|
|
@@ -552,7 +548,5 @@ export function FeedbackDetail({ children, className }: { children: ReactNode; c
|
|
|
552
548
|
* carry the entire "this arrived after the answer" reading. */
|
|
553
549
|
export function FeedbackProse({ children, empty }: { children?: string; empty?: ReactNode }) {
|
|
554
550
|
if (!children) return <p className="text-placeholder">{empty ?? "—"}</p>;
|
|
555
|
-
return
|
|
556
|
-
<p className="whitespace-pre-wrap text-secondary">{children}</p>
|
|
557
|
-
);
|
|
551
|
+
return <p className="whitespace-pre-wrap text-secondary">{children}</p>;
|
|
558
552
|
}
|
|
@@ -12,7 +12,13 @@ import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
|
|
|
12
12
|
import { cn } from "../lib/cn";
|
|
13
13
|
import { FILL_HEIGHT_CLASS } from "../shell/fill-height";
|
|
14
14
|
import { EMPTY_FORMATTED_VALUE } from "../lib/format";
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
FeedbackCategoryBadge,
|
|
17
|
+
FeedbackDetail,
|
|
18
|
+
FeedbackDetailSection,
|
|
19
|
+
FeedbackProse,
|
|
20
|
+
FeedbackStatusBadge,
|
|
21
|
+
} from "./feedback-inbox";
|
|
16
22
|
import { useFeedbackCategoryLabels } from "./feedback-labels";
|
|
17
23
|
import { FeedbackCommentThread, type FeedbackCommentsLabels } from "./feedback-comment-thread";
|
|
18
24
|
import type { FeedbackEntryUploadOptions } from "./feedback-entry-file";
|
|
@@ -161,11 +161,7 @@ export const DEFAULT_MAX_ATTACHMENTS = 5;
|
|
|
161
161
|
* A plain array (not frozen) because `accept` takes `string[]`, as
|
|
162
162
|
* `DEFAULT_ATTACHMENT_ACCEPT` does — copy it before changing it.
|
|
163
163
|
*/
|
|
164
|
-
export const FEEDBACK_ATTACHMENT_ACCEPT: string[] = [
|
|
165
|
-
...DEFAULT_ATTACHMENT_ACCEPT,
|
|
166
|
-
"application/pdf",
|
|
167
|
-
"text/plain",
|
|
168
|
-
];
|
|
164
|
+
export const FEEDBACK_ATTACHMENT_ACCEPT: string[] = [...DEFAULT_ATTACHMENT_ACCEPT, "application/pdf", "text/plain"];
|
|
169
165
|
|
|
170
166
|
/**
|
|
171
167
|
* The categories a person can pick — every one but `CRASH`, in triage order (Bug, Idea,
|
|
@@ -305,12 +301,7 @@ export function feedbackAttachmentLine(url: string): string {
|
|
|
305
301
|
* something foreign — and written anyway it would sit in the body as prose that no
|
|
306
302
|
* reader recognises as a file.
|
|
307
303
|
*/
|
|
308
|
-
export function appendRework(
|
|
309
|
-
body: string,
|
|
310
|
-
note: string,
|
|
311
|
-
url?: string | null,
|
|
312
|
-
now: Date = new Date(),
|
|
313
|
-
): string | null {
|
|
304
|
+
export function appendRework(body: string, note: string, url?: string | null, now: Date = new Date()): string | null {
|
|
314
305
|
const text = note.trim();
|
|
315
306
|
if (!text) return null;
|
|
316
307
|
if (url && !ATTACHMENT_URL.test(url)) {
|
|
@@ -339,9 +330,10 @@ export function reworkCount(body: string): number {
|
|
|
339
330
|
* before server-kit 0.13, whose reworks are still `--- REWORK … ---` blocks). What the
|
|
340
331
|
* Rework chip counts.
|
|
341
332
|
*/
|
|
342
|
-
export function feedbackReworkCount(
|
|
343
|
-
|
|
344
|
-
|
|
333
|
+
export function feedbackReworkCount(row: {
|
|
334
|
+
body?: string | null;
|
|
335
|
+
replies?: readonly Pick<FeedbackReply, "kind">[] | null;
|
|
336
|
+
}): number {
|
|
345
337
|
if (row.replies) {
|
|
346
338
|
const entries = row.replies.filter((reply) => reply.kind === "rework").length;
|
|
347
339
|
// A row migrated by an app that answers `replies` but not yet `kind` keeps its body's
|
|
@@ -102,7 +102,10 @@ export interface FeedbackReplyTimelineProps {
|
|
|
102
102
|
function EntryStatus({ reply, statusChanged }: { reply: FeedbackReply; statusChanged: string }) {
|
|
103
103
|
if (!reply.status_to) return null;
|
|
104
104
|
return (
|
|
105
|
-
<span
|
|
105
|
+
<span
|
|
106
|
+
className="inline-flex min-w-0 max-w-full flex-wrap items-center gap-1"
|
|
107
|
+
data-feedback-reply-status={reply.status_to}
|
|
108
|
+
>
|
|
106
109
|
<span className="sr-only">{statusChanged}</span>
|
|
107
110
|
{reply.status_from && reply.status_from !== reply.status_to && (
|
|
108
111
|
<>
|
|
@@ -167,7 +170,11 @@ export function FeedbackReplyTimeline({
|
|
|
167
170
|
</time>
|
|
168
171
|
<EntryStatus reply={reply} statusChanged={labels.statusChanged} />
|
|
169
172
|
</div>
|
|
170
|
-
<p
|
|
173
|
+
<p
|
|
174
|
+
data-private={priv}
|
|
175
|
+
dir="auto"
|
|
176
|
+
className="mt-0.5 whitespace-pre-wrap break-words text-start text-primary"
|
|
177
|
+
>
|
|
171
178
|
{reply.body}
|
|
172
179
|
</p>
|
|
173
180
|
{reply.attachment_url && (
|
|
@@ -312,9 +319,7 @@ export function FeedbackReplyComposer({
|
|
|
312
319
|
aria-label={labels.status}
|
|
313
320
|
value={picked}
|
|
314
321
|
disabled={pending || uploading}
|
|
315
|
-
onChange={(event) =>
|
|
316
|
-
setPick({ under: suggestedStatus, value: event.target.value as FeedbackStatus | "" })
|
|
317
|
-
}
|
|
322
|
+
onChange={(event) => setPick({ under: suggestedStatus, value: event.target.value as FeedbackStatus | "" })}
|
|
318
323
|
data-feedback-reply-status-pick=""
|
|
319
324
|
>
|
|
320
325
|
<option value="">{labels.noChange}</option>
|
|
@@ -234,8 +234,7 @@ export function feedbackPageUrl(context: FeedbackContext | null | undefined): st
|
|
|
234
234
|
* keyed by URL, a React key clash keksdose had).
|
|
235
235
|
*/
|
|
236
236
|
export function feedbackAttachmentUrls(
|
|
237
|
-
row: Pick<FeedbackRecord, "screenshot_url" | "attachment_urls" | "body"> &
|
|
238
|
-
Partial<Pick<FeedbackRecord, "replies">>,
|
|
237
|
+
row: Pick<FeedbackRecord, "screenshot_url" | "attachment_urls" | "body"> & Partial<Pick<FeedbackRecord, "replies">>,
|
|
239
238
|
): string[] {
|
|
240
239
|
const urls = [
|
|
241
240
|
...(row.screenshot_url ? [row.screenshot_url] : []),
|
|
@@ -695,9 +694,7 @@ export function FeedbackRowDetail({
|
|
|
695
694
|
<FeedbackDetailSection title={labels.subject}>
|
|
696
695
|
<p className="flex flex-wrap items-center gap-x-2 gap-y-1 text-sm" data-feedback-subject="">
|
|
697
696
|
<FeedbackCategoryBadge category={row.category} />
|
|
698
|
-
<span className="min-w-0 font-medium text-primary [overflow-wrap:anywhere]">
|
|
699
|
-
{row.title}
|
|
700
|
-
</span>
|
|
697
|
+
<span className="min-w-0 font-medium text-primary [overflow-wrap:anywhere]">{row.title}</span>
|
|
701
698
|
</p>
|
|
702
699
|
</FeedbackDetailSection>
|
|
703
700
|
)}
|
|
@@ -37,10 +37,7 @@ export interface FeedbackStatusPatch {
|
|
|
37
37
|
* Failure is the mutation's own business: its `onError` toasts the server's `detail`,
|
|
38
38
|
* else `feedbackToast.updateFailed` (§4.4) — this hook adds no second error toast.
|
|
39
39
|
*/
|
|
40
|
-
export type FeedbackStatusMutate = (
|
|
41
|
-
patch: FeedbackStatusPatch,
|
|
42
|
-
callbacks: { onSuccess: () => void },
|
|
43
|
-
) => void;
|
|
40
|
+
export type FeedbackStatusMutate = (patch: FeedbackStatusPatch, callbacks: { onSuccess: () => void }) => void;
|
|
44
41
|
|
|
45
42
|
/** What the change needs to know about the row: which one, what it is called in the
|
|
46
43
|
* toast, and where it stood (the status Undo goes back to). */
|
|
@@ -107,12 +107,12 @@ export function FeedbackSubmitDialog({
|
|
|
107
107
|
)
|
|
108
108
|
}
|
|
109
109
|
onCaptureScreenshot={onCaptureScreenshot}
|
|
110
|
-
publicNotice={
|
|
111
|
-
publicNotice ? (dialogText.publicNotice ?? DEFAULT_FEEDBACK_DIALOG_LABELS.publicNotice) : undefined
|
|
112
|
-
}
|
|
110
|
+
publicNotice={publicNotice ? (dialogText.publicNotice ?? DEFAULT_FEEDBACK_DIALOG_LABELS.publicNotice) : undefined}
|
|
113
111
|
// The context is read off the very values the box below shows (§3.2).
|
|
114
112
|
onSubmit={(data) => onSubmit(data, feedbackContext({ user, attachUrl, url, environment, version }))}
|
|
115
|
-
contextSlot={
|
|
113
|
+
contextSlot={
|
|
114
|
+
<FeedbackContextBox user={user} url={url} attachUrl={attachUrl} onAttachUrlChange={onAttachUrlChange} />
|
|
115
|
+
}
|
|
116
116
|
/>
|
|
117
117
|
);
|
|
118
118
|
}
|
|
@@ -29,7 +29,12 @@ import {
|
|
|
29
29
|
type FeedbackCategoryLabels,
|
|
30
30
|
type FeedbackStatusLabels,
|
|
31
31
|
} from "./feedback-labels";
|
|
32
|
-
import {
|
|
32
|
+
import {
|
|
33
|
+
FEEDBACK_AWAITING_STATUSES,
|
|
34
|
+
feedbackReworkCount,
|
|
35
|
+
type FeedbackContext,
|
|
36
|
+
type FeedbackRecord,
|
|
37
|
+
} from "./feedback-record";
|
|
33
38
|
import type { FeedbackStatusChange } from "./feedback-status-undo";
|
|
34
39
|
import { feedbackPageHref, feedbackPagePath } from "./feedback-row-detail";
|
|
35
40
|
import type { CommitScope } from "../components/write-lock";
|
|
@@ -356,8 +361,7 @@ function FeedbackPageLinkCell({ context, openPage }: { context: FeedbackContext
|
|
|
356
361
|
<>
|
|
357
362
|
{/* The space outside the hidden span: a flex container drops it from the layout,
|
|
358
363
|
and the accessible name keeps it ("Open page /accounts"). */}
|
|
359
|
-
<span className="sr-only">{openPage}</span>
|
|
360
|
-
<code className="min-w-0 truncate text-xs">{path}</code>
|
|
364
|
+
<span className="sr-only">{openPage}</span> <code className="min-w-0 truncate text-xs">{path}</code>
|
|
361
365
|
<ExternalLink className="size-3 shrink-0" aria-hidden />
|
|
362
366
|
</>
|
|
363
367
|
);
|
|
@@ -568,9 +572,7 @@ export function feedbackColumns<T extends FeedbackTableRow>({
|
|
|
568
572
|
// Name AND email, so either finds the person; the erased ones by the placeholder
|
|
569
573
|
// (their context holds no name any more).
|
|
570
574
|
filterBy: (row) =>
|
|
571
|
-
row.user_id == null
|
|
572
|
-
? labels.deletedUser
|
|
573
|
-
: `${feedbackSubmitter(row, labels)} ${feedbackSubmitterEmail(row)}`,
|
|
575
|
+
row.user_id == null ? labels.deletedUser : `${feedbackSubmitter(row, labels)} ${feedbackSubmitterEmail(row)}`,
|
|
574
576
|
// Sixth to go (0.51.4, Kurvenschmiede): with only 1–5, Subject reached its floor while
|
|
575
577
|
// #, Date and User were still drawn, and the inbox scrolled sideways from 768 to
|
|
576
578
|
// ~1115px beside an open sidebar. The open report names the submitter.
|
|
@@ -654,8 +656,10 @@ export function feedbackColumns<T extends FeedbackTableRow>({
|
|
|
654
656
|
|
|
655
657
|
/** What {@link useFeedbackColumns} takes: {@link FeedbackColumnsOptions} with the words
|
|
656
658
|
* read from the provider, and `renderDate` optional. */
|
|
657
|
-
export interface UseFeedbackColumnsOptions
|
|
658
|
-
|
|
659
|
+
export interface UseFeedbackColumnsOptions extends Omit<
|
|
660
|
+
FeedbackColumnsOptions,
|
|
661
|
+
"renderDate" | "labels" | "statusLabels" | "categoryLabels" | "votesHeader"
|
|
662
|
+
> {
|
|
659
663
|
/** Default: the kit's date with the weekday ({@link useFeedbackRenderDate}). */
|
|
660
664
|
renderDate?: FeedbackRenderDate;
|
|
661
665
|
/** Over the `feedbackPage` namespace. Keep it stable (module scope or memoised): it is
|
|
@@ -18,10 +18,7 @@ import { FeedbackAttachmentField } from "./feedback-attachment";
|
|
|
18
18
|
import type { FeedbackAttachmentFieldSingleProps } from "./feedback-attachment";
|
|
19
19
|
import type { FeedbackNoteAttachment } from "./feedback-inbox";
|
|
20
20
|
import type { FeedbackAttachmentLabels } from "./feedback-dialog";
|
|
21
|
-
import {
|
|
22
|
-
DEFAULT_FEEDBACK_COMPOSER_LABELS,
|
|
23
|
-
DEFAULT_FEEDBACK_THREAD_LABELS,
|
|
24
|
-
} from "./feedback-thread-labels";
|
|
21
|
+
import { DEFAULT_FEEDBACK_COMPOSER_LABELS, DEFAULT_FEEDBACK_THREAD_LABELS } from "./feedback-thread-labels";
|
|
25
22
|
|
|
26
23
|
/**
|
|
27
24
|
* The conversation under a report: who said what, when, with what attached — and the
|
|
@@ -217,12 +214,7 @@ export function FeedbackThread({
|
|
|
217
214
|
}
|
|
218
215
|
if (messages.length === 0) {
|
|
219
216
|
return (
|
|
220
|
-
<EmptyState
|
|
221
|
-
variant="inline"
|
|
222
|
-
size="sm"
|
|
223
|
-
title={empty ?? labels.empty}
|
|
224
|
-
className={cn("justify-start", className)}
|
|
225
|
-
/>
|
|
217
|
+
<EmptyState variant="inline" size="sm" title={empty ?? labels.empty} className={cn("justify-start", className)} />
|
|
226
218
|
);
|
|
227
219
|
}
|
|
228
220
|
|
|
@@ -288,9 +280,7 @@ export function FeedbackThread({
|
|
|
288
280
|
<article
|
|
289
281
|
className={cn(
|
|
290
282
|
"max-w-[85%] min-w-0 rounded-lg px-3 py-2 text-sm",
|
|
291
|
-
message.own
|
|
292
|
-
? "rounded-ee-sm bg-brand-soft"
|
|
293
|
-
: "rounded-es-sm bg-surface-2",
|
|
283
|
+
message.own ? "rounded-ee-sm bg-brand-soft" : "rounded-es-sm bg-surface-2",
|
|
294
284
|
)}
|
|
295
285
|
>
|
|
296
286
|
<header className="mb-0.5 flex flex-wrap items-center gap-x-2 gap-y-0.5 text-caption text-muted">
|
|
@@ -361,9 +351,7 @@ function DefaultAttachment({
|
|
|
361
351
|
{/* A file name wraps from Large up, as the attachments of the composer do (text
|
|
362
352
|
size §10.17; round 0.34 T1: the sweep read "export-20…"). */}
|
|
363
353
|
<span className="min-w-0 truncate-until-large">{name}</span>
|
|
364
|
-
{attachment.size !== undefined && (
|
|
365
|
-
<span className="shrink-0 text-muted">{size(attachment.size)}</span>
|
|
366
|
-
)}
|
|
354
|
+
{attachment.size !== undefined && <span className="shrink-0 text-muted">{size(attachment.size)}</span>}
|
|
367
355
|
</>
|
|
368
356
|
);
|
|
369
357
|
const chip =
|