@eifi1/ui-kit 0.51.6 → 0.52.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 +146 -26
- package/dist/account/account-parts.d.ts +10 -8
- package/dist/account/account-parts.js +1 -18
- package/dist/account/account-parts.js.map +1 -1
- package/dist/account/data-export-setting-labels.js +1 -1
- package/dist/account/data-export-setting-labels.js.map +1 -1
- package/dist/account/delete-account-setting-labels.js +1 -1
- package/dist/account/delete-account-setting-labels.js.map +1 -1
- package/dist/account/email-change-setting-labels.js +1 -1
- package/dist/account/email-change-setting-labels.js.map +1 -1
- package/dist/account/passkeys-setting.d.ts +9 -2
- package/dist/account/passkeys-setting.js +41 -29
- package/dist/account/passkeys-setting.js.map +1 -1
- package/dist/account/sessions-setting.d.ts +3 -2
- package/dist/account/sessions-setting.js +10 -8
- package/dist/account/sessions-setting.js.map +1 -1
- package/dist/admin/admin-action-confirm.js +3 -7
- package/dist/admin/admin-action-confirm.js.map +1 -1
- package/dist/admin/admin-parts.d.ts +6 -3
- package/dist/admin/admin-parts.js +6 -21
- package/dist/admin/admin-parts.js.map +1 -1
- package/dist/admin/mail-test-card-labels.js +1 -1
- package/dist/admin/mail-test-card-labels.js.map +1 -1
- package/dist/admin/plan-change-labels.d.ts +2 -2
- package/dist/admin/plan-change-labels.js +1 -17
- package/dist/admin/plan-change-labels.js.map +1 -1
- package/dist/admin/plan-change.d.ts +3 -42
- package/dist/admin/plan-change.js +1 -1
- package/dist/admin/plan-change.js.map +1 -1
- package/dist/admin/reviewer-scope-editor.js +3 -3
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/auth/auth-errors-labels.d.ts +11 -0
- package/dist/auth/auth-errors-labels.js +13 -0
- package/dist/auth/auth-errors-labels.js.map +1 -0
- package/dist/auth/auth-errors.d.ts +7 -23
- package/dist/auth/auth-errors.js +2 -15
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/complete-name-dialog.d.ts +3 -2
- package/dist/auth/complete-name-dialog.js +3 -5
- package/dist/auth/complete-name-dialog.js.map +1 -1
- package/dist/auth/forgot-password-form-labels.js +1 -1
- package/dist/auth/forgot-password-form-labels.js.map +1 -1
- package/dist/auth/forgot-password-form.js +7 -2
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/register-form-labels.js +1 -1
- package/dist/auth/register-form-labels.js.map +1 -1
- package/dist/auth/reset-password-form-labels.js +1 -1
- package/dist/auth/reset-password-form-labels.js.map +1 -1
- package/dist/auth/reset-password-form.js +5 -1
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form-labels.js +1 -1
- package/dist/auth/sign-in-form-labels.js.map +1 -1
- package/dist/auth/status-parts.d.ts +0 -3
- package/dist/auth/status-parts.js +0 -4
- package/dist/auth/status-parts.js.map +1 -1
- package/dist/auth/verify-email-labels.js +1 -1
- package/dist/auth/verify-email-labels.js.map +1 -1
- package/dist/auth/verify-email.js +7 -2
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/cancel-request.d.ts +11 -2
- package/dist/billing/cancel-request.js +15 -3
- package/dist/billing/cancel-request.js.map +1 -1
- package/dist/billing/cancel-subscription.d.ts +22 -10
- package/dist/billing/cancel-subscription.js +8 -11
- package/dist/billing/cancel-subscription.js.map +1 -1
- package/dist/billing/dialog-close.d.ts +29 -0
- package/dist/billing/dialog-close.js +8 -0
- package/dist/billing/dialog-close.js.map +1 -0
- package/dist/billing/plan-card.d.ts +14 -4
- package/dist/billing/plan-card.js +15 -8
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-change-labels.d.ts +42 -0
- package/dist/billing/plan-change-labels.js +22 -0
- package/dist/billing/plan-change-labels.js.map +1 -0
- package/dist/billing/plan-switch.d.ts +21 -9
- package/dist/billing/plan-switch.js +10 -8
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/chart.d.ts +12 -0
- package/dist/chart.js +16 -1
- package/dist/chart.js.map +1 -1
- package/dist/components/account-chips.d.ts +5 -5
- package/dist/components/account-chips.js +11 -13
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.d.ts +16 -5
- package/dist/components/alert-banner.js +46 -1
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.d.ts +22 -4
- package/dist/components/amount-input.js +3 -3
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.js +57 -65
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.d.ts +12 -2
- package/dist/components/bulk-action-bar.js +65 -21
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-look.d.ts +5 -5
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/button.d.ts +2 -2
- package/dist/components/button.js.map +1 -1
- package/dist/components/calculator.d.ts +21 -2
- package/dist/components/calculator.js +53 -14
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/chart-edge.d.ts +16 -0
- package/dist/components/chart-edge.js +14 -1
- package/dist/components/chart-edge.js.map +1 -1
- package/dist/components/chart-figure.d.ts +13 -0
- package/dist/components/chart-figure.js +15 -0
- package/dist/components/chart-figure.js.map +1 -0
- package/dist/components/chart-zoom-core.js +1 -4
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/chart.d.ts +8 -1
- package/dist/components/chart.js +19 -10
- package/dist/components/chart.js.map +1 -1
- package/dist/components/combobox-core.d.ts +119 -7
- package/dist/components/combobox-core.js +151 -46
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +1 -1
- package/dist/components/combobox.js +142 -131
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/copy-button.d.ts +6 -5
- package/dist/components/copy-button.js +5 -3
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.js +2 -2
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/data-table-column-settings.d.ts +1 -1
- package/dist/components/data-table-column-settings.js +33 -7
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filters.d.ts +4 -2
- package/dist/components/data-table-filters.js +2 -2
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.d.ts +6 -4
- package/dist/components/data-table-fit.js +4 -1
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-groups.d.ts +1 -1
- package/dist/components/data-table-groups.js.map +1 -1
- package/dist/components/data-table-head.d.ts +1 -1
- package/dist/components/data-table-head.js +15 -12
- package/dist/components/data-table-head.js.map +1 -1
- package/dist/components/data-table-mobile.d.ts +36 -7
- package/dist/components/data-table-mobile.js +63 -31
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table-pagination.js +11 -6
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-resize.d.ts +1 -1
- package/dist/components/data-table-resize.js.map +1 -1
- package/dist/components/data-table-row-actions.d.ts +2 -2
- package/dist/components/data-table-row-actions.js.map +1 -1
- package/dist/components/data-table-row.d.ts +6 -2
- package/dist/components/data-table-row.js +17 -10
- package/dist/components/data-table-row.js.map +1 -1
- package/dist/components/data-table-selection.d.ts +1 -1
- package/dist/components/data-table-selection.js.map +1 -1
- package/dist/components/data-table-shared.d.ts +10 -2
- package/dist/components/data-table-shared.js +18 -0
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table-sort.d.ts +21 -2
- package/dist/components/data-table-sort.js +24 -0
- package/dist/components/data-table-sort.js.map +1 -1
- package/dist/components/data-table-virtual.d.ts +1 -1
- package/dist/components/data-table-virtual.js +18 -6
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/data-table.d.ts +25 -8
- package/dist/components/data-table.js +154 -25
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-field.d.ts +24 -2
- package/dist/components/date-field.js +33 -8
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.d.ts +15 -2
- package/dist/components/date-picker.js +55 -26
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.d.ts +47 -20
- package/dist/components/date-range-picker.js +23 -7
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/dialog-frame.d.ts +2 -1
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/entity-combobox.js +4 -2
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/error-boundary.js +37 -30
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/{ui-labels.d.ts → field-base-labels.d.ts} +0 -2
- package/dist/components/{ui-labels.js → field-base-labels.js} +2 -9
- package/dist/components/field-base-labels.js.map +1 -0
- package/dist/components/field-base.d.ts +4 -3
- package/dist/components/field-base.js +3 -3
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/field-sync-labels.d.ts +1 -0
- package/dist/components/field-sync-labels.js.map +1 -1
- package/dist/components/field-sync.d.ts +23 -1
- package/dist/components/field-sync.js.map +1 -1
- package/dist/components/form-actions.js +11 -5
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/hover-menu.d.ts +3 -0
- package/dist/components/hover-menu.js +5 -3
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-button.js +14 -9
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/inline-confirm.d.ts +43 -0
- package/dist/components/inline-confirm.js +67 -0
- package/dist/components/inline-confirm.js.map +1 -0
- package/dist/components/inline-entity-combobox.d.ts +4 -3
- package/dist/components/inline-entity-combobox.js +150 -141
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +28 -112
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal-page.d.ts +3 -1
- package/dist/components/legal-page.js +3 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +4 -2
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox.d.ts +2 -2
- package/dist/components/lightbox.js +17 -6
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/list.d.ts +6 -2
- package/dist/components/list.js +4 -3
- package/dist/components/list.js.map +1 -1
- package/dist/components/measured-grid.d.ts +1 -1
- package/dist/components/measured-grid.js +2 -1
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/mini-calendar.js +3 -5
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +24 -0
- package/dist/components/modal.js +12 -4
- package/dist/components/modal.js.map +1 -1
- package/dist/components/money-draft.js +7 -5
- package/dist/components/money-draft.js.map +1 -1
- package/dist/components/money-field.d.ts +2 -2
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-grid.d.ts +55 -0
- package/dist/components/month-grid.js +148 -0
- package/dist/components/month-grid.js.map +1 -0
- package/dist/components/month-picker.d.ts +36 -4
- package/dist/components/month-picker.js +123 -146
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +2 -1
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.d.ts +2 -2
- package/dist/components/multi-select.js +11 -6
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/number-field.d.ts +6 -4
- package/dist/components/number-field.js +3 -2
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +4 -1
- package/dist/components/number-input.js +3 -2
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.js.map +1 -1
- package/dist/components/picker-sheet.js +2 -1
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart-labels.d.ts +7 -0
- package/dist/components/pie-chart-labels.js +1 -0
- package/dist/components/pie-chart-labels.js.map +1 -1
- package/dist/components/pie-chart.d.ts +5 -3
- package/dist/components/pie-chart.js +7 -22
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.d.ts +3 -0
- package/dist/components/popover.js +7 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/reauth-dialog.d.ts +4 -5
- package/dist/components/reauth-dialog.js +1 -4
- package/dist/components/reauth-dialog.js.map +1 -1
- package/dist/components/row-actions.js +2 -1
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/section-nav.d.ts +7 -0
- package/dist/components/section-nav.js.map +1 -1
- package/dist/components/series-chart-axes.d.ts +10 -3
- package/dist/components/series-chart-axes.js +1 -0
- package/dist/components/series-chart-axes.js.map +1 -1
- package/dist/components/series-chart-labels.d.ts +7 -4
- package/dist/components/series-chart-labels.js.map +1 -1
- package/dist/components/series-chart.d.ts +31 -7
- package/dist/components/series-chart.js +72 -29
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/share-card.js +3 -3
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/sign-chip-labels.d.ts +1 -0
- package/dist/components/sign-chip-labels.js.map +1 -1
- package/dist/components/sign-chip.d.ts +10 -1
- package/dist/components/sign-chip.js.map +1 -1
- package/dist/components/tabs-labels.d.ts +2 -0
- package/dist/components/tabs-labels.js +11 -0
- package/dist/components/tabs-labels.js.map +1 -0
- package/dist/components/tabs.d.ts +1 -1
- package/dist/components/tabs.js +13 -11
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/toggle-legend.d.ts +2 -2
- package/dist/components/toggle-legend.js +6 -6
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/translation-review-editor.d.ts +4 -2
- package/dist/components/translation-review-editor.js +2 -3
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review.d.ts +2 -1
- package/dist/components/translation-review.js +2 -2
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/treemap-labels.d.ts +26 -0
- package/dist/components/treemap-labels.js +10 -0
- package/dist/components/treemap-labels.js.map +1 -0
- package/dist/components/treemap-layout.d.ts +62 -0
- package/dist/components/treemap-layout.js +126 -0
- package/dist/components/treemap-layout.js.map +1 -0
- package/dist/components/treemap.d.ts +140 -17
- package/dist/components/treemap.js +324 -97
- package/dist/components/treemap.js.map +1 -1
- package/dist/components/use-table-state.d.ts +5 -5
- package/dist/components/use-table-state.js +4 -1
- package/dist/components/use-table-state.js.map +1 -1
- package/dist/data-table.d.ts +6 -2
- package/dist/data-table.js +7 -2
- package/dist/data-table.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/eslint/role-utilities.d.ts +36 -7
- package/dist/eslint/role-utilities.js +42 -9
- package/dist/eslint/role-utilities.js.map +1 -1
- package/dist/feedback/feedback-dialog.d.ts +25 -16
- package/dist/feedback/feedback-dialog.js +6 -2
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-mutation.d.ts +30 -0
- package/dist/feedback/feedback-mutation.js +16 -0
- package/dist/feedback/feedback-mutation.js.map +1 -0
- package/dist/feedback/feedback-page-link.d.ts +53 -0
- package/dist/feedback/feedback-page-link.js +37 -0
- package/dist/feedback/feedback-page-link.js.map +1 -0
- package/dist/feedback/feedback-public-list.d.ts +12 -3
- package/dist/feedback/feedback-public-list.js +2 -1
- package/dist/feedback/feedback-public-list.js.map +1 -1
- package/dist/feedback/feedback-replies.d.ts +3 -1
- package/dist/feedback/feedback-replies.js +5 -4
- package/dist/feedback/feedback-replies.js.map +1 -1
- package/dist/feedback/feedback-row-detail-labels.js +5 -0
- package/dist/feedback/feedback-row-detail-labels.js.map +1 -1
- package/dist/feedback/feedback-row-detail.d.ts +64 -28
- package/dist/feedback/feedback-row-detail.js +30 -28
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.d.ts +30 -11
- package/dist/feedback/feedback-status-undo.js +10 -15
- package/dist/feedback/feedback-status-undo.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.d.ts +1 -1
- package/dist/feedback/feedback-submit-dialog.js +1 -1
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-submit.js +9 -3
- package/dist/feedback/feedback-submit.js.map +1 -1
- package/dist/feedback/feedback-swipe.d.ts +1 -1
- package/dist/feedback/feedback-swipe.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +21 -9
- package/dist/feedback/feedback-table.js +45 -25
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread-labels.d.ts +2 -2
- package/dist/feedback/feedback-thread-labels.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +24 -23
- package/dist/feedback/feedback-thread.js +2 -1
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback.d.ts +34 -0
- package/dist/feedback.js +42 -0
- package/dist/feedback.js.map +1 -1
- package/dist/hooks/use-dismiss.js.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts +35 -0
- package/dist/hooks/use-focus-trap.js +6 -4
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-hotkey.d.ts +5 -2
- package/dist/hooks/use-hotkey.js +5 -4
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-long-press.d.ts +7 -4
- package/dist/hooks/use-long-press.js +3 -0
- package/dist/hooks/use-long-press.js.map +1 -1
- package/dist/hooks/use-media-query.js +12 -4
- package/dist/hooks/use-media-query.js.map +1 -1
- package/dist/hooks/use-mounted.d.ts +22 -0
- package/dist/hooks/use-mounted.js +24 -0
- package/dist/hooks/use-mounted.js.map +1 -0
- package/dist/hooks/use-overlay-history.d.ts +7 -1
- package/dist/hooks/use-overlay-history.js +35 -5
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/defaults.js +4 -5
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +7 -1
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +9 -2
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +20 -41
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +7 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +20 -10
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +9 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +7 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +8 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +5 -0
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +64 -17
- package/dist/index.js +77 -12
- package/dist/index.js.map +1 -1
- package/dist/landing/routing.d.ts +3 -1
- package/dist/landing/routing.js +4 -7
- package/dist/landing/routing.js.map +1 -1
- package/dist/lib/broadcast.d.ts +17 -0
- package/dist/lib/broadcast.js +30 -0
- package/dist/lib/broadcast.js.map +1 -0
- package/dist/lib/calc.d.ts +7 -1
- package/dist/lib/calc.js +3 -1
- package/dist/lib/calc.js.map +1 -1
- package/dist/lib/clipboard-minus.d.ts +2 -2
- package/dist/lib/clipboard-minus.js +1 -1
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/date-format.d.ts +37 -2
- package/dist/lib/date-format.js +34 -8
- package/dist/lib/date-format.js.map +1 -1
- package/dist/lib/day-format.d.ts +46 -0
- package/dist/lib/day-format.js +46 -0
- package/dist/lib/day-format.js.map +1 -0
- package/dist/lib/decimal-marks.d.ts +7 -1
- package/dist/lib/decimal-marks.js +5 -2
- package/dist/lib/decimal-marks.js.map +1 -1
- package/dist/lib/describe-failure.d.ts +14 -0
- package/dist/lib/describe-failure.js +9 -0
- package/dist/lib/describe-failure.js.map +1 -0
- package/dist/lib/direction.d.ts +16 -0
- package/dist/lib/direction.js +9 -1
- package/dist/lib/direction.js.map +1 -1
- package/dist/lib/focus-left.d.ts +63 -0
- package/dist/lib/focus-left.js +67 -0
- package/dist/lib/focus-left.js.map +1 -0
- package/dist/lib/format.d.ts +5 -3
- package/dist/lib/format.js +16 -13
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/http-status.d.ts +24 -0
- package/dist/lib/http-status.js +14 -0
- package/dist/lib/http-status.js.map +1 -0
- package/dist/lib/intl-cache.d.ts +14 -0
- package/dist/lib/intl-cache.js +15 -0
- package/dist/lib/intl-cache.js.map +1 -0
- package/dist/lib/isin.d.ts +10 -0
- package/dist/lib/isin.js.map +1 -1
- package/dist/lib/iso-day.d.ts +11 -0
- package/dist/lib/iso-day.js +8 -0
- package/dist/lib/iso-day.js.map +1 -0
- package/dist/lib/lazy-with-fallback.d.ts +31 -0
- package/dist/lib/lazy-with-fallback.js +40 -0
- package/dist/lib/lazy-with-fallback.js.map +1 -0
- package/dist/lib/path-pattern.d.ts +34 -0
- package/dist/lib/path-pattern.js +24 -0
- package/dist/lib/path-pattern.js.map +1 -0
- package/dist/lib/reduced-motion.d.ts +2 -1
- package/dist/lib/reduced-motion.js.map +1 -1
- package/dist/lib/round.d.ts +2 -1
- package/dist/lib/round.js +2 -1
- package/dist/lib/round.js.map +1 -1
- package/dist/lib/safe-storage.d.ts +24 -5
- package/dist/lib/safe-storage.js +27 -2
- package/dist/lib/safe-storage.js.map +1 -1
- package/dist/lib/session-refresh.js +1 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/share-format.d.ts +13 -0
- package/dist/lib/share-format.js +10 -0
- package/dist/lib/share-format.js.map +1 -0
- package/dist/lib/text-case.d.ts +17 -0
- package/dist/lib/text-case.js +8 -0
- package/dist/lib/text-case.js.map +1 -0
- package/dist/lib/text-match.d.ts +38 -0
- package/dist/lib/text-match.js +24 -2
- package/dist/lib/text-match.js.map +1 -1
- package/dist/lib/thenable.d.ts +13 -0
- package/dist/lib/thenable.js +8 -0
- package/dist/lib/thenable.js.map +1 -0
- package/dist/lib/translation-review.d.ts +7 -2
- package/dist/lib/translation-review.js +4 -4
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/notifications/device-zone-report.js +1 -1
- package/dist/notifications/device-zone-report.js.map +1 -1
- package/dist/notifications/notification-bell.d.ts +2 -1
- package/dist/notifications/notification-bell.js +3 -3
- package/dist/notifications/notification-bell.js.map +1 -1
- package/dist/notifications/notification-inbox.d.ts +10 -6
- package/dist/notifications/notification-inbox.js +26 -48
- package/dist/notifications/notification-inbox.js.map +1 -1
- package/dist/notifications/notification-parts.d.ts +3 -2
- package/dist/notifications/notification-parts.js +1 -3
- package/dist/notifications/notification-parts.js.map +1 -1
- package/dist/notifications/notification-types-setting.js +1 -1
- package/dist/notifications/notification-types-setting.js.map +1 -1
- package/dist/notifications/notifications-labels.d.ts +6 -0
- package/dist/notifications/notifications-labels.js +1 -0
- package/dist/notifications/notifications-labels.js.map +1 -1
- package/dist/notifications/push-device-setting.js +1 -1
- package/dist/notifications/push-device-setting.js.map +1 -1
- package/dist/notifications/push-devices-setting.d.ts +2 -1
- package/dist/notifications/push-devices-setting.js +27 -49
- package/dist/notifications/push-devices-setting.js.map +1 -1
- package/dist/notifications/quiet-hours-setting.d.ts +10 -3
- package/dist/notifications/quiet-hours-setting.js +65 -26
- package/dist/notifications/quiet-hours-setting.js.map +1 -1
- package/dist/notifications/unsubscribe-panel.js +4 -7
- package/dist/notifications/unsubscribe-panel.js.map +1 -1
- package/dist/notifications/use-push-device.d.ts +39 -1
- package/dist/notifications/use-push-device.js +28 -7
- package/dist/notifications/use-push-device.js.map +1 -1
- package/dist/offline/query-persistence.d.ts +3 -1
- package/dist/offline/query-persistence.js +19 -2
- package/dist/offline/query-persistence.js.map +1 -1
- package/dist/rhf/fields.d.ts +11 -4
- package/dist/rhf/fields.js.map +1 -1
- package/dist/search/command-palette.js +1 -1
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search.js +19 -9
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/use-command-key.d.ts +12 -1
- package/dist/search/use-command-key.js +3 -12
- package/dist/search/use-command-key.js.map +1 -1
- package/dist/search.d.ts +7 -0
- package/dist/search.js +10 -0
- package/dist/search.js.map +1 -1
- package/dist/settings/use-settings-focus.js +1 -0
- package/dist/settings/use-settings-focus.js.map +1 -1
- package/dist/shell/account-menu-language.d.ts +21 -5
- package/dist/shell/account-menu-language.js +3 -1
- package/dist/shell/account-menu-language.js.map +1 -1
- package/dist/shell/account-menu-text-size.d.ts +26 -9
- package/dist/shell/account-menu-text-size.js +3 -2
- package/dist/shell/account-menu-text-size.js.map +1 -1
- package/dist/shell/dev-menu.js +5 -18
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/role-switcher.d.ts +7 -0
- package/dist/shell/role-switcher.js.map +1 -1
- package/dist/shell/top-bar-actions.d.ts +1 -1
- package/dist/shell/top-bar-actions.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.d.ts +0 -2
- package/dist/shell/top-bar-parts-labels.js +0 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell.d.ts +27 -8
- package/dist/shell.js +28 -7
- package/dist/shell.js.map +1 -1
- package/dist/sync/engine.d.ts +30 -4
- package/dist/sync/engine.js +172 -52
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync.d.ts +6 -2
- package/dist/sync.js +6 -1
- package/dist/sync.js.map +1 -1
- package/dist/testing/css-variables.js +3 -8
- package/dist/testing/css-variables.js.map +1 -1
- package/dist/theme/contrast.d.ts +2 -1
- package/dist/theme/contrast.js +3 -8
- package/dist/theme/contrast.js.map +1 -1
- package/dist/theme/palette-store.js +6 -6
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js +3 -8
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +3 -6
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/tour/tour-catalogue.d.ts +7 -4
- package/dist/tour/tour-catalogue.js +12 -10
- package/dist/tour/tour-catalogue.js.map +1 -1
- package/dist/tour/tour-dock.d.ts +0 -2
- package/dist/tour/tour-dock.js +0 -2
- package/dist/tour/tour-dock.js.map +1 -1
- package/dist/tour/tour-gates.d.ts +4 -0
- package/dist/tour/tour-gates.js +14 -0
- package/dist/tour/tour-gates.js.map +1 -1
- package/dist/tour/tour-overlay.d.ts +27 -0
- package/dist/tour/tour-overlay.js +741 -0
- package/dist/tour/tour-overlay.js.map +1 -0
- package/dist/tour/tour.d.ts +16 -4
- package/dist/tour/tour.js +62 -778
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour/use-tour-progress.js +1 -1
- package/dist/tour/use-tour-progress.js.map +1 -1
- package/dist/tour/use-tour-url-sync.js +2 -2
- package/dist/tour/use-tour-url-sync.js.map +1 -1
- package/dist/wizard/stepper-nav.d.ts +5 -1
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.d.ts +6 -2
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.d.ts +3 -1
- package/dist/wizard/use-wizard.js.map +1 -1
- package/dist/wizard/validation.d.ts +3 -1
- package/dist/wizard/validation.js.map +1 -1
- package/package.json +12 -8
- package/src/account/account-parts.ts +5 -25
- package/src/account/data-export-setting-labels.ts +1 -1
- package/src/account/delete-account-setting-labels.ts +1 -1
- package/src/account/email-change-setting-labels.ts +1 -1
- package/src/account/passkeys-setting.tsx +60 -38
- package/src/account/sessions-setting.tsx +18 -12
- package/src/admin/admin-action-confirm.tsx +5 -10
- package/src/admin/admin-parts.ts +11 -25
- package/src/admin/mail-test-card-labels.ts +1 -1
- package/src/admin/plan-change-labels.ts +5 -23
- package/src/admin/plan-change.tsx +7 -44
- package/src/admin/reviewer-scope-editor.tsx +3 -3
- package/src/auth/auth-errors-labels.ts +23 -0
- package/src/auth/auth-errors.ts +11 -38
- package/src/auth/complete-name-dialog.tsx +9 -8
- package/src/auth/forgot-password-form-labels.ts +1 -1
- package/src/auth/forgot-password-form.tsx +11 -6
- package/src/auth/register-form-labels.ts +1 -1
- package/src/auth/reset-password-form-labels.ts +1 -1
- package/src/auth/reset-password-form.tsx +8 -4
- package/src/auth/sign-in-form-labels.ts +1 -1
- package/src/auth/status-parts.tsx +0 -6
- package/src/auth/verify-email-labels.ts +1 -1
- package/src/auth/verify-email.tsx +11 -6
- package/src/billing/cancel-request.ts +28 -6
- package/src/billing/cancel-subscription.tsx +29 -22
- package/src/billing/dialog-close.ts +34 -0
- package/src/billing/plan-card.tsx +36 -11
- package/src/billing/plan-change-labels.ts +66 -0
- package/src/billing/plan-switch.tsx +31 -20
- package/src/chart.ts +21 -3
- package/src/components/account-chips.tsx +20 -23
- package/src/components/alert-banner.tsx +82 -5
- package/src/components/amount-input.tsx +32 -14
- package/src/components/autocomplete.tsx +64 -70
- package/src/components/bulk-action-bar.tsx +70 -2
- package/src/components/button-look.ts +5 -5
- package/src/components/button.tsx +2 -2
- package/src/components/calculator.tsx +98 -17
- package/src/components/chart-edge.ts +34 -1
- package/src/components/chart-figure.tsx +35 -0
- package/src/components/chart-zoom-core.tsx +6 -5
- package/src/components/chart.tsx +26 -5
- package/src/components/combobox-core.tsx +303 -69
- package/src/components/combobox.tsx +184 -155
- package/src/components/copy-button.tsx +34 -23
- package/src/components/country-select.tsx +16 -11
- package/src/components/data-table-column-settings.tsx +52 -10
- package/src/components/data-table-filters.ts +6 -4
- package/src/components/data-table-fit.ts +19 -5
- package/src/components/data-table-groups.tsx +1 -1
- package/src/components/data-table-head.tsx +32 -22
- package/src/components/data-table-mobile.tsx +110 -27
- package/src/components/data-table-pagination.tsx +21 -6
- package/src/components/data-table-resize.ts +1 -1
- package/src/components/data-table-row-actions.tsx +3 -3
- package/src/components/data-table-row.tsx +25 -14
- package/src/components/data-table-selection.ts +1 -1
- package/src/components/data-table-shared.tsx +33 -1
- package/src/components/data-table-sort.ts +57 -2
- package/src/components/data-table-virtual.ts +32 -8
- package/src/components/data-table.tsx +267 -41
- package/src/components/date-field.tsx +65 -8
- package/src/components/date-picker.tsx +125 -48
- package/src/components/date-range-picker.tsx +82 -31
- package/src/components/dialog-frame.tsx +2 -1
- package/src/components/entity-combobox.tsx +4 -1
- package/src/components/error-boundary.tsx +53 -39
- package/src/components/field-base-labels.ts +20 -0
- package/src/components/field-base.tsx +13 -7
- package/src/components/field-sync-labels.ts +1 -0
- package/src/components/field-sync.tsx +23 -1
- package/src/components/form-actions.tsx +20 -5
- package/src/components/hover-menu.tsx +18 -8
- package/src/components/icon-button.tsx +14 -9
- package/src/components/inline-confirm.tsx +116 -0
- package/src/components/inline-entity-combobox.tsx +198 -152
- package/src/components/input.tsx +1 -1
- package/src/components/jump-calendar.tsx +30 -146
- package/src/components/legal-page.tsx +10 -7
- package/src/components/legal.tsx +4 -2
- package/src/components/lightbox.tsx +21 -8
- package/src/components/list.tsx +14 -5
- package/src/components/measured-grid.tsx +8 -4
- package/src/components/mini-calendar.tsx +6 -5
- package/src/components/modal.tsx +45 -4
- package/src/components/money-draft.ts +16 -5
- package/src/components/money-field.tsx +2 -2
- package/src/components/month-grid.tsx +229 -0
- package/src/components/month-picker.tsx +192 -200
- package/src/components/multi-entity-combobox.tsx +1 -0
- package/src/components/multi-select.tsx +21 -9
- package/src/components/number-field.tsx +14 -7
- package/src/components/number-input.tsx +9 -3
- package/src/components/numpad-sheet.tsx +4 -3
- package/src/components/picker-sheet.tsx +12 -9
- package/src/components/pie-chart-labels.ts +8 -0
- package/src/components/pie-chart.tsx +22 -28
- package/src/components/popover.tsx +18 -1
- package/src/components/reauth-dialog.tsx +6 -10
- package/src/components/row-actions.tsx +2 -1
- package/src/components/section-nav.tsx +7 -0
- package/src/components/series-chart-axes.ts +11 -3
- package/src/components/series-chart-labels.ts +7 -4
- package/src/components/series-chart.tsx +178 -69
- package/src/components/share-card.tsx +6 -6
- package/src/components/sign-chip-labels.ts +1 -0
- package/src/components/sign-chip.tsx +10 -1
- package/src/components/tabs-labels.ts +13 -0
- package/src/components/tabs.tsx +35 -19
- package/src/components/toggle-legend.tsx +16 -11
- package/src/components/translation-review-editor.tsx +6 -5
- package/src/components/translation-review.tsx +4 -3
- package/src/components/treemap-labels.ts +39 -0
- package/src/components/treemap-layout.ts +210 -0
- package/src/components/treemap.tsx +722 -133
- package/src/components/use-table-state.ts +12 -9
- package/src/data-table.ts +9 -2
- package/src/eslint/role-utilities.ts +97 -19
- package/src/feedback/feedback-dialog.tsx +30 -19
- package/src/feedback/feedback-mutation.ts +41 -0
- package/src/feedback/feedback-page-link.ts +90 -0
- package/src/feedback/feedback-public-list.tsx +17 -5
- package/src/feedback/feedback-replies.tsx +13 -6
- package/src/feedback/feedback-row-detail-labels.ts +5 -0
- package/src/feedback/feedback-row-detail.tsx +103 -67
- package/src/feedback/feedback-status-undo.ts +41 -27
- package/src/feedback/feedback-submit-dialog.tsx +2 -2
- package/src/feedback/feedback-submit.tsx +21 -7
- package/src/feedback/feedback-swipe.tsx +1 -1
- package/src/feedback/feedback-table.tsx +86 -38
- package/src/feedback/feedback-thread-labels.ts +2 -2
- package/src/feedback/feedback-thread.tsx +27 -25
- package/src/feedback.ts +42 -0
- package/src/hooks/use-dismiss.ts +3 -2
- package/src/hooks/use-focus-trap.ts +8 -24
- package/src/hooks/use-hotkey.ts +24 -7
- package/src/hooks/use-long-press.ts +16 -2
- package/src/hooks/use-media-query.ts +20 -4
- package/src/hooks/use-mounted.ts +39 -0
- package/src/hooks/use-overlay-history.ts +70 -5
- package/src/i18n/defaults.ts +4 -5
- package/src/i18n/german.ts +8 -2
- package/src/i18n/kit-labels.tsx +9 -2
- package/src/i18n/locales/es.ts +8 -2
- package/src/i18n/locales/fr.ts +21 -13
- package/src/i18n/locales/hu.ts +10 -2
- package/src/i18n/locales/it.ts +8 -2
- package/src/i18n/locales/zh.ts +9 -2
- package/src/i18n/review.ts +5 -0
- package/src/index.ts +103 -13
- package/src/landing/routing.tsx +14 -10
- package/src/lib/broadcast.ts +52 -0
- package/src/lib/calc.ts +13 -2
- package/src/lib/clipboard-minus.ts +14 -4
- package/src/lib/date-format.ts +89 -13
- package/src/lib/day-format.ts +96 -0
- package/src/lib/decimal-marks.ts +12 -3
- package/src/lib/describe-failure.ts +18 -0
- package/src/lib/direction.ts +39 -0
- package/src/lib/focus-left.ts +156 -0
- package/src/lib/format.ts +34 -19
- package/src/lib/http-status.ts +38 -0
- package/src/lib/intl-cache.ts +25 -0
- package/src/lib/isin.ts +10 -0
- package/src/lib/iso-day.ts +13 -0
- package/src/lib/lazy-with-fallback.ts +82 -0
- package/src/lib/path-pattern.ts +55 -0
- package/src/lib/reduced-motion.ts +2 -1
- package/src/lib/round.ts +7 -2
- package/src/lib/safe-storage.ts +48 -6
- package/src/lib/session-refresh.ts +1 -1
- package/src/lib/share-format.ts +18 -0
- package/src/lib/text-case.ts +19 -0
- package/src/lib/text-match.ts +69 -2
- package/src/lib/thenable.ts +19 -0
- package/src/lib/translation-review.ts +13 -5
- package/src/notifications/device-zone-report.ts +1 -1
- package/src/notifications/notification-bell.tsx +7 -4
- package/src/notifications/notification-inbox.tsx +40 -58
- package/src/notifications/notification-parts.tsx +3 -4
- package/src/notifications/notification-types-setting.tsx +1 -1
- package/src/notifications/notifications-labels.ts +7 -0
- package/src/notifications/push-device-setting.tsx +1 -1
- package/src/notifications/push-devices-setting.tsx +30 -55
- package/src/notifications/quiet-hours-setting.tsx +93 -31
- package/src/notifications/unsubscribe-panel.tsx +4 -7
- package/src/notifications/use-push-device.ts +76 -10
- package/src/offline/query-persistence.ts +35 -3
- package/src/rhf/fields.tsx +11 -4
- package/src/search/command-palette.tsx +2 -4
- package/src/search/global-search.tsx +36 -15
- package/src/search/use-command-key.ts +13 -12
- package/src/search.ts +9 -0
- package/src/settings/use-settings-focus.ts +3 -0
- package/src/shell/account-menu-language.tsx +27 -5
- package/src/shell/account-menu-text-size.tsx +32 -10
- package/src/shell/dev-menu.tsx +7 -21
- package/src/shell/role-switcher.tsx +7 -0
- package/src/shell/top-bar-actions.tsx +1 -1
- package/src/shell/top-bar-parts-labels.ts +0 -3
- package/src/shell.ts +40 -9
- package/src/sync/engine.ts +339 -61
- package/src/sync.ts +8 -1
- package/src/testing/css-variables.ts +8 -9
- package/src/theme/contrast.ts +8 -9
- package/src/theme/palette-store.ts +9 -9
- package/src/theme/text-size.ts +6 -8
- package/src/theme/theme-store.ts +7 -9
- package/src/tour/tour-catalogue.tsx +26 -15
- package/src/tour/tour-dock.ts +0 -2
- package/src/tour/tour-gates.ts +23 -0
- package/src/tour/tour-overlay.tsx +1170 -0
- package/src/tour/tour.tsx +116 -1193
- package/src/tour/use-tour-progress.ts +1 -1
- package/src/tour/use-tour-url-sync.ts +7 -3
- package/src/wizard/stepper-nav.tsx +3 -1
- package/src/wizard/types.ts +11 -2
- package/src/wizard/use-wizard.ts +2 -1
- package/src/wizard/validation.ts +8 -2
- package/tokens.css +2 -1
- package/dist/components/ui-labels.js.map +0 -1
- package/dist/shell/dev-switchers.d.ts +0 -6
- package/dist/shell/dev-switchers.js +0 -12
- package/dist/shell/dev-switchers.js.map +0 -1
- package/src/components/ui-labels.ts +0 -24
- package/src/shell/dev-switchers.tsx +0 -18
package/src/index.ts
CHANGED
|
@@ -16,12 +16,25 @@ export { logger, setStoreLog } from "./lib/logger";
|
|
|
16
16
|
// Intl number / money / percent / date / relative-time formatting, and `useKitFormat()`
|
|
17
17
|
// for the same bound to the provider's locale (kastlan's formatters.ts, English "5m ago").
|
|
18
18
|
export * from "./lib/format";
|
|
19
|
-
// localStorage that never throws (Safari private mode, blocked site data).
|
|
20
|
-
|
|
19
|
+
// localStorage that never throws (Safari private mode, blocked site data). 0.52 (DUP-8,
|
|
20
|
+
// refactor audit 2026-10-30): the remove, the sessionStorage pair and a JSON pair with a
|
|
21
|
+
// shape check — 16 files in the apps wrap storage by hand, a few of them with no guard.
|
|
22
|
+
export {
|
|
23
|
+
readStored,
|
|
24
|
+
writeStored,
|
|
25
|
+
removeStored,
|
|
26
|
+
readSessionStored,
|
|
27
|
+
writeSessionStored,
|
|
28
|
+
readStoredJson,
|
|
29
|
+
writeStoredJson,
|
|
30
|
+
} from "./lib/safe-storage";
|
|
31
|
+
// 0.52 (DUP-8): `prefers-reduced-motion`, asked at the moment of the motion (KS copied it).
|
|
32
|
+
export { prefersReducedMotion } from "./lib/reduced-motion";
|
|
21
33
|
// Save a fetched Blob as a download, and read the name a Content-Disposition asks for
|
|
22
34
|
// (`filename*` first) — 0.34, KS U5; the kit's own three downloads use them.
|
|
23
35
|
export { saveBlob, filenameFromDisposition } from "./lib/download";
|
|
24
|
-
//
|
|
36
|
+
// The local-calendar ISO date helpers are the "@eifi1/ui-kit/dates" entry, standalone: none
|
|
37
|
+
// of its names is in this barrel (public-surface.test.ts, STANDALONE).
|
|
25
38
|
// One fold and one ranking for every list's search box (DUP-5), for an app's own lists;
|
|
26
39
|
// and the pickers' every-word match (0.51.5), for an async `loadOptions` that filters itself.
|
|
27
40
|
export { foldForSearch, rankMatch, searchWords, matchesSearch } from "./lib/text-match";
|
|
@@ -114,6 +127,7 @@ export type {
|
|
|
114
127
|
export { COUNTRY_CODES, countryName } from "./lib/countries";
|
|
115
128
|
export { IBAN_LENGTHS, compactIban, formatIban, ibanCheckDigits, ibanProblem, isValidIban, isQrIban } from "./lib/iban";
|
|
116
129
|
export type { IbanKind, IbanProblem } from "./lib/iban";
|
|
130
|
+
// 0.52: deprecated, removed in 0.53 (MOD-5; tagged in lib/isin).
|
|
117
131
|
export { formatIsin, isinCheckDigit, isValidIsin } from "./lib/isin";
|
|
118
132
|
export { PHONE_DIAL_CODES, PHONE_COUNTRIES, parsePhone, formatNationalPhone, formatPhone, isE164 } from "./lib/phone";
|
|
119
133
|
export type { PhoneCountryCode, PhoneCountry, ParsedPhone } from "./lib/phone";
|
|
@@ -156,12 +170,21 @@ export type { UseAnnounceReturn, UseAnnounceOptions, AnnounceRegionProps } from
|
|
|
156
170
|
export { useOverlayHistory } from "./hooks/use-overlay-history";
|
|
157
171
|
export { useCloseTransition, OVERLAY_EXIT_MS } from "./hooks/use-close-transition";
|
|
158
172
|
export { useRowSwipe } from "./hooks/use-row-swipe";
|
|
173
|
+
// 0.52 (DUP-8): DataTable's press-and-hold, which keksdose wrote first and still keeps.
|
|
174
|
+
export { useLongPress } from "./hooks/use-long-press";
|
|
175
|
+
export type { LongPressOptions, LongPressResult } from "./hooks/use-long-press";
|
|
159
176
|
// 0.28: keksdose's noindex marker, for the legal and auth pages of every app.
|
|
160
177
|
export { useNoIndex } from "./hooks/use-noindex";
|
|
161
178
|
// 0.49 KIT-9: the window's title from page, section and app, in the provider's format.
|
|
162
179
|
export { useDocumentTitle } from "./hooks/use-document-title";
|
|
163
180
|
// 0.49 KIT-1b: U+2212 before a number as "-", the copy handler's rule, for an app's text.
|
|
164
|
-
|
|
181
|
+
// 0.52: deprecated with the other 54 names no app, test or showcase page reads (refactor
|
|
182
|
+
// audit 2026-10-30, API-4, decision 4). Each is tagged on its specifier here, not on its
|
|
183
|
+
// declaration: the module keeps it for the kit's own use, only the barrel lets it go.
|
|
184
|
+
export {
|
|
185
|
+
/** @deprecated 0.52 — a formatter's `minus: "ascii"`, where the figure is made (API-4); removed in 0.53 */
|
|
186
|
+
asciiMinusInNumbers,
|
|
187
|
+
} from "./lib/clipboard-minus";
|
|
165
188
|
export { DEFAULT_DOCUMENT_TITLE_FORMAT, formatDocumentTitle } from "./lib/document-title";
|
|
166
189
|
export type { DocumentTitleParts } from "./lib/document-title";
|
|
167
190
|
export type { SwipeStage, RowSwipeOptions, RowSwipeReturn } from "./hooks/use-row-swipe";
|
|
@@ -324,6 +347,7 @@ export * from "./components/settings-fields";
|
|
|
324
347
|
// Sync state for a database-backed field: the engine (`useFieldSync`) and the
|
|
325
348
|
// affordance (`FieldSyncIndicator`), kept separate because the state is useful
|
|
326
349
|
// without the dot — a form can gate its submit on any field being `pending`.
|
|
350
|
+
// 0.52: deprecated as a whole, removed in 0.53 (MOD-5; tagged in the module).
|
|
327
351
|
export * from "./components/field-sync";
|
|
328
352
|
export * from "./components/month-picker";
|
|
329
353
|
export * from "./components/checkbox";
|
|
@@ -398,7 +422,8 @@ export * from "./components/alert-banner";
|
|
|
398
422
|
export * from "./components/toggle-group";
|
|
399
423
|
// A wrapping set of links/buttons marked `aria-current` — Tabs-like looks, not tabs.
|
|
400
424
|
export * from "./components/nav-pills";
|
|
401
|
-
// 0.49.0 (KIT-6): a section's pages on the phone, one scrolling row of pills.
|
|
425
|
+
// 0.49.0 (KIT-6): a section's pages on the phone, one scrolling row of pills. 0.52:
|
|
426
|
+
// deprecated, removed in 0.53 (MOD-5; tagged in the module).
|
|
402
427
|
export * from "./components/section-nav";
|
|
403
428
|
// A pill carrying one VALUE — inert, a link, or a toggle, depending on which prop it is
|
|
404
429
|
// given — and the list field built from it. Distinct from Button on purpose: a row of
|
|
@@ -417,6 +442,10 @@ export * from "./components/grouped-picker";
|
|
|
417
442
|
export * from "./components/file-dropzone";
|
|
418
443
|
export * from "./components/mini-calendar";
|
|
419
444
|
export * from "./components/calendar-heatmap";
|
|
445
|
+
export {
|
|
446
|
+
/** @deprecated 0.52 — `CalendarHeatmap`, which steps its cells with it (API-4); removed in 0.53 */
|
|
447
|
+
heatmapLevel,
|
|
448
|
+
} from "./components/calendar-heatmap";
|
|
420
449
|
export * from "./components/date-picker";
|
|
421
450
|
export * from "./components/tree-view";
|
|
422
451
|
// 0.8.0 layout and feedback primitives the apps hand-rolled or took from shadcn/Radix.
|
|
@@ -437,7 +466,12 @@ export {
|
|
|
437
466
|
DEFAULT_WRITE_LOCK_LABELS,
|
|
438
467
|
} from "./components/write-lock";
|
|
439
468
|
// 0.46 (kastlan K4): the offline lock kind, its scope and its source.
|
|
440
|
-
export {
|
|
469
|
+
export {
|
|
470
|
+
/** @deprecated 0.52 — the kind itself, `"offline"`, which `useOfflineWriteLock` holds (API-4); removed in 0.53 */
|
|
471
|
+
OFFLINE_LOCK,
|
|
472
|
+
COMMIT_EXCEPT_OFFLINE,
|
|
473
|
+
useOfflineWriteLock,
|
|
474
|
+
} from "./components/write-lock";
|
|
441
475
|
export type {
|
|
442
476
|
WriteLock,
|
|
443
477
|
WriteLockLabels,
|
|
@@ -502,6 +536,10 @@ export * from "./components/copy-button";
|
|
|
502
536
|
export { AuthedImage, DEFAULT_AUTHED_IMAGE_LABELS } from "./components/authed-image";
|
|
503
537
|
export type { AuthedImageProps, AuthedImageLabels } from "./components/authed-image";
|
|
504
538
|
export * from "./components/image-grid";
|
|
539
|
+
export {
|
|
540
|
+
/** @deprecated 0.52 — `ImageGrid`, which shortens its file names with it (API-4); removed in 0.53 */
|
|
541
|
+
splitFileName,
|
|
542
|
+
} from "./components/image-grid";
|
|
505
543
|
export * from "./components/lightbox";
|
|
506
544
|
export * from "./components/button-group";
|
|
507
545
|
export * from "./components/table";
|
|
@@ -533,8 +571,11 @@ export {
|
|
|
533
571
|
toast,
|
|
534
572
|
Toaster,
|
|
535
573
|
DEFAULT_TOAST_LABELS,
|
|
574
|
+
/** @deprecated 0.52 — `toast()`, which times a toast with an action by it (API-4); removed in 0.53 */
|
|
536
575
|
TOAST_ACTION_DURATION,
|
|
576
|
+
/** @deprecated 0.52 — `<Toaster>`, whose default `offset` it is (API-4); removed in 0.53 */
|
|
537
577
|
TOASTER_OFFSET_TOP,
|
|
578
|
+
/** @deprecated 0.52 — `<Toaster>`, whose default `offset` it is (API-4); removed in 0.53 */
|
|
538
579
|
TOASTER_OFFSET_BOTTOM,
|
|
539
580
|
} from "./components/toast";
|
|
540
581
|
export type {
|
|
@@ -626,6 +667,8 @@ export {
|
|
|
626
667
|
isDateFormatPreference,
|
|
627
668
|
resolveDateFormat,
|
|
628
669
|
formatDateWithPreference,
|
|
670
|
+
// 0.52 (refactor audit 2026-10-30, DUP-2): a timestamp, the preference's date and the language's clock.
|
|
671
|
+
formatDateTimeWithPreference,
|
|
629
672
|
dateFormatSample,
|
|
630
673
|
dateFormatterFor,
|
|
631
674
|
} from "./lib/date-format";
|
|
@@ -639,6 +682,7 @@ export {
|
|
|
639
682
|
// 0.47.0 (keksdose N17): a hand-built table's actions heading and cell.
|
|
640
683
|
RowActionsHead,
|
|
641
684
|
ROW_ACTIONS_CELL_CLASS,
|
|
685
|
+
/** @deprecated 0.52 — `RowActionsHead`, which draws it (API-4); removed in 0.53 */
|
|
642
686
|
ROW_ACTIONS_HEAD_CLASS,
|
|
643
687
|
} from "./components/row-actions";
|
|
644
688
|
export type {
|
|
@@ -660,6 +704,7 @@ export * from "./components/one-time-code-input";
|
|
|
660
704
|
export * from "./components/language-select";
|
|
661
705
|
export * from "./components/tile-radio";
|
|
662
706
|
export * from "./components/inline-edit-field";
|
|
707
|
+
// 0.52: deprecated, removed in 0.53 (MOD-5; tagged in the module).
|
|
663
708
|
export * from "./components/sign-chip";
|
|
664
709
|
export * from "./components/country-select";
|
|
665
710
|
export * from "./components/iban-input";
|
|
@@ -814,10 +859,12 @@ export type { DataExportSettingProps, DataExportLabels, DataExportFile } from ".
|
|
|
814
859
|
// 0.30.0 (docs/user-admin-harmonization.md): the admin user list and its actions, and the
|
|
815
860
|
// invitations panel. Callbacks only; the confirmation level is the server's.
|
|
816
861
|
export {
|
|
862
|
+
/** @deprecated 0.52 — `useUserRosterColumns`, the same columns in the provider's words (API-4); removed in 0.53 */
|
|
817
863
|
userRosterColumns,
|
|
818
864
|
useUserRosterColumns,
|
|
819
865
|
UserIdentityCell,
|
|
820
866
|
UserRowActions,
|
|
867
|
+
/** @deprecated 0.52 — `useUserRosterColumns`, whose state cell reads it (API-4); removed in 0.53 */
|
|
821
868
|
adminUserStates,
|
|
822
869
|
userRosterSort,
|
|
823
870
|
USER_ROSTER_SORT_KEYS,
|
|
@@ -898,7 +945,13 @@ export { adminSectionOrder } from "./admin/admin-sections";
|
|
|
898
945
|
export type { AdminSectionPlace, AdminSectionOrderOptions, AdminKeptSection } from "./admin/admin-sections";
|
|
899
946
|
export { AdminForbidden } from "./admin/admin-forbidden";
|
|
900
947
|
export type { AdminForbiddenProps } from "./admin/admin-forbidden";
|
|
901
|
-
export {
|
|
948
|
+
export {
|
|
949
|
+
AdminOverview,
|
|
950
|
+
AttentionTile,
|
|
951
|
+
adminWaitingCount,
|
|
952
|
+
/** @deprecated 0.52 — `AdminOverview`, which links its tiles there unless told otherwise (API-4); removed in 0.53 */
|
|
953
|
+
DEFAULT_ADMIN_ATTENTION_HREFS,
|
|
954
|
+
} from "./admin/admin-overview";
|
|
902
955
|
export type {
|
|
903
956
|
AdminAttention,
|
|
904
957
|
AdminAttentionTile,
|
|
@@ -913,10 +966,17 @@ export type {
|
|
|
913
966
|
export { AdminToolLinks } from "./admin/admin-tool-links";
|
|
914
967
|
export type { AdminToolLink, AdminToolLinksProps } from "./admin/admin-tool-links";
|
|
915
968
|
// 0.45.0 (docs/admin-harmonization.md §9.2.4): "Send a test mail to me".
|
|
916
|
-
export {
|
|
969
|
+
export {
|
|
970
|
+
MailTestCard,
|
|
971
|
+
DEFAULT_MAIL_TEST_CARD_LABELS,
|
|
972
|
+
MAIL_TEST_ANCHOR,
|
|
973
|
+
/** @deprecated 0.52 — `MailTestCard`, which masks the address itself (API-4); removed in 0.53 */
|
|
974
|
+
maskMailAddress,
|
|
975
|
+
} from "./admin/mail-test-card";
|
|
917
976
|
export type { MailTestCardProps, MailTestCardLabels, MailTestAnswer } from "./admin/mail-test-card";
|
|
918
977
|
// 0.33.0: the operator's plan parts (docs/billing-harmonization.md §14.12).
|
|
919
978
|
export {
|
|
979
|
+
/** @deprecated 0.52 — `usePlanColumn`, the same column in the provider's words (API-4); removed in 0.53 */
|
|
920
980
|
planColumn,
|
|
921
981
|
usePlanColumn,
|
|
922
982
|
PlanChangeConfirm,
|
|
@@ -947,7 +1007,13 @@ export type {
|
|
|
947
1007
|
PlanPrices,
|
|
948
1008
|
PlanPriceAnswer,
|
|
949
1009
|
} from "./billing/plan-price";
|
|
950
|
-
export {
|
|
1010
|
+
export {
|
|
1011
|
+
PlanCard,
|
|
1012
|
+
PlanPicker,
|
|
1013
|
+
GrantWarningConfirm,
|
|
1014
|
+
/** @deprecated 0.52 — `PlanPicker`, which marks each card's relation itself (API-4); removed in 0.53 */
|
|
1015
|
+
planRelation,
|
|
1016
|
+
} from "./billing/plan-card";
|
|
951
1017
|
export type {
|
|
952
1018
|
BillingPlan,
|
|
953
1019
|
PlanRelation,
|
|
@@ -983,13 +1049,19 @@ export {
|
|
|
983
1049
|
} from "./billing/checkout-return";
|
|
984
1050
|
export {
|
|
985
1051
|
checkoutFingerprint,
|
|
1052
|
+
/** @deprecated 0.52 — `useCheckoutProcessing`, which asks it (API-4); removed in 0.53 */
|
|
986
1053
|
checkoutLanded,
|
|
987
1054
|
noteCheckoutStarted,
|
|
988
1055
|
useCheckoutProcessing,
|
|
989
1056
|
} from "./billing/checkout-processing";
|
|
990
1057
|
export type { CheckoutOverview, CheckoutProcessingOptions } from "./billing/checkout-processing";
|
|
991
1058
|
// The link to the pay page and Paddle's locale (§14.4); the page itself ships as dist/pay/.
|
|
992
|
-
export {
|
|
1059
|
+
export {
|
|
1060
|
+
/** @deprecated 0.52 — `payPageUrl`, which writes it (API-4); removed in 0.53 */
|
|
1061
|
+
PAY_PAGE_LANG_PARAM,
|
|
1062
|
+
paddleLocale,
|
|
1063
|
+
payPageUrl,
|
|
1064
|
+
} from "./billing/pay-page";
|
|
993
1065
|
export type { PaddleEnvironment } from "./billing/pay-page";
|
|
994
1066
|
// 0.39 (§15.2.6): the apps every pay page serves, by their `billing_app` tag.
|
|
995
1067
|
export { PAY_PAGE_APPS } from "./billing/pay-page";
|
|
@@ -1039,7 +1111,11 @@ export type {
|
|
|
1039
1111
|
ResolveAccountLanguageInput,
|
|
1040
1112
|
ResolvedAccountLanguage,
|
|
1041
1113
|
} from "./settings/use-account-language";
|
|
1042
|
-
export {
|
|
1114
|
+
export {
|
|
1115
|
+
useAccountAppearance,
|
|
1116
|
+
/** @deprecated 0.52 — `useAccountAppearance`, which resolves the same three values (API-4); removed in 0.53 */
|
|
1117
|
+
resolveAccountAppearance,
|
|
1118
|
+
} from "./settings/use-account-appearance";
|
|
1043
1119
|
export type {
|
|
1044
1120
|
AppearanceSource,
|
|
1045
1121
|
AccountAppearanceFields,
|
|
@@ -1090,6 +1166,8 @@ export {
|
|
|
1090
1166
|
notifyPushSubscriptionChanged,
|
|
1091
1167
|
pushSupported,
|
|
1092
1168
|
PushDeviceError,
|
|
1169
|
+
// 0.52 (§10.6, refactor audit 2026-10-30 FLW-2): an explicit sign-out releases this device's push.
|
|
1170
|
+
releaseThisDevicePush,
|
|
1093
1171
|
} from "./notifications/use-push-device";
|
|
1094
1172
|
export type {
|
|
1095
1173
|
PushDevice,
|
|
@@ -1114,7 +1192,11 @@ export type {
|
|
|
1114
1192
|
} from "./notifications/push-worker";
|
|
1115
1193
|
export { PushDeviceSetting } from "./notifications/push-device-setting";
|
|
1116
1194
|
export type { PushDeviceSettingProps, PushDeviceAction } from "./notifications/push-device-setting";
|
|
1117
|
-
export {
|
|
1195
|
+
export {
|
|
1196
|
+
PushDevicesSetting,
|
|
1197
|
+
/** @deprecated 0.52 — `PushDevicesSetting`, which names each device with it (API-4); removed in 0.53 */
|
|
1198
|
+
describeUserAgent,
|
|
1199
|
+
} from "./notifications/push-devices-setting";
|
|
1118
1200
|
export type { PushDevicesSettingProps } from "./notifications/push-devices-setting";
|
|
1119
1201
|
export { UnsubscribePanel, unsubscribeTokenType } from "./notifications/unsubscribe-panel";
|
|
1120
1202
|
export type { UnsubscribePanelProps } from "./notifications/unsubscribe-panel";
|
|
@@ -1161,7 +1243,15 @@ export { DEFAULT_DEMO_LABELS, useDemoLabels } from "./demo/demo-labels";
|
|
|
1161
1243
|
export type { DemoLabels } from "./demo/demo-labels";
|
|
1162
1244
|
export { isDemoSession } from "./demo/demo-session";
|
|
1163
1245
|
export type { DemoModel, DemoSessionUser } from "./demo/demo-session";
|
|
1164
|
-
export {
|
|
1246
|
+
export {
|
|
1247
|
+
useDemoCountdown,
|
|
1248
|
+
/** @deprecated 0.52 — `useDemoCountdown`, the same countdown; its `now` option for a test (API-4); removed in 0.53 */
|
|
1249
|
+
demoCountdown,
|
|
1250
|
+
/** @deprecated 0.52 — `useDemoCountdown`, whose `warning` turns on then (API-4); removed in 0.53 */
|
|
1251
|
+
DEMO_WARNING_MINUTES,
|
|
1252
|
+
/** @deprecated 0.52 — `useDemoCountdown`, whose `lastHour` turns on then (API-4); removed in 0.53 */
|
|
1253
|
+
DEMO_MINUTES_ONLY,
|
|
1254
|
+
} from "./demo/demo-countdown";
|
|
1165
1255
|
export type { DemoCountdown, DemoCountdownOptions, DemoExpiry } from "./demo/demo-countdown";
|
|
1166
1256
|
export { DemoStart } from "./demo/demo-start";
|
|
1167
1257
|
export type { DemoStartProps } from "./demo/demo-start";
|
package/src/landing/routing.tsx
CHANGED
|
@@ -2,6 +2,7 @@ import { useEffect } from "react";
|
|
|
2
2
|
import type { ReactNode } from "react";
|
|
3
3
|
import { Navigate, Outlet, useLocation } from "react-router";
|
|
4
4
|
|
|
5
|
+
import { matchesPathPattern, routerPathname } from "../lib/path-pattern";
|
|
5
6
|
import { readStored, removeStored, writeStored } from "../lib/safe-storage";
|
|
6
7
|
import type { LandingSession } from "./landing-actions";
|
|
7
8
|
import { LoadingState } from "../components/loading-state";
|
|
@@ -61,7 +62,9 @@ export function safeNextPath(raw: string | null | undefined): string | null {
|
|
|
61
62
|
/* ── The last visited page (§3.2) ────────────────────────────────────────── */
|
|
62
63
|
|
|
63
64
|
/** A path to leave out: a string is the path and everything under it (`/demo` is
|
|
64
|
-
* `/demo` and `/demo/ended`; `/` is only `/`), a RegExp is tested on the pathname.
|
|
65
|
+
* `/demo` and `/demo/ended`; `/` is only `/`), a RegExp is tested on the pathname. Both
|
|
66
|
+
* as React Router matches a route: case-insensitive (a RegExp gets the `i` flag) and on
|
|
67
|
+
* the percent-decoded path (0.52). */
|
|
65
68
|
export type PathPattern = string | RegExp;
|
|
66
69
|
|
|
67
70
|
/**
|
|
@@ -85,16 +88,17 @@ export const DEFAULT_LAST_VISITED_EXCLUDES: readonly PathPattern[] = Object.free
|
|
|
85
88
|
"/terms",
|
|
86
89
|
]);
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
/** Whether `pathname` is one of the defaults or the app's `exclude`. */
|
|
91
|
+
/**
|
|
92
|
+
* Whether `pathname` is one of the defaults or the app's `exclude` — read as the ROUTER
|
|
93
|
+
* reads it, decoded and case-insensitive (lib/path-pattern). This module's own copy of the
|
|
94
|
+
* rule compared the raw pathname case-sensitively after the feedback guard's copy had
|
|
95
|
+
* learnt both, and `exclude: ["/banks/callback"]` recorded `/Banks/Callback?code=…` as the
|
|
96
|
+
* page the next launch resumes on (0.52 code review, lib/path-pattern.ts). One rule now.
|
|
97
|
+
*/
|
|
96
98
|
function isExcluded(pathname: string, exclude: readonly PathPattern[]): boolean {
|
|
97
|
-
|
|
99
|
+
const path = routerPathname(pathname);
|
|
100
|
+
const named = (pattern: PathPattern) => matchesPathPattern(path, pattern);
|
|
101
|
+
return DEFAULT_LAST_VISITED_EXCLUDES.some(named) || exclude.some(named);
|
|
98
102
|
}
|
|
99
103
|
|
|
100
104
|
export interface LastVisitedPageOptions {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The cross-tab messages of the sync engine (the copy's new epoch after `forget()`) and of the
|
|
3
|
+
* query copy (`clear`), refactor audit 2026-10-30 FLW-1. 0.52 code review
|
|
4
|
+
* (src/sync/engine.ts, src/offline/query-persistence.ts): both wrote the open, the feature
|
|
5
|
+
* check, the try/catch and the close by hand, the listening side twice too — and the two
|
|
6
|
+
* listeners had drifted (only the query copy's let go of Node's worker).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Tell this origin's other tabs one thing over a `BroadcastChannel`, and let go of the
|
|
11
|
+
* channel at once.
|
|
12
|
+
*
|
|
13
|
+
* Best-effort by design: the message makes another tab stop sooner, and each caller has a
|
|
14
|
+
* fallback that holds without it (the epoch in `meta`, the key deleted from storage).
|
|
15
|
+
*
|
|
16
|
+
* The message goes out on a channel of its own, so a caller that listens on `name` itself
|
|
17
|
+
* hears it too, like every other channel of that name in this tab: it ignores its own.
|
|
18
|
+
*/
|
|
19
|
+
export function postOnce(name: string, message: unknown): void {
|
|
20
|
+
// Older browsers and some test environments have none: nothing is posted.
|
|
21
|
+
if (typeof BroadcastChannel === "undefined") return;
|
|
22
|
+
try {
|
|
23
|
+
const channel = new BroadcastChannel(name);
|
|
24
|
+
try {
|
|
25
|
+
channel.postMessage(message);
|
|
26
|
+
} finally {
|
|
27
|
+
channel.close();
|
|
28
|
+
}
|
|
29
|
+
} catch {
|
|
30
|
+
/* best-effort: a message that cannot be cloned, a channel refused (an opaque origin) */
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Hear what this origin's other tabs post on `name` until the returned function is called.
|
|
36
|
+
* Nothing is heard (and closing is a no-op) where there is no BroadcastChannel or none can be
|
|
37
|
+
* opened (an opaque origin): each caller has a fallback that holds without it.
|
|
38
|
+
*/
|
|
39
|
+
export function listenOn(name: string, onMessage: (data: unknown) => void): () => void {
|
|
40
|
+
if (typeof BroadcastChannel === "undefined") return () => undefined;
|
|
41
|
+
let channel: BroadcastChannel;
|
|
42
|
+
try {
|
|
43
|
+
channel = new BroadcastChannel(name);
|
|
44
|
+
} catch {
|
|
45
|
+
return () => undefined;
|
|
46
|
+
}
|
|
47
|
+
// Node's channel (an app's tests) holds its worker open while it listens, and a test that
|
|
48
|
+
// never stops the listener would keep it listening. Browsers have no `unref`.
|
|
49
|
+
(channel as BroadcastChannel & { unref?: () => void }).unref?.();
|
|
50
|
+
channel.onmessage = ({ data }: MessageEvent<unknown>) => onMessage(data);
|
|
51
|
+
return () => channel.close();
|
|
52
|
+
}
|
package/src/lib/calc.ts
CHANGED
|
@@ -244,9 +244,20 @@ export function commitExpression(raw: string): string {
|
|
|
244
244
|
* keystroke-by-keystroke but stray characters can't be entered. A lone leading
|
|
245
245
|
* `-` is kept — in a plain field it is simply a negative amount; in a field whose
|
|
246
246
|
* caller owns the sign it is read off again by {@link splitLeadingSign}. The text
|
|
247
|
-
* is resolved to a plain number on blur/Enter via {@link commitExpression}.
|
|
247
|
+
* is resolved to a plain number on blur/Enter via {@link commitExpression}.
|
|
248
|
+
*
|
|
249
|
+
* The typographic minus and the two dashes become "-" first, as in
|
|
250
|
+
* {@link evaluateExpression}: U+2212 is what the kit's own `formatMoney` and
|
|
251
|
+
* `formatNumber` print for every negative since 0.49, and stripping it with the
|
|
252
|
+
* stray characters turned a pasted "−1.234,50 €" into a positive amount (refactor
|
|
253
|
+
* audit 2026-10-30, INP-3). */
|
|
248
254
|
export function sanitizeLive(raw: string): string {
|
|
249
|
-
return dropExtraDots(
|
|
255
|
+
return dropExtraDots(
|
|
256
|
+
raw
|
|
257
|
+
.replace(/[−–—]/g, "-")
|
|
258
|
+
.replace(/,/g, ".")
|
|
259
|
+
.replace(/[^0-9.+\-*/×÷()]/g, ""),
|
|
260
|
+
);
|
|
250
261
|
}
|
|
251
262
|
|
|
252
263
|
/**
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* as a number: a figure copied out of a kit table and pasted into Excel landed as text.
|
|
6
6
|
* So while a selection inside the page is copied, every U+2212 standing directly before a
|
|
7
7
|
* number — optionally after a currency code or symbol and spaces: "−CHF 1,250.50",
|
|
8
|
-
* "−€2,000", "−12%" — becomes the ASCII "-" in the clipboard, in `text/plain` AND
|
|
9
|
-
* `text/html` (Excel pastes the HTML flavour, as cells). The page keeps "−".
|
|
8
|
+
* "−€2,000", "−US$12", "−12%" — becomes the ASCII "-" in the clipboard, in `text/plain` AND
|
|
9
|
+
* in `text/html` (Excel pastes the HTML flavour, as cells). The page keeps "−".
|
|
10
10
|
*
|
|
11
11
|
* A copy with no such minus is left to the browser untouched, and so is any copy out of an
|
|
12
12
|
* input, a textarea or an editable element: what the person typed is theirs.
|
|
@@ -15,8 +15,18 @@
|
|
|
15
15
|
* the one part every app mounts, the signed-out pages included.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* U+2212, then up to five letters, currency symbols or dots, then spaces, then a digit.
|
|
20
|
+
*
|
|
21
|
+
* Five of them, not "a code or one symbol": English and Chinese write a currency with
|
|
22
|
+
* letters before the symbol — "−US$", "−CA$", "−A$", "−NZ$", "−HK$", "−R$", "−MX$",
|
|
23
|
+
* "−JP¥", "−CN¥" — and `narrowSymbol` with letters alone ("−kr", "−zł", "−Kč"). Those kept
|
|
24
|
+
* U+2212 in the clipboard, and Excel pasted them as text: 35 of 351 locale × currency
|
|
25
|
+
* pairs at the default display, every one English or Chinese, and 136 of 1428 with
|
|
26
|
+
* `narrowSymbol` (refactor audit 2026-10-30, DSP-11). A minus with no digit after it
|
|
27
|
+
* ("x−y", "a − b") is still left alone.
|
|
28
|
+
*/
|
|
29
|
+
const MINUS_BEFORE_NUMBER = /\u2212(?=[\p{L}\p{Sc}.]{0,5}[\s\u00a0\u202f]*\d)/gu;
|
|
20
30
|
|
|
21
31
|
/**
|
|
22
32
|
* `text` with each U+2212 that stands before a number (in the sense above) as the ASCII
|
package/src/lib/date-format.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { formatLocaleOf } from "../i18n/languages";
|
|
2
2
|
import type { KitDateFormatter } from "../i18n/kit-labels";
|
|
3
|
+
import { pad, toLocalIso } from "./dates";
|
|
4
|
+
import { dateFormatter } from "./intl-cache";
|
|
5
|
+
import { isBareIsoDay } from "./iso-day";
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
* The date-format preference (0.46, lifted from keksdose's `date-format-store.ts`,
|
|
@@ -56,6 +59,15 @@ export interface DateFormatOptions {
|
|
|
56
59
|
/** Name the day of the week too, in the interface language ("Mo., 01.08.2026"). A date
|
|
57
60
|
* in a COLUMN carries it; a date in a SENTENCE does not (keksdose dev#546). */
|
|
58
61
|
weekday?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* 0.52: the IANA zone a TIMESTAMP's day and clock are read in ("Europe/Zurich") — pass
|
|
64
|
+
* the `<UiKitProvider timeZone>` (`useKitTimeZone()`), so an app's own column says what
|
|
65
|
+
* the kit's components say for the same instant. Left out: the device's. A bare
|
|
66
|
+
* "YYYY-MM-DD" ignores it: a calendar day is the day it names in every zone. A zone
|
|
67
|
+
* `Intl` refuses reads as the device's. The renderers read it; {@link resolveDateFormat}
|
|
68
|
+
* does not.
|
|
69
|
+
*/
|
|
70
|
+
timeZone?: string;
|
|
59
71
|
}
|
|
60
72
|
|
|
61
73
|
/**
|
|
@@ -80,9 +92,6 @@ export function resolveDateFormat(
|
|
|
80
92
|
return { locale: preference, options: { year: "numeric", month: "2-digit", day: "2-digit" }, ...weekday };
|
|
81
93
|
}
|
|
82
94
|
|
|
83
|
-
/** A bare calendar day: no time, no zone. */
|
|
84
|
-
const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
85
|
-
|
|
86
95
|
/**
|
|
87
96
|
* `dateText`, already rendered under the preference, with the day's NAME around it in
|
|
88
97
|
* `locale` (the language's). Not "weekday alone + comma": German says "So" alone and
|
|
@@ -93,7 +102,7 @@ const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
|
93
102
|
*/
|
|
94
103
|
function withWeekday(date: Date, dateText: string, locale: string | undefined, options: Intl.DateTimeFormatOptions) {
|
|
95
104
|
const isDatePart = (p: Intl.DateTimeFormatPart) => p.type === "day" || p.type === "month" || p.type === "year";
|
|
96
|
-
const parts =
|
|
105
|
+
const parts = dateFormatter(locale, { weekday: "short", ...options }).formatToParts(date);
|
|
97
106
|
const first = parts.findIndex(isDatePart);
|
|
98
107
|
if (first === -1) return dateText;
|
|
99
108
|
let last = first;
|
|
@@ -108,8 +117,9 @@ function withWeekday(date: Date, dateText: string, locale: string | undefined, o
|
|
|
108
117
|
* A date under the preference: `""` for no value, the input itself when it does not
|
|
109
118
|
* parse. A bare "YYYY-MM-DD" is the calendar day it names in every zone (formatted in
|
|
110
119
|
* UTC, undoing `new Date`'s UTC-midnight parse — west of Greenwich it read a day early);
|
|
111
|
-
* a timestamp is an instant
|
|
112
|
-
* is rendered in the same zone, so a Sunday is never captioned
|
|
120
|
+
* a timestamp is an instant, read in `options.timeZone`, else the reader's zone. The
|
|
121
|
+
* weekday, when asked for, is rendered in the same zone, so a Sunday is never captioned
|
|
122
|
+
* Saturday.
|
|
113
123
|
*/
|
|
114
124
|
export function formatDateWithPreference(
|
|
115
125
|
value: string | Date | null | undefined,
|
|
@@ -119,17 +129,83 @@ export function formatDateWithPreference(
|
|
|
119
129
|
): string {
|
|
120
130
|
if (!value) return "";
|
|
121
131
|
const resolved = resolveDateFormat(preference, language, options);
|
|
122
|
-
const dateOnly =
|
|
132
|
+
const dateOnly = isBareIsoDay(value);
|
|
123
133
|
const date = typeof value === "string" ? new Date(value) : value;
|
|
124
134
|
if (Number.isNaN(date.getTime())) return String(value);
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
135
|
+
const render = (timeZone: string | undefined) => {
|
|
136
|
+
const intl: Intl.DateTimeFormatOptions = timeZone ? { ...resolved.options, timeZone } : resolved.options;
|
|
137
|
+
// Through the shared cache (refactor audit 2026-10-30, DUP-2): a `toLocaleDateString`
|
|
138
|
+
// builds a formatter per call, which is why keksdose kept its own copy of this
|
|
139
|
+
// renderer — 392 ms per click on a 270-row register (dev#632).
|
|
140
|
+
const text = dateFormatter(resolved.locale, intl).format(date);
|
|
128
141
|
return resolved.weekday ? withWeekday(date, text, resolved.weekday.locale, intl) : text;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
142
|
+
};
|
|
143
|
+
if (dateOnly) return firstAccepted([() => render("UTC")], () => value);
|
|
144
|
+
// A zone `Intl` refuses: the reader's own day, as `clockTime` reads the reader's own
|
|
145
|
+
// clock — never the UTC day `toISOString` gave, a day off around midnight (0.52 code
|
|
146
|
+
// review, this file).
|
|
147
|
+
return firstAccepted([() => render(options.timeZone), () => render(undefined)], () => toLocalIso(date));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** The first of `renders` that `Intl` accepts — a language tag or a zone it refuses
|
|
151
|
+
* throws — else `last()`: the ISO day or the clock rather than nothing (keksdose's
|
|
152
|
+
* fallback). */
|
|
153
|
+
function firstAccepted(renders: readonly (() => string)[], last: () => string): string {
|
|
154
|
+
for (const render of renders) {
|
|
155
|
+
try {
|
|
156
|
+
return render();
|
|
157
|
+
} catch {
|
|
158
|
+
// Refused: the next.
|
|
159
|
+
}
|
|
132
160
|
}
|
|
161
|
+
return last();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* The clock time of `date` as the language writes it ("14:05"), two digits each: rule 3,
|
|
166
|
+
* a clock follows the language, never the preference — `sv-SE` is a statement about the
|
|
167
|
+
* order of a date's digits, not about a 12- or 24-hour clock. `language` is read through
|
|
168
|
+
* `formatLocaleOf`, so English is the British 24-hour clock, not "02:05 PM" in a
|
|
169
|
+
* German household's app. In `timeZone` when given, else the reader's.
|
|
170
|
+
*
|
|
171
|
+
* @internal Shared with the kit's own day formatter; not part of the barrel.
|
|
172
|
+
*/
|
|
173
|
+
export function clockTime(date: Date, language: string | undefined, timeZone?: string): string {
|
|
174
|
+
const locale = language ? formatLocaleOf(language) : undefined;
|
|
175
|
+
const clock = (zone: string | undefined) =>
|
|
176
|
+
dateFormatter(locale, { hour: "2-digit", minute: "2-digit", ...(zone ? { timeZone: zone } : null) }).format(date);
|
|
177
|
+
// A zone `Intl` refuses: the reader's own clock, as `isoDayIn` reads the reader's own
|
|
178
|
+
// day — the UTC clock `toISOString` gave printed 13:05 for 14:05 in Zurich, an hour or
|
|
179
|
+
// more off with no error (0.52 code review, this file).
|
|
180
|
+
const reader = () => `${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
181
|
+
return firstAccepted([() => clock(timeZone), () => clock(undefined)], reader);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* A timestamp under the preference (0.52, keksdose's `formatDateTimeFor`, refactor audit
|
|
186
|
+
* 2026-10-30, DUP-2): the date as {@link formatDateWithPreference} writes it, weekday
|
|
187
|
+
* when asked for, then the clock time in the LANGUAGE ({@link clockTime}): "01.08.2026,
|
|
188
|
+
* 14:05", "Sa., 01.08.2026, 14:05". keksdose's notification inbox and admin scheduler
|
|
189
|
+
* were where an explicit ISO choice did nothing until it wrote this. `""` for no value,
|
|
190
|
+
* the input itself when it does not parse; a bare "YYYY-MM-DD" names no moment, so it
|
|
191
|
+
* prints as the date alone.
|
|
192
|
+
*
|
|
193
|
+
* Day and clock in `options.timeZone` — pass the provider's (`useKitTimeZone()`): without
|
|
194
|
+
* it they were the device's, and an app on Zurich time read from New York printed 09:05
|
|
195
|
+
* in its own column where the kit's inbox printed 14:05 for the same instant (0.52 code
|
|
196
|
+
* review, this file).
|
|
197
|
+
*/
|
|
198
|
+
export function formatDateTimeWithPreference(
|
|
199
|
+
value: string | Date | null | undefined,
|
|
200
|
+
preference: DateFormatPreference,
|
|
201
|
+
language: string | undefined,
|
|
202
|
+
options: DateFormatOptions = {},
|
|
203
|
+
): string {
|
|
204
|
+
if (!value) return "";
|
|
205
|
+
if (isBareIsoDay(value)) return formatDateWithPreference(value, preference, language, options);
|
|
206
|
+
const date = typeof value === "string" ? new Date(value) : value;
|
|
207
|
+
if (Number.isNaN(date.getTime())) return String(value);
|
|
208
|
+
return `${formatDateWithPreference(date, preference, language, options)}, ${clockTime(date, language, options.timeZone)}`;
|
|
133
209
|
}
|
|
134
210
|
|
|
135
211
|
/** The sample an option is labelled with — 1 August 2026 in its shape, the shape being
|