@eifi1/ui-kit 0.51.7 → 0.53.0
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 +178 -67
- package/dist/account/account-parts.d.ts +10 -8
- package/dist/account/account-parts.js +1 -18
- package/dist/account/account-parts.js.map +1 -1
- package/dist/account/data-export-setting-labels.js +1 -1
- package/dist/account/data-export-setting-labels.js.map +1 -1
- package/dist/account/delete-account-setting-labels.js +1 -1
- package/dist/account/delete-account-setting-labels.js.map +1 -1
- package/dist/account/email-change-setting-labels.js +1 -1
- package/dist/account/email-change-setting-labels.js.map +1 -1
- package/dist/account/passkeys-setting.d.ts +9 -2
- package/dist/account/passkeys-setting.js +41 -29
- package/dist/account/passkeys-setting.js.map +1 -1
- package/dist/account/sessions-setting.d.ts +3 -2
- package/dist/account/sessions-setting.js +10 -8
- 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-parts.d.ts +6 -3
- package/dist/admin/admin-parts.js +6 -21
- package/dist/admin/admin-parts.js.map +1 -1
- package/dist/admin/mail-test-card-labels.js +1 -1
- package/dist/admin/mail-test-card-labels.js.map +1 -1
- package/dist/admin/plan-change-labels.d.ts +2 -2
- package/dist/admin/plan-change-labels.js +1 -17
- package/dist/admin/plan-change-labels.js.map +1 -1
- package/dist/admin/plan-change.d.ts +3 -42
- package/dist/admin/plan-change.js +1 -1
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/reviewer-scope-editor.js +3 -3
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/auth/auth-errors-labels.d.ts +11 -0
- package/dist/auth/auth-errors-labels.js +13 -0
- package/dist/auth/auth-errors-labels.js.map +1 -0
- package/dist/auth/auth-errors.d.ts +7 -23
- package/dist/auth/auth-errors.js +2 -15
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/complete-name-dialog.js +2 -1
- package/dist/auth/complete-name-dialog.js.map +1 -1
- package/dist/auth/forgot-password-form-labels.js +1 -1
- package/dist/auth/forgot-password-form-labels.js.map +1 -1
- package/dist/auth/forgot-password-form.js +7 -2
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/register-form-labels.js +1 -1
- package/dist/auth/register-form-labels.js.map +1 -1
- package/dist/auth/reset-password-form-labels.js +1 -1
- package/dist/auth/reset-password-form-labels.js.map +1 -1
- package/dist/auth/reset-password-form.js +5 -1
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form-labels.js +1 -1
- package/dist/auth/sign-in-form-labels.js.map +1 -1
- package/dist/auth/status-parts.d.ts +0 -3
- package/dist/auth/status-parts.js +0 -4
- package/dist/auth/status-parts.js.map +1 -1
- package/dist/auth/verify-email-labels.js +1 -1
- package/dist/auth/verify-email-labels.js.map +1 -1
- package/dist/auth/verify-email.js +7 -2
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/cancel-subscription.d.ts +10 -7
- package/dist/billing/cancel-subscription.js +6 -6
- package/dist/billing/cancel-subscription.js.map +1 -1
- package/dist/billing/plan-card.d.ts +5 -3
- package/dist/billing/plan-card.js +7 -8
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-change-labels.d.ts +42 -0
- package/dist/billing/plan-change-labels.js +22 -0
- package/dist/billing/plan-change-labels.js.map +1 -0
- package/dist/billing/plan-switch.d.ts +9 -6
- package/dist/billing/plan-switch.js +7 -5
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/chart.d.ts +4 -3
- package/dist/chart.js +72 -4
- package/dist/chart.js.map +1 -1
- package/dist/components/account-chips.d.ts +5 -5
- package/dist/components/account-chips.js +11 -13
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.d.ts +16 -5
- package/dist/components/alert-banner.js +46 -1
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +13 -0
- package/dist/components/amount-input.js +1 -0
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.js +57 -65
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.d.ts +12 -2
- package/dist/components/bulk-action-bar.js +65 -21
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-look.d.ts +5 -5
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/button.d.ts +2 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/chart-edge.d.ts +16 -0
- package/dist/components/chart-edge.js +14 -1
- package/dist/components/chart-edge.js.map +1 -1
- package/dist/components/chart-figure.d.ts +13 -0
- package/dist/components/chart-figure.js +15 -0
- package/dist/components/chart-figure.js.map +1 -0
- package/dist/components/chart-zoom-core.js +1 -4
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/chart.d.ts +8 -1
- package/dist/components/chart.js +19 -10
- package/dist/components/chart.js.map +1 -1
- package/dist/components/combobox-core.d.ts +111 -2
- package/dist/components/combobox-core.js +148 -42
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +1 -1
- package/dist/components/combobox.js +141 -130
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/copy-button.d.ts +6 -5
- package/dist/components/copy-button.js +5 -3
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.js +2 -2
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/data-table-column-settings.d.ts +1 -1
- package/dist/components/data-table-column-settings.js +33 -7
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +4 -2
- package/dist/components/data-table-filters.js +2 -2
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.d.ts +6 -4
- package/dist/components/data-table-fit.js +4 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-groups.d.ts +1 -1
- package/dist/components/data-table-groups.js.map +1 -1
- package/dist/components/data-table-head.d.ts +1 -1
- package/dist/components/data-table-head.js +15 -12
- package/dist/components/data-table-head.js.map +1 -1
- package/dist/components/data-table-mobile.d.ts +12 -7
- package/dist/components/data-table-mobile.js +43 -30
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table-pagination.js +11 -6
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-resize.d.ts +1 -1
- package/dist/components/data-table-resize.js.map +1 -1
- package/dist/components/data-table-row-actions.d.ts +2 -2
- package/dist/components/data-table-row-actions.js.map +1 -1
- package/dist/components/data-table-row.d.ts +6 -2
- package/dist/components/data-table-row.js +17 -10
- package/dist/components/data-table-row.js.map +1 -1
- package/dist/components/data-table-selection.d.ts +1 -1
- package/dist/components/data-table-selection.js.map +1 -1
- package/dist/components/data-table-shared.d.ts +10 -2
- package/dist/components/data-table-shared.js +18 -0
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table-sort.d.ts +21 -2
- package/dist/components/data-table-sort.js +24 -0
- package/dist/components/data-table-sort.js.map +1 -1
- package/dist/components/data-table-virtual.d.ts +1 -1
- package/dist/components/data-table-virtual.js +18 -6
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/data-table.d.ts +13 -4
- package/dist/components/data-table.js +139 -36
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-field.d.ts +25 -3
- package/dist/components/date-field.js +33 -8
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.d.ts +16 -3
- package/dist/components/date-picker.js +55 -26
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.d.ts +38 -24
- package/dist/components/date-range-picker.js +23 -7
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/error-boundary.js +37 -30
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
- package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
- package/dist/components/field-base-labels.js.map +1 -0
- package/dist/components/field-base.d.ts +4 -3
- package/dist/components/field-base.js +3 -3
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/form-actions.js +11 -5
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/hover-menu.d.ts +3 -0
- package/dist/components/hover-menu.js +5 -3
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-button.js +14 -9
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/inline-confirm.d.ts +43 -0
- package/dist/components/inline-confirm.js +67 -0
- package/dist/components/inline-confirm.js.map +1 -0
- package/dist/components/inline-entity-combobox.d.ts +4 -3
- package/dist/components/inline-entity-combobox.js +148 -140
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +28 -112
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal-page.d.ts +3 -1
- package/dist/components/legal-page.js +3 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +4 -2
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox.d.ts +2 -2
- package/dist/components/lightbox.js +17 -6
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/list.d.ts +6 -2
- package/dist/components/list.js +3 -2
- package/dist/components/list.js.map +1 -1
- package/dist/components/measured-grid.d.ts +1 -1
- package/dist/components/measured-grid.js +2 -1
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/mini-calendar.js +3 -5
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.js +3 -1
- package/dist/components/modal.js.map +1 -1
- package/dist/components/month-grid.d.ts +55 -0
- package/dist/components/month-grid.js +148 -0
- package/dist/components/month-grid.js.map +1 -0
- package/dist/components/month-picker.d.ts +36 -4
- package/dist/components/month-picker.js +123 -146
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-select.d.ts +2 -2
- package/dist/components/multi-select.js +11 -6
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/nav-pills.d.ts +1 -1
- package/dist/components/nav-pills.js.map +1 -1
- package/dist/components/picker-sheet.js +2 -1
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart-labels.d.ts +7 -0
- package/dist/components/pie-chart-labels.js +1 -0
- package/dist/components/pie-chart-labels.js.map +1 -1
- package/dist/components/pie-chart.d.ts +5 -3
- package/dist/components/pie-chart.js +7 -22
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.d.ts +3 -0
- package/dist/components/popover.js +7 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/row-actions.js +2 -1
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/series-chart-axes.d.ts +4 -4
- package/dist/components/series-chart-axes.js.map +1 -1
- package/dist/components/series-chart-labels.d.ts +7 -4
- package/dist/components/series-chart-labels.js.map +1 -1
- package/dist/components/series-chart.d.ts +92 -23
- package/dist/components/series-chart.js +74 -30
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/share-card.js +3 -3
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/tabs-labels.d.ts +2 -0
- package/dist/components/tabs-labels.js +11 -0
- package/dist/components/tabs-labels.js.map +1 -0
- package/dist/components/tabs.d.ts +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/toggle-legend.d.ts +2 -2
- package/dist/components/toggle-legend.js +6 -6
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/translation-review-editor.d.ts +4 -2
- package/dist/components/translation-review-editor.js +2 -3
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review.d.ts +2 -1
- package/dist/components/translation-review.js +2 -2
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/treemap-labels.d.ts +31 -0
- package/dist/components/treemap-labels.js +10 -0
- package/dist/components/treemap-labels.js.map +1 -0
- package/dist/components/treemap-layout.d.ts +62 -0
- package/dist/components/treemap-layout.js +126 -0
- package/dist/components/treemap-layout.js.map +1 -0
- package/dist/components/treemap.d.ts +167 -19
- package/dist/components/treemap.js +340 -100
- package/dist/components/treemap.js.map +1 -1
- package/dist/components/use-table-state.d.ts +5 -5
- package/dist/components/use-table-state.js +4 -1
- package/dist/components/use-table-state.js.map +1 -1
- package/dist/data-table.d.ts +1 -2
- package/dist/data-table.js +1 -4
- package/dist/data-table.js.map +1 -1
- package/dist/demo/demo-countdown.d.ts +0 -5
- package/dist/demo/demo-countdown.js +0 -4
- package/dist/demo/demo-countdown.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/eslint/role-utilities.d.ts +36 -7
- package/dist/eslint/role-utilities.js +42 -9
- package/dist/eslint/role-utilities.js.map +1 -1
- package/dist/feedback/feedback-dialog.d.ts +25 -16
- package/dist/feedback/feedback-dialog.js +6 -2
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-mutation.d.ts +18 -0
- package/dist/feedback/feedback-mutation.js +8 -0
- package/dist/feedback/feedback-mutation.js.map +1 -0
- package/dist/feedback/feedback-page-link.d.ts +53 -0
- package/dist/feedback/feedback-page-link.js +37 -0
- package/dist/feedback/feedback-page-link.js.map +1 -0
- package/dist/feedback/feedback-public-list.d.ts +8 -4
- package/dist/feedback/feedback-public-list.js +2 -2
- package/dist/feedback/feedback-public-list.js.map +1 -1
- package/dist/feedback/feedback-replies.d.ts +3 -1
- package/dist/feedback/feedback-replies.js +5 -4
- package/dist/feedback/feedback-replies.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.js +0 -3
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +33 -44
- package/dist/feedback/feedback-row-detail.js +28 -34
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.d.ts +17 -14
- package/dist/feedback/feedback-status-undo.js +10 -15
- package/dist/feedback/feedback-status-undo.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
- package/dist/feedback/feedback-submit-dialog.js +1 -1
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-submit.js +9 -3
- package/dist/feedback/feedback-submit.js.map +1 -1
- package/dist/feedback/feedback-swipe.d.ts +1 -1
- package/dist/feedback/feedback-swipe.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +21 -9
- package/dist/feedback/feedback-table.js +45 -25
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread-labels.d.ts +2 -2
- package/dist/feedback/feedback-thread-labels.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +15 -23
- package/dist/feedback/feedback-thread.js +2 -1
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback.d.ts +6 -6
- package/dist/feedback.js +90 -6
- package/dist/feedback.js.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts +35 -0
- package/dist/hooks/use-focus-trap.js +6 -4
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-hotkey.d.ts +5 -2
- package/dist/hooks/use-hotkey.js +5 -4
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-long-press.d.ts +7 -4
- package/dist/hooks/use-long-press.js +3 -0
- package/dist/hooks/use-long-press.js.map +1 -1
- package/dist/hooks/use-media-query.js +12 -4
- package/dist/hooks/use-media-query.js.map +1 -1
- package/dist/hooks/use-mounted.d.ts +22 -0
- package/dist/hooks/use-mounted.js +24 -0
- package/dist/hooks/use-mounted.js.map +1 -0
- package/dist/hooks/use-overlay-history.js +19 -3
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/defaults.js +4 -9
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +7 -18
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +9 -11
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +15 -64
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +7 -18
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +20 -27
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +9 -18
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +7 -19
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +8 -18
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +12 -2
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js +0 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +21 -23
- package/dist/index.js +50 -65
- package/dist/index.js.map +1 -1
- package/dist/landing/routing.d.ts +3 -1
- package/dist/landing/routing.js +4 -7
- package/dist/landing/routing.js.map +1 -1
- package/dist/lib/broadcast.d.ts +17 -0
- package/dist/lib/broadcast.js +30 -0
- package/dist/lib/broadcast.js.map +1 -0
- package/dist/lib/date-format.d.ts +37 -2
- package/dist/lib/date-format.js +34 -8
- package/dist/lib/date-format.js.map +1 -1
- package/dist/lib/day-format.d.ts +46 -0
- package/dist/lib/day-format.js +46 -0
- package/dist/lib/day-format.js.map +1 -0
- package/dist/lib/describe-failure.d.ts +14 -0
- package/dist/lib/describe-failure.js +9 -0
- package/dist/lib/describe-failure.js.map +1 -0
- package/dist/lib/direction.d.ts +16 -0
- package/dist/lib/direction.js +9 -1
- package/dist/lib/direction.js.map +1 -1
- package/dist/lib/focus-left.d.ts +63 -0
- package/dist/lib/focus-left.js +67 -0
- package/dist/lib/focus-left.js.map +1 -0
- package/dist/lib/format.js +5 -14
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/http-status.d.ts +24 -0
- package/dist/lib/http-status.js +14 -0
- package/dist/lib/http-status.js.map +1 -0
- package/dist/lib/intl-cache.d.ts +14 -0
- package/dist/lib/intl-cache.js +15 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/iso-day.d.ts +11 -0
- package/dist/lib/iso-day.js +8 -0
- package/dist/lib/iso-day.js.map +1 -0
- package/dist/lib/lazy-with-fallback.d.ts +31 -0
- package/dist/lib/lazy-with-fallback.js +40 -0
- package/dist/lib/lazy-with-fallback.js.map +1 -0
- package/dist/lib/path-pattern.d.ts +34 -0
- package/dist/lib/path-pattern.js +24 -0
- package/dist/lib/path-pattern.js.map +1 -0
- package/dist/lib/reduced-motion.d.ts +2 -1
- package/dist/lib/reduced-motion.js.map +1 -1
- package/dist/lib/round.d.ts +2 -1
- package/dist/lib/round.js +2 -1
- package/dist/lib/round.js.map +1 -1
- package/dist/lib/safe-storage.d.ts +24 -5
- package/dist/lib/safe-storage.js +27 -2
- package/dist/lib/safe-storage.js.map +1 -1
- package/dist/lib/session-refresh.js +1 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/share-format.d.ts +13 -0
- package/dist/lib/share-format.js +10 -0
- package/dist/lib/share-format.js.map +1 -0
- package/dist/lib/text-case.d.ts +17 -0
- package/dist/lib/text-case.js +8 -0
- package/dist/lib/text-case.js.map +1 -0
- package/dist/lib/text-match.d.ts +29 -0
- package/dist/lib/text-match.js +20 -2
- package/dist/lib/text-match.js.map +1 -1
- package/dist/lib/thenable.d.ts +13 -0
- package/dist/lib/thenable.js +8 -0
- package/dist/lib/thenable.js.map +1 -0
- package/dist/lib/translation-review.d.ts +7 -2
- package/dist/lib/translation-review.js +4 -4
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/notifications/device-zone-report.js +1 -1
- package/dist/notifications/device-zone-report.js.map +1 -1
- package/dist/notifications/notification-bell.d.ts +2 -1
- package/dist/notifications/notification-bell.js +3 -3
- package/dist/notifications/notification-bell.js.map +1 -1
- package/dist/notifications/notification-inbox.d.ts +10 -6
- package/dist/notifications/notification-inbox.js +26 -48
- package/dist/notifications/notification-inbox.js.map +1 -1
- package/dist/notifications/notification-parts.d.ts +3 -2
- package/dist/notifications/notification-parts.js +1 -3
- package/dist/notifications/notification-parts.js.map +1 -1
- package/dist/notifications/notification-types-setting.js +1 -1
- package/dist/notifications/notification-types-setting.js.map +1 -1
- package/dist/notifications/notifications-labels.d.ts +6 -0
- package/dist/notifications/notifications-labels.js +1 -0
- package/dist/notifications/notifications-labels.js.map +1 -1
- package/dist/notifications/push-device-setting.js +1 -1
- package/dist/notifications/push-device-setting.js.map +1 -1
- package/dist/notifications/push-devices-setting.d.ts +2 -1
- package/dist/notifications/push-devices-setting.js +27 -49
- package/dist/notifications/push-devices-setting.js.map +1 -1
- package/dist/notifications/quiet-hours-setting.d.ts +10 -3
- package/dist/notifications/quiet-hours-setting.js +65 -26
- package/dist/notifications/quiet-hours-setting.js.map +1 -1
- package/dist/notifications/unsubscribe-panel.js +4 -7
- package/dist/notifications/unsubscribe-panel.js.map +1 -1
- package/dist/notifications/use-push-device.d.ts +39 -1
- package/dist/notifications/use-push-device.js +28 -7
- package/dist/notifications/use-push-device.js.map +1 -1
- package/dist/offline/query-persistence.d.ts +3 -1
- package/dist/offline/query-persistence.js +19 -2
- package/dist/offline/query-persistence.js.map +1 -1
- package/dist/rhf/fields.d.ts +11 -4
- package/dist/rhf/fields.js.map +1 -1
- package/dist/search/command-palette.js +1 -1
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search.js +19 -9
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/search-index.d.ts +0 -6
- package/dist/search/search-index.js +0 -4
- package/dist/search/search-index.js.map +1 -1
- package/dist/search/use-command-key.d.ts +12 -1
- package/dist/search/use-command-key.js +3 -12
- package/dist/search/use-command-key.js.map +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/search.js +6 -1
- package/dist/search.js.map +1 -1
- package/dist/settings/use-settings-focus.js +1 -0
- package/dist/settings/use-settings-focus.js.map +1 -1
- package/dist/shell/account-menu-language.d.ts +5 -3
- package/dist/shell/account-menu-language.js +2 -2
- package/dist/shell/account-menu-language.js.map +1 -1
- package/dist/shell/account-menu-text-size.d.ts +9 -6
- package/dist/shell/account-menu-text-size.js +2 -2
- package/dist/shell/account-menu-text-size.js.map +1 -1
- package/dist/shell/app-shell.d.ts +0 -10
- package/dist/shell/app-shell.js +1 -7
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/company-switcher.d.ts +1 -1
- package/dist/shell/company-switcher.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +1 -1
- package/dist/shell/dev-menu.js +5 -18
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/top-bar-actions.d.ts +1 -1
- package/dist/shell/top-bar-actions.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.d.ts +1 -3
- package/dist/shell/top-bar-parts-labels.js +0 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell.d.ts +7 -10
- package/dist/shell.js +14 -23
- package/dist/shell.js.map +1 -1
- package/dist/sync/engine.d.ts +30 -4
- package/dist/sync/engine.js +172 -52
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync.d.ts +2 -2
- package/dist/sync.js +2 -10
- package/dist/sync.js.map +1 -1
- package/dist/testing/css-variables.js +3 -8
- package/dist/testing/css-variables.js.map +1 -1
- package/dist/theme/chart-palette.d.ts +0 -5
- package/dist/theme/chart-palette.js +0 -2
- package/dist/theme/chart-palette.js.map +1 -1
- package/dist/theme/contrast.d.ts +2 -1
- package/dist/theme/contrast.js +3 -8
- package/dist/theme/contrast.js.map +1 -1
- package/dist/theme/palette-store.js +6 -6
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js +3 -8
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +3 -6
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/tour/tour-catalogue.d.ts +7 -4
- package/dist/tour/tour-catalogue.js +12 -10
- package/dist/tour/tour-catalogue.js.map +1 -1
- package/dist/tour/tour-dock.d.ts +0 -2
- package/dist/tour/tour-dock.js +0 -2
- package/dist/tour/tour-dock.js.map +1 -1
- package/dist/tour/tour-gates.d.ts +4 -0
- package/dist/tour/tour-gates.js +14 -0
- package/dist/tour/tour-gates.js.map +1 -1
- package/dist/tour/tour-overlay.d.ts +27 -0
- package/dist/tour/tour-overlay.js +741 -0
- package/dist/tour/tour-overlay.js.map +1 -0
- package/dist/tour/tour.d.ts +13 -3
- package/dist/tour/tour.js +59 -781
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour/use-tour-progress.js +1 -1
- package/dist/tour/use-tour-progress.js.map +1 -1
- package/dist/wizard/stepper-nav.d.ts +5 -1
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.d.ts +6 -2
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.d.ts +3 -1
- package/dist/wizard/use-wizard.js.map +1 -1
- package/dist/wizard/validation.d.ts +3 -1
- package/dist/wizard/validation.js.map +1 -1
- package/package.json +10 -6
- package/src/account/account-parts.ts +5 -25
- package/src/account/data-export-setting-labels.ts +1 -1
- package/src/account/delete-account-setting-labels.ts +1 -1
- package/src/account/email-change-setting-labels.ts +1 -1
- package/src/account/passkeys-setting.tsx +60 -38
- package/src/account/sessions-setting.tsx +18 -12
- package/src/admin/admin-action-confirm.tsx +1 -5
- package/src/admin/admin-parts.ts +11 -25
- package/src/admin/mail-test-card-labels.ts +1 -1
- package/src/admin/plan-change-labels.ts +5 -23
- package/src/admin/plan-change.tsx +7 -44
- package/src/admin/reviewer-scope-editor.tsx +3 -3
- package/src/auth/auth-errors-labels.ts +23 -0
- package/src/auth/auth-errors.ts +11 -38
- package/src/auth/complete-name-dialog.tsx +4 -1
- package/src/auth/forgot-password-form-labels.ts +1 -1
- package/src/auth/forgot-password-form.tsx +11 -6
- package/src/auth/register-form-labels.ts +1 -1
- package/src/auth/reset-password-form-labels.ts +1 -1
- package/src/auth/reset-password-form.tsx +8 -4
- package/src/auth/sign-in-form-labels.ts +1 -1
- package/src/auth/status-parts.tsx +0 -6
- package/src/auth/verify-email-labels.ts +1 -1
- package/src/auth/verify-email.tsx +11 -6
- package/src/billing/cancel-subscription.tsx +15 -12
- package/src/billing/plan-card.tsx +18 -10
- package/src/billing/plan-change-labels.ts +66 -0
- package/src/billing/plan-switch.tsx +15 -12
- package/src/chart.ts +73 -6
- package/src/components/account-chips.tsx +20 -23
- package/src/components/alert-banner.tsx +82 -5
- package/src/components/amount-input.tsx +18 -7
- package/src/components/autocomplete.tsx +64 -70
- package/src/components/bulk-action-bar.tsx +70 -2
- package/src/components/button-look.ts +5 -5
- package/src/components/button.tsx +2 -2
- package/src/components/chart-edge.ts +34 -1
- package/src/components/chart-figure.tsx +35 -0
- package/src/components/chart-zoom-core.tsx +6 -5
- package/src/components/chart.tsx +26 -5
- package/src/components/combobox-core.tsx +293 -62
- package/src/components/combobox.tsx +183 -153
- package/src/components/copy-button.tsx +34 -23
- package/src/components/country-select.tsx +16 -11
- package/src/components/data-table-column-settings.tsx +52 -10
- package/src/components/data-table-filters.ts +6 -4
- package/src/components/data-table-fit.ts +19 -5
- package/src/components/data-table-groups.tsx +1 -1
- package/src/components/data-table-head.tsx +32 -22
- package/src/components/data-table-mobile.tsx +61 -26
- package/src/components/data-table-pagination.tsx +21 -6
- package/src/components/data-table-resize.ts +1 -1
- package/src/components/data-table-row-actions.tsx +3 -3
- package/src/components/data-table-row.tsx +25 -14
- package/src/components/data-table-selection.ts +1 -1
- package/src/components/data-table-shared.tsx +33 -1
- package/src/components/data-table-sort.ts +57 -2
- package/src/components/data-table-virtual.ts +32 -8
- package/src/components/data-table.tsx +239 -68
- package/src/components/date-field.tsx +66 -9
- package/src/components/date-picker.tsx +125 -49
- package/src/components/date-range-picker.tsx +71 -36
- package/src/components/error-boundary.tsx +53 -39
- package/src/components/field-base-labels.ts +20 -0
- package/src/components/field-base.tsx +13 -7
- package/src/components/form-actions.tsx +20 -5
- package/src/components/hover-menu.tsx +18 -8
- package/src/components/icon-button.tsx +14 -9
- package/src/components/inline-confirm.tsx +116 -0
- package/src/components/inline-entity-combobox.tsx +197 -153
- package/src/components/input.tsx +1 -1
- package/src/components/jump-calendar.tsx +30 -146
- package/src/components/legal-page.tsx +10 -7
- package/src/components/legal.tsx +4 -2
- package/src/components/lightbox.tsx +21 -8
- package/src/components/list.tsx +10 -4
- package/src/components/measured-grid.tsx +8 -4
- package/src/components/mini-calendar.tsx +6 -5
- package/src/components/modal.tsx +6 -1
- package/src/components/month-grid.tsx +229 -0
- package/src/components/month-picker.tsx +192 -200
- package/src/components/multi-select.tsx +21 -9
- package/src/components/nav-pills.tsx +1 -1
- package/src/components/picker-sheet.tsx +12 -9
- package/src/components/pie-chart-labels.ts +8 -0
- package/src/components/pie-chart.tsx +22 -28
- package/src/components/popover.tsx +18 -1
- package/src/components/row-actions.tsx +2 -1
- package/src/components/series-chart-axes.ts +9 -4
- package/src/components/series-chart-labels.ts +7 -4
- package/src/components/series-chart.tsx +253 -87
- package/src/components/share-card.tsx +6 -6
- package/src/components/tabs-labels.ts +13 -0
- package/src/components/tabs.tsx +2 -2
- package/src/components/toggle-legend.tsx +16 -11
- package/src/components/translation-review-editor.tsx +6 -5
- package/src/components/translation-review.tsx +4 -3
- package/src/components/treemap-labels.ts +47 -0
- package/src/components/treemap-layout.ts +210 -0
- package/src/components/treemap.tsx +780 -138
- package/src/components/use-table-state.ts +12 -9
- package/src/data-table.ts +1 -4
- package/src/demo/demo-countdown.ts +3 -8
- package/src/eslint/role-utilities.ts +97 -19
- package/src/feedback/feedback-dialog.tsx +30 -19
- package/src/feedback/feedback-mutation.ts +20 -0
- package/src/feedback/feedback-page-link.ts +90 -0
- package/src/feedback/feedback-public-list.tsx +13 -7
- package/src/feedback/feedback-replies.tsx +13 -6
- package/src/feedback/feedback-row-detail-labels.ts +0 -3
- package/src/feedback/feedback-row-detail.tsx +70 -84
- package/src/feedback/feedback-status-undo.ts +28 -28
- package/src/feedback/feedback-submit-dialog.tsx +2 -2
- package/src/feedback/feedback-submit.tsx +21 -7
- package/src/feedback/feedback-swipe.tsx +1 -1
- package/src/feedback/feedback-table.tsx +86 -38
- package/src/feedback/feedback-thread-labels.ts +2 -2
- package/src/feedback/feedback-thread.tsx +18 -26
- package/src/feedback.ts +89 -6
- package/src/hooks/use-focus-trap.ts +8 -24
- package/src/hooks/use-hotkey.ts +24 -7
- package/src/hooks/use-long-press.ts +16 -2
- package/src/hooks/use-media-query.ts +20 -4
- package/src/hooks/use-mounted.ts +39 -0
- package/src/hooks/use-overlay-history.ts +32 -3
- package/src/i18n/defaults.ts +4 -9
- package/src/i18n/german.ts +8 -19
- package/src/i18n/kit-labels.tsx +9 -11
- package/src/i18n/locales/es.ts +8 -19
- package/src/i18n/locales/fr.ts +21 -30
- package/src/i18n/locales/hu.ts +10 -19
- package/src/i18n/locales/it.ts +8 -20
- package/src/i18n/locales/zh.ts +9 -19
- package/src/i18n/review.ts +12 -2
- package/src/i18n/shared-labels.ts +0 -1
- package/src/index.ts +57 -49
- package/src/landing/routing.tsx +14 -10
- package/src/lib/broadcast.ts +52 -0
- package/src/lib/date-format.ts +89 -13
- package/src/lib/day-format.ts +96 -0
- package/src/lib/describe-failure.ts +18 -0
- package/src/lib/direction.ts +39 -0
- package/src/lib/focus-left.ts +156 -0
- package/src/lib/format.ts +5 -17
- package/src/lib/http-status.ts +38 -0
- package/src/lib/intl-cache.ts +25 -0
- package/src/lib/iso-day.ts +13 -0
- package/src/lib/lazy-with-fallback.ts +82 -0
- package/src/lib/path-pattern.ts +55 -0
- package/src/lib/reduced-motion.ts +2 -1
- package/src/lib/round.ts +7 -2
- package/src/lib/safe-storage.ts +48 -6
- package/src/lib/session-refresh.ts +1 -1
- package/src/lib/share-format.ts +18 -0
- package/src/lib/text-case.ts +19 -0
- package/src/lib/text-match.ts +57 -2
- package/src/lib/thenable.ts +19 -0
- package/src/lib/translation-review.ts +13 -5
- package/src/notifications/device-zone-report.ts +1 -1
- package/src/notifications/notification-bell.tsx +7 -4
- package/src/notifications/notification-inbox.tsx +40 -58
- package/src/notifications/notification-parts.tsx +3 -4
- package/src/notifications/notification-types-setting.tsx +1 -1
- package/src/notifications/notifications-labels.ts +7 -0
- package/src/notifications/push-device-setting.tsx +1 -1
- package/src/notifications/push-devices-setting.tsx +30 -55
- package/src/notifications/quiet-hours-setting.tsx +93 -31
- package/src/notifications/unsubscribe-panel.tsx +4 -7
- package/src/notifications/use-push-device.ts +76 -10
- package/src/offline/query-persistence.ts +35 -3
- package/src/rhf/fields.tsx +11 -4
- package/src/search/command-palette.tsx +2 -4
- package/src/search/global-search.tsx +36 -15
- package/src/search/search-index.ts +0 -15
- package/src/search/use-command-key.ts +13 -12
- package/src/search.ts +10 -1
- package/src/settings/use-settings-focus.ts +3 -0
- package/src/shell/account-menu-language.tsx +6 -4
- package/src/shell/account-menu-text-size.tsx +10 -7
- package/src/shell/app-shell.tsx +0 -13
- package/src/shell/company-switcher.tsx +1 -1
- package/src/shell/dev-menu.tsx +8 -22
- package/src/shell/top-bar-actions.tsx +1 -1
- package/src/shell/top-bar-parts-labels.ts +1 -4
- package/src/shell.ts +21 -17
- package/src/sync/engine.ts +339 -61
- package/src/sync.ts +2 -8
- package/src/testing/css-variables.ts +8 -9
- package/src/theme/chart-palette.ts +0 -2
- package/src/theme/contrast.ts +8 -9
- package/src/theme/palette-store.ts +9 -9
- package/src/theme/text-size.ts +6 -8
- package/src/theme/theme-store.ts +7 -9
- package/src/tour/tour-catalogue.tsx +26 -15
- package/src/tour/tour-dock.ts +0 -2
- package/src/tour/tour-gates.ts +23 -0
- package/src/tour/tour-overlay.tsx +1170 -0
- package/src/tour/tour.tsx +108 -1202
- package/src/tour/use-tour-progress.ts +1 -1
- package/src/wizard/stepper-nav.tsx +3 -1
- package/src/wizard/types.ts +11 -2
- package/src/wizard/use-wizard.ts +2 -1
- package/src/wizard/validation.ts +8 -2
- package/tokens.css +6 -5
- package/dist/components/field-sync-labels.d.ts +0 -2
- package/dist/components/field-sync-labels.js +0 -12
- package/dist/components/field-sync-labels.js.map +0 -1
- package/dist/components/field-sync.d.ts +0 -164
- package/dist/components/field-sync.js +0 -269
- package/dist/components/field-sync.js.map +0 -1
- package/dist/components/section-nav.d.ts +0 -37
- package/dist/components/section-nav.js +0 -33
- package/dist/components/section-nav.js.map +0 -1
- package/dist/components/sign-chip-labels.d.ts +0 -2
- package/dist/components/sign-chip-labels.js +0 -11
- package/dist/components/sign-chip-labels.js.map +0 -1
- package/dist/components/sign-chip.d.ts +0 -68
- package/dist/components/sign-chip.js +0 -47
- package/dist/components/sign-chip.js.map +0 -1
- package/dist/components/ui-labels.js.map +0 -1
- package/dist/lib/isin.d.ts +0 -28
- package/dist/lib/isin.js +0 -36
- package/dist/lib/isin.js.map +0 -1
- package/dist/shell/dev-switchers.d.ts +0 -6
- package/dist/shell/dev-switchers.js +0 -12
- package/dist/shell/dev-switchers.js.map +0 -1
- package/dist/shell/role-switcher.d.ts +0 -21
- package/dist/shell/role-switcher.js +0 -31
- package/dist/shell/role-switcher.js.map +0 -1
- package/src/components/field-sync-labels.ts +0 -13
- package/src/components/field-sync.tsx +0 -482
- package/src/components/section-nav.tsx +0 -65
- package/src/components/sign-chip-labels.ts +0 -12
- package/src/components/sign-chip.tsx +0 -124
- package/src/components/ui-labels.ts +0 -24
- package/src/lib/isin.ts +0 -62
- package/src/shell/dev-switchers.tsx +0 -18
- package/src/shell/role-switcher.tsx +0 -46
|
@@ -7,8 +7,9 @@ import { TextLink } from "../components/text-link";
|
|
|
7
7
|
import { toast } from "../components/toast";
|
|
8
8
|
import { Button } from "../components/button";
|
|
9
9
|
import type { AuthedFetcher } from "../hooks/use-authed-src";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import type { PathPattern } from "../landing/routing";
|
|
11
|
+
import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
|
|
12
|
+
import { useDayFormatter } from "../lib/day-format";
|
|
12
13
|
import { DEFAULT_MAX_ATTACHMENT_BYTES } from "./feedback-attachment";
|
|
13
14
|
import { DEFAULT_FEEDBACK_DIALOG_LABELS } from "./feedback-dialog";
|
|
14
15
|
import {
|
|
@@ -34,6 +35,8 @@ import {
|
|
|
34
35
|
splitDescription,
|
|
35
36
|
} from "./feedback-record";
|
|
36
37
|
import type { FeedbackContext, FeedbackRecord } from "./feedback-record";
|
|
38
|
+
import { runMutation } from "./feedback-mutation";
|
|
39
|
+
import { feedbackPage, feedbackPageLinkTarget } from "./feedback-page-link";
|
|
37
40
|
import { useFeedbackStatusUndo } from "./feedback-status-undo";
|
|
38
41
|
import type { FeedbackStatusChange } from "./feedback-status-undo";
|
|
39
42
|
import type { CommitScope } from "../components/write-lock";
|
|
@@ -130,16 +133,6 @@ export interface FeedbackDetailLabels {
|
|
|
130
133
|
/** On section 4's heading line once the row is settled, given the formatted
|
|
131
134
|
* `resolved_at` date. de-CH: "Erledigt am: {{date}}" */
|
|
132
135
|
resolvedAt: (date: string) => string;
|
|
133
|
-
/** The admin's button while there is no outcome. **Unused since 0.38** (the outcome is
|
|
134
|
-
* frozen, §9.7; a reply is written instead); kept for one release.
|
|
135
|
-
* de-CH: "Ergebnis hinzufügen" */
|
|
136
|
-
outcomeAdd: string;
|
|
137
|
-
/** The same button once there is one. Unused since 0.38, as `outcomeAdd`.
|
|
138
|
-
* de-CH: "Aktualisieren" */
|
|
139
|
-
outcomeUpdate: string;
|
|
140
|
-
/** The line above the outcome editor. Unused since 0.38, as `outcomeAdd`. de-CH: "Was wurde umgesetzt, entschieden oder
|
|
141
|
-
* warum nicht." */
|
|
142
|
-
outcomePlaceholder: string;
|
|
143
136
|
/** The button that opens section 5 on an answered row. de-CH: "Nacharbeit" */
|
|
144
137
|
rework: string;
|
|
145
138
|
/** Section 5's heading. de-CH: "Zur Nacharbeit senden" */
|
|
@@ -172,52 +165,15 @@ export function useFeedbackDetailLabels(labels?: LabelOverride<FeedbackDetailLab
|
|
|
172
165
|
|
|
173
166
|
/* ── The page a report was filed on (§3.2, §4.4.2) ────────────────────────── */
|
|
174
167
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
if (!raw) return null;
|
|
180
|
-
try {
|
|
181
|
-
// A base, so a PATH-ONLY value parses too: Kurvenschmiede backfills its old rows
|
|
182
|
-
// with `url = page_path + search` (§3.2), and keksdose's `new URL(raw)` threw on
|
|
183
|
-
// those and dropped the section.
|
|
184
|
-
const url = new URL(raw, "http://localhost");
|
|
185
|
-
return url.protocol === "http:" || url.protocol === "https:" ? url : null;
|
|
186
|
-
} catch {
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/** Collapses a leading `//` run: `/\/\/evil.example/` as a path would be a
|
|
192
|
-
* protocol-relative link off the app. */
|
|
193
|
-
const localPath = (pathname: string) => pathname.replace(/^\/{2,}/, "/");
|
|
168
|
+
// The page as the reporter had it (path + query + hash) and the full URL "Copy URL"
|
|
169
|
+
// copies were public too, as `feedbackPageHref` and `feedbackPageUrl`, until 0.53 (deprecated
|
|
170
|
+
// in 0.52, API-4): `feedbackPage` (./feedback-page-link) is the one reading, and the kit
|
|
171
|
+
// links only its path.
|
|
194
172
|
|
|
195
|
-
/**
|
|
196
|
-
*
|
|
197
|
-
* `localHref`: the query and hash carry the state worth restoring, `?tab=import`, a
|
|
198
|
-
* drill-down). Read from `context.url`, else `context.route`; a path-only `url` works.
|
|
199
|
-
* Always a path on THIS app, never another origin's address, so it is safe as an
|
|
200
|
-
* `href` whatever the row says. `null` when there is nothing to link.
|
|
201
|
-
*/
|
|
202
|
-
export function feedbackPageHref(context: FeedbackContext | null | undefined): string | null {
|
|
203
|
-
const url = parsePage(context);
|
|
204
|
-
return url ? `${localPath(url.pathname)}${url.search}${url.hash}` : null;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/** The page's path alone — the compact text a URL column shows (§4.3). */
|
|
173
|
+
/** The page's path alone — the compact text a URL column shows (§4.3), and the only part
|
|
174
|
+
* of the page the kit links. */
|
|
208
175
|
export function feedbackPagePath(context: FeedbackContext | null | undefined): string | null {
|
|
209
|
-
|
|
210
|
-
return url ? localPath(url.pathname) : null;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* What "Copy URL" copies: the FULL `context.url` as the reporter's browser had it —
|
|
215
|
-
* origin included, which is the one part that says which copy of the app it was
|
|
216
|
-
* (feedback #278) — else `context.route`. `null` when there is no page.
|
|
217
|
-
*/
|
|
218
|
-
export function feedbackPageUrl(context: FeedbackContext | null | undefined): string | null {
|
|
219
|
-
if (!parsePage(context)) return null;
|
|
220
|
-
return (context?.url || context?.route || "").trim();
|
|
176
|
+
return feedbackPage(context)?.path ?? null;
|
|
221
177
|
}
|
|
222
178
|
|
|
223
179
|
/* ── Attachments (§3.5, §4.4.3) ───────────────────────────────────────────── */
|
|
@@ -315,14 +271,15 @@ export interface FeedbackDetailPatch {
|
|
|
315
271
|
}
|
|
316
272
|
|
|
317
273
|
/**
|
|
318
|
-
* The page's update mutation. **TanStack Query's `
|
|
319
|
-
* `update.
|
|
320
|
-
* `useFeedbackStatusUndo` takes.
|
|
321
|
-
*
|
|
322
|
-
*
|
|
274
|
+
* The page's update mutation (0.52): **TanStack Query's `mutateAsync`** — pass
|
|
275
|
+
* `update.mutateAsync` (and `pending={update.isPending}`), the same function
|
|
276
|
+
* `useFeedbackStatusUndo` takes. An editor closes when the promise resolves, which it does
|
|
277
|
+
* for every call — also when a status pill was pressed while the save was in flight
|
|
278
|
+
* (refactor audit 2026-10-30, FLW-3). A hand-written one resolves once the PATCH has
|
|
279
|
+
* landed. A failure is the mutation's own to toast — the server's `detail`, else
|
|
323
280
|
* `feedbackToast.updateFailed` (§4.4) — and leaves the editor open with its draft.
|
|
324
281
|
*/
|
|
325
|
-
export type
|
|
282
|
+
export type FeedbackDetailUpdateAsync = (patch: FeedbackDetailPatch) => Promise<unknown>;
|
|
326
283
|
|
|
327
284
|
/** `POST /feedback/attachments` (§3.3): one file up, its URL
|
|
328
285
|
* (`/api/v1/feedback/attachments/<key>`) back. Reject on failure. */
|
|
@@ -342,10 +299,10 @@ export interface FeedbackReworkSectionProps {
|
|
|
342
299
|
/** 0.40: the rework as an entry of its own — see {@link FeedbackReworkSend}. With it,
|
|
343
300
|
* `onUpdate` is not called. */
|
|
344
301
|
onRework?: FeedbackReworkSend;
|
|
345
|
-
/** The PATCH — see {@link
|
|
346
|
-
* only without `onRework`: the legacy append (§3.4), which server-kit 0.13 still
|
|
302
|
+
/** The PATCH — see {@link FeedbackDetailUpdateAsync}. Called with `{ id, body }` only,
|
|
303
|
+
* and only without `onRework`: the legacy append (§3.4), which server-kit 0.13 still
|
|
347
304
|
* turns into an entry for one release. Optional since 0.40; pass one of the two. */
|
|
348
|
-
onUpdate?:
|
|
305
|
+
onUpdate?: FeedbackDetailUpdateAsync;
|
|
349
306
|
/** The PATCH is in flight (`update.isPending`). The upload adds its own. */
|
|
350
307
|
pending?: boolean;
|
|
351
308
|
/** The upload. Left out, the note goes without a file field. */
|
|
@@ -466,7 +423,7 @@ export function FeedbackReworkSection({
|
|
|
466
423
|
return;
|
|
467
424
|
}
|
|
468
425
|
if (body === null) return;
|
|
469
|
-
onUpdate
|
|
426
|
+
runMutation(onUpdate, { id: row.id, body }, () => onSent?.());
|
|
470
427
|
};
|
|
471
428
|
|
|
472
429
|
return (
|
|
@@ -510,8 +467,9 @@ export interface FeedbackRowDetailProps {
|
|
|
510
467
|
canEdit: boolean;
|
|
511
468
|
/** The signed-in user's id — who the AUTHOR is: the description editor and rework. */
|
|
512
469
|
viewerId?: number | null;
|
|
513
|
-
/** The page's PATCH — `update.
|
|
514
|
-
|
|
470
|
+
/** The page's PATCH — `update.mutateAsync` (see {@link FeedbackDetailUpdateAsync}). The
|
|
471
|
+
* callback form, `update.mutate`, went in 0.53 (deprecated in 0.52). */
|
|
472
|
+
onUpdate: FeedbackDetailUpdateAsync;
|
|
515
473
|
/** `update.isPending`: the editors' save buttons wait for it. */
|
|
516
474
|
pending?: boolean;
|
|
517
475
|
/** `POST /feedback/attachments` for the rework's one file and, since 0.47 (§12) with
|
|
@@ -522,7 +480,7 @@ export interface FeedbackRowDetailProps {
|
|
|
522
480
|
* the browser's own fetch with same-origin cookies. */
|
|
523
481
|
fetcher?: AuthedFetcher | null;
|
|
524
482
|
/**
|
|
525
|
-
* The undoable status change — what `useFeedbackStatusUndo(update.
|
|
483
|
+
* The undoable status change — what `useFeedbackStatusUndo(update.mutateAsync)` returns,
|
|
526
484
|
* the SAME one the table's status cell and the swipes use (§4.5). Left out, the
|
|
527
485
|
* detail builds one from `onUpdate`, which is equivalent as long as `onUpdate` is the
|
|
528
486
|
* page's mutation (its observer outlives the row a status filter removes).
|
|
@@ -534,9 +492,20 @@ export interface FeedbackRowDetailProps {
|
|
|
534
492
|
/** The rework's and (0.47, with `replyAttachments`) the reply composer's file field,
|
|
535
493
|
* over the contract's defaults. */
|
|
536
494
|
reworkAttachment?: Partial<FeedbackNoteAttachment>;
|
|
537
|
-
/** How the `resolved_at` date reads — the app's date cell, as a string. Default
|
|
538
|
-
*
|
|
495
|
+
/** How the `resolved_at` date reads — the app's date cell, as a string. Default
|
|
496
|
+
* (0.52): the `<UiKitProvider formatDate>` when the app set one, else the kit's
|
|
497
|
+
* `formatDate` in the provider's locale and time zone, `medium` style. */
|
|
539
498
|
renderDate?: (iso: string) => string;
|
|
499
|
+
/**
|
|
500
|
+
* 0.52 (FLW-7): the app's one-shot routes, ON TOP of the kit's — `/join`,
|
|
501
|
+
* `/register`, `/verify-email`, `/reset-password` (a string is that path and everything
|
|
502
|
+
* under it, a RegExp is tested on the path, as `useLastVisitedPage`'s `exclude`). The
|
|
503
|
+
* URL section shows such a page as text with Copy, never as a link: it acts on load,
|
|
504
|
+
* and a report's page is the reporter's to write. Any other page links its PATH alone;
|
|
505
|
+
* the query, where tokens and `?next=` targets travel, is text. keksdose:
|
|
506
|
+
* `["/banks/callback", "/share-target"]`. Keep it stable (module scope).
|
|
507
|
+
*/
|
|
508
|
+
pageLinkExclude?: readonly PathPattern[];
|
|
540
509
|
/**
|
|
541
510
|
* The detail's saves COMMIT (description, outcome, rework, status): under a locked
|
|
542
511
|
* `WriteLockProvider` each is `aria-disabled` with the lock's reason, and nothing
|
|
@@ -607,12 +576,12 @@ export interface FeedbackRowDetailProps {
|
|
|
607
576
|
* ```tsx
|
|
608
577
|
* const update = useMutation({ mutationFn: ({ id, ...patch }) => api.updateFeedback(id, patch),
|
|
609
578
|
* onSuccess: invalidate, onError: (e) => toast.error(detailOf(e) ?? toastLabels.updateFailed) });
|
|
610
|
-
* const changeStatus = useFeedbackStatusUndo(update.
|
|
579
|
+
* const changeStatus = useFeedbackStatusUndo(update.mutateAsync);
|
|
611
580
|
* <DataTable
|
|
612
581
|
* isExpanded={(row) => expandedId === row.id}
|
|
613
582
|
* expandedRow={(row) => (
|
|
614
583
|
* <FeedbackRowDetail row={row} canEdit={isAdmin && !mine} viewerId={user?.id}
|
|
615
|
-
* onUpdate={update.
|
|
584
|
+
* onUpdate={update.mutateAsync} pending={update.isPending} statusChange={changeStatus}
|
|
616
585
|
* onUpload={api.uploadFeedbackAttachment} fetcher={authedImageFetcher}
|
|
617
586
|
* onCaptureScreenshot={captureAppScreenshot} />
|
|
618
587
|
* )} … />
|
|
@@ -634,6 +603,7 @@ export function FeedbackRowDetail({
|
|
|
634
603
|
onCaptureScreenshot,
|
|
635
604
|
reworkAttachment,
|
|
636
605
|
renderDate,
|
|
606
|
+
pageLinkExclude,
|
|
637
607
|
commit,
|
|
638
608
|
showSubject = true,
|
|
639
609
|
onReply,
|
|
@@ -649,7 +619,6 @@ export function FeedbackRowDetail({
|
|
|
649
619
|
// "placeholder = the dialog's body label" (§4.4.1): read from the dialog's own
|
|
650
620
|
// namespace, so the two can never say different things.
|
|
651
621
|
const dialogText = useKitLabels("feedbackDialog", DEFAULT_FEEDBACK_DIALOG_LABELS);
|
|
652
|
-
const locale = useKitLocale();
|
|
653
622
|
const ownStatusChange = useFeedbackStatusUndo(onUpdate);
|
|
654
623
|
const changeStatus = statusChange ?? ownStatusChange;
|
|
655
624
|
const [editingBody, setEditingBody] = useState(false);
|
|
@@ -660,13 +629,17 @@ export function FeedbackRowDetail({
|
|
|
660
629
|
// rework rounds stay in the prose: they are what was said after the answer.
|
|
661
630
|
const bodyText = splitBodyAttachments(row.body).text;
|
|
662
631
|
const { description } = splitDescription(row.body);
|
|
663
|
-
const
|
|
664
|
-
const
|
|
632
|
+
const page = feedbackPage(row.context);
|
|
633
|
+
const pageLink = page && feedbackPageLinkTarget(page, pageLinkExclude);
|
|
665
634
|
// 0.47 (§12): with the entries, each entry's file is drawn inline in the Replies
|
|
666
635
|
// timeline, so the Attachment section holds the report's own files.
|
|
667
636
|
const files = feedbackAttachmentUrls(row.replies ? { ...row, replies: undefined } : row);
|
|
668
637
|
const fetchFile = fetcher ?? plainFeedbackFetch;
|
|
669
|
-
|
|
638
|
+
// A date in a sentence ("Resolved: …"), so no weekday — through the kit's one day
|
|
639
|
+
// ladder, which reaches the provider's `formatDate` (0.52, refactor audit 2026-10-30,
|
|
640
|
+
// DUP-2).
|
|
641
|
+
const day = useDayFormatter<string>(renderDate);
|
|
642
|
+
const dateText = (iso: string) => day(iso);
|
|
670
643
|
|
|
671
644
|
const saveDescription = (value: string) => {
|
|
672
645
|
// Only a real change makes a round trip; clearing it is one ("" — the description
|
|
@@ -675,7 +648,7 @@ export function FeedbackRowDetail({
|
|
|
675
648
|
setEditingBody(false);
|
|
676
649
|
return;
|
|
677
650
|
}
|
|
678
|
-
onUpdate
|
|
651
|
+
runMutation(onUpdate, { id: row.id, body: replaceDescription(row.body, value) }, () => setEditingBody(false));
|
|
679
652
|
};
|
|
680
653
|
|
|
681
654
|
// 0.38 (§9.7): the replies replace the outcome; a row without them is a server before
|
|
@@ -735,14 +708,27 @@ export function FeedbackRowDetail({
|
|
|
735
708
|
)}
|
|
736
709
|
</FeedbackDetailSection>
|
|
737
710
|
|
|
738
|
-
{
|
|
739
|
-
// The page it was filed on, with the full URL a click away (keksdose #278).
|
|
711
|
+
{page && (
|
|
712
|
+
// The page it was filed on, with the full URL a click away (keksdose #278). Only
|
|
713
|
+
// the path is a link; the query and hash, the reporter's to write, are text — and
|
|
714
|
+
// a one-shot path is text too (FLW-7, 0.52 code review: see feedback-page-link).
|
|
740
715
|
<FeedbackDetailSection title={labels.url}>
|
|
741
716
|
<div className="flex min-w-0 items-center gap-1.5">
|
|
742
|
-
<
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
717
|
+
<code
|
|
718
|
+
className="min-w-0 break-all text-xs text-secondary"
|
|
719
|
+
data-feedback-page=""
|
|
720
|
+
data-feedback-page-unlinked={pageLink ? undefined : ""}
|
|
721
|
+
>
|
|
722
|
+
{pageLink ? (
|
|
723
|
+
<TextLink href={pageLink} tone="secondary" underline="hover" stopPropagation>
|
|
724
|
+
{page.path}
|
|
725
|
+
</TextLink>
|
|
726
|
+
) : (
|
|
727
|
+
page.path
|
|
728
|
+
)}
|
|
729
|
+
{page.href.slice(page.path.length)}
|
|
730
|
+
</code>
|
|
731
|
+
<CopyButton size="xs" className="shrink-0" text={page.url} label={labels.copyUrl} stopPropagation />
|
|
746
732
|
</div>
|
|
747
733
|
</FeedbackDetailSection>
|
|
748
734
|
)}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from "./feedback-labels";
|
|
10
10
|
import type { FeedbackRecord } from "./feedback-record";
|
|
11
11
|
import type { LabelOverride } from "../i18n/kit-labels";
|
|
12
|
+
import { runMutation } from "./feedback-mutation";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* A status change that can be taken back — §4.5 of the feedback contract, lifted from
|
|
@@ -30,14 +31,16 @@ export interface FeedbackStatusPatch {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
|
-
* The page's status mutation. **TanStack Query's `
|
|
34
|
-
* `
|
|
35
|
-
*
|
|
34
|
+
* The page's status mutation (0.52): **TanStack Query's `mutateAsync`** — pass
|
|
35
|
+
* `update.mutateAsync`. The toast comes when the promise resolves, which it does for every
|
|
36
|
+
* call (refactor audit 2026-10-30, FLW-3). A hand-written one returns a promise that
|
|
37
|
+
* resolves once the PATCH has landed and rejects when it failed.
|
|
36
38
|
*
|
|
37
39
|
* Failure is the mutation's own business: its `onError` toasts the server's `detail`,
|
|
38
|
-
* else `feedbackToast.updateFailed` (§4.4) — this hook adds no second error toast
|
|
40
|
+
* else `feedbackToast.updateFailed` (§4.4) — this hook adds no second error toast, and
|
|
41
|
+
* catches the rejection.
|
|
39
42
|
*/
|
|
40
|
-
export type
|
|
43
|
+
export type FeedbackStatusMutateAsync = (patch: FeedbackStatusPatch) => Promise<unknown>;
|
|
41
44
|
|
|
42
45
|
/** What the change needs to know about the row: which one, what it is called in the
|
|
43
46
|
* toast, and where it stood (the status Undo goes back to). */
|
|
@@ -64,20 +67,23 @@ export const FEEDBACK_UNDO_DURATION = 8000;
|
|
|
64
67
|
*
|
|
65
68
|
* ```tsx
|
|
66
69
|
* const update = useMutation({ mutationFn: api.updateFeedback, onError: … });
|
|
67
|
-
* const changeStatus = useFeedbackStatusUndo(update.
|
|
70
|
+
* const changeStatus = useFeedbackStatusUndo(update.mutateAsync);
|
|
68
71
|
* <FeedbackStatusTransitions … onPick={(status) => changeStatus(row, status)} />
|
|
69
72
|
* ```
|
|
70
73
|
*
|
|
71
|
-
* Give it the PAGE's mutation, not one a row owns:
|
|
72
|
-
*
|
|
73
|
-
* status filters out unmounts before the PATCH answers — the toast would never come.
|
|
74
|
+
* Give it the PAGE's mutation, not one a row owns: a row the new status filters out
|
|
75
|
+
* unmounts before the PATCH answers.
|
|
74
76
|
*
|
|
75
|
-
* The flow: PATCH `{ id, status }` →
|
|
77
|
+
* The flow: PATCH `{ id, status }` → once it has landed a success toast
|
|
76
78
|
* `statusChanged(newName, title)` with the action `statusUndo`, 8 s → Undo PATCHes
|
|
77
|
-
* `{ id, status: previous }` →
|
|
79
|
+
* `{ id, status: previous }` → once that has landed `statusRestored(previousName, title)`.
|
|
80
|
+
* Each change waits for its OWN answer, so two changes in flight each get their toast.
|
|
81
|
+
*
|
|
82
|
+
* `update.mutate`, the callback form, went in 0.53 (deprecated in 0.52): with it a second
|
|
83
|
+
* change before the first answered lost the first one's Undo.
|
|
78
84
|
*/
|
|
79
85
|
export function useFeedbackStatusUndo(
|
|
80
|
-
mutate:
|
|
86
|
+
mutate: FeedbackStatusMutateAsync,
|
|
81
87
|
{ labels, statusLabels }: FeedbackStatusUndoOptions = {},
|
|
82
88
|
): FeedbackStatusChange {
|
|
83
89
|
const words = useFeedbackToastLabels(labels);
|
|
@@ -87,22 +93,16 @@ export function useFeedbackStatusUndo(
|
|
|
87
93
|
const { id, title, status: previous } = row;
|
|
88
94
|
if (status === previous) return;
|
|
89
95
|
const nameOf = (value: FeedbackStatus) => names[value] ?? value;
|
|
90
|
-
mutate(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{ onSuccess: () => void toast.success(words.statusRestored(nameOf(previous), title)) },
|
|
101
|
-
),
|
|
102
|
-
});
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
);
|
|
96
|
+
runMutation(mutate, { id, status }, () => {
|
|
97
|
+
toast.undo(words.statusChanged(nameOf(status), title), {
|
|
98
|
+
label: words.statusUndo,
|
|
99
|
+
duration: FEEDBACK_UNDO_DURATION,
|
|
100
|
+
onUndo: () =>
|
|
101
|
+
runMutation(mutate, { id, status: previous }, () => {
|
|
102
|
+
toast.success(words.statusRestored(nameOf(previous), title));
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
106
|
},
|
|
107
107
|
[mutate, words, names],
|
|
108
108
|
);
|
|
@@ -37,7 +37,7 @@ export interface FeedbackSubmitDialogProps {
|
|
|
37
37
|
onCategoryChange: (category: FeedbackCategory) => void;
|
|
38
38
|
submitting: boolean;
|
|
39
39
|
/** The form, and the `context` built from the same values the box showed. */
|
|
40
|
-
onSubmit: (data: FeedbackMultipleSubmission
|
|
40
|
+
onSubmit: (data: FeedbackMultipleSubmission<FeedbackCategory>, context: FeedbackContext) => void | Promise<void>;
|
|
41
41
|
user?: FeedbackSubmitter | null;
|
|
42
42
|
/** `location.href` when the dialog opened. */
|
|
43
43
|
url: string;
|
|
@@ -89,7 +89,7 @@ export function FeedbackSubmitDialog({
|
|
|
89
89
|
onClose={onClose}
|
|
90
90
|
categories={FEEDBACK_PICKABLE_CATEGORIES.map((value) => ({ value, label: categoryLabels[value] }))}
|
|
91
91
|
category={category}
|
|
92
|
-
onCategoryChange={
|
|
92
|
+
onCategoryChange={onCategoryChange}
|
|
93
93
|
submitting={submitting}
|
|
94
94
|
attachments="multiple"
|
|
95
95
|
maxAttachments={DEFAULT_MAX_ATTACHMENTS}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Suspense, useLayoutEffect, useRef, useState } from "react";
|
|
2
2
|
import type { ReactNode } from "react";
|
|
3
3
|
import { toast } from "../components/toast";
|
|
4
|
+
import { lazyWithFallback } from "../lib/lazy-with-fallback";
|
|
4
5
|
// Types only, gone from the built module: the dialog's modules load with the dialog.
|
|
5
6
|
import type { FeedbackSubmitter } from "./feedback-context";
|
|
7
|
+
import type { FeedbackSubmitDialogProps } from "./feedback-submit-dialog";
|
|
6
8
|
import type { FeedbackMultipleSubmission } from "./feedback-dialog";
|
|
7
9
|
import { useFeedbackToastLabels } from "./feedback-labels";
|
|
8
10
|
import { FEEDBACK_PICKABLE_CATEGORIES, type FeedbackContext, type FeedbackEnvironment } from "./feedback-record";
|
|
@@ -14,11 +16,22 @@ import type { FeedbackCategory } from "./feedback-vocabulary";
|
|
|
14
16
|
* LITERAL relative `import()`, as the catalogue loaders are (i18n/languages.ts): the
|
|
15
17
|
* library build keeps the module its own (`bundle: false`), and a path an app's bundler
|
|
16
18
|
* can read is a chunk it can split off.
|
|
19
|
+
*
|
|
20
|
+
* A fetch that fails — a tab left open across a deploy, offline — closes the dialog
|
|
21
|
+
* rather than throwing (0.52 code review, tour.tsx): the hook lives in the top bar, above
|
|
22
|
+
* the routes' error boundaries, so the rejected import took the whole shell down. The
|
|
23
|
+
* next open fetches again.
|
|
17
24
|
*/
|
|
18
|
-
const LazySubmitDialog =
|
|
19
|
-
import("./feedback-submit-dialog").then((module) =>
|
|
25
|
+
const LazySubmitDialog = lazyWithFallback(
|
|
26
|
+
() => import("./feedback-submit-dialog").then((module) => module.FeedbackSubmitDialog),
|
|
27
|
+
SubmitDialogUnavailable,
|
|
20
28
|
);
|
|
21
29
|
|
|
30
|
+
function SubmitDialogUnavailable({ onClose }: FeedbackSubmitDialogProps) {
|
|
31
|
+
useLayoutEffect(onClose, [onClose]);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
22
35
|
/**
|
|
23
36
|
* `FeedbackCreate` — the body of `POST /feedback` (keksdose `schemas/feedback.py:25`, §3.4
|
|
24
37
|
* of docs/feedback-harmonization.md), as {@link useFeedbackSubmit} hands it to the app's
|
|
@@ -165,7 +178,7 @@ export function useFeedbackSubmit<R = unknown>(options: UseFeedbackSubmitOptions
|
|
|
165
178
|
const close = () => setIsOpen(false);
|
|
166
179
|
|
|
167
180
|
// `context` comes from the dialog, built off the values its context box shows.
|
|
168
|
-
const submit = async (data: FeedbackMultipleSubmission
|
|
181
|
+
const submit = async (data: FeedbackMultipleSubmission<FeedbackCategory>, context: FeedbackContext) => {
|
|
169
182
|
if (inFlight.current) return;
|
|
170
183
|
inFlight.current = true;
|
|
171
184
|
setSubmitting(true);
|
|
@@ -179,7 +192,7 @@ export function useFeedbackSubmit<R = unknown>(options: UseFeedbackSubmitOptions
|
|
|
179
192
|
result = await create({
|
|
180
193
|
title: data.title.trim(),
|
|
181
194
|
body: data.body.trim() ? data.body : "",
|
|
182
|
-
category: data.category
|
|
195
|
+
category: data.category,
|
|
183
196
|
context,
|
|
184
197
|
screenshot_url,
|
|
185
198
|
attachment_urls,
|
|
@@ -197,8 +210,9 @@ export function useFeedbackSubmit<R = unknown>(options: UseFeedbackSubmitOptions
|
|
|
197
210
|
};
|
|
198
211
|
|
|
199
212
|
// Nothing is drawn while the dialog's module is on its way — a few milliseconds, once per
|
|
200
|
-
// page load; a spinner would only flash. A load that fails (a deploy replaced the chunk
|
|
201
|
-
//
|
|
213
|
+
// page load; a spinner would only flash. A load that fails (a deploy replaced the chunk,
|
|
214
|
+
// offline) closes the dialog (`SubmitDialogUnavailable`): the hook sits in the top bar,
|
|
215
|
+
// above the routes' error boundaries, where a thrown chunk error took the shell down.
|
|
202
216
|
const dialog = isOpen ? (
|
|
203
217
|
<Suspense fallback={null}>
|
|
204
218
|
<LazySubmitDialog
|
|
@@ -124,7 +124,7 @@ function panel(
|
|
|
124
124
|
* for it, or `null` when the row offers no swipe at all:
|
|
125
125
|
*
|
|
126
126
|
* ```tsx
|
|
127
|
-
* const changeStatus = useFeedbackStatusUndo(update.
|
|
127
|
+
* const changeStatus = useFeedbackStatusUndo(update.mutateAsync);
|
|
128
128
|
* const statusLabels = useFeedbackStatusLabels();
|
|
129
129
|
* <DataTable
|
|
130
130
|
* mobileSwipeActions={isAdmin && !mine
|