@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
@@ -1,220 +0,0 @@
1
- <!-- v1.0 -->
2
- <template>
3
- <button :class="[color, size, { disabled, active }]" :disabled class="button-icon" type="button">
4
- <VtsIcon :icon accent="current" />
5
- <span v-if="dot" class="dot" />
6
- </button>
7
- </template>
8
-
9
- <script lang="ts" setup>
10
- import VtsIcon from '@core/components/icon/VtsIcon.vue'
11
- import type { Color } from '@core/types/color.type'
12
- import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
13
- import { computed } from 'vue'
14
-
15
- const props = withDefaults(
16
- defineProps<{
17
- icon: IconDefinition
18
- size?: 'small' | 'medium' | 'large'
19
- color?: Color
20
- disabled?: boolean
21
- active?: boolean
22
- dot?: boolean
23
- targetScale?: number | { x: number; y: number }
24
- }>(),
25
- { color: 'normal', size: 'medium', targetScale: 1 }
26
- )
27
-
28
- const cssTargetScale = computed(() => {
29
- if (typeof props.targetScale === 'number') {
30
- return `scale(${props.targetScale})`
31
- }
32
-
33
- return `scale(${props.targetScale.x}, ${props.targetScale.y})`
34
- })
35
- </script>
36
-
37
- <style lang="postcss" scoped>
38
- /* COLOR VARIANTS */
39
- .button-icon {
40
- &.normal {
41
- & {
42
- --color: var(--color-normal-txt-base);
43
- --background-color: transparent;
44
- --dot-color: var(--color-danger-txt-base);
45
- }
46
-
47
- &:is(.active, .selected) {
48
- --color: var(--color-normal-txt-base);
49
- --background-color: var(--color-normal-background-selected);
50
- }
51
-
52
- &:is(:hover, .hover, :focus-visible) {
53
- --color: var(--color-normal-txt-hover);
54
- --background-color: var(--color-normal-background-hover);
55
- }
56
-
57
- &:is(:active, .pressed) {
58
- --color: var(--color-normal-txt-active);
59
- --background-color: var(--color-normal-background-active);
60
- }
61
-
62
- &:is(:disabled, .disabled) {
63
- --color: var(--color-neutral-txt-secondary);
64
- --background-color: transparent;
65
- }
66
- }
67
-
68
- &.success {
69
- & {
70
- --color: var(--color-success-txt-base);
71
- --background-color: transparent;
72
- --dot-color: var(--color-danger-txt-base);
73
- }
74
-
75
- &:is(.active, .selected) {
76
- --color: var(--color-success-txt-base);
77
- --background-color: var(--color-success-background-selected);
78
- }
79
-
80
- &:is(:hover, .hover, :focus-visible) {
81
- --color: var(--color-success-txt-hover);
82
- --background-color: var(--color-success-background-hover);
83
- }
84
-
85
- &:is(:active, .pressed) {
86
- --color: var(--color-success-txt-active);
87
- --background-color: var(--color-success-background-active);
88
- }
89
-
90
- &:is(:disabled, .disabled) {
91
- --color: var(--color-neutral-txt-secondary);
92
- --background-color: transparent;
93
- }
94
- }
95
-
96
- &.warning {
97
- & {
98
- --color: var(--color-warning-txt-base);
99
- --background-color: transparent;
100
- --dot-color: var(--color-danger-txt-base);
101
- }
102
-
103
- &:is(.active, .selected) {
104
- --color: var(--color-warning-txt-base);
105
- --background-color: var(--color-warning-background-selected);
106
- }
107
-
108
- &:is(:hover, .hover, :focus-visible) {
109
- --color: var(--color-warning-txt-hover);
110
- --background-color: var(--color-warning-background-hover);
111
- }
112
-
113
- &:is(:active, .pressed) {
114
- --color: var(--color-warning-txt-active);
115
- --background-color: var(--color-warning-background-active);
116
- }
117
-
118
- &:is(:disabled, .disabled) {
119
- --color: var(--color-neutral-txt-secondary);
120
- --background-color: transparent;
121
- }
122
- }
123
-
124
- &:is(.danger, .error) {
125
- & {
126
- --color: var(--color-danger-txt-base);
127
- --background-color: transparent;
128
- --dot-color: var(--color-warning-txt-base);
129
- }
130
-
131
- &:is(.active, .selected) {
132
- --color: var(--color-danger-txt-base);
133
- --background-color: var(--color-danger-background-selected);
134
- }
135
-
136
- &:is(:hover, .hover, :focus-visible) {
137
- --color: var(--color-danger-txt-hover);
138
- --background-color: var(--color-danger-background-hover);
139
- }
140
-
141
- &:is(:active, .pressed) {
142
- --color: var(--color-danger-txt-active);
143
- --background-color: var(--color-danger-background-active);
144
- }
145
-
146
- &:is(:disabled, .disabled) {
147
- --color: var(--color-neutral-txt-secondary);
148
- --background-color: transparent;
149
- }
150
- }
151
- }
152
-
153
- /* SIZE VARIANTS */
154
- .button-icon {
155
- &.small {
156
- --size: 1.6rem;
157
- --font-size: 1.2rem;
158
- --dot-size: 0.4rem;
159
- --dot-offset: 0.2rem;
160
- }
161
-
162
- &.medium {
163
- --size: 2.4rem;
164
- --font-size: 1.6rem;
165
- --dot-size: 0.5rem;
166
- --dot-offset: 0.4rem;
167
- }
168
-
169
- &.large {
170
- --size: 4rem;
171
- --font-size: 2.4rem;
172
- --dot-size: 0.8rem;
173
- --dot-offset: 0.8rem;
174
- }
175
- }
176
-
177
- /* IMPLEMENTATION */
178
- .button-icon {
179
- display: inline-flex;
180
- justify-content: center;
181
- align-items: center;
182
- border: none;
183
- padding: 0;
184
- border-radius: 0.2rem;
185
- width: var(--size);
186
- height: var(--size);
187
- font-size: var(--font-size);
188
- color: var(--color);
189
- background-color: var(--background-color);
190
- position: relative;
191
- cursor: pointer;
192
- outline: none;
193
-
194
- &:is(:disabled, .disabled) {
195
- cursor: not-allowed;
196
- }
197
-
198
- .dot {
199
- position: absolute;
200
- display: block;
201
- width: var(--dot-size);
202
- height: var(--dot-size);
203
- border-radius: 50%;
204
- background-color: var(--dot-color);
205
- top: var(--dot-offset);
206
- right: var(--dot-offset);
207
- }
208
- }
209
-
210
- /*
211
- * Increase the size of the clickable area,
212
- * without changing the padding of the ButtonIcon component
213
- */
214
- .button-icon::after {
215
- content: '';
216
- position: absolute;
217
- inset: 0;
218
- transform: v-bind(cssTargetScale);
219
- }
220
- </style>
@@ -1,470 +0,0 @@
1
- <!-- v1.0 -->
2
- <template>
3
- <button :class="className" :disabled="busy || isDisabled" class="ui-button" type="button">
4
- <VtsIcon :busy :icon="leftIcon" accent="current" class="icon" fixed-width />
5
- <slot />
6
- <VtsIcon :icon="rightIcon" 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 type { ButtonLevel, ButtonSize } from '@core/types/button.type'
15
- import type { Color } from '@core/types/color.type'
16
- import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
17
- import { computed } from 'vue'
18
-
19
- const props = withDefaults(
20
- defineProps<{
21
- level: ButtonLevel
22
- color: Color
23
- size: ButtonSize
24
- busy?: boolean
25
- disabled?: boolean
26
- leftIcon?: IconDefinition
27
- rightIcon?: IconDefinition
28
- }>(),
29
- {
30
- disabled: undefined,
31
- }
32
- )
33
-
34
- const isDisabled = useContext(DisabledContext, () => props.disabled)
35
-
36
- const fontClasses = {
37
- small: 'typo p3-medium',
38
- medium: 'typo h6-medium',
39
- large: 'typo h3-semi-bold',
40
- }
41
-
42
- const className = computed(() => {
43
- return [
44
- props.color,
45
- props.level,
46
- props.size,
47
- fontClasses[props.size],
48
- {
49
- busy: props.busy,
50
- disabled: isDisabled.value,
51
- },
52
- ]
53
- })
54
- </script>
55
-
56
- <style lang="postcss" scoped>
57
- /* COLOR VARIANTS */
58
- .ui-button {
59
- &.primary {
60
- &.normal {
61
- --background-color: var(--color-normal-item-base);
62
- --border-color: var(--color-normal-item-base);
63
- --color: var(--color-normal-txt-item);
64
-
65
- &:is(:hover, .hover, :focus-visible) {
66
- --background-color: var(--color-normal-item-hover);
67
- --border-color: var(--color-normal-item-hover);
68
- --color: var(--color-normal-txt-item);
69
- }
70
-
71
- &:is(:active, .pressed) {
72
- --background-color: var(--color-normal-item-active);
73
- --border-color: var(--color-normal-item-active);
74
- --color: var(--color-normal-txt-item);
75
- }
76
-
77
- &:is(:disabled, .disabled) {
78
- --background-color: var(--color-normal-item-disabled);
79
- --border-color: var(--color-normal-item-disabled);
80
- --color: var(--color-neutral-txt-secondary);
81
- }
82
-
83
- &.busy {
84
- --background-color: var(--color-normal-item-base);
85
- --border-color: var(--color-normal-item-base);
86
- --color: var(--color-normal-txt-item);
87
- }
88
- }
89
-
90
- &.success {
91
- --background-color: var(--color-success-item-base);
92
- --border-color: var(--color-success-item-base);
93
- --color: var(--color-success-txt-item);
94
-
95
- &:is(:hover, .hover, :focus-visible) {
96
- --background-color: var(--color-success-item-hover);
97
- --border-color: var(--color-success-item-hover);
98
- --color: var(--color-success-txt-item);
99
- }
100
-
101
- &:is(:active, .pressed) {
102
- --background-color: var(--color-success-item-active);
103
- --border-color: var(--color-success-item-active);
104
- --color: var(--color-success-txt-item);
105
- }
106
-
107
- &:is(:disabled, .disabled) {
108
- --background-color: var(--color-success-item-disabled);
109
- --border-color: var(--color-success-item-disabled);
110
- --color: var(--color-neutral-txt-secondary);
111
- }
112
-
113
- &.busy {
114
- --background-color: var(--color-success-item-base);
115
- --border-color: var(--color-success-item-base);
116
- --color: var(--color-success-txt-item);
117
- }
118
- }
119
-
120
- &.warning {
121
- --background-color: var(--color-warning-item-base);
122
- --border-color: var(--color-warning-item-base);
123
- --color: var(--color-warning-txt-item);
124
-
125
- &:is(:hover, .hover, :focus-visible) {
126
- --background-color: var(--color-warning-item-hover);
127
- --border-color: var(--color-warning-item-hover);
128
- --color: var(--color-warning-txt-item);
129
- }
130
-
131
- &:is(:active, .pressed) {
132
- --background-color: var(--color-warning-item-active);
133
- --border-color: var(--color-warning-item-active);
134
- --color: var(--color-warning-txt-item);
135
- }
136
-
137
- &:is(:disabled, .disabled) {
138
- --background-color: var(--color-warning-item-disabled);
139
- --border-color: var(--color-warning-item-disabled);
140
- --color: var(--color-neutral-txt-secondary);
141
- }
142
-
143
- &.busy {
144
- --background-color: var(--color-warning-item-base);
145
- --border-color: var(--color-warning-item-base);
146
- --color: var(--color-warning-txt-item);
147
- }
148
- }
149
-
150
- &.danger {
151
- --background-color: var(--color-danger-item-base);
152
- --border-color: var(--color-danger-item-base);
153
- --color: var(--color-danger-txt-item);
154
-
155
- &:is(:hover, .hover, :focus-visible) {
156
- --background-color: var(--color-danger-item-hover);
157
- --border-color: var(--color-danger-item-hover);
158
- --color: var(--color-danger-txt-item);
159
- }
160
-
161
- &:is(:active, .pressed) {
162
- --background-color: var(--color-danger-item-active);
163
- --border-color: var(--color-danger-item-active);
164
- --color: var(--color-danger-txt-item);
165
- }
166
-
167
- &:is(:disabled, .disabled) {
168
- --background-color: var(--color-danger-item-disabled);
169
- --border-color: var(--color-danger-item-disabled);
170
- --color: var(--color-neutral-txt-secondary);
171
- }
172
-
173
- &.busy {
174
- --background-color: var(--color-danger-item-base);
175
- --border-color: var(--color-danger-item-base);
176
- --color: var(--color-danger-txt-item);
177
- }
178
- }
179
- }
180
-
181
- &.secondary {
182
- &.normal {
183
- --background-color: var(--color-neutral-background-primary);
184
- --border-color: var(--color-normal-item-base);
185
- --color: var(--color-normal-txt-base);
186
-
187
- &:is(:hover, .hover, :focus-visible) {
188
- --background-color: var(--color-neutral-background-primary);
189
- --border-color: var(--color-normal-item-hover);
190
- --color: var(--color-normal-txt-hover);
191
- }
192
-
193
- &:is(:active, .pressed) {
194
- --background-color: var(--color-neutral-background-primary);
195
- --border-color: var(--color-normal-item-active);
196
- --color: var(--color-normal-txt-active);
197
- }
198
-
199
- &:is(:disabled, .disabled) {
200
- --background-color: var(--color-neutral-background-disabled);
201
- --border-color: var(--color-neutral-txt-secondary);
202
- --color: var(--color-neutral-txt-secondary);
203
- }
204
-
205
- &.busy {
206
- --background-color: var(--color-neutral-background-primary);
207
- --border-color: var(--color-normal-item-base);
208
- --color: var(--color-normal-txt-base);
209
- }
210
- }
211
-
212
- &.success {
213
- --background-color: var(--color-neutral-background-primary);
214
- --border-color: var(--color-success-txt-base);
215
- --color: var(--color-success-txt-base);
216
-
217
- &:is(:hover, .hover, :focus-visible) {
218
- --background-color: var(--color-neutral-background-primary);
219
- --border-color: var(--color-success-txt-hover);
220
- --color: var(--color-success-txt-hover);
221
- }
222
-
223
- &:is(:active, .pressed) {
224
- --background-color: var(--color-neutral-background-primary);
225
- --border-color: var(--color-success-txt-active);
226
- --color: var(--color-success-txt-active);
227
- }
228
-
229
- &:is(:disabled, .disabled) {
230
- --background-color: var(--color-neutral-background-disabled);
231
- --border-color: var(--color-neutral-txt-secondary);
232
- --color: var(--color-neutral-txt-secondary);
233
- }
234
-
235
- &.busy {
236
- --background-color: var(--color-neutral-background-primary);
237
- --border-color: var(--color-success-txt-base);
238
- --color: var(--color-success-txt-base);
239
- }
240
- }
241
-
242
- &.warning {
243
- --background-color: var(--color-neutral-background-primary);
244
- --border-color: var(--color-warning-txt-base);
245
- --color: var(--color-warning-txt-base);
246
-
247
- &:is(:hover, .hover, :focus-visible) {
248
- --background-color: var(--color-neutral-background-primary);
249
- --border-color: var(--color-warning-txt-hover);
250
- --color: var(--color-warning-txt-hover);
251
- }
252
-
253
- &:is(:active, .pressed) {
254
- --background-color: var(--color-neutral-background-primary);
255
- --border-color: var(--color-warning-txt-active);
256
- --color: var(--color-warning-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-warning-txt-base);
268
- --color: var(--color-warning-txt-base);
269
- }
270
- }
271
-
272
- &.danger {
273
- --background-color: var(--color-neutral-background-primary);
274
- --border-color: var(--color-danger-txt-base);
275
- --color: var(--color-danger-txt-base);
276
-
277
- &:is(:hover, .hover, :focus-visible) {
278
- --background-color: var(--color-neutral-background-primary);
279
- --border-color: var(--color-danger-txt-hover);
280
- --color: var(--color-danger-txt-hover);
281
- }
282
-
283
- &:is(:active, .pressed) {
284
- --background-color: var(--color-neutral-background-primary);
285
- --border-color: var(--color-danger-txt-active);
286
- --color: var(--color-danger-txt-active);
287
- }
288
-
289
- &:is(:disabled, .disabled) {
290
- --background-color: var(--color-neutral-background-disabled);
291
- --border-color: var(--color-neutral-txt-secondary);
292
- --color: var(--color-neutral-txt-secondary);
293
- }
294
-
295
- &.busy {
296
- --background-color: var(--color-neutral-background-primary);
297
- --border-color: var(--color-danger-txt-base);
298
- --color: var(--color-danger-txt-base);
299
- }
300
- }
301
- }
302
-
303
- &.tertiary {
304
- &.normal {
305
- --background-color: transparent;
306
- --border-color: transparent;
307
- --color: var(--color-normal-txt-base);
308
-
309
- &:is(:hover, .hover, :focus-visible) {
310
- --background-color: var(--color-normal-background-hover);
311
- --border-color: var(--color-normal-background-hover);
312
- --color: var(--color-normal-txt-hover);
313
- }
314
-
315
- &:is(:active, .pressed) {
316
- --background-color: var(--color-normal-background-active);
317
- --border-color: var(--color-normal-background-active);
318
- --color: var(--color-normal-txt-active);
319
- }
320
-
321
- &:is(:disabled, .disabled) {
322
- --background-color: transparent;
323
- --border-color: transparent;
324
- --color: var(--color-neutral-txt-secondary);
325
- }
326
-
327
- &.busy {
328
- --background-color: var(--color-normal-background-selected);
329
- --border-color: var(--color-normal-background-selected);
330
- --color: var(--color-normal-txt-base);
331
- }
332
- }
333
-
334
- &.success {
335
- --background-color: transparent;
336
- --border-color: transparent;
337
- --color: var(--color-success-txt-base);
338
-
339
- &:is(:hover, .hover, :focus-visible) {
340
- --background-color: var(--color-success-background-hover);
341
- --border-color: var(--color-success-background-hover);
342
- --color: var(--color-success-txt-hover);
343
- }
344
-
345
- &:is(:active, .pressed) {
346
- --background-color: var(--color-success-background-active);
347
- --border-color: var(--color-success-background-active);
348
- --color: var(--color-success-txt-active);
349
- }
350
-
351
- &:is(:disabled, .disabled) {
352
- --background-color: transparent;
353
- --border-color: transparent;
354
- --color: var(--color-neutral-txt-secondary);
355
- }
356
-
357
- &.busy {
358
- --background-color: var(--color-success-background-selected);
359
- --border-color: var(--color-success-background-selected);
360
- --color: var(--color-success-txt-base);
361
- }
362
- }
363
-
364
- &.warning {
365
- --background-color: transparent;
366
- --border-color: transparent;
367
- --color: var(--color-warning-txt-base);
368
-
369
- &:is(:hover, .hover, :focus-visible) {
370
- --background-color: var(--color-warning-background-hover);
371
- --border-color: var(--color-warning-background-hover);
372
- --color: var(--color-warning-txt-hover);
373
- }
374
-
375
- &:is(:active, .pressed) {
376
- --background-color: var(--color-warning-background-active);
377
- --border-color: var(--color-warning-background-active);
378
- --color: var(--color-warning-txt-active);
379
- }
380
-
381
- &:is(:disabled, .disabled) {
382
- --background-color: transparent;
383
- --border-color: transparent;
384
- --color: var(--color-neutral-txt-secondary);
385
- }
386
-
387
- &.busy {
388
- --background-color: var(--color-warning-background-selected);
389
- --border-color: var(--color-warning-background-selected);
390
- --color: var(--color-warning-txt-base);
391
- }
392
- }
393
-
394
- &.danger {
395
- --background-color: transparent;
396
- --border-color: transparent;
397
- --color: var(--color-danger-txt-base);
398
-
399
- &:is(:hover, .hover, :focus-visible) {
400
- --background-color: var(--color-danger-background-hover);
401
- --border-color: var(--color-danger-background-hover);
402
- --color: var(--color-danger-txt-hover);
403
- }
404
-
405
- &:is(:active, .pressed) {
406
- --background-color: var(--color-danger-background-active);
407
- --border-color: var(--color-danger-background-active);
408
- --color: var(--color-danger-txt-active);
409
- }
410
-
411
- &:is(:disabled, .disabled) {
412
- --background-color: transparent;
413
- --border-color: transparent;
414
- --color: var(--color-neutral-txt-secondary);
415
- }
416
-
417
- &.busy {
418
- --background-color: var(--color-danger-background-selected);
419
- --border-color: var(--color-danger-background-selected);
420
- --color: var(--color-danger-txt-base);
421
- }
422
- }
423
- }
424
- }
425
-
426
- /* SIZE VARIANTS */
427
- .ui-button {
428
- &.small {
429
- --padding: 0.4rem 0.8rem;
430
- --border-radius: 0.2rem;
431
- }
432
-
433
- &.medium {
434
- --padding: 0.8rem 1.6rem;
435
- --border-radius: 0.4rem;
436
- }
437
-
438
- &.large {
439
- --padding: 1.6rem 2.4rem;
440
- --border-radius: 0.8rem;
441
- }
442
- }
443
-
444
- /* IMPLEMENTATION */
445
- .ui-button {
446
- display: inline-flex;
447
- align-items: center;
448
- justify-content: center;
449
- cursor: pointer;
450
- vertical-align: middle;
451
- gap: 0.75em;
452
- border-width: 0.1rem;
453
- outline: none;
454
- border-color: var(--border-color);
455
- border-radius: var(--border-radius);
456
- border-style: solid;
457
- color: var(--color);
458
- background-color: var(--background-color);
459
- padding: var(--padding);
460
-
461
- &.busy,
462
- &.disabled {
463
- cursor: not-allowed;
464
- }
465
- }
466
-
467
- .icon {
468
- font-size: 0.8em;
469
- }
470
- </style>
@@ -1,24 +0,0 @@
1
- <!-- v1.0 -->
2
- <template>
3
- <div class="card-subtitle">
4
- <span class="typo h7-semi-bold"><slot /></span>
5
- <span v-if="$slots.info" class="typo p3-medium"><slot name="info" /></span>
6
- </div>
7
- </template>
8
-
9
- <script setup lang="ts">
10
- defineSlots<{
11
- default: () => void
12
- info: () => void
13
- }>()
14
- </script>
15
-
16
- <style lang="postcss" scoped>
17
- .card-subtitle {
18
- color: var(--color-normal-txt-base);
19
- border-bottom: 0.1rem solid var(--color-normal-txt-base);
20
- display: flex;
21
- justify-content: space-between;
22
- gap: 0.8rem;
23
- }
24
- </style>