@eifi1/ui-kit 0.34.0 → 0.36.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 +115 -41
- package/dist/admin/role-select.d.ts +3 -2
- package/dist/admin/role-select.js +2 -0
- package/dist/admin/role-select.js.map +1 -1
- package/dist/billing/billing-banner.d.ts +5 -2
- package/dist/billing/billing-banner.js.map +1 -1
- package/dist/billing/plan-limit-notice.d.ts +5 -2
- package/dist/billing/plan-limit-notice.js.map +1 -1
- package/dist/chart.js.map +1 -1
- package/dist/components/amount-input.d.ts +2 -5
- package/dist/components/amount-input.js +2 -2
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.d.ts +2 -2
- package/dist/components/autocomplete.js +2 -1
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/button-look.d.ts +1 -1
- package/dist/components/button-look.js +9 -4
- package/dist/components/button-look.js.map +1 -1
- package/dist/components/calculator.d.ts +1 -4
- package/dist/components/calculator.js +1 -3
- package/dist/components/calculator.js.map +1 -1
- package/dist/components/chart-zoom.d.ts +0 -37
- package/dist/components/chart-zoom.js +1 -28
- package/dist/components/chart-zoom.js.map +1 -1
- package/dist/components/checkbox-group.d.ts +5 -2
- package/dist/components/checkbox-group.js +15 -4
- package/dist/components/checkbox-group.js.map +1 -1
- package/dist/components/chip-input.d.ts +0 -4
- package/dist/components/chip-input.js +1 -5
- package/dist/components/chip-input.js.map +1 -1
- package/dist/components/column-mapper.d.ts +5 -3
- package/dist/components/column-mapper.js +2 -0
- package/dist/components/column-mapper.js.map +1 -1
- package/dist/components/combobox.d.ts +3 -3
- package/dist/components/combobox.js +2 -1
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/copy-button.d.ts +5 -1
- package/dist/components/copy-button.js.map +1 -1
- package/dist/components/country-select.d.ts +3 -3
- package/dist/components/country-select.js +3 -0
- package/dist/components/country-select.js.map +1 -1
- package/dist/components/currency-option-list.d.ts +3 -8
- package/dist/components/currency-option-list.js +1 -29
- package/dist/components/currency-option-list.js.map +1 -1
- package/dist/components/currency-select.d.ts +3 -2
- package/dist/components/currency-select.js +10 -1
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +3 -3
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-filter-popover.d.ts +1 -1
- package/dist/components/data-table-filter-popover.js +1 -1
- package/dist/components/data-table-filter-popover.js.map +1 -1
- package/dist/components/data-table-labels.d.ts +1 -42
- package/dist/components/data-table-labels.js +2 -31
- package/dist/components/data-table-labels.js.map +1 -1
- package/dist/components/data-table-shared.d.ts +17 -1
- package/dist/components/data-table-shared.js +22 -0
- package/dist/components/data-table-shared.js.map +1 -1
- package/dist/components/data-table.d.ts +12 -2
- package/dist/components/data-table.js +18 -14
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-field.d.ts +2 -1
- package/dist/components/date-field.js.map +1 -1
- package/dist/components/date-picker.js +3 -0
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/date-range-picker.js +3 -0
- package/dist/components/date-range-picker.js.map +1 -1
- package/dist/components/dialog-frame.d.ts +3 -1
- package/dist/components/dialog-frame.js.map +1 -1
- package/dist/components/dropdown.d.ts +18 -15
- package/dist/components/dropdown.js +11 -3
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/entity-combobox.d.ts +3 -3
- package/dist/components/entity-combobox.js +2 -1
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/field-base.d.ts +0 -5
- package/dist/components/field-base.js +0 -5
- package/dist/components/field-base.js.map +1 -1
- package/dist/components/field-parts.d.ts +69 -22
- package/dist/components/field-parts.js +33 -19
- package/dist/components/field-parts.js.map +1 -1
- package/dist/components/field-strip.d.ts +9 -23
- package/dist/components/field-strip.js +26 -23
- package/dist/components/field-strip.js.map +1 -1
- package/dist/components/field-sync.d.ts +0 -4
- package/dist/components/field-sync.js +0 -4
- package/dist/components/field-sync.js.map +1 -1
- package/dist/components/field.d.ts +7 -6
- package/dist/components/field.js +24 -15
- package/dist/components/field.js.map +1 -1
- package/dist/components/full-bleed-dialog.js +2 -2
- package/dist/components/full-bleed-dialog.js.map +1 -1
- package/dist/components/help-popover.d.ts +9 -7
- package/dist/components/help-popover.js.map +1 -1
- package/dist/components/hover-menu.d.ts +6 -13
- package/dist/components/hover-menu.js +3 -3
- package/dist/components/hover-menu.js.map +1 -1
- package/dist/components/icon-picker.d.ts +3 -2
- package/dist/components/icon-picker.js +3 -0
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/inline-entity-combobox.d.ts +3 -3
- package/dist/components/inline-entity-combobox.js +2 -1
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/input.d.ts +2 -2
- package/dist/components/input.js +2 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/modal.d.ts +9 -1
- package/dist/components/modal.js +7 -4
- package/dist/components/modal.js.map +1 -1
- package/dist/components/month-picker.d.ts +2 -1
- package/dist/components/month-picker.js +8 -1
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.d.ts +2 -2
- 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 +7 -18
- package/dist/components/multi-select.js +8 -10
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/number-input.d.ts +2 -5
- package/dist/components/number-input.js +2 -4
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numeric-field.d.ts +5 -2
- package/dist/components/numeric-field.js +4 -1
- package/dist/components/numeric-field.js.map +1 -1
- package/dist/components/one-time-code-input.d.ts +2 -1
- package/dist/components/one-time-code-input.js +2 -1
- package/dist/components/one-time-code-input.js.map +1 -1
- package/dist/components/phone-input.d.ts +1 -1
- package/dist/components/phone-input.js +4 -0
- package/dist/components/phone-input.js.map +1 -1
- package/dist/components/popover.js +3 -3
- package/dist/components/popover.js.map +1 -1
- package/dist/components/select.d.ts +4 -3
- package/dist/components/select.js +2 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/series-chart.js.map +1 -1
- package/dist/components/server-wake.d.ts +0 -6
- package/dist/components/server-wake.js.map +1 -1
- package/dist/components/settings-fields.d.ts +4 -2
- package/dist/components/settings-fields.js.map +1 -1
- package/dist/components/slider.d.ts +3 -2
- package/dist/components/slider.js +7 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stat-tile.d.ts +8 -2
- package/dist/components/stat-tile.js +2 -11
- package/dist/components/stat-tile.js.map +1 -1
- package/dist/components/swatch-picker.d.ts +3 -2
- package/dist/components/swatch-picker.js +3 -0
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/swipeable-row.d.ts +2 -17
- package/dist/components/swipeable-row.js +11 -16
- package/dist/components/swipeable-row.js.map +1 -1
- package/dist/components/text-link.js +3 -1
- package/dist/components/text-link.js.map +1 -1
- package/dist/components/textarea.d.ts +2 -1
- package/dist/components/textarea.js +9 -3
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/toggle-group.d.ts +2 -2
- package/dist/components/toggle-group.js +7 -3
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/tooltip.d.ts +9 -1
- package/dist/components/tooltip.js +20 -5
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/translation-review.d.ts +10 -2
- package/dist/components/translation-review.js +11 -3
- package/dist/components/translation-review.js.map +1 -1
- package/dist/components/use-table-state.d.ts +31 -3
- package/dist/components/use-table-state.js +53 -8
- package/dist/components/use-table-state.js.map +1 -1
- package/dist/components/user-avatar.d.ts +2 -2
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/components/wizard-stepper.d.ts +1 -4
- package/dist/components/wizard-stepper.js +2 -3
- package/dist/components/wizard-stepper.js.map +1 -1
- package/dist/currencies.d.ts +23 -0
- package/dist/currencies.js +38 -0
- package/dist/currencies.js.map +1 -0
- package/dist/demo/demo-banner.d.ts +7 -2
- package/dist/demo/demo-banner.js.map +1 -1
- package/dist/eslint/index.d.ts +83 -0
- package/dist/eslint/index.js +69 -0
- package/dist/eslint/index.js.map +1 -0
- package/dist/eslint/role-utilities.d.ts +48 -0
- package/dist/eslint/role-utilities.generated.d.ts +2 -0
- package/dist/eslint/role-utilities.generated.js +143 -0
- package/dist/eslint/role-utilities.generated.js.map +1 -0
- package/dist/eslint/role-utilities.js +43 -0
- package/dist/eslint/role-utilities.js.map +1 -0
- package/dist/feedback/feedback-menu.d.ts +2 -2
- package/dist/feedback/feedback-menu.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +3 -8
- package/dist/feedback/feedback-thread.js +0 -2
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/hooks/use-dismiss.d.ts +16 -3
- package/dist/hooks/use-dismiss.js +14 -2
- package/dist/hooks/use-dismiss.js.map +1 -1
- package/dist/i18n/defaults.js +5 -1
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.js +97 -1
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +29 -4
- package/dist/i18n/kit-labels.js +21 -1
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +104 -3
- package/dist/i18n/locales/en.js.map +3 -3
- package/dist/i18n/locales/es.js +95 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +99 -3
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +95 -1
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +99 -3
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +95 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.js +13 -0
- package/dist/i18n/review.js.map +1 -1
- package/dist/i18n/shared-labels.js +3 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/index.d.ts +23 -1
- package/dist/index.js +40 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/device-settings.d.ts +72 -0
- package/dist/lib/device-settings.js +64 -0
- package/dist/lib/device-settings.js.map +1 -0
- package/dist/lib/plain-text.d.ts +11 -0
- package/dist/lib/plain-text.js +16 -0
- package/dist/lib/plain-text.js.map +1 -0
- package/dist/lib/refs.d.ts +13 -0
- package/dist/lib/refs.js +15 -0
- package/dist/lib/refs.js.map +1 -0
- package/dist/lib/safe-storage.d.ts +6 -0
- package/dist/lib/safe-storage.js +11 -0
- package/dist/lib/safe-storage.js.map +1 -1
- package/dist/notifications/notification-parts.d.ts +39 -0
- package/dist/notifications/notification-parts.js +47 -0
- package/dist/notifications/notification-parts.js.map +1 -0
- package/dist/notifications/notification-types-setting.d.ts +62 -0
- package/dist/notifications/notification-types-setting.js +192 -0
- package/dist/notifications/notification-types-setting.js.map +1 -0
- package/dist/notifications/notification-types.d.ts +75 -0
- package/dist/notifications/notification-types.js +2 -0
- package/dist/notifications/notification-types.js.map +1 -0
- package/dist/notifications/notifications-labels.d.ts +131 -0
- package/dist/notifications/notifications-labels.js +83 -0
- package/dist/notifications/notifications-labels.js.map +1 -0
- package/dist/notifications/push-device-setting.d.ts +37 -0
- package/dist/notifications/push-device-setting.js +164 -0
- package/dist/notifications/push-device-setting.js.map +1 -0
- package/dist/notifications/push-devices-setting.d.ts +44 -0
- package/dist/notifications/push-devices-setting.js +203 -0
- package/dist/notifications/push-devices-setting.js.map +1 -0
- package/dist/notifications/quiet-hours-setting.d.ts +47 -0
- package/dist/notifications/quiet-hours-setting.js +131 -0
- package/dist/notifications/quiet-hours-setting.js.map +1 -0
- package/dist/notifications/time-zone-select.d.ts +50 -0
- package/dist/notifications/time-zone-select.js +76 -0
- package/dist/notifications/time-zone-select.js.map +1 -0
- package/dist/notifications/unsubscribe-panel.d.ts +53 -0
- package/dist/notifications/unsubscribe-panel.js +139 -0
- package/dist/notifications/unsubscribe-panel.js.map +1 -0
- package/dist/notifications/use-push-device.d.ts +122 -0
- package/dist/notifications/use-push-device.js +230 -0
- package/dist/notifications/use-push-device.js.map +1 -0
- package/dist/rhf/fields.d.ts +36 -29
- package/dist/rhf/fields.js +51 -22
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form-core.d.ts +5 -4
- package/dist/rhf/form-core.js.map +1 -1
- package/dist/rhf/form.d.ts +7 -36
- package/dist/rhf/form.js +1 -16
- package/dist/rhf/form.js.map +1 -1
- package/dist/rhf/line-items.d.ts +1 -1
- package/dist/rhf/line-items.js.map +1 -1
- package/dist/rhf/use-rhf-wizard-step.js.map +1 -1
- package/dist/rhf.js.map +1 -1
- package/dist/settings/device-reset-setting-labels.d.ts +3 -0
- package/dist/settings/device-reset-setting-labels.js +15 -0
- package/dist/settings/device-reset-setting-labels.js.map +1 -0
- package/dist/settings/device-reset-setting.d.ts +58 -0
- package/dist/settings/device-reset-setting.js +51 -0
- package/dist/settings/device-reset-setting.js.map +1 -0
- package/dist/shell/app-shell.js +5 -0
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/option-switcher-menu.d.ts +5 -17
- package/dist/shell/option-switcher-menu.js +1 -3
- package/dist/shell/option-switcher-menu.js.map +1 -1
- package/dist/shell/role-switcher.d.ts +1 -4
- package/dist/shell/role-switcher.js +2 -3
- package/dist/shell/role-switcher.js.map +1 -1
- package/dist/shell/topbar-action-menu.d.ts +7 -19
- package/dist/shell/topbar-action-menu.js +1 -3
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell/topbar-controls.d.ts +3 -12
- package/dist/shell/topbar-controls.js +6 -9
- package/dist/shell/topbar-controls.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/viewport.d.ts +25 -2
- package/dist/testing/viewport.js +61 -10
- package/dist/testing/viewport.js.map +1 -1
- package/dist/theme/contrast-tokens.d.ts +42 -4
- package/dist/theme/contrast-tokens.js +56 -9
- package/dist/theme/contrast-tokens.js.map +1 -1
- package/dist/theme/contrast.d.ts +4 -2
- package/dist/theme/contrast.js +13 -0
- package/dist/theme/contrast.js.map +1 -1
- package/dist/theme/palette-derive.d.ts +15 -1
- package/dist/theme/palette-derive.js +37 -8
- package/dist/theme/palette-derive.js.map +1 -1
- package/dist/theme/palette-presets.d.ts +2 -8
- package/dist/theme/palette-presets.js +5 -284
- package/dist/theme/palette-presets.js.map +1 -1
- package/dist/theme/palette-store.js +6 -0
- package/dist/theme/palette-store.js.map +1 -1
- package/dist/theme/text-size.js +6 -0
- package/dist/theme/text-size.js.map +1 -1
- package/dist/theme/theme-store.js +6 -0
- package/dist/theme/theme-store.js.map +1 -1
- package/dist/wizard/types.d.ts +0 -5
- package/dist/wizard/types.js +1 -5
- package/dist/wizard/types.js.map +1 -1
- package/package.json +9 -1
- package/src/admin/role-select.tsx +4 -1
- package/src/billing/billing-banner.tsx +5 -2
- package/src/billing/plan-limit-notice.tsx +5 -2
- package/src/chart.ts +5 -3
- package/src/components/amount-input.tsx +4 -7
- package/src/components/autocomplete.tsx +5 -2
- package/src/components/button-look.ts +15 -5
- package/src/components/calculator.tsx +2 -7
- package/src/components/chart-zoom.tsx +4 -47
- package/src/components/checkbox-group.tsx +22 -4
- package/src/components/chip-input.tsx +0 -7
- package/src/components/column-mapper.tsx +6 -2
- package/src/components/combobox.tsx +6 -3
- package/src/components/copy-button.tsx +5 -1
- package/src/components/country-select.tsx +6 -1
- package/src/components/currency-option-list.tsx +8 -42
- package/src/components/currency-select.tsx +12 -3
- package/src/components/danger-confirm.tsx +3 -3
- package/src/components/data-table-filter-popover.tsx +2 -1
- package/src/components/data-table-labels.ts +2 -84
- package/src/components/data-table-shared.tsx +55 -2
- package/src/components/data-table.tsx +29 -17
- package/src/components/date-field.tsx +2 -2
- package/src/components/date-picker.tsx +3 -0
- package/src/components/date-range-picker.tsx +3 -0
- package/src/components/dialog-frame.tsx +3 -1
- package/src/components/dropdown.tsx +42 -18
- package/src/components/entity-combobox.tsx +6 -3
- package/src/components/field-base.tsx +0 -11
- package/src/components/field-parts.tsx +112 -38
- package/src/components/field-strip.tsx +12 -27
- package/src/components/field-sync.tsx +0 -7
- package/src/components/field.tsx +32 -19
- package/src/components/full-bleed-dialog.tsx +4 -3
- package/src/components/help-popover.tsx +9 -7
- package/src/components/hover-menu.tsx +12 -16
- package/src/components/icon-picker.tsx +8 -3
- package/src/components/inline-entity-combobox.tsx +6 -3
- package/src/components/input.tsx +4 -2
- package/src/components/modal.tsx +20 -4
- package/src/components/month-picker.tsx +10 -3
- package/src/components/multi-entity-combobox.tsx +5 -2
- package/src/components/multi-select.tsx +19 -31
- package/src/components/number-input.tsx +5 -10
- package/src/components/numeric-field.ts +10 -2
- package/src/components/one-time-code-input.tsx +5 -3
- package/src/components/phone-input.tsx +4 -0
- package/src/components/popover.tsx +8 -4
- package/src/components/select.tsx +6 -3
- package/src/components/series-chart.tsx +1 -1
- package/src/components/server-wake.tsx +0 -6
- package/src/components/settings-fields.tsx +4 -2
- package/src/components/slider.tsx +10 -3
- package/src/components/stat-tile.tsx +11 -20
- package/src/components/swatch-picker.tsx +9 -4
- package/src/components/swipeable-row.tsx +15 -37
- package/src/components/text-link.tsx +3 -1
- package/src/components/textarea.tsx +11 -4
- package/src/components/toggle-group.tsx +21 -5
- package/src/components/tooltip.tsx +37 -6
- package/src/components/translation-review.tsx +25 -7
- package/src/components/use-table-state.ts +91 -10
- package/src/components/user-avatar.tsx +2 -2
- package/src/components/wizard-stepper.tsx +2 -6
- package/src/currencies.ts +70 -0
- package/src/demo/demo-banner.tsx +7 -2
- package/src/eslint/index.ts +161 -0
- package/src/eslint/role-utilities.generated.ts +146 -0
- package/src/eslint/role-utilities.ts +99 -0
- package/src/feedback/feedback-menu.tsx +2 -2
- package/src/feedback/feedback-thread.tsx +3 -8
- package/src/hooks/use-dismiss.ts +39 -4
- package/src/i18n/defaults.ts +4 -0
- package/src/i18n/german.ts +113 -0
- package/src/i18n/kit-labels.tsx +66 -6
- package/src/i18n/locales/en.ts +6 -0
- package/src/i18n/locales/es.ts +106 -0
- package/src/i18n/locales/fr.ts +109 -2
- package/src/i18n/locales/hu.ts +104 -0
- package/src/i18n/locales/it.ts +108 -2
- package/src/i18n/locales/zh.ts +96 -0
- package/src/i18n/review.ts +13 -0
- package/src/i18n/shared-labels.ts +2 -0
- package/src/index.ts +53 -1
- package/src/lib/device-settings.ts +146 -0
- package/src/lib/plain-text.ts +22 -0
- package/src/lib/refs.ts +22 -0
- package/src/lib/safe-storage.ts +16 -0
- package/src/notifications/notification-parts.tsx +83 -0
- package/src/notifications/notification-types-setting.tsx +309 -0
- package/src/notifications/notification-types.ts +80 -0
- package/src/notifications/notifications-labels.ts +238 -0
- package/src/notifications/push-device-setting.tsx +224 -0
- package/src/notifications/push-devices-setting.tsx +306 -0
- package/src/notifications/quiet-hours-setting.tsx +185 -0
- package/src/notifications/time-zone-select.tsx +126 -0
- package/src/notifications/unsubscribe-panel.tsx +203 -0
- package/src/notifications/use-push-device.ts +392 -0
- package/src/rhf/fields.tsx +87 -39
- package/src/rhf/form-core.tsx +5 -4
- package/src/rhf/form.tsx +7 -43
- package/src/rhf/line-items.tsx +1 -1
- package/src/rhf/use-rhf-wizard-step.ts +4 -4
- package/src/rhf.ts +3 -2
- package/src/settings/device-reset-setting-labels.ts +20 -0
- package/src/settings/device-reset-setting.tsx +119 -0
- package/src/shell/app-shell.tsx +8 -0
- package/src/shell/option-switcher-menu.tsx +5 -22
- package/src/shell/role-switcher.tsx +2 -6
- package/src/shell/topbar-action-menu.tsx +7 -24
- package/src/shell/topbar-controls.tsx +6 -18
- package/src/testing/index.ts +3 -1
- package/src/testing/viewport.ts +125 -19
- package/src/theme/contrast-tokens.ts +106 -12
- package/src/theme/contrast.ts +30 -4
- package/src/theme/palette-derive.ts +68 -7
- package/src/theme/palette-presets.ts +16 -299
- package/src/theme/palette-store.ts +12 -0
- package/src/theme/text-size.ts +8 -0
- package/src/theme/theme-store.ts +10 -0
- package/src/wizard/types.ts +0 -8
- package/tokens.css +38 -4
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
// concrete hex in JS, so they read the same values from here via the hooks in
|
|
9
9
|
// palette-store.
|
|
10
10
|
//
|
|
11
|
-
// The
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
11
|
+
// The default preset here mirrors the :root/.dark blocks in tokens.css exactly. The
|
|
12
|
+
// five hand-picked alternatives of #307 (`ALTERNATIVE_PRESETS`, a reference bank that
|
|
13
|
+
// `presetById` never resolved) were removed in 0.35 (refactor audit 2026-10, API-6c;
|
|
14
|
+
// deprecated in 0.34): `PALETTES` is what an app offers, and `derivePalette` makes a
|
|
15
|
+
// palette of its own.
|
|
16
16
|
|
|
17
17
|
import type { HeatStops } from "./chart-palette";
|
|
18
18
|
import { contrastStep, rememberTokenSet } from "./contrast-tokens";
|
|
@@ -127,292 +127,6 @@ export const DEFAULT_PRESET: PalettePreset = {
|
|
|
127
127
|
},
|
|
128
128
|
};
|
|
129
129
|
|
|
130
|
-
// Vetted alternatives to preview (CVD-safe, WCAG-AA on both themes).
|
|
131
|
-
/**
|
|
132
|
-
* @deprecated 0.34 — `PALETTES`, the presets `presetById` and the palette store know, or
|
|
133
|
-
* `derivePalette` for a palette of the app's own; removed in 0.35 (refactor audit 2026-10,
|
|
134
|
-
* API-6c). A reference bank only: `presetById` resolves none of these ids, and no app
|
|
135
|
-
* imports it (deferred since the 2026-09-22 audit).
|
|
136
|
-
*/
|
|
137
|
-
export const ALTERNATIVE_PRESETS: PalettePreset[] = [
|
|
138
|
-
{
|
|
139
|
-
id: "warm-paper",
|
|
140
|
-
name: "Warm Paper",
|
|
141
|
-
blurb: "Cream paper · warm charcoal",
|
|
142
|
-
light: {
|
|
143
|
-
bgPage: "#ece5d6",
|
|
144
|
-
bgSurface: "#f5efe3",
|
|
145
|
-
bgSurface2: "#ece5d6",
|
|
146
|
-
border: "#e2dcce",
|
|
147
|
-
textPrimary: "#2b2622",
|
|
148
|
-
textSecondary: "#4f4a44",
|
|
149
|
-
textMuted: "#68625b",
|
|
150
|
-
brand: "#9a5b34",
|
|
151
|
-
brandHover: "#824827",
|
|
152
|
-
brandContrast: "#fdf8f2",
|
|
153
|
-
moneyIncome: "#0e7490",
|
|
154
|
-
moneyExpense: "#8f3f0a",
|
|
155
|
-
moneyNet: "#7c4dab",
|
|
156
|
-
moneyNeutral: "#6b6258",
|
|
157
|
-
chart: ["#332288", "#88ccee", "#44aa99", "#117733", "#999933", "#ddcc77", "#cc6677", "#882255", "#aa4499"],
|
|
158
|
-
heat: {
|
|
159
|
-
neutral: "#efe9dc",
|
|
160
|
-
under: "#0e7490",
|
|
161
|
-
over: "#b45309",
|
|
162
|
-
seqLow: "#fbeed2",
|
|
163
|
-
seqHigh: "#b45309",
|
|
164
|
-
empty: "rgba(148,163,184,0.14)",
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
dark: {
|
|
168
|
-
bgPage: "#211e1a",
|
|
169
|
-
bgSurface: "#2a2622",
|
|
170
|
-
bgSurface2: "#322d27",
|
|
171
|
-
border: "#3d372f",
|
|
172
|
-
textPrimary: "#e8e2d6",
|
|
173
|
-
textSecondary: "#bfb9af",
|
|
174
|
-
textMuted: "#9e998f",
|
|
175
|
-
brand: "#e0986a",
|
|
176
|
-
brandHover: "#ecae85",
|
|
177
|
-
brandContrast: "#2a1c10",
|
|
178
|
-
moneyIncome: "#4dd4c4",
|
|
179
|
-
moneyExpense: "#fbbf3a",
|
|
180
|
-
moneyNet: "#bfa0e0",
|
|
181
|
-
moneyNeutral: "#a39a8c",
|
|
182
|
-
chart: ["#7e72d6", "#9fd8f2", "#5fc4b0", "#3fa45f", "#bfbf5e", "#e8dda0", "#e08c9a", "#cf6488", "#cc78be"],
|
|
183
|
-
heat: {
|
|
184
|
-
neutral: "#3a352e",
|
|
185
|
-
under: "#4dd4c4",
|
|
186
|
-
over: "#fbbf3a",
|
|
187
|
-
seqLow: "#2c2014",
|
|
188
|
-
seqHigh: "#fbbf3a",
|
|
189
|
-
empty: "rgba(148,163,184,0.10)",
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
id: "nord-frost",
|
|
195
|
-
name: "Nord Frost",
|
|
196
|
-
blurb: "Cool snow · polar night",
|
|
197
|
-
light: {
|
|
198
|
-
bgPage: "#e2e7ef",
|
|
199
|
-
bgSurface: "#f0f3f8",
|
|
200
|
-
bgSurface2: "#e2e7ef",
|
|
201
|
-
border: "#d3dae6",
|
|
202
|
-
textPrimary: "#2e3440",
|
|
203
|
-
textSecondary: "#454b56",
|
|
204
|
-
textMuted: "#5e636e",
|
|
205
|
-
brand: "#3b6ea5",
|
|
206
|
-
brandHover: "#305a86",
|
|
207
|
-
brandContrast: "#ffffff",
|
|
208
|
-
moneyIncome: "#0f8060",
|
|
209
|
-
moneyExpense: "#b8431a",
|
|
210
|
-
moneyNet: "#6b4fa0",
|
|
211
|
-
moneyNeutral: "#5b6577",
|
|
212
|
-
chart: ["#3a6ea5", "#56b6c2", "#2f7d4f", "#cdb52f", "#d05f7a", "#9a3f93", "#4d4bbf", "#dd6a2c", "#7a8aa8"],
|
|
213
|
-
heat: {
|
|
214
|
-
neutral: "#e1e6ee",
|
|
215
|
-
under: "#0f8060",
|
|
216
|
-
over: "#b8431a",
|
|
217
|
-
seqLow: "#f0f3f7",
|
|
218
|
-
seqHigh: "#a14708",
|
|
219
|
-
empty: "rgba(148,163,184,0.14)",
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
dark: {
|
|
223
|
-
bgPage: "#242933",
|
|
224
|
-
bgSurface: "#2e3440",
|
|
225
|
-
bgSurface2: "#3b4252",
|
|
226
|
-
border: "#434c5e",
|
|
227
|
-
textPrimary: "#eceff4",
|
|
228
|
-
textSecondary: "#d4d7de",
|
|
229
|
-
textMuted: "#afb3bc",
|
|
230
|
-
brand: "#88c0d0",
|
|
231
|
-
brandHover: "#a3d4e0",
|
|
232
|
-
brandContrast: "#1c2027",
|
|
233
|
-
moneyIncome: "#4ecf9c",
|
|
234
|
-
moneyExpense: "#e8a24f",
|
|
235
|
-
moneyNet: "#caa0e0",
|
|
236
|
-
moneyNeutral: "#9aa5b8",
|
|
237
|
-
chart: ["#7fb4e6", "#5ec9d6", "#5cc483", "#dccb6b", "#e87e96", "#bd6fce", "#9389f2", "#ef8f4a", "#8693ad"],
|
|
238
|
-
heat: {
|
|
239
|
-
neutral: "#3b4252",
|
|
240
|
-
under: "#4ecf9c",
|
|
241
|
-
over: "#e8a24f",
|
|
242
|
-
seqLow: "#33373f",
|
|
243
|
-
seqHigh: "#e8a24f",
|
|
244
|
-
empty: "rgba(148,163,184,0.10)",
|
|
245
|
-
},
|
|
246
|
-
},
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
id: "indigo-noir",
|
|
250
|
-
name: "Indigo Noir",
|
|
251
|
-
blurb: "Crisp light · deep indigo",
|
|
252
|
-
light: {
|
|
253
|
-
bgPage: "#e8eaf2",
|
|
254
|
-
bgSurface: "#f6f7fb",
|
|
255
|
-
bgSurface2: "#e8eaf2",
|
|
256
|
-
border: "#dadfeb",
|
|
257
|
-
textPrimary: "#1b1f2e",
|
|
258
|
-
textSecondary: "#494d5a",
|
|
259
|
-
textMuted: "#626572",
|
|
260
|
-
brand: "#4338ca",
|
|
261
|
-
brandHover: "#3730a3",
|
|
262
|
-
brandContrast: "#ffffff",
|
|
263
|
-
moneyIncome: "#0c6478",
|
|
264
|
-
moneyExpense: "#b45309",
|
|
265
|
-
moneyNet: "#7c3aed",
|
|
266
|
-
moneyNeutral: "#5b6478",
|
|
267
|
-
chart: ["#332288", "#88ccee", "#44aa99", "#117733", "#999933", "#ddcc77", "#cc6677", "#882255", "#aa4499"],
|
|
268
|
-
heat: {
|
|
269
|
-
neutral: "#eef1f7",
|
|
270
|
-
under: "#0c6478",
|
|
271
|
-
over: "#b45309",
|
|
272
|
-
seqLow: "#fdeed4",
|
|
273
|
-
seqHigh: "#b45309",
|
|
274
|
-
empty: "rgba(148,163,184,0.14)",
|
|
275
|
-
},
|
|
276
|
-
},
|
|
277
|
-
dark: {
|
|
278
|
-
bgPage: "#0e0f1c",
|
|
279
|
-
bgSurface: "#181a2c",
|
|
280
|
-
bgSurface2: "#21243a",
|
|
281
|
-
border: "#2e3252",
|
|
282
|
-
textPrimary: "#e6e8f4",
|
|
283
|
-
textSecondary: "#adafbe",
|
|
284
|
-
textMuted: "#8d90a0",
|
|
285
|
-
brand: "#8b93f8",
|
|
286
|
-
brandHover: "#aab1fb",
|
|
287
|
-
brandContrast: "#16182b",
|
|
288
|
-
moneyIncome: "#22c3b6",
|
|
289
|
-
// Kept byte-identical to DEFAULT_PRESET.dark, which IS this preset (dev#434).
|
|
290
|
-
moneyExpense: "#e4b035",
|
|
291
|
-
moneyNet: "#b39aef",
|
|
292
|
-
moneyNeutral: "#9aa1bd",
|
|
293
|
-
chart: ["#7e72d6", "#9fd8f2", "#5fc4b0", "#3fa45f", "#bfbf5e", "#e8dda0", "#e08c9a", "#c25a78", "#cc78be"],
|
|
294
|
-
heat: {
|
|
295
|
-
neutral: "#363a5a",
|
|
296
|
-
under: "#22c3b6",
|
|
297
|
-
over: "#fbbf24",
|
|
298
|
-
seqLow: "#3a2c14",
|
|
299
|
-
seqHigh: "#fbbf24",
|
|
300
|
-
empty: "rgba(148,163,184,0.10)",
|
|
301
|
-
},
|
|
302
|
-
},
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
id: "solar-dusk",
|
|
306
|
-
name: "Solar Dusk",
|
|
307
|
-
blurb: "Solarized warmth, easy on the eyes",
|
|
308
|
-
light: {
|
|
309
|
-
bgPage: "#ede3cf",
|
|
310
|
-
bgSurface: "#f6ecd9",
|
|
311
|
-
bgSurface2: "#ede3cf",
|
|
312
|
-
border: "#e2d6bd",
|
|
313
|
-
textPrimary: "#463f33",
|
|
314
|
-
textSecondary: "#50493c",
|
|
315
|
-
textMuted: "#696153",
|
|
316
|
-
brand: "#2c6979",
|
|
317
|
-
brandHover: "#1f515f",
|
|
318
|
-
brandContrast: "#ffffff",
|
|
319
|
-
moneyIncome: "#0b6650",
|
|
320
|
-
moneyExpense: "#905902",
|
|
321
|
-
moneyNet: "#7a4fa3",
|
|
322
|
-
moneyNeutral: "#6b6453",
|
|
323
|
-
chart: ["#332288", "#88ccee", "#44aa99", "#117733", "#999933", "#ddcc77", "#cc6677", "#882255", "#aa4499"],
|
|
324
|
-
heat: {
|
|
325
|
-
neutral: "#f1e7d2",
|
|
326
|
-
under: "#0b6650",
|
|
327
|
-
over: "#9c6418",
|
|
328
|
-
seqLow: "#f6ecd0",
|
|
329
|
-
seqHigh: "#9c6418",
|
|
330
|
-
empty: "rgba(148,163,184,0.14)",
|
|
331
|
-
},
|
|
332
|
-
},
|
|
333
|
-
dark: {
|
|
334
|
-
bgPage: "#0e1a1f",
|
|
335
|
-
bgSurface: "#15272e",
|
|
336
|
-
bgSurface2: "#1d333c",
|
|
337
|
-
border: "#2a4750",
|
|
338
|
-
textPrimary: "#d6cdb8",
|
|
339
|
-
textSecondary: "#c2bdab",
|
|
340
|
-
textMuted: "#9c9d91",
|
|
341
|
-
brand: "#5fb8cc",
|
|
342
|
-
brandHover: "#82cfe0",
|
|
343
|
-
brandContrast: "#0a161a",
|
|
344
|
-
moneyIncome: "#22b884",
|
|
345
|
-
moneyExpense: "#f0b94e",
|
|
346
|
-
moneyNet: "#bfa0e0",
|
|
347
|
-
moneyNeutral: "#9aa3a0",
|
|
348
|
-
chart: ["#7e72d6", "#9fd8f2", "#5fc4b0", "#3fa45f", "#bfbf5e", "#e8dda0", "#e08c9a", "#c25a78", "#c873c0"],
|
|
349
|
-
heat: {
|
|
350
|
-
neutral: "#26424b",
|
|
351
|
-
under: "#22b884",
|
|
352
|
-
over: "#f0b94e",
|
|
353
|
-
seqLow: "#1f3138",
|
|
354
|
-
seqHigh: "#f0b94e",
|
|
355
|
-
empty: "rgba(148,163,184,0.10)",
|
|
356
|
-
},
|
|
357
|
-
},
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
id: "zinc-mono",
|
|
361
|
-
name: "Zinc Mono",
|
|
362
|
-
blurb: "True-neutral chrome · data pops",
|
|
363
|
-
light: {
|
|
364
|
-
bgPage: "#ececec",
|
|
365
|
-
bgSurface: "#f7f7f7",
|
|
366
|
-
bgSurface2: "#ececec",
|
|
367
|
-
border: "#e4e4e7",
|
|
368
|
-
textPrimary: "#18181b",
|
|
369
|
-
textSecondary: "#4e4e50",
|
|
370
|
-
textMuted: "#676769",
|
|
371
|
-
brand: "#1d4ed8",
|
|
372
|
-
brandHover: "#1e40af",
|
|
373
|
-
brandContrast: "#ffffff",
|
|
374
|
-
moneyIncome: "#0e7490",
|
|
375
|
-
moneyExpense: "#cf4310",
|
|
376
|
-
moneyNet: "#7c3aed",
|
|
377
|
-
moneyNeutral: "#52525b",
|
|
378
|
-
chart: ["#332288", "#88ccee", "#44aa99", "#117733", "#999933", "#ddcc77", "#cc6677", "#882255", "#aa4499"],
|
|
379
|
-
heat: {
|
|
380
|
-
neutral: "#f4f4f5",
|
|
381
|
-
under: "#0e7490",
|
|
382
|
-
over: "#cf4310",
|
|
383
|
-
seqLow: "#fdeede",
|
|
384
|
-
seqHigh: "#cf4310",
|
|
385
|
-
empty: "rgba(148,163,184,0.14)",
|
|
386
|
-
},
|
|
387
|
-
},
|
|
388
|
-
dark: {
|
|
389
|
-
bgPage: "#09090b",
|
|
390
|
-
bgSurface: "#18181b",
|
|
391
|
-
bgSurface2: "#27272a",
|
|
392
|
-
border: "#3f3f46",
|
|
393
|
-
textPrimary: "#f4f4f5",
|
|
394
|
-
textSecondary: "#b2b2b3",
|
|
395
|
-
textMuted: "#929294",
|
|
396
|
-
brand: "#60a5fa",
|
|
397
|
-
brandHover: "#93c5fd",
|
|
398
|
-
brandContrast: "#0b1220",
|
|
399
|
-
moneyIncome: "#22d3ee",
|
|
400
|
-
moneyExpense: "#f97316",
|
|
401
|
-
moneyNet: "#c4b5fd",
|
|
402
|
-
moneyNeutral: "#a1a1aa",
|
|
403
|
-
chart: ["#7e72d6", "#9fd8f2", "#5fc4b0", "#3fa45f", "#bfbf5e", "#e8dda0", "#e08c9a", "#c25a78", "#cc78be"],
|
|
404
|
-
heat: {
|
|
405
|
-
neutral: "#3f3f46",
|
|
406
|
-
under: "#22d3ee",
|
|
407
|
-
over: "#f97316",
|
|
408
|
-
seqLow: "#3a2410",
|
|
409
|
-
seqHigh: "#f97316",
|
|
410
|
-
empty: "rgba(148,163,184,0.10)",
|
|
411
|
-
},
|
|
412
|
-
},
|
|
413
|
-
},
|
|
414
|
-
];
|
|
415
|
-
|
|
416
130
|
// ── "Imprint" chart hues (feedback #119) ──────────────────────────────────────
|
|
417
131
|
// anyplot's categorical palette (https://anyplot.ai/palette), by a colleague of
|
|
418
132
|
// Marcel's. 8 hues + an amber semantic anchor, derived from Wong 2011 by a
|
|
@@ -472,8 +186,8 @@ export const IMPRINT_PRESET: PalettePreset = {
|
|
|
472
186
|
};
|
|
473
187
|
|
|
474
188
|
// The full-theme switcher from #307 stayed retired (feedback #328) — the default
|
|
475
|
-
// is still the single source of truth for surfaces, brand and money
|
|
476
|
-
//
|
|
189
|
+
// is still the single source of truth for surfaces, brand and money (its five
|
|
190
|
+
// alternatives are gone, see the header). What IS selectable is
|
|
477
191
|
// the categorical chart ramp (feedback #119), so these two presets are the live
|
|
478
192
|
// set; presetById falls back to the default for any stale persisted id.
|
|
479
193
|
/**
|
|
@@ -758,7 +472,8 @@ export function presetById(id: string): PalettePreset {
|
|
|
758
472
|
* element, which is what that list was standing in for.
|
|
759
473
|
*
|
|
760
474
|
* **More contrast (0.32, docs/text-size-harmonization.md §5, §10.5).** With `contrast`
|
|
761
|
-
* the text and border tokens are written one step stronger
|
|
475
|
+
* the text and border tokens are written one step stronger — in a light set the well and
|
|
476
|
+
* the four money colours too (0.36, docs/colour-roles-harmonization.md §13) — and `--text-placeholder` —
|
|
762
477
|
* otherwise derived in tokens.css — is written inline too; without it that inline
|
|
763
478
|
* placeholder is removed again, so the stylesheet's formula applies. The step is made
|
|
764
479
|
* HERE because these tokens are inline: no `[data-contrast=more]` rule could beat them.
|
|
@@ -777,7 +492,9 @@ export function applyTokenSet(
|
|
|
777
492
|
const step = contrast ? contrastStep(t) : null;
|
|
778
493
|
el.style.setProperty("--bg-page", t.bgPage);
|
|
779
494
|
el.style.setProperty("--bg-surface", t.bgSurface);
|
|
780
|
-
|
|
495
|
+
// The light well and money step under More contrast (0.36, colour-roles §13); in dark
|
|
496
|
+
// and at Standard `well` is null and the set's own are written.
|
|
497
|
+
el.style.setProperty("--bg-surface-2", step?.well?.bgSurface2 ?? t.bgSurface2);
|
|
781
498
|
el.style.setProperty("--border", step?.border ?? t.border);
|
|
782
499
|
el.style.setProperty("--text-primary", t.textPrimary);
|
|
783
500
|
el.style.setProperty("--text-secondary", step?.textSecondary ?? t.textSecondary);
|
|
@@ -787,9 +504,9 @@ export function applyTokenSet(
|
|
|
787
504
|
el.style.setProperty("--brand", t.brand);
|
|
788
505
|
el.style.setProperty("--brand-hover", t.brandHover);
|
|
789
506
|
el.style.setProperty("--brand-contrast", t.brandContrast);
|
|
790
|
-
el.style.setProperty("--money-income", t.moneyIncome);
|
|
791
|
-
el.style.setProperty("--money-expense", t.moneyExpense);
|
|
792
|
-
el.style.setProperty("--money-net", t.moneyNet);
|
|
793
|
-
el.style.setProperty("--money-neutral", t.moneyNeutral);
|
|
507
|
+
el.style.setProperty("--money-income", step?.well?.moneyIncome ?? t.moneyIncome);
|
|
508
|
+
el.style.setProperty("--money-expense", step?.well?.moneyExpense ?? t.moneyExpense);
|
|
509
|
+
el.style.setProperty("--money-net", step?.well?.moneyNet ?? t.moneyNet);
|
|
510
|
+
el.style.setProperty("--money-neutral", step?.well?.moneyNeutral ?? t.moneyNeutral);
|
|
794
511
|
t.chart.forEach((c, i) => el.style.setProperty(`--chart-${i + 1}`, c));
|
|
795
512
|
}
|
|
@@ -3,6 +3,7 @@ import { create } from "zustand";
|
|
|
3
3
|
import { persist } from "zustand/middleware";
|
|
4
4
|
import type { StoreApi, UseBoundStore } from "zustand";
|
|
5
5
|
import { logger } from "../lib/logger";
|
|
6
|
+
import { registerDeviceSetting } from "../lib/device-settings";
|
|
6
7
|
import type { HeatStops } from "./chart-palette";
|
|
7
8
|
import { applyTokenSet, DEFAULT_PRESET, presetById, type TokenSet } from "./palette-presets";
|
|
8
9
|
import type { ThemeState, ThemeMode } from "./theme-store";
|
|
@@ -56,6 +57,17 @@ export function createPaletteStore(
|
|
|
56
57
|
"palette",
|
|
57
58
|
),
|
|
58
59
|
);
|
|
60
|
+
// Reset this device's settings (docs/settings-harmonization.md §11.4): the Default
|
|
61
|
+
// palette, STATE ONLY. `useApplyPalette`, where the app mounts it, re-applies through
|
|
62
|
+
// its effect. Never an imperative `applyTokenSet` here: it would remember a token set
|
|
63
|
+
// on <html>, and an app without a palette layer (Kurvenschmiede) would then take the
|
|
64
|
+
// contrast store's palette branch, where a theme switch no longer re-writes the stepped
|
|
65
|
+
// tokens (KS 3.3).
|
|
66
|
+
registerDeviceSetting({
|
|
67
|
+
key: storageKey,
|
|
68
|
+
kind: "appearance",
|
|
69
|
+
reset: () => usePalette.getState().setId(DEFAULT_PRESET.id),
|
|
70
|
+
});
|
|
59
71
|
|
|
60
72
|
/** Apply the active preset's tokens to <html> as inline CSS custom properties,
|
|
61
73
|
* re-applying when the preset or the light/dark theme changes. Tailwind v4
|
package/src/theme/text-size.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { create } from "zustand";
|
|
|
3
3
|
import { persist } from "zustand/middleware";
|
|
4
4
|
import { logger } from "../lib/logger";
|
|
5
5
|
import { readStored } from "../lib/safe-storage";
|
|
6
|
+
import { registerDeviceSetting } from "../lib/device-settings";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* The text size (docs/text-size-harmonization.md §2.1, §3.1, §10.3, §10.6).
|
|
@@ -267,6 +268,13 @@ export function createTextSizeStore(storageKey: string) {
|
|
|
267
268
|
"text-size",
|
|
268
269
|
),
|
|
269
270
|
);
|
|
271
|
+
// Reset this device's settings (docs/settings-harmonization.md §11.4): no choice on
|
|
272
|
+
// this device, so `useApplyTextSize` re-resolves to the account's size, else Normal.
|
|
273
|
+
registerDeviceSetting({
|
|
274
|
+
key: storageKey,
|
|
275
|
+
kind: "appearance",
|
|
276
|
+
reset: () => useTextSizeStore.getState().setSize(null),
|
|
277
|
+
});
|
|
270
278
|
|
|
271
279
|
function useApplyTextSize({ account }: ApplyTextSizeOptions = {}): TextSize {
|
|
272
280
|
const device = useTextSizeStore((s) => s.size);
|
package/src/theme/theme-store.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { useEffect } from "react";
|
|
|
2
2
|
import { create } from "zustand";
|
|
3
3
|
import { persist } from "zustand/middleware";
|
|
4
4
|
import { logger } from "../lib/logger";
|
|
5
|
+
import { registerDeviceSetting } from "../lib/device-settings";
|
|
5
6
|
|
|
6
7
|
export type ThemeMode = "light" | "dark";
|
|
7
8
|
/** What the user chose; "system" tracks the OS `prefers-color-scheme`. */
|
|
@@ -116,6 +117,15 @@ export function createThemeStore(storageKey: string) {
|
|
|
116
117
|
"theme",
|
|
117
118
|
),
|
|
118
119
|
);
|
|
120
|
+
// Reset this device's settings (docs/settings-harmonization.md §11.4): back to
|
|
121
|
+
// "System" through the setter, which re-resolves `mode`; `useApplyTheme` puts the
|
|
122
|
+
// class back and follows the OS again, and the persisted blob is what the pre-paint
|
|
123
|
+
// `applyPersistedTheme` reads next load.
|
|
124
|
+
registerDeviceSetting({
|
|
125
|
+
key: storageKey,
|
|
126
|
+
kind: "appearance",
|
|
127
|
+
reset: () => useTheme.getState().setPreference("system"),
|
|
128
|
+
});
|
|
119
129
|
|
|
120
130
|
function useApplyTheme(): void {
|
|
121
131
|
const mode = useTheme((s) => s.mode);
|
package/src/wizard/types.ts
CHANGED
|
@@ -255,11 +255,3 @@ export interface WizardLabels {
|
|
|
255
255
|
|
|
256
256
|
// The English words live in ./wizard-labels, a module of words (round 0.34).
|
|
257
257
|
export { DEFAULT_WIZARD_LABELS };
|
|
258
|
-
|
|
259
|
-
/** @deprecated 0.34 — `useKitLabels("wizard", DEFAULT_WIZARD_LABELS, labels)`, which the
|
|
260
|
-
* provider reaches too, or StepperNav's and WizardSummary's own `labels`; removed in 0.35
|
|
261
|
-
* (refactor audit 2026-10, API-6a). A merge from before the provider, which no kit
|
|
262
|
-
* component calls. */
|
|
263
|
-
export function resolveWizardLabels(labels?: Partial<WizardLabels>): WizardLabels {
|
|
264
|
-
return labels ? { ...DEFAULT_WIZARD_LABELS, ...labels } : DEFAULT_WIZARD_LABELS;
|
|
265
|
-
}
|
package/tokens.css
CHANGED
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
* - In an app WITH a palette layer (keksdose, kastlan), `applyTokenSet` writes the
|
|
20
20
|
* active preset's values inline on <html>, and those beat these.
|
|
21
21
|
* - In an app WITHOUT one (Kurvenschmiede), these are what paints, and More contrast
|
|
22
|
-
* writes only its
|
|
22
|
+
* writes only its stepped values over them (`reapplyContrastTokens`): four in dark,
|
|
23
|
+
* nine in light, where the well and the money step too.
|
|
23
24
|
*
|
|
24
25
|
* Because it was taken for inert, it drifted silently, and it did — twice. The surfaces
|
|
25
26
|
* and text colour below still held the pre-#328 palette while DEFAULT_PRESET had moved
|
|
@@ -42,9 +43,13 @@
|
|
|
42
43
|
* paint (`applyPersistedTextSize`, or the inline `TEXT_SIZE_INLINE_SCRIPT`).
|
|
43
44
|
*
|
|
44
45
|
* `data-contrast="more"` is "More contrast", from the setting or from
|
|
45
|
-
* `prefers-contrast: more` on "System". The colour tokens
|
|
46
|
-
*
|
|
47
|
-
*
|
|
46
|
+
* `prefers-contrast: more` on "System". The inline colour tokens — the text roles, the
|
|
47
|
+
* border, and in light the well and the money — are stepped in JS (`applyTokenSet`,
|
|
48
|
+
* `contrastStep`), because they are written inline on <html> and no rule here could beat
|
|
49
|
+
* them. What lives here is only what is NOT inline: the focus frame's width below, and
|
|
50
|
+
* in light the status, hue and field-sync literals and `--bg-active`, which step to read
|
|
51
|
+
* on the darker well (0.36, the `:root[data-contrast="more"]:not(.dark)` block after the
|
|
52
|
+
* categorical hues; docs/colour-roles-harmonization.md §13).
|
|
48
53
|
*
|
|
49
54
|
* These names are frozen: apps read them, and so does an app's boot splash. */
|
|
50
55
|
|
|
@@ -635,6 +640,35 @@ html[data-text-size="xlarge"] {
|
|
|
635
640
|
--hue-orange-bg: rgba(124, 45, 18, 0.25);
|
|
636
641
|
}
|
|
637
642
|
|
|
643
|
+
/* ── More contrast in light: the literals on the darker well (0.36) ───────────────
|
|
644
|
+
docs/colour-roles-harmonization.md §13. Under More contrast a light set's well is 10 %
|
|
645
|
+
ink into the card (`WELL_INK_MORE`, stepped in JS with the money, since both are
|
|
646
|
+
inline). On it the light literals above fell to 4.07–4.28:1 as text and
|
|
647
|
+
`--status-edited` to 2.77:1 as a mark, so they step here, each at its light value's
|
|
648
|
+
OKLCH hue and chroma at the lightness that clears its ratio on the stepped well of every
|
|
649
|
+
shipped preset — as §5.5 solved them against the page. On the page and the card they
|
|
650
|
+
then read 5.08:1 and up. The ones not listed hold on the stepped well as they are
|
|
651
|
+
(blue 4.60, indigo 5.42, purple 4.79; synced 4.89, pending 4.60, error 4.44 and the
|
|
652
|
+
danger line 3.22, marks and lines needing 3); `--warning-border-strong` is
|
|
653
|
+
`var(--warning)` in light and follows.
|
|
654
|
+
|
|
655
|
+
`--bg-active` (a digit key's hover, Button primary's, keksdose's assistant bubbles on
|
|
656
|
+
the well) sat 1.04:1 from a 10 % well at 12 %; at 16 % it is 1.12–1.15:1 from it.
|
|
657
|
+
|
|
658
|
+
`(0,3,0)` outranks `:root` and `:root, .dark` whatever the order, and `.dark` on
|
|
659
|
+
<html> leaves it out: dark does not step (§13.3, decision 4).
|
|
660
|
+
tokens-css-audit.test.ts measures every pair here. */
|
|
661
|
+
:root[data-contrast="more"]:not(.dark) {
|
|
662
|
+
--danger: #ba0739; /* solved: 4.53:1 on the worst stepped well (was 4.31) */
|
|
663
|
+
--warning: #9a4300; /* solved: 4.53:1 (was 4.13) */
|
|
664
|
+
--success: #006a4d; /* solved: 4.54:1 (was 4.13) */
|
|
665
|
+
--info: #006197; /* solved: 4.56:1 (was 4.07) */
|
|
666
|
+
--hue-teal: #006862; /* solved: 4.56:1 (was 4.15) */
|
|
667
|
+
--hue-orange: #a93400; /* solved: 4.53:1 (was 4.11) */
|
|
668
|
+
--status-edited: #b66200; /* solved, a mark: 3.04:1 (was 2.77) */
|
|
669
|
+
--bg-active: color-mix(in oklab, var(--text-primary) 16%, var(--bg-surface));
|
|
670
|
+
}
|
|
671
|
+
|
|
638
672
|
/* ── Role utilities (0.33, docs/colour-roles-harmonization.md §7, k25) ─────────────
|
|
639
673
|
*
|
|
640
674
|
* `text-muted`, `bg-surface-2`, `border-subtle`, `ring-brand`, `fill-surface` … instead of
|