@xen-orchestra/web-core 0.1.1 → 0.2.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 (82) hide show
  1. package/lib/assets/css/_colors.pcss +148 -116
  2. package/lib/assets/css/_context.pcss +44 -44
  3. package/lib/assets/css/base.pcss +9 -8
  4. package/lib/assets/no-data.svg +67 -0
  5. package/lib/components/CardNumbers.vue +4 -4
  6. package/lib/components/LegendTitle.vue +3 -3
  7. package/lib/components/PowerStateIcon.vue +6 -6
  8. package/lib/components/UiCard.vue +2 -2
  9. package/lib/components/UiTag.vue +39 -31
  10. package/lib/components/backup-item/BackupItem.vue +5 -2
  11. package/lib/components/backup-state/BackupState.vue +4 -5
  12. package/lib/components/button/ButtonIcon.vue +40 -40
  13. package/lib/components/button/UiButton.vue +356 -93
  14. package/lib/components/card/CardSubtitle.vue +2 -2
  15. package/lib/components/card/CardTitle.vue +9 -4
  16. package/lib/components/cell-object/CellObject.vue +4 -4
  17. package/lib/components/cell-text/CellText.vue +3 -3
  18. package/lib/components/chip/ChipIcon.vue +6 -5
  19. package/lib/components/chip/UiChip.vue +20 -20
  20. package/lib/components/counter/VtsCounter.vue +147 -0
  21. package/lib/components/divider/Divider.vue +2 -2
  22. package/lib/components/donut-chart/DonutChart.vue +9 -9
  23. package/lib/components/dropdown/DropdownItem.vue +53 -73
  24. package/lib/components/dropdown/DropdownList.vue +1 -1
  25. package/lib/components/dropdown/DropdownTitle.vue +6 -6
  26. package/lib/components/head-bar/HeadBar.vue +6 -6
  27. package/lib/components/icon/ComplexIcon.vue +1 -1
  28. package/lib/components/icon/ObjectIcon.vue +19 -19
  29. package/lib/components/icon/VtsIcon.vue +96 -0
  30. package/lib/components/info/VtsInfo.vue +55 -0
  31. package/lib/components/input/UiInput.vue +22 -16
  32. package/lib/components/layout/LayoutSidebar.vue +3 -3
  33. package/lib/components/legend/LegendItem.vue +11 -11
  34. package/lib/components/menu/MenuItem.vue +4 -4
  35. package/lib/components/menu/MenuList.vue +6 -6
  36. package/lib/components/menu/MenuSeparator.vue +2 -2
  37. package/lib/components/menu/MenuTrigger.vue +6 -6
  38. package/lib/components/object-link/ObjectLink.vue +12 -12
  39. package/lib/components/query-search-bar/QuerySearchBar.vue +10 -3
  40. package/lib/components/stacked-bar/StackedBar.vue +1 -1
  41. package/lib/components/stacked-bar/StackedBarSegment.vue +6 -5
  42. package/lib/components/state-hero/NoDataHero.vue +11 -0
  43. package/lib/components/state-hero/StateHero.vue +6 -3
  44. package/lib/components/tab/TabItem.vue +11 -11
  45. package/lib/components/tab/TabList.vue +2 -2
  46. package/lib/components/table/ColumnTitle.vue +19 -16
  47. package/lib/components/table/UiTable.vue +5 -5
  48. package/lib/components/task/QuickTaskItem.vue +6 -6
  49. package/lib/components/task/QuickTaskList.vue +1 -1
  50. package/lib/components/task/QuickTaskPanel.vue +1 -1
  51. package/lib/components/task/QuickTaskTabBar.vue +22 -4
  52. package/lib/components/tooltip/TooltipItem.vue +15 -9
  53. package/lib/components/tree/TreeItemError.vue +1 -1
  54. package/lib/components/tree/TreeItemLabel.vue +12 -12
  55. package/lib/components/tree/TreeLine.vue +2 -2
  56. package/lib/components/tree/TreeLoadingItem.vue +4 -8
  57. package/lib/components/user/UserLink.vue +8 -8
  58. package/lib/components/user/UserLogo.vue +2 -2
  59. package/lib/composables/hide-route-query.composable.ts +10 -0
  60. package/lib/composables/route-query/actions/handle-delete.ts +9 -6
  61. package/lib/composables/route-query/actions/handle-set.ts +6 -4
  62. package/lib/composables/route-query/types.ts +10 -1
  63. package/lib/composables/sort-route-query.composable.ts +18 -0
  64. package/lib/composables/table/create-base-definition.ts +20 -0
  65. package/lib/composables/table/create-define-column.ts +26 -0
  66. package/lib/composables/table/create-sorting-definition.ts +48 -0
  67. package/lib/composables/table/create-visibility-definition.ts +44 -0
  68. package/lib/composables/table/type.ts +112 -0
  69. package/lib/composables/table.composable.ts +76 -0
  70. package/lib/layouts/CoreLayout.vue +3 -3
  71. package/lib/locales/en.json +1 -0
  72. package/lib/locales/fr.json +1 -0
  73. package/lib/types/backup.type.ts +1 -1
  74. package/lib/types/button.type.ts +1 -1
  75. package/lib/types/color.type.ts +2 -4
  76. package/lib/types/size.type.ts +0 -2
  77. package/lib/types/utility.type.ts +2 -0
  78. package/lib/utils/to-variants.util.ts +9 -0
  79. package/package.json +3 -3
  80. package/lib/components/UiCounter.vue +0 -89
  81. package/lib/components/icon/UiIcon.vue +0 -47
  82. package/lib/components/icon/VmIcon.vue +0 -30
@@ -5,13 +5,13 @@
5
5
  <!-- Network v1.0 -->
6
6
  <template>
7
7
  <FontAwesomeLayers :class="[size, { disabled: stateConfig === undefined }]" class="object-icon">
8
- <UiIcon :icon="mainIcon" />
9
- <UiIcon :icon="stateIcon" :style="stateIconStyle" class="state" />
8
+ <VtsIcon :icon="mainIcon" accent="current" />
9
+ <VtsIcon :icon="stateIcon" accent="current" :style="stateIconStyle" class="state" />
10
10
  </FontAwesomeLayers>
11
11
  </template>
12
12
 
13
13
  <script generic="TType extends SupportedType" lang="ts" setup>
14
- import UiIcon from '@core/components/icon/UiIcon.vue'
14
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
15
15
  import type { ObjectIconConfig, ObjectIconSize, SupportedState, SupportedType } from '@core/types/object-icon.type'
16
16
  import {
17
17
  faCheckCircle,
@@ -46,7 +46,7 @@ const config: ObjectIconConfig = {
46
46
  states: {
47
47
  running: {
48
48
  icon: faPlay,
49
- color: '--color-green-base',
49
+ color: '--color-success-item-base',
50
50
  translate: {
51
51
  x: [100, 132, 148],
52
52
  y: [65, 75, 90],
@@ -54,7 +54,7 @@ const config: ObjectIconConfig = {
54
54
  },
55
55
  halted: {
56
56
  icon: faStop,
57
- color: '--color-red-base',
57
+ color: '--color-danger-item-base',
58
58
  translate: {
59
59
  x: [100, 136, 144],
60
60
  y: [65, 75, 90],
@@ -62,7 +62,7 @@ const config: ObjectIconConfig = {
62
62
  },
63
63
  suspended: {
64
64
  icon: faMoon,
65
- color: '--color-purple-d60',
65
+ color: '--color-normal-item-base',
66
66
  translate: {
67
67
  x: [88, 130, 140],
68
68
  y: [65, 75, 90],
@@ -70,7 +70,7 @@ const config: ObjectIconConfig = {
70
70
  },
71
71
  paused: {
72
72
  icon: faPause,
73
- color: '--color-purple-l40',
73
+ color: '--color-normal-item-active',
74
74
  translate: {
75
75
  x: [110, 154, 170],
76
76
  y: [65, 75, 90],
@@ -83,7 +83,7 @@ const config: ObjectIconConfig = {
83
83
  states: {
84
84
  running: {
85
85
  icon: faPlay,
86
- color: '--color-green-base',
86
+ color: '--color-success-item-base',
87
87
  translate: {
88
88
  x: [82, 122, 136],
89
89
  y: [66, 70, 90],
@@ -91,7 +91,7 @@ const config: ObjectIconConfig = {
91
91
  },
92
92
  halted: {
93
93
  icon: faStop,
94
- color: '--color-red-base',
94
+ color: '--color-danger-item-base',
95
95
  translate: {
96
96
  x: [90, 122, 134],
97
97
  y: [65, 72, 85],
@@ -99,7 +99,7 @@ const config: ObjectIconConfig = {
99
99
  },
100
100
  maintenance: {
101
101
  icon: faTriangleExclamation,
102
- color: '--color-orange-base',
102
+ color: '--color-warning-item-base',
103
103
  translate: {
104
104
  x: [60, 88, 100],
105
105
  y: [68, 72, 82],
@@ -112,7 +112,7 @@ const config: ObjectIconConfig = {
112
112
  states: {
113
113
  connected: {
114
114
  icon: faCheckCircle,
115
- color: '--color-green-base',
115
+ color: '--color-success-item-base',
116
116
  translate: {
117
117
  x: [60, 90, 100],
118
118
  y: [65, 75, 90],
@@ -120,7 +120,7 @@ const config: ObjectIconConfig = {
120
120
  },
121
121
  'partially-connected': {
122
122
  icon: faCircleMinus,
123
- color: '--color-orange-base',
123
+ color: '--color-warning-item-base',
124
124
  translate: {
125
125
  x: [60, 90, 100],
126
126
  y: [65, 75, 90],
@@ -128,7 +128,7 @@ const config: ObjectIconConfig = {
128
128
  },
129
129
  disconnected: {
130
130
  icon: faCircleXmark,
131
- color: '--color-red-base',
131
+ color: '--color-danger-item-base',
132
132
  translate: {
133
133
  x: [60, 90, 100],
134
134
  y: [65, 75, 90],
@@ -141,7 +141,7 @@ const config: ObjectIconConfig = {
141
141
  states: {
142
142
  connected: {
143
143
  icon: faCheckCircle,
144
- color: '--color-green-base',
144
+ color: '--color-success-item-base',
145
145
  translate: {
146
146
  x: [112, 130, 162],
147
147
  y: [74, 78, 102],
@@ -149,7 +149,7 @@ const config: ObjectIconConfig = {
149
149
  },
150
150
  disconnected: {
151
151
  icon: faCircleXmark,
152
- color: '--color-red-base',
152
+ color: '--color-danger-item-base',
153
153
  translate: {
154
154
  x: [112, 130, 162],
155
155
  y: [74, 78, 102],
@@ -162,7 +162,7 @@ const config: ObjectIconConfig = {
162
162
  states: {
163
163
  connected: {
164
164
  icon: faCheckCircle,
165
- color: '--color-green-base',
165
+ color: '--color-success-item-base',
166
166
  translate: {
167
167
  x: [84, 110, 128],
168
168
  y: [66, 72, 88],
@@ -170,7 +170,7 @@ const config: ObjectIconConfig = {
170
170
  },
171
171
  disconnected: {
172
172
  icon: faCircleXmark,
173
- color: '--color-red-base',
173
+ color: '--color-danger-item-base',
174
174
  translate: {
175
175
  x: [84, 110, 128],
176
176
  y: [66, 72, 88],
@@ -200,7 +200,7 @@ const stateIconStyle = computed(() => {
200
200
  }
201
201
 
202
202
  return {
203
- '--color': `var(${stateConfig.value.color})`,
203
+ '--vts-icon--color': `var(${stateConfig.value.color})`,
204
204
  '--state-icon-translate-x': `${stateConfig.value.translate.x[translateIndex]}%`,
205
205
  '--state-icon-translate-y': `${stateConfig.value.translate.y[translateIndex]}%`,
206
206
  }
@@ -232,7 +232,7 @@ const stateIconStyle = computed(() => {
232
232
  font-size: var(--font-size);
233
233
 
234
234
  &.disabled {
235
- color: var(--color-grey-400);
235
+ color: var(--color-neutral-txt-secondary);
236
236
  }
237
237
  }
238
238
 
@@ -0,0 +1,96 @@
1
+ <!-- WIP -->
2
+ <template>
3
+ <UiSpinner v-if="busy" class="vts-icon" />
4
+ <div v-else-if="overlayIcon !== undefined && icon !== undefined" class="vts-icon stacked" :class="accent">
5
+ <FontAwesomeIcon :fixed-width="fixedWidth" :icon />
6
+ <FontAwesomeIcon class="overlay-icon" :fixed-width="fixedWidth" :icon="overlayIcon" />
7
+ </div>
8
+ <FontAwesomeIcon v-else-if="icon !== undefined" :class="accent" :fixed-width="fixedWidth" :icon class="vts-icon" />
9
+ </template>
10
+
11
+ <script lang="ts" setup>
12
+ import UiSpinner from '@core/components/UiSpinner.vue'
13
+ import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
14
+ import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
15
+
16
+ export type IconAccent = 'current' | 'brand' | 'success' | 'warning' | 'danger'
17
+
18
+ defineProps<{
19
+ accent: IconAccent
20
+ icon?: IconDefinition
21
+ overlayIcon?: IconDefinition
22
+ busy?: boolean
23
+ fixedWidth?: boolean
24
+ }>()
25
+ </script>
26
+
27
+ <style lang="postcss" scoped>
28
+ /*
29
+ ACCENT
30
+ --vts-icon--color
31
+ --vts-icon__overlay-icon--color
32
+ */
33
+ .vts-icon {
34
+ &.current {
35
+ --vts-icon--color: currentColor;
36
+
37
+ &.stacked {
38
+ --vts-icon__overlay-icon--color: var(--color-neutral-background-primary);
39
+ }
40
+ }
41
+
42
+ &.brand {
43
+ --vts-icon--color: var(--color-normal-item-base);
44
+
45
+ &.stacked {
46
+ --vts-icon__overlay-icon--color: var(--color-normal-txt-item);
47
+ }
48
+ }
49
+
50
+ &.success {
51
+ --vts-icon--color: var(--color-success-item-base);
52
+
53
+ &.stacked {
54
+ --vts-icon__overlay-icon--color: var(--color-success-txt-item);
55
+ }
56
+ }
57
+
58
+ &.warning {
59
+ --vts-icon--color: var(--color-warning-item-base);
60
+
61
+ &.stacked {
62
+ --vts-icon__overlay-icon--color: var(--color-warning-txt-item);
63
+ }
64
+ }
65
+
66
+ &.danger {
67
+ --vts-icon--color: var(--color-danger-item-base);
68
+
69
+ &.stacked {
70
+ --vts-icon__overlay-icon--color: var(--color-danger-txt-item);
71
+ }
72
+ }
73
+ }
74
+
75
+ /* IMPLEMENTATION */
76
+ .vts-icon {
77
+ color: var(--vts-icon--color);
78
+
79
+ &.stacked {
80
+ display: inline-grid;
81
+ place-items: center;
82
+
83
+ .overlay-icon {
84
+ color: var(--vts-icon__overlay-icon--color);
85
+ }
86
+
87
+ svg {
88
+ grid-area: 1 / -1;
89
+
90
+ &:last-child {
91
+ font-size: 0.75rem;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ </style>
@@ -0,0 +1,55 @@
1
+ <!-- v2 -->
2
+ <template>
3
+ <div class="vts-info">
4
+ <VtsIcon :accent class="icon" :icon="faCircle" :overlay-icon="icon" />
5
+ <p class="message"><slot /></p>
6
+ </div>
7
+ </template>
8
+
9
+ <script lang="ts" setup>
10
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
11
+ import {
12
+ faCheck,
13
+ faCircle,
14
+ faExclamation,
15
+ faInfo,
16
+ faXmark,
17
+ type IconDefinition,
18
+ } from '@fortawesome/free-solid-svg-icons'
19
+ import { computed } from 'vue'
20
+
21
+ type Props = {
22
+ accent: 'brand' | 'success' | 'warning' | 'danger'
23
+ }
24
+
25
+ const props = defineProps<Props>()
26
+
27
+ defineSlots<{
28
+ default(): any
29
+ }>()
30
+
31
+ const iconByAccent: Record<Props['accent'], IconDefinition> = {
32
+ brand: faInfo,
33
+ success: faCheck,
34
+ warning: faExclamation,
35
+ danger: faXmark,
36
+ }
37
+
38
+ const icon = computed(() => iconByAccent[props.accent])
39
+ </script>
40
+
41
+ <style lang="postcss" scoped>
42
+ .vts-info {
43
+ align-items: start;
44
+ display: flex;
45
+ gap: 0.8rem;
46
+ }
47
+
48
+ .icon {
49
+ font-size: 1.6rem;
50
+ }
51
+
52
+ .message {
53
+ font-size: 1.2rem;
54
+ }
55
+ </style>
@@ -1,14 +1,20 @@
1
1
  <!-- WIP -->
2
2
  <template>
3
3
  <div class="ui-input">
4
- <UiIcon :icon class="before" />
4
+ <VtsIcon :icon accent="current" class="before" />
5
5
  <input :id v-model.trim="modelValue" class="typo p1-regular input" type="search" v-bind="$attrs" />
6
- <UiIcon v-if="!$attrs.disabled && modelValue" :icon="faXmark" class="after" color="info" @click="modelValue = ''" />
6
+ <VtsIcon
7
+ v-if="!$attrs.disabled && modelValue"
8
+ :icon="faXmark"
9
+ class="after"
10
+ accent="brand"
11
+ @click="modelValue = ''"
12
+ />
7
13
  </div>
8
14
  </template>
9
15
 
10
16
  <script lang="ts" setup>
11
- import UiIcon from '@core/components/icon/UiIcon.vue'
17
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
12
18
  import { uniqueId } from '@core/utils/unique-id.util'
13
19
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
14
20
  import { faXmark } from '@fortawesome/free-solid-svg-icons'
@@ -31,28 +37,28 @@ const id = computed(() => uniqueId('input-'))
31
37
  /* COLOR VARIANTS */
32
38
  .input {
33
39
  & {
34
- --border-color: var(--color-grey-500);
35
- --background-color: var(--background-color-primary);
40
+ --border-color: var(--color-neutral-border);
41
+ --background-color: var(--color-neutral-background-primary);
36
42
  }
37
43
 
38
44
  &:is(:hover, :focus-visible) {
39
- --border-color: var(--color-purple-d20);
40
- --background-color: var(--background-color-primary);
45
+ --border-color: var(--color-normal-item-hover);
46
+ --background-color: var(--color-neutral-background-primary);
41
47
  }
42
48
 
43
49
  &:focus {
44
- --border-color: var(--color-purple-base);
45
- --background-color: var(--background-color-primary);
50
+ --border-color: var(--color-normal-item-base);
51
+ --background-color: var(--color-neutral-background-primary);
46
52
  }
47
53
 
48
54
  &:active {
49
- --border-color: var(--color-purple-d40);
50
- --background-color: var(--background-color-primary);
55
+ --border-color: var(--color-normal-item-active);
56
+ --background-color: var(--color-neutral-background-primary);
51
57
  }
52
58
 
53
59
  &:disabled {
54
- --border-color: var(--color-grey-500);
55
- --background-color: var(--background-color-secondary);
60
+ --border-color: var(--color-neutral-border);
61
+ --background-color: var(--color-neutral-background-disabled);
56
62
  }
57
63
  }
58
64
 
@@ -93,7 +99,7 @@ const id = computed(() => uniqueId('input-'))
93
99
  width: 100%;
94
100
  height: 4rem;
95
101
  padding: 0.8rem 1.6rem;
96
- color: var(--color-grey-000);
102
+ color: var(--color-neutral-txt-primary);
97
103
  background-color: var(--background-color);
98
104
 
99
105
  &:has(+ .after) {
@@ -105,7 +111,7 @@ const id = computed(() => uniqueId('input-'))
105
111
  }
106
112
 
107
113
  &::placeholder {
108
- color: var(--color-grey-300);
114
+ color: var(--color-neutral-txt-secondary);
109
115
  }
110
116
 
111
117
  &[type='search']::-webkit-search-cancel-button {
@@ -120,7 +126,7 @@ const id = computed(() => uniqueId('input-'))
120
126
  }
121
127
 
122
128
  .before {
123
- color: var(--color-grey-400);
129
+ color: var(--color-neutral-txt-secondary);
124
130
  inset-inline-start: 1.6rem;
125
131
  pointer-events: none;
126
132
  z-index: 1;
@@ -54,8 +54,8 @@ const ui = useUiStore()
54
54
  display: flex;
55
55
  flex-direction: column;
56
56
  height: 100%;
57
- background-color: var(--background-color-secondary);
58
- border-right: 0.1rem solid var(--color-grey-500);
57
+ background-color: var(--color-neutral-background-secondary);
58
+ border-right: 0.1rem solid var(--color-neutral-border);
59
59
  width: v-bind('sidebar.cssWidth');
60
60
  z-index: 1001;
61
61
  transition:
@@ -93,7 +93,7 @@ const ui = useUiStore()
93
93
 
94
94
  &:hover,
95
95
  &.active {
96
- background-color: var(--color-grey-500);
96
+ background-color: var(--color-neutral-border);
97
97
  transition: background-color 0.05s;
98
98
  }
99
99
  }
@@ -1,15 +1,15 @@
1
1
  <!-- v1.0 -->
2
2
  <template>
3
3
  <li :class="color" class="legend-item">
4
- <UiIcon :icon="faCircle" class="circle-icon" />
4
+ <VtsIcon :icon="faCircle" accent="brand" class="circle-icon" />
5
5
  <span class="label typo p3-regular"><slot /></span>
6
- <UiIcon v-if="tooltip" v-tooltip="tooltip" :icon="faCircleInfo" class="tooltip-icon" color="info" />
6
+ <VtsIcon v-if="tooltip" v-tooltip="tooltip" :icon="faCircleInfo" class="tooltip-icon" accent="brand" />
7
7
  <span v-if="valueLabel" class="value-and-unit typo c3-semi-bold">{{ valueLabel }}</span>
8
8
  </li>
9
9
  </template>
10
10
 
11
11
  <script lang="ts" setup>
12
- import UiIcon from '@core/components/icon/UiIcon.vue'
12
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
13
13
  import { vTooltip } from '@core/directives/tooltip.directive'
14
14
  import { faCircle, faCircleInfo } from '@fortawesome/free-solid-svg-icons'
15
15
  import { computed } from 'vue'
@@ -36,27 +36,27 @@ const valueLabel = computed(() => [props.value, props.unit].join(' ').trim())
36
36
  /* COLOR VARIANTS */
37
37
  .legend-item {
38
38
  &.primary {
39
- --circle-color: var(--color-purple-base);
39
+ --circle-color: var(--color-normal-item-base);
40
40
  }
41
41
 
42
42
  &.secondary {
43
- --circle-color: var(--color-grey-100);
43
+ --circle-color: var(--color-neutral-txt-primary);
44
44
  }
45
45
 
46
46
  &.success {
47
- --circle-color: var(--color-green-base);
47
+ --circle-color: var(--color-success-item-base);
48
48
  }
49
49
 
50
50
  &.warning {
51
- --circle-color: var(--color-orange-base);
51
+ --circle-color: var(--color-warning-item-base);
52
52
  }
53
53
 
54
54
  &.danger {
55
- --circle-color: var(--color-red-base);
55
+ --circle-color: var(--color-danger-item-base);
56
56
  }
57
57
 
58
58
  &.disabled {
59
- --circle-color: var(--color-grey-300);
59
+ --circle-color: var(--color-neutral-background-disabled);
60
60
  }
61
61
  }
62
62
 
@@ -77,10 +77,10 @@ const valueLabel = computed(() => [props.value, props.unit].join(' ').trim())
77
77
  }
78
78
 
79
79
  .label {
80
- color: var(--color-grey-000);
80
+ color: var(--color-neutral-txt-primary);
81
81
  }
82
82
 
83
83
  .value-and-unit {
84
- color: var(--color-grey-300);
84
+ color: var(--color-neutral-txt-secondary);
85
85
  }
86
86
  </style>
@@ -11,11 +11,11 @@
11
11
  >
12
12
  <slot />
13
13
  </MenuTrigger>
14
- <MenuList v-else :disabled="isDisabled" shadow>
14
+ <MenuList v-else :disabled="isDisabled" border>
15
15
  <template #trigger="{ open, isOpen }">
16
16
  <MenuTrigger :active="isOpen" :busy="isBusy" :disabled="isDisabled" :icon @click="open">
17
17
  <slot />
18
- <UiIcon :fixed-width="false" :icon="submenuIcon" class="submenu-icon" />
18
+ <VtsIcon :fixed-width="false" :icon="submenuIcon" accent="current" class="submenu-icon" />
19
19
  </MenuTrigger>
20
20
  </template>
21
21
  <slot name="submenu" />
@@ -24,7 +24,7 @@
24
24
  </template>
25
25
 
26
26
  <script lang="ts" setup>
27
- import UiIcon from '@core/components/icon/UiIcon.vue'
27
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
28
28
  import MenuList from '@core/components/menu/MenuList.vue'
29
29
  import MenuTrigger from '@core/components/menu/MenuTrigger.vue'
30
30
  import { useContext } from '@core/composables/context.composable'
@@ -73,7 +73,7 @@ const handleClick = async () => {
73
73
 
74
74
  <style lang="postcss" scoped>
75
75
  .menu-item {
76
- color: var(--color-grey-000);
76
+ color: var(--color-neutral-txt-primary);
77
77
  }
78
78
 
79
79
  .submenu-icon {
@@ -2,7 +2,7 @@
2
2
  <template>
3
3
  <slot :is-open="isOpen" :open="open" name="trigger" />
4
4
  <Teleport :disabled="!shouldTeleport" to="body">
5
- <ul v-if="!hasTrigger || isOpen" ref="menu" :class="{ horizontal, shadow }" class="menu-list" v-bind="$attrs">
5
+ <ul v-if="!hasTrigger || isOpen" ref="menu" :class="{ horizontal, border }" class="menu-list" v-bind="$attrs">
6
6
  <slot />
7
7
  </ul>
8
8
  </Teleport>
@@ -23,7 +23,7 @@ defineOptions({
23
23
  const props = withDefaults(
24
24
  defineProps<{
25
25
  horizontal?: boolean
26
- shadow?: boolean
26
+ border?: boolean
27
27
  disabled?: boolean
28
28
  placement?: Options['placement']
29
29
  }>(),
@@ -88,17 +88,17 @@ const open = (event: MouseEvent) => {
88
88
  flex-direction: column;
89
89
  padding: 0.4rem;
90
90
  cursor: default;
91
- color: var(--color-grey-200);
91
+ color: var(--color-neutral-txt-primary);
92
92
  border-radius: 0.4rem;
93
- background-color: var(--color-grey-600);
93
+ background-color: var(--color-neutral-background-primary);
94
94
  gap: 0.2rem;
95
95
 
96
96
  &.horizontal {
97
97
  flex-direction: row;
98
98
  }
99
99
 
100
- &.shadow {
101
- box-shadow: var(--shadow-300);
100
+ &.border {
101
+ border: 0.1rem solid var(--color-neutral-border);
102
102
  }
103
103
  }
104
104
  </style>
@@ -17,11 +17,11 @@ const horizontal = inject(
17
17
  .menu-separator {
18
18
  &.horizontal {
19
19
  margin: 0 0.5rem;
20
- border-right: 1px solid var(--color-grey-500);
20
+ border-right: 1px solid var(--color-neutral-border);
21
21
  }
22
22
 
23
23
  &:not(.horizontal) {
24
- border-bottom: 1px solid var(--color-grey-500);
24
+ border-bottom: 1px solid var(--color-neutral-border);
25
25
  }
26
26
  }
27
27
  </style>
@@ -1,13 +1,13 @@
1
1
  <!-- v1.0 -->
2
2
  <template>
3
3
  <div :class="{ active, disabled }" class="menu-trigger">
4
- <UiIcon :busy="busy" :icon="icon" />
4
+ <VtsIcon :busy :icon accent="current" />
5
5
  <slot />
6
6
  </div>
7
7
  </template>
8
8
 
9
9
  <script lang="ts" setup>
10
- import UiIcon from '@core/components/icon/UiIcon.vue'
10
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
11
11
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
12
12
 
13
13
  defineProps<{
@@ -30,22 +30,22 @@ defineProps<{
30
30
  white-space: nowrap;
31
31
  border-radius: 0.8rem;
32
32
  gap: 1rem;
33
- background-color: var(--color-grey-600);
33
+ background-color: var(--color-neutral-background-primary);
34
34
 
35
35
  &.disabled {
36
- color: var(--color-grey-500);
36
+ color: var(--color-neutral-txt-secondary);
37
37
  }
38
38
 
39
39
  &:not(.disabled) {
40
40
  cursor: pointer;
41
41
 
42
42
  &:hover {
43
- background-color: var(--background-color-purple-10);
43
+ background-color: var(--color-normal-background-selected);
44
44
  }
45
45
 
46
46
  &:active,
47
47
  &.active {
48
- background-color: var(--background-color-purple-20);
48
+ background-color: var(--color-normal-background-hover);
49
49
  }
50
50
  }
51
51
  }
@@ -3,7 +3,7 @@
3
3
  <RouterLink v-if="route && !disabled" :to="route" class="object-link is-link typo p3-medium">
4
4
  <span class="icon">
5
5
  <slot name="icon">
6
- <UiIcon :icon />
6
+ <VtsIcon :icon accent="current" />
7
7
  </slot>
8
8
  </span>
9
9
  <span v-tooltip class="content text-ellipsis">
@@ -13,7 +13,7 @@
13
13
  <span v-else :class="{ disabled }" class="object-link typo p3-medium">
14
14
  <span class="icon">
15
15
  <slot name="icon">
16
- <UiIcon :icon />
16
+ <VtsIcon :icon accent="current" />
17
17
  </slot>
18
18
  </span>
19
19
  <slot />
@@ -21,7 +21,7 @@
21
21
  </template>
22
22
 
23
23
  <script lang="ts" setup>
24
- import UiIcon from '@core/components/icon/UiIcon.vue'
24
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
25
25
  import { vTooltip } from '@core/directives/tooltip.directive'
26
26
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
27
27
  import { type RouteLocationRaw } from 'vue-router'
@@ -41,24 +41,24 @@ defineSlots<{
41
41
  <style lang="postcss" scoped>
42
42
  /* COLOR VARIANTS */
43
43
  .object-link {
44
- --color: var(--color-purple-base);
45
- --border-color: var(--color-purple-base);
44
+ --color: var(--color-normal-txt-base);
45
+ --border-color: var(--color-normal-txt-base);
46
46
 
47
47
  &.is-link {
48
48
  &:is(:hover, .hover, :focus-visible) {
49
- --color: var(--color-purple-d20);
50
- --border-color: var(--color-purple-d20);
49
+ --color: var(--color-normal-txt-hover);
50
+ --border-color: var(--color-normal-txt-hover);
51
51
  }
52
52
 
53
53
  &:is(:active, .pressed) {
54
- --color: var(--color-purple-d40);
55
- --border-color: var(--color-purple-d40);
54
+ --color: var(--color-normal-txt-active);
55
+ --border-color: var(--color-normal-txt-active);
56
56
  }
57
57
  }
58
58
 
59
59
  &.disabled {
60
- --color: var(--color-grey-400);
61
- --border-color: var(--color-grey-400);
60
+ --color: var(--color-neutral-txt-secondary);
61
+ --border-color: var(--color-neutral-txt-secondary);
62
62
  }
63
63
  }
64
64
 
@@ -81,7 +81,7 @@ defineSlots<{
81
81
  }
82
82
 
83
83
  .icon {
84
- color: var(--color-grey-100);
84
+ color: var(--color-neutral-txt-primary);
85
85
  font-size: 0.8rem;
86
86
  }
87
87
  </style>