@eifi1/ui-kit 0.51.3 → 0.51.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/account/account-settings-labels.js.map +1 -1
- package/dist/account/account-settings.js +11 -9
- package/dist/account/account-settings.js.map +1 -1
- package/dist/account/delete-account-setting.js +56 -65
- package/dist/account/delete-account-setting.js.map +1 -1
- package/dist/account/email-change-setting-labels.js.map +1 -1
- package/dist/account/email-change-setting.js.map +1 -1
- package/dist/account/passkeys-setting.js.map +1 -1
- package/dist/account/sessions-setting.js.map +1 -1
- package/dist/admin/admin-action-confirm.js +1 -3
- package/dist/admin/admin-action-confirm.js.map +1 -1
- package/dist/admin/admin-action-log.js.map +1 -1
- package/dist/admin/admin-area-labels.js +4 -1
- package/dist/admin/admin-area-labels.js.map +1 -1
- package/dist/admin/admin-overview.js +19 -11
- package/dist/admin/admin-overview.js.map +1 -1
- package/dist/admin/admin-sections.js.map +1 -1
- package/dist/admin/admin-tool-links.d.ts +1 -1
- package/dist/admin/admin-tool-links.js +7 -1
- package/dist/admin/admin-tool-links.js.map +1 -1
- package/dist/admin/invitations-panel.js +2 -13
- package/dist/admin/invitations-panel.js.map +1 -1
- package/dist/admin/mail-test-card.js.map +1 -1
- package/dist/admin/reviewer-scope-editor.js +4 -11
- package/dist/admin/reviewer-scope-editor.js.map +1 -1
- package/dist/admin/role-select.js.map +1 -1
- package/dist/admin/user-roster.js +1 -9
- package/dist/admin/user-roster.js.map +1 -1
- package/dist/auth/accept-invitation.js.map +1 -1
- package/dist/auth/auth-errors.js.map +1 -1
- package/dist/auth/forgot-password-form.js +23 -31
- package/dist/auth/forgot-password-form.js.map +1 -1
- package/dist/auth/register-form.js.map +1 -1
- package/dist/auth/reset-password-form.js.map +1 -1
- package/dist/auth/sign-in-form.js +13 -5
- package/dist/auth/sign-in-form.js.map +1 -1
- package/dist/auth/verify-email.js +1 -8
- package/dist/auth/verify-email.js.map +1 -1
- package/dist/billing/billing-banner.js.map +1 -1
- package/dist/billing/billing-labels.js.map +1 -1
- package/dist/billing/checkout-processing.js.map +1 -1
- package/dist/billing/plan-card.js +91 -85
- package/dist/billing/plan-card.js.map +1 -1
- package/dist/billing/plan-limit-toast.js.map +1 -1
- package/dist/billing/plan-limit.js.map +1 -1
- package/dist/billing/plan-price.js.map +1 -1
- package/dist/billing/plan-switch.js.map +1 -1
- package/dist/billing/subscription-actions.js.map +1 -1
- package/dist/bin/eifi1-pay-page.mjs +6 -1
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/alert-banner.js +1 -5
- package/dist/components/alert-banner.js.map +1 -1
- package/dist/components/amount-input.js +29 -12
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/authed-image.js.map +1 -1
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/bulk-action-bar.js +1 -4
- package/dist/components/bulk-action-bar.js.map +1 -1
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/button.js +1 -7
- package/dist/components/button.js.map +1 -1
- package/dist/components/calculator.js +5 -5
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/calendar-heatmap.js +4 -10
- package/dist/components/calendar-heatmap.js.map +1 -1
- package/dist/components/card.js +1 -8
- package/dist/components/card.js.map +1 -1
- package/dist/components/chart-zoom-core.js +3 -17
- package/dist/components/chart-zoom-core.js.map +1 -1
- package/dist/components/chart.d.ts +1 -1
- package/dist/components/chart.js +4 -22
- package/dist/components/chart.js.map +1 -1
- package/dist/components/checkbox-group.js +1 -4
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/chip-input.js +4 -1
- package/dist/components/chip-input.js.map +1 -1
- package/dist/components/chip.js +10 -5
- package/dist/components/chip.js.map +1 -1
- package/dist/components/choice-card.js +58 -74
- package/dist/components/choice-card.js.map +1 -1
- package/dist/components/column-mapper-labels.js.map +1 -1
- package/dist/components/column-mapper.js +167 -227
- package/dist/components/column-mapper.js.map +1 -1
- package/dist/components/combobox-core.js +5 -9
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +1 -4
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.d.ts +5 -4
- package/dist/components/country-select.js +3 -19
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.js +13 -11
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.js +1 -6
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-cells.js.map +1 -1
- package/dist/components/data-table-column-settings.js.map +1 -1
- package/dist/components/data-table-filter-popover.js +2 -18
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-filters.js.map +1 -1
- package/dist/components/data-table-fit.js +7 -5
- package/dist/components/data-table-fit.js.map +1 -1
- package/dist/components/data-table-groups.js +3 -1
- package/dist/components/data-table-groups.js.map +1 -1
- package/dist/components/data-table-head.js +49 -57
- package/dist/components/data-table-head.js.map +1 -1
- package/dist/components/data-table-mobile.js +31 -44
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table-pagination.js.map +1 -1
- package/dist/components/data-table-row-actions.js +19 -16
- package/dist/components/data-table-row-actions.js.map +1 -1
- package/dist/components/data-table-row.js.map +1 -1
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table-sort.js.map +1 -1
- package/dist/components/data-table-virtual.js +4 -1
- package/dist/components/data-table-virtual.js.map +1 -1
- package/dist/components/data-table.d.ts +8 -0
- package/dist/components/data-table.js +30 -39
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +1 -6
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/description-list.js +10 -10
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog-frame.js +9 -2
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/disclosure.js +17 -27
- package/dist/components/disclosure.js.map +1 -1
- package/dist/components/dropdown.js +25 -35
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/empty-state.js.map +1 -1
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/field-base.js +5 -5
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/field-parts.d.ts +1 -1
- package/dist/components/field-parts.js +10 -14
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-sync.js +8 -10
- package/dist/components/field-sync.js.map +1 -1
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/floating-panel.js +4 -1
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/focus-ring.js.map +1 -1
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/grouped-picker.js +11 -12
- package/dist/components/grouped-picker.js.map +1 -1
- package/dist/components/hover-menu.js +1 -4
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/iban-input-labels.js.map +1 -1
- package/dist/components/icon-button.js +4 -1
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon-picker.js +6 -10
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/image-grid.js +41 -50
- package/dist/components/image-grid.js.map +1 -1
- package/dist/components/inline-edit-field.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +6 -12
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.js +14 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/jump-calendar.js +1 -7
- package/dist/components/jump-calendar.js.map +1 -1
- package/dist/components/legal-labels.js +8 -2
- package/dist/components/legal-labels.js.map +1 -1
- package/dist/components/legal-page.d.ts +18 -1
- package/dist/components/legal-page.js +27 -2
- package/dist/components/legal-page.js.map +1 -1
- package/dist/components/legal.d.ts +40 -5
- package/dist/components/legal.js +41 -5
- package/dist/components/legal.js.map +1 -1
- package/dist/components/lightbox.js.map +1 -1
- package/dist/components/line-items.js +26 -36
- package/dist/components/line-items.js.map +1 -1
- package/dist/components/list-labels.js +3 -1
- package/dist/components/list-labels.js.map +1 -1
- package/dist/components/list.d.ts +18 -1
- package/dist/components/list.js +54 -13
- package/dist/components/list.js.map +1 -1
- package/dist/components/measured-grid.js +29 -53
- package/dist/components/measured-grid.js.map +1 -1
- package/dist/components/menu-item.js.map +1 -1
- package/dist/components/mini-calendar.js +13 -31
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-picker.js +10 -21
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.js +3 -16
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/nav-pills.js +10 -1
- package/dist/components/nav-pills.js.map +1 -1
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.js +1 -7
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.js +1 -4
- package/dist/components/numpad-sheet.js.map +1 -1
- package/dist/components/one-time-code-input.js +1 -7
- package/dist/components/one-time-code-input.js.map +1 -1
- package/dist/components/page-contents.js +13 -22
- package/dist/components/page-contents.js.map +1 -1
- package/dist/components/page-header.js +1 -11
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/password-strength-labels.js.map +1 -1
- package/dist/components/password-strength.js +2 -8
- package/dist/components/password-strength.js.map +1 -1
- package/dist/components/phone-input.js +42 -57
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/pie-chart.js +1 -8
- package/dist/components/pie-chart.js.map +1 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/components/progress-bar.js +16 -9
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/qr-code.js +1 -8
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/row-actions.js +5 -1
- package/dist/components/row-actions.js.map +1 -1
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/select.js +28 -38
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.js +1 -5
- package/dist/components/separator.js.map +1 -1
- package/dist/components/series-chart-axes.js +4 -1
- package/dist/components/series-chart-axes.js.map +1 -1
- package/dist/components/series-chart-budget.js.map +1 -1
- package/dist/components/series-chart-ticks.js.map +1 -1
- package/dist/components/series-chart.js +29 -45
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/settings-fields.js +21 -17
- package/dist/components/settings-fields.js.map +1 -1
- package/dist/components/share-card.js +4 -9
- package/dist/components/share-card.js.map +1 -1
- package/dist/components/sign-chip.js.map +1 -1
- package/dist/components/signature-pad.js +4 -13
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/signed-amount.js +12 -5
- package/dist/components/signed-amount.js.map +1 -1
- package/dist/components/skeleton.js +2 -17
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.js +13 -36
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sparkline.js.map +1 -1
- package/dist/components/stat-tile.js +14 -10
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/swatch-picker.js +14 -4
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/swipeable-row.d.ts +1 -1
- package/dist/components/swipeable-row.js +1 -8
- package/dist/components/swipeable-row.js.map +1 -1
- package/dist/components/table-skeleton.js +4 -1
- package/dist/components/table-skeleton.js.map +1 -1
- package/dist/components/table.js +12 -9
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +5 -24
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/text-link.js.map +1 -1
- package/dist/components/text.js.map +1 -1
- package/dist/components/tile-radio.js +1 -7
- package/dist/components/tile-radio.js.map +1 -1
- package/dist/components/time-input.js.map +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js +6 -1
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle-legend.js +2 -11
- package/dist/components/toggle-legend.js.map +1 -1
- package/dist/components/tooltip.js +2 -22
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/translation-review-editor.js +1 -4
- package/dist/components/translation-review-editor.js.map +1 -1
- package/dist/components/translation-review-parts.d.ts +1 -1
- package/dist/components/translation-review-parts.js +7 -1
- package/dist/components/translation-review-parts.js.map +1 -1
- package/dist/components/translation-review.js +18 -7
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/tree-view.js +14 -10
- package/dist/components/tree-view.js.map +1 -1
- package/dist/components/treemap.js +1 -13
- package/dist/components/treemap.js.map +1 -1
- package/dist/components/trigger-aria.js.map +1 -1
- package/dist/components/use-table-state.js +14 -11
- package/dist/components/use-table-state.js.map +1 -1
- package/dist/components/user-avatar.js +3 -26
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/demo/demo-start.js +8 -4
- package/dist/demo/demo-start.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/feedback/feedback-attachment-labels.js.map +1 -1
- package/dist/feedback/feedback-attachment.js +1 -8
- package/dist/feedback/feedback-attachment.js.map +1 -1
- package/dist/feedback/feedback-capture.d.ts +1 -1
- package/dist/feedback/feedback-capture.js +3 -1
- package/dist/feedback/feedback-capture.js.map +1 -1
- package/dist/feedback/feedback-comment-thread.js +27 -13
- package/dist/feedback/feedback-comment-thread.js.map +1 -1
- package/dist/feedback/feedback-context.js +1 -4
- package/dist/feedback/feedback-context.js.map +1 -1
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox.js.map +1 -1
- package/dist/feedback/feedback-public-list.js +7 -1
- package/dist/feedback/feedback-public-list.js.map +1 -1
- package/dist/feedback/feedback-record.js +1 -5
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-replies.js +25 -10
- package/dist/feedback/feedback-replies.js.map +1 -1
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-status-undo.js.map +1 -1
- package/dist/feedback/feedback-submit-dialog.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +3 -1
- package/dist/feedback/feedback-table.js +22 -5
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread.js +2 -13
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/feedback/feedback-vote-button.js.map +1 -1
- package/dist/hooks/use-anchored-rect.js.map +1 -1
- package/dist/hooks/use-document-title.js.map +1 -1
- package/dist/hooks/use-file-drop.js.map +1 -1
- package/dist/hooks/use-file-picker-labels.js.map +1 -1
- package/dist/hooks/use-file-picker.js.map +1 -1
- package/dist/hooks/use-focus-trap.js.map +1 -1
- package/dist/hooks/use-overlay-history.js +10 -5
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/hooks/use-row-swipe.d.ts +1 -1
- package/dist/hooks/use-row-swipe.js +1 -6
- package/dist/hooks/use-row-swipe.js.map +1 -1
- package/dist/i18n/defaults.js +1 -4
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +15 -4
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.js +2 -8
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.js.map +1 -1
- package/dist/i18n/locales/en.js +19 -4
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/es.js +15 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +15 -4
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +15 -4
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +15 -4
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +11 -3
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/plurals.js.map +1 -1
- package/dist/i18n/review.js +15 -7
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +17 -17
- package/dist/index.js +40 -23
- package/dist/index.js.map +1 -1
- package/dist/landing/access.js +1 -4
- package/dist/landing/access.js.map +1 -1
- package/dist/landing/landing-sections.js +35 -38
- package/dist/landing/landing-sections.js.map +1 -1
- package/dist/landing/page-seo.js.map +1 -1
- package/dist/lib/calc.js.map +1 -1
- package/dist/lib/clipboard-minus.js.map +1 -1
- package/dist/lib/dates.js.map +1 -1
- package/dist/lib/decimal-marks.js.map +1 -1
- package/dist/lib/device-settings.js +2 -1
- package/dist/lib/device-settings.js.map +1 -1
- package/dist/lib/direction.js.map +1 -1
- package/dist/lib/iban.js.map +1 -1
- package/dist/lib/logger.js +1 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/person-name.js.map +1 -1
- package/dist/lib/phone.js.map +1 -1
- package/dist/lib/qr-encode.js +344 -8
- package/dist/lib/qr-encode.js.map +1 -1
- package/dist/lib/session-refresh.js.map +1 -1
- package/dist/lib/table-text.js +15 -3
- package/dist/lib/table-text.js.map +1 -1
- package/dist/lib/text-match.d.ts +20 -0
- package/dist/lib/text-match.js +11 -1
- package/dist/lib/text-match.js.map +1 -1
- package/dist/lib/translation-review.js.map +1 -1
- package/dist/notifications/notification-inbox.js +63 -44
- package/dist/notifications/notification-inbox.js.map +1 -1
- package/dist/notifications/notification-parts.js.map +1 -1
- package/dist/notifications/notification-types-setting.js.map +1 -1
- package/dist/notifications/notifications-labels.js.map +1 -1
- package/dist/notifications/push-device-setting.js +6 -1
- package/dist/notifications/push-device-setting.js.map +1 -1
- package/dist/notifications/push-devices-setting.js.map +1 -1
- package/dist/notifications/push-worker.js.map +1 -1
- package/dist/notifications/quiet-hours-setting.js.map +1 -1
- package/dist/notifications/use-push-device.js +4 -1
- package/dist/notifications/use-push-device.js.map +1 -1
- package/dist/offline/pwa-update-prompt.d.ts +1 -1
- package/dist/offline/pwa-update-prompt.js +7 -1
- package/dist/offline/pwa-update-prompt.js.map +1 -1
- package/dist/offline/query-persistence.js.map +1 -1
- package/dist/offline.d.ts +1 -1
- package/dist/offline.js +6 -1
- package/dist/offline.js.map +1 -1
- package/dist/pay/pay.css +8 -1
- package/dist/rhf/fields.d.ts +1 -2
- package/dist/rhf/fields.js +1 -10
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form-core.js +1 -4
- package/dist/rhf/form-core.js.map +1 -1
- package/dist/rhf/line-items.js.map +1 -1
- package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
- package/dist/search/command-palette.js +71 -62
- package/dist/search/command-palette.js.map +1 -1
- package/dist/search/global-search.js +34 -5
- package/dist/search/global-search.js.map +1 -1
- package/dist/search/search-index.js.map +1 -1
- package/dist/settings/device-reset-setting.js +1 -6
- package/dist/settings/device-reset-setting.js.map +1 -1
- package/dist/settings/settings-heading.js.map +1 -1
- package/dist/settings/settings-layout.js +9 -20
- package/dist/settings/settings-layout.js.map +1 -1
- package/dist/settings/use-settings-focus.d.ts +7 -0
- package/dist/settings/use-settings-focus.js +2 -0
- package/dist/settings/use-settings-focus.js.map +1 -1
- package/dist/settings/use-settings-route.js.map +1 -1
- package/dist/shell/app-shell.js +62 -31
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/auth-layout.js +1 -10
- package/dist/shell/auth-layout.js.map +1 -1
- package/dist/shell/dev-menu.d.ts +5 -0
- package/dist/shell/dev-menu.js +14 -7
- package/dist/shell/dev-menu.js.map +1 -1
- package/dist/shell/option-switcher-menu.js.map +1 -1
- package/dist/shell/sync-status-indicator.js +7 -6
- package/dist/shell/sync-status-indicator.js.map +1 -1
- package/dist/shell/top-bar-parts-labels.js.map +1 -1
- package/dist/shell/topbar-action-menu.d.ts +14 -1
- package/dist/shell/topbar-action-menu.js +85 -34
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell/topbar-controls.js +1 -10
- package/dist/shell/topbar-controls.js.map +1 -1
- package/dist/shell/tour-menu.js +9 -1
- package/dist/shell/tour-menu.js.map +1 -1
- package/dist/shell.d.ts +1 -1
- package/dist/shell.js +2 -1
- package/dist/shell.js.map +1 -1
- package/dist/sync/db.js.map +1 -1
- package/dist/sync/engine.js +24 -6
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync.d.ts +2 -2
- package/dist/sync.js +7 -1
- package/dist/sync.js.map +1 -1
- package/dist/testing/css-variables.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -3
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/react.js.map +1 -1
- package/dist/testing/viewport.js +7 -4
- package/dist/testing/viewport.js.map +1 -1
- package/dist/theme/contrast-tokens.js +13 -2
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/palette-derive.d.ts +1 -1
- package/dist/theme/palette-derive.js +18 -29
- package/dist/theme/palette-derive.js.map +1 -1
- package/dist/theme/palette-presets.js.map +1 -1
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +1 -3
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/tour/tour-catalogue.js.map +1 -1
- package/dist/tour/tour-dock.js +5 -1
- package/dist/tour/tour-dock.js.map +1 -1
- package/dist/tour/tour-engine.js +1 -4
- package/dist/tour/tour-engine.js.map +1 -1
- package/dist/tour/tour.js +21 -12
- package/dist/tour/tour.js.map +1 -1
- package/dist/tour/use-tour-progress.js.map +1 -1
- package/dist/tour/use-tour-url-sync.js.map +1 -1
- package/dist/wizard/stepper-nav.js +3 -24
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard/types.js.map +1 -1
- package/dist/wizard/use-wizard.js +24 -28
- package/dist/wizard/use-wizard.js.map +1 -1
- package/dist/wizard/validation.js.map +1 -1
- package/dist/wizard/wizard-context.js.map +1 -1
- package/dist/wizard/wizard-step.d.ts +1 -1
- package/dist/wizard/wizard-step.js +1 -8
- package/dist/wizard/wizard-step.js.map +1 -1
- package/dist/wizard/wizard-summary.js.map +1 -1
- package/package.json +5 -2
- package/src/account/account-settings-labels.ts +1 -2
- package/src/account/account-settings.tsx +11 -17
- package/src/account/delete-account-setting.tsx +1 -6
- package/src/account/email-change-setting-labels.ts +1 -2
- package/src/account/email-change-setting.tsx +3 -1
- package/src/account/passkeys-setting.tsx +1 -3
- package/src/account/sessions-setting.tsx +4 -2
- package/src/admin/admin-action-confirm.tsx +4 -7
- package/src/admin/admin-action-log.tsx +29 -29
- package/src/admin/admin-area-labels.ts +4 -1
- package/src/admin/admin-overview.tsx +8 -2
- package/src/admin/admin-sections.tsx +3 -1
- package/src/admin/admin-tool-links.tsx +7 -1
- package/src/admin/invitations-panel.tsx +5 -11
- package/src/admin/mail-test-card.tsx +1 -2
- package/src/admin/reviewer-scope-editor.tsx +4 -9
- package/src/admin/role-select.tsx +4 -2
- package/src/admin/user-roster.tsx +2 -11
- package/src/auth/accept-invitation.tsx +1 -7
- package/src/auth/auth-errors.ts +1 -6
- package/src/auth/forgot-password-form.tsx +2 -7
- package/src/auth/register-form.tsx +7 -8
- package/src/auth/reset-password-form.tsx +2 -5
- package/src/auth/sign-in-form.tsx +15 -14
- package/src/auth/verify-email.tsx +2 -7
- package/src/billing/billing-banner.tsx +3 -7
- package/src/billing/billing-labels.ts +6 -4
- package/src/billing/checkout-processing.ts +0 -1
- package/src/billing/plan-card.tsx +9 -8
- package/src/billing/plan-limit-toast.tsx +1 -2
- package/src/billing/plan-limit.ts +1 -2
- package/src/billing/plan-price.ts +1 -4
- package/src/billing/plan-switch.tsx +1 -2
- package/src/billing/subscription-actions.tsx +5 -2
- package/src/components/account-chips.tsx +1 -7
- package/src/components/alert-banner.tsx +2 -8
- package/src/components/amount-input.tsx +206 -178
- package/src/components/authed-image.tsx +7 -4
- package/src/components/autocomplete.tsx +7 -9
- package/src/components/bulk-action-bar.tsx +2 -7
- package/src/components/button-group.tsx +1 -2
- package/src/components/button-look.ts +6 -17
- package/src/components/button.tsx +1 -4
- package/src/components/calculator.tsx +6 -9
- package/src/components/calendar-heatmap.tsx +5 -10
- package/src/components/card.tsx +9 -13
- package/src/components/chart-zoom-core.tsx +6 -33
- package/src/components/chart.tsx +8 -31
- package/src/components/checkbox-group.tsx +1 -4
- package/src/components/chip-input.tsx +6 -6
- package/src/components/chip.tsx +14 -26
- package/src/components/choice-card.tsx +4 -18
- package/src/components/column-mapper-labels.ts +3 -10
- package/src/components/column-mapper.tsx +33 -122
- package/src/components/combobox-core.tsx +17 -47
- package/src/components/combobox.tsx +2 -6
- package/src/components/confirm-dialog.tsx +1 -3
- package/src/components/copy-button.tsx +2 -4
- package/src/components/country-select.tsx +9 -21
- package/src/components/currency-option-list.tsx +16 -18
- package/src/components/currency-select.tsx +2 -7
- package/src/components/danger-confirm.tsx +8 -9
- package/src/components/data-table-cells.tsx +1 -2
- package/src/components/data-table-column-settings.tsx +1 -3
- package/src/components/data-table-filter-popover.tsx +5 -19
- package/src/components/data-table-filters.ts +1 -6
- package/src/components/data-table-fit.ts +7 -7
- package/src/components/data-table-groups.tsx +3 -1
- package/src/components/data-table-head.tsx +32 -46
- package/src/components/data-table-mobile.tsx +99 -108
- package/src/components/data-table-pagination.tsx +2 -6
- package/src/components/data-table-row-actions.tsx +25 -24
- package/src/components/data-table-row.tsx +16 -17
- package/src/components/data-table-shared.tsx +10 -16
- package/src/components/data-table-sort.ts +1 -2
- package/src/components/data-table-virtual.ts +9 -4
- package/src/components/data-table.tsx +497 -501
- package/src/components/date-picker.tsx +1 -7
- package/src/components/date-range-picker.tsx +3 -13
- package/src/components/description-list.tsx +7 -13
- package/src/components/dialog-frame.tsx +12 -3
- package/src/components/disclosure.tsx +8 -12
- package/src/components/dropdown.tsx +3 -11
- package/src/components/empty-state.tsx +1 -3
- package/src/components/entity-combobox.tsx +2 -6
- package/src/components/error-boundary.tsx +7 -7
- package/src/components/field-base.tsx +8 -14
- package/src/components/field-parts.tsx +12 -23
- package/src/components/field-sync.tsx +7 -11
- package/src/components/file-button.tsx +7 -3
- package/src/components/file-dropzone.tsx +7 -12
- package/src/components/floating-panel.tsx +44 -51
- package/src/components/focus-ring.ts +1 -2
- package/src/components/form-actions.tsx +1 -4
- package/src/components/grouped-picker.tsx +21 -16
- package/src/components/hover-menu.tsx +1 -4
- package/src/components/iban-input-labels.ts +1 -2
- package/src/components/icon-button.tsx +46 -48
- package/src/components/icon-picker.tsx +9 -20
- package/src/components/image-grid.tsx +1 -6
- package/src/components/inline-edit-field.tsx +1 -5
- package/src/components/inline-entity-combobox.tsx +11 -25
- package/src/components/input.tsx +14 -2
- package/src/components/jump-calendar.tsx +2 -6
- package/src/components/legal-labels.ts +8 -3
- package/src/components/legal-page.tsx +56 -6
- package/src/components/legal.tsx +83 -10
- package/src/components/lightbox.tsx +1 -3
- package/src/components/line-items.tsx +7 -15
- package/src/components/list-labels.ts +2 -0
- package/src/components/list.tsx +81 -27
- package/src/components/measured-grid.tsx +8 -30
- package/src/components/menu-item.tsx +1 -3
- package/src/components/mini-calendar.tsx +129 -159
- package/src/components/money-field.tsx +4 -2
- package/src/components/month-picker.tsx +14 -21
- package/src/components/multi-entity-combobox.tsx +6 -26
- package/src/components/multi-select.tsx +5 -9
- package/src/components/nav-pills.tsx +10 -2
- package/src/components/number-field.tsx +18 -15
- package/src/components/number-input.tsx +3 -19
- package/src/components/numpad-sheet.tsx +9 -13
- package/src/components/one-time-code-input.tsx +6 -11
- package/src/components/page-contents.tsx +2 -9
- package/src/components/page-header.tsx +5 -10
- package/src/components/password-strength-labels.ts +1 -2
- package/src/components/password-strength.tsx +6 -9
- package/src/components/phone-input.tsx +2 -13
- package/src/components/picker-sheet.tsx +2 -5
- package/src/components/pie-chart.tsx +6 -12
- package/src/components/popover.tsx +2 -1
- package/src/components/progress-bar.tsx +16 -25
- package/src/components/qr-code.tsx +2 -9
- package/src/components/row-actions.tsx +9 -1
- package/src/components/search-field.tsx +4 -5
- package/src/components/select.tsx +2 -10
- package/src/components/separator.tsx +1 -5
- package/src/components/series-chart-axes.ts +5 -5
- package/src/components/series-chart-budget.ts +1 -4
- package/src/components/series-chart-ticks.ts +1 -4
- package/src/components/series-chart.tsx +43 -83
- package/src/components/settings-fields.tsx +20 -15
- package/src/components/share-card.tsx +6 -14
- package/src/components/sign-chip.tsx +16 -16
- package/src/components/signature-pad.tsx +21 -13
- package/src/components/signed-amount.tsx +6 -14
- package/src/components/skeleton.tsx +2 -13
- package/src/components/slider.tsx +9 -20
- package/src/components/sparkline.tsx +2 -13
- package/src/components/stat-tile.tsx +13 -24
- package/src/components/swatch-picker.tsx +8 -3
- package/src/components/swipeable-row.tsx +2 -11
- package/src/components/table-skeleton.tsx +4 -1
- package/src/components/table.tsx +12 -8
- package/src/components/tabs.tsx +24 -39
- package/src/components/text-link.tsx +6 -6
- package/src/components/text.tsx +1 -2
- package/src/components/tile-radio.tsx +6 -19
- package/src/components/time-input.tsx +4 -5
- package/src/components/toast.tsx +3 -12
- package/src/components/toggle-group.tsx +9 -9
- package/src/components/toggle-legend.tsx +4 -16
- package/src/components/tooltip.tsx +9 -48
- package/src/components/translation-review-editor.tsx +4 -4
- package/src/components/translation-review-parts.tsx +7 -1
- package/src/components/translation-review.tsx +15 -16
- package/src/components/tree-view.tsx +17 -20
- package/src/components/treemap.tsx +3 -15
- package/src/components/trigger-aria.ts +1 -4
- package/src/components/use-table-state.ts +16 -17
- package/src/components/user-avatar.tsx +4 -21
- package/src/demo/demo-start.tsx +8 -4
- package/src/feedback/feedback-attachment-labels.ts +2 -1
- package/src/feedback/feedback-attachment.tsx +16 -29
- package/src/feedback/feedback-capture.ts +3 -1
- package/src/feedback/feedback-comment-thread.tsx +9 -6
- package/src/feedback/feedback-context.tsx +1 -4
- package/src/feedback/feedback-dialog.tsx +3 -4
- package/src/feedback/feedback-inbox.tsx +3 -9
- package/src/feedback/feedback-public-list.tsx +7 -1
- package/src/feedback/feedback-record.ts +6 -14
- package/src/feedback/feedback-replies.tsx +10 -5
- package/src/feedback/feedback-row-detail.tsx +2 -5
- package/src/feedback/feedback-status-undo.ts +1 -4
- package/src/feedback/feedback-submit-dialog.tsx +4 -4
- package/src/feedback/feedback-table.tsx +29 -9
- package/src/feedback/feedback-thread.tsx +4 -16
- package/src/feedback/feedback-vocabulary.ts +72 -82
- package/src/feedback/feedback-vote-button.tsx +9 -8
- package/src/hooks/use-anchored-rect.ts +1 -4
- package/src/hooks/use-document-title.ts +3 -1
- package/src/hooks/use-file-drop.ts +1 -3
- package/src/hooks/use-file-picker-labels.ts +1 -2
- package/src/hooks/use-file-picker.tsx +1 -5
- package/src/hooks/use-focus-trap.ts +1 -2
- package/src/hooks/use-overlay-history.ts +10 -5
- package/src/hooks/use-row-swipe.ts +1 -6
- package/src/i18n/defaults.ts +1 -4
- package/src/i18n/german.ts +42 -50
- package/src/i18n/kit-labels.tsx +5 -20
- package/src/i18n/languages.ts +2 -8
- package/src/i18n/locales/en.ts +15 -31
- package/src/i18n/locales/es.ts +44 -50
- package/src/i18n/locales/fr.ts +43 -52
- package/src/i18n/locales/hu.ts +35 -38
- package/src/i18n/locales/it.ts +44 -53
- package/src/i18n/locales/zh.ts +23 -33
- package/src/i18n/plurals.ts +4 -1
- package/src/i18n/review.ts +20 -7
- package/src/i18n/shared-labels.ts +1 -2
- package/src/index.ts +107 -32
- package/src/landing/access.ts +2 -7
- package/src/landing/landing-sections.tsx +14 -15
- package/src/landing/page-seo.ts +1 -3
- package/src/lib/calc.ts +4 -1
- package/src/lib/clipboard-minus.ts +4 -1
- package/src/lib/dates.ts +2 -10
- package/src/lib/decimal-marks.ts +1 -3
- package/src/lib/device-settings.ts +2 -1
- package/src/lib/direction.ts +1 -3
- package/src/lib/iban.ts +89 -9
- package/src/lib/logger.ts +1 -5
- package/src/lib/person-name.ts +1 -3
- package/src/lib/phone.ts +5 -8
- package/src/lib/qr-encode.ts +32 -8
- package/src/lib/session-refresh.ts +5 -6
- package/src/lib/table-text.ts +24 -6
- package/src/lib/text-match.ts +43 -1
- package/src/lib/translation-review.ts +1 -3
- package/src/notifications/notification-inbox.tsx +17 -4
- package/src/notifications/notification-parts.tsx +1 -2
- package/src/notifications/notification-types-setting.tsx +19 -18
- package/src/notifications/notifications-labels.ts +1 -2
- package/src/notifications/push-device-setting.tsx +7 -1
- package/src/notifications/push-devices-setting.tsx +7 -3
- package/src/notifications/push-worker.ts +10 -2
- package/src/notifications/quiet-hours-setting.tsx +4 -1
- package/src/notifications/use-push-device.ts +4 -1
- package/src/offline/pwa-update-prompt.tsx +7 -1
- package/src/offline/query-persistence.ts +9 -6
- package/src/offline.ts +6 -1
- package/src/rhf/fields.tsx +50 -19
- package/src/rhf/form-core.tsx +2 -6
- package/src/rhf/line-items.tsx +5 -7
- package/src/rhf/use-rhf-wizard-step.ts +3 -12
- package/src/search/command-palette.tsx +15 -23
- package/src/search/global-search.tsx +38 -8
- package/src/search/search-index.ts +5 -1
- package/src/settings/device-reset-setting.tsx +5 -8
- package/src/settings/settings-heading.tsx +3 -1
- package/src/settings/settings-layout.tsx +6 -13
- package/src/settings/use-settings-focus.ts +8 -0
- package/src/settings/use-settings-route.ts +4 -3
- package/src/shell/app-shell.tsx +48 -24
- package/src/shell/auth-layout.tsx +1 -6
- package/src/shell/dev-menu.tsx +18 -6
- package/src/shell/option-switcher-menu.tsx +1 -3
- package/src/shell/sync-status-indicator.tsx +14 -12
- package/src/shell/top-bar-parts-labels.ts +1 -3
- package/src/shell/topbar-action-menu.tsx +130 -45
- package/src/shell/topbar-controls.tsx +5 -19
- package/src/shell/tour-menu.tsx +9 -1
- package/src/shell.ts +1 -1
- package/src/sync/db.ts +5 -1
- package/src/sync/engine.ts +44 -12
- package/src/sync.ts +16 -2
- package/src/testing/css-variables.ts +1 -2
- package/src/testing/index.ts +1 -6
- package/src/testing/react.ts +1 -2
- package/src/testing/viewport.ts +9 -9
- package/src/theme/contrast-tokens.ts +13 -2
- package/src/theme/palette-derive.ts +24 -50
- package/src/theme/palette-presets.ts +0 -1
- package/src/theme/palette-store.ts +1 -4
- package/src/theme/text-size.ts +1 -1
- package/src/theme/theme-store.ts +2 -6
- package/src/tour/tour-catalogue.tsx +4 -2
- package/src/tour/tour-dock.ts +5 -1
- package/src/tour/tour-engine.ts +2 -6
- package/src/tour/tour.tsx +28 -12
- package/src/tour/use-tour-progress.ts +8 -2
- package/src/tour/use-tour-url-sync.ts +3 -1
- package/src/vite-env.d.ts +1 -4
- package/src/wizard/stepper-nav.tsx +10 -35
- package/src/wizard/types.ts +1 -4
- package/src/wizard/use-wizard.ts +28 -43
- package/src/wizard/validation.ts +1 -5
- package/src/wizard/wizard-context.tsx +2 -6
- package/src/wizard/wizard-step.tsx +1 -8
- package/src/wizard/wizard-summary.tsx +2 -6
- package/tokens.css +393 -152
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/series-chart-budget.ts"],"sourcesContent":["// The axis budget of a series chart: which of its y axes are drawn, when there are more\n// than the width can carry. Pure, and apart from the chart, so the rule is tested on\n// numbers rather than on a jsdom that has no layout to measure.\n//\n// lenkbank's curve plot declares four visible axes — velocity, position and acceleration\n// on the left, loads on the right — and every one reserves its band of ticks and title.\n// At 1280 px that is a quarter of the card; at 390 px it is all of it, and the plot the\n// axes are for is ten pixels wide. An axis over budget is drawn the way a `hide: true`\n// one always was: it still scales its lines (and the zoom still refits it), but it draws\n// no ticks, no title, and reserves no width.\n\n/**\n * How many y axes a chart draws. A number caps the TOTAL; `{ left, right }` caps each\n * side (a side left out is not capped). Axes over the cap are hidden in declaration\n * order — the first of each side is the last to go, see {@link budgetedAxes}.\n */\nexport type SeriesChartAxisBudget = number | { left?: number; right?: number };\n\n/** The part of an axis the budget reads. */\ninterface BudgetAxis {\n id: string;\n orientation?: \"left\" | \"right\";\n hide?: boolean;\n title?: string;\n width?: number;\n}\n\n/**\n * The narrowest the plot may get before the automatic budget steps in, in px at Normal —\n * × the text size's scale since 0.32 (see {@link autoAxisBudget}).\n *\n * About a phone's plot with one axis a side (390 px viewport, card padding, two bands\n * of 48 + 16), where a curve's shape still reads. It is the point below which the chart\n * is already broken today — a plot the width of a thumb between four columns of numbers\n * — so the rule changes nothing that was working.\n */\nexport const MIN_PLOT_WIDTH = 160;\n\n/** The budget the automatic rule applies: one axis a side. */\nexport const NARROW_AXIS_BUDGET: SeriesChartAxisBudget = { left: 1, right: 1 };\n\n/**\n * The automatic rule's second step: the left axis alone — for a chart with an axis on\n * each side that even one a side leaves too little plot (0.32, see {@link autoAxisBudget}).\n */\nexport const LEFT_AXIS_BUDGET: SeriesChartAxisBudget = { left: 1, right: 0 };\n\n/** The plot's margin on a side no axis band covers — `SeriesPlot`'s own. */\nconst BARE_SIDE_MARGIN = 10;\n\nconst sideOf = (axis: BudgetAxis) => axis.orientation ?? \"left\";\n\n/**\n * The ids of the VISIBLE axes a budget hides — axes already `hide: true` are neither\n * counted nor returned. Empty for no budget.\n *\n * Kept, in order of priority: the first visible axis of each side (in declaration order,\n * so the axis a caller lists first — the one the grid hangs its rules off — always\n * stays), then the rest in declaration order, until the cap. Per side, that is simply the\n * first `left` left-hand axes and the first `right` right-hand ones.\n */\nexport function budgetedAxes(
|
|
1
|
+
{"version":3,"sources":["../../src/components/series-chart-budget.ts"],"sourcesContent":["// The axis budget of a series chart: which of its y axes are drawn, when there are more\n// than the width can carry. Pure, and apart from the chart, so the rule is tested on\n// numbers rather than on a jsdom that has no layout to measure.\n//\n// lenkbank's curve plot declares four visible axes — velocity, position and acceleration\n// on the left, loads on the right — and every one reserves its band of ticks and title.\n// At 1280 px that is a quarter of the card; at 390 px it is all of it, and the plot the\n// axes are for is ten pixels wide. An axis over budget is drawn the way a `hide: true`\n// one always was: it still scales its lines (and the zoom still refits it), but it draws\n// no ticks, no title, and reserves no width.\n\n/**\n * How many y axes a chart draws. A number caps the TOTAL; `{ left, right }` caps each\n * side (a side left out is not capped). Axes over the cap are hidden in declaration\n * order — the first of each side is the last to go, see {@link budgetedAxes}.\n */\nexport type SeriesChartAxisBudget = number | { left?: number; right?: number };\n\n/** The part of an axis the budget reads. */\ninterface BudgetAxis {\n id: string;\n orientation?: \"left\" | \"right\";\n hide?: boolean;\n title?: string;\n width?: number;\n}\n\n/**\n * The narrowest the plot may get before the automatic budget steps in, in px at Normal —\n * × the text size's scale since 0.32 (see {@link autoAxisBudget}).\n *\n * About a phone's plot with one axis a side (390 px viewport, card padding, two bands\n * of 48 + 16), where a curve's shape still reads. It is the point below which the chart\n * is already broken today — a plot the width of a thumb between four columns of numbers\n * — so the rule changes nothing that was working.\n */\nexport const MIN_PLOT_WIDTH = 160;\n\n/** The budget the automatic rule applies: one axis a side. */\nexport const NARROW_AXIS_BUDGET: SeriesChartAxisBudget = { left: 1, right: 1 };\n\n/**\n * The automatic rule's second step: the left axis alone — for a chart with an axis on\n * each side that even one a side leaves too little plot (0.32, see {@link autoAxisBudget}).\n */\nexport const LEFT_AXIS_BUDGET: SeriesChartAxisBudget = { left: 1, right: 0 };\n\n/** The plot's margin on a side no axis band covers — `SeriesPlot`'s own. */\nconst BARE_SIDE_MARGIN = 10;\n\nconst sideOf = (axis: BudgetAxis) => axis.orientation ?? \"left\";\n\n/**\n * The ids of the VISIBLE axes a budget hides — axes already `hide: true` are neither\n * counted nor returned. Empty for no budget.\n *\n * Kept, in order of priority: the first visible axis of each side (in declaration order,\n * so the axis a caller lists first — the one the grid hangs its rules off — always\n * stays), then the rest in declaration order, until the cap. Per side, that is simply the\n * first `left` left-hand axes and the first `right` right-hand ones.\n */\nexport function budgetedAxes(axes: readonly BudgetAxis[], budget: SeriesChartAxisBudget | undefined): string[] {\n if (budget === undefined) return [];\n const visible = axes.filter((axis) => !axis.hide);\n if (typeof budget === \"number\") {\n const cap = Math.max(0, Math.floor(budget));\n const firsts = new Set<string>();\n const seen = new Set<string>();\n for (const axis of visible) {\n if (!seen.has(sideOf(axis))) firsts.add(axis.id);\n seen.add(sideOf(axis));\n }\n const priority = [\n ...visible.filter((axis) => firsts.has(axis.id)),\n ...visible.filter((axis) => !firsts.has(axis.id)),\n ];\n const kept = new Set(priority.slice(0, cap).map((axis) => axis.id));\n return visible.filter((axis) => !kept.has(axis.id)).map((axis) => axis.id);\n }\n const used = { left: 0, right: 0 };\n const out: string[] = [];\n for (const axis of visible) {\n const side = sideOf(axis);\n const cap = budget[side];\n if (cap !== undefined && used[side] >= Math.max(0, Math.floor(cap))) out.push(axis.id);\n else used[side] += 1;\n }\n return out;\n}\n\n/**\n * The automatic budget for a chart `width` px wide, in two steps — each taken only when\n * the plot would otherwise be narrower than {@link MIN_PLOT_WIDTH} × `scale`:\n *\n * 1. {@link NARROW_AXIS_BUDGET}, one axis a side, when some side draws more than one\n * (lenkbank's four-axis curve plot on a phone);\n * 2. {@link LEFT_AXIS_BUDGET}, the left axis alone, when the chart has an axis on EACH\n * side and one a side still leaves the plot too narrow (0.32,\n * docs/text-size-harmonization.md §4, §10.10). At 150 % a 390 px phone's two bands\n * are 96 px each and the plot kept about 80 px. The right-hand axis is the secondary\n * one — the grid hangs its rules off the left — so it goes: its lines keep their own\n * scale, and its unit moves into the tooltip, the readout and the legend\n * ({@link axisUnit}, `seriesLegendEntries`), where its values stay readable.\n *\n * `scale` is the text size's (`useTextSize().scale`): the bands grow with the type\n * (`bandWidth` is handed the scaled ones), and so does the floor (§3.2, \"a chart's axis\n * width and tick spacing are multiplied by `scale`\") — the room a curve needs between\n * labels grows with the labels.\n *\n * `undefined` when neither step is needed, for a single-axis chart (a facing pair's two\n * charts each have one) and for a width that is not known (no layout, no\n * `ResizeObserver`).\n *\n * Decided on the CHART's width and the axes as declared, never on the plot the budget\n * produced, so hiding an axis cannot widen the plot back over the line and bring it\n * back: the rule has no feedback to oscillate on.\n */\nexport function autoAxisBudget(\n axes: readonly BudgetAxis[],\n width: number | undefined,\n bandWidth: (axis: BudgetAxis) => number,\n scale = 1,\n): SeriesChartAxisBudget | undefined {\n if (width === undefined || !(width > 0)) return undefined;\n const visible = axes.filter((axis) => !axis.hide);\n const left = visible.filter((axis) => sideOf(axis) === \"left\");\n const right = visible.filter((axis) => sideOf(axis) === \"right\");\n const floor = MIN_PLOT_WIDTH * scale;\n /** The plot's width with `drawn` axes drawn: what their bands and the bare sides leave. */\n const plot = (drawn: readonly BudgetAxis[]) => {\n const onLeft = drawn.some((axis) => sideOf(axis) === \"left\");\n const onRight = drawn.some((axis) => sideOf(axis) === \"right\");\n const bands = drawn.reduce((sum, axis) => sum + bandWidth(axis), 0);\n return width - bands - (onLeft ? 0 : BARE_SIDE_MARGIN) - (onRight ? 0 : BARE_SIDE_MARGIN);\n };\n if (left.length && right.length && plot([left[0], right[0]]) < floor) return LEFT_AXIS_BUDGET;\n if (left.length <= 1 && right.length <= 1) return undefined;\n return plot(visible) < floor ? NARROW_AXIS_BUDGET : undefined;\n}\n\n/**\n * The unit an axis' series say when the axis is not drawn: its `unit`, or else the\n * parenthesised tail of its title — \"Load (N)\" says \"N\", which is how the apps write\n * every axis title. `undefined` when neither says one.\n */\nexport function axisUnit(axis: { unit?: string; title?: string }): string | undefined {\n if (axis.unit !== undefined) return axis.unit || undefined;\n const tail = /\\(([^()]+)\\)\\s*$/.exec(axis.title ?? \"\");\n return tail?.[1].trim() || undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/series-chart-ticks.ts"],"sourcesContent":["// Round tick values for `SeriesChart` — internal, not re-exported by `@eifi1/ui-kit/chart`.\n//\n// Handed an explicit numeric domain, recharts divides it into equal parts and prints\n// wherever those land: a fitted band of [-11, 811] comes out as -11, 189, 389 … and a\n// padded [89, 1011] as 89, 289, 489 — numbers nobody can put a ruler against. These\n// are the ticks a person would draw instead: every multiple of a 1, 2 or 5 × 10^n step\n// that lies INSIDE the domain. The domain itself is left alone, so the 4 % of air the\n// fit leaves and a zoom window's exact edges both survive; the frame simply does not\n// get a number of its own.\n\n/** Roughly how many ticks to aim for. The 1/2/5 ladder lands anywhere from about half\n * to about twice this, which is the price of every tick being a round number. */\nconst TARGET_TICKS = 5;\n\n/** The aim at Large and Extra large (docs/text-size-harmonization.md §4): the labels are\n * 25–50 % wider and taller, so five of them crowd an axis that holds them at Normal. */\nexport const LARGE_TEXT_TARGET_TICKS = 3;\n\n/** How many ticks to aim for at a text `scale` (`useTextSize().scale`): five at Normal,\n * three from Large up. */\nexport function tickTarget(scale = 1): number {\n return scale > 1 ? LARGE_TEXT_TARGET_TICKS : TARGET_TICKS;\n}\n\n/** The round step closest to `span / target`: 1, 2 or 5 times a power of ten. */\nexport function niceStep(span: number, target: number = TARGET_TICKS): number {\n const rough = span / Math.max(1, target);\n const magnitude = 10 ** Math.floor(Math.log10(rough));\n const norm = rough / magnitude;\n const factor = norm < 1.5 ? 1 : norm < 3 ? 2 : norm < 7 ? 5 : 10;\n return factor * magnitude;\n}\n\n/**\n * The round ticks inside `[low, high]`, ascending — or `undefined` when there is no\n * span to divide (no domain, a zero-height one, anything non-finite), which leaves the\n * choice to recharts.\n *\n * Each tick is computed as `k × step` and then rounded to the step's own decimals:\n * accumulating `+= 0.1` would print 0.30000000000000004 on the third tick.\n */\nexport function niceTicks(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): number[] | undefined {\n if (!domain) return undefined;\n const [low, high] = domain;\n if (!Number.isFinite(low) || !Number.isFinite(high) || !(high > low)) return undefined;\n const step = niceStep(high - low, target);\n if (!(step > 0) || !Number.isFinite(step)) return undefined;\n const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n const ticks: number[] = [];\n // Half a step's tolerance per end would admit ticks outside the frame; a millionth\n // of one only forgives the float error in `low / step`.\n const first = Math.ceil(low / step - 1e-6);\n const last = Math.floor(high / step + 1e-6);\n for (let k = first; k <= last; k++) {\n // `+ 0` turns the -0 that `Number(\"-0.00\")` gives back into a plain 0.\n ticks.push(Number((k * step).toFixed(decimals)) + 0);\n }\n return ticks.length ? ticks : undefined;\n}\n\n/**\n * {@link niceTicks} on whole numbers only: the step never drops below 1, so a short\n * index series (a domain of [-0.2, 4.2]) is ticked 0 1 2 3 4 instead of every half.\n * `undefined` when the window holds no whole number at all, so the caller can fall\n * back to the fractional ticks of a deep zoom rather than show none.\n */\nexport function integerTicks(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): number[] | undefined {\n if (!domain) return undefined;\n const [low, high] = domain;\n if (!Number.isFinite(low) || !Number.isFinite(high) || !(high >= low)) return undefined;\n const step = high > low ? Math.max(1, niceStep(high - low, target)) : 1;\n const ticks: number[] = [];\n const first = Math.ceil(low / step - 1e-6);\n const last = Math.floor(high / step + 1e-6);\n for (let k = first; k <= last; k++) ticks.push(k * step + 0);\n return ticks.length ? ticks : undefined;\n}\n\n/**\n * The slots of a CATEGORY axis that lie inside a window over their positions.\n *\n * `SeriesChart` draws a category axis on the slot INDEX (see `x.type: \"category\"`), so a\n * zoom window is a range of fractional positions — [2.6, 8.3] after a drag across the\n * third to ninth month. A tick belongs on every whole slot inside it, and on nothing in\n * between: there is no month 2.5. Recharts' `minTickGap` thins them where they crowd.\n */\nexport function categoryTicks(\n domain: readonly [number, number] | undefined,\n count: number,\n): number[] | undefined {\n if (!domain || !(count > 0)) return undefined;\n const first = Math.max(0, Math.ceil(domain[0] - 1e-6));\n const last = Math.min(count - 1, Math.floor(domain[1] + 1e-6));\n const ticks: number[] = [];\n for (let slot = first; slot <= last; slot++) ticks.push(slot);\n return ticks.length ? ticks : undefined;\n}\n\n/** What one tick of a time axis stands for, which is also how its label is written. */\nexport type TimeTickUnit = \"hour\" | \"day\" | \"month\" | \"year\";\n\nconst HOUR = 3_600_000;\nconst DAY = 24 * HOUR;\n\n/**\n * The calendar steps a time axis may tick in, with their rough length for choosing.\n * Months and years are stepped with `Date` setters, not by adding their \"length\":\n * thirty days from the 1st of February is the 3rd of March, and a tick that promises a\n * month start and prints the 3rd is the ruler lying.\n */\nconst TIME_STEPS: readonly { unit: TimeTickUnit; n: number; ms: number }[] = [\n { unit: \"hour\", n: 1, ms: HOUR },\n { unit: \"hour\", n: 3, ms: 3 * HOUR },\n { unit: \"hour\", n: 6, ms: 6 * HOUR },\n { unit: \"hour\", n: 12, ms: 12 * HOUR },\n { unit: \"day\", n: 1, ms: DAY },\n { unit: \"day\", n: 2, ms: 2 * DAY },\n { unit: \"day\", n: 7, ms: 7 * DAY },\n { unit: \"month\", n: 1, ms: 30.44 * DAY },\n { unit: \"month\", n: 2, ms: 60.88 * DAY },\n { unit: \"month\", n: 3, ms: 91.31 * DAY },\n { unit: \"month\", n: 6, ms: 182.62 * DAY },\n];\n\n/**\n * Calendar ticks inside a window of epoch milliseconds — midnights, Mondays, month and\n * quarter starts, new years, in LOCAL time — and the unit they are in, so the label can\n * say as much as the tick means (\"Mar 26\" for a month start, \"14 Mar\" for a day).\n *\n * The time counterpart of {@link niceTicks}: a 1/2/5 ladder over raw milliseconds lands\n * on 5 × 10⁹ ms, every 58 days, at whatever hour that happens to be. keksdose's price\n * history and cash buffer each thinned their own ticks by hand for exactly this reason.\n */\nexport function timeTicksWithUnit(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): { ticks: number[]; unit: TimeTickUnit } | undefined {\n if (!domain) return undefined;\n const [low, high] = domain;\n if (!Number.isFinite(low) || !Number.isFinite(high) || !(high > low)) return undefined;\n const rough = (high - low) / Math.max(1, target);\n let unit: TimeTickUnit = \"year\";\n let n = 1;\n let best = Infinity;\n for (const step of TIME_STEPS) {\n const miss = Math.abs(Math.log(step.ms / rough));\n if (miss < best) {\n best = miss;\n unit = step.unit;\n n = step.n;\n }\n }\n // The year ladder competes on the same terms as the table: one year is 365.25 days.\n const yearN = Math.max(1, Math.round(niceStep((high - low) / (365.25 * DAY), target)));\n if (Math.abs(Math.log((yearN * 365.25 * DAY) / rough)) < best) {\n unit = \"year\";\n n = yearN;\n }\n\n const start = new Date(low);\n start.setMinutes(0, 0, 0);\n if (unit !== \"hour\") start.setHours(0);\n if (unit === \"month\" || unit === \"year\") start.setDate(1);\n if (unit === \"year\") start.setMonth(0);\n // Onto the step's own grid: hours of the day, Mondays, month indices, years — so a\n // zoom window starting on a Wednesday still ticks on Mondays.\n if (unit === \"hour\") start.setHours(start.getHours() - (start.getHours() % n));\n if (unit === \"day\" && n === 7) start.setDate(start.getDate() - ((start.getDay() + 6) % 7));\n if (unit === \"month\") start.setMonth(start.getMonth() - (start.getMonth() % n));\n if (unit === \"year\") start.setFullYear(start.getFullYear() - (start.getFullYear() % n));\n\n const ticks: number[] = [];\n const at = new Date(start);\n // Bounded, so a window of a million years cannot hang the render.\n for (let guard = 0; guard < 1000 && at.getTime() <= high; guard++) {\n if (at.getTime() >= low) ticks.push(at.getTime());\n if (unit === \"hour\") at.setHours(at.getHours() + n);\n else if (unit === \"day\") at.setDate(at.getDate() + n);\n else if (unit === \"month\") at.setMonth(at.getMonth() + n);\n else at.setFullYear(at.getFullYear() + n);\n }\n return ticks.length ? { ticks, unit } : undefined;\n}\n\n/** {@link timeTicksWithUnit}, ticks only. */\nexport function timeTicks(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): number[] | undefined {\n return timeTicksWithUnit(domain, target)?.ticks;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/series-chart-ticks.ts"],"sourcesContent":["// Round tick values for `SeriesChart` — internal, not re-exported by `@eifi1/ui-kit/chart`.\n//\n// Handed an explicit numeric domain, recharts divides it into equal parts and prints\n// wherever those land: a fitted band of [-11, 811] comes out as -11, 189, 389 … and a\n// padded [89, 1011] as 89, 289, 489 — numbers nobody can put a ruler against. These\n// are the ticks a person would draw instead: every multiple of a 1, 2 or 5 × 10^n step\n// that lies INSIDE the domain. The domain itself is left alone, so the 4 % of air the\n// fit leaves and a zoom window's exact edges both survive; the frame simply does not\n// get a number of its own.\n\n/** Roughly how many ticks to aim for. The 1/2/5 ladder lands anywhere from about half\n * to about twice this, which is the price of every tick being a round number. */\nconst TARGET_TICKS = 5;\n\n/** The aim at Large and Extra large (docs/text-size-harmonization.md §4): the labels are\n * 25–50 % wider and taller, so five of them crowd an axis that holds them at Normal. */\nexport const LARGE_TEXT_TARGET_TICKS = 3;\n\n/** How many ticks to aim for at a text `scale` (`useTextSize().scale`): five at Normal,\n * three from Large up. */\nexport function tickTarget(scale = 1): number {\n return scale > 1 ? LARGE_TEXT_TARGET_TICKS : TARGET_TICKS;\n}\n\n/** The round step closest to `span / target`: 1, 2 or 5 times a power of ten. */\nexport function niceStep(span: number, target: number = TARGET_TICKS): number {\n const rough = span / Math.max(1, target);\n const magnitude = 10 ** Math.floor(Math.log10(rough));\n const norm = rough / magnitude;\n const factor = norm < 1.5 ? 1 : norm < 3 ? 2 : norm < 7 ? 5 : 10;\n return factor * magnitude;\n}\n\n/**\n * The round ticks inside `[low, high]`, ascending — or `undefined` when there is no\n * span to divide (no domain, a zero-height one, anything non-finite), which leaves the\n * choice to recharts.\n *\n * Each tick is computed as `k × step` and then rounded to the step's own decimals:\n * accumulating `+= 0.1` would print 0.30000000000000004 on the third tick.\n */\nexport function niceTicks(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): number[] | undefined {\n if (!domain) return undefined;\n const [low, high] = domain;\n if (!Number.isFinite(low) || !Number.isFinite(high) || !(high > low)) return undefined;\n const step = niceStep(high - low, target);\n if (!(step > 0) || !Number.isFinite(step)) return undefined;\n const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n const ticks: number[] = [];\n // Half a step's tolerance per end would admit ticks outside the frame; a millionth\n // of one only forgives the float error in `low / step`.\n const first = Math.ceil(low / step - 1e-6);\n const last = Math.floor(high / step + 1e-6);\n for (let k = first; k <= last; k++) {\n // `+ 0` turns the -0 that `Number(\"-0.00\")` gives back into a plain 0.\n ticks.push(Number((k * step).toFixed(decimals)) + 0);\n }\n return ticks.length ? ticks : undefined;\n}\n\n/**\n * {@link niceTicks} on whole numbers only: the step never drops below 1, so a short\n * index series (a domain of [-0.2, 4.2]) is ticked 0 1 2 3 4 instead of every half.\n * `undefined` when the window holds no whole number at all, so the caller can fall\n * back to the fractional ticks of a deep zoom rather than show none.\n */\nexport function integerTicks(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): number[] | undefined {\n if (!domain) return undefined;\n const [low, high] = domain;\n if (!Number.isFinite(low) || !Number.isFinite(high) || !(high >= low)) return undefined;\n const step = high > low ? Math.max(1, niceStep(high - low, target)) : 1;\n const ticks: number[] = [];\n const first = Math.ceil(low / step - 1e-6);\n const last = Math.floor(high / step + 1e-6);\n for (let k = first; k <= last; k++) ticks.push(k * step + 0);\n return ticks.length ? ticks : undefined;\n}\n\n/**\n * The slots of a CATEGORY axis that lie inside a window over their positions.\n *\n * `SeriesChart` draws a category axis on the slot INDEX (see `x.type: \"category\"`), so a\n * zoom window is a range of fractional positions — [2.6, 8.3] after a drag across the\n * third to ninth month. A tick belongs on every whole slot inside it, and on nothing in\n * between: there is no month 2.5. Recharts' `minTickGap` thins them where they crowd.\n */\nexport function categoryTicks(domain: readonly [number, number] | undefined, count: number): number[] | undefined {\n if (!domain || !(count > 0)) return undefined;\n const first = Math.max(0, Math.ceil(domain[0] - 1e-6));\n const last = Math.min(count - 1, Math.floor(domain[1] + 1e-6));\n const ticks: number[] = [];\n for (let slot = first; slot <= last; slot++) ticks.push(slot);\n return ticks.length ? ticks : undefined;\n}\n\n/** What one tick of a time axis stands for, which is also how its label is written. */\nexport type TimeTickUnit = \"hour\" | \"day\" | \"month\" | \"year\";\n\nconst HOUR = 3_600_000;\nconst DAY = 24 * HOUR;\n\n/**\n * The calendar steps a time axis may tick in, with their rough length for choosing.\n * Months and years are stepped with `Date` setters, not by adding their \"length\":\n * thirty days from the 1st of February is the 3rd of March, and a tick that promises a\n * month start and prints the 3rd is the ruler lying.\n */\nconst TIME_STEPS: readonly { unit: TimeTickUnit; n: number; ms: number }[] = [\n { unit: \"hour\", n: 1, ms: HOUR },\n { unit: \"hour\", n: 3, ms: 3 * HOUR },\n { unit: \"hour\", n: 6, ms: 6 * HOUR },\n { unit: \"hour\", n: 12, ms: 12 * HOUR },\n { unit: \"day\", n: 1, ms: DAY },\n { unit: \"day\", n: 2, ms: 2 * DAY },\n { unit: \"day\", n: 7, ms: 7 * DAY },\n { unit: \"month\", n: 1, ms: 30.44 * DAY },\n { unit: \"month\", n: 2, ms: 60.88 * DAY },\n { unit: \"month\", n: 3, ms: 91.31 * DAY },\n { unit: \"month\", n: 6, ms: 182.62 * DAY },\n];\n\n/**\n * Calendar ticks inside a window of epoch milliseconds — midnights, Mondays, month and\n * quarter starts, new years, in LOCAL time — and the unit they are in, so the label can\n * say as much as the tick means (\"Mar 26\" for a month start, \"14 Mar\" for a day).\n *\n * The time counterpart of {@link niceTicks}: a 1/2/5 ladder over raw milliseconds lands\n * on 5 × 10⁹ ms, every 58 days, at whatever hour that happens to be. keksdose's price\n * history and cash buffer each thinned their own ticks by hand for exactly this reason.\n */\nexport function timeTicksWithUnit(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): { ticks: number[]; unit: TimeTickUnit } | undefined {\n if (!domain) return undefined;\n const [low, high] = domain;\n if (!Number.isFinite(low) || !Number.isFinite(high) || !(high > low)) return undefined;\n const rough = (high - low) / Math.max(1, target);\n let unit: TimeTickUnit = \"year\";\n let n = 1;\n let best = Infinity;\n for (const step of TIME_STEPS) {\n const miss = Math.abs(Math.log(step.ms / rough));\n if (miss < best) {\n best = miss;\n unit = step.unit;\n n = step.n;\n }\n }\n // The year ladder competes on the same terms as the table: one year is 365.25 days.\n const yearN = Math.max(1, Math.round(niceStep((high - low) / (365.25 * DAY), target)));\n if (Math.abs(Math.log((yearN * 365.25 * DAY) / rough)) < best) {\n unit = \"year\";\n n = yearN;\n }\n\n const start = new Date(low);\n start.setMinutes(0, 0, 0);\n if (unit !== \"hour\") start.setHours(0);\n if (unit === \"month\" || unit === \"year\") start.setDate(1);\n if (unit === \"year\") start.setMonth(0);\n // Onto the step's own grid: hours of the day, Mondays, month indices, years — so a\n // zoom window starting on a Wednesday still ticks on Mondays.\n if (unit === \"hour\") start.setHours(start.getHours() - (start.getHours() % n));\n if (unit === \"day\" && n === 7) start.setDate(start.getDate() - ((start.getDay() + 6) % 7));\n if (unit === \"month\") start.setMonth(start.getMonth() - (start.getMonth() % n));\n if (unit === \"year\") start.setFullYear(start.getFullYear() - (start.getFullYear() % n));\n\n const ticks: number[] = [];\n const at = new Date(start);\n // Bounded, so a window of a million years cannot hang the render.\n for (let guard = 0; guard < 1000 && at.getTime() <= high; guard++) {\n if (at.getTime() >= low) ticks.push(at.getTime());\n if (unit === \"hour\") at.setHours(at.getHours() + n);\n else if (unit === \"day\") at.setDate(at.getDate() + n);\n else if (unit === \"month\") at.setMonth(at.getMonth() + n);\n else at.setFullYear(at.getFullYear() + n);\n }\n return ticks.length ? { ticks, unit } : undefined;\n}\n\n/** {@link timeTicksWithUnit}, ticks only. */\nexport function timeTicks(\n domain: readonly [number, number] | undefined,\n target: number = TARGET_TICKS,\n): number[] | undefined {\n return timeTicksWithUnit(domain, target)?.ticks;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -24,7 +24,13 @@ import {
|
|
|
24
24
|
} from "./chart-zoom-core.js";
|
|
25
25
|
import { STEP_DASH, strokeDash } from "./toggle-legend.js";
|
|
26
26
|
import { DEFAULT_SERIES_CHART_LABELS } from "./series-chart-labels.js";
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
categoryTicks,
|
|
29
|
+
integerTicks,
|
|
30
|
+
niceTicks,
|
|
31
|
+
tickTarget,
|
|
32
|
+
timeTicksWithUnit
|
|
33
|
+
} from "./series-chart-ticks.js";
|
|
28
34
|
import { autoAxisBudget, axisUnit, budgetedAxes } from "./series-chart-budget.js";
|
|
29
35
|
import { thinnedRows } from "./series-chart-thin.js";
|
|
30
36
|
import {
|
|
@@ -130,10 +136,7 @@ function focusedBarShape(index) {
|
|
|
130
136
|
}
|
|
131
137
|
const MARKER_LABEL_SIZE = 11;
|
|
132
138
|
const REFERENCE_LABEL_SIZE = 10;
|
|
133
|
-
function MarkerLabel({
|
|
134
|
-
viewBox,
|
|
135
|
-
value
|
|
136
|
-
}) {
|
|
139
|
+
function MarkerLabel({ viewBox, value }) {
|
|
137
140
|
const plot = usePlotArea();
|
|
138
141
|
const ref = useRef(null);
|
|
139
142
|
const [measured, setMeasured] = useState();
|
|
@@ -280,12 +283,7 @@ function SeriesPlot({
|
|
|
280
283
|
const afterCap = capped.length ? axes.map((axis) => capped.includes(axis.id) ? { ...axis, hide: true } : axis) : axes;
|
|
281
284
|
const auto = axisBudget === "off" ? [] : budgetedAxes(
|
|
282
285
|
afterCap,
|
|
283
|
-
autoAxisBudget(
|
|
284
|
-
afterCap,
|
|
285
|
-
width,
|
|
286
|
-
(axis) => axisBandWidth(axis.width, Boolean(axis.title), scale),
|
|
287
|
-
scale
|
|
288
|
-
)
|
|
286
|
+
autoAxisBudget(afterCap, width, (axis) => axisBandWidth(axis.width, Boolean(axis.title), scale), scale)
|
|
289
287
|
);
|
|
290
288
|
const budgeted = [...capped, ...auto];
|
|
291
289
|
const budgetKey = budgeted.join("\n");
|
|
@@ -311,14 +309,7 @@ function SeriesPlot({
|
|
|
311
309
|
}, [budgetKey, onAxisBudget]);
|
|
312
310
|
const { className: heightClass, style: heightStyle } = chartHeightProps(height);
|
|
313
311
|
if (!model.source.length || !series.length) {
|
|
314
|
-
return /* @__PURE__ */ jsx(
|
|
315
|
-
"div",
|
|
316
|
-
{
|
|
317
|
-
className: cn("flex w-full items-center justify-center px-2 text-center", heightClass),
|
|
318
|
-
style: heightStyle,
|
|
319
|
-
children: empty !== void 0 ? empty : /* @__PURE__ */ jsx("p", { className: "text-xs text-muted", children: labels.empty })
|
|
320
|
-
}
|
|
321
|
-
);
|
|
312
|
+
return /* @__PURE__ */ jsx("div", { className: cn("flex w-full items-center justify-center px-2 text-center", heightClass), style: heightStyle, children: empty !== void 0 ? empty : /* @__PURE__ */ jsx("p", { className: "text-xs text-muted", children: labels.empty }) });
|
|
322
313
|
}
|
|
323
314
|
const x = xAxis;
|
|
324
315
|
const xKey = model.plotKey;
|
|
@@ -327,9 +318,7 @@ function SeriesPlot({
|
|
|
327
318
|
const allPlotted = model.rows;
|
|
328
319
|
const origin = (index) => thin?.kept[index] ?? index;
|
|
329
320
|
const drawnAxes = budgeted.length ? axes.map((axis) => budgeted.includes(axis.id) ? { ...axis, hide: true } : axis) : axes;
|
|
330
|
-
const lostUnit = new Map(
|
|
331
|
-
axes.filter((axis) => budgeted.includes(axis.id)).map((axis) => [axis.id, axisUnit(axis)])
|
|
332
|
-
);
|
|
321
|
+
const lostUnit = new Map(axes.filter((axis) => budgeted.includes(axis.id)).map((axis) => [axis.id, axisUnit(axis)]));
|
|
333
322
|
const config = Object.fromEntries(
|
|
334
323
|
series.map((entry, index) => [
|
|
335
324
|
entry.key,
|
|
@@ -357,14 +346,11 @@ function SeriesPlot({
|
|
|
357
346
|
const yRefs = refs.filter((ref) => ref.axis !== "x");
|
|
358
347
|
const xPos = (value) => model.position(value);
|
|
359
348
|
const fittedX = zoom?.xDomain ?? (model.kind === "category" ? [-0.5, rows.length - 0.5] : padBand(
|
|
360
|
-
...extend(
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
...(markers ?? []).map((marker) => xPos(marker.x))
|
|
366
|
-
]
|
|
367
|
-
) ?? [Infinity, -Infinity]
|
|
349
|
+
...extend(void 0, [
|
|
350
|
+
...allPlotted.map((row2) => finite(row2[xKey])),
|
|
351
|
+
...xRefs.map((ref) => xPos(ref.value)),
|
|
352
|
+
...(markers ?? []).map((marker) => xPos(marker.x))
|
|
353
|
+
]) ?? [Infinity, -Infinity]
|
|
368
354
|
));
|
|
369
355
|
const timeUnit = model.kind === "time" ? timeTicksWithUnit(fittedX, ticksAim) : void 0;
|
|
370
356
|
const integerX = model.kind === "number" && (x.integerTicks ?? allPlotted.every((row2) => {
|
|
@@ -389,16 +375,18 @@ function SeriesPlot({
|
|
|
389
375
|
const label = x.label ?? (model.kind === "time" ? (position) => dateFormat.format(position) : format);
|
|
390
376
|
const xLabel = (position) => label(position, tickAt(position));
|
|
391
377
|
const tickAngle = x.ticks === false ? 0 : x.tickAngle ?? 0;
|
|
392
|
-
const tickBand = tiltedTickBand(
|
|
378
|
+
const tickBand = tiltedTickBand(
|
|
379
|
+
(xTicks ?? []).map((tick) => xFormat(tick)),
|
|
380
|
+
tickAngle,
|
|
381
|
+
scale
|
|
382
|
+
);
|
|
393
383
|
const source = {
|
|
394
384
|
rows: allPlotted,
|
|
395
385
|
series,
|
|
396
386
|
axes,
|
|
397
387
|
xKey
|
|
398
388
|
};
|
|
399
|
-
const anchored = (axis) => axis.includeZero ?? series.some(
|
|
400
|
-
(entry) => (entry.axis ?? DEFAULT_Y_AXIS) === axis.id && (entry.type ?? "line") !== "line"
|
|
401
|
-
);
|
|
389
|
+
const anchored = (axis) => axis.includeZero ?? series.some((entry) => (entry.axis ?? DEFAULT_Y_AXIS) === axis.id && (entry.type ?? "line") !== "line");
|
|
402
390
|
const wholeOnly = (axis) => axis.integerTicks ?? series.filter((entry) => (entry.axis ?? DEFAULT_Y_AXIS) === axis.id).every(
|
|
403
391
|
(entry) => allPlotted.every((row2) => {
|
|
404
392
|
const value = finite(row2[entry.key]);
|
|
@@ -432,7 +420,9 @@ function SeriesPlot({
|
|
|
432
420
|
};
|
|
433
421
|
const bars = series.filter((entry) => entry.type === "bar");
|
|
434
422
|
const [low, high] = fittedX ?? [-Infinity, Infinity];
|
|
435
|
-
const placed = plotted.map((row2, index) => ({ index, at: model.kind === "category" ? index : finite(row2[xKey]) })).filter(
|
|
423
|
+
const placed = plotted.map((row2, index) => ({ index, at: model.kind === "category" ? index : finite(row2[xKey]) })).filter(
|
|
424
|
+
(slot) => slot.at !== void 0 && slot.at >= low && slot.at <= high
|
|
425
|
+
).sort((a, b) => a.at - b.at);
|
|
436
426
|
placed.forEach(({ index, at }, k) => {
|
|
437
427
|
const from = k > 0 ? (placed[k - 1].at + at) / 2 : low;
|
|
438
428
|
const to = k < placed.length - 1 ? (placed[k + 1].at + at) / 2 : high;
|
|
@@ -543,15 +533,7 @@ function SeriesPlot({
|
|
|
543
533
|
...tickAngle ? { angle: tickAngle, textAnchor: tickAngle < 0 ? "end" : "start" } : {},
|
|
544
534
|
height: x.ticks === false && !x.title ? 4 : tickBand,
|
|
545
535
|
tickFormatter: (value) => xFormat(Number(value)),
|
|
546
|
-
children: x.title && /* @__PURE__ */ jsx(
|
|
547
|
-
Label,
|
|
548
|
-
{
|
|
549
|
-
value: x.title,
|
|
550
|
-
position: "insideBottom",
|
|
551
|
-
offset: -grow(12),
|
|
552
|
-
className: "fill-muted text-caption"
|
|
553
|
-
}
|
|
554
|
-
)
|
|
536
|
+
children: x.title && /* @__PURE__ */ jsx(Label, { value: x.title, position: "insideBottom", offset: -grow(12), className: "fill-muted text-caption" })
|
|
555
537
|
}
|
|
556
538
|
),
|
|
557
539
|
drawnAxes.map((axis) => {
|
|
@@ -644,7 +626,9 @@ function SeriesPlot({
|
|
|
644
626
|
fillOpacity: entry.fillOpacity,
|
|
645
627
|
...edge ? { stroke: edge, strokeWidth: 1 } : {},
|
|
646
628
|
radius: entry.stack === void 0 ? BAR_RADIUS : 0,
|
|
647
|
-
...stub ? {
|
|
629
|
+
...stub ? {
|
|
630
|
+
minPointSize: (_value, index) => finite(plotted[index]?.[entry.key]) === void 0 ? 0 : stub
|
|
631
|
+
} : {},
|
|
648
632
|
...focusedStop?.key === entry.key ? { shape: focusedBarShape(focusedStop.index) } : {},
|
|
649
633
|
onClick: onPointClick ? (_bar, index, event) => {
|
|
650
634
|
event.stopPropagation();
|