vira 32.0.0-beta.0 → 32.1.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 +40 -0
- package/{src/elements/vira-button.element.ts → dist/elements/vira-button.element.js} +114 -261
- 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} +243 -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,59 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
ifDefined,
|
|
10
|
-
listen,
|
|
11
|
-
listenToActivate,
|
|
12
|
-
type AttributeValues,
|
|
13
|
-
type CSSResult,
|
|
14
|
-
} from 'element-vir';
|
|
15
|
-
import {Check24Icon, viraIconCssVars} from '../icons/index.js';
|
|
16
|
-
import {viraDisabledStyles} from '../styles/disabled.js';
|
|
17
|
-
import {createFocusStyles} from '../styles/focus.js';
|
|
18
|
-
import {viraFormCssVars} from '../styles/form-styles.js';
|
|
19
|
-
import {defineViraElement} from '../util/define-vira-element.js';
|
|
20
|
-
import {ViraIcon} from './vira-icon.element.js';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* All inner elements supported by {@link ViraCheckbox}.
|
|
24
|
-
*
|
|
25
|
-
* @category Internals
|
|
26
|
-
*/
|
|
27
|
-
export type ViraCheckboxInnerElements =
|
|
28
|
-
| 'label'
|
|
29
|
-
| 'custom-checkbox'
|
|
30
|
-
| 'text'
|
|
31
|
-
| typeof ViraIcon.tagName;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Inputs for {@link ViraCheckbox}.
|
|
35
|
-
*
|
|
36
|
-
* @category Internal
|
|
37
|
-
*/
|
|
38
|
-
export type ViraCheckboxInputs = {
|
|
39
|
-
value: boolean;
|
|
40
|
-
} & PartialWithUndefined<{
|
|
41
|
-
stylePassthrough: Partial<Record<ViraCheckboxInnerElements, CSSResult>>;
|
|
42
|
-
attributePassthrough: Partial<Record<ViraCheckboxInnerElements, AttributeValues>>;
|
|
43
|
-
isDisabled: boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Text label for the checkbox. Used as the fallback when the `vira-checkbox-label` slot is not
|
|
46
|
-
* filled.
|
|
47
|
-
*/
|
|
48
|
-
label: string;
|
|
49
|
-
hasError: boolean;
|
|
50
|
-
useHorizontalLabel: boolean;
|
|
51
|
-
/** The checkbox will be filled with a form selection color when it is checked. */
|
|
52
|
-
fillWhenChecked: boolean;
|
|
53
|
-
/** The checkbox will be filled with a form error color when it is unchecked. */
|
|
54
|
-
fillWhenUnchecked: boolean;
|
|
55
|
-
}>;
|
|
56
|
-
|
|
1
|
+
import { extractEventTarget } from '@augment-vir/web';
|
|
2
|
+
import { attributes, classMap, css, defineElementEvent, html, ifDefined, listen, listenToActivate, } from 'element-vir';
|
|
3
|
+
import { Check24Icon, viraIconCssVars } from '../icons/index.js';
|
|
4
|
+
import { viraDisabledStyles } from '../styles/disabled.js';
|
|
5
|
+
import { createFocusStyles } from '../styles/focus.js';
|
|
6
|
+
import { viraFormCssVars } from '../styles/form-styles.js';
|
|
7
|
+
import { defineViraElement } from '../util/define-vira-element.js';
|
|
8
|
+
import { ViraIcon } from './vira-icon.element.js';
|
|
57
9
|
/**
|
|
58
10
|
* A custom checkbox.
|
|
59
11
|
*
|
|
@@ -61,7 +13,7 @@ export type ViraCheckboxInputs = {
|
|
|
61
13
|
* @category Elements
|
|
62
14
|
* @see https://electrovir.github.io/vira/book/elements/vira-checkbox
|
|
63
15
|
*/
|
|
64
|
-
export const ViraCheckbox = defineViraElement
|
|
16
|
+
export const ViraCheckbox = defineViraElement()({
|
|
65
17
|
tagName: 'vira-checkbox',
|
|
66
18
|
slotNames: [
|
|
67
19
|
'vira-checkbox-label',
|
|
@@ -72,12 +24,18 @@ export const ViraCheckbox = defineViraElement<Readonly<ViraCheckboxInputs>>()({
|
|
|
72
24
|
};
|
|
73
25
|
},
|
|
74
26
|
hostClasses: {
|
|
75
|
-
'vira-checkbox-horizontal'
|
|
76
|
-
|
|
77
|
-
|
|
27
|
+
'vira-checkbox-horizontal'({ inputs }) {
|
|
28
|
+
return !!inputs.useHorizontalLabel;
|
|
29
|
+
},
|
|
30
|
+
'vira-checkbox-filled-checked'({ inputs }) {
|
|
31
|
+
return !!inputs.fillWhenChecked;
|
|
32
|
+
},
|
|
33
|
+
'vira-checkbox-filled-unchecked'({ inputs }) {
|
|
34
|
+
return !!inputs.fillWhenUnchecked;
|
|
35
|
+
},
|
|
78
36
|
},
|
|
79
|
-
styles
|
|
80
|
-
return css`
|
|
37
|
+
styles({ hostClasses }) {
|
|
38
|
+
return css `
|
|
81
39
|
:host {
|
|
82
40
|
display: inline-flex;
|
|
83
41
|
}
|
|
@@ -105,12 +63,12 @@ export const ViraCheckbox = defineViraElement<Readonly<ViraCheckboxInputs>>()({
|
|
|
105
63
|
label {
|
|
106
64
|
&:not(.disabled):hover .custom-checkbox.checked {
|
|
107
65
|
background-color: ${viraFormCssVars['vira-form-accent-primary-hover-color']
|
|
108
|
-
|
|
66
|
+
.value};
|
|
109
67
|
}
|
|
110
68
|
|
|
111
69
|
&:not(.disabled):active .custom-checkbox.checked {
|
|
112
70
|
background-color: ${viraFormCssVars['vira-form-accent-primary-active-color']
|
|
113
|
-
|
|
71
|
+
.value};
|
|
114
72
|
}
|
|
115
73
|
}
|
|
116
74
|
}
|
|
@@ -169,8 +127,8 @@ export const ViraCheckbox = defineViraElement<Readonly<ViraCheckboxInputs>>()({
|
|
|
169
127
|
cursor: pointer;
|
|
170
128
|
|
|
171
129
|
${createFocusStyles({
|
|
172
|
-
|
|
173
|
-
|
|
130
|
+
elementBorderSize: '1px',
|
|
131
|
+
})}
|
|
174
132
|
|
|
175
133
|
&.checked {
|
|
176
134
|
& ${ViraIcon} {
|
|
@@ -199,48 +157,43 @@ export const ViraCheckbox = defineViraElement<Readonly<ViraCheckboxInputs>>()({
|
|
|
199
157
|
`;
|
|
200
158
|
},
|
|
201
159
|
events: {
|
|
202
|
-
valueChange: defineElementEvent
|
|
160
|
+
valueChange: defineElementEvent(),
|
|
203
161
|
},
|
|
204
|
-
render({inputs, dispatch, events, slotNames, state, updateState}) {
|
|
205
|
-
function updateValue(
|
|
162
|
+
render({ inputs, dispatch, events, slotNames, state, updateState }) {
|
|
163
|
+
function updateValue() {
|
|
206
164
|
if (!inputs.isDisabled) {
|
|
207
|
-
dispatch(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}),
|
|
211
|
-
);
|
|
165
|
+
dispatch(new events.valueChange({
|
|
166
|
+
detail: !inputs.value,
|
|
167
|
+
}));
|
|
212
168
|
}
|
|
213
169
|
}
|
|
214
|
-
|
|
215
170
|
const hasLabel = !!inputs.label || state.hasSlottedLabel;
|
|
216
|
-
|
|
217
|
-
const textLabel = html`
|
|
171
|
+
const textLabel = html `
|
|
218
172
|
<span
|
|
219
173
|
class="label-text ${classMap({
|
|
220
|
-
|
|
221
|
-
|
|
174
|
+
empty: !hasLabel,
|
|
175
|
+
})}"
|
|
222
176
|
${attributes(inputs.attributePassthrough?.['text'])}
|
|
223
177
|
style=${ifDefined(inputs.stylePassthrough?.['text'])}
|
|
224
178
|
>
|
|
225
179
|
<slot
|
|
226
180
|
name=${slotNames['vira-checkbox-label']}
|
|
227
181
|
${listen('slotchange', (event) => {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
182
|
+
const slotElement = extractEventTarget(event, HTMLSlotElement);
|
|
183
|
+
updateState({
|
|
184
|
+
hasSlottedLabel: !!slotElement.assignedNodes().length,
|
|
185
|
+
});
|
|
186
|
+
})}
|
|
233
187
|
>
|
|
234
188
|
${inputs.label}
|
|
235
189
|
</slot>
|
|
236
190
|
</span>
|
|
237
191
|
`;
|
|
238
|
-
|
|
239
|
-
return html`
|
|
192
|
+
return html `
|
|
240
193
|
<label
|
|
241
194
|
class=${classMap({
|
|
242
|
-
|
|
243
|
-
|
|
195
|
+
disabled: !!inputs.isDisabled,
|
|
196
|
+
})}
|
|
244
197
|
${attributes(inputs.attributePassthrough?.label)}
|
|
245
198
|
style=${ifDefined(inputs.stylePassthrough?.label)}
|
|
246
199
|
${listen('mousedown', updateValue)}
|
|
@@ -248,10 +201,10 @@ export const ViraCheckbox = defineViraElement<Readonly<ViraCheckboxInputs>>()({
|
|
|
248
201
|
${textLabel}
|
|
249
202
|
<span
|
|
250
203
|
class="custom-checkbox ${classMap({
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
204
|
+
checked: inputs.value,
|
|
205
|
+
disabled: !!inputs.isDisabled,
|
|
206
|
+
error: !!inputs.hasError,
|
|
207
|
+
})}"
|
|
255
208
|
role="checkbox"
|
|
256
209
|
aria-label=${ifDefined(inputs.label || undefined)}
|
|
257
210
|
aria-checked=${inputs.value ? 'true' : 'false'}
|
|
@@ -262,9 +215,9 @@ export const ViraCheckbox = defineViraElement<Readonly<ViraCheckboxInputs>>()({
|
|
|
262
215
|
${listenToActivate(updateValue)}
|
|
263
216
|
>
|
|
264
217
|
<${ViraIcon.assign({
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
218
|
+
icon: Check24Icon,
|
|
219
|
+
fitContainer: true,
|
|
220
|
+
})}
|
|
268
221
|
${attributes(inputs.attributePassthrough?.[ViraIcon.tagName])}
|
|
269
222
|
style=${ifDefined(inputs.stylePassthrough?.[ViraIcon.tagName])}
|
|
270
223
|
></${ViraIcon}>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
+
/**
|
|
3
|
+
* A combination ViraCard and ViraCollapsibleWrapper with a collapse caret.
|
|
4
|
+
*
|
|
5
|
+
* @category Elements
|
|
6
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-checkbox
|
|
7
|
+
*/
|
|
8
|
+
export declare const ViraCollapsibleCard: import("element-vir").DeclarativeElementDefinition<`vira-${string}`, PartialWithUndefined<{
|
|
9
|
+
/**
|
|
10
|
+
* When set to `true`, the card styles are diminished so you can still use this element in
|
|
11
|
+
* more flexible ways.
|
|
12
|
+
*
|
|
13
|
+
* @default false
|
|
14
|
+
*/
|
|
15
|
+
rawCollapsible: boolean;
|
|
16
|
+
startExpanded: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* If set to true, the card will always be expanded, expansion cannot be toggled, and the
|
|
19
|
+
* expand toggle icon is hidden.
|
|
20
|
+
*
|
|
21
|
+
* @default false
|
|
22
|
+
*/
|
|
23
|
+
blockExpansion: boolean;
|
|
24
|
+
/** When true, forces the content to expand when printing regardless of collapsed state. */
|
|
25
|
+
expandOnPrint: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* When set to `true`, the header is hidden.
|
|
28
|
+
*
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
hideHeader: boolean;
|
|
32
|
+
}>, {
|
|
33
|
+
isExpanded: boolean;
|
|
34
|
+
}, {
|
|
35
|
+
expandToggle: import("element-vir").DefineElementEvent<boolean>;
|
|
36
|
+
}, "vira-collapsible-card-expanded" | "vira-collapsible-card-expansion-blocked" | "vira-collapsible-card-card-styles", "vira-collapsible-card-content-gap", readonly ["vira-collapsible-card-header"], readonly ["openCaret"]>;
|
|
@@ -1,65 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {ViraIcon} from './vira-icon.element.js';
|
|
9
|
-
|
|
1
|
+
import { css, defineElementEvent, html, listen, nothing, testId } from 'element-vir';
|
|
2
|
+
import { ChevronUp16Icon } from '../icons/index.js';
|
|
3
|
+
import { viraFontCssVars } from '../styles/font.js';
|
|
4
|
+
import { viraFormCssVars } from '../styles/form-styles.js';
|
|
5
|
+
import { defineViraElement } from '../util/define-vira-element.js';
|
|
6
|
+
import { ViraCollapsibleWrapper } from './vira-collapsible-wrapper.element.js';
|
|
7
|
+
import { ViraIcon } from './vira-icon.element.js';
|
|
10
8
|
/**
|
|
11
9
|
* A combination ViraCard and ViraCollapsibleWrapper with a collapse caret.
|
|
12
10
|
*
|
|
13
11
|
* @category Elements
|
|
14
12
|
* @see https://electrovir.github.io/vira/book/elements/vira-checkbox
|
|
15
13
|
*/
|
|
16
|
-
export const ViraCollapsibleCard = defineViraElement
|
|
17
|
-
PartialWithUndefined<{
|
|
18
|
-
/**
|
|
19
|
-
* When set to `true`, the card styles are diminished so you can still use this element in
|
|
20
|
-
* more flexible ways.
|
|
21
|
-
*
|
|
22
|
-
* @default false
|
|
23
|
-
*/
|
|
24
|
-
rawCollapsible: boolean;
|
|
25
|
-
startExpanded: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* If set to true, the card will always be expanded, expansion cannot be toggled, and the
|
|
28
|
-
* expand toggle icon is hidden.
|
|
29
|
-
*
|
|
30
|
-
* @default false
|
|
31
|
-
*/
|
|
32
|
-
blockExpansion: boolean;
|
|
33
|
-
/** When true, forces the content to expand when printing regardless of collapsed state. */
|
|
34
|
-
expandOnPrint: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* When set to `true`, the header is hidden.
|
|
37
|
-
*
|
|
38
|
-
* @default false
|
|
39
|
-
*/
|
|
40
|
-
hideHeader: boolean;
|
|
41
|
-
}>
|
|
42
|
-
>()({
|
|
14
|
+
export const ViraCollapsibleCard = defineViraElement()({
|
|
43
15
|
tagName: 'vira-collapsible-card',
|
|
44
16
|
testIds: ['openCaret'],
|
|
45
17
|
events: {
|
|
46
|
-
expandToggle: defineElementEvent
|
|
18
|
+
expandToggle: defineElementEvent(),
|
|
47
19
|
},
|
|
48
|
-
state({inputs}) {
|
|
20
|
+
state({ inputs }) {
|
|
49
21
|
return {
|
|
50
22
|
isExpanded: !!inputs.startExpanded,
|
|
51
23
|
};
|
|
52
24
|
},
|
|
53
25
|
hostClasses: {
|
|
54
|
-
'vira-collapsible-card-expanded'
|
|
55
|
-
|
|
56
|
-
|
|
26
|
+
'vira-collapsible-card-expanded'({ state }) {
|
|
27
|
+
return state.isExpanded;
|
|
28
|
+
},
|
|
29
|
+
'vira-collapsible-card-expansion-blocked'({ inputs }) {
|
|
30
|
+
return !!inputs.blockExpansion;
|
|
31
|
+
},
|
|
32
|
+
'vira-collapsible-card-card-styles'({ inputs }) {
|
|
33
|
+
return !inputs.rawCollapsible;
|
|
34
|
+
},
|
|
57
35
|
},
|
|
58
36
|
cssVars: {
|
|
59
37
|
'vira-collapsible-card-content-gap': '16px',
|
|
60
38
|
},
|
|
61
|
-
styles
|
|
62
|
-
return css`
|
|
39
|
+
styles({ hostClasses, cssVars }) {
|
|
40
|
+
return css `
|
|
63
41
|
:host {
|
|
64
42
|
display: inline-flex;
|
|
65
43
|
max-width: 100%;
|
|
@@ -143,60 +121,55 @@ export const ViraCollapsibleCard = defineViraElement<
|
|
|
143
121
|
slotNames: [
|
|
144
122
|
'vira-collapsible-card-header',
|
|
145
123
|
],
|
|
146
|
-
render({inputs, slotNames, state, updateState, testIds, dispatch, events}) {
|
|
124
|
+
render({ inputs, slotNames, state, updateState, testIds, dispatch, events }) {
|
|
147
125
|
if (inputs.blockExpansion) {
|
|
148
126
|
updateState({
|
|
149
127
|
isExpanded: true,
|
|
150
128
|
});
|
|
151
129
|
}
|
|
152
|
-
|
|
153
|
-
const wrapperContentTemplate = html`
|
|
130
|
+
const wrapperContentTemplate = html `
|
|
154
131
|
<div class="card-content">
|
|
155
132
|
<slot></slot>
|
|
156
133
|
</div>
|
|
157
134
|
`;
|
|
158
135
|
const wrapperHeaderTemplate = inputs.hideHeader
|
|
159
136
|
? nothing
|
|
160
|
-
: html`
|
|
137
|
+
: html `
|
|
161
138
|
<div class="card-header">
|
|
162
139
|
<slot name=${slotNames['vira-collapsible-card-header']}>
|
|
163
140
|
<div class="header-filler"></div>
|
|
164
141
|
</slot>
|
|
165
142
|
|
|
166
143
|
${inputs.blockExpansion
|
|
167
|
-
|
|
168
|
-
|
|
144
|
+
? nothing
|
|
145
|
+
: html `
|
|
169
146
|
<${ViraIcon.assign({
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
147
|
+
icon: ChevronUp16Icon,
|
|
148
|
+
fitContainer: true,
|
|
149
|
+
})}
|
|
173
150
|
${testId(testIds.openCaret)}
|
|
174
151
|
class="open-caret"
|
|
175
152
|
></${ViraIcon}>
|
|
176
153
|
`}
|
|
177
154
|
</div>
|
|
178
155
|
`;
|
|
179
|
-
|
|
180
|
-
return html`
|
|
156
|
+
return html `
|
|
181
157
|
<${ViraCollapsibleWrapper.assign({
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
158
|
+
expanded: state.isExpanded,
|
|
159
|
+
expandOnPrint: inputs.expandOnPrint ?? false,
|
|
160
|
+
})}
|
|
185
161
|
${listen(ViraCollapsibleWrapper.events.expandChange, (event) => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}),
|
|
198
|
-
);
|
|
199
|
-
})}
|
|
162
|
+
event.stopImmediatePropagation();
|
|
163
|
+
if (inputs.blockExpansion) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
updateState({
|
|
167
|
+
isExpanded: event.detail,
|
|
168
|
+
});
|
|
169
|
+
dispatch(new events.expandToggle({
|
|
170
|
+
detail: event.detail,
|
|
171
|
+
}));
|
|
172
|
+
})}
|
|
200
173
|
>
|
|
201
174
|
<div
|
|
202
175
|
class="header-wrapper"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A wrapper element that can collapse and expand to fit its content dynamically and efficiently.
|
|
3
|
+
*
|
|
4
|
+
* @category Collapsible
|
|
5
|
+
* @category Elements
|
|
6
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-collapsible-wrapper
|
|
7
|
+
*/
|
|
8
|
+
export declare const ViraCollapsibleWrapper: import("element-vir").DeclarativeElementDefinition<`vira-${string}`, {
|
|
9
|
+
expanded: boolean;
|
|
10
|
+
/** When true, forces the content to expand when printing regardless of collapsed state. */
|
|
11
|
+
expandOnPrint?: boolean;
|
|
12
|
+
}, {
|
|
13
|
+
contentHeight: number;
|
|
14
|
+
contentWidth: number;
|
|
15
|
+
/**
|
|
16
|
+
* Collapsed content that is merely `height: 0` is still rendered, so the browser emits
|
|
17
|
+
* a line break for it when serializing a selection to plain text. Copying a region that
|
|
18
|
+
* spans collapsed wrappers then pastes with runs of blank lines. Taking the content out
|
|
19
|
+
* of layout entirely is what drops those breaks; `visibility: hidden` and `user-select:
|
|
20
|
+
* none` both leave them behind.
|
|
21
|
+
*
|
|
22
|
+
* This starts `false` even when collapsed because the wrapper takes both its width and
|
|
23
|
+
* its animation target height from the content, so the content has to be laid out once
|
|
24
|
+
* before it can be hidden.
|
|
25
|
+
*/
|
|
26
|
+
isContentHidden: boolean;
|
|
27
|
+
collapsingElement: HTMLDivElement | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
expandChange: import("element-vir").DefineElementEvent<boolean>;
|
|
30
|
+
}, "vira-collapsible-wrapper-expand-on-print", `vira-${string}-`, readonly ["vira-collapsible-wrapper-header"], readonly []>;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {assertWrap} from '@augment-vir/assert';
|
|
2
|
-
import {classMap, css, defineElementEvent, html, listen, onDomCreated, onResize} from 'element-vir';
|
|
3
|
-
import {noNativeFormStyles, noUserSelect, viraAnimationDurations} from '../styles/index.js';
|
|
4
|
-
import {defineViraElement} from '../util/define-vira-element.js';
|
|
5
|
-
|
|
1
|
+
import { assertWrap } from '@augment-vir/assert';
|
|
2
|
+
import { classMap, css, defineElementEvent, html, listen, onDomCreated, onResize } from 'element-vir';
|
|
3
|
+
import { noNativeFormStyles, noUserSelect, viraAnimationDurations } from '../styles/index.js';
|
|
4
|
+
import { defineViraElement } from '../util/define-vira-element.js';
|
|
6
5
|
/**
|
|
7
6
|
* A wrapper element that can collapse and expand to fit its content dynamically and efficiently.
|
|
8
7
|
*
|
|
@@ -10,11 +9,7 @@ import {defineViraElement} from '../util/define-vira-element.js';
|
|
|
10
9
|
* @category Elements
|
|
11
10
|
* @see https://electrovir.github.io/vira/book/elements/vira-collapsible-wrapper
|
|
12
11
|
*/
|
|
13
|
-
export const ViraCollapsibleWrapper = defineViraElement
|
|
14
|
-
expanded: boolean;
|
|
15
|
-
/** When true, forces the content to expand when printing regardless of collapsed state. */
|
|
16
|
-
expandOnPrint?: boolean;
|
|
17
|
-
}>()({
|
|
12
|
+
export const ViraCollapsibleWrapper = defineViraElement()({
|
|
18
13
|
tagName: 'vira-collapsible-wrapper',
|
|
19
14
|
state() {
|
|
20
15
|
return {
|
|
@@ -32,15 +27,17 @@ export const ViraCollapsibleWrapper = defineViraElement<{
|
|
|
32
27
|
* before it can be hidden.
|
|
33
28
|
*/
|
|
34
29
|
isContentHidden: false,
|
|
35
|
-
collapsingElement: undefined
|
|
30
|
+
collapsingElement: undefined,
|
|
36
31
|
};
|
|
37
32
|
},
|
|
38
33
|
hostClasses: {
|
|
39
|
-
'vira-collapsible-wrapper-expand-on-print'
|
|
34
|
+
'vira-collapsible-wrapper-expand-on-print'({ inputs }) {
|
|
35
|
+
return !!inputs.expandOnPrint;
|
|
36
|
+
},
|
|
40
37
|
},
|
|
41
38
|
slotNames: ['vira-collapsible-wrapper-header'],
|
|
42
|
-
styles
|
|
43
|
-
return css`
|
|
39
|
+
styles({ hostClasses }) {
|
|
40
|
+
return css `
|
|
44
41
|
:host {
|
|
45
42
|
display: flex;
|
|
46
43
|
flex-direction: column;
|
|
@@ -88,19 +85,18 @@ export const ViraCollapsibleWrapper = defineViraElement<{
|
|
|
88
85
|
`;
|
|
89
86
|
},
|
|
90
87
|
events: {
|
|
91
|
-
expandChange: defineElementEvent
|
|
88
|
+
expandChange: defineElementEvent(),
|
|
92
89
|
},
|
|
93
|
-
render({state, slotNames, updateState, dispatch, events, inputs}) {
|
|
90
|
+
render({ state, slotNames, updateState, dispatch, events, inputs }) {
|
|
94
91
|
if (inputs.expanded && state.isContentHidden) {
|
|
95
92
|
updateState({
|
|
96
93
|
isContentHidden: false,
|
|
97
94
|
});
|
|
98
|
-
}
|
|
99
|
-
|
|
95
|
+
}
|
|
96
|
+
else if (!inputs.expanded &&
|
|
100
97
|
!state.isContentHidden &&
|
|
101
98
|
state.contentHeight &&
|
|
102
|
-
!state.collapsingElement?.clientHeight
|
|
103
|
-
) {
|
|
99
|
+
!state.collapsingElement?.clientHeight) {
|
|
104
100
|
/**
|
|
105
101
|
* Already at zero height, so no collapse animation will run and `transitionend` will
|
|
106
102
|
* never fire. Covers a wrapper that mounts collapsed and one that gets collapsed before
|
|
@@ -114,90 +110,82 @@ export const ViraCollapsibleWrapper = defineViraElement<{
|
|
|
114
110
|
isContentHidden: true,
|
|
115
111
|
});
|
|
116
112
|
}
|
|
117
|
-
|
|
118
113
|
/**
|
|
119
114
|
* Hidden content contributes no width, so the wrapper would shrink to its header without
|
|
120
115
|
* the width measured while the content was last laid out. `max-width` keeps that from
|
|
121
116
|
* blocking a later shrink to a narrower container.
|
|
122
117
|
*/
|
|
123
118
|
const hiddenContentStyles = state.isContentHidden
|
|
124
|
-
? css`
|
|
119
|
+
? css `
|
|
125
120
|
width: ${state.contentWidth}px;
|
|
126
121
|
max-width: 100%;
|
|
127
122
|
`
|
|
128
|
-
: css``;
|
|
129
|
-
|
|
123
|
+
: css ``;
|
|
130
124
|
/**
|
|
131
125
|
* Hidden content is rendered without the resize observer rather than with a callback that
|
|
132
126
|
* ignores it. An attached observer still fires when the content is hidden, and the browser
|
|
133
127
|
* reports that as a resize observer loop.
|
|
134
128
|
*/
|
|
135
129
|
const contentWrapperTemplate = state.isContentHidden
|
|
136
|
-
? html`
|
|
130
|
+
? html `
|
|
137
131
|
<div class="content-wrapper hidden-content">
|
|
138
132
|
<slot></slot>
|
|
139
133
|
</div>
|
|
140
134
|
`
|
|
141
|
-
: html`
|
|
135
|
+
: html `
|
|
142
136
|
<div
|
|
143
|
-
${onResize(({contentRect}) => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
137
|
+
${onResize(({ contentRect }) => {
|
|
138
|
+
updateState({
|
|
139
|
+
contentHeight: contentRect.height,
|
|
140
|
+
contentWidth: contentRect.width,
|
|
141
|
+
});
|
|
142
|
+
})}
|
|
149
143
|
class="content-wrapper"
|
|
150
144
|
>
|
|
151
145
|
<slot></slot>
|
|
152
146
|
</div>
|
|
153
147
|
`;
|
|
154
|
-
|
|
155
148
|
const collapsingStyles = inputs.expanded
|
|
156
|
-
? css`
|
|
149
|
+
? css `
|
|
157
150
|
height: ${state.contentHeight}px;
|
|
158
151
|
${hiddenContentStyles}
|
|
159
152
|
`
|
|
160
|
-
: css`
|
|
153
|
+
: css `
|
|
161
154
|
height: 0;
|
|
162
155
|
${hiddenContentStyles}
|
|
163
156
|
`;
|
|
164
|
-
|
|
165
|
-
return html`
|
|
157
|
+
return html `
|
|
166
158
|
<button
|
|
167
159
|
class="header-wrapper"
|
|
168
160
|
${listen('click', () => {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
);
|
|
174
|
-
})}
|
|
161
|
+
dispatch(new events.expandChange({
|
|
162
|
+
detail: !inputs.expanded,
|
|
163
|
+
}));
|
|
164
|
+
})}
|
|
175
165
|
>
|
|
176
166
|
<slot name=${slotNames['vira-collapsible-wrapper-header']}>Header</slot>
|
|
177
167
|
</button>
|
|
178
168
|
|
|
179
169
|
<div
|
|
180
170
|
class="collapsing-element ${classMap({
|
|
181
|
-
|
|
182
|
-
|
|
171
|
+
collapsed: !inputs.expanded,
|
|
172
|
+
})}"
|
|
183
173
|
style=${collapsingStyles}
|
|
184
174
|
disabled="disabled"
|
|
185
175
|
${onDomCreated((element) => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
176
|
+
updateState({
|
|
177
|
+
collapsingElement: assertWrap.instanceOf(element, HTMLDivElement),
|
|
178
|
+
});
|
|
179
|
+
})}
|
|
190
180
|
${listen('transitionend', (event) => {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
})}
|
|
181
|
+
if (event.propertyName === 'height' &&
|
|
182
|
+
event.target === event.currentTarget &&
|
|
183
|
+
!inputs.expanded) {
|
|
184
|
+
updateState({
|
|
185
|
+
isContentHidden: true,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
})}
|
|
201
189
|
>
|
|
202
190
|
${contentWrapperTemplate}
|
|
203
191
|
</div>
|