@eifi1/ui-kit 0.54.0 → 0.56.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 +90 -76
- package/dist/admin/plan-change.js +2 -2
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/user-roster.d.ts +6 -0
- package/dist/admin/user-roster.js +4 -0
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/billing/billing-labels.d.ts +26 -0
- package/dist/billing/billing-labels.js +9 -0
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/subscription-standing.d.ts +61 -0
- package/dist/billing/subscription-standing.js +51 -0
- package/dist/billing/subscription-standing.js.map +1 -0
- package/dist/billing/usage-meter.d.ts +52 -0
- package/dist/billing/usage-meter.js +52 -0
- package/dist/billing/usage-meter.js.map +1 -0
- package/dist/chart.d.ts +1 -0
- package/dist/chart.js +4 -0
- package/dist/chart.js.map +1 -1
- package/dist/components/alert-banner.js +2 -3
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.js +3 -15
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.js +2 -2
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.js +2 -1
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button.d.ts +35 -1
- package/dist/components/button.js +6 -9
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar-heatmap.js +2 -2
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/camera-button.d.ts +89 -0
- package/dist/components/camera-button.js +122 -0
- package/dist/components/camera-button.js.map +1 -0
- package/dist/components/camera-capture.d.ts +66 -0
- package/dist/components/camera-capture.js +190 -0
- package/dist/components/camera-capture.js.map +1 -0
- package/dist/components/camera-labels.d.ts +20 -0
- package/dist/components/camera-labels.js +15 -0
- package/dist/components/camera-labels.js.map +1 -0
- package/dist/components/chart-edge.d.ts +9 -0
- package/dist/components/chart-edge.js +14 -3
- package/dist/components/chart-edge.js.map +1 -1
- package/dist/components/chart-zoom-core.js +34 -29
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/checkbox-group.js +1 -1
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/combobox-core.js +3 -2
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +2 -2
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/consent-again-notice-labels.d.ts +25 -0
- package/dist/components/consent-again-notice-labels.js +15 -0
- package/dist/components/consent-again-notice-labels.js.map +1 -0
- package/dist/components/consent-again-notice.d.ts +85 -0
- package/dist/components/consent-again-notice.js +94 -0
- package/dist/components/consent-again-notice.js.map +1 -0
- package/dist/components/country-select.js +2 -7
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-select.js +2 -2
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.js +2 -2
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-column-settings.js +2 -2
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-virtual.js +13 -3
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/date-field.js +2 -2
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.js +2 -2
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js +2 -6
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/dialog-frame.d.ts +3 -1
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/dropdown.js +7 -3
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/entity-combobox.js +2 -2
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/field-parts.d.ts +108 -6
- package/dist/components/field-parts.js +59 -6
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-suggestion-labels.d.ts +2 -0
- package/dist/components/field-suggestion-labels.js +10 -0
- package/dist/components/field-suggestion-labels.js.map +1 -0
- package/dist/components/field.js +1 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-button.d.ts +1 -1
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/floating-panel.d.ts +7 -6
- package/dist/components/floating-panel.js +3 -17
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/form-actions.d.ts +3 -2
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/hover-menu.js +3 -2
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-button.d.ts +23 -5
- package/dist/components/icon-button.js +7 -8
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/inline-confirm.js +2 -1
- package/dist/components/inline-confirm.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +2 -2
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +2 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +3 -3
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal.d.ts +13 -1
- package/dist/components/legal.js +12 -0
- package/dist/components/legal.js.map +1 -1
- package/dist/components/legended-series-chart.d.ts +83 -0
- package/dist/components/legended-series-chart.js +77 -0
- package/dist/components/legended-series-chart.js.map +1 -0
- package/dist/components/lightbox.js +2 -1
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/mini-calendar.js +13 -5
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +23 -2
- package/dist/components/modal.js +24 -6
- package/dist/components/modal.js.map +1 -1
- package/dist/components/month-picker.d.ts +1 -1
- package/dist/components/month-picker.js +6 -6
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +2 -2
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.js +2 -6
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/number-input.js +2 -2
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/page-header-layout.d.ts +18 -0
- package/dist/components/page-header-layout.js +23 -0
- package/dist/components/page-header-layout.js.map +1 -0
- package/dist/components/page-header-skeleton.d.ts +41 -0
- package/dist/components/page-header-skeleton.js +52 -0
- package/dist/components/page-header-skeleton.js.map +1 -0
- package/dist/components/page-header.js +4 -17
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/popover.js +7 -2
- package/dist/components/popover.js.map +1 -1
- package/dist/components/release-notes-labels.d.ts +16 -0
- package/dist/components/release-notes-labels.js +18 -0
- package/dist/components/release-notes-labels.js.map +1 -0
- package/dist/components/release-notes.d.ts +65 -0
- package/dist/components/release-notes.js +65 -0
- package/dist/components/release-notes.js.map +1 -0
- package/dist/components/select.js +2 -2
- package/dist/components/select.js.map +1 -1
- package/dist/components/series-chart-labels.d.ts +9 -0
- package/dist/components/series-chart-labels.js +3 -1
- package/dist/components/series-chart-labels.js.map +1 -1
- package/dist/components/series-chart.d.ts +5 -0
- package/dist/components/series-chart.js +89 -36
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/toggle-group.js +3 -2
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/treemap-layout.js.map +1 -1
- package/dist/components/treemap.d.ts +17 -15
- package/dist/components/treemap.js +167 -85
- package/dist/components/treemap.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/eslint/role-utilities.d.ts +2 -2
- package/dist/eslint/role-utilities.js.map +1 -1
- package/dist/feedback/feedback-inbox-page.d.ts +260 -0
- package/dist/feedback/feedback-inbox-page.js +207 -0
- package/dist/feedback/feedback-inbox-page.js.map +1 -0
- package/dist/feedback/feedback-vocabulary.js +2 -2
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/feedback.d.ts +1 -0
- package/dist/feedback.js +6 -0
- package/dist/feedback.js.map +1 -1
- package/dist/hooks/use-debounce.d.ts +32 -5
- package/dist/hooks/use-debounce.js +6 -5
- package/dist/hooks/use-debounce.js.map +1 -1
- package/dist/hooks/use-file-picker.d.ts +3 -1
- package/dist/hooks/use-file-picker.js.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts +19 -3
- package/dist/hooks/use-focus-trap.js +15 -5
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-has-camera.d.ts +36 -0
- package/dist/hooks/use-has-camera.js +53 -0
- package/dist/hooks/use-has-camera.js.map +1 -0
- package/dist/hooks/use-hotkey.js +1 -10
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-overlay-history.d.ts +6 -1
- package/dist/hooks/use-overlay-history.js +10 -2
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/defaults.js +11 -1
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +75 -3
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +20 -0
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +92 -4
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +71 -3
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +72 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +74 -3
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +74 -3
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +71 -3
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +22 -1
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +24 -5
- package/dist/index.js +35 -1
- package/dist/index.js.map +1 -1
- package/dist/landing/landing-labels.d.ts +8 -0
- package/dist/landing/landing-labels.js +2 -1
- package/dist/landing/landing-labels.js.map +1 -1
- package/dist/lib/changelog.d.ts +130 -0
- package/dist/lib/changelog.js +137 -0
- package/dist/lib/changelog.js.map +1 -0
- package/dist/lib/clipboard-minus.js +2 -2
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/dates.d.ts +29 -3
- package/dist/lib/dates.js +41 -12
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/editable-content.d.ts +33 -0
- package/dist/lib/editable-content.js +15 -0
- package/dist/lib/editable-content.js.map +1 -0
- package/dist/lib/focus-left.d.ts +47 -1
- package/dist/lib/focus-left.js +11 -2
- package/dist/lib/focus-left.js.map +1 -1
- package/dist/lib/server-wake.d.ts +49 -9
- package/dist/lib/server-wake.js +25 -14
- package/dist/lib/server-wake.js.map +1 -1
- package/dist/lib/session-refresh.d.ts +53 -0
- package/dist/lib/session-refresh.js +27 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/rhf/fields.js +3 -3
- package/dist/rhf/fields.js.map +1 -1
- package/dist/shell/app-shell.d.ts +25 -1
- package/dist/shell/app-shell.js +3 -1
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +3 -0
- package/dist/shell/dev-menu.js +4 -2
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/held-changes-banner-labels.d.ts +23 -0
- package/dist/shell/held-changes-banner-labels.js +14 -0
- package/dist/shell/held-changes-banner-labels.js.map +1 -0
- package/dist/shell/held-changes-banner.d.ts +75 -0
- package/dist/shell/held-changes-banner.js +106 -0
- package/dist/shell/held-changes-banner.js.map +1 -0
- package/dist/shell/sync-status-indicator.d.ts +27 -12
- package/dist/shell/sync-status-indicator.js +13 -4
- package/dist/shell/sync-status-indicator.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.d.ts +5 -0
- package/dist/shell/top-bar-parts-labels.js +3 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell.d.ts +2 -0
- package/dist/shell.js +3 -0
- package/dist/shell.js.map +1 -1
- package/dist/sync/engine.d.ts +11 -2
- package/dist/sync/engine.js +13 -5
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/hooks.d.ts +3 -2
- package/dist/sync/hooks.js +4 -2
- package/dist/sync/hooks.js.map +1 -1
- package/dist/testing/css-variables.generated.d.ts +2 -2
- package/dist/testing/css-variables.generated.js +1 -1
- package/dist/testing/css-variables.generated.js.map +1 -1
- package/dist/theme/chart-palette.d.ts +18 -0
- package/dist/theme/chart-palette.js +17 -1
- package/dist/theme/chart-palette.js.map +1 -1
- package/dist/theme/contrast-tokens.d.ts +3 -3
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/contrast.d.ts +4 -4
- package/dist/theme/contrast.js.map +1 -1
- package/dist/tour/tour-overlay.js +2 -1
- package/dist/tour/tour-overlay.js.map +1 -1
- package/package.json +9 -12
- package/tokens.css +19 -54
- package/src/account/account-parts.ts +0 -47
- package/src/account/account-settings-labels.ts +0 -240
- package/src/account/account-settings.tsx +0 -698
- package/src/account/data-export-setting-labels.ts +0 -20
- package/src/account/data-export-setting.tsx +0 -200
- package/src/account/delete-account-setting-labels.ts +0 -33
- package/src/account/delete-account-setting.tsx +0 -342
- package/src/account/email-change-setting-labels.ts +0 -31
- package/src/account/email-change-setting.tsx +0 -443
- package/src/account/passkeys-setting.tsx +0 -445
- package/src/account/sessions-setting-labels.ts +0 -24
- package/src/account/sessions-setting.tsx +0 -283
- package/src/admin/admin-action-confirm-labels.ts +0 -19
- package/src/admin/admin-action-confirm.tsx +0 -509
- package/src/admin/admin-action-log-labels.ts +0 -83
- package/src/admin/admin-action-log.tsx +0 -464
- package/src/admin/admin-area-labels.ts +0 -114
- package/src/admin/admin-forbidden.tsx +0 -75
- package/src/admin/admin-overview.tsx +0 -258
- package/src/admin/admin-parts.ts +0 -68
- package/src/admin/admin-sections.tsx +0 -208
- package/src/admin/admin-tool-links.tsx +0 -90
- package/src/admin/invitations-panel-labels.ts +0 -31
- package/src/admin/invitations-panel.tsx +0 -516
- package/src/admin/mail-test-card-labels.ts +0 -19
- package/src/admin/mail-test-card.tsx +0 -189
- package/src/admin/plan-change-labels.ts +0 -5
- package/src/admin/plan-change.tsx +0 -474
- package/src/admin/reviewer-scope-editor-labels.ts +0 -16
- package/src/admin/reviewer-scope-editor.tsx +0 -224
- package/src/admin/role-select-labels.ts +0 -16
- package/src/admin/role-select.tsx +0 -282
- package/src/admin/transfer-ownership-dialog-labels.ts +0 -20
- package/src/admin/transfer-ownership-dialog.tsx +0 -162
- package/src/admin/user-roster-labels.ts +0 -17
- package/src/admin/user-roster.tsx +0 -559
- package/src/auth/accept-invitation-labels.ts +0 -21
- package/src/auth/accept-invitation.tsx +0 -210
- package/src/auth/auth-errors-labels.ts +0 -23
- package/src/auth/auth-errors.ts +0 -439
- package/src/auth/complete-name-dialog-labels.ts +0 -16
- package/src/auth/complete-name-dialog.tsx +0 -253
- package/src/auth/email-tag.ts +0 -75
- package/src/auth/forgot-password-form-labels.ts +0 -20
- package/src/auth/forgot-password-form.tsx +0 -221
- package/src/auth/form-rules.ts +0 -40
- package/src/auth/new-password-fields.tsx +0 -85
- package/src/auth/not-found-page-labels.ts +0 -12
- package/src/auth/not-found-page.tsx +0 -95
- package/src/auth/register-form-labels.ts +0 -31
- package/src/auth/register-form.tsx +0 -456
- package/src/auth/reset-password-form-labels.ts +0 -27
- package/src/auth/reset-password-form.tsx +0 -341
- package/src/auth/sign-in-form-labels.ts +0 -44
- package/src/auth/sign-in-form.tsx +0 -858
- package/src/auth/status-parts.tsx +0 -132
- package/src/auth/verify-email-labels.ts +0 -26
- package/src/auth/verify-email.tsx +0 -445
- package/src/billing/billing-banner.tsx +0 -258
- package/src/billing/billing-labels.ts +0 -381
- package/src/billing/billing-lock.ts +0 -108
- package/src/billing/billing-overview.ts +0 -157
- package/src/billing/billing-standing.ts +0 -80
- package/src/billing/cancel-request.ts +0 -97
- package/src/billing/cancel-subscription.tsx +0 -98
- package/src/billing/checkout-processing.ts +0 -394
- package/src/billing/checkout-return.ts +0 -90
- package/src/billing/pay-page.ts +0 -330
- package/src/billing/plan-card.tsx +0 -562
- package/src/billing/plan-change-labels.ts +0 -66
- package/src/billing/plan-limit-notice.tsx +0 -148
- package/src/billing/plan-limit-toast.tsx +0 -90
- package/src/billing/plan-limit.ts +0 -52
- package/src/billing/plan-price.ts +0 -98
- package/src/billing/plan-switch.tsx +0 -216
- package/src/billing/provider-page.ts +0 -84
- package/src/billing/subscription-actions.tsx +0 -247
- package/src/billing/subscription-status-chip.tsx +0 -95
- package/src/chart.ts +0 -103
- package/src/components/account-chips-labels.ts +0 -16
- package/src/components/account-chips.tsx +0 -474
- package/src/components/alert-banner.tsx +0 -670
- package/src/components/amount-input.tsx +0 -816
- package/src/components/appearance-labels.ts +0 -63
- package/src/components/authed-image-labels.ts +0 -11
- package/src/components/authed-image.tsx +0 -209
- package/src/components/autocomplete.tsx +0 -645
- package/src/components/breadcrumbs-labels.ts +0 -10
- package/src/components/breadcrumbs.tsx +0 -205
- package/src/components/bulk-action-bar-labels.ts +0 -11
- package/src/components/bulk-action-bar.tsx +0 -443
- package/src/components/button-group.tsx +0 -223
- package/src/components/button-look.ts +0 -256
- package/src/components/button.tsx +0 -339
- package/src/components/calculator.tsx +0 -341
- package/src/components/calendar-heatmap-labels.ts +0 -15
- package/src/components/calendar-heatmap.tsx +0 -600
- package/src/components/card.tsx +0 -377
- package/src/components/chart-edge.ts +0 -106
- package/src/components/chart-figure.tsx +0 -35
- package/src/components/chart-height.ts +0 -30
- package/src/components/chart-zoom-core.tsx +0 -627
- package/src/components/chart-zoom.tsx +0 -22
- package/src/components/chart.tsx +0 -554
- package/src/components/checkbox-group.tsx +0 -247
- package/src/components/checkbox.tsx +0 -346
- package/src/components/chip-input.tsx +0 -370
- package/src/components/chip-labels.ts +0 -13
- package/src/components/chip.tsx +0 -843
- package/src/components/choice-card.tsx +0 -544
- package/src/components/column-mapper-labels.ts +0 -38
- package/src/components/column-mapper.tsx +0 -655
- package/src/components/combobox-core.tsx +0 -1321
- package/src/components/combobox-suggestions.tsx +0 -131
- package/src/components/combobox.tsx +0 -716
- package/src/components/confirm-context.ts +0 -7
- package/src/components/confirm-dialog-labels.ts +0 -13
- package/src/components/confirm-dialog.tsx +0 -341
- package/src/components/copy-button-labels.ts +0 -13
- package/src/components/copy-button.tsx +0 -192
- package/src/components/country-select-labels.ts +0 -11
- package/src/components/country-select.tsx +0 -539
- package/src/components/currency-option-list.tsx +0 -188
- package/src/components/currency-select.tsx +0 -343
- package/src/components/danger-confirm-labels.ts +0 -20
- package/src/components/danger-confirm.tsx +0 -987
- package/src/components/data-table-cells.tsx +0 -118
- package/src/components/data-table-column-settings.tsx +0 -198
- package/src/components/data-table-filter-popover.tsx +0 -289
- package/src/components/data-table-filters.ts +0 -315
- package/src/components/data-table-fit.ts +0 -301
- package/src/components/data-table-groups.tsx +0 -288
- package/src/components/data-table-head.tsx +0 -280
- package/src/components/data-table-labels.ts +0 -198
- package/src/components/data-table-leading-row.tsx +0 -58
- package/src/components/data-table-mobile.tsx +0 -1117
- package/src/components/data-table-pagination.tsx +0 -202
- package/src/components/data-table-resize.ts +0 -188
- package/src/components/data-table-row-actions.tsx +0 -302
- package/src/components/data-table-row.tsx +0 -496
- package/src/components/data-table-selection.ts +0 -71
- package/src/components/data-table-shared.tsx +0 -287
- package/src/components/data-table-sort.ts +0 -163
- package/src/components/data-table-virtual.ts +0 -576
- package/src/components/data-table.tsx +0 -2598
- package/src/components/date-field.tsx +0 -684
- package/src/components/date-format-setting.tsx +0 -64
- package/src/components/date-picker.tsx +0 -404
- package/src/components/date-range-picker.tsx +0 -518
- package/src/components/description-list-labels.ts +0 -9
- package/src/components/description-list.tsx +0 -386
- package/src/components/dialog-frame-labels.ts +0 -7
- package/src/components/dialog-frame.tsx +0 -284
- package/src/components/disclosure.tsx +0 -476
- package/src/components/dropdown.tsx +0 -461
- package/src/components/empty-state.tsx +0 -136
- package/src/components/entity-combobox.tsx +0 -422
- package/src/components/error-boundary-labels.ts +0 -20
- package/src/components/error-boundary.tsx +0 -675
- package/src/components/facing-pair.ts +0 -93
- package/src/components/field-base-labels.ts +0 -20
- package/src/components/field-base.tsx +0 -656
- package/src/components/field-parts.tsx +0 -825
- package/src/components/field-strip.tsx +0 -129
- package/src/components/field.tsx +0 -206
- package/src/components/file-button.tsx +0 -295
- package/src/components/file-dropzone.tsx +0 -559
- package/src/components/floating-panel-labels.ts +0 -10
- package/src/components/floating-panel.tsx +0 -828
- package/src/components/focus-ring.ts +0 -16
- package/src/components/form-actions-labels.ts +0 -11
- package/src/components/form-actions.tsx +0 -578
- package/src/components/full-bleed-dialog.tsx +0 -294
- package/src/components/grouped-picker.tsx +0 -184
- package/src/components/help-popover.tsx +0 -117
- package/src/components/hover-menu.tsx +0 -343
- package/src/components/iban-input-labels.ts +0 -14
- package/src/components/iban-input.tsx +0 -236
- package/src/components/icon-button.tsx +0 -959
- package/src/components/icon-picker-labels.ts +0 -13
- package/src/components/icon-picker.tsx +0 -232
- package/src/components/image-grid-labels.ts +0 -11
- package/src/components/image-grid.tsx +0 -202
- package/src/components/inline-confirm.tsx +0 -116
- package/src/components/inline-edit-field-labels.ts +0 -11
- package/src/components/inline-edit-field.tsx +0 -552
- package/src/components/inline-entity-combobox.tsx +0 -849
- package/src/components/input.tsx +0 -394
- package/src/components/jump-calendar.tsx +0 -265
- package/src/components/language-select.tsx +0 -93
- package/src/components/legal-labels.ts +0 -105
- package/src/components/legal-page.tsx +0 -711
- package/src/components/legal.tsx +0 -668
- package/src/components/lightbox-labels.ts +0 -18
- package/src/components/lightbox.tsx +0 -399
- package/src/components/line-items-labels.ts +0 -14
- package/src/components/line-items.tsx +0 -602
- package/src/components/list-labels.ts +0 -12
- package/src/components/list.tsx +0 -870
- package/src/components/loading-state.tsx +0 -78
- package/src/components/measured-grid-labels.ts +0 -25
- package/src/components/measured-grid.tsx +0 -837
- package/src/components/menu-item.tsx +0 -241
- package/src/components/mini-calendar-labels.ts +0 -17
- package/src/components/mini-calendar.tsx +0 -792
- package/src/components/modal.tsx +0 -534
- package/src/components/money-draft.ts +0 -83
- package/src/components/money-field.tsx +0 -76
- package/src/components/month-grid.tsx +0 -229
- package/src/components/month-picker-labels.ts +0 -22
- package/src/components/month-picker.tsx +0 -1087
- package/src/components/multi-entity-combobox.tsx +0 -369
- package/src/components/multi-select.tsx +0 -376
- package/src/components/nav-pills.tsx +0 -198
- package/src/components/number-field.tsx +0 -327
- package/src/components/number-input.tsx +0 -559
- package/src/components/numeric-field.ts +0 -169
- package/src/components/numpad-sheet.tsx +0 -285
- package/src/components/one-time-code-input.tsx +0 -270
- package/src/components/page-contents-labels.ts +0 -9
- package/src/components/page-contents.tsx +0 -282
- package/src/components/page-header-context.ts +0 -8
- package/src/components/page-header.tsx +0 -298
- package/src/components/password-strength-labels.ts +0 -22
- package/src/components/password-strength.tsx +0 -241
- package/src/components/phone-input-labels.ts +0 -10
- package/src/components/phone-input.tsx +0 -282
- package/src/components/picker-sheet.tsx +0 -330
- package/src/components/pie-chart-labels.ts +0 -40
- package/src/components/pie-chart.tsx +0 -480
- package/src/components/popover-labels.ts +0 -14
- package/src/components/popover.tsx +0 -268
- package/src/components/progress-bar-labels.ts +0 -10
- package/src/components/progress-bar.tsx +0 -479
- package/src/components/qr-code.tsx +0 -76
- package/src/components/reauth-dialog-labels.ts +0 -13
- package/src/components/reauth-dialog.tsx +0 -265
- package/src/components/row-actions-labels.ts +0 -12
- package/src/components/row-actions.tsx +0 -795
- package/src/components/scroll-area.tsx +0 -123
- package/src/components/search-field.tsx +0 -192
- package/src/components/select.tsx +0 -294
- package/src/components/separator.tsx +0 -33
- package/src/components/series-chart-axes.ts +0 -342
- package/src/components/series-chart-budget.ts +0 -150
- package/src/components/series-chart-labels.ts +0 -33
- package/src/components/series-chart-thin.ts +0 -180
- package/src/components/series-chart-ticks.ts +0 -194
- package/src/components/series-chart.tsx +0 -1906
- package/src/components/server-wake-labels.ts +0 -11
- package/src/components/server-wake.tsx +0 -129
- package/src/components/settings-fields.tsx +0 -237
- package/src/components/share-card-labels.ts +0 -30
- package/src/components/share-card.tsx +0 -675
- package/src/components/signature-pad-labels.ts +0 -24
- package/src/components/signature-pad.tsx +0 -747
- package/src/components/signed-amount-labels.ts +0 -10
- package/src/components/signed-amount.tsx +0 -336
- package/src/components/skeleton.tsx +0 -80
- package/src/components/slider.tsx +0 -338
- package/src/components/sparkline-labels.ts +0 -14
- package/src/components/sparkline.tsx +0 -322
- package/src/components/spinner.tsx +0 -81
- package/src/components/stat-tile-labels.ts +0 -15
- package/src/components/stat-tile.tsx +0 -754
- package/src/components/status-dot.tsx +0 -170
- package/src/components/swatch-picker-labels.ts +0 -10
- package/src/components/swatch-picker.tsx +0 -283
- package/src/components/swipeable-row.tsx +0 -386
- package/src/components/switch.tsx +0 -273
- package/src/components/table-skeleton.tsx +0 -136
- package/src/components/table.tsx +0 -647
- package/src/components/tabs-labels.ts +0 -13
- package/src/components/tabs.tsx +0 -693
- package/src/components/text-link.tsx +0 -359
- package/src/components/text.tsx +0 -150
- package/src/components/textarea.tsx +0 -330
- package/src/components/tile-radio.tsx +0 -332
- package/src/components/time-input.tsx +0 -121
- package/src/components/toast-labels.ts +0 -12
- package/src/components/toast.tsx +0 -519
- package/src/components/toggle-group.tsx +0 -752
- package/src/components/toggle-legend.tsx +0 -394
- package/src/components/tooltip.tsx +0 -1149
- package/src/components/translation-review-editor.tsx +0 -290
- package/src/components/translation-review-labels.ts +0 -181
- package/src/components/translation-review-parts.tsx +0 -272
- package/src/components/translation-review.tsx +0 -1240
- package/src/components/tree-view.tsx +0 -589
- package/src/components/treemap-labels.ts +0 -47
- package/src/components/treemap-layout.ts +0 -210
- package/src/components/treemap.tsx +0 -1184
- package/src/components/trigger-aria.ts +0 -44
- package/src/components/use-anchor-dir.ts +0 -20
- package/src/components/use-mobile-reveal.ts +0 -62
- package/src/components/use-table-state.ts +0 -753
- package/src/components/user-avatar.tsx +0 -116
- package/src/components/wizard-stepper.tsx +0 -42
- package/src/components/write-lock-labels.ts +0 -10
- package/src/components/write-lock.tsx +0 -253
- package/src/currencies.ts +0 -90
- package/src/data-table.ts +0 -42
- package/src/demo/demo-banner.tsx +0 -153
- package/src/demo/demo-countdown.ts +0 -136
- package/src/demo/demo-ended.tsx +0 -90
- package/src/demo/demo-labels.ts +0 -78
- package/src/demo/demo-session.ts +0 -32
- package/src/demo/demo-start.tsx +0 -156
- package/src/eslint/index.ts +0 -161
- package/src/eslint/role-utilities.generated.ts +0 -146
- package/src/eslint/role-utilities.ts +0 -233
- package/src/feedback/feedback-attachment-download.tsx +0 -77
- package/src/feedback/feedback-attachment-labels.ts +0 -37
- package/src/feedback/feedback-attachment.tsx +0 -1239
- package/src/feedback/feedback-capture.ts +0 -287
- package/src/feedback/feedback-comment-thread.tsx +0 -353
- package/src/feedback/feedback-context-labels.ts +0 -11
- package/src/feedback/feedback-context.tsx +0 -245
- package/src/feedback/feedback-crash.ts +0 -547
- package/src/feedback/feedback-diagnostics.tsx +0 -41
- package/src/feedback/feedback-dialog-labels.ts +0 -29
- package/src/feedback/feedback-dialog.tsx +0 -452
- package/src/feedback/feedback-entry-file.tsx +0 -150
- package/src/feedback/feedback-inbox.tsx +0 -552
- package/src/feedback/feedback-labels.ts +0 -144
- package/src/feedback/feedback-menu-labels.ts +0 -12
- package/src/feedback/feedback-menu.tsx +0 -177
- package/src/feedback/feedback-mutation.ts +0 -20
- package/src/feedback/feedback-page-link.ts +0 -90
- package/src/feedback/feedback-public-labels.ts +0 -81
- package/src/feedback/feedback-public-list.tsx +0 -524
- package/src/feedback/feedback-public-switch.tsx +0 -102
- package/src/feedback/feedback-public-types.ts +0 -101
- package/src/feedback/feedback-record.ts +0 -428
- package/src/feedback/feedback-replies-context.ts +0 -9
- package/src/feedback/feedback-replies.tsx +0 -343
- package/src/feedback/feedback-rework-entry-chip.tsx +0 -18
- package/src/feedback/feedback-row-detail-labels.ts +0 -31
- package/src/feedback/feedback-row-detail.tsx +0 -871
- package/src/feedback/feedback-status-undo.ts +0 -109
- package/src/feedback/feedback-submit-dialog.tsx +0 -131
- package/src/feedback/feedback-submit.tsx +0 -270
- package/src/feedback/feedback-swipe.tsx +0 -192
- package/src/feedback/feedback-table-labels.ts +0 -27
- package/src/feedback/feedback-table.tsx +0 -912
- package/src/feedback/feedback-thread-labels.ts +0 -22
- package/src/feedback/feedback-thread-parts-labels.ts +0 -41
- package/src/feedback/feedback-thread.tsx +0 -905
- package/src/feedback/feedback-vocabulary.ts +0 -263
- package/src/feedback/feedback-vote-button.tsx +0 -124
- package/src/feedback.ts +0 -116
- package/src/hooks/use-anchored-panel.ts +0 -396
- package/src/hooks/use-anchored-rect.ts +0 -77
- package/src/hooks/use-announce.ts +0 -85
- package/src/hooks/use-authed-src.ts +0 -167
- package/src/hooks/use-body-scroll-lock.ts +0 -119
- package/src/hooks/use-breakpoint.ts +0 -133
- package/src/hooks/use-close-transition.ts +0 -107
- package/src/hooks/use-copy-to-clipboard.ts +0 -122
- package/src/hooks/use-debounce.ts +0 -114
- package/src/hooks/use-dismiss.ts +0 -371
- package/src/hooks/use-document-title.ts +0 -33
- package/src/hooks/use-file-drop.ts +0 -121
- package/src/hooks/use-file-picker-labels.ts +0 -28
- package/src/hooks/use-file-picker.tsx +0 -359
- package/src/hooks/use-focus-trap.ts +0 -199
- package/src/hooks/use-hotkey.ts +0 -212
- package/src/hooks/use-large-text.ts +0 -41
- package/src/hooks/use-long-press.ts +0 -140
- package/src/hooks/use-media-query.ts +0 -39
- package/src/hooks/use-mounted.ts +0 -39
- package/src/hooks/use-noindex.ts +0 -37
- package/src/hooks/use-overlay-history.ts +0 -714
- package/src/hooks/use-row-swipe.ts +0 -207
- package/src/hooks/use-search-param-state.ts +0 -434
- package/src/hooks/use-windowed-rows.ts +0 -225
- package/src/i18n/defaults.ts +0 -267
- package/src/i18n/german.ts +0 -2059
- package/src/i18n/kit-labels.tsx +0 -1003
- package/src/i18n/languages.ts +0 -349
- package/src/i18n/locales/de-CH.ts +0 -24
- package/src/i18n/locales/en.ts +0 -267
- package/src/i18n/locales/es.ts +0 -1999
- package/src/i18n/locales/fr.ts +0 -2037
- package/src/i18n/locales/hu.ts +0 -2004
- package/src/i18n/locales/it.ts +0 -2014
- package/src/i18n/locales/zh.ts +0 -1912
- package/src/i18n/plurals.ts +0 -86
- package/src/i18n/review.ts +0 -475
- package/src/i18n/shared-labels.ts +0 -138
- package/src/i18n/swiss.ts +0 -29
- package/src/index.ts +0 -1191
- package/src/landing/access.ts +0 -93
- package/src/landing/landing-actions.tsx +0 -97
- package/src/landing/landing-labels.ts +0 -59
- package/src/landing/landing-sections.tsx +0 -341
- package/src/landing/page-seo.ts +0 -261
- package/src/landing/public-header.tsx +0 -121
- package/src/landing/public-page.tsx +0 -106
- package/src/landing/routing.tsx +0 -225
- package/src/lib/broadcast.ts +0 -52
- package/src/lib/calc.ts +0 -323
- package/src/lib/chip-edge-snap.ts +0 -212
- package/src/lib/clipboard-minus.ts +0 -107
- package/src/lib/clipping.ts +0 -34
- package/src/lib/cn.ts +0 -28
- package/src/lib/column-mapping.ts +0 -234
- package/src/lib/countries.ts +0 -91
- package/src/lib/data-attributes.ts +0 -14
- package/src/lib/date-format.ts +0 -227
- package/src/lib/dates.ts +0 -288
- package/src/lib/day-format.ts +0 -96
- package/src/lib/decimal-marks.ts +0 -108
- package/src/lib/describe-failure.ts +0 -18
- package/src/lib/device-settings.ts +0 -147
- package/src/lib/direction.ts +0 -74
- package/src/lib/document-navigation.ts +0 -17
- package/src/lib/document-title.ts +0 -41
- package/src/lib/download.ts +0 -172
- package/src/lib/float-clearance.ts +0 -70
- package/src/lib/floating-stack.ts +0 -70
- package/src/lib/focus-left.ts +0 -156
- package/src/lib/format.ts +0 -585
- package/src/lib/http-status.ts +0 -38
- package/src/lib/iban.ts +0 -251
- package/src/lib/ime.ts +0 -24
- package/src/lib/intl-cache.ts +0 -27
- package/src/lib/iso-day.ts +0 -13
- package/src/lib/lazy-with-fallback.ts +0 -82
- package/src/lib/logger.ts +0 -69
- package/src/lib/minus.ts +0 -50
- package/src/lib/path-pattern.ts +0 -55
- package/src/lib/person-name.ts +0 -155
- package/src/lib/phone.ts +0 -208
- package/src/lib/plain-text.ts +0 -22
- package/src/lib/presence.ts +0 -18
- package/src/lib/qr-encode.ts +0 -444
- package/src/lib/quiet-focus.ts +0 -32
- package/src/lib/reduced-motion.ts +0 -22
- package/src/lib/refs.ts +0 -22
- package/src/lib/round.ts +0 -43
- package/src/lib/safe-storage.ts +0 -119
- package/src/lib/server-wake.ts +0 -315
- package/src/lib/session-refresh.ts +0 -472
- package/src/lib/share-format.ts +0 -18
- package/src/lib/status-tone.ts +0 -43
- package/src/lib/strip-fade.ts +0 -287
- package/src/lib/table-text.ts +0 -554
- package/src/lib/text-case.ts +0 -19
- package/src/lib/text-match.ts +0 -169
- package/src/lib/thenable.ts +0 -19
- package/src/lib/translation-review.ts +0 -769
- package/src/notifications/device-zone-report.ts +0 -67
- package/src/notifications/feedback-notification-types-labels.ts +0 -33
- package/src/notifications/feedback-notification-types.ts +0 -71
- package/src/notifications/notification-bell.tsx +0 -119
- package/src/notifications/notification-inbox.tsx +0 -309
- package/src/notifications/notification-parts.tsx +0 -81
- package/src/notifications/notification-types-setting.tsx +0 -406
- package/src/notifications/notification-types.ts +0 -89
- package/src/notifications/notifications-labels.ts +0 -287
- package/src/notifications/push-device-setting.tsx +0 -230
- package/src/notifications/push-devices-setting.tsx +0 -374
- package/src/notifications/push-worker.ts +0 -168
- package/src/notifications/quiet-hours-setting.tsx +0 -238
- package/src/notifications/unsubscribe-panel.tsx +0 -200
- package/src/notifications/use-push-device.ts +0 -448
- package/src/offline/local-first.ts +0 -100
- package/src/offline/pwa-update-prompt-labels.ts +0 -9
- package/src/offline/pwa-update-prompt.tsx +0 -78
- package/src/offline/query-persistence.ts +0 -391
- package/src/offline/service-worker-updates.ts +0 -81
- package/src/offline/shared-computer-labels.ts +0 -8
- package/src/offline/shared-computer.tsx +0 -87
- package/src/offline/sign-out-pending-dialog-labels.ts +0 -21
- package/src/offline/sign-out-pending-dialog.tsx +0 -135
- package/src/offline.ts +0 -37
- package/src/push-worker.ts +0 -25
- package/src/rhf/fields.tsx +0 -2187
- package/src/rhf/form-core.tsx +0 -324
- package/src/rhf/form.tsx +0 -12
- package/src/rhf/line-items.tsx +0 -135
- package/src/rhf/use-rhf-wizard-step.ts +0 -104
- package/src/rhf.ts +0 -21
- package/src/search/command-palette-labels.ts +0 -16
- package/src/search/command-palette.tsx +0 -624
- package/src/search/global-search-labels.ts +0 -13
- package/src/search/global-search.tsx +0 -660
- package/src/search/search-index.ts +0 -283
- package/src/search/use-command-key.ts +0 -23
- package/src/search.ts +0 -14
- package/src/settings/device-reset-setting-labels.ts +0 -20
- package/src/settings/device-reset-setting.tsx +0 -116
- package/src/settings/settings-card-classes.ts +0 -11
- package/src/settings/settings-catalogue.ts +0 -150
- package/src/settings/settings-context.ts +0 -33
- package/src/settings/settings-heading.tsx +0 -67
- package/src/settings/settings-labels.ts +0 -87
- package/src/settings/settings-layout.tsx +0 -471
- package/src/settings/settings-section.tsx +0 -108
- package/src/settings/use-account-appearance.ts +0 -148
- package/src/settings/use-account-language.ts +0 -146
- package/src/settings/use-settings-focus.ts +0 -128
- package/src/settings/use-settings-route.ts +0 -258
- package/src/shell/account-menu-language.tsx +0 -130
- package/src/shell/account-menu-text-size.tsx +0 -80
- package/src/shell/admin-menu.tsx +0 -183
- package/src/shell/app-shell-labels.ts +0 -11
- package/src/shell/app-shell.tsx +0 -1560
- package/src/shell/auth-layout.tsx +0 -186
- package/src/shell/company-switcher-labels.ts +0 -13
- package/src/shell/company-switcher.tsx +0 -136
- package/src/shell/dev-menu.tsx +0 -257
- package/src/shell/fill-height.tsx +0 -45
- package/src/shell/language-code.ts +0 -5
- package/src/shell/option-switcher-menu.tsx +0 -84
- package/src/shell/sync-status-indicator.tsx +0 -303
- package/src/shell/top-bar-actions.tsx +0 -87
- package/src/shell/top-bar-brand.tsx +0 -78
- package/src/shell/top-bar-parts-labels.ts +0 -148
- package/src/shell/top-bar.tsx +0 -40
- package/src/shell/topbar-action-menu.tsx +0 -567
- package/src/shell/topbar-controls.tsx +0 -269
- package/src/shell/tour-menu.tsx +0 -187
- package/src/shell.ts +0 -108
- package/src/sync/db.ts +0 -129
- package/src/sync/engine.ts +0 -1011
- package/src/sync/hooks.ts +0 -98
- package/src/sync/testing.ts +0 -73
- package/src/sync/wire.ts +0 -61
- package/src/sync.ts +0 -37
- package/src/table-text.ts +0 -8
- package/src/testing/css-variables.generated.ts +0 -112
- package/src/testing/css-variables.ts +0 -189
- package/src/testing/index.ts +0 -29
- package/src/testing/react.ts +0 -58
- package/src/testing/tour.ts +0 -41
- package/src/testing/viewport.ts +0 -357
- package/src/theme/chart-palette.ts +0 -232
- package/src/theme/color.ts +0 -272
- package/src/theme/contrast-tokens.ts +0 -268
- package/src/theme/contrast.ts +0 -250
- package/src/theme/palette-derive.ts +0 -825
- package/src/theme/palette-presets.ts +0 -544
- package/src/theme/palette-store.ts +0 -108
- package/src/theme/text-size.ts +0 -289
- package/src/theme/theme-store.ts +0 -157
- package/src/tour/tour-catalogue-labels.ts +0 -75
- package/src/tour/tour-catalogue.tsx +0 -335
- package/src/tour/tour-dock.ts +0 -134
- package/src/tour/tour-engine.ts +0 -37
- package/src/tour/tour-gates.ts +0 -218
- package/src/tour/tour-guide-button.tsx +0 -64
- package/src/tour/tour-guide-labels.ts +0 -15
- package/src/tour/tour-info.ts +0 -144
- package/src/tour/tour-labels.ts +0 -23
- package/src/tour/tour-overlay.tsx +0 -1170
- package/src/tour/tour.tsx +0 -750
- package/src/tour/use-tour-progress.ts +0 -671
- package/src/tour/use-tour-url-sync.ts +0 -266
- package/src/tour.ts +0 -21
- package/src/vite-env.d.ts +0 -23
- package/src/wizard/stepper-nav.tsx +0 -360
- package/src/wizard/types.ts +0 -275
- package/src/wizard/use-wizard.ts +0 -560
- package/src/wizard/validation.ts +0 -39
- package/src/wizard/wizard-context.tsx +0 -74
- package/src/wizard/wizard-labels.ts +0 -29
- package/src/wizard/wizard-step.tsx +0 -76
- package/src/wizard/wizard-summary.tsx +0 -84
- package/src/wizard.ts +0 -15
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from "react";
|
|
2
|
-
import type { KeyboardEvent, ReactNode, TouchEvent } from "react";
|
|
3
|
-
import { ChevronLeft, ChevronRight, Download, ExternalLink, FileText, ZoomIn } from "lucide-react";
|
|
4
|
-
|
|
5
|
-
import { cn } from "../lib/cn";
|
|
6
|
-
import { horizontalStep } from "../lib/direction";
|
|
7
|
-
import { hasContent } from "../lib/presence";
|
|
8
|
-
import { useKitLabels, type LabelOverride } from "../i18n/kit-labels";
|
|
9
|
-
import { useAuthedSrc } from "../hooks/use-authed-src";
|
|
10
|
-
import { useBreakpoint } from "../hooks/use-breakpoint";
|
|
11
|
-
import type { AuthedFetcher } from "../hooks/use-authed-src";
|
|
12
|
-
import { FullBleedDialog } from "./full-bleed-dialog";
|
|
13
|
-
import { IconButton } from "./icon-button";
|
|
14
|
-
import { buttonClasses } from "./button-look";
|
|
15
|
-
import { ImageStates, DEFAULT_AUTHED_IMAGE_LABELS } from "./authed-image";
|
|
16
|
-
import { useAnchorDir } from "./use-anchor-dir";
|
|
17
|
-
import { DEFAULT_LIGHTBOX_LABELS } from "./lightbox-labels";
|
|
18
|
-
|
|
19
|
-
/* ── The item both the grid and the lightbox show ────────────────────────── */
|
|
20
|
-
|
|
21
|
-
/** `image`: shown as a picture. `file`: anything a browser cannot put in an `<img>` —
|
|
22
|
-
* a floor plan uploaded as a PDF — shown as a file card with open and download. */
|
|
23
|
-
export type ImageItemKind = "image" | "file";
|
|
24
|
-
|
|
25
|
-
export interface ImageItem {
|
|
26
|
-
/** React key. Defaults to `src`. */
|
|
27
|
-
key?: string | number;
|
|
28
|
-
/** The full-size file — what the lightbox shows and downloads. An API path when the
|
|
29
|
-
* component is given a `fetcher`. */
|
|
30
|
-
src: string;
|
|
31
|
-
/** A smaller rendition for the grid, when the server has one. Default: `src`. */
|
|
32
|
-
thumbnailSrc?: string;
|
|
33
|
-
/** Required: the picture's text alternative, and the open button's name. */
|
|
34
|
-
alt: string;
|
|
35
|
-
/** Shown under the thumbnail and at the foot of the lightbox. */
|
|
36
|
-
caption?: ReactNode;
|
|
37
|
-
/** The file's MIME type, when known (`"application/pdf"`). Decides {@link kind}. */
|
|
38
|
-
mimeType?: string;
|
|
39
|
-
/** Say it outright. Default: from {@link mimeType}, else from the file extension in
|
|
40
|
-
* `src`, else — for a fetched file — from the type the server sent back. */
|
|
41
|
-
kind?: ImageItemKind;
|
|
42
|
-
/** The name a download is saved under, and a file card's heading. */
|
|
43
|
-
fileName?: string;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const FILE_EXTENSION = /\.(pdf|docx?|xlsx?|pptx?|odt|ods|zip|txt|csv|rtf)(?:[?#]|$)/i;
|
|
47
|
-
|
|
48
|
-
/** What an item is, from what is known about it WITHOUT fetching it — see
|
|
49
|
-
* {@link ImageItem.kind}. `fetchedType` is the blob's type once it is in. */
|
|
50
|
-
export function imageItemKind(item: ImageItem, fetchedType?: string): ImageItemKind {
|
|
51
|
-
if (item.kind) return item.kind;
|
|
52
|
-
if (item.mimeType) return item.mimeType.startsWith("image/") ? "image" : "file";
|
|
53
|
-
if (FILE_EXTENSION.test(item.src)) return "file";
|
|
54
|
-
if (fetchedType && !fetchedType.startsWith("image/")) return "file";
|
|
55
|
-
return "image";
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/* ── Labels ──────────────────────────────────────────────────────────────── */
|
|
59
|
-
|
|
60
|
-
export interface LightboxLabels {
|
|
61
|
-
/** The dialog's accessible name. */
|
|
62
|
-
dialog: string;
|
|
63
|
-
close: string;
|
|
64
|
-
previous: string;
|
|
65
|
-
next: string;
|
|
66
|
-
/** The visible counter: "3 / 7". */
|
|
67
|
-
counter: (index: number, count: number) => string;
|
|
68
|
-
/** What a screen reader hears on each page turn: "Image 3 of 7". The alt follows. */
|
|
69
|
-
position: (index: number, count: number) => string;
|
|
70
|
-
download: string;
|
|
71
|
-
/** The zoom toggle (a pressed/not-pressed button — its name does not change). */
|
|
72
|
-
zoom: string;
|
|
73
|
-
/** A file card's note: the file has no picture to show. */
|
|
74
|
-
noPreview: string;
|
|
75
|
-
/** A file card's link to the browser's own viewer (a PDF opens in its viewer). */
|
|
76
|
-
openInNewTab: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Defined in ./lightbox-labels, which holds no component code (0.34, KS U8).
|
|
80
|
-
export { DEFAULT_LIGHTBOX_LABELS };
|
|
81
|
-
|
|
82
|
-
/* ── The component ───────────────────────────────────────────────────────── */
|
|
83
|
-
|
|
84
|
-
export interface LightboxProps {
|
|
85
|
-
open: boolean;
|
|
86
|
-
/** The X, Escape and the Back gesture all call this. */
|
|
87
|
-
onClose: () => void;
|
|
88
|
-
items: readonly ImageItem[];
|
|
89
|
-
/** The item on screen (0-based). Controlled, so the grid — or a URL — can own it. */
|
|
90
|
-
index: number;
|
|
91
|
-
onIndexChange: (index: number) => void;
|
|
92
|
-
/** The app's authenticated GET (see {@link useAuthedSrc}); left out, `src` is
|
|
93
|
-
* loaded by the browser as usual. */
|
|
94
|
-
fetcher?: AuthedFetcher | null;
|
|
95
|
-
/** Previous from the first goes to the last, and next from the last to the first.
|
|
96
|
-
* Default `false`: the buttons at the ends refuse (`aria-disabled`, focus kept — 0.52),
|
|
97
|
-
* which says where the set ends. */
|
|
98
|
-
loop?: boolean;
|
|
99
|
-
/** Double-click (or double-tap) the picture, or the zoom button, to see it at full
|
|
100
|
-
* size and pan by scrolling. Default `true`. Pinch zoom is the browser's own. */
|
|
101
|
-
zoom?: boolean;
|
|
102
|
-
/** A download link in the header. Default `true`. */
|
|
103
|
-
download?: boolean;
|
|
104
|
-
/**
|
|
105
|
-
* Download through the app instead — kastlan's floor plans have `openDocument(id)`,
|
|
106
|
-
* which knows the stored file name. Replaces the link with a button that calls this.
|
|
107
|
-
*/
|
|
108
|
-
onDownload?: (item: ImageItem, index: number) => void;
|
|
109
|
-
/** Push a history entry so Back closes the viewer. Default `true`; see
|
|
110
|
-
* `FullBleedDialog`'s `backCloses` for when to turn it off. */
|
|
111
|
-
backCloses?: boolean;
|
|
112
|
-
labels?: LabelOverride<LightboxLabels>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/** Swipes shorter than this are taps, and a drag that is mostly vertical is a scroll. */
|
|
116
|
-
const SWIPE_MIN_PX = 50;
|
|
117
|
-
|
|
118
|
-
/** An end arrow's look: a disabled `overlay` IconButton's (its 50% and its resting disc
|
|
119
|
-
* under hover), for the focusable kind — `disabled:` cannot match `aria-disabled`. */
|
|
120
|
-
const ARROW_AT_END =
|
|
121
|
-
"aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:hover:bg-[color-mix(in_srgb,var(--bg-inverse)_60%,transparent)]";
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* A full-screen viewer for a set of images (and files that are not images).
|
|
125
|
-
*
|
|
126
|
-
* Built on {@link FullBleedDialog} rather than beside it, so the viewer has the kit's
|
|
127
|
-
* one implementation of everything an overlay owes the page: the focus trap, Escape,
|
|
128
|
-
* the Back gesture closing it instead of leaving the page (`useOverlayHistory`), the
|
|
129
|
-
* body-scroll lock and the enter/exit motion.
|
|
130
|
-
*
|
|
131
|
-
* Paging: the previous/next buttons, ←/→ (which swap in a right-to-left page — the
|
|
132
|
-
* direction is read at the point the viewer is rendered, since the dialog itself is
|
|
133
|
-
* portalled out of it), Home/End, and a horizontal swipe on a touch screen.
|
|
134
|
-
*
|
|
135
|
-
* Zoom is a TOGGLE, not a gesture: double-click (or the zoom button) shows the picture
|
|
136
|
-
* at its natural size and the body scrolls to pan. Pinch-to-zoom is not implemented —
|
|
137
|
-
* the browser's own page pinch still works — because a pinch handler would have to own
|
|
138
|
-
* every touch on the picture, and with it the swipe.
|
|
139
|
-
*
|
|
140
|
-
* A non-image (a PDF floor plan) is shown as a file card: its name, "no preview", a
|
|
141
|
-
* link that opens it in the browser's own viewer, and the download. An `<iframe>`
|
|
142
|
-
* preview was the alternative; phone browsers render a PDF in one inconsistently or
|
|
143
|
-
* not at all, and a card works everywhere.
|
|
144
|
-
*/
|
|
145
|
-
export function Lightbox({
|
|
146
|
-
open,
|
|
147
|
-
onClose,
|
|
148
|
-
items,
|
|
149
|
-
index: indexProp,
|
|
150
|
-
onIndexChange,
|
|
151
|
-
fetcher,
|
|
152
|
-
loop = false,
|
|
153
|
-
zoom: zoomEnabled = true,
|
|
154
|
-
download = true,
|
|
155
|
-
onDownload,
|
|
156
|
-
backCloses,
|
|
157
|
-
labels: labelsProp,
|
|
158
|
-
}: LightboxProps) {
|
|
159
|
-
const labels = useKitLabels("lightbox", DEFAULT_LIGHTBOX_LABELS, labelsProp);
|
|
160
|
-
const imageLabels = useKitLabels("authedImage", DEFAULT_AUTHED_IMAGE_LABELS);
|
|
161
|
-
const count = items.length;
|
|
162
|
-
// Clamped: the set can shrink under an open viewer (the photo on screen was deleted).
|
|
163
|
-
const index = count === 0 ? 0 : Math.min(Math.max(indexProp, 0), count - 1);
|
|
164
|
-
const item = items[index] as ImageItem | undefined;
|
|
165
|
-
|
|
166
|
-
// The dialog is portalled to <body>, out of the subtree whose `dir` it would have
|
|
167
|
-
// inherited; this marker stays where the viewer was rendered and reads it there.
|
|
168
|
-
const anchorRef = useRef<HTMLSpanElement>(null);
|
|
169
|
-
const dir = useAnchorDir(anchorRef, open);
|
|
170
|
-
|
|
171
|
-
// The toolbar's words (docs/text-size-harmonization.md §4, §10.8). At Large an
|
|
172
|
-
// IconButton shows its label beside the glyph; on a narrow screen the viewer's header —
|
|
173
|
-
// the counter, Zoom, Download and the dialog's close — has no room for two words at
|
|
174
|
-
// 150 % (a 390 px phone is 260 px of Normal type), so below `sm` the toolbar keeps its
|
|
175
|
-
// icons, as the plain download link hides its word there (`max-sm:sr-only`). From `sm`
|
|
176
|
-
// up, at the same breakpoint the CSS uses, the words show. Each name stays the
|
|
177
|
-
// accessible name and the tooltip either way.
|
|
178
|
-
const narrow = useBreakpoint("max-sm");
|
|
179
|
-
const toolbarLabelVisible = narrow ? false : undefined;
|
|
180
|
-
|
|
181
|
-
const fetched = useAuthedSrc(item?.src, { fetcher, enabled: open });
|
|
182
|
-
const kind = item ? imageItemKind(item, fetched.type) : "image";
|
|
183
|
-
|
|
184
|
-
const [zoomedKey, setZoomedKey] = useState<string | null>(null);
|
|
185
|
-
const itemKey = item ? String(item.key ?? item.src) : null;
|
|
186
|
-
// Zoom belongs to the picture it was turned on for: paging on resets it.
|
|
187
|
-
const zoomed = zoomEnabled && kind === "image" && zoomedKey !== null && zoomedKey === itemKey;
|
|
188
|
-
const toggleZoom = () => setZoomedKey(zoomed ? null : itemKey);
|
|
189
|
-
|
|
190
|
-
const canPrev = loop ? count > 1 : index > 0;
|
|
191
|
-
const canNext = loop ? count > 1 : index < count - 1;
|
|
192
|
-
const go = (step: number) => {
|
|
193
|
-
if (count === 0) return;
|
|
194
|
-
let next = index + step;
|
|
195
|
-
if (loop) next = (next + count) % count;
|
|
196
|
-
if (next < 0 || next >= count || next === index) return;
|
|
197
|
-
onIndexChange(next);
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
|
|
201
|
-
// A key meant for a control stays with it: Space/Enter on a button, typing in any
|
|
202
|
-
// field a caller's caption might hold.
|
|
203
|
-
const target = e.target as HTMLElement;
|
|
204
|
-
if (target.closest("input, textarea, select, [contenteditable='true']")) return;
|
|
205
|
-
const step = horizontalStep(e.key, e.currentTarget);
|
|
206
|
-
if (step !== 0) {
|
|
207
|
-
e.preventDefault();
|
|
208
|
-
go(step);
|
|
209
|
-
} else if (e.key === "Home") {
|
|
210
|
-
e.preventDefault();
|
|
211
|
-
if (index !== 0) onIndexChange(0);
|
|
212
|
-
} else if (e.key === "End") {
|
|
213
|
-
e.preventDefault();
|
|
214
|
-
if (index !== count - 1) onIndexChange(count - 1);
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
const touchStart = useRef<{ x: number; y: number } | null>(null);
|
|
219
|
-
const onTouchStart = (e: TouchEvent) => {
|
|
220
|
-
const t = e.touches[0];
|
|
221
|
-
touchStart.current = e.touches.length === 1 && t ? { x: t.clientX, y: t.clientY } : null;
|
|
222
|
-
};
|
|
223
|
-
const onTouchEnd = (e: TouchEvent) => {
|
|
224
|
-
const start = touchStart.current;
|
|
225
|
-
touchStart.current = null;
|
|
226
|
-
const t = e.changedTouches[0];
|
|
227
|
-
// Zoomed, a drag is a PAN of the picture, not a page turn.
|
|
228
|
-
if (!start || !t || zoomed) return;
|
|
229
|
-
const dx = t.clientX - start.x;
|
|
230
|
-
const dy = t.clientY - start.y;
|
|
231
|
-
if (Math.abs(dx) < SWIPE_MIN_PX || Math.abs(dx) < Math.abs(dy)) return;
|
|
232
|
-
// Swiping toward the START edge brings in the next picture from the end edge.
|
|
233
|
-
const towardStart = dir === "rtl" ? dx > 0 : dx < 0;
|
|
234
|
-
go(towardStart ? 1 : -1);
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
// Paging the viewer while zoomed would leave the new picture scrolled to where the
|
|
238
|
-
// last one was panned; start each at its top-left.
|
|
239
|
-
const bodyRef = useRef<HTMLDivElement>(null);
|
|
240
|
-
useEffect(() => {
|
|
241
|
-
bodyRef.current?.scrollTo?.({ top: 0, left: 0 });
|
|
242
|
-
}, [index]);
|
|
243
|
-
|
|
244
|
-
const downloadHref = fetched.src;
|
|
245
|
-
const downloadControl =
|
|
246
|
-
download && item ? (
|
|
247
|
-
onDownload ? (
|
|
248
|
-
<IconButton
|
|
249
|
-
size="sm"
|
|
250
|
-
label={labels.download}
|
|
251
|
-
labelVisible={toolbarLabelVisible}
|
|
252
|
-
onClick={() => onDownload(item, index)}
|
|
253
|
-
>
|
|
254
|
-
<Download />
|
|
255
|
-
</IconButton>
|
|
256
|
-
) : downloadHref ? (
|
|
257
|
-
<a
|
|
258
|
-
href={downloadHref}
|
|
259
|
-
// `download` names the saved file; a blob: URL has no name of its own.
|
|
260
|
-
download={item.fileName ?? ""}
|
|
261
|
-
className={buttonClasses("ghost", { size: "sm" })}
|
|
262
|
-
>
|
|
263
|
-
<Download aria-hidden className="size-4" />
|
|
264
|
-
<span className="max-sm:sr-only">{labels.download}</span>
|
|
265
|
-
</a>
|
|
266
|
-
) : null
|
|
267
|
-
) : null;
|
|
268
|
-
|
|
269
|
-
const header = item ? (
|
|
270
|
-
<div className="flex min-w-0 items-center gap-2">
|
|
271
|
-
<span aria-hidden className="shrink-0 text-sm tabular-nums text-secondary">
|
|
272
|
-
{labels.counter(index + 1, count)}
|
|
273
|
-
</span>
|
|
274
|
-
{/* The page turn, said — focus does not move when the picture changes, so
|
|
275
|
-
without this a reader pressing → hears nothing at all. */}
|
|
276
|
-
<span role="status" aria-live="polite" className="sr-only">
|
|
277
|
-
{`${labels.position(index + 1, count)}${item.alt ? `: ${item.alt}` : ""}`}
|
|
278
|
-
</span>
|
|
279
|
-
<span className="min-w-0 flex-1" />
|
|
280
|
-
{zoomEnabled && kind === "image" && (
|
|
281
|
-
<IconButton
|
|
282
|
-
size="sm"
|
|
283
|
-
label={labels.zoom}
|
|
284
|
-
labelVisible={toolbarLabelVisible}
|
|
285
|
-
pressed={zoomed}
|
|
286
|
-
onClick={toggleZoom}
|
|
287
|
-
>
|
|
288
|
-
<ZoomIn />
|
|
289
|
-
</IconButton>
|
|
290
|
-
)}
|
|
291
|
-
{downloadControl}
|
|
292
|
-
</div>
|
|
293
|
-
) : null;
|
|
294
|
-
|
|
295
|
-
const slide = !item ? null : kind === "file" ? (
|
|
296
|
-
<div className="flex max-w-sm flex-col items-center gap-3 rounded-lg border border-subtle p-6 text-center">
|
|
297
|
-
<FileText aria-hidden className="size-10 text-muted" />
|
|
298
|
-
<p className="break-all font-medium text-primary">{item.fileName ?? item.alt}</p>
|
|
299
|
-
<p className="text-sm text-muted">{labels.noPreview}</p>
|
|
300
|
-
{fetched.src && (
|
|
301
|
-
<a
|
|
302
|
-
href={fetched.src}
|
|
303
|
-
target="_blank"
|
|
304
|
-
rel="noreferrer noopener"
|
|
305
|
-
className={buttonClasses("secondary", { size: "sm" })}
|
|
306
|
-
>
|
|
307
|
-
<ExternalLink aria-hidden className="size-4" />
|
|
308
|
-
{labels.openInNewTab}
|
|
309
|
-
</a>
|
|
310
|
-
)}
|
|
311
|
-
</div>
|
|
312
|
-
) : (
|
|
313
|
-
<ImageStates
|
|
314
|
-
// Keyed by item: a new picture is a new decode, never the old one's "loaded".
|
|
315
|
-
key={itemKey ?? undefined}
|
|
316
|
-
fetched={fetched}
|
|
317
|
-
alt={item.alt}
|
|
318
|
-
labels={imageLabels}
|
|
319
|
-
wrapperClassName={zoomed ? "max-w-none shrink-0" : "flex h-full w-full items-center justify-center"}
|
|
320
|
-
className={cn(
|
|
321
|
-
zoomed ? "max-w-none cursor-zoom-out" : "max-h-full max-w-full object-contain",
|
|
322
|
-
!zoomed && zoomEnabled && "cursor-zoom-in",
|
|
323
|
-
)}
|
|
324
|
-
imgProps={{
|
|
325
|
-
draggable: false,
|
|
326
|
-
onDoubleClick: zoomEnabled ? toggleZoom : undefined,
|
|
327
|
-
}}
|
|
328
|
-
/>
|
|
329
|
-
);
|
|
330
|
-
|
|
331
|
-
return (
|
|
332
|
-
<>
|
|
333
|
-
<span ref={anchorRef} hidden />
|
|
334
|
-
<FullBleedDialog
|
|
335
|
-
open={open && !!item}
|
|
336
|
-
onClose={onClose}
|
|
337
|
-
closeLabel={labels.close}
|
|
338
|
-
aria-label={labels.dialog}
|
|
339
|
-
dir={dir}
|
|
340
|
-
header={header}
|
|
341
|
-
backCloses={backCloses}
|
|
342
|
-
onKeyDown={onKeyDown}
|
|
343
|
-
data-lightbox=""
|
|
344
|
-
footer={
|
|
345
|
-
// `hasContent` (refactor audit 2026-10-30, DUP-14): a `""` caption drew an empty
|
|
346
|
-
// footer bar.
|
|
347
|
-
hasContent(item?.caption) ? (
|
|
348
|
-
<p className="me-auto min-w-0 text-sm text-secondary">{item?.caption}</p>
|
|
349
|
-
) : undefined
|
|
350
|
-
}
|
|
351
|
-
>
|
|
352
|
-
<div
|
|
353
|
-
ref={bodyRef}
|
|
354
|
-
data-lightbox-stage=""
|
|
355
|
-
data-zoomed={zoomed ? "" : undefined}
|
|
356
|
-
onTouchStart={onTouchStart}
|
|
357
|
-
onTouchEnd={onTouchEnd}
|
|
358
|
-
className={cn(
|
|
359
|
-
"relative h-full min-h-48 w-full",
|
|
360
|
-
zoomed ? "overflow-auto" : "flex items-center justify-center overflow-hidden",
|
|
361
|
-
)}
|
|
362
|
-
>
|
|
363
|
-
{slide}
|
|
364
|
-
</div>
|
|
365
|
-
{count > 1 && (
|
|
366
|
-
// At an end the arrow refuses rather than turns `disabled` (refactor audit
|
|
367
|
-
// 2026-10-30, INP-4, JumpCalendar's rule): the press that reaches the last
|
|
368
|
-
// picture is made with the focus on ›, and a focused button that turns
|
|
369
|
-
// `disabled` drops the focus out of the viewer's trap to <body>. kastlan's
|
|
370
|
-
// ImageGrid and keksdose's invoice review open it without `loop`.
|
|
371
|
-
<>
|
|
372
|
-
<IconButton
|
|
373
|
-
variant="overlay"
|
|
374
|
-
size="lg"
|
|
375
|
-
label={labels.previous}
|
|
376
|
-
aria-disabled={!canPrev || undefined}
|
|
377
|
-
onClick={() => go(-1)}
|
|
378
|
-
className={cn("absolute start-3 top-1/2 -translate-y-1/2", ARROW_AT_END)}
|
|
379
|
-
tooltip={false}
|
|
380
|
-
>
|
|
381
|
-
<ChevronLeft className="rtl:-scale-x-100" />
|
|
382
|
-
</IconButton>
|
|
383
|
-
<IconButton
|
|
384
|
-
variant="overlay"
|
|
385
|
-
size="lg"
|
|
386
|
-
label={labels.next}
|
|
387
|
-
aria-disabled={!canNext || undefined}
|
|
388
|
-
onClick={() => go(1)}
|
|
389
|
-
className={cn("absolute end-3 top-1/2 -translate-y-1/2", ARROW_AT_END)}
|
|
390
|
-
tooltip={false}
|
|
391
|
-
>
|
|
392
|
-
<ChevronRight className="rtl:-scale-x-100" />
|
|
393
|
-
</IconButton>
|
|
394
|
-
</>
|
|
395
|
-
)}
|
|
396
|
-
</FullBleedDialog>
|
|
397
|
-
</>
|
|
398
|
-
);
|
|
399
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// The English words of ./line-items, in a module with no component code: the English
|
|
2
|
-
// catalogue (src/i18n/defaults.ts) imports them without the component, so `en` loads as one
|
|
3
|
-
// chunk like the other languages (0.34, KS U8). ./line-items re-exports them.
|
|
4
|
-
|
|
5
|
-
import type { LineItemsLabels } from "./line-items";
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_LINE_ITEMS_LABELS: LineItemsLabels = {
|
|
8
|
-
add: "Add row",
|
|
9
|
-
remove: (row) => `Remove row ${row}`,
|
|
10
|
-
confirmRemove: (row) => `Remove row ${row}? Press again to confirm`,
|
|
11
|
-
row: (row) => `Row ${row}`,
|
|
12
|
-
cell: (column, row) => `${column}, row ${row}`,
|
|
13
|
-
totals: "Total",
|
|
14
|
-
};
|