vira 28.19.6 → 29.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/define-vira-element.d.ts +18 -0
- package/dist/elements/define-vira-element.js +19 -0
- package/dist/elements/form/vira-form-fields.d.ts +100 -0
- package/dist/elements/form/vira-form-fields.js +60 -0
- package/dist/elements/form/vira-form.element.d.ts +35 -0
- package/dist/elements/form/vira-form.element.js +151 -0
- package/dist/elements/index.js +25 -0
- package/dist/elements/pop-up/pop-up-helpers.d.ts +33 -0
- package/dist/elements/pop-up/pop-up-helpers.js +58 -0
- package/{src/elements/pop-up/pop-up-menu-item.ts → dist/elements/pop-up/pop-up-menu-item.d.ts} +3 -4
- package/dist/elements/pop-up/pop-up-menu-item.js +1 -0
- package/dist/elements/pop-up/vira-menu-item.element.d.ts +19 -0
- package/{src/elements/pop-up/vira-menu-item.element.ts → dist/elements/pop-up/vira-menu-item.element.js} +11 -28
- package/dist/elements/pop-up/vira-menu-trigger.element.d.ts +41 -0
- package/dist/elements/pop-up/vira-menu-trigger.element.js +121 -0
- package/dist/elements/pop-up/vira-menu.element.d.ts +38 -0
- package/{src/elements/pop-up/vira-menu.element.ts → dist/elements/pop-up/vira-menu.element.js} +49 -78
- package/dist/elements/pop-up/vira-pop-up-menu.element.d.ts +35 -0
- package/{src/elements/pop-up/vira-pop-up-menu.element.ts → dist/elements/pop-up/vira-pop-up-menu.element.js} +24 -37
- package/dist/elements/pop-up/vira-pop-up-trigger.element.d.ts +105 -0
- package/{src/elements/pop-up/vira-pop-up-trigger.element.ts → dist/elements/pop-up/vira-pop-up-trigger.element.js} +104 -199
- package/dist/elements/shared-text-input-logic.d.ts +63 -0
- package/dist/elements/shared-text-input-logic.js +101 -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} +7 -8
- package/dist/elements/vira-button.element.d.ts +34 -0
- package/dist/elements/vira-button.element.js +176 -0
- package/dist/elements/vira-card.element.d.ts +18 -0
- package/dist/elements/vira-card.element.js +60 -0
- package/dist/elements/vira-checkbox.element.d.ts +38 -0
- package/{src/elements/vira-checkbox.element.ts → dist/elements/vira-checkbox.element.js} +70 -83
- package/dist/elements/vira-collapsible-wrapper.element.d.ts +14 -0
- package/{src/elements/vira-collapsible-wrapper.element.ts → dist/elements/vira-collapsible-wrapper.element.js} +16 -18
- package/dist/elements/vira-dropdown.element.d.ts +46 -0
- package/{src/elements/vira-dropdown.element.ts → dist/elements/vira-dropdown.element.js} +48 -95
- package/dist/elements/vira-error.element.d.ts +7 -0
- package/{src/elements/vira-error.element.ts → dist/elements/vira-error.element.js} +6 -7
- package/dist/elements/vira-icon.element.d.ts +13 -0
- package/{src/elements/vira-icon.element.ts → dist/elements/vira-icon.element.js} +6 -13
- package/dist/elements/vira-image.element.d.ts +45 -0
- package/{src/elements/vira-image.element.ts → dist/elements/vira-image.element.js} +43 -63
- package/dist/elements/vira-input.element.d.ts +62 -0
- package/{src/elements/vira-input.element.ts → dist/elements/vira-input.element.js} +93 -166
- package/dist/elements/vira-link.element.d.ts +73 -0
- package/{src/elements/vira-link.element.ts → dist/elements/vira-link.element.js} +17 -67
- package/dist/elements/vira-modal.element.d.ts +39 -0
- package/{src/elements/vira-modal.element.ts → dist/elements/vira-modal.element.js} +56 -97
- package/dist/elements/vira-overflow-switch.element.d.ts +21 -0
- package/dist/elements/vira-overflow-switch.element.js +110 -0
- package/dist/elements/vira-progress.element.d.ts +18 -0
- package/{src/elements/vira-progress.element.ts → dist/elements/vira-progress.element.js} +14 -30
- package/dist/elements/vira-select.element.d.ts +48 -0
- package/{src/elements/vira-select.element.ts → dist/elements/vira-select.element.js} +45 -99
- package/dist/icons/icon-color.test-helper.d.ts +6 -0
- package/dist/icons/icon-color.test-helper.js +9 -0
- 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/dist/icons/icon-svg.d.ts +27 -0
- package/dist/icons/icon-svg.js +48 -0
- package/dist/icons/icon-svgs/bell-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/bell-24.icon.ts → dist/icons/icon-svgs/bell-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/chat-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/chat-24.icon.ts → dist/icons/icon-svgs/chat-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/check-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/check-24.icon.ts → dist/icons/icon-svgs/check-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/chevron-down-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/chevron-down-24.icon.ts → dist/icons/icon-svgs/chevron-down-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/chevron-up-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/chevron-up-24.icon.ts → dist/icons/icon-svgs/chevron-up-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/close-x-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/close-x-24.icon.ts → dist/icons/icon-svgs/close-x-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/commit-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/commit-24.icon.ts → dist/icons/icon-svgs/commit-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/copy-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/copy-24.icon.ts → dist/icons/icon-svgs/copy-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/document-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/document-24.icon.ts → dist/icons/icon-svgs/document-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/document-search-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/document-search-24.icon.ts → dist/icons/icon-svgs/document-search-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/double-chevron-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/double-chevron-24.icon.ts → dist/icons/icon-svgs/double-chevron-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/element-16.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/element-16.icon.ts → dist/icons/icon-svgs/element-16.icon.js} +4 -5
- package/dist/icons/icon-svgs/element-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/element-24.icon.ts → dist/icons/icon-svgs/element-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/external-link-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/external-link-24.icon.ts → dist/icons/icon-svgs/external-link-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/eye-closed-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/eye-closed-24.icon.ts → dist/icons/icon-svgs/eye-closed-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/eye-open-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/eye-open-24.icon.ts → dist/icons/icon-svgs/eye-open-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/filter-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/filter-24.icon.ts → dist/icons/icon-svgs/filter-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/link-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/link-24.icon.ts → dist/icons/icon-svgs/link-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/loader-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/loader-24.icon.ts → dist/icons/icon-svgs/loader-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/loader-animated-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/loader-animated-24.icon.ts → dist/icons/icon-svgs/loader-animated-24.icon.js} +6 -8
- package/dist/icons/icon-svgs/lock-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/lock-24.icon.ts → dist/icons/icon-svgs/lock-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/options-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/options-24.icon.ts → dist/icons/icon-svgs/options-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/pencil-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/pencil-24.icon.ts → dist/icons/icon-svgs/pencil-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/shield-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/shield-24.icon.ts → dist/icons/icon-svgs/shield-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/sort-ascending-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/sort-ascending-24.icon.ts → dist/icons/icon-svgs/sort-ascending-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/sort-descending-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/sort-descending-24.icon.ts → dist/icons/icon-svgs/sort-descending-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/speaker-loud-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/speaker-loud-24.icon.ts → dist/icons/icon-svgs/speaker-loud-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/speaker-medium-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/speaker-medium-24.icon.ts → dist/icons/icon-svgs/speaker-medium-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/speaker-muted-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/speaker-muted-24.icon.ts → dist/icons/icon-svgs/speaker-muted-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/speaker-quiet-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/speaker-quiet-24.icon.ts → dist/icons/icon-svgs/speaker-quiet-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/star-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/star-24.icon.ts → dist/icons/icon-svgs/star-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/status-failure-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/status-failure-24.icon.ts → dist/icons/icon-svgs/status-failure-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/status-in-progress-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/status-in-progress-24.icon.ts → dist/icons/icon-svgs/status-in-progress-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/status-success-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/status-success-24.icon.ts → dist/icons/icon-svgs/status-success-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/status-unknown-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/status-unknown-24.icon.ts → dist/icons/icon-svgs/status-unknown-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/status-warning-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/status-warning-24.icon.ts → dist/icons/icon-svgs/status-warning-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/upload-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/upload-24.icon.ts → dist/icons/icon-svgs/upload-24.icon.js} +4 -5
- package/dist/icons/icon-svgs/x-24.icon.d.ts +8 -0
- package/{src/icons/icon-svgs/x-24.icon.ts → dist/icons/icon-svgs/x-24.icon.js} +4 -5
- package/dist/icons/index.d.ts +86 -0
- package/{src/icons/index.ts → dist/icons/index.js} +39 -43
- 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 +21 -0
- package/dist/styles/focus.js +41 -0
- package/dist/styles/font.d.ts +9 -0
- package/{src/styles/font.ts → dist/styles/font.js} +1 -2
- package/dist/styles/form-styles.d.ts +123 -0
- package/dist/styles/form-styles.js +126 -0
- package/{src/styles/index.ts → dist/styles/index.d.ts} +0 -2
- package/dist/styles/index.js +12 -0
- package/dist/styles/native-styles.d.ts +13 -0
- package/{src/styles/native-styles.ts → dist/styles/native-styles.js} +3 -6
- 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 +20 -0
- package/{src/styles/shadows.ts → dist/styles/shadows.js} +6 -8
- 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 +97 -0
- package/dist/styles/vira-color-palette.js +98 -0
- package/dist/styles/vira-color-theme.d.ts +1580 -0
- package/dist/styles/vira-color-theme.js +1516 -0
- package/dist/util/define-table.d.ts +110 -0
- package/dist/util/define-table.js +115 -0
- package/dist/util/dynamic-element.d.ts +63 -0
- package/dist/util/dynamic-element.js +61 -0
- package/dist/util/index.js +3 -0
- package/dist/util/pop-up-manager.d.ts +186 -0
- package/dist/util/pop-up-manager.js +214 -0
- package/package.json +6 -6
- package/src/elements/define-vira-element.ts +0 -29
- package/src/elements/form/vira-form-fields.ts +0 -140
- package/src/elements/form/vira-form.element.ts +0 -204
- package/src/elements/pop-up/pop-up-helpers.ts +0 -85
- package/src/elements/pop-up/vira-menu-trigger.element.ts +0 -158
- package/src/elements/shared-text-input-logic.ts +0 -173
- package/src/elements/vira-button.element.ts +0 -171
- package/src/elements/vira-card.element.ts +0 -54
- package/src/elements/vira-overflow-switch.element.ts +0 -137
- package/src/icons/icon-color.test-helper.ts +0 -9
- package/src/icons/icon-svg.ts +0 -71
- package/src/styles/border.ts +0 -11
- package/src/styles/focus.ts +0 -76
- package/src/styles/form-styles.ts +0 -26
- package/src/styles/vira-color-palette.ts +0 -106
- package/src/styles/vira-color-theme.ts +0 -1142
- package/src/util/define-table.ts +0 -279
- package/src/util/dynamic-element.ts +0 -129
- package/src/util/pop-up-manager.ts +0 -380
- /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,81 +1,48 @@
|
|
|
1
|
-
import {assertWrap} from '@augment-vir/assert';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {noNativeFormStyles, noNativeSpacing} from '../styles/native-styles.js';
|
|
7
|
-
import {viraShadows} from '../styles/shadows.js';
|
|
8
|
-
import {defineViraElement} from './define-vira-element.js';
|
|
9
|
-
import {ViraIcon} from './vira-icon.element.js';
|
|
10
|
-
|
|
1
|
+
import { assertWrap } from '@augment-vir/assert';
|
|
2
|
+
import { css, defineElementEvent, html, listen, nothing, onDomCreated } from 'element-vir';
|
|
3
|
+
import { listenToGlobal } from 'typed-event-target';
|
|
4
|
+
import { X24Icon } from '../icons/icon-svgs/x-24.icon.js';
|
|
5
|
+
import { viraFormCssVars } from '../styles/form-styles.js';
|
|
6
|
+
import { noNativeFormStyles, noNativeSpacing } from '../styles/native-styles.js';
|
|
7
|
+
import { viraShadows } from '../styles/shadows.js';
|
|
8
|
+
import { defineViraElement } from './define-vira-element.js';
|
|
9
|
+
import { ViraIcon } from './vira-icon.element.js';
|
|
11
10
|
const globalEventsToCloseModalOn = [
|
|
12
11
|
'pagehide',
|
|
13
12
|
'pageshow',
|
|
14
13
|
'popstate',
|
|
15
|
-
]
|
|
16
|
-
|
|
14
|
+
];
|
|
17
15
|
/**
|
|
18
16
|
* A modal element that uses the built-in `dialog` element.
|
|
19
17
|
*
|
|
20
18
|
* @category Elements
|
|
21
19
|
* @see https://electrovir.github.io/vira/book/elements/vira-modal
|
|
22
20
|
*/
|
|
23
|
-
export const ViraModal = defineViraElement
|
|
24
|
-
Readonly<
|
|
25
|
-
{
|
|
26
|
-
open: boolean;
|
|
27
|
-
} & PartialWithUndefined<{
|
|
28
|
-
/** If this isn't set, make sure to use the modal title slot to fill it in. */
|
|
29
|
-
modalTitle: string;
|
|
30
|
-
/**
|
|
31
|
-
* If `true`, the following conditions trigger the modal to close:
|
|
32
|
-
*
|
|
33
|
-
* - The user clicks the "x" close button
|
|
34
|
-
* - The `open` input is set to `false`
|
|
35
|
-
*
|
|
36
|
-
* If set to `false` (the default), the following conditions trigger the modal to close:
|
|
37
|
-
*
|
|
38
|
-
* - The user clicks outside of the modal
|
|
39
|
-
* - The user presses the "Escape" key
|
|
40
|
-
* - The user clicks the "x" close button
|
|
41
|
-
* - The `open` input is set to `false`
|
|
42
|
-
*
|
|
43
|
-
* @default false
|
|
44
|
-
*/
|
|
45
|
-
blockLightDismissal: boolean;
|
|
46
|
-
modalSubtitle: string;
|
|
47
|
-
isMobileSize: boolean;
|
|
48
|
-
}>
|
|
49
|
-
>
|
|
50
|
-
>()({
|
|
21
|
+
export const ViraModal = defineViraElement()({
|
|
51
22
|
tagName: 'vira-modal',
|
|
52
23
|
events: {
|
|
53
|
-
modalClose: defineElementEvent
|
|
24
|
+
modalClose: defineElementEvent(),
|
|
54
25
|
},
|
|
55
26
|
state() {
|
|
56
27
|
return {
|
|
57
|
-
dialogElement: undefined
|
|
58
|
-
contentElement: undefined
|
|
59
|
-
previousOpenValue: undefined
|
|
28
|
+
dialogElement: undefined,
|
|
29
|
+
contentElement: undefined,
|
|
30
|
+
previousOpenValue: undefined,
|
|
60
31
|
/** Remove listeners. */
|
|
61
|
-
cleanup: undefined
|
|
32
|
+
cleanup: undefined,
|
|
62
33
|
};
|
|
63
34
|
},
|
|
64
|
-
cleanup({state}) {
|
|
35
|
+
cleanup({ state }) {
|
|
65
36
|
state.cleanup?.();
|
|
66
37
|
},
|
|
67
38
|
hostClasses: {
|
|
68
|
-
'vira-modal-phone-size': ({inputs}) => !!inputs.isMobileSize,
|
|
39
|
+
'vira-modal-phone-size': ({ inputs }) => !!inputs.isMobileSize,
|
|
69
40
|
},
|
|
70
41
|
slotNames: ['modalTitle'],
|
|
71
42
|
cssVars: {
|
|
72
|
-
'vira-modal-backdrop-color': 'rgba(0, 0, 0, 0.35)',
|
|
73
43
|
'vira-modal-backdrop-filter': 'blur(3px)',
|
|
74
|
-
'vira-modal-subtitle-color': '#7E7E7E',
|
|
75
|
-
'vira-modal-close-button-hover-radius': '8px',
|
|
76
|
-
'vira-modal-close-button-hover-background-color': '#E4E4E4',
|
|
77
44
|
},
|
|
78
|
-
styles: ({hostClasses, cssVars}) => css`
|
|
45
|
+
styles: ({ hostClasses, cssVars }) => css `
|
|
79
46
|
:host {
|
|
80
47
|
display: contents;
|
|
81
48
|
min-width: 280px;
|
|
@@ -102,7 +69,7 @@ export const ViraModal = defineViraElement<
|
|
|
102
69
|
display: flex;
|
|
103
70
|
}
|
|
104
71
|
&::backdrop {
|
|
105
|
-
background: ${
|
|
72
|
+
background: ${viraFormCssVars['vira-form-modal-backdrop-color'].value};
|
|
106
73
|
backdrop-filter: ${cssVars['vira-modal-backdrop-filter'].value};
|
|
107
74
|
}
|
|
108
75
|
|
|
@@ -130,7 +97,7 @@ export const ViraModal = defineViraElement<
|
|
|
130
97
|
|
|
131
98
|
& sub {
|
|
132
99
|
font-size: 16px;
|
|
133
|
-
color: ${
|
|
100
|
+
color: ${viraFormCssVars['vira-form-secondary-body-foreground'].value};
|
|
134
101
|
}
|
|
135
102
|
}
|
|
136
103
|
|
|
@@ -138,12 +105,11 @@ export const ViraModal = defineViraElement<
|
|
|
138
105
|
${noNativeFormStyles};
|
|
139
106
|
cursor: pointer;
|
|
140
107
|
padding: 4px;
|
|
141
|
-
border-radius: ${
|
|
108
|
+
border-radius: ${viraFormCssVars['vira-form-radius'].value};
|
|
142
109
|
|
|
143
110
|
&:hover {
|
|
144
|
-
background-color: ${
|
|
145
|
-
|
|
146
|
-
].value};
|
|
111
|
+
background-color: ${viraFormCssVars['vira-form-selection-hover-color']
|
|
112
|
+
.value};
|
|
147
113
|
}
|
|
148
114
|
|
|
149
115
|
& ${ViraIcon} {
|
|
@@ -166,25 +132,22 @@ export const ViraModal = defineViraElement<
|
|
|
166
132
|
}
|
|
167
133
|
}
|
|
168
134
|
`,
|
|
169
|
-
render({inputs, state, updateState, events, dispatch, slotNames}) {
|
|
135
|
+
render({ inputs, state, updateState, events, dispatch, slotNames }) {
|
|
170
136
|
if (state.dialogElement && inputs.open !== state.dialogElement.open) {
|
|
171
137
|
if (inputs.open) {
|
|
172
138
|
state.dialogElement.showModal();
|
|
173
|
-
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
174
141
|
state.dialogElement.close();
|
|
175
142
|
}
|
|
176
143
|
}
|
|
177
|
-
|
|
178
144
|
if (state.previousOpenValue !== inputs.open) {
|
|
179
145
|
state.cleanup?.();
|
|
180
|
-
updateState({previousOpenValue: inputs.open});
|
|
146
|
+
updateState({ previousOpenValue: inputs.open });
|
|
181
147
|
if (inputs.open) {
|
|
182
|
-
const removers = globalEventsToCloseModalOn.map((eventName) =>
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}),
|
|
186
|
-
);
|
|
187
|
-
|
|
148
|
+
const removers = globalEventsToCloseModalOn.map((eventName) => listenToGlobal(eventName, () => {
|
|
149
|
+
dispatch(new events.modalClose());
|
|
150
|
+
}));
|
|
188
151
|
updateState({
|
|
189
152
|
cleanup: () => {
|
|
190
153
|
removers.forEach((remover) => remover());
|
|
@@ -192,69 +155,65 @@ export const ViraModal = defineViraElement<
|
|
|
192
155
|
});
|
|
193
156
|
}
|
|
194
157
|
}
|
|
195
|
-
|
|
196
158
|
function close() {
|
|
197
159
|
if (inputs.open) {
|
|
198
160
|
state.cleanup?.();
|
|
199
161
|
dispatch(new events.modalClose());
|
|
200
162
|
}
|
|
201
163
|
}
|
|
202
|
-
|
|
203
|
-
return html`
|
|
164
|
+
return html `
|
|
204
165
|
<dialog
|
|
205
166
|
${onDomCreated((element) => {
|
|
206
|
-
|
|
207
|
-
|
|
167
|
+
updateState({ dialogElement: assertWrap.instanceOf(element, HTMLDialogElement) });
|
|
168
|
+
})}
|
|
208
169
|
${listen('close', () => {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
${listen('
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
})}
|
|
170
|
+
close();
|
|
171
|
+
})}
|
|
172
|
+
${listen('mousedown', (event) => {
|
|
173
|
+
if (state.contentElement &&
|
|
174
|
+
!event.composedPath().includes(state.contentElement) &&
|
|
175
|
+
!inputs.blockLightDismissal) {
|
|
176
|
+
/** Background click. */
|
|
177
|
+
close();
|
|
178
|
+
}
|
|
179
|
+
})}
|
|
221
180
|
>
|
|
222
181
|
<div
|
|
223
182
|
class="modal-content-wrapper"
|
|
224
183
|
${onDomCreated((element) => {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
184
|
+
updateState({
|
|
185
|
+
contentElement: assertWrap.instanceOf(element, HTMLDivElement),
|
|
186
|
+
});
|
|
187
|
+
})}
|
|
229
188
|
>
|
|
230
189
|
<div class="header">
|
|
231
190
|
<div class="header-text-wrapper">
|
|
232
191
|
<h1><slot name=${slotNames.modalTitle}>${inputs.modalTitle}</slot></h1>
|
|
233
192
|
${inputs.modalSubtitle
|
|
234
|
-
|
|
193
|
+
? html `
|
|
235
194
|
<sub>${inputs.modalSubtitle}</sub>
|
|
236
195
|
`
|
|
237
|
-
|
|
196
|
+
: nothing}
|
|
238
197
|
</div>
|
|
239
198
|
<button
|
|
240
199
|
class="close"
|
|
241
200
|
aria-label="Close"
|
|
242
201
|
${listen('click', () => {
|
|
243
|
-
|
|
244
|
-
|
|
202
|
+
state.dialogElement?.close();
|
|
203
|
+
})}
|
|
245
204
|
>
|
|
246
205
|
<${ViraIcon.assign({
|
|
247
|
-
|
|
248
|
-
|
|
206
|
+
icon: X24Icon,
|
|
207
|
+
})}></${ViraIcon}>
|
|
249
208
|
</button>
|
|
250
209
|
</div>
|
|
251
210
|
${inputs.open
|
|
252
|
-
|
|
211
|
+
? html `
|
|
253
212
|
<div class="body">
|
|
254
213
|
<slot></slot>
|
|
255
214
|
</div>
|
|
256
215
|
`
|
|
257
|
-
|
|
216
|
+
: nothing}
|
|
258
217
|
</div>
|
|
259
218
|
</dialog>
|
|
260
219
|
`;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An element switches between two slots based on their overflow.
|
|
3
|
+
*
|
|
4
|
+
* @category Elements
|
|
5
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-overflow-switch
|
|
6
|
+
*/
|
|
7
|
+
export declare const ViraOverflowSwitch: import("element-vir").DeclarativeElementDefinition<"vira-overflow-switch", Readonly<((Required<Pick<{
|
|
8
|
+
automaticallySwitch: boolean;
|
|
9
|
+
useSmall: boolean;
|
|
10
|
+
}, "automaticallySwitch">> & Partial<Record<"useSmall", never>>) | (Required<Pick<{
|
|
11
|
+
automaticallySwitch: boolean;
|
|
12
|
+
useSmall: boolean;
|
|
13
|
+
}, "useSmall">> & Partial<Record<"automaticallySwitch", never>>)) & Omit<{
|
|
14
|
+
automaticallySwitch: boolean;
|
|
15
|
+
useSmall: boolean;
|
|
16
|
+
}, "automaticallySwitch" | "useSmall">>, {
|
|
17
|
+
isOverflowing: boolean;
|
|
18
|
+
resizeObserver: undefined | ResizeObserver;
|
|
19
|
+
/** Called on cleanup to clear all listeners. */
|
|
20
|
+
cleanup: undefined | (() => void);
|
|
21
|
+
}, {}, "vira-overflow-switch-show-small", "vira-overflow-switch-", readonly ["large", "small"], readonly []>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { css, html, onDomCreated } from 'element-vir';
|
|
2
|
+
import { listenTo } from 'typed-event-target';
|
|
3
|
+
import { defineViraElement } from './define-vira-element.js';
|
|
4
|
+
/**
|
|
5
|
+
* An element switches between two slots based on their overflow.
|
|
6
|
+
*
|
|
7
|
+
* @category Elements
|
|
8
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-overflow-switch
|
|
9
|
+
*/
|
|
10
|
+
export const ViraOverflowSwitch = defineViraElement()({
|
|
11
|
+
tagName: 'vira-overflow-switch',
|
|
12
|
+
slotNames: [
|
|
13
|
+
/** The child to render, if it fits. */
|
|
14
|
+
'large',
|
|
15
|
+
/** The child to render if the large one does not fit. */
|
|
16
|
+
'small',
|
|
17
|
+
],
|
|
18
|
+
state() {
|
|
19
|
+
return {
|
|
20
|
+
isOverflowing: false,
|
|
21
|
+
resizeObserver: undefined,
|
|
22
|
+
/** Called on cleanup to clear all listeners. */
|
|
23
|
+
cleanup: undefined,
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
hostClasses: {
|
|
27
|
+
'vira-overflow-switch-show-small': ({ state, inputs }) => state.isOverflowing || !!inputs.useSmall,
|
|
28
|
+
},
|
|
29
|
+
styles: ({ hostClasses }) => css `
|
|
30
|
+
:host {
|
|
31
|
+
display: inline-block;
|
|
32
|
+
max-width: 100%;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.large,
|
|
36
|
+
.small {
|
|
37
|
+
display: inline-block;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.small {
|
|
41
|
+
display: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* When the large content overflows, hide it but keep it in layout so we can measure it.
|
|
46
|
+
* The small content is then shown instead.
|
|
47
|
+
*/
|
|
48
|
+
${hostClasses['vira-overflow-switch-show-small'].selector} .large {
|
|
49
|
+
visibility: hidden;
|
|
50
|
+
position: absolute;
|
|
51
|
+
top: 0;
|
|
52
|
+
left: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
${hostClasses['vira-overflow-switch-show-small'].selector} .small {
|
|
56
|
+
display: inline-block;
|
|
57
|
+
}
|
|
58
|
+
`,
|
|
59
|
+
cleanup({ state, updateState }) {
|
|
60
|
+
state.cleanup?.();
|
|
61
|
+
updateState({
|
|
62
|
+
cleanup: undefined,
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
render({ slotNames, updateState, inputs, host, state }) {
|
|
66
|
+
return html `
|
|
67
|
+
<div
|
|
68
|
+
class="large"
|
|
69
|
+
${onDomCreated((largeElement) => {
|
|
70
|
+
if (!inputs.automaticallySwitch) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const overflowParams = {
|
|
74
|
+
elementToTest: largeElement,
|
|
75
|
+
host,
|
|
76
|
+
updateState,
|
|
77
|
+
};
|
|
78
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
79
|
+
updateOverflowing(overflowParams);
|
|
80
|
+
});
|
|
81
|
+
resizeObserver.observe(host);
|
|
82
|
+
/**
|
|
83
|
+
* Also observe the large slot wrapper itself in case its own layout changes
|
|
84
|
+
* without host resizing.
|
|
85
|
+
*/
|
|
86
|
+
resizeObserver.observe(largeElement);
|
|
87
|
+
const removeSlotChangeListener = listenTo(largeElement, 'slotchange', () => {
|
|
88
|
+
updateOverflowing(overflowParams);
|
|
89
|
+
});
|
|
90
|
+
/** Initial measurement: defer until after first layout. */
|
|
91
|
+
updateOverflowing(overflowParams);
|
|
92
|
+
state.cleanup?.();
|
|
93
|
+
updateState({
|
|
94
|
+
cleanup() {
|
|
95
|
+
resizeObserver.disconnect();
|
|
96
|
+
removeSlotChangeListener();
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
})}
|
|
100
|
+
>
|
|
101
|
+
<slot name=${slotNames.large}></slot>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="small"><slot name=${slotNames.small}></slot></div>
|
|
104
|
+
`;
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
function updateOverflowing({ elementToTest, host, updateState, }) {
|
|
108
|
+
const isOverflowing = elementToTest.scrollWidth > host.clientWidth;
|
|
109
|
+
updateState({ isOverflowing });
|
|
110
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
+
/**
|
|
3
|
+
* A [`<progress>`](https://developer.mozilla.org/docs/Web/HTML/Reference/Elements/progress)
|
|
4
|
+
* alternative that supports custom styling in _all_ browsers via CSS vars _and_ prevents background
|
|
5
|
+
* bleed.
|
|
6
|
+
*
|
|
7
|
+
* @category Progress
|
|
8
|
+
* @category Elements
|
|
9
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-progress
|
|
10
|
+
*/
|
|
11
|
+
export declare const ViraProgress: import("element-vir").DeclarativeElementDefinition<"vira-progress", Readonly<{
|
|
12
|
+
value: number;
|
|
13
|
+
} & PartialWithUndefined<{
|
|
14
|
+
/** @default 0 */
|
|
15
|
+
min: number;
|
|
16
|
+
/** @default 100 */
|
|
17
|
+
max: number;
|
|
18
|
+
}>>, {}, {}, "vira-progress-", "vira-progress-border-radius", readonly [], readonly []>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {clamp
|
|
2
|
-
import {applyAttributes} from 'device-navigation';
|
|
3
|
-
import {css, html} from 'element-vir';
|
|
4
|
-
import {
|
|
5
|
-
|
|
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 './define-vira-element.js';
|
|
6
6
|
/**
|
|
7
7
|
* A [`<progress>`](https://developer.mozilla.org/docs/Web/HTML/Reference/Elements/progress)
|
|
8
8
|
* alternative that supports custom styling in _all_ browsers via CSS vars _and_ prevents background
|
|
@@ -12,18 +12,7 @@ import {defineViraElement} from './define-vira-element.js';
|
|
|
12
12
|
* @category Elements
|
|
13
13
|
* @see https://electrovir.github.io/vira/book/elements/vira-progress
|
|
14
14
|
*/
|
|
15
|
-
export const ViraProgress = defineViraElement
|
|
16
|
-
Readonly<
|
|
17
|
-
{
|
|
18
|
-
value: number;
|
|
19
|
-
} & PartialWithUndefined<{
|
|
20
|
-
/** @default 0 */
|
|
21
|
-
min: number;
|
|
22
|
-
/** @default 100 */
|
|
23
|
-
max: number;
|
|
24
|
-
}>
|
|
25
|
-
>
|
|
26
|
-
>()({
|
|
15
|
+
export const ViraProgress = defineViraElement()({
|
|
27
16
|
tagName: 'vira-progress',
|
|
28
17
|
cssVars: {
|
|
29
18
|
/**
|
|
@@ -31,10 +20,8 @@ export const ViraProgress = defineViraElement<
|
|
|
31
20
|
* dimension which creates a perfect pill border radius.
|
|
32
21
|
*/
|
|
33
22
|
'vira-progress-border-radius': '99999999px',
|
|
34
|
-
'vira-progress-background-color': '#eee',
|
|
35
|
-
'vira-progress-foreground-color': 'dodgerblue',
|
|
36
23
|
},
|
|
37
|
-
styles: ({cssVars}) => css`
|
|
24
|
+
styles: ({ cssVars }) => css `
|
|
38
25
|
:host {
|
|
39
26
|
/* Default width that can easily be overridden because it's applied on the host. */
|
|
40
27
|
width: 100px;
|
|
@@ -43,7 +30,7 @@ export const ViraProgress = defineViraElement<
|
|
|
43
30
|
display: inline-flex;
|
|
44
31
|
align-items: center;
|
|
45
32
|
border-radius: ${cssVars['vira-progress-border-radius'].value};
|
|
46
|
-
color: ${
|
|
33
|
+
color: ${viraFormCssVars['vira-form-accent-primary-color'].value};
|
|
47
34
|
overflow: hidden;
|
|
48
35
|
}
|
|
49
36
|
|
|
@@ -53,34 +40,31 @@ export const ViraProgress = defineViraElement<
|
|
|
53
40
|
}
|
|
54
41
|
|
|
55
42
|
.background-bar {
|
|
56
|
-
background-color: ${
|
|
43
|
+
background-color: ${viraFormCssVars['vira-form-filled-background-color'].value};
|
|
57
44
|
height: 100%;
|
|
58
45
|
flex-grow: 1;
|
|
59
46
|
}
|
|
60
47
|
`,
|
|
61
|
-
render({inputs, host}) {
|
|
48
|
+
render({ inputs, host }) {
|
|
62
49
|
const min = inputs.min || 0;
|
|
63
50
|
const max = inputs.max || 100;
|
|
64
51
|
const totalRange = max - min;
|
|
65
52
|
const value = inputs.value - min;
|
|
66
|
-
|
|
67
|
-
const percentFull = clamp(Math.round((value / totalRange) * 100), {min: 0, max: 100});
|
|
68
|
-
|
|
53
|
+
const percentFull = clamp(Math.round((value / totalRange) * 100), { min: 0, max: 100 });
|
|
69
54
|
applyAttributes(host, {
|
|
70
55
|
'aria-valuemin': inputs.min,
|
|
71
56
|
'aria-valuemax': inputs.max,
|
|
72
57
|
'aria-valuenow': inputs.value,
|
|
73
58
|
'aria-role': 'progressbar',
|
|
74
59
|
});
|
|
75
|
-
|
|
76
|
-
return html`
|
|
60
|
+
return html `
|
|
77
61
|
<div
|
|
78
62
|
class="progress-bar"
|
|
79
63
|
style=${percentFull
|
|
80
|
-
|
|
64
|
+
? css `
|
|
81
65
|
width: ${percentFull}%;
|
|
82
66
|
`
|
|
83
|
-
|
|
67
|
+
: css `
|
|
84
68
|
display: none;
|
|
85
69
|
`}
|
|
86
70
|
></div>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type PartialWithUndefined } from '@augment-vir/common';
|
|
2
|
+
import { type AttributeValues } from 'element-vir';
|
|
3
|
+
import { type ViraIconSvg } from '../icons/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Options for {@link ViraSelect}.
|
|
6
|
+
*
|
|
7
|
+
* @category Dropdown
|
|
8
|
+
* @category Elements
|
|
9
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-select
|
|
10
|
+
*/
|
|
11
|
+
export type ViraSelectOption = {
|
|
12
|
+
/** A value or id, used to keep track of which option is selected. */
|
|
13
|
+
value: string;
|
|
14
|
+
label: string;
|
|
15
|
+
} & PartialWithUndefined<{
|
|
16
|
+
disabled: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Similar to {@link ViraDropdown} but is, instead, simply a wrapper for `<select>` and nothing more.
|
|
20
|
+
*
|
|
21
|
+
* @category Dropdown
|
|
22
|
+
* @category Elements
|
|
23
|
+
* @see https://electrovir.github.io/vira/book/elements/vira-select
|
|
24
|
+
*/
|
|
25
|
+
export declare const ViraSelect: import("element-vir").DeclarativeElementDefinition<"vira-select", Readonly<{
|
|
26
|
+
options: ReadonlyArray<Readonly<ViraSelectOption>>;
|
|
27
|
+
/** The currently selected option value. */
|
|
28
|
+
value: undefined | string;
|
|
29
|
+
} & PartialWithUndefined<{
|
|
30
|
+
icon: Readonly<ViraIconSvg>;
|
|
31
|
+
placeholder: string;
|
|
32
|
+
label: string;
|
|
33
|
+
disabled: boolean;
|
|
34
|
+
attributePassthrough: Readonly<PartialWithUndefined<{
|
|
35
|
+
label: AttributeValues;
|
|
36
|
+
select: AttributeValues;
|
|
37
|
+
option: AttributeValues;
|
|
38
|
+
}>>;
|
|
39
|
+
hasError: boolean;
|
|
40
|
+
}>>, {
|
|
41
|
+
/**
|
|
42
|
+
* Used to couple the label and select together. This is not applied if no label is
|
|
43
|
+
* provided.
|
|
44
|
+
*/
|
|
45
|
+
randomId: string;
|
|
46
|
+
}, {
|
|
47
|
+
valueChange: import("element-vir").DefineEvent<string>;
|
|
48
|
+
}, "vira-select-disabled" | "vira-select-error", "vira-select-padding-horizontal" | "vira-select-padding-vertical" | "vira-select-icon-padding", readonly [], readonly []>;
|