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,9 +1,8 @@
|
|
|
1
|
-
import {clamp
|
|
2
|
-
import {applyAttributes} from 'device-navigation';
|
|
3
|
-
import {css, html} from 'element-vir';
|
|
4
|
-
import {viraFormCssVars} from '../styles/form-styles.js';
|
|
5
|
-
import {defineViraElement} from '../util/define-vira-element.js';
|
|
6
|
-
|
|
1
|
+
import { clamp } from '@augment-vir/common';
|
|
2
|
+
import { applyAttributes } from 'device-navigation';
|
|
3
|
+
import { css, html } from 'element-vir';
|
|
4
|
+
import { viraFormCssVars } from '../styles/form-styles.js';
|
|
5
|
+
import { defineViraElement } from '../util/define-vira-element.js';
|
|
7
6
|
/**
|
|
8
7
|
* A [`<progress>`](https://developer.mozilla.org/docs/Web/HTML/Reference/Elements/progress)
|
|
9
8
|
* alternative that supports custom styling in _all_ browsers via CSS vars _and_ prevents background
|
|
@@ -13,16 +12,7 @@ import {defineViraElement} from '../util/define-vira-element.js';
|
|
|
13
12
|
* @category Elements
|
|
14
13
|
* @see https://electrovir.github.io/vira/book/elements/vira-progress
|
|
15
14
|
*/
|
|
16
|
-
export const ViraProgress = defineViraElement
|
|
17
|
-
{
|
|
18
|
-
value: number;
|
|
19
|
-
} & PartialWithUndefined<{
|
|
20
|
-
/** @default 0 */
|
|
21
|
-
min: number;
|
|
22
|
-
/** @default 100 */
|
|
23
|
-
max: number;
|
|
24
|
-
}>
|
|
25
|
-
>()({
|
|
15
|
+
export const ViraProgress = defineViraElement()({
|
|
26
16
|
tagName: 'vira-progress',
|
|
27
17
|
cssVars: {
|
|
28
18
|
/**
|
|
@@ -32,8 +22,8 @@ export const ViraProgress = defineViraElement<
|
|
|
32
22
|
'vira-progress-border-radius': '99999999px',
|
|
33
23
|
'vira-progress-height': '8px',
|
|
34
24
|
},
|
|
35
|
-
styles
|
|
36
|
-
return css`
|
|
25
|
+
styles({ cssVars }) {
|
|
26
|
+
return css `
|
|
37
27
|
:host {
|
|
38
28
|
/* Default width that can easily be overridden because it's applied on the host. */
|
|
39
29
|
width: 100px;
|
|
@@ -57,32 +47,29 @@ export const ViraProgress = defineViraElement<
|
|
|
57
47
|
}
|
|
58
48
|
`;
|
|
59
49
|
},
|
|
60
|
-
render({inputs, host}) {
|
|
50
|
+
render({ inputs, host }) {
|
|
61
51
|
const min = inputs.min || 0;
|
|
62
52
|
const max = inputs.max || 100;
|
|
63
53
|
const totalRange = max - min;
|
|
64
54
|
const value = inputs.value - min;
|
|
65
|
-
|
|
66
55
|
const percentFull = clamp(Math.round((value / totalRange) * 100), {
|
|
67
56
|
min: 0,
|
|
68
57
|
max: 100,
|
|
69
58
|
});
|
|
70
|
-
|
|
71
59
|
applyAttributes(host, {
|
|
72
60
|
'aria-valuemin': inputs.min,
|
|
73
61
|
'aria-valuemax': inputs.max,
|
|
74
62
|
'aria-valuenow': inputs.value,
|
|
75
63
|
'aria-role': 'progressbar',
|
|
76
64
|
});
|
|
77
|
-
|
|
78
|
-
return html`
|
|
65
|
+
return html `
|
|
79
66
|
<div
|
|
80
67
|
class="progress-bar"
|
|
81
68
|
style=${percentFull
|
|
82
|
-
|
|
69
|
+
? css `
|
|
83
70
|
width: ${percentFull}%;
|
|
84
71
|
`
|
|
85
|
-
|
|
72
|
+
: css `
|
|
86
73
|
display: none;
|
|
87
74
|
`}
|
|
88
75
|
></div>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
+
import { type AtLeastOneDuration, type FullDate, type Timezone } from 'date-vir';
|
|
3
|
+
/**
|
|
4
|
+
* Displays a date/time as a live, relative timestamp (for example `5 minutes ago`). The relative
|
|
5
|
+
* string automatically updates over time. Optionally renders the absolute timestamp beneath the
|
|
6
|
+
* relative string.
|
|
7
|
+
*
|
|
8
|
+
* @category Time
|
|
9
|
+
* @category Elements
|
|
10
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-relative-time
|
|
11
|
+
*/
|
|
12
|
+
export declare const ViraRelativeTime: import("element-vir").DeclarativeElementDefinition<"vira-relative-time", {
|
|
13
|
+
time: Readonly<FullDate>;
|
|
14
|
+
} & PartialWithUndefined<{
|
|
15
|
+
/** When true, the absolute timestamp is rendered beneath the relative string. */
|
|
16
|
+
showAbsoluteTime: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* How long before the relative time updates.
|
|
19
|
+
*
|
|
20
|
+
* @default {seconds: 5}
|
|
21
|
+
*/
|
|
22
|
+
updateInterval: Readonly<AtLeastOneDuration>;
|
|
23
|
+
/**
|
|
24
|
+
* Timezone the absolute time is displayed in. Defaults to the user's timezone. Set this for
|
|
25
|
+
* values that are conceptually anchored to a specific timezone (e.g. a date-only value
|
|
26
|
+
* stored at midnight UTC), where converting to the user's timezone would shift the
|
|
27
|
+
* displayed date/time.
|
|
28
|
+
*/
|
|
29
|
+
timezone: Timezone;
|
|
30
|
+
}>, {
|
|
31
|
+
now: {
|
|
32
|
+
hour: import("date-vir").Hour;
|
|
33
|
+
minute: import("date-vir").Minute;
|
|
34
|
+
millisecond: number;
|
|
35
|
+
year: number;
|
|
36
|
+
month: import("date-vir").MonthNumber;
|
|
37
|
+
day: import("date-vir").DayOfMonth;
|
|
38
|
+
second: import("date-vir").Second;
|
|
39
|
+
timezone: "UTC";
|
|
40
|
+
};
|
|
41
|
+
timeoutId: undefined | ReturnType<typeof globalThis.setTimeout>;
|
|
42
|
+
}, {}, "vira-relative-time-", "vira-relative-time-", readonly [], readonly []>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { convertDuration, getNowInUtcTimezone, toRelativeString, } from 'date-vir';
|
|
2
|
+
import { css, html, nothing } from 'element-vir';
|
|
3
|
+
import { viraTheme } from '../styles/vira-color-theme.js';
|
|
4
|
+
import { defineViraElement } from '../util/define-vira-element.js';
|
|
5
|
+
import { formatAbsoluteTime, ViraAbsoluteTime } from './vira-absolute-time.element.js';
|
|
6
|
+
/**
|
|
7
|
+
* Displays a date/time as a live, relative timestamp (for example `5 minutes ago`). The relative
|
|
8
|
+
* string automatically updates over time. Optionally renders the absolute timestamp beneath the
|
|
9
|
+
* relative string.
|
|
10
|
+
*
|
|
11
|
+
* @category Time
|
|
12
|
+
* @category Elements
|
|
13
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-relative-time
|
|
14
|
+
*/
|
|
15
|
+
export const ViraRelativeTime = defineViraElement()({
|
|
16
|
+
tagName: 'vira-relative-time',
|
|
17
|
+
styles: css `
|
|
18
|
+
:host {
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
white-space: nowrap;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
${ViraAbsoluteTime} {
|
|
25
|
+
font-size: 12px;
|
|
26
|
+
color: ${viraTheme.colors['vira-grey-foreground-non-body'].foreground.value};
|
|
27
|
+
}
|
|
28
|
+
`,
|
|
29
|
+
state() {
|
|
30
|
+
return {
|
|
31
|
+
now: getNowInUtcTimezone(),
|
|
32
|
+
timeoutId: undefined,
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
init({ inputs, updateState }) {
|
|
36
|
+
/**
|
|
37
|
+
* Reschedule with a fresh timeout after each update so the delay always reflects the
|
|
38
|
+
* current `updateInterval` input.
|
|
39
|
+
*/
|
|
40
|
+
function scheduleNextUpdate() {
|
|
41
|
+
const updateInterval = inputs.updateInterval || {
|
|
42
|
+
seconds: 5,
|
|
43
|
+
};
|
|
44
|
+
updateState({
|
|
45
|
+
timeoutId: globalThis.setTimeout(() => {
|
|
46
|
+
updateState({
|
|
47
|
+
now: getNowInUtcTimezone(),
|
|
48
|
+
});
|
|
49
|
+
scheduleNextUpdate();
|
|
50
|
+
}, convertDuration(updateInterval, {
|
|
51
|
+
milliseconds: true,
|
|
52
|
+
}).milliseconds),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
scheduleNextUpdate();
|
|
56
|
+
},
|
|
57
|
+
cleanup({ state, updateState }) {
|
|
58
|
+
globalThis.clearTimeout(state.timeoutId);
|
|
59
|
+
updateState({
|
|
60
|
+
timeoutId: undefined,
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
render({ state, inputs }) {
|
|
64
|
+
const relativeTime = toRelativeString({
|
|
65
|
+
start: state.now,
|
|
66
|
+
end: inputs.time,
|
|
67
|
+
}, {
|
|
68
|
+
years: true,
|
|
69
|
+
months: true,
|
|
70
|
+
days: true,
|
|
71
|
+
hours: true,
|
|
72
|
+
minutes: true,
|
|
73
|
+
seconds: true,
|
|
74
|
+
}, {
|
|
75
|
+
useOnlyLargestUnit: true,
|
|
76
|
+
decimalCount: 0,
|
|
77
|
+
});
|
|
78
|
+
return html `
|
|
79
|
+
<span
|
|
80
|
+
title=${formatAbsoluteTime(inputs.time, {
|
|
81
|
+
timezone: inputs.timezone,
|
|
82
|
+
})}
|
|
83
|
+
>
|
|
84
|
+
${relativeTime}
|
|
85
|
+
</span>
|
|
86
|
+
${inputs.showAbsoluteTime
|
|
87
|
+
? html `
|
|
88
|
+
<${ViraAbsoluteTime.assign({
|
|
89
|
+
time: inputs.time,
|
|
90
|
+
timezone: inputs.timezone,
|
|
91
|
+
})}></${ViraAbsoluteTime}>
|
|
92
|
+
`
|
|
93
|
+
: nothing}
|
|
94
|
+
`;
|
|
95
|
+
},
|
|
96
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
+
import { type AttributeValues } from 'element-vir';
|
|
3
|
+
import { type ViraIconSvg } from '../icons/index.js';
|
|
4
|
+
import { type ViraSelectOption, type ViraSelectOptionGroup } from '../util/vira-select-option.js';
|
|
5
|
+
/**
|
|
6
|
+
* Similar to {@link ViraDropdown} but is, instead, simply a wrapper for `<select>` and nothing more.
|
|
7
|
+
*
|
|
8
|
+
* @category Dropdown
|
|
9
|
+
* @category Elements
|
|
10
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-select
|
|
11
|
+
*/
|
|
12
|
+
export declare const ViraSelect: import("element-vir").DeclarativeElementDefinition<"vira-select", {
|
|
13
|
+
options: ReadonlyArray<Readonly<ViraSelectOption> | Readonly<ViraSelectOptionGroup>>;
|
|
14
|
+
/** The currently selected option value. */
|
|
15
|
+
value: undefined | string;
|
|
16
|
+
} & PartialWithUndefined<{
|
|
17
|
+
icon: Readonly<ViraIconSvg>;
|
|
18
|
+
placeholder: string;
|
|
19
|
+
label: string;
|
|
20
|
+
/** If set to `true`, only minimal styles are applied. */
|
|
21
|
+
rawSelect: boolean;
|
|
22
|
+
disabled: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* When `true`, the currently selected option's label is rendered as plain text with no
|
|
25
|
+
* wrapper, border, or focus styles.
|
|
26
|
+
*/
|
|
27
|
+
isReadonly: boolean;
|
|
28
|
+
attributePassthrough: Readonly<PartialWithUndefined<{
|
|
29
|
+
label: AttributeValues;
|
|
30
|
+
select: AttributeValues;
|
|
31
|
+
option: AttributeValues;
|
|
32
|
+
}>>;
|
|
33
|
+
hasError: boolean;
|
|
34
|
+
}>, {
|
|
35
|
+
/**
|
|
36
|
+
* Used to couple the label and select together. This is not applied if no label is
|
|
37
|
+
* provided.
|
|
38
|
+
*/
|
|
39
|
+
randomId: string;
|
|
40
|
+
/** Removes event listeners registered during init. */
|
|
41
|
+
cleanupListeners: undefined | (() => void);
|
|
42
|
+
}, {
|
|
43
|
+
valueChange: import("element-vir").DefineElementEvent<string>;
|
|
44
|
+
}, "vira-select-disabled" | "vira-select-error" | "vira-select-has-label" | "vira-select-not-raw" | "vira-select-readonly", "vira-select-padding-horizontal" | "vira-select-padding-vertical" | "vira-select-icon-padding", readonly [], readonly []>;
|
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
import {assertWrap} from '@augment-vir/assert';
|
|
2
|
-
import {randomString
|
|
3
|
-
import {extractEventTarget} from '@augment-vir/web';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} from 'element
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
import {viraDisabledStyles} from '../styles/disabled.js';
|
|
18
|
-
import {createFocusStyles} from '../styles/focus.js';
|
|
19
|
-
import {viraFormCssVars} from '../styles/form-styles.js';
|
|
20
|
-
import {viraAnimationDurations} from '../styles/index.js';
|
|
21
|
-
import {noNativeFormStyles} from '../styles/native-styles.js';
|
|
22
|
-
import {defineViraElement} from '../util/define-vira-element.js';
|
|
23
|
-
import {
|
|
24
|
-
isViraSelectOptionGroup,
|
|
25
|
-
type ViraSelectOption,
|
|
26
|
-
type ViraSelectOptionGroup,
|
|
27
|
-
} from '../util/vira-select-option.js';
|
|
28
|
-
import {ViraDropdown} from './vira-dropdown.element.js';
|
|
29
|
-
import {ViraIcon} from './vira-icon.element.js';
|
|
30
|
-
|
|
31
|
-
function renderSelectOption(option: Readonly<ViraSelectOption>, value: string | undefined) {
|
|
32
|
-
return html`
|
|
1
|
+
import { assertWrap } from '@augment-vir/assert';
|
|
2
|
+
import { randomString } from '@augment-vir/common';
|
|
3
|
+
import { extractEventTarget } from '@augment-vir/web';
|
|
4
|
+
import { attributes, classMap, css, defineElementEvent, html, ifDefined, listen, nothing, } from 'element-vir';
|
|
5
|
+
import { listenTo } from 'typed-event-target';
|
|
6
|
+
import { ChevronUp16Icon } from '../icons/index.js';
|
|
7
|
+
import { viraDisabledStyles } from '../styles/disabled.js';
|
|
8
|
+
import { createFocusStyles } from '../styles/focus.js';
|
|
9
|
+
import { viraFormCssVars } from '../styles/form-styles.js';
|
|
10
|
+
import { viraAnimationDurations } from '../styles/index.js';
|
|
11
|
+
import { noNativeFormStyles } from '../styles/native-styles.js';
|
|
12
|
+
import { defineViraElement } from '../util/define-vira-element.js';
|
|
13
|
+
import { isViraSelectOptionGroup, } from '../util/vira-select-option.js';
|
|
14
|
+
import { ViraIcon } from './vira-icon.element.js';
|
|
15
|
+
function renderSelectOption(option, value) {
|
|
16
|
+
return html `
|
|
33
17
|
<option
|
|
34
18
|
?selected=${option.value === value}
|
|
35
19
|
aria-label=${option.label}
|
|
@@ -40,7 +24,6 @@ function renderSelectOption(option: Readonly<ViraSelectOption>, value: string |
|
|
|
40
24
|
</option>
|
|
41
25
|
`;
|
|
42
26
|
}
|
|
43
|
-
|
|
44
27
|
/**
|
|
45
28
|
* Similar to {@link ViraDropdown} but is, instead, simply a wrapper for `<select>` and nothing more.
|
|
46
29
|
*
|
|
@@ -48,33 +31,7 @@ function renderSelectOption(option: Readonly<ViraSelectOption>, value: string |
|
|
|
48
31
|
* @category Elements
|
|
49
32
|
* @see https://electrovir.github.io/vira/book/elements/vira-select
|
|
50
33
|
*/
|
|
51
|
-
export const ViraSelect = defineViraElement
|
|
52
|
-
{
|
|
53
|
-
options: ReadonlyArray<Readonly<ViraSelectOption> | Readonly<ViraSelectOptionGroup>>;
|
|
54
|
-
/** The currently selected option value. */
|
|
55
|
-
value: undefined | string;
|
|
56
|
-
} & PartialWithUndefined<{
|
|
57
|
-
icon: Readonly<ViraIconSvg>;
|
|
58
|
-
placeholder: string;
|
|
59
|
-
label: string;
|
|
60
|
-
/** If set to `true`, only minimal styles are applied. */
|
|
61
|
-
rawSelect: boolean;
|
|
62
|
-
disabled: boolean;
|
|
63
|
-
/**
|
|
64
|
-
* When `true`, the currently selected option's label is rendered as plain text with no
|
|
65
|
-
* wrapper, border, or focus styles.
|
|
66
|
-
*/
|
|
67
|
-
isReadonly: boolean;
|
|
68
|
-
attributePassthrough: Readonly<
|
|
69
|
-
PartialWithUndefined<{
|
|
70
|
-
label: AttributeValues;
|
|
71
|
-
select: AttributeValues;
|
|
72
|
-
option: AttributeValues;
|
|
73
|
-
}>
|
|
74
|
-
>;
|
|
75
|
-
hasError: boolean;
|
|
76
|
-
}>
|
|
77
|
-
>()({
|
|
34
|
+
export const ViraSelect = defineViraElement()({
|
|
78
35
|
tagName: 'vira-select',
|
|
79
36
|
state() {
|
|
80
37
|
return {
|
|
@@ -84,11 +41,11 @@ export const ViraSelect = defineViraElement<
|
|
|
84
41
|
*/
|
|
85
42
|
randomId: randomString(32),
|
|
86
43
|
/** Removes event listeners registered during init. */
|
|
87
|
-
cleanupListeners: undefined
|
|
44
|
+
cleanupListeners: undefined,
|
|
88
45
|
};
|
|
89
46
|
},
|
|
90
47
|
events: {
|
|
91
|
-
valueChange: defineElementEvent
|
|
48
|
+
valueChange: defineElementEvent(),
|
|
92
49
|
},
|
|
93
50
|
cssVars: {
|
|
94
51
|
'vira-select-padding-horizontal': '12px',
|
|
@@ -96,14 +53,24 @@ export const ViraSelect = defineViraElement<
|
|
|
96
53
|
'vira-select-icon-padding': '44px',
|
|
97
54
|
},
|
|
98
55
|
hostClasses: {
|
|
99
|
-
'vira-select-disabled'
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
'vira-select-
|
|
103
|
-
|
|
56
|
+
'vira-select-disabled'({ inputs }) {
|
|
57
|
+
return !!inputs.disabled;
|
|
58
|
+
},
|
|
59
|
+
'vira-select-error'({ inputs }) {
|
|
60
|
+
return !!inputs.hasError;
|
|
61
|
+
},
|
|
62
|
+
'vira-select-has-label'({ inputs }) {
|
|
63
|
+
return !!inputs.label;
|
|
64
|
+
},
|
|
65
|
+
'vira-select-not-raw'({ inputs }) {
|
|
66
|
+
return !inputs.rawSelect;
|
|
67
|
+
},
|
|
68
|
+
'vira-select-readonly'({ inputs }) {
|
|
69
|
+
return !!inputs.isReadonly;
|
|
70
|
+
},
|
|
104
71
|
},
|
|
105
|
-
styles
|
|
106
|
-
return css`
|
|
72
|
+
styles({ hostClasses, cssVars }) {
|
|
73
|
+
return css `
|
|
107
74
|
:host {
|
|
108
75
|
position: relative;
|
|
109
76
|
display: inline-flex;
|
|
@@ -205,9 +172,9 @@ export const ViraSelect = defineViraElement<
|
|
|
205
172
|
|
|
206
173
|
&:focus:focus-visible:not([aria-disabled='true']) ~ .focus-border {
|
|
207
174
|
${createFocusStyles({
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
175
|
+
elementBorderSize: '1px',
|
|
176
|
+
noNesting: true,
|
|
177
|
+
})}
|
|
211
178
|
}
|
|
212
179
|
}
|
|
213
180
|
|
|
@@ -273,31 +240,24 @@ export const ViraSelect = defineViraElement<
|
|
|
273
240
|
|
|
274
241
|
:host(
|
|
275
242
|
.${hostClasses['vira-select-not-raw'].name}.${hostClasses['vira-select-error']
|
|
276
|
-
|
|
243
|
+
.name}
|
|
277
244
|
)
|
|
278
245
|
.wrapper-border {
|
|
279
246
|
border-color: ${viraFormCssVars['vira-form-error-color'].value};
|
|
280
247
|
}
|
|
281
248
|
`;
|
|
282
249
|
},
|
|
283
|
-
init({state, updateState, host}) {
|
|
250
|
+
init({ state, updateState, host }) {
|
|
284
251
|
state.cleanupListeners?.();
|
|
285
|
-
|
|
286
252
|
function getSelectElement() {
|
|
287
|
-
return assertWrap.instanceOf(
|
|
288
|
-
host.shadowRoot.querySelector('select'),
|
|
289
|
-
HTMLSelectElement,
|
|
290
|
-
);
|
|
253
|
+
return assertWrap.instanceOf(host.shadowRoot.querySelector('select'), HTMLSelectElement);
|
|
291
254
|
}
|
|
292
|
-
|
|
293
255
|
const listenerRemovers = [
|
|
294
256
|
listenTo(host, 'mousedown', (event) => {
|
|
295
257
|
const selectElement = getSelectElement();
|
|
296
|
-
|
|
297
258
|
if (event.composedPath().includes(selectElement)) {
|
|
298
259
|
return;
|
|
299
260
|
}
|
|
300
|
-
|
|
301
261
|
event.preventDefault();
|
|
302
262
|
event.stopPropagation();
|
|
303
263
|
/** `showPicker` is not in Safari. */
|
|
@@ -305,7 +265,8 @@ export const ViraSelect = defineViraElement<
|
|
|
305
265
|
if (selectElement.showPicker) {
|
|
306
266
|
try {
|
|
307
267
|
selectElement.showPicker();
|
|
308
|
-
}
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
309
270
|
/**
|
|
310
271
|
* Chromium throws `NotAllowedError` when `showPicker` runs without
|
|
311
272
|
* transient user activation; the picker just won't open.
|
|
@@ -315,11 +276,9 @@ export const ViraSelect = defineViraElement<
|
|
|
315
276
|
}),
|
|
316
277
|
listenTo(host, 'click', (event) => {
|
|
317
278
|
const selectElement = getSelectElement();
|
|
318
|
-
|
|
319
279
|
if (event.composedPath().includes(selectElement)) {
|
|
320
280
|
return;
|
|
321
281
|
}
|
|
322
|
-
|
|
323
282
|
event.preventDefault();
|
|
324
283
|
event.stopPropagation();
|
|
325
284
|
/** `showPicker` is not in Safari. */
|
|
@@ -327,7 +286,8 @@ export const ViraSelect = defineViraElement<
|
|
|
327
286
|
if (selectElement.showPicker) {
|
|
328
287
|
try {
|
|
329
288
|
selectElement.showPicker();
|
|
330
|
-
}
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
331
291
|
/**
|
|
332
292
|
* Chromium throws `NotAllowedError` when `showPicker` runs without
|
|
333
293
|
* transient user activation; the picker just won't open.
|
|
@@ -336,100 +296,91 @@ export const ViraSelect = defineViraElement<
|
|
|
336
296
|
}
|
|
337
297
|
}),
|
|
338
298
|
];
|
|
339
|
-
|
|
340
299
|
updateState({
|
|
341
|
-
cleanupListeners
|
|
300
|
+
cleanupListeners() {
|
|
342
301
|
listenerRemovers.forEach((remover) => remover());
|
|
343
302
|
},
|
|
344
303
|
});
|
|
345
304
|
},
|
|
346
|
-
cleanup({state, updateState}) {
|
|
305
|
+
cleanup({ state, updateState }) {
|
|
347
306
|
state.cleanupListeners?.();
|
|
348
307
|
updateState({
|
|
349
308
|
cleanupListeners: undefined,
|
|
350
309
|
});
|
|
351
310
|
},
|
|
352
|
-
render({inputs, state, dispatch, events}) {
|
|
311
|
+
render({ inputs, state, dispatch, events }) {
|
|
353
312
|
const value = inputs.value || undefined;
|
|
354
|
-
|
|
355
313
|
if (inputs.isReadonly) {
|
|
356
314
|
const selectedOption = inputs.options
|
|
357
315
|
.flatMap((entry) => (isViraSelectOptionGroup(entry) ? [...entry.options] : [entry]))
|
|
358
316
|
.find((option) => option.value === value);
|
|
359
|
-
const readonlyValueTemplate = html`
|
|
317
|
+
const readonlyValueTemplate = html `
|
|
360
318
|
<span class="readonly-value">
|
|
361
319
|
${selectedOption?.label || inputs.placeholder || ''}
|
|
362
320
|
</span>
|
|
363
321
|
`;
|
|
364
|
-
|
|
365
322
|
if (inputs.label) {
|
|
366
|
-
return html`
|
|
323
|
+
return html `
|
|
367
324
|
<label ${attributes(inputs.attributePassthrough?.label)}>
|
|
368
325
|
<span class="select-label">${inputs.label}</span>
|
|
369
326
|
${readonlyValueTemplate}
|
|
370
327
|
</label>
|
|
371
328
|
`;
|
|
372
|
-
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
373
331
|
return readonlyValueTemplate;
|
|
374
332
|
}
|
|
375
333
|
}
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
inputs.placeholder || value == undefined
|
|
379
|
-
? html`
|
|
334
|
+
const placeholderOptionTemplate = inputs.placeholder || value == undefined
|
|
335
|
+
? html `
|
|
380
336
|
<option value="" disabled ?selected=${value == undefined}>
|
|
381
337
|
${inputs.placeholder}
|
|
382
338
|
</option>
|
|
383
339
|
`
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
const selectTemplate = html`
|
|
340
|
+
: nothing;
|
|
341
|
+
const selectTemplate = html `
|
|
387
342
|
<span class="select-wrapper">
|
|
388
343
|
<select
|
|
389
344
|
.value=${ifDefined(value)}
|
|
390
345
|
class=${classMap({
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
346
|
+
placeholder: !value && !!inputs.placeholder,
|
|
347
|
+
'with-icon': !!inputs.icon,
|
|
348
|
+
})}
|
|
394
349
|
tabindex=${inputs.disabled ? -1 : 0}
|
|
395
350
|
id=${ifDefined(inputs.label ? state.randomId : undefined)}
|
|
396
351
|
aria-label=${ifDefined(inputs.label || undefined)}
|
|
397
352
|
aria-disabled=${ifDefined(inputs.disabled ? 'true' : undefined)}
|
|
398
353
|
${listen('input', (event) => {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
detail: newValue,
|
|
415
|
-
}),
|
|
416
|
-
);
|
|
417
|
-
})}
|
|
354
|
+
const selectElement = extractEventTarget(event, HTMLSelectElement);
|
|
355
|
+
const newValue = selectElement.value;
|
|
356
|
+
if (selectElement.value !== value) {
|
|
357
|
+
selectElement.selectedIndex = inputs.options
|
|
358
|
+
.flatMap((entry) => {
|
|
359
|
+
return isViraSelectOptionGroup(entry)
|
|
360
|
+
? [...entry.options]
|
|
361
|
+
: [entry];
|
|
362
|
+
})
|
|
363
|
+
.findIndex((option) => option.value === value);
|
|
364
|
+
}
|
|
365
|
+
dispatch(new events.valueChange({
|
|
366
|
+
detail: newValue,
|
|
367
|
+
}));
|
|
368
|
+
})}
|
|
418
369
|
${attributes(inputs.attributePassthrough?.select)}
|
|
419
370
|
>
|
|
420
371
|
${placeholderOptionTemplate}
|
|
421
372
|
${inputs.options.map((entry) => {
|
|
422
|
-
|
|
423
|
-
|
|
373
|
+
if (isViraSelectOptionGroup(entry)) {
|
|
374
|
+
return html `
|
|
424
375
|
<optgroup label=${entry.groupName}>
|
|
425
376
|
${entry.options.map((option) => {
|
|
426
|
-
|
|
427
|
-
|
|
377
|
+
return renderSelectOption(option, value);
|
|
378
|
+
})}
|
|
428
379
|
</optgroup>
|
|
429
380
|
`;
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
381
|
+
}
|
|
382
|
+
return renderSelectOption(entry, value);
|
|
383
|
+
})}
|
|
433
384
|
</select>
|
|
434
385
|
<!--
|
|
435
386
|
These separate style elements are necessary so that we can select them as
|
|
@@ -441,26 +392,26 @@ export const ViraSelect = defineViraElement<
|
|
|
441
392
|
<div class="border-style wrapper-border"></div>
|
|
442
393
|
|
|
443
394
|
<${ViraIcon.assign({
|
|
444
|
-
|
|
445
|
-
|
|
395
|
+
icon: inputs.icon,
|
|
396
|
+
})}
|
|
446
397
|
class="input-icon"
|
|
447
398
|
></${ViraIcon}>
|
|
448
399
|
<${ViraIcon.assign({
|
|
449
|
-
|
|
450
|
-
|
|
400
|
+
icon: ChevronUp16Icon,
|
|
401
|
+
})}
|
|
451
402
|
class="trigger-icon"
|
|
452
403
|
></${ViraIcon}>
|
|
453
404
|
</span>
|
|
454
405
|
`;
|
|
455
|
-
|
|
456
406
|
if (inputs.label) {
|
|
457
|
-
return html`
|
|
407
|
+
return html `
|
|
458
408
|
<label for=${state.randomId} ${attributes(inputs.attributePassthrough?.label)}>
|
|
459
409
|
<span class="select-label">${inputs.label}</span>
|
|
460
410
|
${selectTemplate}
|
|
461
411
|
</label>
|
|
462
412
|
`;
|
|
463
|
-
}
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
464
415
|
return selectTemplate;
|
|
465
416
|
}
|
|
466
417
|
},
|