vira 31.31.0 → 31.31.2

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.
Files changed (30) hide show
  1. package/dist/elements/pop-up/vira-menu-item.element.js +57 -55
  2. package/dist/elements/pop-up/vira-menu.element.js +33 -31
  3. package/dist/elements/pop-up/vira-pop-up-trigger.element.js +57 -55
  4. package/dist/elements/vira-absolute-time.element.d.ts +3 -3
  5. package/dist/elements/vira-bold-text.element.js +35 -33
  6. package/dist/elements/vira-button.element.js +6 -2
  7. package/dist/elements/vira-card.element.js +16 -14
  8. package/dist/elements/vira-checkbox.element.js +95 -93
  9. package/dist/elements/vira-collapsible-card.element.js +63 -61
  10. package/dist/elements/vira-collapsible-wrapper.element.js +38 -36
  11. package/dist/elements/vira-date-input.element.d.ts +3 -3
  12. package/dist/elements/vira-date-input.element.js +37 -35
  13. package/dist/elements/vira-drawer.element.js +93 -91
  14. package/dist/elements/vira-error.element.js +8 -6
  15. package/dist/elements/vira-icon.element.js +23 -21
  16. package/dist/elements/vira-image.element.js +44 -42
  17. package/dist/elements/vira-json-form.element.js +7 -3
  18. package/dist/elements/vira-link.element.js +26 -24
  19. package/dist/elements/vira-modal.element.js +95 -80
  20. package/dist/elements/vira-progress.element.js +23 -21
  21. package/dist/elements/vira-relative-time.element.d.ts +2 -2
  22. package/dist/elements/vira-select.element.js +127 -122
  23. package/dist/elements/vira-tabs.element.js +17 -7
  24. package/dist/elements/vira-tag.element.js +3 -1
  25. package/dist/elements/vira-text-area.element.js +92 -90
  26. package/dist/icons/lucide-icons.js +7 -5
  27. package/dist/util/shared-text-input-logic.js +6 -4
  28. package/dist/util/vira-form-fields.d.ts +2 -2
  29. package/dist/util/vira-json-schema.js +24 -16
  30. package/package.json +11 -11
@@ -41,74 +41,76 @@ export const ViraMenuItem = defineViraElement()({
41
41
  'vira-menu-item-padding': '6px 8px',
42
42
  'vira-menu-item-border-radius': '4px',
43
43
  },
44
- styles: ({ hostClasses, cssVars }) => css `
45
- :host {
46
- display: flex;
47
- flex-shrink: 0;
48
- ${noUserSelect};
49
- box-sizing: border-box;
50
- max-width: 100%;
51
- gap: ${cssVars['vira-menu-item-icon-gap'].value};
52
- overflow: hidden;
53
- padding: ${cssVars['vira-menu-item-padding'].value};
54
- border-radius: ${cssVars['vira-menu-item-border-radius'].value};
55
- align-items: center;
56
- text-align: left;
57
- }
44
+ styles: ({ hostClasses, cssVars }) => {
45
+ return css `
46
+ :host {
47
+ display: flex;
48
+ flex-shrink: 0;
49
+ ${noUserSelect};
50
+ box-sizing: border-box;
51
+ max-width: 100%;
52
+ gap: ${cssVars['vira-menu-item-icon-gap'].value};
53
+ overflow: hidden;
54
+ padding: ${cssVars['vira-menu-item-padding'].value};
55
+ border-radius: ${cssVars['vira-menu-item-border-radius'].value};
56
+ align-items: center;
57
+ text-align: left;
58
+ }
58
59
 
59
- ${hostClasses['vira-menu-item-disabled'].selector}${hostClasses['vira-menu-item-default-styles'].selector} {
60
- cursor: not-allowed;
60
+ ${hostClasses['vira-menu-item-disabled'].selector}${hostClasses['vira-menu-item-default-styles'].selector} {
61
+ cursor: not-allowed;
61
62
 
62
- & .slot-wrapper,
63
- & ${ViraIcon} {
64
- opacity: 0.3;
65
- pointer-events: none;
63
+ & .slot-wrapper,
64
+ & ${ViraIcon} {
65
+ opacity: 0.3;
66
+ pointer-events: none;
67
+ }
66
68
  }
67
- }
68
69
 
69
- :host(:focus),
70
- :host(:active) {
71
- outline: none;
72
- }
70
+ :host(:focus),
71
+ :host(:active) {
72
+ outline: none;
73
+ }
73
74
 
74
- ${hostClasses['vira-menu-item-enabled'].selector}${hostClasses['vira-menu-item-default-styles'].selector} {
75
- cursor: pointer;
75
+ ${hostClasses['vira-menu-item-enabled'].selector}${hostClasses['vira-menu-item-default-styles'].selector} {
76
+ cursor: pointer;
76
77
 
77
- &:host(:focus) {
78
- background-color: ${viraFormCssVars['vira-form-selection-hover-color'].value};
79
- }
78
+ &:host(:focus) {
79
+ background-color: ${viraFormCssVars['vira-form-selection-hover-color'].value};
80
+ }
80
81
 
81
- &:host(:active) {
82
- background-color: ${viraFormCssVars['vira-form-selection-active-color'].value};
82
+ &:host(:active) {
83
+ background-color: ${viraFormCssVars['vira-form-selection-active-color'].value};
84
+ }
83
85
  }
84
- }
85
-
86
- ${ViraIcon} {
87
- width: 24px;
88
- aspect-ratio: 1;
89
- align-items: center;
90
- justify-content: center;
91
- }
92
86
 
93
- ${hostClasses['vira-menu-item-default-icon'].selector} {
94
87
  ${ViraIcon} {
95
- visibility: hidden;
88
+ width: 24px;
89
+ aspect-ratio: 1;
90
+ align-items: center;
91
+ justify-content: center;
96
92
  }
97
- }
98
93
 
99
- ${hostClasses['vira-menu-item-selected'].selector} ${ViraIcon} {
100
- visibility: visible;
101
- }
94
+ ${hostClasses['vira-menu-item-default-icon'].selector} {
95
+ ${ViraIcon} {
96
+ visibility: hidden;
97
+ }
98
+ }
102
99
 
103
- .slot-wrapper {
104
- display: flex;
105
- flex-grow: 1;
106
- overflow: hidden;
107
- text-overflow: ellipsis;
108
- white-space: nowrap;
109
- min-width: 0;
110
- }
111
- `,
100
+ ${hostClasses['vira-menu-item-selected'].selector} ${ViraIcon} {
101
+ visibility: visible;
102
+ }
103
+
104
+ .slot-wrapper {
105
+ display: flex;
106
+ flex-grow: 1;
107
+ overflow: hidden;
108
+ text-overflow: ellipsis;
109
+ white-space: nowrap;
110
+ min-width: 0;
111
+ }
112
+ `;
113
+ },
112
114
  init({ state, updateState, host, inputs, dispatch, events }) {
113
115
  host.setAttribute('role', 'menuitem');
114
116
  host.setAttribute('tabindex', inputs.disabled ? '-1' : '0');
@@ -43,40 +43,42 @@ export const ViraMenu = defineViraElement()({
43
43
  cssVars: {
44
44
  'vira-menu-padding': '4px',
45
45
  },
46
- styles: ({ hostClasses, cssVars }) => css `
47
- :host {
48
- display: flex;
49
- flex-direction: column;
50
- padding: ${cssVars['vira-menu-padding'].value};
51
- max-width: 100%;
52
- max-height: 100%;
53
- overflow-y: auto;
54
- z-index: 99;
55
- box-sizing: border-box;
56
- overscroll-behavior: contain;
57
- border-radius: ${viraFormCssVars['vira-form-radius'].value};
58
- border-top-left-radius: 0;
59
- border-top-right-radius: 0;
60
- background-color: ${viraFormCssVars['vira-form-background-color'].value};
61
- border: 1px solid ${viraFormCssVars['vira-form-border-color'].value};
62
- color: ${viraFormCssVars['vira-form-foreground-color'].value};
63
- ${viraShadows.menuShadow}
64
- }
46
+ styles: ({ hostClasses, cssVars }) => {
47
+ return css `
48
+ :host {
49
+ display: flex;
50
+ flex-direction: column;
51
+ padding: ${cssVars['vira-menu-padding'].value};
52
+ max-width: 100%;
53
+ max-height: 100%;
54
+ overflow-y: auto;
55
+ z-index: 99;
56
+ box-sizing: border-box;
57
+ overscroll-behavior: contain;
58
+ border-radius: ${viraFormCssVars['vira-form-radius'].value};
59
+ border-top-left-radius: 0;
60
+ border-top-right-radius: 0;
61
+ background-color: ${viraFormCssVars['vira-form-background-color'].value};
62
+ border: 1px solid ${viraFormCssVars['vira-form-border-color'].value};
63
+ color: ${viraFormCssVars['vira-form-foreground-color'].value};
64
+ ${viraShadows.menuShadow}
65
+ }
65
66
 
66
- ${hostClasses['vira-menu-open-upwards'].selector} {
67
- border-radius: ${viraFormCssVars['vira-form-radius'].value};
68
- border-bottom-left-radius: 0;
69
- border-bottom-right-radius: 0;
70
- }
67
+ ${hostClasses['vira-menu-open-upwards'].selector} {
68
+ border-radius: ${viraFormCssVars['vira-form-radius'].value};
69
+ border-bottom-left-radius: 0;
70
+ border-bottom-right-radius: 0;
71
+ }
71
72
 
72
- ${hostClasses['vira-menu-square'].selector} {
73
- border-radius: 0;
74
- }
73
+ ${hostClasses['vira-menu-square'].selector} {
74
+ border-radius: 0;
75
+ }
75
76
 
76
- ${hostClasses['vira-menu-rounded'].selector} {
77
- border-radius: ${viraFormCssVars['vira-form-radius'].value};
78
- }
79
- `,
77
+ ${hostClasses['vira-menu-rounded'].selector} {
78
+ border-radius: ${viraFormCssVars['vira-form-radius'].value};
79
+ }
80
+ `;
81
+ },
80
82
  render() {
81
83
  return html `
82
84
  <slot>&nbsp;</slot>
@@ -62,72 +62,74 @@ export const ViraPopUpTrigger = defineViraElement()({
62
62
  'vira-pop-up-trigger-inside-focus': ({ inputs }) => !!inputs.useInsideFocus,
63
63
  'vira-pop-up-trigger-outside-focus': ({ inputs }) => !inputs.useInsideFocus,
64
64
  },
65
- styles: ({ hostClasses }) => css `
66
- :host {
67
- display: inline-flex;
68
- box-sizing: border-box;
69
- vertical-align: middle;
70
- position: relative;
71
- max-width: 100%;
72
- }
65
+ styles: ({ hostClasses }) => {
66
+ return css `
67
+ :host {
68
+ display: inline-flex;
69
+ box-sizing: border-box;
70
+ vertical-align: middle;
71
+ position: relative;
72
+ max-width: 100%;
73
+ }
73
74
 
74
- .dropdown-wrapper {
75
- ${noNativeFormStyles};
76
- cursor: pointer;
77
- max-width: 100%;
78
- position: relative;
79
- flex-grow: 1;
80
- box-sizing: border-box;
81
- }
75
+ .dropdown-wrapper {
76
+ ${noNativeFormStyles};
77
+ cursor: pointer;
78
+ max-width: 100%;
79
+ position: relative;
80
+ flex-grow: 1;
81
+ box-sizing: border-box;
82
+ }
82
83
 
83
- ${hostClasses['vira-pop-up-trigger-inside-focus'].selector} .dropdown-wrapper {
84
- ${createFocusStyles({
85
- renderInside: true,
86
- })}
87
- }
88
- ${hostClasses['vira-pop-up-trigger-outside-focus'].selector} .dropdown-wrapper {
89
- ${createFocusStyles()}
90
- }
84
+ ${hostClasses['vira-pop-up-trigger-inside-focus'].selector} .dropdown-wrapper {
85
+ ${createFocusStyles({
86
+ renderInside: true,
87
+ })}
88
+ }
89
+ ${hostClasses['vira-pop-up-trigger-outside-focus'].selector} .dropdown-wrapper {
90
+ ${createFocusStyles()}
91
+ }
91
92
 
92
- .dropdown-trigger {
93
- box-sizing: border-box;
94
- ${noUserSelect};
95
- }
93
+ .dropdown-trigger {
94
+ box-sizing: border-box;
95
+ ${noUserSelect};
96
+ }
96
97
 
97
- ${hostClasses['vira-pop-up-trigger-disabled'].selector} {
98
- ${viraDisabledStyles}
99
- pointer-events: auto;
100
- }
98
+ ${hostClasses['vira-pop-up-trigger-disabled'].selector} {
99
+ ${viraDisabledStyles}
100
+ pointer-events: auto;
101
+ }
101
102
 
102
- ${hostClasses['vira-pop-up-trigger-disabled'].selector} .dropdown-wrapper {
103
- pointer-events: none;
104
- }
103
+ ${hostClasses['vira-pop-up-trigger-disabled'].selector} .dropdown-wrapper {
104
+ pointer-events: none;
105
+ }
105
106
 
106
- .pop-up-positioner {
107
- position: absolute;
108
- pointer-events: none;
109
- display: flex;
110
- box-sizing: border-box;
111
- flex-direction: column;
112
- align-items: flex-start;
107
+ .pop-up-positioner {
108
+ position: absolute;
109
+ pointer-events: none;
110
+ display: flex;
111
+ box-sizing: border-box;
112
+ flex-direction: column;
113
+ align-items: flex-start;
113
114
 
114
- /* highest possible z-index */
115
- z-index: 2147483647;
115
+ /* highest possible z-index */
116
+ z-index: 2147483647;
116
117
 
117
- & > * {
118
- pointer-events: auto;
119
- max-width: 100%;
120
- }
118
+ & > * {
119
+ pointer-events: auto;
120
+ max-width: 100%;
121
+ }
121
122
 
122
- &.right-aligned {
123
- align-items: flex-end;
123
+ &.right-aligned {
124
+ align-items: flex-end;
125
+ }
124
126
  }
125
- }
126
127
 
127
- .open-upwards .pop-up-positioner {
128
- flex-direction: column-reverse;
129
- }
130
- `,
128
+ .open-upwards .pop-up-positioner {
129
+ flex-direction: column-reverse;
130
+ }
131
+ `;
132
+ },
131
133
  events: {
132
134
  navSelect: defineElementEvent(),
133
135
  /**
@@ -1,5 +1,5 @@
1
1
  import { type PartialWithUndefined } from '@augment-vir/common';
2
- import { type FullDate } from 'date-vir';
2
+ import { type FullDate, type Timezone } from 'date-vir';
3
3
  /**
4
4
  * Displays a `FullDate` as an absolute, human readable timestamp in the user's timezone (for
5
5
  * example `Jun 3, 2026 14:30 PDT`).
@@ -21,7 +21,7 @@ export declare const ViraAbsoluteTime: import("element-vir").DeclarativeElementD
21
21
  * midnight UTC), where converting to the user's timezone would shift the displayed
22
22
  * date/time.
23
23
  */
24
- timezone: string;
24
+ timezone: Timezone;
25
25
  }>, {}, {}, "vira-absolute-time-", "vira-absolute-time-", readonly [], readonly []>;
26
26
  /**
27
27
  * Formats a `FullDate` into the same absolute string rendered by {@link ViraAbsoluteTime}.
@@ -31,5 +31,5 @@ export declare const ViraAbsoluteTime: import("element-vir").DeclarativeElementD
31
31
  export declare function formatAbsoluteTime(time: Readonly<FullDate>, options?: Readonly<PartialWithUndefined<{
32
32
  showDateOnly: boolean;
33
33
  showTimeOnly: boolean;
34
- timezone: string;
34
+ timezone: Timezone;
35
35
  }>>): string;
@@ -14,44 +14,46 @@ export const ViraBoldText = defineViraElement()({
14
14
  hostClasses: {
15
15
  'vira-bold-bold': ({ inputs }) => inputs.bold,
16
16
  },
17
- styles: ({ hostClasses, cssVars }) => css `
18
- span {
19
- text-decoration: inherit;
20
- white-space: inherit;
21
- }
17
+ styles: ({ hostClasses, cssVars }) => {
18
+ return css `
19
+ span {
20
+ text-decoration: inherit;
21
+ white-space: inherit;
22
+ }
22
23
 
23
- .bold-wrapper {
24
- position: relative;
25
- }
24
+ .bold-wrapper {
25
+ position: relative;
26
+ }
26
27
 
27
- .everything-wrapper {
28
- width: 100%;
29
- }
28
+ .everything-wrapper {
29
+ width: 100%;
30
+ }
30
31
 
31
- .bold {
32
- font-weight: ${cssVars['vira-bold-bold-weight'].value};
33
- visibility: hidden;
34
- pointer-events: none;
35
- z-index: -1;
36
- }
32
+ .bold {
33
+ font-weight: ${cssVars['vira-bold-bold-weight'].value};
34
+ visibility: hidden;
35
+ pointer-events: none;
36
+ z-index: -1;
37
+ }
37
38
 
38
- .normal {
39
- position: absolute;
40
- top: 0;
41
- left: 0;
42
- }
39
+ .normal {
40
+ position: absolute;
41
+ top: 0;
42
+ left: 0;
43
+ }
43
44
 
44
- ${hostClasses['vira-bold-bold'].selector} .normal {
45
- visibility: hidden;
46
- pointer-events: none;
47
- z-index: -1;
48
- }
49
- ${hostClasses['vira-bold-bold'].selector} .bold {
50
- visibility: visible;
51
- pointer-events: unset;
52
- z-index: unset;
53
- }
54
- `,
45
+ ${hostClasses['vira-bold-bold'].selector} .normal {
46
+ visibility: hidden;
47
+ pointer-events: none;
48
+ z-index: -1;
49
+ }
50
+ ${hostClasses['vira-bold-bold'].selector} .bold {
51
+ visibility: visible;
52
+ pointer-events: unset;
53
+ z-index: unset;
54
+ }
55
+ `;
56
+ },
55
57
  render({ inputs }) {
56
58
  return html `
57
59
  <span class="everything-wrapper">
@@ -124,9 +124,13 @@ export const ViraButton = defineViraElement()({
124
124
  // eslint-disable-next-line @typescript-eslint/no-deprecated
125
125
  'vira-button-with-menu-caret': ({ inputs }) => !!inputs.showMenuCaret,
126
126
  'vira-button-size-large': ({ inputs }) => inputs.buttonSize === ViraSize.Large,
127
- 'vira-button-size-medium': ({ inputs }) => !inputs.buttonSize || inputs.buttonSize === ViraSize.Medium,
127
+ 'vira-button-size-medium': ({ inputs }) => {
128
+ return !inputs.buttonSize || inputs.buttonSize === ViraSize.Medium;
129
+ },
128
130
  'vira-button-size-small': ({ inputs }) => inputs.buttonSize === ViraSize.Small,
129
- 'vira-button-emphasis-standard': ({ inputs }) => !inputs.buttonEmphasis || inputs.buttonEmphasis === ViraEmphasis.Standard,
131
+ 'vira-button-emphasis-standard': ({ inputs }) => {
132
+ return !inputs.buttonEmphasis || inputs.buttonEmphasis === ViraEmphasis.Standard;
133
+ },
130
134
  'vira-button-emphasis-subtle': ({ inputs }) => inputs.buttonEmphasis === ViraEmphasis.Subtle,
131
135
  ...arrayToObject(getObjectTypedKeys(viraColorVariantToHostClassKey), (colorVariant) => {
132
136
  const colorKey = viraColorVariantToHostClassKey[colorVariant];
@@ -27,21 +27,23 @@ export const ViraCard = defineViraElement()({
27
27
  'vira-card-border': css `1px solid ${viraFormCssVars['vira-form-border-color'].value}`,
28
28
  'vira-card-padding': '24px',
29
29
  },
30
- styles: ({ hostClasses, cssVars }) => css `
31
- :host {
32
- display: block;
33
- border: ${cssVars['vira-card-border'].value};
34
- border-radius: ${viraFormCssVars['vira-form-wrapper-radius'].value};
35
- padding: ${cssVars['vira-card-padding'].value};
36
- }
30
+ styles: ({ hostClasses, cssVars }) => {
31
+ return css `
32
+ :host {
33
+ display: block;
34
+ border: ${cssVars['vira-card-border'].value};
35
+ border-radius: ${viraFormCssVars['vira-form-wrapper-radius'].value};
36
+ padding: ${cssVars['vira-card-padding'].value};
37
+ }
37
38
 
38
- ${hostClasses['vira-card-error'].selector} {
39
- border-color: ${viraFormCssVars['vira-form-error-color'].value};
40
- }
41
- ${hostClasses['vira-card-success'].selector} {
42
- border-color: ${viraFormCssVars['vira-form-success-color'].value};
43
- }
44
- `,
39
+ ${hostClasses['vira-card-error'].selector} {
40
+ border-color: ${viraFormCssVars['vira-form-error-color'].value};
41
+ }
42
+ ${hostClasses['vira-card-success'].selector} {
43
+ border-color: ${viraFormCssVars['vira-form-success-color'].value};
44
+ }
45
+ `;
46
+ },
45
47
  render() {
46
48
  return html `
47
49
  <slot></slot>