@xen-orchestra/web-core 0.1.0 → 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 +5 -5
  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 +2 -2
  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
@@ -1,10 +1,10 @@
1
1
  <!-- v1.0 -->
2
2
  <template>
3
- <UiIcon :class="className" :icon="icon" class="power-state-icon" />
3
+ <VtsIcon :class="className" accent="current" :icon class="power-state-icon" />
4
4
  </template>
5
5
 
6
6
  <script lang="ts" setup>
7
- import UiIcon from '@core/components/icon/UiIcon.vue'
7
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
8
8
  import type { POWER_STATE } from '@core/types/power-state.type'
9
9
  import { faMoon, faPause, faPlay, faStop } from '@fortawesome/free-solid-svg-icons'
10
10
  import { computed } from 'vue'
@@ -28,19 +28,19 @@ const className = computed(() => `state-${props.state}`)
28
28
  <style lang="postcss" scoped>
29
29
  .power-state-icon {
30
30
  &.state-suspended {
31
- color: var(--color-purple-d60);
31
+ color: var(--color-normal-txt-item);
32
32
  }
33
33
 
34
34
  &.state-running {
35
- color: var(--color-green-base);
35
+ color: var(--color-success-item-base);
36
36
  }
37
37
 
38
38
  &.state-paused {
39
- color: var(--color-purple-l40);
39
+ color: var(--color-normal-item-active);
40
40
  }
41
41
 
42
42
  &.state-halted {
43
- color: var(--color-red-base);
43
+ color: var(--color-danger-item-base);
44
44
  }
45
45
  }
46
46
  </style>
@@ -18,8 +18,8 @@ defineProps<Props>()
18
18
  gap: 2.4rem;
19
19
  padding: 2.4rem;
20
20
  flex-direction: column;
21
- background-color: var(--background-color-primary);
22
- border: 0.1rem solid var(--color-grey-500);
21
+ background-color: var(--color-neutral-background-primary);
22
+ border: 0.1rem solid var(--color-neutral-border);
23
23
  border-radius: 0.8rem;
24
24
  }
25
25
 
@@ -2,76 +2,84 @@
2
2
  <template>
3
3
  <span :class="[color, { light }]" class="ui-tag typo p3-regular">
4
4
  <slot name="icon">
5
- <UiIcon :icon fixed-width />
5
+ <VtsIcon :icon accent="current" fixed-width />
6
6
  </slot>
7
7
  <span class="text-ellipsis"><slot /></span>
8
8
  </span>
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 type { TagColor } from '@core/types/color.type'
14
14
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
15
15
 
16
- withDefaults(
17
- defineProps<{
18
- color?: TagColor
19
- light?: boolean
20
- icon?: IconDefinition
21
- }>(),
22
- { color: 'grey' }
23
- )
16
+ defineProps<{
17
+ color: TagColor
18
+ light?: boolean
19
+ icon?: IconDefinition
20
+ }>()
24
21
  </script>
25
22
 
26
23
  <style lang="postcss" scoped>
27
24
  /* COLOR VARIANTS */
28
25
  .ui-tag {
29
- --color: var(--color-grey-600);
26
+ &.primary {
27
+ --background-color: var(--color-normal-item-base);
28
+ --color: var(--color-normal-txt-item);
30
29
 
31
- &.light {
32
- --color: var(--color-grey-100);
30
+ &.light {
31
+ --background-color: var(--color-normal-background-selected);
32
+ --color: var(--color-normal-txt-base);
33
+ }
33
34
  }
34
- }
35
35
 
36
- /* BACKGROUND COLOR VARIANTS */
37
- .ui-tag {
38
- &.grey {
39
- --background-color: var(--color-grey-300);
36
+ &.secondary {
37
+ --background-color: var(--color-neutral-txt-primary);
38
+ --color: var(--color-neutral-background-primary);
40
39
 
41
40
  &.light {
42
- --background-color: var(--background-color-secondary);
41
+ --background-color: var(--color-neutral-background-secondary);
42
+ --color: var(--color-neutral-txt-primary);
43
43
  }
44
44
  }
45
45
 
46
- &.info {
47
- --background-color: var(--color-purple-l20);
46
+ &.success {
47
+ --background-color: var(--color-success-item-base);
48
+ --color: var(--color-success-txt-item);
48
49
 
49
50
  &.light {
50
- --background-color: var(--background-color-purple-10);
51
+ --background-color: var(--color-success-background-selected);
52
+ --color: var(--color-success-txt-base);
51
53
  }
52
54
  }
53
55
 
54
- &.success {
55
- --background-color: var(--color-green-l20);
56
+ &.warning {
57
+ --background-color: var(--color-warning-item-base);
58
+ --color: var(--color-warning-txt-item);
56
59
 
57
60
  &.light {
58
- --background-color: var(--background-color-green-10);
61
+ --background-color: var(--color-warning-background-selected);
62
+ --color: var(--color-warning-txt-base);
59
63
  }
60
64
  }
61
65
 
62
- &.warning {
63
- --background-color: var(--color-orange-l20);
66
+ &.danger {
67
+ --background-color: var(--color-danger-item-base);
68
+ --color: var(--color-danger-txt-item);
64
69
 
65
70
  &.light {
66
- --background-color: var(--background-color-orange-10);
71
+ --background-color: var(--color-danger-background-selected);
72
+ --color: var(--color-danger-txt-base);
67
73
  }
68
74
  }
69
75
 
70
- &:is(.error, .danger) {
71
- --background-color: var(--color-red-l20);
76
+ &.disabled {
77
+ --background-color: var(--color-neutral-background-disabled);
78
+ --color: var(--color-neutral-txt-secondary);
72
79
 
73
80
  &.light {
74
- --background-color: var(--background-color-red-10);
81
+ --background-color: var(--color-neutral-background-secondary);
82
+ --color: var(--color-neutral-txt-secondary);
75
83
  }
76
84
  }
77
85
  }
@@ -1,9 +1,12 @@
1
1
  <!-- v1.0 -->
2
2
  <template>
3
3
  <div class="backup-item">
4
- <RouterLink :to="backup.route">
4
+ <RouterLink v-if="backup.route !== undefined" :to="backup.route">
5
5
  {{ backup.label }}
6
6
  </RouterLink>
7
+ <p v-else class="typo p3-medium">
8
+ {{ backup.label }}
9
+ </p>
7
10
  <div class="states">
8
11
  <BackupState v-for="(state, index) in backup.states" :key="index" :state />
9
12
  </div>
@@ -22,7 +25,7 @@ defineProps<{
22
25
  <style lang="postcss" scoped>
23
26
  .backup-item {
24
27
  padding: 0.8rem 0.4rem;
25
- border-top: 0.1rem solid var(--color-grey-500);
28
+ border-top: 0.1rem solid var(--color-neutral-border);
26
29
  display: flex;
27
30
  align-items: center;
28
31
  gap: 0.2rem;
@@ -1,12 +1,11 @@
1
1
  <!-- v1.0 -->
2
2
  <template>
3
- <UiIcon :color :icon class="backup-state" />
3
+ <VtsIcon :accent="color" :icon class="backup-state" />
4
4
  </template>
5
5
 
6
6
  <script lang="ts" setup>
7
- import UiIcon from '@core/components/icon/UiIcon.vue'
7
+ import VtsIcon from '@core/components/icon/VtsIcon.vue'
8
8
  import type { BackupState } from '@core/types/backup.type'
9
- import type { Color } from '@core/types/color.type'
10
9
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
11
10
  import { faCheckCircle, faCircleMinus, faCircleXmark } from '@fortawesome/free-solid-svg-icons'
12
11
  import { computed } from 'vue'
@@ -17,10 +16,10 @@ type Props = {
17
16
 
18
17
  const props = defineProps<Props>()
19
18
 
20
- const states: Record<Props['state'], { icon: IconDefinition; color: Color }> = {
19
+ const states: Record<Props['state'], { icon: IconDefinition; color: 'success' | 'warning' | 'danger' }> = {
21
20
  success: { icon: faCheckCircle, color: 'success' },
22
21
  partial: { icon: faCircleMinus, color: 'warning' },
23
- failure: { icon: faCircleXmark, color: 'error' },
22
+ failure: { icon: faCircleXmark, color: 'danger' },
24
23
  }
25
24
 
26
25
  const icon = computed(() => states[props.state].icon)
@@ -1,13 +1,13 @@
1
1
  <!-- v1.0 -->
2
2
  <template>
3
3
  <button :class="[color, size, { disabled, active }]" :disabled class="button-icon" type="button">
4
- <UiIcon :icon class="icon" />
4
+ <VtsIcon :icon accent="current" />
5
5
  <span v-if="dot" class="dot" />
6
6
  </button>
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 { Color } from '@core/types/color.type'
12
12
  import type { IconDefinition } from '@fortawesome/fontawesome-common-types'
13
13
  import { computed } from 'vue'
@@ -22,7 +22,7 @@ const props = withDefaults(
22
22
  dot?: boolean
23
23
  targetScale?: number | { x: number; y: number }
24
24
  }>(),
25
- { color: 'info', size: 'medium', targetScale: 1 }
25
+ { color: 'normal', size: 'medium', targetScale: 1 }
26
26
  )
27
27
 
28
28
  const cssTargetScale = computed(() => {
@@ -37,114 +37,114 @@ const cssTargetScale = computed(() => {
37
37
  <style lang="postcss" scoped>
38
38
  /* COLOR VARIANTS */
39
39
  .button-icon {
40
- &.info {
40
+ &.normal {
41
41
  & {
42
- --color: var(--color-purple-base);
42
+ --color: var(--color-normal-txt-base);
43
43
  --background-color: transparent;
44
- --dot-color: var(--color-red-base);
44
+ --dot-color: var(--color-danger-txt-base);
45
45
  }
46
46
 
47
47
  &:is(.active, .selected) {
48
- --color: var(--color-purple-base);
49
- --background-color: var(--background-color-purple-10);
48
+ --color: var(--color-normal-txt-base);
49
+ --background-color: var(--color-normal-background-selected);
50
50
  }
51
51
 
52
52
  &:is(:hover, .hover, :focus-visible) {
53
- --color: var(--color-purple-d20);
54
- --background-color: var(--background-color-purple-20);
53
+ --color: var(--color-normal-txt-hover);
54
+ --background-color: var(--color-normal-background-hover);
55
55
  }
56
56
 
57
57
  &:is(:active, .pressed) {
58
- --color: var(--color-purple-d40);
59
- --background-color: var(--background-color-purple-30);
58
+ --color: var(--color-normal-txt-active);
59
+ --background-color: var(--color-normal-background-active);
60
60
  }
61
61
 
62
62
  &:is(:disabled, .disabled) {
63
- --color: var(--color-grey-400);
63
+ --color: var(--color-neutral-txt-secondary);
64
64
  --background-color: transparent;
65
65
  }
66
66
  }
67
67
 
68
68
  &.success {
69
69
  & {
70
- --color: var(--color-green-base);
70
+ --color: var(--color-success-txt-base);
71
71
  --background-color: transparent;
72
- --dot-color: var(--color-red-base);
72
+ --dot-color: var(--color-danger-txt-base);
73
73
  }
74
74
 
75
75
  &:is(.active, .selected) {
76
- --color: var(--color-green-base);
77
- --background-color: var(--background-color-green-10);
76
+ --color: var(--color-success-txt-base);
77
+ --background-color: var(--color-success-background-selected);
78
78
  }
79
79
 
80
80
  &:is(:hover, .hover, :focus-visible) {
81
- --color: var(--color-green-d20);
82
- --background-color: var(--background-color-green-20);
81
+ --color: var(--color-success-txt-hover);
82
+ --background-color: var(--color-success-background-hover);
83
83
  }
84
84
 
85
85
  &:is(:active, .pressed) {
86
- --color: var(--color-green-d40);
87
- --background-color: var(--background-color-green-30);
86
+ --color: var(--color-success-txt-active);
87
+ --background-color: var(--color-success-background-active);
88
88
  }
89
89
 
90
90
  &:is(:disabled, .disabled) {
91
- --color: var(--color-green-l60);
91
+ --color: var(--color-neutral-txt-secondary);
92
92
  --background-color: transparent;
93
93
  }
94
94
  }
95
95
 
96
96
  &.warning {
97
97
  & {
98
- --color: var(--color-orange-base);
98
+ --color: var(--color-warning-txt-base);
99
99
  --background-color: transparent;
100
- --dot-color: var(--color-red-base);
100
+ --dot-color: var(--color-danger-txt-base);
101
101
  }
102
102
 
103
103
  &:is(.active, .selected) {
104
- --color: var(--color-orange-base);
105
- --background-color: var(--background-color-orange-10);
104
+ --color: var(--color-warning-txt-base);
105
+ --background-color: var(--color-warning-background-selected);
106
106
  }
107
107
 
108
108
  &:is(:hover, .hover, :focus-visible) {
109
- --color: var(--color-orange-d20);
110
- --background-color: var(--background-color-orange-20);
109
+ --color: var(--color-warning-txt-hover);
110
+ --background-color: var(--color-warning-background-hover);
111
111
  }
112
112
 
113
113
  &:is(:active, .pressed) {
114
- --color: var(--color-orange-d40);
115
- --background-color: var(--background-color-orange-30);
114
+ --color: var(--color-warning-txt-active);
115
+ --background-color: var(--color-warning-background-active);
116
116
  }
117
117
 
118
118
  &:is(:disabled, .disabled) {
119
- --color: var(--color-orange-l60);
119
+ --color: var(--color-neutral-txt-secondary);
120
120
  --background-color: transparent;
121
121
  }
122
122
  }
123
123
 
124
124
  &:is(.danger, .error) {
125
125
  & {
126
- --color: var(--color-red-base);
126
+ --color: var(--color-danger-txt-base);
127
127
  --background-color: transparent;
128
- --dot-color: var(--color-orange-base);
128
+ --dot-color: var(--color-warning-txt-base);
129
129
  }
130
130
 
131
131
  &:is(.active, .selected) {
132
- --color: var(--color-red-base);
133
- --background-color: var(--background-color-red-10);
132
+ --color: var(--color-danger-txt-base);
133
+ --background-color: var(--color-danger-background-selected);
134
134
  }
135
135
 
136
136
  &:is(:hover, .hover, :focus-visible) {
137
- --color: var(--color-red-d20);
138
- --background-color: var(--background-color-red-20);
137
+ --color: var(--color-danger-txt-hover);
138
+ --background-color: var(--color-danger-background-hover);
139
139
  }
140
140
 
141
141
  &:is(:active, .pressed) {
142
- --color: var(--color-red-d40);
143
- --background-color: var(--background-color-red-30);
142
+ --color: var(--color-danger-txt-active);
143
+ --background-color: var(--color-danger-background-active);
144
144
  }
145
145
 
146
146
  &:is(:disabled, .disabled) {
147
- --color: var(--color-red-l60);
147
+ --color: var(--color-neutral-txt-secondary);
148
148
  --background-color: transparent;
149
149
  }
150
150
  }