@xen-orchestra/web-core 0.3.0 → 0.5.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.
Files changed (124) hide show
  1. package/lib/assets/css/_colors.pcss +56 -24
  2. package/lib/assets/css/_context.pcss +9 -9
  3. package/lib/assets/css/base.pcss +6 -6
  4. package/lib/components/backup-item/VtsBackupItem.vue +47 -0
  5. package/lib/components/backup-state/{BackupState.vue → VtsBackupState.vue} +4 -4
  6. package/lib/components/{button/ButtonGroup.vue → button-group/VtsButtonGroup.vue} +7 -6
  7. package/lib/components/cell-object/{CellObject.vue → VtsCellObject.vue} +14 -14
  8. package/lib/components/cell-text/{CellText.vue → VtsCellText.vue} +11 -11
  9. package/lib/components/console/{RemoteConsole.vue → VtsRemoteConsole.vue} +12 -18
  10. package/lib/components/donut-chart-with-legend/{DonutChartWithLegend.vue → VtsDonutChartWithLegend.vue} +6 -6
  11. package/lib/components/dropdown/DropdownItem.vue +8 -14
  12. package/lib/components/dropdown/DropdownTitle.vue +3 -3
  13. package/lib/components/icon/VtsIcon.vue +38 -42
  14. package/lib/components/layout/{LayoutSidebar.vue → VtsLayoutSidebar.vue} +31 -30
  15. package/lib/components/legend-group/VtsLegendGroup.vue +44 -0
  16. package/lib/components/{legend/LegendList.vue → legend-list/VtsLegendList.vue} +2 -2
  17. package/lib/components/menu/MenuTrigger.vue +2 -2
  18. package/lib/components/stacked-bar-with-legend/{StackedBarWithLegend.vue → VtsStackedBarWithLegend.vue} +14 -14
  19. package/lib/components/state-hero/VtsComingSoonHero.vue +13 -0
  20. package/lib/components/state-hero/VtsLoadingHero.vue +15 -0
  21. package/lib/components/state-hero/VtsNoDataHero.vue +11 -0
  22. package/lib/components/state-hero/VtsObjectNotFoundHero.vue +13 -0
  23. package/lib/components/state-hero/{StateHero.vue → VtsStateHero.vue} +42 -35
  24. package/lib/components/tab/TabItem.vue +6 -6
  25. package/lib/components/table/ColumnTitle.vue +7 -7
  26. package/lib/components/table/{UiTable.vue → VtsTable.vue} +7 -3
  27. package/lib/components/task/{QuickTaskButton.vue → VtsQuickTaskButton.vue} +8 -7
  28. package/lib/components/task/{QuickTaskList.vue → VtsQuickTaskList.vue} +10 -11
  29. package/lib/components/task/{QuickTaskTabBar.vue → VtsQuickTaskTabBar.vue} +9 -13
  30. package/lib/components/{tooltip/TooltipList.vue → tooltip-list/VtsTooltipList.vue} +2 -3
  31. package/lib/components/tree/{TreeItem.vue → VtsTreeItem.vue} +3 -4
  32. package/lib/components/tree/VtsTreeItemError.vue +18 -0
  33. package/lib/components/tree/{TreeLine.vue → VtsTreeLine.vue} +9 -11
  34. package/lib/components/tree/{TreeList.vue → VtsTreeList.vue} +5 -2
  35. package/lib/components/tree/VtsTreeLoadingItem.vue +61 -0
  36. package/lib/components/ui/account-menu-button/UiAccountMenuButton.vue +64 -0
  37. package/lib/components/ui/actions-title/UiActionsTitle.vue +18 -0
  38. package/lib/components/ui/button/UiButton.vue +532 -0
  39. package/lib/components/ui/button-icon/UiButtonIcon.vue +248 -0
  40. package/lib/components/{UiCard.vue → ui/card/UiCard.vue} +8 -6
  41. package/lib/components/ui/card-numbers/UiCardNumbers.vue +103 -0
  42. package/lib/components/ui/card-subtitle/UiCardSubtitle.vue +24 -0
  43. package/lib/components/ui/card-title/UiCardTitle.vue +56 -0
  44. package/lib/components/ui/checkbox/UiCheckbox.vue +410 -0
  45. package/lib/components/ui/checkbox-group/UiCheckboxGroup.vue +57 -0
  46. package/lib/components/ui/chip/ChipIcon.vue +21 -0
  47. package/lib/components/ui/chip/ChipRemoveIcon.vue +13 -0
  48. package/lib/components/ui/chip/UiChip.vue +135 -0
  49. package/lib/components/{icon/ComplexIcon.vue → ui/complex-icon/UiComplexIcon.vue} +21 -27
  50. package/lib/components/ui/counter/UiCounter.vue +134 -0
  51. package/lib/components/{donut-chart/DonutChart.vue → ui/donut-chart/UiDonutChart.vue} +28 -30
  52. package/lib/components/{head-bar/HeadBar.vue → ui/head-bar/UiHeadBar.vue} +31 -31
  53. package/lib/components/{info/VtsInfo.vue → ui/info/UiInfo.vue} +13 -11
  54. package/lib/components/{input → ui/input}/UiInput.vue +9 -7
  55. package/lib/components/ui/input/UiTextarea.vue +120 -0
  56. package/lib/components/ui/label/UiLabel.vue +76 -0
  57. package/lib/components/ui/legend/UiLegend.vue +98 -0
  58. package/lib/components/{LegendTitle.vue → ui/legend-title/UiLegendTitle.vue} +4 -4
  59. package/lib/components/{UiSpinner.vue → ui/loader/UiLoader.vue} +3 -3
  60. package/lib/components/{icon/ObjectIcon.vue → ui/object-icon/UiObjectIcon.vue} +44 -36
  61. package/lib/components/ui/object-link/UiObjectLink.vue +83 -0
  62. package/lib/components/ui/panel/UiPanel.vue +57 -0
  63. package/lib/components/{query-search-bar/QuerySearchBar.vue → ui/query-search-bar/UiQuerySearchBar.vue} +16 -16
  64. package/lib/components/{task/QuickTaskItem.vue → ui/quick-task-item/UiQuickTaskItem.vue} +46 -34
  65. package/lib/components/{task/QuickTaskPanel.vue → ui/quick-task-panel/UiQuickTaskPanel.vue} +8 -7
  66. package/lib/components/ui/radio-button/UiRadioButton.vue +196 -0
  67. package/lib/components/ui/radio-button-group/UiRadioButtonGroup.vue +56 -0
  68. package/lib/components/{stacked-bar → ui/stacked-bar}/StackedBarSegment.vue +23 -26
  69. package/lib/components/{stacked-bar/StackedBar.vue → ui/stacked-bar/UiStackedBar.vue} +6 -6
  70. package/lib/components/ui/table-actions/UiTableActions.vue +46 -0
  71. package/lib/components/ui/tag/UiTag.vue +118 -0
  72. package/lib/components/ui/title/UiTitle.vue +39 -0
  73. package/lib/components/ui/toaster/UiToaster.vue +100 -0
  74. package/lib/components/ui/toggle/UiToggle.vue +117 -0
  75. package/lib/components/{tooltip/TooltipItem.vue → ui/tooltip/UiTooltip.vue} +15 -15
  76. package/lib/components/ui/top-bottom-table/UiTopBottomTable.vue +64 -0
  77. package/lib/components/{tree/TreeItemLabel.vue → ui/tree-item-label/UiTreeItemLabel.vue} +60 -59
  78. package/lib/components/ui/user-link/UiUserLink.vue +76 -0
  79. package/lib/components/ui/user-logo/UiUserLogo.vue +50 -0
  80. package/lib/composables/route-query.composable.md +136 -0
  81. package/lib/composables/table.composable.md +159 -0
  82. package/lib/composables/tree/define-tree.ts +1 -1
  83. package/lib/composables/tree/tree-node-base.ts +6 -6
  84. package/lib/composables/tree.composable.md +536 -0
  85. package/lib/layouts/CoreLayout.vue +8 -6
  86. package/lib/locales/de.json +3 -2
  87. package/lib/locales/en.json +7 -3
  88. package/lib/locales/fa.json +3 -2
  89. package/lib/locales/fr.json +7 -3
  90. package/lib/types/color.type.ts +0 -2
  91. package/lib/types/subscribable-store.type.ts +2 -2
  92. package/lib/utils/create-subscribable-store-context.util.ts +1 -1
  93. package/lib/utils/if-else.utils.md +23 -0
  94. package/lib/utils/if-else.utils.ts +2 -2
  95. package/lib/utils/to-variants.util.md +62 -0
  96. package/package.json +7 -7
  97. package/lib/components/CardNumbers.vue +0 -101
  98. package/lib/components/PowerStateIcon.vue +0 -46
  99. package/lib/components/UiTag.vue +0 -101
  100. package/lib/components/backup-item/BackupItem.vue +0 -40
  101. package/lib/components/button/ButtonIcon.vue +0 -220
  102. package/lib/components/button/UiButton.vue +0 -470
  103. package/lib/components/card/CardSubtitle.vue +0 -24
  104. package/lib/components/card/CardTitle.vue +0 -57
  105. package/lib/components/chip/ChipIcon.vue +0 -30
  106. package/lib/components/chip/ChipRemoveIcon.vue +0 -13
  107. package/lib/components/chip/UiChip.vue +0 -137
  108. package/lib/components/counter/VtsCounter.vue +0 -147
  109. package/lib/components/legend/LegendGroup.vue +0 -44
  110. package/lib/components/legend/LegendItem.vue +0 -86
  111. package/lib/components/object-link/ObjectLink.vue +0 -87
  112. package/lib/components/state-hero/ComingSoonHero.vue +0 -13
  113. package/lib/components/state-hero/LoadingHero.vue +0 -15
  114. package/lib/components/state-hero/NoDataHero.vue +0 -11
  115. package/lib/components/state-hero/ObjectNotFoundHero.vue +0 -13
  116. package/lib/components/tree/TreeItemError.vue +0 -13
  117. package/lib/components/tree/TreeLoadingItem.vue +0 -60
  118. package/lib/components/user/UserLink.vue +0 -72
  119. package/lib/components/user/UserLogo.vue +0 -57
  120. package/lib/types/backup.type.ts +0 -11
  121. package/lib/types/size.type.ts +0 -1
  122. package/lib/types/task.type.ts +0 -13
  123. /package/lib/components/backdrop/{Backdrop.vue → VtsBackdrop.vue} +0 -0
  124. /package/lib/components/divider/{Divider.vue → VtsDivider.vue} +0 -0
@@ -0,0 +1,532 @@
1
+ <!-- v4 -->
2
+ <template>
3
+ <button :class="classNames" :disabled="busy || isDisabled || lockIcon" class="ui-button" type="button">
4
+ <VtsIcon :busy :icon="leftIcon" accent="current" class="icon" fixed-width />
5
+ <slot />
6
+ <VtsIcon v-if="lockIcon" :icon="faLock" accent="current" class="icon" fixed-width />
7
+ </button>
8
+ </template>
9
+
10
+ <script lang="ts" setup>
11
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
12
+ import { useContext } from '@core/composables/context.composable'
13
+ import { DisabledContext } from '@core/context'
14
+ import { toVariants } from '@core/utils/to-variants.util'
15
+ import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
16
+ import { faLock } from '@fortawesome/free-solid-svg-icons'
17
+ import { computed } from 'vue'
18
+
19
+ type ButtonVariant = 'primary' | 'secondary' | 'tertiary'
20
+ type ButtonAccent = 'info' | 'success' | 'warning' | 'danger'
21
+ type ButtonSize = 'small' | 'medium' | 'large'
22
+
23
+ const props = withDefaults(
24
+ defineProps<{
25
+ variant: ButtonVariant
26
+ accent: ButtonAccent
27
+ size: ButtonSize
28
+ busy?: boolean
29
+ disabled?: boolean
30
+ lockIcon?: boolean
31
+ leftIcon?: IconDefinition
32
+ }>(),
33
+ {
34
+ disabled: undefined,
35
+ }
36
+ )
37
+
38
+ defineSlots<{
39
+ default(): any
40
+ }>()
41
+
42
+ const isDisabled = useContext(DisabledContext, () => props.disabled)
43
+
44
+ const fontClasses = {
45
+ small: 'typo p3-medium',
46
+ medium: 'typo h6-medium',
47
+ large: 'typo h3-semi-bold',
48
+ }
49
+
50
+ const classNames = computed(() => [
51
+ fontClasses[props.size],
52
+ toVariants({
53
+ accent: props.accent,
54
+ variant: props.variant,
55
+ size: props.size,
56
+ busy: props.busy,
57
+ lock: props.lockIcon,
58
+ disabled: isDisabled.value,
59
+ }),
60
+ ])
61
+ </script>
62
+
63
+ <style lang="postcss" scoped>
64
+ /* IMPLEMENTATION */
65
+ .ui-button {
66
+ display: inline-flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ cursor: pointer;
70
+ vertical-align: middle;
71
+ gap: 0.75em;
72
+ border-width: 0.1rem;
73
+ outline: none;
74
+ border-style: solid;
75
+
76
+ &.lock {
77
+ cursor: default;
78
+ }
79
+
80
+ &:focus-visible {
81
+ outline: none;
82
+
83
+ &::before {
84
+ content: '';
85
+ position: absolute;
86
+ inset: -0.5rem;
87
+ border-radius: 0.4rem;
88
+ border-width: 0.2rem;
89
+ border-style: solid;
90
+ }
91
+ }
92
+
93
+ .icon {
94
+ font-size: 0.8em;
95
+ }
96
+
97
+ /* ACCENT + VARIANT */
98
+
99
+ &.accent--info {
100
+ &.variant--primary {
101
+ background-color: var(--color-info-item-base);
102
+ border-color: var(--color-info-item-base);
103
+ color: var(--color-info-txt-item);
104
+
105
+ &:hover {
106
+ background-color: var(--color-info-item-hover);
107
+ border-color: var(--color-info-item-hover);
108
+ color: var(--color-info-txt-item);
109
+ }
110
+
111
+ &:focus-visible::before {
112
+ border-color: var(--color-info-txt-base);
113
+ }
114
+
115
+ &:active {
116
+ background-color: var(--color-info-item-active);
117
+ border-color: var(--color-info-item-active);
118
+ color: var(--color-info-txt-item);
119
+ }
120
+
121
+ &:is(:disabled, .disabled) {
122
+ background-color: var(--color-info-item-disabled);
123
+ border-color: var(--color-info-item-disabled);
124
+ color: var(--color-neutral-txt-secondary);
125
+ }
126
+
127
+ &.busy {
128
+ background-color: var(--color-info-item-base);
129
+ border-color: var(--color-info-item-base);
130
+ color: var(--color-info-txt-item);
131
+ }
132
+ }
133
+
134
+ &.variant--secondary {
135
+ background-color: var(--color-neutral-background-primary);
136
+ border-color: var(--color-info-item-base);
137
+ color: var(--color-info-txt-base);
138
+
139
+ &:hover {
140
+ background-color: var(--color-neutral-background-primary);
141
+ border-color: var(--color-info-item-hover);
142
+ color: var(--color-info-txt-hover);
143
+ }
144
+
145
+ &:focus-visible::before {
146
+ border-color: var(--color-info-txt-base);
147
+ }
148
+
149
+ &:active {
150
+ background-color: var(--color-neutral-background-primary);
151
+ border-color: var(--color-info-item-active);
152
+ color: var(--color-info-txt-active);
153
+ }
154
+
155
+ &:is(:disabled, .disabled) {
156
+ background-color: var(--color-neutral-background-disabled);
157
+ border-color: var(--color-neutral-txt-secondary);
158
+ color: var(--color-neutral-txt-secondary);
159
+ }
160
+
161
+ &.busy {
162
+ background-color: var(--color-neutral-background-primary);
163
+ border-color: var(--color-info-item-base);
164
+ color: var(--color-info-txt-base);
165
+ }
166
+ }
167
+
168
+ &.variant--tertiary {
169
+ background-color: transparent;
170
+ border-color: transparent;
171
+ color: var(--color-info-txt-base);
172
+
173
+ &:hover {
174
+ background-color: var(--color-info-background-hover);
175
+ border-color: var(--color-info-background-hover);
176
+ color: var(--color-info-txt-hover);
177
+ }
178
+
179
+ &:focus-visible::before {
180
+ border-color: var(--color-info-txt-base);
181
+ }
182
+
183
+ &:active {
184
+ background-color: var(--color-info-background-active);
185
+ border-color: var(--color-info-background-active);
186
+ color: var(--color-info-txt-active);
187
+ }
188
+
189
+ &:is(:disabled, .disabled) {
190
+ background-color: transparent;
191
+ border-color: transparent;
192
+ color: var(--color-neutral-txt-secondary);
193
+ }
194
+
195
+ &.busy {
196
+ background-color: var(--color-info-background-selected);
197
+ border-color: var(--color-info-background-selected);
198
+ color: var(--color-info-txt-base);
199
+ }
200
+ }
201
+ }
202
+
203
+ &.accent--success {
204
+ &.variant--primary {
205
+ background-color: var(--color-success-item-base);
206
+ border-color: var(--color-success-item-base);
207
+ color: var(--color-success-txt-item);
208
+
209
+ &:hover {
210
+ background-color: var(--color-success-item-hover);
211
+ border-color: var(--color-success-item-hover);
212
+ color: var(--color-success-txt-item);
213
+ }
214
+
215
+ &:focus-visible::before {
216
+ border-color: var(--color-success-txt-base);
217
+ }
218
+
219
+ &:active {
220
+ background-color: var(--color-success-item-active);
221
+ border-color: var(--color-success-item-active);
222
+ color: var(--color-success-txt-item);
223
+ }
224
+
225
+ &:is(:disabled, .disabled) {
226
+ background-color: var(--color-success-item-disabled);
227
+ border-color: var(--color-success-item-disabled);
228
+ color: var(--color-neutral-txt-secondary);
229
+ }
230
+
231
+ &.busy {
232
+ background-color: var(--color-success-item-base);
233
+ border-color: var(--color-success-item-base);
234
+ color: var(--color-success-txt-item);
235
+ }
236
+ }
237
+
238
+ &.variant--secondary {
239
+ background-color: var(--color-neutral-background-primary);
240
+ border-color: var(--color-success-txt-base);
241
+ color: var(--color-success-txt-base);
242
+
243
+ &:hover {
244
+ background-color: var(--color-neutral-background-primary);
245
+ border-color: var(--color-success-txt-hover);
246
+ color: var(--color-success-txt-hover);
247
+ }
248
+
249
+ &:focus-visible::before {
250
+ border-color: var(--color-success-txt-base);
251
+ }
252
+
253
+ &:active {
254
+ background-color: var(--color-neutral-background-primary);
255
+ border-color: var(--color-success-txt-active);
256
+ color: var(--color-success-txt-active);
257
+ }
258
+
259
+ &:is(:disabled, .disabled) {
260
+ background-color: var(--color-neutral-background-disabled);
261
+ border-color: var(--color-neutral-txt-secondary);
262
+ color: var(--color-neutral-txt-secondary);
263
+ }
264
+
265
+ &.busy {
266
+ background-color: var(--color-neutral-background-primary);
267
+ border-color: var(--color-success-txt-base);
268
+ color: var(--color-success-txt-base);
269
+ }
270
+ }
271
+
272
+ &.variant--tertiary {
273
+ background-color: transparent;
274
+ border-color: transparent;
275
+ color: var(--color-success-txt-base);
276
+
277
+ &:hover {
278
+ background-color: var(--color-success-background-hover);
279
+ border-color: var(--color-success-background-hover);
280
+ color: var(--color-success-txt-hover);
281
+ }
282
+
283
+ &:focus-visible::before {
284
+ border-color: var(--color-success-txt-base);
285
+ }
286
+
287
+ &:active {
288
+ background-color: var(--color-success-background-active);
289
+ border-color: var(--color-success-background-active);
290
+ color: var(--color-success-txt-active);
291
+ }
292
+
293
+ &:is(:disabled, .disabled) {
294
+ background-color: transparent;
295
+ border-color: transparent;
296
+ color: var(--color-neutral-txt-secondary);
297
+ }
298
+
299
+ &.busy {
300
+ background-color: var(--color-success-background-selected);
301
+ border-color: var(--color-success-background-selected);
302
+ color: var(--color-success-txt-base);
303
+ }
304
+ }
305
+ }
306
+
307
+ &.accent--warning {
308
+ &.variant--primary {
309
+ background-color: var(--color-warning-item-base);
310
+ border-color: var(--color-warning-item-base);
311
+ color: var(--color-warning-txt-item);
312
+
313
+ &:hover {
314
+ background-color: var(--color-warning-item-hover);
315
+ border-color: var(--color-warning-item-hover);
316
+ color: var(--color-warning-txt-item);
317
+ }
318
+
319
+ &:focus-visible::before {
320
+ border-color: var(--color-warning-txt-base);
321
+ }
322
+
323
+ &:active {
324
+ background-color: var(--color-warning-item-active);
325
+ border-color: var(--color-warning-item-active);
326
+ color: var(--color-warning-txt-item);
327
+ }
328
+
329
+ &:is(:disabled, .disabled) {
330
+ background-color: var(--color-warning-item-disabled);
331
+ border-color: var(--color-warning-item-disabled);
332
+ color: var(--color-neutral-txt-secondary);
333
+ }
334
+
335
+ &.busy {
336
+ background-color: var(--color-warning-item-base);
337
+ border-color: var(--color-warning-item-base);
338
+ color: var(--color-warning-txt-item);
339
+ }
340
+ }
341
+
342
+ &.variant--secondary {
343
+ background-color: var(--color-neutral-background-primary);
344
+ border-color: var(--color-warning-txt-base);
345
+ color: var(--color-warning-txt-base);
346
+
347
+ &:hover {
348
+ background-color: var(--color-neutral-background-primary);
349
+ border-color: var(--color-warning-txt-hover);
350
+ color: var(--color-warning-txt-hover);
351
+ }
352
+
353
+ &:focus-visible::before {
354
+ border-color: var(--color-warning-txt-base);
355
+ }
356
+
357
+ &:active {
358
+ background-color: var(--color-neutral-background-primary);
359
+ border-color: var(--color-warning-txt-active);
360
+ color: var(--color-warning-txt-active);
361
+ }
362
+
363
+ &:is(:disabled, .disabled) {
364
+ background-color: var(--color-neutral-background-disabled);
365
+ border-color: var(--color-neutral-txt-secondary);
366
+ color: var(--color-neutral-txt-secondary);
367
+ }
368
+
369
+ &.busy {
370
+ background-color: var(--color-neutral-background-primary);
371
+ border-color: var(--color-warning-txt-base);
372
+ color: var(--color-warning-txt-base);
373
+ }
374
+ }
375
+
376
+ &.variant--tertiary {
377
+ background-color: transparent;
378
+ border-color: transparent;
379
+ color: var(--color-warning-txt-base);
380
+
381
+ &:hover {
382
+ background-color: var(--color-warning-background-hover);
383
+ border-color: var(--color-warning-background-hover);
384
+ color: var(--color-warning-txt-hover);
385
+ }
386
+
387
+ &:focus-visible::before {
388
+ border-color: var(--color-warning-txt-base);
389
+ }
390
+
391
+ &:active {
392
+ background-color: var(--color-warning-background-active);
393
+ border-color: var(--color-warning-background-active);
394
+ color: var(--color-warning-txt-active);
395
+ }
396
+
397
+ &:is(:disabled, .disabled) {
398
+ background-color: transparent;
399
+ border-color: transparent;
400
+ color: var(--color-neutral-txt-secondary);
401
+ }
402
+
403
+ &.busy {
404
+ background-color: var(--color-warning-background-selected);
405
+ border-color: var(--color-warning-background-selected);
406
+ color: var(--color-warning-txt-base);
407
+ }
408
+ }
409
+ }
410
+
411
+ &.accent--danger {
412
+ &.variant--primary {
413
+ background-color: var(--color-danger-item-base);
414
+ border-color: var(--color-danger-item-base);
415
+ color: var(--color-danger-txt-item);
416
+
417
+ &:hover {
418
+ background-color: var(--color-danger-item-hover);
419
+ border-color: var(--color-danger-item-hover);
420
+ color: var(--color-danger-txt-item);
421
+ }
422
+
423
+ &:focus-visible::before {
424
+ border-color: var(--color-danger-txt-base);
425
+ }
426
+
427
+ &:active {
428
+ background-color: var(--color-danger-item-active);
429
+ border-color: var(--color-danger-item-active);
430
+ color: var(--color-danger-txt-item);
431
+ }
432
+
433
+ &:is(:disabled, .disabled) {
434
+ background-color: var(--color-danger-item-disabled);
435
+ border-color: var(--color-danger-item-disabled);
436
+ color: var(--color-neutral-txt-secondary);
437
+ }
438
+
439
+ &.busy {
440
+ background-color: var(--color-danger-item-base);
441
+ border-color: var(--color-danger-item-base);
442
+ color: var(--color-danger-txt-item);
443
+ }
444
+ }
445
+
446
+ &.variant--secondary {
447
+ background-color: var(--color-neutral-background-primary);
448
+ border-color: var(--color-danger-txt-base);
449
+ color: var(--color-danger-txt-base);
450
+
451
+ &:hover {
452
+ background-color: var(--color-neutral-background-primary);
453
+ border-color: var(--color-danger-txt-hover);
454
+ color: var(--color-danger-txt-hover);
455
+ }
456
+
457
+ &:focus-visible::before {
458
+ border-color: var(--color-danger-txt-base);
459
+ }
460
+
461
+ &:active {
462
+ background-color: var(--color-neutral-background-primary);
463
+ border-color: var(--color-danger-txt-active);
464
+ color: var(--color-danger-txt-active);
465
+ }
466
+
467
+ &:is(:disabled, .disabled) {
468
+ background-color: var(--color-neutral-background-disabled);
469
+ border-color: var(--color-neutral-txt-secondary);
470
+ color: var(--color-neutral-txt-secondary);
471
+ }
472
+
473
+ &.busy {
474
+ background-color: var(--color-neutral-background-primary);
475
+ border-color: var(--color-danger-txt-base);
476
+ color: var(--color-danger-txt-base);
477
+ }
478
+ }
479
+
480
+ &.variant--tertiary {
481
+ background-color: transparent;
482
+ border-color: transparent;
483
+ color: var(--color-danger-txt-base);
484
+
485
+ &:hover {
486
+ background-color: var(--color-danger-background-hover);
487
+ border-color: var(--color-danger-background-hover);
488
+ color: var(--color-danger-txt-hover);
489
+ }
490
+
491
+ &:focus-visible::before {
492
+ border-color: var(--color-danger-txt-base);
493
+ }
494
+
495
+ &:active {
496
+ background-color: var(--color-danger-background-active);
497
+ border-color: var(--color-danger-background-active);
498
+ color: var(--color-danger-txt-active);
499
+ }
500
+
501
+ &:is(:disabled, .disabled) {
502
+ background-color: transparent;
503
+ border-color: transparent;
504
+ color: var(--color-neutral-txt-secondary);
505
+ }
506
+
507
+ &.busy {
508
+ background-color: var(--color-danger-background-selected);
509
+ border-color: var(--color-danger-background-selected);
510
+ color: var(--color-danger-txt-base);
511
+ }
512
+ }
513
+ }
514
+
515
+ /* SIZE */
516
+
517
+ &.size--small {
518
+ padding: 0.4rem 0.8rem;
519
+ border-radius: 0.2rem;
520
+ }
521
+
522
+ &.size--medium {
523
+ padding: 0.8rem 1.6rem;
524
+ border-radius: 0.4rem;
525
+ }
526
+
527
+ &.size--large {
528
+ padding: 1.6rem 2.4rem;
529
+ border-radius: 0.8rem;
530
+ }
531
+ }
532
+ </style>