vira 32.0.0-beta.0 → 32.0.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/dist/elements/color/vira-all-color-space-sliders.element.d.ts +11 -0
- package/dist/elements/color/vira-all-color-space-sliders.element.js +55 -0
- package/dist/elements/color/vira-all-spaces-color-picker.element.d.ts +15 -0
- package/dist/elements/color/vira-all-spaces-color-picker.element.js +73 -0
- package/dist/elements/color/vira-color-details.element.d.ts +14 -0
- package/{src/elements/color/vira-color-details.element.ts → dist/elements/color/vira-color-details.element.js} +43 -59
- package/dist/elements/color/vira-color-format-sliders.element.d.ts +14 -0
- package/dist/elements/color/vira-color-format-sliders.element.js +60 -0
- package/dist/elements/color/vira-color-pair-contrast-summary.element.d.ts +9 -0
- package/{src/elements/color/vira-color-pair-contrast-summary.element.ts → dist/elements/color/vira-color-pair-contrast-summary.element.js} +68 -100
- package/dist/elements/color/vira-color-pair.element.d.ts +17 -0
- package/{src/elements/color/vira-color-pair.element.ts → dist/elements/color/vira-color-pair.element.js} +50 -71
- package/dist/elements/color/vira-color-picker.element.d.ts +20 -0
- package/{src/elements/color/vira-color-picker.element.ts → dist/elements/color/vira-color-picker.element.js} +92 -117
- package/dist/elements/color/vira-color-slider.element.d.ts +14 -0
- package/dist/elements/color/vira-color-slider.element.js +124 -0
- package/dist/elements/color/vira-color-swatch.element.d.ts +20 -0
- package/{src/elements/color/vira-color-swatch.element.ts → dist/elements/color/vira-color-swatch.element.js} +6 -16
- package/dist/elements/color/vira-contrast-indicator.element.d.ts +10 -0
- package/{src/elements/color/vira-contrast-indicator.element.ts → dist/elements/color/vira-contrast-indicator.element.js} +13 -28
- package/dist/elements/index.js +39 -0
- package/dist/elements/pop-up/vira-menu-item.element.d.ts +38 -0
- package/{src/elements/pop-up/vira-menu-item.element.ts → dist/elements/pop-up/vira-menu-item.element.js} +80 -117
- package/dist/elements/pop-up/vira-menu-trigger.element.d.ts +45 -0
- package/dist/elements/pop-up/vira-menu-trigger.element.js +100 -0
- package/dist/elements/pop-up/vira-menu.element.d.ts +36 -0
- package/{src/elements/pop-up/vira-menu.element.ts → dist/elements/pop-up/vira-menu.element.js} +28 -31
- package/dist/elements/pop-up/vira-pop-up-trigger.element.d.ts +109 -0
- package/dist/elements/pop-up/vira-pop-up-trigger.element.js +408 -0
- package/dist/elements/vira-absolute-time.element.d.ts +35 -0
- package/dist/elements/vira-absolute-time.element.js +43 -0
- package/dist/elements/vira-bold-text.element.d.ts +9 -0
- package/{src/elements/vira-bold-text.element.ts → dist/elements/vira-bold-text.element.js} +11 -10
- package/dist/elements/vira-button.element.d.ts +44 -0
- package/{src/elements/vira-button.element.ts → dist/elements/vira-button.element.js} +107 -255
- package/dist/elements/vira-card.element.d.ts +18 -0
- package/{src/elements/vira-card.element.ts → dist/elements/vira-card.element.js} +19 -18
- package/dist/elements/vira-checkbox.element.d.ts +44 -0
- package/{src/elements/vira-checkbox.element.ts → dist/elements/vira-checkbox.element.js} +48 -95
- package/dist/elements/vira-collapsible-card.element.d.ts +36 -0
- package/{src/elements/vira-collapsible-card.element.ts → dist/elements/vira-collapsible-card.element.js} +44 -71
- package/dist/elements/vira-collapsible-wrapper.element.d.ts +30 -0
- package/{src/elements/vira-collapsible-wrapper.element.ts → dist/elements/vira-collapsible-wrapper.element.js} +47 -59
- package/dist/elements/vira-date-input.element.d.ts +47 -0
- package/dist/elements/vira-date-input.element.js +142 -0
- package/dist/elements/vira-drawer.element.d.ts +24 -0
- package/{src/elements/vira-drawer.element.ts → dist/elements/vira-drawer.element.js} +98 -125
- package/dist/elements/vira-dropdown.element.d.ts +43 -0
- package/dist/elements/vira-dropdown.element.js +247 -0
- package/dist/elements/vira-error.element.d.ts +7 -0
- package/{src/elements/vira-error.element.ts → dist/elements/vira-error.element.js} +7 -8
- package/dist/elements/vira-form.element.d.ts +56 -0
- package/dist/elements/vira-form.element.js +376 -0
- package/dist/elements/vira-icon.element.d.ts +13 -0
- package/{src/elements/vira-icon.element.ts → dist/elements/vira-icon.element.js} +12 -16
- package/dist/elements/vira-image.element.d.ts +45 -0
- package/{src/elements/vira-image.element.ts → dist/elements/vira-image.element.js} +50 -70
- package/dist/elements/vira-input.element.d.ts +64 -0
- package/{src/elements/vira-input.element.ts → dist/elements/vira-input.element.js} +112 -167
- package/dist/elements/vira-json-form.element.d.ts +35 -0
- package/{src/elements/vira-json-form.element.ts → dist/elements/vira-json-form.element.js} +356 -522
- package/dist/elements/vira-link.element.d.ts +78 -0
- package/{src/elements/vira-link.element.ts → dist/elements/vira-link.element.js} +24 -83
- package/dist/elements/vira-modal.element.d.ts +40 -0
- package/{src/elements/vira-modal.element.ts → dist/elements/vira-modal.element.js} +68 -104
- package/dist/elements/vira-progress.element.d.ts +18 -0
- package/{src/elements/vira-progress.element.ts → dist/elements/vira-progress.element.js} +12 -25
- package/dist/elements/vira-relative-time.element.d.ts +42 -0
- package/dist/elements/vira-relative-time.element.js +96 -0
- package/dist/elements/vira-select.element.d.ts +44 -0
- package/{src/elements/vira-select.element.ts → dist/elements/vira-select.element.js} +89 -138
- package/dist/elements/vira-tabs.element.d.ts +124 -0
- package/{src/elements/vira-tabs.element.ts → dist/elements/vira-tabs.element.js} +242 -446
- package/dist/elements/vira-tag.element.d.ts +40 -0
- package/{src/elements/vira-tag.element.ts → dist/elements/vira-tag.element.js} +152 -266
- package/dist/elements/vira-text-area.element.d.ts +48 -0
- package/{src/elements/vira-text-area.element.ts → dist/elements/vira-text-area.element.js} +52 -70
- package/dist/elements/vira-theme-switcher.element.d.ts +17 -0
- package/{src/elements/vira-theme-switcher.element.ts → dist/elements/vira-theme-switcher.element.js} +34 -49
- package/dist/icons/colored-icon.d.ts +11 -0
- package/{src/icons/colored-icon.ts → dist/icons/colored-icon.js} +17 -24
- package/dist/icons/icon-css-vars.d.ts +14 -0
- package/{src/icons/icon-css-vars.ts → dist/icons/icon-css-vars.js} +1 -2
- package/{src/icons/icon-svg.ts → dist/icons/icon-svg.d.ts} +3 -15
- package/dist/icons/icon-svg.js +12 -0
- package/dist/icons/icon-svgs/16/check-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/check-16.icon.ts → dist/icons/icon-svgs/16/check-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/chevron-down-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/chevron-down-16.icon.ts → dist/icons/icon-svgs/16/chevron-down-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/chevron-up-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/chevron-up-16.icon.ts → dist/icons/icon-svgs/16/chevron-up-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/dash-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/dash-16.icon.ts → dist/icons/icon-svgs/16/dash-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/element-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/element-16.icon.ts → dist/icons/icon-svgs/16/element-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/plus-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/plus-16.icon.ts → dist/icons/icon-svgs/16/plus-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/upload-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/upload-16.icon.ts → dist/icons/icon-svgs/16/upload-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/16/x-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/16/x-16.icon.ts → dist/icons/icon-svgs/16/x-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/arrow-down-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/arrow-down-24.icon.ts → dist/icons/icon-svgs/24/arrow-down-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/arrow-left-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/arrow-left-24.icon.ts → dist/icons/icon-svgs/24/arrow-left-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/arrow-right-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/arrow-right-24.icon.ts → dist/icons/icon-svgs/24/arrow-right-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/arrow-up-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/arrow-up-24.icon.ts → dist/icons/icon-svgs/24/arrow-up-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/auto-theme-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/auto-theme-24.icon.ts → dist/icons/icon-svgs/24/auto-theme-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/bell-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/bell-24.icon.ts → dist/icons/icon-svgs/24/bell-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/chat-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/chat-24.icon.ts → dist/icons/icon-svgs/24/chat-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/check-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/check-24.icon.ts → dist/icons/icon-svgs/24/check-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/chevron-down-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/chevron-down-24.icon.ts → dist/icons/icon-svgs/24/chevron-down-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/chevron-up-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/chevron-up-24.icon.ts → dist/icons/icon-svgs/24/chevron-up-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/close-x-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/close-x-24.icon.ts → dist/icons/icon-svgs/24/close-x-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/commit-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/commit-24.icon.ts → dist/icons/icon-svgs/24/commit-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/copy-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/copy-24.icon.ts → dist/icons/icon-svgs/24/copy-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/document-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/document-24.icon.ts → dist/icons/icon-svgs/24/document-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/document-search-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/document-search-24.icon.ts → dist/icons/icon-svgs/24/document-search-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/double-chevron-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/double-chevron-24.icon.ts → dist/icons/icon-svgs/24/double-chevron-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/element-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/element-24.icon.ts → dist/icons/icon-svgs/24/element-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/external-link-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/external-link-24.icon.ts → dist/icons/icon-svgs/24/external-link-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/eye-closed-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/eye-closed-24.icon.ts → dist/icons/icon-svgs/24/eye-closed-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/eye-open-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/eye-open-24.icon.ts → dist/icons/icon-svgs/24/eye-open-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/filter-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/filter-24.icon.ts → dist/icons/icon-svgs/24/filter-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/globe-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/globe-24.icon.ts → dist/icons/icon-svgs/24/globe-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/link-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/link-24.icon.ts → dist/icons/icon-svgs/24/link-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/loader-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/loader-24.icon.ts → dist/icons/icon-svgs/24/loader-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/loader-animated-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/loader-animated-24.icon.ts → dist/icons/icon-svgs/24/loader-animated-24.icon.js} +6 -8
- package/dist/icons/icon-svgs/24/lock-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/lock-24.icon.ts → dist/icons/icon-svgs/24/lock-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/magnifying-glass-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/magnifying-glass-24.icon.ts → dist/icons/icon-svgs/24/magnifying-glass-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/moon-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/moon-24.icon.ts → dist/icons/icon-svgs/24/moon-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/options-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/options-24.icon.ts → dist/icons/icon-svgs/24/options-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/pencil-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/pencil-24.icon.ts → dist/icons/icon-svgs/24/pencil-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/plus-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/plus-24.icon.ts → dist/icons/icon-svgs/24/plus-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/printer-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/printer-24.icon.ts → dist/icons/icon-svgs/24/printer-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/shield-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/shield-24.icon.ts → dist/icons/icon-svgs/24/shield-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/sort-ascending-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/sort-ascending-24.icon.ts → dist/icons/icon-svgs/24/sort-ascending-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/sort-descending-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/sort-descending-24.icon.ts → dist/icons/icon-svgs/24/sort-descending-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/sparkle-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/sparkle-24.icon.ts → dist/icons/icon-svgs/24/sparkle-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/speaker-loud-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/speaker-loud-24.icon.ts → dist/icons/icon-svgs/24/speaker-loud-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/speaker-medium-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/speaker-medium-24.icon.ts → dist/icons/icon-svgs/24/speaker-medium-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/speaker-muted-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/speaker-muted-24.icon.ts → dist/icons/icon-svgs/24/speaker-muted-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/speaker-quiet-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/speaker-quiet-24.icon.ts → dist/icons/icon-svgs/24/speaker-quiet-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/star-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/star-24.icon.ts → dist/icons/icon-svgs/24/star-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/status-failure-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/status-failure-24.icon.ts → dist/icons/icon-svgs/24/status-failure-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/status-in-progress-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/status-in-progress-24.icon.ts → dist/icons/icon-svgs/24/status-in-progress-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/status-success-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/status-success-24.icon.ts → dist/icons/icon-svgs/24/status-success-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/status-unknown-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/status-unknown-24.icon.ts → dist/icons/icon-svgs/24/status-unknown-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/status-warning-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/status-warning-24.icon.ts → dist/icons/icon-svgs/24/status-warning-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/sun-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/sun-24.icon.ts → dist/icons/icon-svgs/24/sun-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/upload-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/upload-24.icon.ts → dist/icons/icon-svgs/24/upload-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/24/x-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/24/x-24.icon.ts → dist/icons/icon-svgs/24/x-24.icon.js} +4 -5
- package/dist/icons/index.d.ts +197 -0
- package/{src/icons/index.ts → dist/icons/index.js} +60 -65
- package/dist/icons/lucide-icons.d.ts +15 -0
- package/dist/icons/lucide-icons.js +79 -0
- package/dist/icons/sized-icon.d.ts +8 -0
- package/{src/icons/sized-icon.ts → dist/icons/sized-icon.js} +1 -3
- package/dist/index.js +4 -0
- package/dist/styles/disabled.d.ts +6 -0
- package/{src/styles/disabled.ts → dist/styles/disabled.js} +2 -3
- package/dist/styles/durations.d.ts +22 -0
- package/{src/styles/durations.ts → dist/styles/durations.js} +1 -2
- package/dist/styles/focus.d.ts +26 -0
- package/{src/styles/focus.ts → dist/styles/focus.js} +12 -40
- package/dist/styles/font.d.ts +12 -0
- package/{src/styles/font.ts → dist/styles/font.js} +1 -3
- package/dist/styles/form-styles.d.ts +46 -0
- package/dist/styles/form-styles.js +53 -0
- package/dist/styles/form-variants.d.ts +117 -0
- package/{src/styles/form-variants.ts → dist/styles/form-variants.js} +34 -42
- package/{src/styles/index.ts → dist/styles/index.d.ts} +0 -1
- package/dist/styles/index.js +14 -0
- package/dist/styles/native-styles.d.ts +13 -0
- package/{src/styles/native-styles.ts → dist/styles/native-styles.js} +3 -5
- package/dist/styles/scrollbar.d.ts +6 -0
- package/{src/styles/scrollbar.ts → dist/styles/scrollbar.js} +3 -4
- package/dist/styles/shadows.d.ts +19 -0
- package/{src/styles/shadows.ts → dist/styles/shadows.js} +5 -7
- package/dist/styles/user-select.d.ts +6 -0
- package/{src/styles/user-select.ts → dist/styles/user-select.js} +2 -3
- package/dist/styles/vira-color-palette.d.ts +178 -0
- package/{src/styles/vira-color-palette.ts → dist/styles/vira-color-palette.js} +1 -3
- package/dist/styles/vira-color-theme-object.d.ts +65 -0
- package/dist/styles/vira-color-theme-object.js +65 -0
- package/dist/styles/vira-color-theme.d.ts +2785 -0
- package/{src/styles/vira-color-theme.ts → dist/styles/vira-color-theme.js} +1222 -1227
- package/dist/util/color-local-storage.client.d.ts +4 -0
- package/dist/util/color-local-storage.client.js +6 -0
- package/dist/util/define-table.d.ts +115 -0
- package/dist/util/define-table.js +115 -0
- package/dist/util/define-vira-element.d.ts +18 -0
- package/dist/util/define-vira-element.js +19 -0
- package/dist/util/dynamic-element.d.ts +62 -0
- package/dist/util/dynamic-element.js +61 -0
- package/dist/util/index.js +11 -0
- package/dist/util/overflow-observer.d.ts +25 -0
- package/{src/util/overflow-observer.ts → dist/util/overflow-observer.js} +1 -30
- package/dist/util/pop-up-helpers.d.ts +59 -0
- package/dist/util/pop-up-helpers.js +66 -0
- package/dist/util/pop-up-manager.d.ts +200 -0
- package/dist/util/pop-up-manager.js +258 -0
- package/dist/util/shared-text-input-logic.d.ts +69 -0
- package/dist/util/shared-text-input-logic.js +114 -0
- package/dist/util/vira-form-fields.d.ts +145 -0
- package/dist/util/vira-form-fields.js +66 -0
- package/dist/util/vira-json-schema.d.ts +206 -0
- package/{src/util/vira-json-schema.ts → dist/util/vira-json-schema.js} +155 -298
- package/{src/util/vira-select-option.ts → dist/util/vira-select-option.d.ts} +2 -9
- package/dist/util/vira-select-option.js +8 -0
- package/dist/util/vira-theme-client.d.ts +83 -0
- package/dist/util/vira-theme-client.js +93 -0
- package/package.json +13 -13
- package/src/elements/color/vira-all-color-space-sliders.element.ts +0 -66
- package/src/elements/color/vira-all-spaces-color-picker.element.ts +0 -85
- package/src/elements/color/vira-color-format-sliders.element.ts +0 -78
- package/src/elements/color/vira-color-slider.element.ts +0 -169
- package/src/elements/pop-up/vira-menu-trigger.element.ts +0 -135
- package/src/elements/pop-up/vira-pop-up-trigger.element.ts +0 -539
- package/src/elements/vira-absolute-time.element.ts +0 -81
- package/src/elements/vira-date-input.element.ts +0 -185
- package/src/elements/vira-dropdown.element.ts +0 -310
- package/src/elements/vira-form.element.ts +0 -466
- package/src/elements/vira-relative-time.element.ts +0 -135
- package/src/icons/icon-color.test-helper.ts +0 -9
- package/src/icons/lucide-icons.ts +0 -120
- package/src/styles/form-styles.ts +0 -86
- package/src/styles/vira-color-palette.json +0 -170
- package/src/styles/vira-color-theme-object.ts +0 -170
- package/src/util/color-local-storage.client.ts +0 -7
- package/src/util/define-table.ts +0 -286
- package/src/util/define-vira-element.ts +0 -29
- package/src/util/dynamic-element.ts +0 -128
- package/src/util/pop-up-helpers.ts +0 -133
- package/src/util/pop-up-manager.ts +0 -434
- package/src/util/shared-text-input-logic.ts +0 -192
- package/src/util/vira-form-fields.ts +0 -195
- package/src/util/vira-theme-client.ts +0 -140
- /package/{src/elements/index.ts → dist/elements/index.d.ts} +0 -0
- /package/{src/index.ts → dist/index.d.ts} +0 -0
- /package/{src/util/index.ts → dist/util/index.d.ts} +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {type PartialWithUndefined} from '@augment-vir/common';
|
|
2
|
-
|
|
1
|
+
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
3
2
|
/**
|
|
4
3
|
* Options for `ViraSelect` and `ViraDropdown`.
|
|
5
4
|
*
|
|
@@ -14,7 +13,6 @@ export type ViraSelectOption = {
|
|
|
14
13
|
} & PartialWithUndefined<{
|
|
15
14
|
disabled: boolean;
|
|
16
15
|
}>;
|
|
17
|
-
|
|
18
16
|
/**
|
|
19
17
|
* A group of options for `ViraSelect`, rendered as an `<optgroup>`.
|
|
20
18
|
*
|
|
@@ -25,14 +23,9 @@ export type ViraSelectOptionGroup = {
|
|
|
25
23
|
groupName: string;
|
|
26
24
|
options: ReadonlyArray<Readonly<ViraSelectOption>>;
|
|
27
25
|
};
|
|
28
|
-
|
|
29
26
|
/**
|
|
30
27
|
* Type guard to determine if a `ViraSelect` options entry is a group.
|
|
31
28
|
*
|
|
32
29
|
* @category Internal
|
|
33
30
|
*/
|
|
34
|
-
export function isViraSelectOptionGroup(
|
|
35
|
-
entry: Readonly<ViraSelectOption> | Readonly<ViraSelectOptionGroup>,
|
|
36
|
-
): entry is Readonly<ViraSelectOptionGroup> {
|
|
37
|
-
return 'groupName' in entry;
|
|
38
|
-
}
|
|
31
|
+
export declare function isViraSelectOptionGroup(entry: Readonly<ViraSelectOption> | Readonly<ViraSelectOptionGroup>): entry is Readonly<ViraSelectOptionGroup>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type MaybePromise, type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
+
import { LocalStorageClient } from '@electrovir/local-storage-client';
|
|
3
|
+
/**
|
|
4
|
+
* A user-facing selection of which theme to display. `Auto` follows the system color scheme; the
|
|
5
|
+
* other values force a specific theme regardless of system preference.
|
|
6
|
+
*
|
|
7
|
+
* @category Internal
|
|
8
|
+
*/
|
|
9
|
+
export declare enum ViraThemeSelection {
|
|
10
|
+
Light = "light",
|
|
11
|
+
Dark = "dark",
|
|
12
|
+
Auto = "auto"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Used by {@link ViraThemeClient} to apply themes. By default, vira themes will be applied (via
|
|
16
|
+
* {@link defaultApplyThemeCallback}).
|
|
17
|
+
*
|
|
18
|
+
* @category Internal
|
|
19
|
+
* @default `defaultApplyThemeCallback`
|
|
20
|
+
*/
|
|
21
|
+
export type ApplyThemeCallback = (params: Readonly<{
|
|
22
|
+
useDarkTheme: boolean;
|
|
23
|
+
}>) => MaybePromise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Default implementation of {@link ApplyThemeCallback}, which simply applies Vira themes.
|
|
26
|
+
*
|
|
27
|
+
* @category Internal
|
|
28
|
+
*/
|
|
29
|
+
export declare const defaultApplyThemeCallback: ApplyThemeCallback;
|
|
30
|
+
/**
|
|
31
|
+
* Constructor params for {@link ViraThemeClient}.
|
|
32
|
+
*
|
|
33
|
+
* @category Internal
|
|
34
|
+
*/
|
|
35
|
+
export type ViraThemeClientParams = PartialWithUndefined<{
|
|
36
|
+
/**
|
|
37
|
+
* Called whenever the effective theme should change. If not provided, the default Vira themes
|
|
38
|
+
* will be used.
|
|
39
|
+
*/
|
|
40
|
+
applyTheme: ApplyThemeCallback;
|
|
41
|
+
/**
|
|
42
|
+
* Override the LocalStorage store name used for theme persistence. Useful if a single page
|
|
43
|
+
* hosts multiple isolated theme clients.
|
|
44
|
+
*
|
|
45
|
+
* @default 'vira-theme'
|
|
46
|
+
*/
|
|
47
|
+
storeName: string;
|
|
48
|
+
}>;
|
|
49
|
+
declare const themeStorageShapes: {
|
|
50
|
+
selectedTheme: import("object-shape-tester").Shape<{
|
|
51
|
+
theme: import("object-shape-tester").Shape<import("@sinclair/typebox").TUnion<(import("@sinclair/typebox").TLiteral<ViraThemeSelection.Light> | import("@sinclair/typebox").TLiteral<ViraThemeSelection.Dark> | import("@sinclair/typebox").TLiteral<ViraThemeSelection.Auto>)[]>>;
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Tracks the user's {@link ViraThemeSelection} and bridges it to a consumer-supplied `applyTheme`
|
|
56
|
+
* callback. Persists the selection in LocalStorage via an internal `LocalStorageClient`, and
|
|
57
|
+
* listens for system color-scheme changes to re-apply the theme in auto mode without persisting.
|
|
58
|
+
*
|
|
59
|
+
* The initial theme is applied during construction.
|
|
60
|
+
*
|
|
61
|
+
* @category Util
|
|
62
|
+
*/
|
|
63
|
+
export declare class ViraThemeClient {
|
|
64
|
+
/** The callback that will be called to apply a new theme. */
|
|
65
|
+
protected readonly applyThemeCallback: ApplyThemeCallback;
|
|
66
|
+
/** Contains the user's last selected theme, saving and loading it to disk for persistence. */
|
|
67
|
+
protected readonly localStorageClient: LocalStorageClient<typeof themeStorageShapes>;
|
|
68
|
+
/** A callback to remove the global theme preference listener. */
|
|
69
|
+
protected readonly removeThemePreferenceListener: () => void;
|
|
70
|
+
constructor(params?: Readonly<ViraThemeClientParams>);
|
|
71
|
+
/**
|
|
72
|
+
* The currently selected theme. If you use multiple clients to set the same theme, this might
|
|
73
|
+
* get out of sync.
|
|
74
|
+
*/
|
|
75
|
+
get currentTheme(): ViraThemeSelection;
|
|
76
|
+
/** Set the selected theme. */
|
|
77
|
+
setSelectedTheme(selection: ViraThemeSelection): void;
|
|
78
|
+
/** Cleanup internal state and listeners. */
|
|
79
|
+
destroy(): void;
|
|
80
|
+
/** Apply the currently selected theme. */
|
|
81
|
+
protected applySelection(selection: ViraThemeSelection): void;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { assert } from '@augment-vir/assert';
|
|
2
|
+
import { LocalStorageClient } from '@electrovir/local-storage-client';
|
|
3
|
+
import { defineShape, enumShape } from 'object-shape-tester';
|
|
4
|
+
import { applyColorThemeViaStyleElement } from 'theme-vir/dist/color-theme/apply-color-theme.js';
|
|
5
|
+
import { listenTo } from 'typed-event-target';
|
|
6
|
+
import { viraTheme, viraThemeDarkOverride } from '../styles/vira-color-theme.js';
|
|
7
|
+
/**
|
|
8
|
+
* A user-facing selection of which theme to display. `Auto` follows the system color scheme; the
|
|
9
|
+
* other values force a specific theme regardless of system preference.
|
|
10
|
+
*
|
|
11
|
+
* @category Internal
|
|
12
|
+
*/
|
|
13
|
+
export var ViraThemeSelection;
|
|
14
|
+
(function (ViraThemeSelection) {
|
|
15
|
+
ViraThemeSelection["Light"] = "light";
|
|
16
|
+
ViraThemeSelection["Dark"] = "dark";
|
|
17
|
+
ViraThemeSelection["Auto"] = "auto";
|
|
18
|
+
})(ViraThemeSelection || (ViraThemeSelection = {}));
|
|
19
|
+
/**
|
|
20
|
+
* Default implementation of {@link ApplyThemeCallback}, which simply applies Vira themes.
|
|
21
|
+
*
|
|
22
|
+
* @category Internal
|
|
23
|
+
*/
|
|
24
|
+
export const defaultApplyThemeCallback = ({ useDarkTheme }) => {
|
|
25
|
+
applyColorThemeViaStyleElement(viraTheme, useDarkTheme ? viraThemeDarkOverride : undefined);
|
|
26
|
+
};
|
|
27
|
+
const darkSchemeMediaQuery = '(prefers-color-scheme: dark)';
|
|
28
|
+
const themeStorageShapes = {
|
|
29
|
+
selectedTheme: defineShape({
|
|
30
|
+
theme: enumShape(ViraThemeSelection),
|
|
31
|
+
}),
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Tracks the user's {@link ViraThemeSelection} and bridges it to a consumer-supplied `applyTheme`
|
|
35
|
+
* callback. Persists the selection in LocalStorage via an internal `LocalStorageClient`, and
|
|
36
|
+
* listens for system color-scheme changes to re-apply the theme in auto mode without persisting.
|
|
37
|
+
*
|
|
38
|
+
* The initial theme is applied during construction.
|
|
39
|
+
*
|
|
40
|
+
* @category Util
|
|
41
|
+
*/
|
|
42
|
+
export class ViraThemeClient {
|
|
43
|
+
/** The callback that will be called to apply a new theme. */
|
|
44
|
+
applyThemeCallback = defaultApplyThemeCallback;
|
|
45
|
+
/** Contains the user's last selected theme, saving and loading it to disk for persistence. */
|
|
46
|
+
localStorageClient;
|
|
47
|
+
/** A callback to remove the global theme preference listener. */
|
|
48
|
+
removeThemePreferenceListener = listenTo(globalThis.matchMedia(darkSchemeMediaQuery), 'change', (event) => {
|
|
49
|
+
assert.instanceOf(event, MediaQueryListEvent);
|
|
50
|
+
if (this.currentTheme === ViraThemeSelection.Auto) {
|
|
51
|
+
void this.applyThemeCallback({
|
|
52
|
+
useDarkTheme: event.matches,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
constructor(params = {}) {
|
|
57
|
+
if (params.applyTheme) {
|
|
58
|
+
this.applyThemeCallback = params.applyTheme;
|
|
59
|
+
}
|
|
60
|
+
this.localStorageClient = new LocalStorageClient(themeStorageShapes, {
|
|
61
|
+
storeName: params.storeName || 'vira-theme',
|
|
62
|
+
});
|
|
63
|
+
this.applySelection(this.currentTheme);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The currently selected theme. If you use multiple clients to set the same theme, this might
|
|
67
|
+
* get out of sync.
|
|
68
|
+
*/
|
|
69
|
+
get currentTheme() {
|
|
70
|
+
return this.localStorageClient.get.selectedTheme()?.theme || ViraThemeSelection.Auto;
|
|
71
|
+
}
|
|
72
|
+
/** Set the selected theme. */
|
|
73
|
+
setSelectedTheme(selection) {
|
|
74
|
+
this.applySelection(selection);
|
|
75
|
+
this.localStorageClient.set.selectedTheme({
|
|
76
|
+
theme: selection,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** Cleanup internal state and listeners. */
|
|
80
|
+
destroy() {
|
|
81
|
+
this.removeThemePreferenceListener();
|
|
82
|
+
this.localStorageClient.destroy();
|
|
83
|
+
}
|
|
84
|
+
/** Apply the currently selected theme. */
|
|
85
|
+
applySelection(selection) {
|
|
86
|
+
const useDarkTheme = selection === ViraThemeSelection.Dark ||
|
|
87
|
+
(selection === ViraThemeSelection.Auto &&
|
|
88
|
+
globalThis.matchMedia(darkSchemeMediaQuery).matches);
|
|
89
|
+
void this.applyThemeCallback({
|
|
90
|
+
useDarkTheme,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vira",
|
|
3
|
-
"version": "32.0.0
|
|
3
|
+
"version": "32.0.0",
|
|
4
4
|
"description": "A simple and highly versatile design system using element-vir.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
},
|
|
28
28
|
"sideEffects": false,
|
|
29
29
|
"type": "module",
|
|
30
|
-
"main": "
|
|
31
|
-
"module": "
|
|
32
|
-
"types": "
|
|
30
|
+
"main": "dist/index.js",
|
|
31
|
+
"module": "dist/index.js",
|
|
32
|
+
"types": "dist/index.d.ts",
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "npm run docs",
|
|
35
35
|
"compile": "virmator compile",
|
|
@@ -38,13 +38,13 @@
|
|
|
38
38
|
"test:docs": "virmator docs check"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@augment-vir/assert": "^32.3.0
|
|
42
|
-
"@augment-vir/common": "^32.3.0
|
|
43
|
-
"@augment-vir/web": "^32.3.0
|
|
44
|
-
"@electrovir/color": "^2.0.0
|
|
41
|
+
"@augment-vir/assert": "^32.3.0",
|
|
42
|
+
"@augment-vir/common": "^32.3.0",
|
|
43
|
+
"@augment-vir/web": "^32.3.0",
|
|
44
|
+
"@electrovir/color": "^2.0.0",
|
|
45
45
|
"@electrovir/local-storage-client": "^0.1.1",
|
|
46
46
|
"date-vir": "^9.1.1",
|
|
47
|
-
"device-navigation": "^5.0.0
|
|
47
|
+
"device-navigation": "^5.0.0",
|
|
48
48
|
"json-schema-to-ts": "^3.1.1",
|
|
49
49
|
"lit-css-vars": "^3.6.3",
|
|
50
50
|
"object-shape-tester": "^6.15.0",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"typed-event-target": "^4.3.3"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@augment-vir/test": "^32.3.0
|
|
57
|
+
"@augment-vir/test": "^32.3.0",
|
|
58
58
|
"@web/dev-server-esbuild": "^2.0.0",
|
|
59
59
|
"@web/test-runner": "^1.0.0",
|
|
60
60
|
"@web/test-runner-commands": "^1.0.1",
|
|
@@ -64,16 +64,16 @@
|
|
|
64
64
|
"istanbul-smart-text-reporter": "^1.1.5",
|
|
65
65
|
"lucide-static": "^1.42.0",
|
|
66
66
|
"markdown-code-example-inserter": "^3.0.6",
|
|
67
|
-
"theme-vir": "^29.0.0
|
|
67
|
+
"theme-vir": "^29.0.0",
|
|
68
68
|
"typedoc": "^0.28.20",
|
|
69
69
|
"typescript": "^6.0.3",
|
|
70
70
|
"vite": "^8.2.2",
|
|
71
71
|
"vite-tsconfig-paths": "^6.1.1"
|
|
72
72
|
},
|
|
73
73
|
"peerDependencies": {
|
|
74
|
-
"element-vir": "^27.0.0
|
|
74
|
+
"element-vir": "^27.0.0",
|
|
75
75
|
"lucide-static": ">=0.460",
|
|
76
|
-
"theme-vir": "^29.0.0
|
|
76
|
+
"theme-vir": "^29.0.0"
|
|
77
77
|
},
|
|
78
78
|
"engines": {
|
|
79
79
|
"node": ">=22"
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/* node:coverage disable */
|
|
2
|
-
|
|
3
|
-
import {getObjectTypedKeys, getObjectTypedValues} from '@augment-vir/common';
|
|
4
|
-
import {colorFormatsBySpace} from '@electrovir/color/dist/data/color-class/color-formats.js';
|
|
5
|
-
import {type Color} from '@electrovir/color/dist/data/color-class/color.js';
|
|
6
|
-
import {css, defineElement, defineElementEvent, html, listen} from 'element-vir';
|
|
7
|
-
import {ViraColorFormatSliders} from './vira-color-format-sliders.element.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Color sliders for all color spaces.
|
|
11
|
-
*
|
|
12
|
-
* @category Elements
|
|
13
|
-
*/
|
|
14
|
-
export const ViraAllColorSpaceSliders = defineElement<{color: Readonly<Color>}>()({
|
|
15
|
-
tagName: 'vira-all-color-space-sliders',
|
|
16
|
-
styles: css`
|
|
17
|
-
:host {
|
|
18
|
-
display: flex;
|
|
19
|
-
flex-direction: column;
|
|
20
|
-
gap: 16px;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.color-space {
|
|
24
|
-
display: flex;
|
|
25
|
-
flex-wrap: wrap;
|
|
26
|
-
column-gap: 32px;
|
|
27
|
-
row-gap: 8px;
|
|
28
|
-
}
|
|
29
|
-
`,
|
|
30
|
-
events: {
|
|
31
|
-
colorChange: defineElementEvent<string>(),
|
|
32
|
-
},
|
|
33
|
-
render({inputs, dispatch, events}) {
|
|
34
|
-
const colorSpaceTemplates = getObjectTypedValues(colorFormatsBySpace).map(
|
|
35
|
-
(colorSpaceFormats) => {
|
|
36
|
-
const formatTemplates = getObjectTypedKeys(colorSpaceFormats).map(
|
|
37
|
-
(colorFormatName) => {
|
|
38
|
-
return html`
|
|
39
|
-
<${ViraColorFormatSliders.assign({
|
|
40
|
-
color: inputs.color,
|
|
41
|
-
colorFormatName,
|
|
42
|
-
showFormatName: true,
|
|
43
|
-
})}
|
|
44
|
-
${listen(ViraColorFormatSliders.events.colorChange, (event) => {
|
|
45
|
-
dispatch(
|
|
46
|
-
new events.colorChange({
|
|
47
|
-
detail: event.detail,
|
|
48
|
-
}),
|
|
49
|
-
);
|
|
50
|
-
})}
|
|
51
|
-
></${ViraColorFormatSliders}>
|
|
52
|
-
`;
|
|
53
|
-
},
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
return html`
|
|
57
|
-
<section class="color-space">${formatTemplates}</section>
|
|
58
|
-
`;
|
|
59
|
-
},
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
return html`
|
|
63
|
-
${colorSpaceTemplates}
|
|
64
|
-
`;
|
|
65
|
-
},
|
|
66
|
-
});
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/* node:coverage disable */
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
type ColorSyntaxName,
|
|
5
|
-
getColorSyntaxFromCssString,
|
|
6
|
-
} from '@electrovir/color/dist/data/color-class/color-formats.js';
|
|
7
|
-
import {Color} from '@electrovir/color/dist/data/color-class/color.js';
|
|
8
|
-
import {css, defineElement, defineElementEvent, html, listen} from 'element-vir';
|
|
9
|
-
import {ViraAllColorSpaceSliders} from './vira-all-color-space-sliders.element.js';
|
|
10
|
-
import {ViraColorDetails} from './vira-color-details.element.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* A color picker element that shows sliders for all supported color spaces at once, as well as all
|
|
14
|
-
* the values for all supported color spaces in a table.
|
|
15
|
-
*
|
|
16
|
-
* @category Elements
|
|
17
|
-
*/
|
|
18
|
-
export const ViraAllSpacesColorPicker = defineElement<{color: string}>()({
|
|
19
|
-
tagName: 'vira-all-spaces-color-picker',
|
|
20
|
-
styles: css`
|
|
21
|
-
:host {
|
|
22
|
-
display: flex;
|
|
23
|
-
flex-direction: column;
|
|
24
|
-
gap: 16px;
|
|
25
|
-
}
|
|
26
|
-
`,
|
|
27
|
-
events: {
|
|
28
|
-
colorChange: defineElementEvent<string>(),
|
|
29
|
-
},
|
|
30
|
-
state() {
|
|
31
|
-
return {
|
|
32
|
-
inputColorString: undefined as undefined | string,
|
|
33
|
-
overrideInputColor: undefined as undefined | ColorSyntaxName,
|
|
34
|
-
};
|
|
35
|
-
},
|
|
36
|
-
render({inputs, dispatch, events, state, updateState}) {
|
|
37
|
-
const color = new Color(inputs.color);
|
|
38
|
-
|
|
39
|
-
if (state.overrideInputColor) {
|
|
40
|
-
updateState({
|
|
41
|
-
inputColorString: color.toCss()[state.overrideInputColor],
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (state.inputColorString == undefined) {
|
|
46
|
-
updateState({
|
|
47
|
-
inputColorString: inputs.color,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return html`
|
|
52
|
-
<${ViraColorDetails.assign({
|
|
53
|
-
color: inputs.color,
|
|
54
|
-
showInput: true,
|
|
55
|
-
})}
|
|
56
|
-
${listen(ViraColorDetails.events.colorChange, (event) => {
|
|
57
|
-
updateState({
|
|
58
|
-
inputColorString: event.detail,
|
|
59
|
-
overrideInputColor: undefined,
|
|
60
|
-
});
|
|
61
|
-
dispatch(
|
|
62
|
-
new events.colorChange({
|
|
63
|
-
detail: event.detail,
|
|
64
|
-
}),
|
|
65
|
-
);
|
|
66
|
-
})}
|
|
67
|
-
></${ViraColorDetails}>
|
|
68
|
-
<${ViraAllColorSpaceSliders.assign({
|
|
69
|
-
color,
|
|
70
|
-
})}
|
|
71
|
-
${listen(ViraAllColorSpaceSliders.events.colorChange, (event) => {
|
|
72
|
-
const colorSyntax = getColorSyntaxFromCssString(state.inputColorString || '#');
|
|
73
|
-
updateState({
|
|
74
|
-
overrideInputColor: colorSyntax,
|
|
75
|
-
});
|
|
76
|
-
dispatch(
|
|
77
|
-
new events.colorChange({
|
|
78
|
-
detail: event.detail,
|
|
79
|
-
}),
|
|
80
|
-
);
|
|
81
|
-
})}
|
|
82
|
-
></${ViraAllColorSpaceSliders}>
|
|
83
|
-
`;
|
|
84
|
-
},
|
|
85
|
-
});
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/* node:coverage disable */
|
|
2
|
-
|
|
3
|
-
import {getObjectTypedKeys} from '@augment-vir/common';
|
|
4
|
-
import {
|
|
5
|
-
type ColorCoordinateName,
|
|
6
|
-
type ColorFormatName,
|
|
7
|
-
colorFormats,
|
|
8
|
-
} from '@electrovir/color/dist/data/color-class/color-formats.js';
|
|
9
|
-
import {type Color, type ColorUpdate} from '@electrovir/color/dist/data/color-class/color.js';
|
|
10
|
-
import {css, defineElement, defineElementEvent, html, listen, nothing} from 'element-vir';
|
|
11
|
-
import {noNativeSpacing} from '../../styles/native-styles.js';
|
|
12
|
-
import {ViraColorSlider} from './vira-color-slider.element.js';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Color sliders for all coordinates within a specific color format.
|
|
16
|
-
*
|
|
17
|
-
* @category Elements
|
|
18
|
-
*/
|
|
19
|
-
export const ViraColorFormatSliders = defineElement<{
|
|
20
|
-
color: Readonly<Color>;
|
|
21
|
-
colorFormatName: ColorFormatName;
|
|
22
|
-
showFormatName: boolean;
|
|
23
|
-
}>()({
|
|
24
|
-
tagName: 'vira-color-format-sliders',
|
|
25
|
-
styles: css`
|
|
26
|
-
:host {
|
|
27
|
-
display: flex;
|
|
28
|
-
flex-direction: column;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
h3 {
|
|
32
|
-
${noNativeSpacing};
|
|
33
|
-
}
|
|
34
|
-
`,
|
|
35
|
-
events: {
|
|
36
|
-
colorChange: defineElementEvent<string>(),
|
|
37
|
-
},
|
|
38
|
-
render({inputs, dispatch, events}) {
|
|
39
|
-
const colorFormat = colorFormats[inputs.colorFormatName];
|
|
40
|
-
|
|
41
|
-
const coordinateTemplates = getObjectTypedKeys(colorFormat.coords).map(
|
|
42
|
-
(colorCoordinate: ColorCoordinateName) => {
|
|
43
|
-
return html`
|
|
44
|
-
<${ViraColorSlider.assign({
|
|
45
|
-
color: inputs.color,
|
|
46
|
-
colorCoordinateName: colorCoordinate,
|
|
47
|
-
colorFormatName: inputs.colorFormatName,
|
|
48
|
-
})}
|
|
49
|
-
${listen(ViraColorSlider.events.valueChange, (event) => {
|
|
50
|
-
const newColor = inputs.color.clone();
|
|
51
|
-
|
|
52
|
-
newColor.set({
|
|
53
|
-
[inputs.colorFormatName]: {
|
|
54
|
-
[colorCoordinate]: event.detail,
|
|
55
|
-
},
|
|
56
|
-
} as ColorUpdate);
|
|
57
|
-
const newValue = newColor.toCss()[colorFormat.conversionFormat];
|
|
58
|
-
dispatch(
|
|
59
|
-
new events.colorChange({
|
|
60
|
-
detail: newValue,
|
|
61
|
-
}),
|
|
62
|
-
);
|
|
63
|
-
})}
|
|
64
|
-
></${ViraColorSlider}>
|
|
65
|
-
`;
|
|
66
|
-
},
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
return html`
|
|
70
|
-
${inputs.showFormatName
|
|
71
|
-
? html`
|
|
72
|
-
<h3>${inputs.colorFormatName}</h3>
|
|
73
|
-
`
|
|
74
|
-
: nothing}
|
|
75
|
-
${coordinateTemplates}
|
|
76
|
-
`;
|
|
77
|
-
},
|
|
78
|
-
});
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/* node:coverage disable */
|
|
2
|
-
|
|
3
|
-
import {assert, assertWrap} from '@augment-vir/assert';
|
|
4
|
-
import {createArray} from '@augment-vir/common';
|
|
5
|
-
import {extractEventTarget} from '@augment-vir/web';
|
|
6
|
-
import {
|
|
7
|
-
type ColorCoordinateName,
|
|
8
|
-
type ColorFormatDefinition,
|
|
9
|
-
type ColorFormatName,
|
|
10
|
-
colorFormats,
|
|
11
|
-
} from '@electrovir/color/dist/data/color-class/color-formats.js';
|
|
12
|
-
import {Color, type ColorUpdate} from '@electrovir/color/dist/data/color-class/color.js';
|
|
13
|
-
import {
|
|
14
|
-
css,
|
|
15
|
-
defineElement,
|
|
16
|
-
defineElementEvent,
|
|
17
|
-
html,
|
|
18
|
-
listen,
|
|
19
|
-
onDomRendered,
|
|
20
|
-
unsafeCSS,
|
|
21
|
-
} from 'element-vir';
|
|
22
|
-
import {viraFontCssVars} from '../../styles/font.js';
|
|
23
|
-
import {ViraInput} from '../vira-input.element.js';
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* A slider for a specific color coordinate in a specific color space in a specific color.
|
|
27
|
-
*
|
|
28
|
-
* @category Elements
|
|
29
|
-
*/
|
|
30
|
-
export const ViraColorSlider = defineElement<{
|
|
31
|
-
color: Readonly<Color>;
|
|
32
|
-
colorFormatName: ColorFormatName;
|
|
33
|
-
colorCoordinateName: ColorCoordinateName;
|
|
34
|
-
}>()({
|
|
35
|
-
tagName: 'vira-color-slider',
|
|
36
|
-
cssVars: {
|
|
37
|
-
'vira-color-slider-gradient': 'black',
|
|
38
|
-
},
|
|
39
|
-
styles: ({cssVars}) => {
|
|
40
|
-
return css`
|
|
41
|
-
:host {
|
|
42
|
-
display: flex;
|
|
43
|
-
align-items: center;
|
|
44
|
-
font-family: ${viraFontCssVars['vira-monospace'].value};
|
|
45
|
-
gap: 2px;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
input[type='range'] {
|
|
49
|
-
flex-grow: 1;
|
|
50
|
-
appearance: none;
|
|
51
|
-
background: ${cssVars['vira-color-slider-gradient'].value};
|
|
52
|
-
height: 9px;
|
|
53
|
-
border-radius: 4px;
|
|
54
|
-
cursor: pointer;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
${ViraInput} {
|
|
58
|
-
width: 76px;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.coordinate {
|
|
62
|
-
font-size: 18px;
|
|
63
|
-
margin-top: -4px;
|
|
64
|
-
}
|
|
65
|
-
`;
|
|
66
|
-
},
|
|
67
|
-
events: {
|
|
68
|
-
valueChange: defineElementEvent<number>(),
|
|
69
|
-
},
|
|
70
|
-
render({inputs, events, dispatch, cssVars}) {
|
|
71
|
-
const formatDefinition: ColorFormatDefinition = colorFormats[inputs.colorFormatName];
|
|
72
|
-
const coordinateDefinition = formatDefinition.coords[inputs.colorCoordinateName];
|
|
73
|
-
|
|
74
|
-
if (!coordinateDefinition) {
|
|
75
|
-
throw new Error(
|
|
76
|
-
`Invalid color coordinate '${inputs.colorCoordinateName}' for color format '${inputs.colorFormatName}'`,
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const totalStops = 10;
|
|
81
|
-
|
|
82
|
-
const colorStops: string[] = createArray(totalStops, (index) => {
|
|
83
|
-
const value =
|
|
84
|
-
coordinateDefinition.min +
|
|
85
|
-
(coordinateDefinition.max - coordinateDefinition.min) * (index / totalStops);
|
|
86
|
-
|
|
87
|
-
const stopColor = new Color({
|
|
88
|
-
[inputs.colorFormatName]: {
|
|
89
|
-
...inputs.color[inputs.colorFormatName],
|
|
90
|
-
[inputs.colorCoordinateName]: value,
|
|
91
|
-
},
|
|
92
|
-
} as ColorUpdate);
|
|
93
|
-
|
|
94
|
-
return stopColor.toCss()[formatDefinition.conversionFormat];
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
const gradient = css`linear-gradient(to right, ${unsafeCSS(colorStops.join(','))})`;
|
|
98
|
-
|
|
99
|
-
const coordinateValue = assertWrap.isNumber(
|
|
100
|
-
(
|
|
101
|
-
inputs.color[inputs.colorFormatName] as Record<
|
|
102
|
-
ColorCoordinateName,
|
|
103
|
-
undefined | string | number
|
|
104
|
-
>
|
|
105
|
-
)[inputs.colorCoordinateName],
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
const displayValue = coordinateDefinition.radix
|
|
109
|
-
? Math.round(coordinateValue)
|
|
110
|
-
.toString(coordinateDefinition.radix)
|
|
111
|
-
.toUpperCase()
|
|
112
|
-
.padStart(coordinateDefinition.radixPad || 0, '0')
|
|
113
|
-
: String(coordinateValue);
|
|
114
|
-
|
|
115
|
-
return html`
|
|
116
|
-
<span class="coordinate">${inputs.colorCoordinateName.toUpperCase()}</span>
|
|
117
|
-
<input
|
|
118
|
-
type="range"
|
|
119
|
-
style=${css`
|
|
120
|
-
${cssVars['vira-color-slider-gradient'].name}: ${gradient};
|
|
121
|
-
`}
|
|
122
|
-
step=${Math.pow(10, coordinateDefinition.digits ? -coordinateDefinition.digits : 0)}
|
|
123
|
-
${onDomRendered((element) => {
|
|
124
|
-
/**
|
|
125
|
-
* We must set these imperatively to force the input element to match the
|
|
126
|
-
* inputs, otherwise when swapping color formats these color sliders don't
|
|
127
|
-
* update correctly.
|
|
128
|
-
*/
|
|
129
|
-
assert.instanceOf(element, HTMLInputElement);
|
|
130
|
-
|
|
131
|
-
element.min = String(coordinateDefinition.min);
|
|
132
|
-
element.max = String(coordinateDefinition.max);
|
|
133
|
-
element.value = String(coordinateValue);
|
|
134
|
-
})}
|
|
135
|
-
${listen('input', (event) => {
|
|
136
|
-
const element = extractEventTarget(event, HTMLInputElement);
|
|
137
|
-
const newValue = Number(element.value);
|
|
138
|
-
if (isNaN(newValue)) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
dispatch(
|
|
143
|
-
new events.valueChange({
|
|
144
|
-
detail: newValue,
|
|
145
|
-
}),
|
|
146
|
-
);
|
|
147
|
-
})}
|
|
148
|
-
/>
|
|
149
|
-
<${ViraInput.assign({
|
|
150
|
-
value: displayValue,
|
|
151
|
-
})}
|
|
152
|
-
${listen(ViraInput.events.valueChange, (event) => {
|
|
153
|
-
const newValue = coordinateDefinition.radix
|
|
154
|
-
? parseInt(event.detail, coordinateDefinition.radix)
|
|
155
|
-
: Number(event.detail);
|
|
156
|
-
if (isNaN(newValue)) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
dispatch(
|
|
161
|
-
new events.valueChange({
|
|
162
|
-
detail: newValue,
|
|
163
|
-
}),
|
|
164
|
-
);
|
|
165
|
-
})}
|
|
166
|
-
></${ViraInput}>
|
|
167
|
-
`;
|
|
168
|
-
},
|
|
169
|
-
});
|