@xen-orchestra/web-core 0.59.0 → 0.60.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.
@@ -82,7 +82,7 @@
82
82
 
83
83
  /* DANGER */
84
84
 
85
- --color-danger-txt-base: #a11d1d;
85
+ --color-danger-txt-base: #be1621;
86
86
  --color-danger-txt-hover: color-mix(in srgb, #000000 20%, var(--color-danger-txt-base));
87
87
  --color-danger-txt-active: color-mix(in srgb, #000000 40%, var(--color-danger-txt-base));
88
88
 
@@ -134,6 +134,11 @@ const textMappingsByObject: TextMappingByObject = {
134
134
  message: t('modal:host-smart-reboot-message'),
135
135
  action: t('action:smart-reboot-host'),
136
136
  },
137
+ 'restart-toolstack': {
138
+ title: t('modal:confirm-host-restart-toolstack?', { host: hostName }),
139
+ message: t('modal:host-restart-toolstack-message'),
140
+ action: t('action:restart-toolstack'),
141
+ },
137
142
  },
138
143
  }
139
144
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <VtsIcon :name="iconName" :size />
2
+ <VtsIcon :name="iconName" :size :busy :busy-tooltip />
3
3
  </template>
4
4
 
5
5
  <script generic="TType extends ObjectType, TState extends ObjectState<TType>" lang="ts" setup>
@@ -11,6 +11,8 @@ const { type, state } = defineProps<{
11
11
  type: TType
12
12
  state?: TState
13
13
  size: IconSize
14
+ busy?: boolean
15
+ busyTooltip?: string
14
16
  }>()
15
17
 
16
18
  const iconName = computed(() => (state ? objectIcon(type, state) : icon(`object:${type}`)))
@@ -1,24 +1,29 @@
1
- <!-- v5 -->
1
+ <!-- v8 -->
2
2
  <template>
3
- <label :class="classNames" class="ui-checkbox" v-bind="wrapperAttrs">
4
- <input
5
- v-model="checkboxModel"
6
- :class="{ indeterminate: isIndeterminate }"
7
- :disabled="isDisabled"
8
- class="input"
9
- type="checkbox"
10
- v-bind="attrs"
11
- />
12
- <span class="fake-checkbox">
13
- <VtsIcon :name="icon" size="medium" class="icon" />
14
- </span>
15
- <span v-if="slots.default" class="typo-body-regular">
16
- <slot />
17
- </span>
18
- </label>
19
- <UiInfo v-if="slots.info" :accent="accent === 'brand' ? 'info' : accent">
20
- <slot name="info" />
21
- </UiInfo>
3
+ <div class="ui-checkbox">
4
+ <label :class="classNames" class="checkbox-label" v-bind="wrapperAttrs">
5
+ <input
6
+ v-model="checkboxModel"
7
+ :class="{ indeterminate: isIndeterminate }"
8
+ :disabled="isDisabled"
9
+ class="input"
10
+ type="checkbox"
11
+ v-bind="attrs"
12
+ />
13
+ <span class="fake-checkbox">
14
+ <VtsIcon :name="icon" size="medium" class="icon" />
15
+ </span>
16
+ <span v-if="slots.default" class="typo-body-regular">
17
+ <slot />
18
+ </span>
19
+ </label>
20
+ <UiInfo v-if="slots.info" accent="info">
21
+ <slot name="info" />
22
+ </UiInfo>
23
+ <UiInfo v-if="slots.message && accent !== 'brand'" :accent>
24
+ <slot name="message" />
25
+ </UiInfo>
26
+ </div>
22
27
  </template>
23
28
 
24
29
  <script lang="ts" setup>
@@ -43,6 +48,7 @@ const checkboxModel = defineModel<boolean | undefined | string[]>({ default: und
43
48
  const slots = defineSlots<{
44
49
  default?(): any
45
50
  info?(): any
51
+ message?(): any
46
52
  }>()
47
53
 
48
54
  const isDisabled = useDisabled(() => disabled)
@@ -63,234 +69,240 @@ const attrs = useAttrs()
63
69
 
64
70
  <style lang="postcss" scoped>
65
71
  .ui-checkbox {
66
- display: inline-flex;
67
- align-items: center;
68
- gap: 0.8rem;
72
+ display: flex;
73
+ flex-direction: column;
74
+ gap: 0.4rem;
69
75
 
70
- .fake-checkbox {
76
+ .checkbox-label {
71
77
  display: inline-flex;
72
78
  align-items: center;
73
- justify-content: center;
74
- height: 1.6rem;
75
- width: 1.6rem;
76
- transition:
77
- background-color 0.125s ease-in-out,
78
- border-color 0.125s ease-in-out;
79
- border: 0.2rem solid transparent;
80
- border-radius: 0.2rem;
81
- flex-shrink: 0;
82
-
83
- .icon {
84
- font-size: 0.75rem;
85
- color: var(--color-info-txt-item);
86
- transition: opacity 0.125s ease-in-out;
79
+ gap: 0.4rem;
80
+
81
+ .fake-checkbox {
82
+ display: inline-flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ height: 1.6rem;
86
+ width: 1.6rem;
87
+ transition:
88
+ background-color 0.125s ease-in-out,
89
+ border-color 0.125s ease-in-out;
90
+ border: 0.2rem solid transparent;
91
+ border-radius: 0.2rem;
92
+ flex-shrink: 0;
93
+
94
+ .icon {
95
+ font-size: 0.75rem;
96
+ color: var(--color-neutral-background-primary);
97
+ transition: opacity 0.125s ease-in-out;
98
+ }
87
99
  }
88
- }
89
100
 
90
- .input {
91
- font-size: inherit;
92
- position: absolute;
93
- pointer-events: none;
94
- opacity: 0;
101
+ .input {
102
+ font-size: inherit;
103
+ position: absolute;
104
+ pointer-events: none;
105
+ opacity: 0;
95
106
 
96
- &.indeterminate + .fake-checkbox > .icon {
97
- opacity: 1;
98
- color: var(--color-info-txt-item);
99
- }
107
+ &.indeterminate + .fake-checkbox > .icon {
108
+ opacity: 1;
109
+ color: var(--color-neutral-background-primary);
110
+ }
100
111
 
101
- & + .fake-checkbox > .icon {
102
- opacity: 0;
103
- }
112
+ & + .fake-checkbox > .icon {
113
+ opacity: 0;
114
+ }
104
115
 
105
- &:checked + .fake-checkbox > .icon {
106
- opacity: 1;
107
- }
116
+ &:checked + .fake-checkbox > .icon {
117
+ opacity: 1;
118
+ }
108
119
 
109
- &:focus-visible + .fake-checkbox {
110
- outline: none;
120
+ &:focus-visible + .fake-checkbox {
121
+ outline: none;
111
122
 
112
- &::before {
113
- content: '';
114
- position: absolute;
115
- inset: -0.5rem;
116
- border-radius: 0.4rem;
117
- border-width: 0.2rem;
118
- border-style: solid;
123
+ &::before {
124
+ content: '';
125
+ position: absolute;
126
+ inset: -0.5rem;
127
+ border-radius: 0.4rem;
128
+ border-width: 0.2rem;
129
+ border-style: solid;
130
+ }
119
131
  }
120
132
  }
121
- }
122
133
 
123
- &.accent--brand {
124
- .input:not(:disabled) {
125
- & + .fake-checkbox {
126
- border-color: var(--color-brand-item-base);
127
- }
134
+ &.accent--brand {
135
+ .input:not(:disabled) {
136
+ & + .fake-checkbox {
137
+ border-color: var(--color-brand-txt-base);
138
+ }
128
139
 
129
- &.indeterminate + .fake-checkbox {
130
- background-color: var(--color-brand-item-base);
140
+ &.indeterminate + .fake-checkbox {
141
+ background-color: var(--color-brand-txt-base);
142
+
143
+ &:hover {
144
+ border-color: transparent;
145
+ background-color: var(--color-brand-txt-hover);
146
+ }
131
147
 
132
- &:hover {
148
+ &:active {
149
+ background-color: var(--color-brand-txt-active);
150
+ }
151
+ }
152
+
153
+ &.indeterminate:hover + .fake-checkbox {
133
154
  border-color: transparent;
134
- background-color: var(--color-brand-item-hover);
155
+ background-color: var(--color-brand-txt-hover);
135
156
  }
136
157
 
137
- &:active {
138
- background-color: var(--color-brand-item-active);
158
+ &:hover + .fake-checkbox {
159
+ border-color: var(--color-brand-txt-hover);
139
160
  }
140
- }
141
161
 
142
- &.indeterminate:hover + .fake-checkbox {
143
- border-color: transparent;
144
- background-color: var(--color-brand-item-hover);
145
- }
162
+ &:focus-visible + .fake-checkbox::before {
163
+ border: 0.2rem solid var(--color-brand-txt-base);
164
+ }
146
165
 
147
- &:hover + .fake-checkbox {
148
- border-color: var(--color-brand-item-hover);
149
- }
166
+ &:active + .fake-checkbox {
167
+ border-color: var(--color-brand-txt-active);
168
+ }
150
169
 
151
- &:focus-visible + .fake-checkbox::before {
152
- border: 0.2rem solid var(--color-brand-txt-base);
153
- }
170
+ &:checked + .fake-checkbox {
171
+ border-color: transparent;
172
+ background-color: var(--color-brand-txt-base);
173
+ }
154
174
 
155
- &:active + .fake-checkbox {
156
- border-color: var(--color-brand-item-active);
157
- }
175
+ &:checked:hover + .fake-checkbox {
176
+ background-color: var(--color-brand-txt-hover);
177
+ }
158
178
 
159
- &:checked + .fake-checkbox {
160
- border-color: transparent;
161
- background-color: var(--color-brand-item-base);
179
+ &:checked:active + .fake-checkbox {
180
+ background-color: var(--color-brand-txt-active);
181
+ }
162
182
  }
183
+ }
163
184
 
164
- &:checked:hover + .fake-checkbox {
165
- background-color: var(--color-brand-item-hover);
166
- }
185
+ &.accent--warning {
186
+ .input:not(:disabled) {
187
+ & + .fake-checkbox {
188
+ border-color: var(--color-warning-txt-base);
189
+ }
167
190
 
168
- &:checked:active + .fake-checkbox {
169
- background-color: var(--color-brand-item-active);
170
- }
171
- }
172
- }
191
+ &.indeterminate + .fake-checkbox {
192
+ background-color: var(--color-warning-txt-base);
173
193
 
174
- &.accent--warning {
175
- .input:not(:disabled) {
176
- & + .fake-checkbox {
177
- border-color: var(--color-warning-item-base);
178
- }
194
+ &:hover {
195
+ border-color: transparent;
196
+ background-color: var(--color-warning-txt-hover);
197
+ }
179
198
 
180
- &.indeterminate + .fake-checkbox {
181
- background-color: var(--color-warning-item-base);
199
+ &:active {
200
+ background-color: var(--color-warning-txt-active);
201
+ }
202
+ }
182
203
 
183
- &:hover {
204
+ &.indeterminate:hover + .fake-checkbox {
184
205
  border-color: transparent;
185
- background-color: var(--color-warning-item-hover);
206
+ background-color: var(--color-warning-txt-hover);
186
207
  }
187
208
 
188
- &:active {
189
- background-color: var(--color-warning-item-active);
209
+ &:hover + .fake-checkbox {
210
+ border-color: var(--color-warning-txt-hover);
190
211
  }
191
- }
192
-
193
- &.indeterminate:hover + .fake-checkbox {
194
- border-color: transparent;
195
- background-color: var(--color-warning-item-hover);
196
- }
197
212
 
198
- &:hover + .fake-checkbox {
199
- border-color: var(--color-warning-item-hover);
200
- }
201
-
202
- &:focus-visible + .fake-checkbox::before {
203
- border: 0.2rem solid var(--color-brand-txt-base);
204
- }
213
+ &:focus-visible + .fake-checkbox::before {
214
+ border: 0.2rem solid var(--color-brand-txt-base);
215
+ }
205
216
 
206
- &:active + .fake-checkbox {
207
- border-color: var(--color-warning-item-active);
208
- }
217
+ &:active + .fake-checkbox {
218
+ border-color: var(--color-warning-txt-active);
219
+ }
209
220
 
210
- &:checked + .fake-checkbox {
211
- border-color: transparent;
212
- background-color: var(--color-warning-item-base);
213
- }
221
+ &:checked + .fake-checkbox {
222
+ border-color: transparent;
223
+ background-color: var(--color-warning-txt-base);
224
+ }
214
225
 
215
- &:checked:hover + .fake-checkbox {
216
- background-color: var(--color-warning-item-hover);
217
- }
226
+ &:checked:hover + .fake-checkbox {
227
+ background-color: var(--color-warning-txt-hover);
228
+ }
218
229
 
219
- &:checked:active + .fake-checkbox {
220
- background-color: var(--color-warning-item-active);
230
+ &:checked:active + .fake-checkbox {
231
+ background-color: var(--color-warning-txt-active);
232
+ }
221
233
  }
222
234
  }
223
- }
224
235
 
225
- &.accent--danger {
226
- .input:not(:disabled) {
227
- & + .fake-checkbox {
228
- border-color: var(--color-danger-item-base);
236
+ &.accent--danger {
237
+ .input:not(:disabled) {
238
+ & + .fake-checkbox {
239
+ border-color: var(--color-danger-txt-base);
229
240
 
230
- > .icon {
231
- color: var(--color-danger-txt-item);
241
+ > .icon {
242
+ color: var(--color-danger-txt-item);
243
+ }
232
244
  }
233
- }
234
245
 
235
- &.indeterminate + .fake-checkbox {
236
- background-color: var(--color-danger-item-base);
246
+ &.indeterminate + .fake-checkbox {
247
+ background-color: var(--color-danger-txt-base);
237
248
 
238
- &:hover {
239
- border-color: transparent;
240
- background-color: var(--color-danger-item-hover);
241
- }
249
+ &:hover {
250
+ border-color: transparent;
251
+ background-color: var(--color-danger-txt-hover);
252
+ }
242
253
 
243
- &:active {
244
- background-color: var(--color-danger-item-active);
254
+ &:active {
255
+ background-color: var(--color-danger-txt-active);
256
+ }
245
257
  }
246
- }
247
258
 
248
- &.indeterminate:hover + .fake-checkbox {
249
- border-color: transparent;
250
- background-color: var(--color-danger-item-hover);
251
- }
259
+ &.indeterminate:hover + .fake-checkbox {
260
+ border-color: transparent;
261
+ background-color: var(--color-danger-txt-hover);
262
+ }
252
263
 
253
- &:hover + .fake-checkbox {
254
- border-color: var(--color-danger-item-hover);
255
- }
264
+ &:hover + .fake-checkbox {
265
+ border-color: var(--color-danger-txt-hover);
266
+ }
256
267
 
257
- &:focus-visible + .fake-checkbox::before {
258
- border: 0.2rem solid var(--color-brand-txt-base);
259
- }
268
+ &:focus-visible + .fake-checkbox::before {
269
+ border: 0.2rem solid var(--color-brand-txt-base);
270
+ }
260
271
 
261
- &:active + .fake-checkbox {
262
- border-color: var(--color-danger-item-active);
263
- }
272
+ &:active + .fake-checkbox {
273
+ border-color: var(--color-danger-txt-active);
274
+ }
264
275
 
265
- &:checked + .fake-checkbox {
266
- border-color: transparent;
267
- background-color: var(--color-danger-item-base);
268
- }
276
+ &:checked + .fake-checkbox {
277
+ border-color: transparent;
278
+ background-color: var(--color-danger-txt-base);
279
+ }
269
280
 
270
- &:checked:hover + .fake-checkbox {
271
- background-color: var(--color-danger-item-hover);
272
- }
281
+ &:checked:hover + .fake-checkbox {
282
+ background-color: var(--color-danger-txt-hover);
283
+ }
273
284
 
274
- &:checked:active + .fake-checkbox {
275
- background-color: var(--color-danger-item-active);
285
+ &:checked:active + .fake-checkbox {
286
+ background-color: var(--color-danger-txt-active);
287
+ }
276
288
  }
277
289
  }
278
- }
279
290
 
280
- .input:disabled {
281
- & + .fake-checkbox {
282
- cursor: not-allowed;
283
- border-color: var(--color-neutral-txt-secondary);
291
+ .input:disabled {
292
+ & + .fake-checkbox {
293
+ cursor: not-allowed;
294
+ border-color: var(--color-neutral-txt-secondary);
284
295
 
285
- > .icon {
286
- color: var(--color-neutral-background-disabled);
296
+ > .icon {
297
+ color: var(--color-neutral-background-disabled);
298
+ }
287
299
  }
288
- }
289
300
 
290
- &:checked + .fake-checkbox,
291
- &.indeterminate + .fake-checkbox {
292
- border-color: transparent;
293
- background-color: var(--color-neutral-txt-secondary);
301
+ &:checked + .fake-checkbox,
302
+ &.indeterminate + .fake-checkbox {
303
+ border-color: transparent;
304
+ background-color: var(--color-neutral-txt-secondary);
305
+ }
294
306
  }
295
307
  }
296
308
  }
package/lib/i18n.ts CHANGED
@@ -93,6 +93,10 @@ export const locales: Locales = {
93
93
  code: 'pt',
94
94
  name: 'Português',
95
95
  },
96
+ ar: {
97
+ code: 'ar',
98
+ name: 'العربية',
99
+ },
96
100
  }
97
101
 
98
102
  export default createI18n({
@@ -0,0 +1 @@
1
+ {}