@eifi1/ui-kit 0.53.0 → 0.55.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 +96 -82
- package/dist/account/delete-account-setting.d.ts +3 -2
- package/dist/account/delete-account-setting.js.map +1 -1
- 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/auth/auth-errors.d.ts +36 -0
- package/dist/auth/auth-errors.js +20 -0
- package/dist/auth/auth-errors.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.d.ts +2 -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 +5 -9
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar-heatmap.js +6 -4
- 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-option-list.d.ts +2 -1
- package/dist/components/currency-option-list.js +10 -3
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.d.ts +3 -1
- package/dist/components/currency-select.js +2 -2
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +22 -1
- package/dist/components/danger-confirm.js +52 -30
- 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-filter-popover.d.ts +2 -1
- package/dist/components/data-table-filter-popover.js +3 -2
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +33 -3
- package/dist/components/data-table-filters.js +6 -4
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-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 +5 -1
- package/dist/components/dialog-frame.js +6 -2
- 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 +6 -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 +80 -0
- package/dist/components/legended-series-chart.js +70 -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 +16 -7
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +48 -0
- package/dist/components/modal.js +26 -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/stat-tile.d.ts +21 -2
- package/dist/components/stat-tile.js +4 -2
- package/dist/components/stat-tile.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/currencies.d.ts +16 -2
- package/dist/currencies.js +2 -1
- package/dist/currencies.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-context-labels.js +2 -1
- package/dist/feedback/feedback-context-labels.js.map +1 -1
- package/dist/feedback/feedback-context.d.ts +19 -3
- package/dist/feedback/feedback-context.js +12 -1
- package/dist/feedback/feedback-context.js.map +1 -1
- package/dist/feedback/feedback-diagnostics.d.ts +17 -0
- package/dist/feedback/feedback-diagnostics.js +27 -0
- package/dist/feedback/feedback-diagnostics.js.map +1 -0
- package/dist/feedback/feedback-dialog.d.ts +10 -0
- package/dist/feedback/feedback-dialog.js +6 -4
- package/dist/feedback/feedback-dialog.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-record.d.ts +5 -0
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.js +1 -0
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +3 -0
- package/dist/feedback/feedback-row-detail.js +3 -0
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +5 -1
- package/dist/feedback/feedback-submit-dialog.js +15 -3
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-submit.d.ts +30 -2
- package/dist/feedback/feedback-submit.js +5 -2
- package/dist/feedback/feedback-submit.js.map +1 -1
- 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 +2 -1
- 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 +78 -4
- 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 +95 -5
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +74 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +75 -3
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +77 -4
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +77 -4
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +74 -4
- 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 +27 -8
- package/dist/index.js +41 -2
- 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 +36 -4
- package/dist/lib/dates.js +49 -13
- 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/format.d.ts +37 -2
- package/dist/lib/format.js +25 -1
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/intl-cache.d.ts +4 -2
- package/dist/lib/intl-cache.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/lib/translation-review.d.ts +26 -0
- package/dist/lib/translation-review.js +14 -0
- package/dist/lib/translation-review.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 +5 -9
- 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 -341
- 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 -370
- 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 -815
- 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 -594
- 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 -180
- package/src/components/currency-select.tsx +0 -341
- package/src/components/danger-confirm-labels.ts +0 -20
- package/src/components/danger-confirm.tsx +0 -934
- 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 -281
- package/src/components/data-table-filters.ts +0 -287
- 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 -276
- 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 -789
- package/src/components/modal.tsx +0 -505
- 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 -558
- 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 -725
- 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 -70
- 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 -10
- package/src/feedback/feedback-context.tsx +0 -213
- package/src/feedback/feedback-crash.ts +0 -547
- package/src/feedback/feedback-dialog-labels.ts +0 -29
- package/src/feedback/feedback-dialog.tsx +0 -440
- 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 -423
- 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 -30
- package/src/feedback/feedback-row-detail.tsx +0 -858
- package/src/feedback/feedback-status-undo.ts +0 -109
- package/src/feedback/feedback-submit-dialog.tsx +0 -118
- package/src/feedback/feedback-submit.tsx +0 -237
- 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 -189
- 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 -2057
- 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 -1997
- package/src/i18n/locales/fr.ts +0 -2035
- package/src/i18n/locales/hu.ts +0 -2002
- package/src/i18n/locales/it.ts +0 -2012
- package/src/i18n/locales/zh.ts +0 -1910
- 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 -1179
- 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 -266
- 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 -522
- 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 -25
- 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 -717
- 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
package/src/eslint/index.ts
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
// `@eifi1/ui-kit/eslint` — the kit's role-utility rule for an app's own markup (round 0.35
|
|
2
|
-
// R5, Kurvenschmiede's Q6).
|
|
3
|
-
//
|
|
4
|
-
// The kit holds its markup to "write `text-muted`, not `text-[var(--text-muted)]`" with
|
|
5
|
-
// `npm run check:tokens`, at zero since 0.34. The apps are asked to follow the same rule
|
|
6
|
-
// (README "How to write a colour"), but nothing in their builds objected when a
|
|
7
|
-
// `[var(--role)]` class came back. This is that check as an ESLint plugin, so an app's
|
|
8
|
-
// `eslint.config.js` turns it on with one line:
|
|
9
|
-
//
|
|
10
|
-
// import uiKit from "@eifi1/ui-kit/eslint";
|
|
11
|
-
// export default [..., uiKit.configs.recommended];
|
|
12
|
-
//
|
|
13
|
-
// It reads every string literal and template-literal quasi — a JSX `className`, a `cn()` or
|
|
14
|
-
// `clsx()` argument, a class constant — and reports a `[var(--x)]` class where the property
|
|
15
|
-
// has a role utility for that token, naming it. One utility is an autofix that keeps the
|
|
16
|
-
// variants and the opacity: `hover:text-[var(--text-muted)]/70` → `hover:text-muted/70`.
|
|
17
|
-
//
|
|
18
|
-
// Plain Node, like the rest of an ESLint config: no React, no stylesheet, and no import of
|
|
19
|
-
// `eslint` itself, which is the app's (packaging-contract.test.ts refuses an undeclared
|
|
20
|
-
// package in src/), so the few types it needs are written out below.
|
|
21
|
-
import { findRoleClasses } from "./role-utilities";
|
|
22
|
-
import { ROLE_UTILITIES } from "./role-utilities.generated";
|
|
23
|
-
|
|
24
|
-
interface Position {
|
|
25
|
-
line: number;
|
|
26
|
-
column: number;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** The part of an ESTree string node the rule reads. */
|
|
30
|
-
interface StringNode {
|
|
31
|
-
type: string;
|
|
32
|
-
value?: unknown;
|
|
33
|
-
range?: [number, number];
|
|
34
|
-
loc?: { start: Position; end: Position } | null;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
interface Fix {
|
|
38
|
-
range: [number, number];
|
|
39
|
-
text: string;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* The part of ESLint's rule context the rule uses — `sourceCode.text` and `report`, which
|
|
44
|
-
* every ESLint since flat config has — so that ESLint's own RuleContext, and @eslint/core's
|
|
45
|
-
* that `defineConfig` checks a plugin against, are assignable to it. The source is only an
|
|
46
|
-
* `object` here because a language's source may be binary, with no `text` at all.
|
|
47
|
-
*/
|
|
48
|
-
interface RoleUtilitiesContext {
|
|
49
|
-
sourceCode: object;
|
|
50
|
-
report(descriptor: {
|
|
51
|
-
loc: { start: Position; end: Position };
|
|
52
|
-
messageId: string;
|
|
53
|
-
data: Record<string, string>;
|
|
54
|
-
fix: ((fixer: { replaceTextRange(range: [number, number], text: string): Fix }) => Fix) | null;
|
|
55
|
-
}): void;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
interface RoleUtilitiesRule {
|
|
59
|
-
meta: {
|
|
60
|
-
type: "suggestion";
|
|
61
|
-
docs: { description: string; url: string };
|
|
62
|
-
fixable: "code";
|
|
63
|
-
schema: [];
|
|
64
|
-
messages: { useRoleUtility: string };
|
|
65
|
-
};
|
|
66
|
-
create(context: RoleUtilitiesContext): {
|
|
67
|
-
Literal(node: StringNode): void;
|
|
68
|
-
TemplateElement(node: StringNode): void;
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const roleUtilities: RoleUtilitiesRule = {
|
|
73
|
-
meta: {
|
|
74
|
-
type: "suggestion",
|
|
75
|
-
docs: {
|
|
76
|
-
description: "Write a colour role's utility (text-muted) rather than its [var(--…)] class",
|
|
77
|
-
url: "https://github.com/Eifi1/ui-kit#lint-the-role-utilities-in-an-app",
|
|
78
|
-
},
|
|
79
|
-
fixable: "code",
|
|
80
|
-
schema: [],
|
|
81
|
-
messages: {
|
|
82
|
-
useRoleUtility:
|
|
83
|
-
"Write the role utility `{{utilities}}`, not `{{found}}`: variants and an opacity work on it the same (tokens.css, @theme inline).",
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
create(context) {
|
|
87
|
-
const source = context.sourceCode as { text?: unknown };
|
|
88
|
-
const text = typeof source.text === "string" ? source.text : "";
|
|
89
|
-
const check = (node: StringNode) => {
|
|
90
|
-
if (!node.range || !node.loc) return;
|
|
91
|
-
const [start] = node.range;
|
|
92
|
-
const { line, column } = node.loc.start;
|
|
93
|
-
// An offset in the node's source text — quotes included, so it is an offset in the
|
|
94
|
-
// file — as a position. A template literal may span lines.
|
|
95
|
-
const at = (offset: number): Position => {
|
|
96
|
-
const lines = text.slice(start, start + offset).split("\n");
|
|
97
|
-
const last = lines.length - 1;
|
|
98
|
-
return { line: line + last, column: last ? lines[last].length : column + offset };
|
|
99
|
-
};
|
|
100
|
-
for (const hit of findRoleClasses(text.slice(start, node.range[1]), ROLE_UTILITIES)) {
|
|
101
|
-
const end = hit.index + hit.found.length;
|
|
102
|
-
const range: [number, number] = [start + hit.index, start + end];
|
|
103
|
-
const [only] = hit.utilities;
|
|
104
|
-
context.report({
|
|
105
|
-
loc: { start: at(hit.index), end: at(end) },
|
|
106
|
-
messageId: "useRoleUtility",
|
|
107
|
-
data: { found: hit.found, utilities: hit.utilities.join("` or `") },
|
|
108
|
-
// Several names for one token are a choice, not a fix.
|
|
109
|
-
fix: hit.utilities.length === 1 ? (fixer) => fixer.replaceTextRange(range, only) : null,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
return {
|
|
114
|
-
Literal(node) {
|
|
115
|
-
if (typeof node.value === "string") check(node);
|
|
116
|
-
},
|
|
117
|
-
TemplateElement: check,
|
|
118
|
-
};
|
|
119
|
-
},
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
// The kit's version, baked in by tsup's `define` (tsup.config.ts). ESLint's cache keys a
|
|
123
|
-
// file's result on each plugin's name@version, so without it an app's `eslint --cache`
|
|
124
|
-
// would keep a file's old verdict after a kit release that gave a role a utility. Unset
|
|
125
|
-
// when the source runs (the tests), where nothing is cached.
|
|
126
|
-
declare const __UI_KIT_VERSION__: string | undefined;
|
|
127
|
-
const VERSION = typeof __UI_KIT_VERSION__ === "string" ? __UI_KIT_VERSION__ : "0.0.0-source";
|
|
128
|
-
|
|
129
|
-
/** Spelled out, self-reference included, so a typed config (`defineConfig`, `tseslint.config`) takes it. */
|
|
130
|
-
interface UiKitEslintPlugin {
|
|
131
|
-
meta: { name: string; version: string; namespace: string };
|
|
132
|
-
rules: { "role-utilities": RoleUtilitiesRule };
|
|
133
|
-
configs: {
|
|
134
|
-
/** The rule as an error, on every file the app's other config objects lint but its tests. */
|
|
135
|
-
recommended: {
|
|
136
|
-
name: string;
|
|
137
|
-
ignores: string[];
|
|
138
|
-
plugins: { "@eifi1/ui-kit": UiKitEslintPlugin };
|
|
139
|
-
rules: { "@eifi1/ui-kit/role-utilities": "error" };
|
|
140
|
-
};
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const recommended: UiKitEslintPlugin["configs"]["recommended"] = {
|
|
145
|
-
name: "@eifi1/ui-kit/recommended",
|
|
146
|
-
// Not the tests, as check:tokens skips the kit's: a test names the old class to assert it
|
|
147
|
-
// is gone (keksdose's cleared-status-toggle.test.tsx does, three times).
|
|
148
|
-
ignores: ["**/__tests__/**", "**/*.test.*", "**/*.spec.*"],
|
|
149
|
-
plugins: {} as UiKitEslintPlugin["configs"]["recommended"]["plugins"],
|
|
150
|
-
rules: { "@eifi1/ui-kit/role-utilities": "error" },
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
/** The flat-config plugin: add `configs.recommended`, or register it under `@eifi1/ui-kit`. */
|
|
154
|
-
const plugin: UiKitEslintPlugin = {
|
|
155
|
-
meta: { name: "@eifi1/ui-kit", version: VERSION, namespace: "@eifi1/ui-kit" },
|
|
156
|
-
rules: { "role-utilities": roleUtilities },
|
|
157
|
-
configs: { recommended },
|
|
158
|
-
};
|
|
159
|
-
recommended.plugins["@eifi1/ui-kit"] = plugin;
|
|
160
|
-
|
|
161
|
-
export default plugin;
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
// GENERATED by scripts/gen-role-utilities.mjs from tokens.css's `@theme inline` block — do
|
|
2
|
-
// not edit. `npm run check:tokens` fails while it is stale; re-run the script.
|
|
3
|
-
//
|
|
4
|
-
// Per property, each token that has a role utility → the utility's name after the
|
|
5
|
-
// property's prefix (`border`: `--border` → `subtle`, i.e. `border-subtle`). Read by
|
|
6
|
-
// `@eifi1/ui-kit/eslint` and scripts/check-token-discipline.mjs (round 0.35 R5).
|
|
7
|
-
import type { RoleUtilityTable } from "./role-utilities";
|
|
8
|
-
|
|
9
|
-
export const ROLE_UTILITIES: RoleUtilityTable = {
|
|
10
|
-
"text": {
|
|
11
|
-
"--text-primary": ["primary"],
|
|
12
|
-
"--text-secondary": ["secondary"],
|
|
13
|
-
"--text-muted": ["muted"],
|
|
14
|
-
"--text-placeholder": ["placeholder"],
|
|
15
|
-
"--text-inverse": ["inverse"],
|
|
16
|
-
"--brand": ["brand"],
|
|
17
|
-
"--brand-muted": ["brand-muted"],
|
|
18
|
-
"--danger": ["danger"],
|
|
19
|
-
"--warning": ["warning"],
|
|
20
|
-
"--success": ["success"],
|
|
21
|
-
"--info": ["info"],
|
|
22
|
-
"--money-income": ["money-income"],
|
|
23
|
-
"--money-expense": ["money-expense"],
|
|
24
|
-
"--money-net": ["money-net"],
|
|
25
|
-
"--money-neutral": ["money-neutral"],
|
|
26
|
-
"--hue-blue": ["hue-blue"],
|
|
27
|
-
"--hue-indigo": ["hue-indigo"],
|
|
28
|
-
"--hue-purple": ["hue-purple"],
|
|
29
|
-
"--hue-teal": ["hue-teal"],
|
|
30
|
-
"--hue-orange": ["hue-orange"],
|
|
31
|
-
"--brand-contrast": ["brand-contrast"],
|
|
32
|
-
"--danger-contrast": ["danger-contrast"],
|
|
33
|
-
"--warning-contrast": ["warning-contrast"],
|
|
34
|
-
"--success-contrast": ["success-contrast"],
|
|
35
|
-
"--info-contrast": ["info-contrast"],
|
|
36
|
-
"--neutral-contrast": ["neutral-contrast"],
|
|
37
|
-
"--money-income-contrast": ["money-income-contrast"],
|
|
38
|
-
"--money-expense-contrast": ["money-expense-contrast"],
|
|
39
|
-
"--money-net-contrast": ["money-net-contrast"],
|
|
40
|
-
"--money-neutral-contrast": ["money-neutral-contrast"],
|
|
41
|
-
"--hue-blue-contrast": ["hue-blue-contrast"],
|
|
42
|
-
"--hue-indigo-contrast": ["hue-indigo-contrast"],
|
|
43
|
-
"--hue-purple-contrast": ["hue-purple-contrast"],
|
|
44
|
-
"--hue-teal-contrast": ["hue-teal-contrast"],
|
|
45
|
-
"--hue-orange-contrast": ["hue-orange-contrast"],
|
|
46
|
-
"--media-ink": ["media-ink"],
|
|
47
|
-
},
|
|
48
|
-
"bg": {
|
|
49
|
-
"--bg-page": ["page"],
|
|
50
|
-
"--bg-surface": ["surface"],
|
|
51
|
-
"--bg-surface-2": ["surface-2"],
|
|
52
|
-
"--bg-hover": ["hover"],
|
|
53
|
-
"--bg-active": ["active"],
|
|
54
|
-
"--bg-inverse": ["inverse"],
|
|
55
|
-
"--brand": ["brand"],
|
|
56
|
-
"--brand-hover": ["brand-hover"],
|
|
57
|
-
"--brand-bg": ["brand-soft"],
|
|
58
|
-
"--brand-bg-hover": ["brand-soft-hover"],
|
|
59
|
-
"--danger": ["danger"],
|
|
60
|
-
"--danger-hover": ["danger-hover"],
|
|
61
|
-
"--warning": ["warning"],
|
|
62
|
-
"--success": ["success"],
|
|
63
|
-
"--info": ["info"],
|
|
64
|
-
"--neutral": ["neutral"],
|
|
65
|
-
"--money-income": ["money-income"],
|
|
66
|
-
"--money-expense": ["money-expense"],
|
|
67
|
-
"--money-net": ["money-net"],
|
|
68
|
-
"--money-neutral": ["money-neutral"],
|
|
69
|
-
"--danger-bg": ["danger-soft"],
|
|
70
|
-
"--warning-bg": ["warning-soft"],
|
|
71
|
-
"--success-bg": ["success-soft"],
|
|
72
|
-
"--info-bg": ["info-soft"],
|
|
73
|
-
"--hue-blue": ["hue-blue"],
|
|
74
|
-
"--hue-indigo": ["hue-indigo"],
|
|
75
|
-
"--hue-purple": ["hue-purple"],
|
|
76
|
-
"--hue-teal": ["hue-teal"],
|
|
77
|
-
"--hue-orange": ["hue-orange"],
|
|
78
|
-
"--hue-blue-bg": ["hue-blue-soft"],
|
|
79
|
-
"--hue-indigo-bg": ["hue-indigo-soft"],
|
|
80
|
-
"--hue-purple-bg": ["hue-purple-soft"],
|
|
81
|
-
"--hue-teal-bg": ["hue-teal-soft"],
|
|
82
|
-
"--hue-orange-bg": ["hue-orange-soft"],
|
|
83
|
-
"--media-scrim": ["media-scrim"],
|
|
84
|
-
"--media-scrim-hover": ["media-scrim-hover"],
|
|
85
|
-
},
|
|
86
|
-
"border": {
|
|
87
|
-
"--border": ["subtle"],
|
|
88
|
-
"--border-strong": ["strong"],
|
|
89
|
-
"--brand": ["brand"],
|
|
90
|
-
"--danger-border": ["danger"],
|
|
91
|
-
"--warning-border": ["warning"],
|
|
92
|
-
"--success-border": ["success"],
|
|
93
|
-
"--info-border": ["info"],
|
|
94
|
-
"--danger-border-strong": ["danger-strong"],
|
|
95
|
-
"--warning-border-strong": ["warning-strong"],
|
|
96
|
-
"--hue-blue-border": ["hue-blue"],
|
|
97
|
-
"--hue-indigo-border": ["hue-indigo"],
|
|
98
|
-
"--hue-purple-border": ["hue-purple"],
|
|
99
|
-
"--hue-teal-border": ["hue-teal"],
|
|
100
|
-
"--hue-orange-border": ["hue-orange"],
|
|
101
|
-
"--media-ink": ["media-ink"],
|
|
102
|
-
},
|
|
103
|
-
"ring": {
|
|
104
|
-
"--border": ["subtle"],
|
|
105
|
-
"--border-strong": ["strong"],
|
|
106
|
-
"--brand": ["brand"],
|
|
107
|
-
"--brand-contrast": ["brand-contrast"],
|
|
108
|
-
"--danger-border-strong": ["danger-strong"],
|
|
109
|
-
"--warning-border-strong": ["warning-strong"],
|
|
110
|
-
"--media-ink": ["media-ink"],
|
|
111
|
-
},
|
|
112
|
-
"ring-offset": {
|
|
113
|
-
"--bg-page": ["page"],
|
|
114
|
-
"--bg-surface": ["surface"],
|
|
115
|
-
"--media-scrim-hover": ["media-scrim-hover"],
|
|
116
|
-
},
|
|
117
|
-
"outline": {
|
|
118
|
-
"--border": ["subtle"],
|
|
119
|
-
"--border-strong": ["strong"],
|
|
120
|
-
"--brand": ["brand"],
|
|
121
|
-
"--danger-border-strong": ["danger-strong"],
|
|
122
|
-
"--warning-border-strong": ["warning-strong"],
|
|
123
|
-
},
|
|
124
|
-
"fill": {
|
|
125
|
-
"--text-primary": ["primary"],
|
|
126
|
-
"--text-secondary": ["secondary"],
|
|
127
|
-
"--text-muted": ["muted"],
|
|
128
|
-
"--bg-surface": ["surface"],
|
|
129
|
-
"--border": ["subtle"],
|
|
130
|
-
"--border-strong": ["strong"],
|
|
131
|
-
},
|
|
132
|
-
"stroke": {
|
|
133
|
-
"--text-primary": ["primary"],
|
|
134
|
-
"--text-secondary": ["secondary"],
|
|
135
|
-
"--text-muted": ["muted"],
|
|
136
|
-
"--bg-surface": ["surface"],
|
|
137
|
-
"--border": ["subtle"],
|
|
138
|
-
"--border-strong": ["strong"],
|
|
139
|
-
},
|
|
140
|
-
"ring-width": {
|
|
141
|
-
"--focus-ring-width": ["focus"],
|
|
142
|
-
},
|
|
143
|
-
"outline-width": {
|
|
144
|
-
"--focus-ring-width": ["focus"],
|
|
145
|
-
},
|
|
146
|
-
};
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
// Which `[var(--token)]` classes have a role utility, and what it is called — the one
|
|
2
|
-
// definition `@eifi1/ui-kit/eslint`'s `role-utilities` rule and `npm run check:tokens`
|
|
3
|
-
// (scripts/check-token-discipline.mjs) both read (round 0.35 R5, Kurvenschmiede's Q6).
|
|
4
|
-
//
|
|
5
|
-
// The table itself is role-utilities.generated.ts, re-rendered from tokens.css's
|
|
6
|
-
// `@theme inline` block by scripts/gen-role-utilities.mjs with the parser below; the
|
|
7
|
-
// check fails while it is stale. So tokens.css stays the source: a role that gains a
|
|
8
|
-
// utility there is flagged in the kit and in the apps from the next release on. The
|
|
9
|
-
// README's role-utility table (scripts/gen-styling-inventory.mjs) reads the block with
|
|
10
|
-
// the same parser since 0.37, so the README, the check and the plugin cannot disagree.
|
|
11
|
-
//
|
|
12
|
-
// This module imports NOTHING, and its TypeScript is erasable only (no enum, no
|
|
13
|
-
// namespace, no parameter property): the check imports it from source under Node's type
|
|
14
|
-
// stripping, before any build, and the plugin ships it to an app's ESLint, which is
|
|
15
|
-
// plain Node with no React and no stylesheet.
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The properties a role utility exists for, each with the Tailwind theme namespace it is
|
|
19
|
-
* declared in. `ring-width` and `outline-width` are a width typed `length:` —
|
|
20
|
-
* `ring-[length:var(--focus-ring-width)]` is `ring-focus`. `divide-*` and the side borders
|
|
21
|
-
* (`border-t-*`, `border-x-*` …) read `border`'s, as Tailwind does.
|
|
22
|
-
*/
|
|
23
|
-
export const ROLE_NAMESPACES = {
|
|
24
|
-
text: "text-color",
|
|
25
|
-
bg: "background-color",
|
|
26
|
-
border: "border-color",
|
|
27
|
-
ring: "ring-color",
|
|
28
|
-
"ring-offset": "ring-offset-color",
|
|
29
|
-
outline: "outline-color",
|
|
30
|
-
fill: "fill",
|
|
31
|
-
stroke: "stroke",
|
|
32
|
-
"ring-width": "ring-width",
|
|
33
|
-
"outline-width": "outline-width",
|
|
34
|
-
} as const;
|
|
35
|
-
|
|
36
|
-
export type RoleProperty = keyof typeof ROLE_NAMESPACES;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Per property, each token that has a role utility → the utility's name after the
|
|
40
|
-
* property's prefix: `border: { "--border": ["subtle"] }` is `border-subtle`. A list,
|
|
41
|
-
* because nothing stops two names from reading one token; one name is a fix, several a
|
|
42
|
-
* choice.
|
|
43
|
-
*/
|
|
44
|
-
export type RoleUtilityTable = {
|
|
45
|
-
readonly [P in RoleProperty]: Readonly<Record<string, readonly string[]>>;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/** One `--<namespace>-<name>: <value>;` of the `@theme inline` block. */
|
|
49
|
-
export interface ThemeInlineDeclaration {
|
|
50
|
-
/** The theme variable without its dashes: `text-color-muted`, `ring-width-focus`. */
|
|
51
|
-
variable: string;
|
|
52
|
-
/** The property whose namespace it is in; `null` for a namespace ROLE_NAMESPACES lacks. */
|
|
53
|
-
property: RoleProperty | null;
|
|
54
|
-
/** The name after the namespace, `muted`; `null` with `property`. */
|
|
55
|
-
name: string | null;
|
|
56
|
-
/** The utility it makes: `text-muted`, `ring-focus` (a width is `ring-*` like a colour). */
|
|
57
|
-
utility: string | null;
|
|
58
|
-
/** The token the value reads, `--text-muted`; `null` unless the value is a bare `var()`. */
|
|
59
|
-
token: string | null;
|
|
60
|
-
/** The value as written, trimmed. */
|
|
61
|
-
value: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** The `@theme inline` block: where it stands, and every declaration in it in block order. */
|
|
65
|
-
export interface ThemeInlineBlock {
|
|
66
|
-
/** Its first and one-past-last offset in `stripCssComments(css)`, not in `css`. With
|
|
67
|
-
* several `@theme inline` blocks, the first one's; `ranges` holds each. */
|
|
68
|
-
start: number;
|
|
69
|
-
end: number;
|
|
70
|
-
ranges: { start: number; end: number }[];
|
|
71
|
-
/** Every block's, in stylesheet order. */
|
|
72
|
-
declarations: ThemeInlineDeclaration[];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/** `css` without its comments: a declaration commented out is not one. */
|
|
76
|
-
export function stripCssComments(css: string): string {
|
|
77
|
-
return css.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** One `@theme … { … }` block: its first and one-past-last offset, and what its braces hold. */
|
|
81
|
-
export interface ThemeBlock {
|
|
82
|
-
start: number;
|
|
83
|
-
end: number;
|
|
84
|
-
body: string;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Every `@theme` block of `css` (comments already stripped) whose prelude names `inline`
|
|
89
|
-
* (`@theme inline`, `@theme inline reference`) — or, with `inline: false`, every other
|
|
90
|
-
* one (`@theme {`, Tailwind's `@theme default {`). Counted brace by brace, so a nested
|
|
91
|
-
* block does not end it early.
|
|
92
|
-
*
|
|
93
|
-
* The one block finder (refactor audit 2026-10-30, DUP-13): this parser read only the
|
|
94
|
-
* first `@theme inline {…}` up to its first `}`, the testing guard's
|
|
95
|
-
* `declaredCustomProperties` every inline block brace-aware, and the README's inventory a
|
|
96
|
-
* plain `@theme {` by a regex of its own — three readers that disagreed on what one block
|
|
97
|
-
* is. It lives here because this module imports nothing, so the scripts load it from
|
|
98
|
-
* source under Node.
|
|
99
|
-
*/
|
|
100
|
-
export function themeBlocks(css: string, { inline }: { inline: boolean }): ThemeBlock[] {
|
|
101
|
-
const blocks: ThemeBlock[] = [];
|
|
102
|
-
for (const m of css.matchAll(/@theme\b([^{;]*)\{/g)) {
|
|
103
|
-
if (/\binline\b/.test(m[1]) !== inline) continue;
|
|
104
|
-
const open = m.index + m[0].length - 1;
|
|
105
|
-
let depth = 0;
|
|
106
|
-
let close = open;
|
|
107
|
-
for (; close < css.length; close++) {
|
|
108
|
-
if (css[close] === "{") depth++;
|
|
109
|
-
else if (css[close] === "}" && --depth === 0) break;
|
|
110
|
-
}
|
|
111
|
-
blocks.push({ start: m.index, end: close + 1, body: css.slice(open + 1, close) });
|
|
112
|
-
}
|
|
113
|
-
return blocks;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const PROPERTIES = Object.keys(ROLE_NAMESPACES) as RoleProperty[];
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* tokens.css's `@theme inline` block (every one, should there be several), read once for
|
|
120
|
-
* every reader: the table below, and the README's (scripts/gen-styling-inventory.mjs),
|
|
121
|
-
* which fails on a `property: null` where the table leaves it out. `null` when there is
|
|
122
|
-
* no such block — the role utilities are gone, or this parser is. No namespace is
|
|
123
|
-
* another's prefix, so the first that fits is the one.
|
|
124
|
-
*/
|
|
125
|
-
export function parseThemeInline(css: string): ThemeInlineBlock | null {
|
|
126
|
-
const blocks = themeBlocks(stripCssComments(css), { inline: true });
|
|
127
|
-
if (blocks.length === 0) return null;
|
|
128
|
-
const declarations = [
|
|
129
|
-
...blocks
|
|
130
|
-
.map((b) => b.body)
|
|
131
|
-
.join("\n")
|
|
132
|
-
.matchAll(/--([a-z0-9-]+)\s*:\s*([^;]+);/g),
|
|
133
|
-
].map(([, variable, raw]) => {
|
|
134
|
-
const value = raw.trim();
|
|
135
|
-
const property = PROPERTIES.find((p) => variable.startsWith(`${ROLE_NAMESPACES[p]}-`)) ?? null;
|
|
136
|
-
const name = property && variable.slice(ROLE_NAMESPACES[property].length + 1);
|
|
137
|
-
return {
|
|
138
|
-
variable,
|
|
139
|
-
property,
|
|
140
|
-
name,
|
|
141
|
-
utility: property && `${property.replace(/-width$/, "")}-${name}`,
|
|
142
|
-
token: /^var\((--[a-z0-9-]+)\)$/.exec(value)?.[1] ?? null,
|
|
143
|
-
value,
|
|
144
|
-
};
|
|
145
|
-
});
|
|
146
|
-
const ranges = blocks.map(({ start, end }) => ({ start, end }));
|
|
147
|
-
return { start: ranges[0].start, end: ranges[0].end, ranges, declarations };
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* The table `tokens.css` declares: every `--<namespace>-<name>: var(--<token>)` in its
|
|
152
|
-
* `@theme inline` block, in block order, each property present (in ROLE_NAMESPACES' order)
|
|
153
|
-
* even when it has none. `null` when there is no such block.
|
|
154
|
-
*/
|
|
155
|
-
export function roleUtilitiesFromCss(css: string): RoleUtilityTable | null {
|
|
156
|
-
const block = parseThemeInline(css);
|
|
157
|
-
if (!block) return null;
|
|
158
|
-
const table = Object.fromEntries(PROPERTIES.map((p) => [p, {}])) as Record<RoleProperty, Record<string, string[]>>;
|
|
159
|
-
for (const { property, name, token } of block.declarations) {
|
|
160
|
-
if (property && name && token) (table[property][token] ??= []).push(name);
|
|
161
|
-
}
|
|
162
|
-
return table;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* `text-[var(--text-muted)]`, `hover:bg-[var(--bg-hover)]`, `border-t-[var(--border)]`,
|
|
167
|
-
* `focus-visible:ring-[var(--brand)]/40`, `ring-offset-[var(--bg-surface)]`,
|
|
168
|
-
* `ring-[length:var(--focus-ring-width)]` — and, since 0.52, Tailwind v4's own spellings
|
|
169
|
-
* of the same: the shorthand `text-(--text-muted)`, a type hint `text-[color:var(--x)]` /
|
|
170
|
-
* `text-(color:--x)` / `ring-(length:--x)`, and the arbitrary property
|
|
171
|
-
* `[color:var(--text-muted)]`, which is `text-muted` (refactor audit 2026-10-30, DOC-1:
|
|
172
|
-
* all of them passed the check and every app's lint). Preceded by a start, a space, a
|
|
173
|
-
* quote or a variant's colon, which the match does not include — nor the variants before
|
|
174
|
-
* it or an opacity or `!` after it — so replacing the match keeps all of them.
|
|
175
|
-
*
|
|
176
|
-
* Groups: 1 the property; then 2 the hint and 3 the token of `-[…var()]`, or 4 and 5 of
|
|
177
|
-
* `-(…)`; or 6 the CSS property and 7 the token of `[property:var()]`.
|
|
178
|
-
*/
|
|
179
|
-
const TOKEN = "(--[a-zA-Z0-9-]+)";
|
|
180
|
-
const ROLE_CLASS = new RegExp(
|
|
181
|
-
"(?<=^|[\\s\"'`:])(?:" +
|
|
182
|
-
"(text|bg|border(?:-[xytrblse])?|divide|ring-offset|ring|outline|fill|stroke)-" +
|
|
183
|
-
`(?:\\[(?:(length|color):)?var\\(${TOKEN}\\)\\]|\\((?:(length|color):)?${TOKEN}\\))` +
|
|
184
|
-
`|\\[(color|background-color|border-color|outline-color|fill|stroke):var\\(${TOKEN}\\)\\]` +
|
|
185
|
-
")",
|
|
186
|
-
"g",
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
/** The utility prefix an arbitrary property `[property:var(--x)]` is written as. */
|
|
190
|
-
const ARBITRARY_PROPERTY: Record<string, string> = {
|
|
191
|
-
color: "text",
|
|
192
|
-
"background-color": "bg",
|
|
193
|
-
"border-color": "border",
|
|
194
|
-
"outline-color": "outline",
|
|
195
|
-
fill: "fill",
|
|
196
|
-
stroke: "stroke",
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
export interface RoleClassHit {
|
|
200
|
-
/** Where the class starts in the scanned text, after its variants. */
|
|
201
|
-
index: number;
|
|
202
|
-
/** The class as written, without variants or opacity: `border-t-[var(--border)]`. */
|
|
203
|
-
found: string;
|
|
204
|
-
/** The role utilities that paint the same: `["border-t-subtle"]`. */
|
|
205
|
-
utilities: string[];
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Every `[var(--token)]` class in `text` (or one of v4's spellings of it, above) whose
|
|
210
|
-
* token has a role utility on that property.
|
|
211
|
-
* A token with no utility there (`text-[var(--chart-1)]`, `--status-*`,
|
|
212
|
-
* `bg-[var(--border)]` as a divider's fill) is not a hit: `[var(--…)]` is right for it.
|
|
213
|
-
*/
|
|
214
|
-
export function findRoleClasses(text: string, table: RoleUtilityTable): RoleClassHit[] {
|
|
215
|
-
// Every form names a token: `var(--x)`, or `(--x)` in v4's shorthand.
|
|
216
|
-
if (!text.includes("--")) return [];
|
|
217
|
-
const hits: RoleClassHit[] = [];
|
|
218
|
-
for (const m of text.matchAll(ROLE_CLASS)) {
|
|
219
|
-
const [found, utility, bracketHint, bracketToken, parenHint, parenToken, cssProperty, propertyToken] = m;
|
|
220
|
-
const prop = utility ?? ARBITRARY_PROPERTY[cssProperty];
|
|
221
|
-
const token = bracketToken ?? parenToken ?? propertyToken;
|
|
222
|
-
// `border-t` and `divide` read `border`'s names; a `length:` hint reads the widths.
|
|
223
|
-
const key =
|
|
224
|
-
(bracketHint ?? parenHint) === "length"
|
|
225
|
-
? `${prop}-width`
|
|
226
|
-
: prop.startsWith("border-") || prop === "divide"
|
|
227
|
-
? "border"
|
|
228
|
-
: prop;
|
|
229
|
-
const names = (table as Partial<Record<string, Readonly<Record<string, readonly string[]>>>>)[key]?.[token];
|
|
230
|
-
if (names?.length) hits.push({ index: m.index, found, utilities: names.map((name) => `${prop}-${name}`) });
|
|
231
|
-
}
|
|
232
|
-
return hits;
|
|
233
|
-
}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { useState } from "react";
|
|
2
|
-
import type { MouseEvent } from "react";
|
|
3
|
-
import { Download, FileText } from "lucide-react";
|
|
4
|
-
import { Button } from "../components/button";
|
|
5
|
-
import { toast } from "../components/toast";
|
|
6
|
-
import type { AuthedFetcher } from "../hooks/use-authed-src";
|
|
7
|
-
import { useKitLabels } from "../i18n/kit-labels";
|
|
8
|
-
import { filenameFromDisposition, saveBlob } from "../lib/download";
|
|
9
|
-
import { attachmentName } from "./feedback-record";
|
|
10
|
-
import { DEFAULT_FEEDBACK_DETAIL_LABELS } from "./feedback-row-detail-labels";
|
|
11
|
-
|
|
12
|
-
// Internal (not in the `./feedback` entry): the row detail's download button and its
|
|
13
|
-
// plain fetch, shared since 0.47 with ./feedback-entry-file's inline entry files.
|
|
14
|
-
|
|
15
|
-
/** The bytes behind a fetcher's answer — a `Blob` as it is, a `Response` checked. */
|
|
16
|
-
async function toBlob(answer: Blob | Response): Promise<Blob> {
|
|
17
|
-
if (typeof Response !== "undefined" && answer instanceof Response) {
|
|
18
|
-
if (!answer.ok) throw new Error(`HTTP ${answer.status}`);
|
|
19
|
-
return answer.blob();
|
|
20
|
-
}
|
|
21
|
-
return answer as Blob;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** No fetcher: the browser's own `fetch`, with the cookies a same-origin app uses. */
|
|
25
|
-
export const plainFeedbackFetch: AuthedFetcher = (url, { signal }) =>
|
|
26
|
-
fetch(url, { signal, credentials: "same-origin" });
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* A PDF or a text log (keksdose `FeedbackFileDownload`, dev #578): the bytes sit behind
|
|
30
|
-
* an authenticated route that serves them as `attachment`, never inline (§3.5), so a
|
|
31
|
-
* plain link would be a 401 the moment it was opened. Fetched through the app's
|
|
32
|
-
* fetcher and saved with {@link saveBlob}; a failure says so in a toast.
|
|
33
|
-
*
|
|
34
|
-
* Saved under the name the server gives it when the fetcher answers with a `Response`
|
|
35
|
-
* (server-kit's `content_disposition` puts the uploader's own name in `filename*`), and
|
|
36
|
-
* under the URL's last segment — the name on the button — when it answers with a bare
|
|
37
|
-
* `Blob`, which has no headers to ask. Words: `feedbackDetail.download` /
|
|
38
|
-
* `downloadFailed`.
|
|
39
|
-
*/
|
|
40
|
-
export function FeedbackAttachmentDownload({ url, fetcher }: { url: string; fetcher: AuthedFetcher }) {
|
|
41
|
-
const labels = useKitLabels("feedbackDetail", DEFAULT_FEEDBACK_DETAIL_LABELS);
|
|
42
|
-
const [busy, setBusy] = useState(false);
|
|
43
|
-
const name = attachmentName(url);
|
|
44
|
-
const download = async (event: MouseEvent) => {
|
|
45
|
-
// The row around the detail may toggle on a click.
|
|
46
|
-
event.stopPropagation();
|
|
47
|
-
setBusy(true);
|
|
48
|
-
try {
|
|
49
|
-
const answer = await fetcher(url, { signal: new AbortController().signal });
|
|
50
|
-
const blob = await toBlob(answer);
|
|
51
|
-
const saveAs =
|
|
52
|
-
typeof Response !== "undefined" && answer instanceof Response
|
|
53
|
-
? filenameFromDisposition(answer.headers.get("Content-Disposition"), name)
|
|
54
|
-
: name;
|
|
55
|
-
saveBlob(blob, saveAs);
|
|
56
|
-
} catch {
|
|
57
|
-
toast.error(labels.downloadFailed);
|
|
58
|
-
} finally {
|
|
59
|
-
setBusy(false);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
return (
|
|
63
|
-
<Button
|
|
64
|
-
type="button"
|
|
65
|
-
variant="secondary"
|
|
66
|
-
size="sm"
|
|
67
|
-
pending={busy}
|
|
68
|
-
onClick={(event) => void download(event)}
|
|
69
|
-
aria-label={labels.download(name)}
|
|
70
|
-
className="max-w-full"
|
|
71
|
-
>
|
|
72
|
-
<FileText className="size-3.5 shrink-0" aria-hidden />
|
|
73
|
-
<span className="min-w-0 max-w-[14rem] truncate-until-large">{name}</span>
|
|
74
|
-
<Download className="size-3.5 shrink-0" aria-hidden />
|
|
75
|
-
</Button>
|
|
76
|
-
);
|
|
77
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// The English words of ./feedback-attachment, in a module with no component code: the
|
|
2
|
-
// English catalogue (src/i18n/defaults.ts) imports them without the component, so `en`
|
|
3
|
-
// loads as one chunk like the other languages (0.34, KS U8). ./feedback-attachment
|
|
4
|
-
// re-exports them.
|
|
5
|
-
|
|
6
|
-
import type { FeedbackAttachmentFieldLabels } from "./feedback-attachment";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* English, in the feedback contract's wording since 0.27.0 (docs/feedback-harmonization.md
|
|
10
|
-
* §4.2: keksdose's `feedback.*` keys are the canon, and the kit owns them now). Three
|
|
11
|
-
* strings moved with it:
|
|
12
|
-
*
|
|
13
|
-
* - `attachmentAdd` "Attach image" → **"Add attachment"**: the field takes a PDF or a text
|
|
14
|
-
* log as well wherever the app passes `FEEDBACK_ATTACHMENT_ACCEPT` (keksdose feedback
|
|
15
|
-
* #87), and a button that says "image" over a picker that offers a PDF is wrong in one
|
|
16
|
-
* of the two places.
|
|
17
|
-
* - `attachmentPaste` → keksdose's longer line, which says WHY one would paste — a region
|
|
18
|
-
* snip shows one corner rather than the whole page (Steering Design feedback #39).
|
|
19
|
-
* - `attachmentLimit` for one: "remove **it**", as keksdose's `attachments_full_one`;
|
|
20
|
-
* "remove one" of a single file read oddly.
|
|
21
|
-
*/
|
|
22
|
-
export const DEFAULT_FEEDBACK_ATTACHMENT_LABELS: FeedbackAttachmentFieldLabels = {
|
|
23
|
-
attachmentAdd: "Add attachment",
|
|
24
|
-
attachmentCapture: "Capture screenshot",
|
|
25
|
-
attachmentPaste:
|
|
26
|
-
"…or paste a screenshot straight from the clipboard, so you can show one corner rather than the whole page.",
|
|
27
|
-
attachmentRemove: "Remove attachment",
|
|
28
|
-
attachmentList: "Attachments",
|
|
29
|
-
attachmentScreenshot: "Screenshot",
|
|
30
|
-
attachmentRemoveFile: (name) => `Remove ${name}`,
|
|
31
|
-
attachmentLimit: (max) =>
|
|
32
|
-
max === 1
|
|
33
|
-
? "Up to 1 attachment — remove it to add another."
|
|
34
|
-
: `Up to ${max} attachments — remove one to add another.`,
|
|
35
|
-
attachmentUploading: "Uploading…",
|
|
36
|
-
attachmentUploadFailed: (name) => `“${name}” could not be uploaded`,
|
|
37
|
-
};
|