vira 31.4.1 → 31.5.1

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.
@@ -159,36 +159,36 @@ const colorVariantColors = {
159
159
  [ViraColorVariant.Warning]: {
160
160
  [ViraEmphasis.Standard]: {
161
161
  idle: {
162
- backgroundColor: viraTheme.colors['vira-orange-behind-bg-non-body'].background,
163
- textColor: viraTheme.colors['vira-orange-behind-bg-non-body'].foreground,
164
- borderColor: viraTheme.colors['vira-orange-behind-bg-body'].background,
162
+ backgroundColor: viraTheme.colors['vira-yellow-behind-bg-non-body'].background,
163
+ textColor: viraTheme.colors['vira-yellow-behind-bg-non-body'].foreground,
164
+ borderColor: viraTheme.colors['vira-yellow-behind-bg-body'].background,
165
165
  },
166
166
  hover: {
167
- backgroundColor: viraTheme.colors['vira-orange-behind-bg-header'].background,
168
- textColor: viraTheme.colors['vira-orange-behind-bg-header'].foreground,
169
- borderColor: viraTheme.colors['vira-orange-behind-bg-body'].background,
167
+ backgroundColor: viraTheme.colors['vira-yellow-behind-bg-header'].background,
168
+ textColor: viraTheme.colors['vira-yellow-behind-bg-header'].foreground,
169
+ borderColor: viraTheme.colors['vira-yellow-behind-bg-body'].background,
170
170
  },
171
171
  active: {
172
- backgroundColor: viraTheme.colors['vira-orange-behind-bg-body'].background,
173
- textColor: viraTheme.colors['vira-orange-behind-bg-body'].foreground,
174
- borderColor: viraTheme.colors['vira-orange-behind-bg-body'].background,
172
+ backgroundColor: viraTheme.colors['vira-yellow-behind-bg-body'].background,
173
+ textColor: viraTheme.colors['vira-yellow-behind-bg-body'].foreground,
174
+ borderColor: viraTheme.colors['vira-yellow-behind-bg-body'].background,
175
175
  },
176
176
  },
177
177
  [ViraEmphasis.Subtle]: {
178
178
  idle: {
179
179
  backgroundColor: transparentColor,
180
- textColor: viraTheme.colors['vira-orange-foreground-non-body'].foreground,
180
+ textColor: viraTheme.colors['vira-yellow-foreground-non-body'].foreground,
181
181
  borderColor: transparentColor,
182
182
  },
183
183
  hover: {
184
- backgroundColor: viraTheme.colors['vira-orange-on-self-body'].background,
185
- textColor: viraTheme.colors['vira-orange-on-self-body'].foreground,
186
- borderColor: viraTheme.colors['vira-orange-on-self-body'].foreground,
184
+ backgroundColor: viraTheme.colors['vira-yellow-on-self-body'].background,
185
+ textColor: viraTheme.colors['vira-yellow-on-self-body'].foreground,
186
+ borderColor: viraTheme.colors['vira-yellow-on-self-body'].foreground,
187
187
  },
188
188
  active: {
189
- backgroundColor: viraTheme.colors['vira-orange-on-self-non-body'].background,
190
- textColor: viraTheme.colors['vira-orange-on-self-non-body'].foreground,
191
- borderColor: viraTheme.colors['vira-orange-on-self-non-body'].foreground,
189
+ backgroundColor: viraTheme.colors['vira-yellow-on-self-non-body'].background,
190
+ textColor: viraTheme.colors['vira-yellow-on-self-non-body'].foreground,
191
+ borderColor: viraTheme.colors['vira-yellow-on-self-non-body'].foreground,
192
192
  },
193
193
  },
194
194
  },
@@ -264,9 +264,9 @@ export const ViraButton = defineViraElement()({
264
264
  'vira-button-active-text-color': 'transparent',
265
265
  'vira-button-active-background-color': 'transparent',
266
266
  'vira-button-active-border-color': 'transparent',
267
- 'vira-button-disabled-text-color': viraTheme.colors['vira-grey-behind-bg-invisible'].foreground.value,
268
- 'vira-button-disabled-background-color': viraTheme.colors['vira-grey-behind-bg-invisible'].background.value,
269
- 'vira-button-disabled-border-color': viraTheme.colors['vira-grey-behind-bg-invisible'].background.value,
267
+ 'vira-button-disabled-text-color': viraTheme.colors['vira-grey-behind-bg-decoration'].foreground.value,
268
+ 'vira-button-disabled-background-color': viraTheme.colors['vira-grey-behind-bg-decoration'].background.value,
269
+ 'vira-button-disabled-border-color': viraTheme.colors['vira-grey-behind-bg-decoration'].background.value,
270
270
  'vira-button-border-width': '1px',
271
271
  'vira-button-border-radius': viraFormCssVars['vira-form-radius'].value,
272
272
  },
@@ -316,6 +316,10 @@ export const ViraButton = defineViraElement()({
316
316
  padding: 2px
317
317
  ${viraFormCssVars[`vira-form-${sizeVariant}-text-size`].value};
318
318
  }
319
+
320
+ &${hostClasses['vira-button-icon-only'].selector} {
321
+ min-width: ${viraSizeHeights[sizeVariant]}px;
322
+ }
319
323
  }
320
324
  `;
321
325
  });
@@ -414,8 +418,6 @@ export const ViraButton = defineViraElement()({
414
418
  }
415
419
 
416
420
  ${hostClasses['vira-button-icon-only'].selector} {
417
- aspect-ratio: 1;
418
-
419
421
  button {
420
422
  padding: 0;
421
423
  }
@@ -32,4 +32,4 @@ export declare const ViraTag: import("element-vir").DeclarativeElementDefinition
32
32
  }>, {}, {
33
33
  toggle: import("element-vir").DefineEvent<boolean>;
34
34
  cancel: import("element-vir").DefineEvent<void>;
35
- }, "vira-tag-selectable" | "vira-tag-checked" | "vira-tag-not-checked" | "vira-tag-cancellable" | "vira-tag-not-clickable" | "vira-tag-disabled" | "vira-tag-size-large" | "vira-tag-size-medium" | "vira-tag-size-small" | "vira-tag-emphasis-standard" | "vira-tag-emphasis-subtle" | "vira-tag-color-accent" | "vira-tag-color-plain" | "vira-tag-color-neutral" | "vira-tag-color-danger" | "vira-tag-color-warning" | "vira-tag-color-positive", "vira-tag-text-color" | "vira-tag-background-color" | "vira-tag-border-radius" | "vira-tag-gap" | "vira-tag-horizontal-padding" | "vira-tag-border-width", readonly [], readonly []>;
35
+ }, "vira-tag-selectable" | "vira-tag-checked" | "vira-tag-not-checked" | "vira-tag-cancellable" | "vira-tag-not-clickable" | "vira-tag-disabled" | "vira-tag-size-large" | "vira-tag-size-medium" | "vira-tag-size-small" | "vira-tag-emphasis-standard" | "vira-tag-emphasis-subtle" | "vira-tag-color-accent" | "vira-tag-color-plain" | "vira-tag-color-neutral" | "vira-tag-color-danger" | "vira-tag-color-warning" | "vira-tag-color-positive", "vira-tag-text-color" | "vira-tag-background-color" | "vira-tag-border-color" | "vira-tag-hover-text-color" | "vira-tag-hover-background-color" | "vira-tag-hover-border-color" | "vira-tag-active-text-color" | "vira-tag-active-background-color" | "vira-tag-active-border-color" | "vira-tag-disabled-text-color" | "vira-tag-disabled-background-color" | "vira-tag-disabled-border-color" | "vira-tag-border-radius" | "vira-tag-gap" | "vira-tag-horizontal-padding" | "vira-tag-border-width", readonly [], readonly []>;
@@ -1,84 +1,147 @@
1
1
  import { check } from '@augment-vir/assert';
2
- import { colorCss, ContrastLevelName } from '@electrovir/color';
2
+ import { ContrastLevelName } from '@electrovir/color';
3
3
  import { css, defineElementEvent, html, listen, unsafeCSS } from 'element-vir';
4
4
  import { themeDefaultKey } from 'theme-vir/dist/color-theme/color-theme.js';
5
5
  import { Check16Icon } from '../icons/icon-svgs/16/check-16.icon.js';
6
6
  import { X16Icon } from '../icons/icon-svgs/16/x-16.icon.js';
7
7
  import { viraFormCssVars } from '../styles/form-styles.js';
8
- import { ViraColorVariant, viraColorVariantToColorName, ViraEmphasis, ViraSize, viraSizeHeights, } from '../styles/form-variants.js';
8
+ import { ViraColorVariant, viraColorVariants, viraColorVariantToColorName, ViraEmphasis, viraEmphasisVariants, ViraSize, viraSizeHeights, viraSizeVariants, } from '../styles/form-variants.js';
9
9
  import { noNativeFormStyles } from '../styles/native-styles.js';
10
10
  import { noUserSelect } from '../styles/user-select.js';
11
11
  import { viraThemeByKeys } from '../styles/vira-color-theme-object.js';
12
12
  import { viraTheme } from '../styles/vira-color-theme.js';
13
13
  import { defineViraElement } from '../util/define-vira-element.js';
14
14
  import { ViraIcon } from './vira-icon.element.js';
15
- function generateThemeCss(colorVariant) {
16
- if (!check.hasKey(viraColorVariantToColorName, colorVariant)) {
17
- throw new Error(`No ViraTag color for variant '${colorVariant}'`);
18
- }
19
- const viraThemeColorKey = viraColorVariantToColorName[colorVariant];
20
- return css `
21
- :host(
22
- .vira-tag-color-${unsafeCSS(colorVariant)}.vira-tag-emphasis-${unsafeCSS(ViraEmphasis.Standard)}
23
- )
24
- button {
25
- ${colorCss(viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.NonBodyText])}
26
- border-color: ${viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.NonBodyText].background.value};
27
-
28
- &:hover {
29
- ${colorCss(viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.Header])}
30
- border-color: ${viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.Header].background.value};
31
- }
32
- &:active {
33
- ${colorCss(viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.NonBodyText])}
34
- border-color: ${viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.NonBodyText].background.value};
35
- }
36
- }
37
- :host(
38
- .vira-tag-color-${unsafeCSS(colorVariant)}.vira-tag-emphasis-${unsafeCSS(ViraEmphasis.Subtle)}
39
- )
40
- button {
41
- ${colorCss(viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.BodyText])}
42
- border-color: ${viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.BodyText].background.value};
43
-
44
- &:hover {
45
- ${colorCss(viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.NonBodyText])}
46
- border-color: ${viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.NonBodyText].background.value};
47
- }
48
- &:active {
49
- ${colorCss(viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.BodyText])}
50
- border-color: ${viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.BodyText].background.value};
51
- }
52
- }
53
- :host(
54
- .vira-tag-color-${unsafeCSS(colorVariant)}.vira-tag-not-checked.vira-tag-not-checked.vira-tag-not-checked
55
- )
56
- button {
57
- color: ${viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.BodyText]
58
- .foreground.value};
59
- background-color: transparent;
60
- border-color: ${viraThemeByKeys[viraThemeColorKey]['on-self'][ContrastLevelName.BodyText].background.value};
61
-
62
- &:hover {
63
- background-color: ${viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.Invisible].background.value};
64
- }
65
- &:active {
66
- background-color: ${viraThemeByKeys[viraThemeColorKey]['behind-bg'][ContrastLevelName.Decoration].background.value};
67
- }
68
- }
69
- `;
15
+ const transparentColor = {
16
+ value: css `transparent`,
17
+ };
18
+ function buildThemedTagColors(colorName) {
19
+ const behindBg = viraThemeByKeys[colorName]['behind-bg'];
20
+ const onSelf = viraThemeByKeys[colorName]['on-self'];
21
+ return {
22
+ [ViraEmphasis.Standard]: {
23
+ idle: {
24
+ textColor: behindBg[ContrastLevelName.NonBodyText].foreground,
25
+ backgroundColor: behindBg[ContrastLevelName.NonBodyText].background,
26
+ borderColor: behindBg[ContrastLevelName.NonBodyText].background,
27
+ },
28
+ hover: {
29
+ textColor: behindBg[ContrastLevelName.Header].foreground,
30
+ backgroundColor: behindBg[ContrastLevelName.Header].background,
31
+ borderColor: behindBg[ContrastLevelName.Header].background,
32
+ },
33
+ active: {
34
+ textColor: behindBg[ContrastLevelName.NonBodyText].foreground,
35
+ backgroundColor: behindBg[ContrastLevelName.NonBodyText].background,
36
+ borderColor: behindBg[ContrastLevelName.NonBodyText].background,
37
+ },
38
+ },
39
+ [ViraEmphasis.Subtle]: {
40
+ idle: {
41
+ textColor: onSelf[ContrastLevelName.BodyText].foreground,
42
+ backgroundColor: onSelf[ContrastLevelName.BodyText].background,
43
+ borderColor: onSelf[ContrastLevelName.BodyText].background,
44
+ },
45
+ hover: {
46
+ textColor: onSelf[ContrastLevelName.NonBodyText].foreground,
47
+ backgroundColor: onSelf[ContrastLevelName.NonBodyText].background,
48
+ borderColor: onSelf[ContrastLevelName.NonBodyText].background,
49
+ },
50
+ active: {
51
+ textColor: onSelf[ContrastLevelName.BodyText].foreground,
52
+ backgroundColor: onSelf[ContrastLevelName.BodyText].background,
53
+ borderColor: onSelf[ContrastLevelName.BodyText].background,
54
+ },
55
+ },
56
+ };
70
57
  }
71
- function generateAutomaticViraTagThemeVariants() {
72
- return unsafeCSS([
73
- ViraColorVariant.Accent,
74
- ViraColorVariant.Danger,
75
- ViraColorVariant.Neutral,
76
- ViraColorVariant.Positive,
77
- ViraColorVariant.Warning,
78
- ]
79
- .map((variant) => generateThemeCss(variant))
80
- .join(' '));
58
+ function buildThemedNotCheckedColors(colorName) {
59
+ const onSelfBodyText = viraThemeByKeys[colorName]['on-self'][ContrastLevelName.BodyText];
60
+ return {
61
+ idle: {
62
+ textColor: onSelfBodyText.foreground,
63
+ backgroundColor: transparentColor,
64
+ borderColor: onSelfBodyText.background,
65
+ },
66
+ hover: {
67
+ textColor: onSelfBodyText.foreground,
68
+ backgroundColor: viraThemeByKeys[colorName]['behind-bg'][ContrastLevelName.Invisible].background,
69
+ borderColor: onSelfBodyText.background,
70
+ },
71
+ active: {
72
+ textColor: onSelfBodyText.foreground,
73
+ backgroundColor: viraThemeByKeys[colorName]['behind-bg'][ContrastLevelName.Decoration].background,
74
+ borderColor: onSelfBodyText.background,
75
+ },
76
+ };
81
77
  }
78
+ const tagColorVariantColors = {
79
+ [ViraColorVariant.Plain]: {
80
+ [ViraEmphasis.Standard]: {
81
+ idle: {
82
+ backgroundColor: viraTheme.inverse[themeDefaultKey].background,
83
+ textColor: viraTheme.inverse[themeDefaultKey].foreground,
84
+ borderColor: viraTheme.inverse[themeDefaultKey].background,
85
+ },
86
+ hover: {
87
+ backgroundColor: viraTheme.colors['vira-grey-behind-bg-non-body'].background,
88
+ textColor: viraTheme.colors['vira-grey-behind-bg-non-body'].foreground,
89
+ borderColor: viraTheme.colors['vira-grey-behind-bg-non-body'].background,
90
+ },
91
+ active: {
92
+ backgroundColor: viraTheme.inverse[themeDefaultKey].background,
93
+ textColor: viraTheme.inverse[themeDefaultKey].foreground,
94
+ borderColor: viraTheme.inverse[themeDefaultKey].background,
95
+ },
96
+ },
97
+ [ViraEmphasis.Subtle]: {
98
+ idle: {
99
+ backgroundColor: transparentColor,
100
+ textColor: viraTheme.colors[themeDefaultKey].foreground,
101
+ borderColor: transparentColor,
102
+ },
103
+ hover: {
104
+ backgroundColor: viraTheme.colors['vira-grey-behind-fg-small-body'].background,
105
+ textColor: viraTheme.colors['vira-grey-behind-fg-small-body'].foreground,
106
+ borderColor: viraTheme.colors['vira-grey-behind-fg-small-body'].background,
107
+ },
108
+ active: {
109
+ backgroundColor: viraTheme.colors['vira-grey-behind-fg-body'].background,
110
+ textColor: viraTheme.colors['vira-grey-behind-fg-body'].foreground,
111
+ borderColor: viraTheme.colors['vira-grey-behind-fg-body'].background,
112
+ },
113
+ },
114
+ },
115
+ [ViraColorVariant.Accent]: buildThemedTagColors(viraColorVariantToColorName[ViraColorVariant.Accent]),
116
+ [ViraColorVariant.Neutral]: buildThemedTagColors(viraColorVariantToColorName[ViraColorVariant.Neutral]),
117
+ [ViraColorVariant.Danger]: buildThemedTagColors(viraColorVariantToColorName[ViraColorVariant.Danger]),
118
+ [ViraColorVariant.Warning]: buildThemedTagColors(viraColorVariantToColorName[ViraColorVariant.Warning]),
119
+ [ViraColorVariant.Positive]: buildThemedTagColors(viraColorVariantToColorName[ViraColorVariant.Positive]),
120
+ };
121
+ const tagNotCheckedColors = {
122
+ [ViraColorVariant.Plain]: {
123
+ idle: {
124
+ textColor: viraTheme.colors[themeDefaultKey].foreground,
125
+ backgroundColor: transparentColor,
126
+ borderColor: transparentColor,
127
+ },
128
+ hover: {
129
+ backgroundColor: viraTheme.colors['vira-grey-behind-fg-small-body'].background,
130
+ textColor: viraTheme.colors['vira-grey-behind-fg-small-body'].foreground,
131
+ borderColor: viraTheme.colors['vira-grey-behind-fg-small-body'].background,
132
+ },
133
+ active: {
134
+ backgroundColor: viraTheme.colors['vira-grey-behind-fg-body'].background,
135
+ textColor: viraTheme.colors['vira-grey-behind-fg-body'].foreground,
136
+ borderColor: viraTheme.colors['vira-grey-behind-fg-body'].background,
137
+ },
138
+ },
139
+ [ViraColorVariant.Accent]: buildThemedNotCheckedColors(viraColorVariantToColorName[ViraColorVariant.Accent]),
140
+ [ViraColorVariant.Neutral]: buildThemedNotCheckedColors(viraColorVariantToColorName[ViraColorVariant.Neutral]),
141
+ [ViraColorVariant.Danger]: buildThemedNotCheckedColors(viraColorVariantToColorName[ViraColorVariant.Danger]),
142
+ [ViraColorVariant.Warning]: buildThemedNotCheckedColors(viraColorVariantToColorName[ViraColorVariant.Warning]),
143
+ [ViraColorVariant.Positive]: buildThemedNotCheckedColors(viraColorVariantToColorName[ViraColorVariant.Positive]),
144
+ };
82
145
  /**
83
146
  * A "tag" or "label" or "pill" element. Supports many variations including non-clickable,
84
147
  * selectable, and cancellable variations.
@@ -89,8 +152,18 @@ function generateAutomaticViraTagThemeVariants() {
89
152
  export const ViraTag = defineViraElement()({
90
153
  tagName: 'vira-tag',
91
154
  cssVars: {
92
- 'vira-tag-text-color': 'white',
93
- 'vira-tag-background-color': 'black',
155
+ 'vira-tag-text-color': 'transparent',
156
+ 'vira-tag-background-color': 'transparent',
157
+ 'vira-tag-border-color': 'transparent',
158
+ 'vira-tag-hover-text-color': 'transparent',
159
+ 'vira-tag-hover-background-color': 'transparent',
160
+ 'vira-tag-hover-border-color': 'transparent',
161
+ 'vira-tag-active-text-color': 'transparent',
162
+ 'vira-tag-active-background-color': 'transparent',
163
+ 'vira-tag-active-border-color': 'transparent',
164
+ 'vira-tag-disabled-text-color': viraTheme.colors['vira-grey-behind-bg-decoration'].foreground.value,
165
+ 'vira-tag-disabled-background-color': viraTheme.colors['vira-grey-behind-bg-decoration'].background.value,
166
+ 'vira-tag-disabled-border-color': viraTheme.colors['vira-grey-behind-bg-decoration'].background.value,
94
167
  'vira-tag-border-radius': '1000px',
95
168
  'vira-tag-gap': '6px',
96
169
  'vira-tag-horizontal-padding': '12px',
@@ -119,147 +192,169 @@ export const ViraTag = defineViraElement()({
119
192
  'vira-tag-color-warning': ({ inputs }) => inputs.color === ViraColorVariant.Warning,
120
193
  'vira-tag-color-positive': ({ inputs }) => inputs.color === ViraColorVariant.Positive,
121
194
  },
122
- styles: ({ cssVars, hostClasses }) => css `
123
- :host {
124
- display: inline-flex;
125
- }
195
+ styles: ({ cssVars, hostClasses }) => {
196
+ function generateVariantCss() {
197
+ const allStyles = viraEmphasisVariants.flatMap((emphasis) => {
198
+ return viraColorVariants.map((colorVariant) => {
199
+ const colors = tagColorVariantColors[colorVariant][emphasis];
200
+ const variantSelector = hostClasses[`vira-tag-color-${colorVariant}`].selector;
201
+ const emphasisSelector = hostClasses[`vira-tag-emphasis-${emphasis}`].selector;
202
+ return css `
203
+ ${variantSelector}${emphasisSelector} {
204
+ ${cssVars['vira-tag-background-color'].name}: ${colors.idle
205
+ .backgroundColor.value};
206
+ ${cssVars['vira-tag-text-color'].name}: ${colors.idle.textColor.value};
207
+ ${cssVars['vira-tag-border-color'].name}: ${colors.idle.borderColor
208
+ .value};
126
209
 
127
- button {
128
- ${noNativeFormStyles}
129
- flex-shrink: 0;
130
- cursor: pointer;
131
- display: flex;
132
- align-items: center;
133
- gap: ${cssVars['vira-tag-gap'].value};
134
- border-radius: ${cssVars['vira-tag-border-radius'].value};
135
- border-width: ${cssVars['vira-tag-border-width'].value};
136
- border-style: solid;
137
- border-color: transparent;
138
- color: ${cssVars['vira-tag-text-color'].value};
139
- background-color: ${cssVars['vira-tag-background-color'].value};
140
- box-sizing: border-box;
141
- padding: 0 ${cssVars['vira-tag-horizontal-padding'].value};
210
+ ${cssVars['vira-tag-hover-background-color'].name}: ${colors.hover
211
+ .backgroundColor.value};
212
+ ${cssVars['vira-tag-hover-text-color'].name}: ${colors.hover.textColor
213
+ .value};
214
+ ${cssVars['vira-tag-hover-border-color'].name}: ${colors.hover
215
+ .borderColor.value};
142
216
 
143
- &[disabled] {
144
- cursor: default;
145
- pointer-events: none;
146
- }
217
+ ${cssVars['vira-tag-active-background-color'].name}: ${colors.active
218
+ .backgroundColor.value};
219
+ ${cssVars['vira-tag-active-text-color'].name}: ${colors.active.textColor
220
+ .value};
221
+ ${cssVars['vira-tag-active-border-color'].name}: ${colors.active
222
+ .borderColor.value};
223
+ }
224
+ `;
225
+ });
226
+ });
227
+ return unsafeCSS(allStyles.join('\n'));
147
228
  }
229
+ function generateNotCheckedCss() {
230
+ const allStyles = viraColorVariants.map((colorVariant) => {
231
+ const colors = tagNotCheckedColors[colorVariant];
232
+ const variantSelector = hostClasses[`vira-tag-color-${colorVariant}`].selector;
233
+ const notCheckedSelector = hostClasses['vira-tag-not-checked'].selector;
234
+ return css `
235
+ ${variantSelector}${notCheckedSelector}${notCheckedSelector}${notCheckedSelector} {
236
+ ${cssVars['vira-tag-background-color'].name}: ${colors.idle.backgroundColor
237
+ .value};
238
+ ${cssVars['vira-tag-text-color'].name}: ${colors.idle.textColor.value};
239
+ ${cssVars['vira-tag-border-color'].name}: ${colors.idle.borderColor.value};
148
240
 
149
- .cancel-x,
150
- .selected-check,
151
- .text {
152
- height: 0;
153
- display: flex;
154
- align-items: center;
155
- }
241
+ ${cssVars['vira-tag-hover-background-color'].name}: ${colors.hover
242
+ .backgroundColor.value};
243
+ ${cssVars['vira-tag-hover-text-color'].name}: ${colors.hover.textColor
244
+ .value};
245
+ ${cssVars['vira-tag-hover-border-color'].name}: ${colors.hover.borderColor
246
+ .value};
156
247
 
157
- .cancel-x {
158
- display: none;
159
- margin-right: -2px;
248
+ ${cssVars['vira-tag-active-background-color'].name}: ${colors.active
249
+ .backgroundColor.value};
250
+ ${cssVars['vira-tag-active-text-color'].name}: ${colors.active.textColor
251
+ .value};
252
+ ${cssVars['vira-tag-active-border-color'].name}: ${colors.active.borderColor
253
+ .value};
254
+ }
255
+ `;
256
+ });
257
+ return unsafeCSS(allStyles.join('\n'));
160
258
  }
161
-
162
- .selected-check {
163
- margin-left: -2px;
164
- display: none;
165
- visibility: hidden;
259
+ function generateSizeVariantCss() {
260
+ const styles = viraSizeVariants.map((sizeVariant) => {
261
+ return css `
262
+ ${hostClasses[`vira-tag-size-${sizeVariant}`].selector} button {
263
+ height: ${viraSizeHeights[sizeVariant]}px;
264
+ font-size: ${viraFormCssVars[`vira-form-${sizeVariant}-text-size`].value};
265
+ }
266
+ `;
267
+ });
268
+ return unsafeCSS(styles.join('\n'));
166
269
  }
270
+ return css `
271
+ :host {
272
+ display: inline-flex;
273
+ }
167
274
 
168
- ${hostClasses['vira-tag-selectable'].selector} .selected-check {
169
- display: flex;
170
- }
171
- ${hostClasses['vira-tag-checked'].selector} .selected-check {
172
- visibility: visible;
173
- }
174
- ${hostClasses['vira-tag-cancellable'].selector} .cancel-x {
175
- display: flex;
176
- }
177
- ${hostClasses['vira-tag-size-large'].selector} button {
178
- height: ${viraSizeHeights[ViraSize.Large]}px;
179
- font-size: ${viraFormCssVars['vira-form-large-text-size'].value};
180
- padding: 0 var(${cssVars['vira-tag-horizontal-padding'].name}, 16px);
181
- }
182
- ${hostClasses['vira-tag-size-medium'].selector} button {
183
- height: ${viraSizeHeights[ViraSize.Medium]}px;
184
- font-size: ${viraFormCssVars['vira-form-medium-text-size'].value};
185
- }
186
- ${hostClasses['vira-tag-size-small'].selector} button {
187
- height: ${viraSizeHeights[ViraSize.Small]}px;
188
- font-size: ${viraFormCssVars['vira-form-small-text-size'].value};
189
- }
275
+ ${generateSizeVariantCss()}
276
+ ${generateVariantCss()}
277
+ ${generateNotCheckedCss()}
190
278
 
191
- ${generateAutomaticViraTagThemeVariants()}
279
+ button {
280
+ ${noNativeFormStyles}
281
+ flex-shrink: 0;
282
+ cursor: pointer;
283
+ display: flex;
284
+ align-items: center;
285
+ gap: ${cssVars['vira-tag-gap'].value};
286
+ border-radius: ${cssVars['vira-tag-border-radius'].value};
287
+ border-width: ${cssVars['vira-tag-border-width'].value};
288
+ border-style: solid;
289
+ border-color: ${cssVars['vira-tag-border-color'].value};
290
+ color: ${cssVars['vira-tag-text-color'].value};
291
+ background-color: ${cssVars['vira-tag-background-color'].value};
292
+ box-sizing: border-box;
293
+ padding: 0 ${cssVars['vira-tag-horizontal-padding'].value};
192
294
 
193
- :host(.${hostClasses['vira-tag-disabled'].name}.${hostClasses['vira-tag-disabled']
194
- .name}.${hostClasses['vira-tag-disabled'].name}.${hostClasses['vira-tag-disabled']
195
- .name}) {
196
- cursor: not-allowed;
197
- ${noUserSelect}
295
+ &[disabled] {
296
+ cursor: default;
297
+ pointer-events: none;
298
+ }
299
+ }
198
300
 
199
- & button {
200
- ${colorCss(viraTheme.colors['vira-grey-behind-bg-decoration'])}
201
- border-color: ${viraTheme.colors['vira-grey-behind-bg-decoration'].background.value}
301
+ button:hover {
302
+ background-color: ${cssVars['vira-tag-hover-background-color'].value};
303
+ color: ${cssVars['vira-tag-hover-text-color'].value};
304
+ border-color: ${cssVars['vira-tag-hover-border-color'].value};
202
305
  }
203
306
 
204
- &.${hostClasses['vira-tag-emphasis-subtle'].name} button {
205
- ${colorCss(viraTheme.colors['vira-grey-behind-bg-decoration'])}
206
- border-color: ${viraTheme.colors['vira-grey-behind-bg-decoration'].background.value}
307
+ button:active {
308
+ background-color: ${cssVars['vira-tag-active-background-color'].value};
309
+ color: ${cssVars['vira-tag-active-text-color'].value};
310
+ border-color: ${cssVars['vira-tag-active-border-color'].value};
207
311
  }
208
- }
209
312
 
210
- :host(
211
- .${hostClasses['vira-tag-color-plain'].name}.vira-tag-emphasis-${unsafeCSS(ViraEmphasis.Standard)}
212
- )
213
- button {
214
- ${colorCss(viraTheme.inverse[themeDefaultKey])};
215
- border-color: ${viraTheme.inverse[themeDefaultKey].background.value};
313
+ .cancel-x,
314
+ .selected-check,
315
+ .text {
316
+ height: 0;
317
+ display: flex;
318
+ align-items: center;
319
+ }
216
320
 
217
- &:hover {
218
- ${colorCss(viraTheme.colors['vira-grey-behind-bg-non-body'])};
219
- border-color: ${viraTheme.colors['vira-grey-behind-bg-non-body'].background.value};
321
+ .cancel-x {
322
+ display: none;
323
+ margin-right: -2px;
220
324
  }
221
- &:active {
222
- ${colorCss(viraTheme.inverse[themeDefaultKey])};
223
- border-color: ${viraTheme.inverse[themeDefaultKey].background.value};
325
+
326
+ .selected-check {
327
+ margin-left: -2px;
328
+ display: none;
329
+ visibility: hidden;
224
330
  }
225
- }
226
- :host(
227
- .${hostClasses['vira-tag-color-plain'].name}.vira-tag-emphasis-${unsafeCSS(ViraEmphasis.Subtle)}
228
- )
229
- button {
230
- background-color: transparent;
231
- color: ${viraTheme.colors[themeDefaultKey].foreground.value};
232
- border-color: transparent;
233
- }
234
- :host(
235
- .${hostClasses['vira-tag-color-plain'].name}.${hostClasses['vira-tag-not-checked']
236
- .name}.${hostClasses['vira-tag-not-checked'].name}.${hostClasses['vira-tag-not-checked'].name}
237
- )
238
- button {
239
- color: ${viraTheme.colors[themeDefaultKey].foreground.value};
240
- background-color: transparent;
241
- border-color: transparent;
242
- }
243
- :host(
244
- .${hostClasses['vira-tag-color-plain'].name}.vira-tag-emphasis-${unsafeCSS(ViraEmphasis.Subtle)}
245
- )
246
- button,
247
- :host(
248
- .${hostClasses['vira-tag-color-plain'].name}.${hostClasses['vira-tag-not-checked']
249
- .name}.${hostClasses['vira-tag-not-checked'].name}.${hostClasses['vira-tag-not-checked'].name}
250
- )
251
- button {
252
- &:hover {
253
- ${colorCss(viraTheme.colors['vira-grey-behind-fg-small-body'])}
254
- border-color: ${viraTheme.colors['vira-grey-behind-fg-small-body'].background
255
- .value};
331
+
332
+ ${hostClasses['vira-tag-selectable'].selector} .selected-check {
333
+ display: flex;
256
334
  }
257
- &:active {
258
- ${colorCss(viraTheme.colors['vira-grey-behind-fg-body'])}
259
- border-color: ${viraTheme.colors['vira-grey-behind-fg-body'].background.value};
335
+ ${hostClasses['vira-tag-checked'].selector} .selected-check {
336
+ visibility: visible;
260
337
  }
261
- }
262
- `,
338
+ ${hostClasses['vira-tag-cancellable'].selector} .cancel-x {
339
+ display: flex;
340
+ }
341
+
342
+ ${hostClasses['vira-tag-size-large'].selector} button {
343
+ padding: 0 var(${cssVars['vira-tag-horizontal-padding'].name}, 16px);
344
+ }
345
+
346
+ ${hostClasses['vira-tag-disabled'].selector} {
347
+ cursor: not-allowed;
348
+ ${noUserSelect}
349
+
350
+ & button {
351
+ color: ${cssVars['vira-tag-disabled-text-color'].value};
352
+ background-color: ${cssVars['vira-tag-disabled-background-color'].value};
353
+ border-color: ${cssVars['vira-tag-disabled-border-color'].value};
354
+ }
355
+ }
356
+ `;
357
+ },
263
358
  render({ inputs, dispatch, events }) {
264
359
  const disabled = !inputs.isClickable || !!inputs.disabled;
265
360
  return html `