vira 28.19.6 → 28.20.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 -76
- 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} +22 -34
- 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 +31 -0
- package/{src/elements/vira-button.element.ts → dist/elements/vira-button.element.js} +35 -66
- package/dist/elements/vira-card.element.d.ts +18 -0
- package/{src/elements/vira-card.element.ts → dist/elements/vira-card.element.js} +13 -16
- package/dist/elements/vira-checkbox.element.d.ts +34 -0
- package/{src/elements/vira-checkbox.element.ts → dist/elements/vira-checkbox.element.js} +28 -71
- package/dist/elements/vira-collapsible-wrapper.element.d.ts +16 -0
- package/{src/elements/vira-collapsible-wrapper.element.ts → dist/elements/vira-collapsible-wrapper.element.js} +26 -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 -94
- package/dist/elements/vira-error.element.d.ts +7 -0
- package/{src/elements/vira-error.element.ts → dist/elements/vira-error.element.js} +5 -6
- 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} +85 -151
- package/dist/elements/vira-link.element.d.ts +73 -0
- package/{src/elements/vira-link.element.ts → dist/elements/vira-link.element.js} +11 -62
- package/dist/elements/vira-modal.element.d.ts +39 -0
- package/{src/elements/vira-modal.element.ts → dist/elements/vira-modal.element.js} +50 -89
- 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} +11 -26
- package/dist/elements/vira-select.element.d.ts +48 -0
- package/{src/elements/vira-select.element.ts → dist/elements/vira-select.element.js} +41 -96
- 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/border.d.ts +9 -0
- package/{src/styles/border.ts → dist/styles/border.js} +1 -2
- 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 +34 -0
- package/{src/styles/focus.ts → dist/styles/focus.js} +8 -29
- 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 +20 -0
- package/{src/styles/form-styles.ts → dist/styles/form-styles.js} +1 -6
- package/{src/styles/index.ts → dist/styles/index.d.ts} +0 -1
- package/dist/styles/index.js +13 -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 +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 +95 -0
- package/{src/styles/vira-color-palette.ts → dist/styles/vira-color-palette.js} +1 -11
- package/dist/styles/vira-color-theme.d.ts +1184 -0
- package/dist/styles/vira-color-theme.js +1138 -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-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/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,71 +1,41 @@
|
|
|
1
|
-
import {assertWrap} from '@augment-vir/assert';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
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 { noNativeFormStyles, noNativeSpacing } from '../styles/native-styles.js';
|
|
6
|
+
import { viraShadows } from '../styles/shadows.js';
|
|
7
|
+
import { defineViraElement } from './define-vira-element.js';
|
|
8
|
+
import { ViraIcon } from './vira-icon.element.js';
|
|
11
9
|
const globalEventsToCloseModalOn = [
|
|
12
10
|
'pagehide',
|
|
13
11
|
'pageshow',
|
|
14
12
|
'popstate',
|
|
15
|
-
]
|
|
16
|
-
|
|
13
|
+
];
|
|
17
14
|
/**
|
|
18
15
|
* A modal element that uses the built-in `dialog` element.
|
|
19
16
|
*
|
|
20
17
|
* @category Elements
|
|
21
18
|
* @see https://electrovir.github.io/vira/book/elements/vira-modal
|
|
22
19
|
*/
|
|
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
|
-
>()({
|
|
20
|
+
export const ViraModal = defineViraElement()({
|
|
51
21
|
tagName: 'vira-modal',
|
|
52
22
|
events: {
|
|
53
|
-
modalClose: defineElementEvent
|
|
23
|
+
modalClose: defineElementEvent(),
|
|
54
24
|
},
|
|
55
25
|
state() {
|
|
56
26
|
return {
|
|
57
|
-
dialogElement: undefined
|
|
58
|
-
contentElement: undefined
|
|
59
|
-
previousOpenValue: undefined
|
|
27
|
+
dialogElement: undefined,
|
|
28
|
+
contentElement: undefined,
|
|
29
|
+
previousOpenValue: undefined,
|
|
60
30
|
/** Remove listeners. */
|
|
61
|
-
cleanup: undefined
|
|
31
|
+
cleanup: undefined,
|
|
62
32
|
};
|
|
63
33
|
},
|
|
64
|
-
cleanup({state}) {
|
|
34
|
+
cleanup({ state }) {
|
|
65
35
|
state.cleanup?.();
|
|
66
36
|
},
|
|
67
37
|
hostClasses: {
|
|
68
|
-
'vira-modal-phone-size': ({inputs}) => !!inputs.isMobileSize,
|
|
38
|
+
'vira-modal-phone-size': ({ inputs }) => !!inputs.isMobileSize,
|
|
69
39
|
},
|
|
70
40
|
slotNames: ['modalTitle'],
|
|
71
41
|
cssVars: {
|
|
@@ -75,7 +45,7 @@ export const ViraModal = defineViraElement<
|
|
|
75
45
|
'vira-modal-close-button-hover-radius': '8px',
|
|
76
46
|
'vira-modal-close-button-hover-background-color': '#E4E4E4',
|
|
77
47
|
},
|
|
78
|
-
styles: ({hostClasses, cssVars}) => css`
|
|
48
|
+
styles: ({ hostClasses, cssVars }) => css `
|
|
79
49
|
:host {
|
|
80
50
|
display: contents;
|
|
81
51
|
min-width: 280px;
|
|
@@ -141,9 +111,7 @@ export const ViraModal = defineViraElement<
|
|
|
141
111
|
border-radius: ${cssVars['vira-modal-close-button-hover-radius'].value};
|
|
142
112
|
|
|
143
113
|
&:hover {
|
|
144
|
-
background-color: ${cssVars[
|
|
145
|
-
'vira-modal-close-button-hover-background-color'
|
|
146
|
-
].value};
|
|
114
|
+
background-color: ${cssVars['vira-modal-close-button-hover-background-color'].value};
|
|
147
115
|
}
|
|
148
116
|
|
|
149
117
|
& ${ViraIcon} {
|
|
@@ -166,25 +134,22 @@ export const ViraModal = defineViraElement<
|
|
|
166
134
|
}
|
|
167
135
|
}
|
|
168
136
|
`,
|
|
169
|
-
render({inputs, state, updateState, events, dispatch, slotNames}) {
|
|
137
|
+
render({ inputs, state, updateState, events, dispatch, slotNames }) {
|
|
170
138
|
if (state.dialogElement && inputs.open !== state.dialogElement.open) {
|
|
171
139
|
if (inputs.open) {
|
|
172
140
|
state.dialogElement.showModal();
|
|
173
|
-
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
174
143
|
state.dialogElement.close();
|
|
175
144
|
}
|
|
176
145
|
}
|
|
177
|
-
|
|
178
146
|
if (state.previousOpenValue !== inputs.open) {
|
|
179
147
|
state.cleanup?.();
|
|
180
|
-
updateState({previousOpenValue: inputs.open});
|
|
148
|
+
updateState({ previousOpenValue: inputs.open });
|
|
181
149
|
if (inputs.open) {
|
|
182
|
-
const removers = globalEventsToCloseModalOn.map((eventName) =>
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}),
|
|
186
|
-
);
|
|
187
|
-
|
|
150
|
+
const removers = globalEventsToCloseModalOn.map((eventName) => listenToGlobal(eventName, () => {
|
|
151
|
+
dispatch(new events.modalClose());
|
|
152
|
+
}));
|
|
188
153
|
updateState({
|
|
189
154
|
cleanup: () => {
|
|
190
155
|
removers.forEach((remover) => remover());
|
|
@@ -192,69 +157,65 @@ export const ViraModal = defineViraElement<
|
|
|
192
157
|
});
|
|
193
158
|
}
|
|
194
159
|
}
|
|
195
|
-
|
|
196
160
|
function close() {
|
|
197
161
|
if (inputs.open) {
|
|
198
162
|
state.cleanup?.();
|
|
199
163
|
dispatch(new events.modalClose());
|
|
200
164
|
}
|
|
201
165
|
}
|
|
202
|
-
|
|
203
|
-
return html`
|
|
166
|
+
return html `
|
|
204
167
|
<dialog
|
|
205
168
|
${onDomCreated((element) => {
|
|
206
|
-
|
|
207
|
-
|
|
169
|
+
updateState({ dialogElement: assertWrap.instanceOf(element, HTMLDialogElement) });
|
|
170
|
+
})}
|
|
208
171
|
${listen('close', () => {
|
|
209
|
-
|
|
210
|
-
|
|
172
|
+
close();
|
|
173
|
+
})}
|
|
211
174
|
${listen('click', (event) => {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
})}
|
|
175
|
+
if (state.contentElement &&
|
|
176
|
+
!event.composedPath().includes(state.contentElement) &&
|
|
177
|
+
!inputs.blockLightDismissal) {
|
|
178
|
+
/** Background click. */
|
|
179
|
+
close();
|
|
180
|
+
}
|
|
181
|
+
})}
|
|
221
182
|
>
|
|
222
183
|
<div
|
|
223
184
|
class="modal-content-wrapper"
|
|
224
185
|
${onDomCreated((element) => {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
186
|
+
updateState({
|
|
187
|
+
contentElement: assertWrap.instanceOf(element, HTMLDivElement),
|
|
188
|
+
});
|
|
189
|
+
})}
|
|
229
190
|
>
|
|
230
191
|
<div class="header">
|
|
231
192
|
<div class="header-text-wrapper">
|
|
232
193
|
<h1><slot name=${slotNames.modalTitle}>${inputs.modalTitle}</slot></h1>
|
|
233
194
|
${inputs.modalSubtitle
|
|
234
|
-
|
|
195
|
+
? html `
|
|
235
196
|
<sub>${inputs.modalSubtitle}</sub>
|
|
236
197
|
`
|
|
237
|
-
|
|
198
|
+
: nothing}
|
|
238
199
|
</div>
|
|
239
200
|
<button
|
|
240
201
|
class="close"
|
|
241
202
|
aria-label="Close"
|
|
242
203
|
${listen('click', () => {
|
|
243
|
-
|
|
244
|
-
|
|
204
|
+
state.dialogElement?.close();
|
|
205
|
+
})}
|
|
245
206
|
>
|
|
246
207
|
<${ViraIcon.assign({
|
|
247
|
-
|
|
248
|
-
|
|
208
|
+
icon: X24Icon,
|
|
209
|
+
})}></${ViraIcon}>
|
|
249
210
|
</button>
|
|
250
211
|
</div>
|
|
251
212
|
${inputs.open
|
|
252
|
-
|
|
213
|
+
? html `
|
|
253
214
|
<div class="body">
|
|
254
215
|
<slot></slot>
|
|
255
216
|
</div>
|
|
256
217
|
`
|
|
257
|
-
|
|
218
|
+
: nothing}
|
|
258
219
|
</div>
|
|
259
220
|
</dialog>
|
|
260
221
|
`;
|
|
@@ -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" | "vira-progress-background-color" | "vira-progress-foreground-color", readonly [], readonly []>;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {clamp
|
|
2
|
-
import {applyAttributes} from 'device-navigation';
|
|
3
|
-
import {css, html} from 'element-vir';
|
|
4
|
-
import {defineViraElement} from './define-vira-element.js';
|
|
5
|
-
|
|
1
|
+
import { clamp } from '@augment-vir/common';
|
|
2
|
+
import { applyAttributes } from 'device-navigation';
|
|
3
|
+
import { css, html } from 'element-vir';
|
|
4
|
+
import { defineViraElement } from './define-vira-element.js';
|
|
6
5
|
/**
|
|
7
6
|
* A [`<progress>`](https://developer.mozilla.org/docs/Web/HTML/Reference/Elements/progress)
|
|
8
7
|
* alternative that supports custom styling in _all_ browsers via CSS vars _and_ prevents background
|
|
@@ -12,18 +11,7 @@ import {defineViraElement} from './define-vira-element.js';
|
|
|
12
11
|
* @category Elements
|
|
13
12
|
* @see https://electrovir.github.io/vira/book/elements/vira-progress
|
|
14
13
|
*/
|
|
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
|
-
>()({
|
|
14
|
+
export const ViraProgress = defineViraElement()({
|
|
27
15
|
tagName: 'vira-progress',
|
|
28
16
|
cssVars: {
|
|
29
17
|
/**
|
|
@@ -34,7 +22,7 @@ export const ViraProgress = defineViraElement<
|
|
|
34
22
|
'vira-progress-background-color': '#eee',
|
|
35
23
|
'vira-progress-foreground-color': 'dodgerblue',
|
|
36
24
|
},
|
|
37
|
-
styles: ({cssVars}) => css`
|
|
25
|
+
styles: ({ cssVars }) => css `
|
|
38
26
|
:host {
|
|
39
27
|
/* Default width that can easily be overridden because it's applied on the host. */
|
|
40
28
|
width: 100px;
|
|
@@ -58,29 +46,26 @@ export const ViraProgress = defineViraElement<
|
|
|
58
46
|
flex-grow: 1;
|
|
59
47
|
}
|
|
60
48
|
`,
|
|
61
|
-
render({inputs, host}) {
|
|
49
|
+
render({ inputs, host }) {
|
|
62
50
|
const min = inputs.min || 0;
|
|
63
51
|
const max = inputs.max || 100;
|
|
64
52
|
const totalRange = max - min;
|
|
65
53
|
const value = inputs.value - min;
|
|
66
|
-
|
|
67
|
-
const percentFull = clamp(Math.round((value / totalRange) * 100), {min: 0, max: 100});
|
|
68
|
-
|
|
54
|
+
const percentFull = clamp(Math.round((value / totalRange) * 100), { min: 0, max: 100 });
|
|
69
55
|
applyAttributes(host, {
|
|
70
56
|
'aria-valuemin': inputs.min,
|
|
71
57
|
'aria-valuemax': inputs.max,
|
|
72
58
|
'aria-valuenow': inputs.value,
|
|
73
59
|
'aria-role': 'progressbar',
|
|
74
60
|
});
|
|
75
|
-
|
|
76
|
-
return html`
|
|
61
|
+
return html `
|
|
77
62
|
<div
|
|
78
63
|
class="progress-bar"
|
|
79
64
|
style=${percentFull
|
|
80
|
-
|
|
65
|
+
? css `
|
|
81
66
|
width: ${percentFull}%;
|
|
82
67
|
`
|
|
83
|
-
|
|
68
|
+
: css `
|
|
84
69
|
display: none;
|
|
85
70
|
`}
|
|
86
71
|
></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 []>;
|