@xen-orchestra/web-core 0.33.0 → 0.35.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.
- package/lib/components/dropdown/{DropdownTitle.vue → VtsDropdownTitle.vue} +4 -4
- package/lib/components/input-wrapper/VtsInputWrapper.vue +1 -10
- package/lib/components/label-value-list/VtsLabelValueList.vue +46 -0
- package/lib/components/menu/MenuList.vue +1 -0
- package/lib/components/progress-bar/VtsProgressBar.vue +8 -3
- package/lib/components/size-progress-cell/VtsSizeProgressCell.vue +36 -0
- package/lib/components/space-card/VtsSpaceCard.vue +94 -0
- package/lib/components/ui/input/UiInput.vue +5 -7
- package/lib/components/ui/label/UiLabel.vue +4 -15
- package/lib/components/ui/tag/UiTag.vue +4 -1
- package/lib/components/ui/tag/UiTagsList.vue +11 -1
- package/lib/components/ui/text-area/UiTextarea.vue +1 -3
- package/lib/i18n.ts +4 -0
- package/lib/icons/fa-icons.ts +4 -0
- package/lib/icons/legacy-icons.ts +33 -8
- package/lib/locales/cs.json +12 -6
- package/lib/locales/da.json +261 -0
- package/lib/locales/de.json +3 -3
- package/lib/locales/en.json +57 -7
- package/lib/locales/es.json +1 -5
- package/lib/locales/fa.json +1 -1
- package/lib/locales/fr.json +61 -11
- package/lib/locales/it.json +9 -0
- package/lib/locales/nl.json +10 -5
- package/lib/locales/pt_BR.json +75 -16
- package/lib/locales/ru.json +1 -5
- package/lib/locales/sv.json +1 -5
- package/lib/locales/uk.json +2 -6
- package/lib/packages/remote-resource/README.md +32 -0
- package/lib/packages/remote-resource/define-remote-resource.ts +107 -17
- package/lib/packages/remote-resource/sse.store.ts +140 -0
- package/lib/types/utility.type.ts +6 -0
- package/lib/utils/progress.util.ts +7 -5
- package/package.json +1 -1
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
TODO: Replace `span` with `UiButton` when new version (with tertiary) is available
|
|
4
4
|
-->
|
|
5
5
|
<template>
|
|
6
|
-
<div class="dropdown-title">
|
|
6
|
+
<div class="vts-dropdown-title">
|
|
7
7
|
<VtsIcon :name="icon" size="medium" />
|
|
8
|
-
<div class="
|
|
8
|
+
<div class="typo-caption-small">
|
|
9
9
|
<slot />
|
|
10
10
|
</div>
|
|
11
11
|
<div v-if="onToggleSelectAll" class="buttons">
|
|
@@ -41,12 +41,12 @@ const { t } = useI18n()
|
|
|
41
41
|
</script>
|
|
42
42
|
|
|
43
43
|
<style lang="postcss" scoped>
|
|
44
|
-
.dropdown-title {
|
|
44
|
+
.vts-dropdown-title {
|
|
45
45
|
display: flex;
|
|
46
46
|
align-items: center;
|
|
47
47
|
padding: 0.4rem 1.6rem;
|
|
48
48
|
gap: 0.8rem;
|
|
49
|
-
height: 2.
|
|
49
|
+
height: 2.9rem;
|
|
50
50
|
background: var(--color-neutral-background-secondary);
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="vts-input-wrapper">
|
|
3
|
-
<UiLabel
|
|
4
|
-
:accent="labelAccent"
|
|
5
|
-
:for="id"
|
|
6
|
-
:href="learnMoreUrl"
|
|
7
|
-
:icon
|
|
8
|
-
:required="wrapperController.required"
|
|
9
|
-
class="label"
|
|
10
|
-
>
|
|
3
|
+
<UiLabel :accent="labelAccent" :for="id" :href="learnMoreUrl" :required="wrapperController.required" class="label">
|
|
11
4
|
<slot name="label">{{ label }}</slot>
|
|
12
5
|
</UiLabel>
|
|
13
6
|
<slot />
|
|
@@ -21,7 +14,6 @@
|
|
|
21
14
|
import UiInfo, { type InfoAccent } from '@core/components/ui/info/UiInfo.vue'
|
|
22
15
|
import UiLabel, { type LabelAccent } from '@core/components/ui/label/UiLabel.vue'
|
|
23
16
|
import { useRanked } from '@core/composables/ranked.composable.ts'
|
|
24
|
-
import type { IconName } from '@core/icons'
|
|
25
17
|
import { useMapper } from '@core/packages/mapper/use-mapper.ts'
|
|
26
18
|
import type { MaybeArray } from '@core/types/utility.type'
|
|
27
19
|
import { IK_INPUT_WRAPPER_CONTROLLER } from '@core/utils/injection-keys.util'
|
|
@@ -40,7 +32,6 @@ export type InputWrapperController = {
|
|
|
40
32
|
const { message: _message } = defineProps<{
|
|
41
33
|
label?: string
|
|
42
34
|
learnMoreUrl?: string
|
|
43
|
-
icon?: IconName
|
|
44
35
|
message?: InputWrapperMessage
|
|
45
36
|
}>()
|
|
46
37
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<template v-for="(value, label) in fields" :key="label">
|
|
3
|
+
<VtsCardRowKeyValue v-if="isPrimitiveOrBooleanString(value)">
|
|
4
|
+
<template #key>
|
|
5
|
+
<span class="label">{{ label }}</span>
|
|
6
|
+
</template>
|
|
7
|
+
<template #value>
|
|
8
|
+
<template v-if="isBooleanLike(value)">
|
|
9
|
+
<VtsEnabledState :enabled="toBoolean(value)" />
|
|
10
|
+
</template>
|
|
11
|
+
<template v-else>
|
|
12
|
+
{{ value }}
|
|
13
|
+
</template>
|
|
14
|
+
</template>
|
|
15
|
+
<template v-if="!isBooleanLike(value)" #addons>
|
|
16
|
+
<VtsCopyButton :value="String(value)" />
|
|
17
|
+
</template>
|
|
18
|
+
</VtsCardRowKeyValue>
|
|
19
|
+
<VtsLabelValueList v-else :fields="value" />
|
|
20
|
+
</template>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script lang="ts" setup>
|
|
24
|
+
import VtsCardRowKeyValue from '@core/components/card/VtsCardRowKeyValue.vue'
|
|
25
|
+
import VtsCopyButton from '@core/components/copy-button/VtsCopyButton.vue'
|
|
26
|
+
import VtsEnabledState from '@core/components/enabled-state/VtsEnabledState.vue'
|
|
27
|
+
|
|
28
|
+
defineProps<{
|
|
29
|
+
fields: Record<string, unknown> | unknown
|
|
30
|
+
}>()
|
|
31
|
+
|
|
32
|
+
const isBooleanString = (value: unknown): value is string => value === 'true' || value === 'false'
|
|
33
|
+
|
|
34
|
+
const isBooleanLike = (value: unknown): boolean => typeof value === 'boolean' || isBooleanString(value)
|
|
35
|
+
|
|
36
|
+
const toBoolean = (value: unknown): boolean => value === true || value === 'true'
|
|
37
|
+
|
|
38
|
+
const isPrimitiveOrBooleanString = (value: unknown): boolean =>
|
|
39
|
+
['number', 'string'].includes(typeof value) || isBooleanString(value)
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<style lang="postcss" scoped>
|
|
43
|
+
.label {
|
|
44
|
+
text-transform: capitalize;
|
|
45
|
+
}
|
|
46
|
+
</style>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="vts-progress-bar">
|
|
3
|
-
<UiDataRuler :max="percentageCap" :warning="threshold.payload" />
|
|
3
|
+
<UiDataRuler v-if="!noruler" :max="percentageCap" :warning="threshold.payload" />
|
|
4
4
|
<UiProgressBar :accent="threshold.payload.accent ?? 'info'" :fill-width :legend />
|
|
5
5
|
</div>
|
|
6
6
|
</template>
|
|
@@ -28,9 +28,10 @@ const {
|
|
|
28
28
|
} = defineProps<{
|
|
29
29
|
current: number
|
|
30
30
|
total: number
|
|
31
|
-
label
|
|
31
|
+
label?: string
|
|
32
32
|
legendType?: ProgressBarLegendType
|
|
33
33
|
thresholds?: ProgressBarThresholdConfig
|
|
34
|
+
noruler?: boolean
|
|
34
35
|
}>()
|
|
35
36
|
|
|
36
37
|
const progress = useProgress(
|
|
@@ -40,7 +41,11 @@ const progress = useProgress(
|
|
|
40
41
|
|
|
41
42
|
const { percentageCap, percentage, fillWidth } = progress
|
|
42
43
|
|
|
43
|
-
const legend = useProgressToLegend(
|
|
44
|
+
const legend = useProgressToLegend(
|
|
45
|
+
() => legendType,
|
|
46
|
+
() => label,
|
|
47
|
+
progress
|
|
48
|
+
)
|
|
44
49
|
|
|
45
50
|
const threshold = useThreshold(percentage, () => thresholds)
|
|
46
51
|
</script>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="progress-cell">
|
|
3
|
+
<VtsProgressBar :current :total noruler class="progress" />
|
|
4
|
+
<span>{{ n(percentage / 100, { maximumFractionDigits: 0, style: 'percent' }) }}</span>
|
|
5
|
+
</div>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup lang="ts">
|
|
9
|
+
import VtsProgressBar from '@core/components/progress-bar/VtsProgressBar.vue'
|
|
10
|
+
import { useProgress } from '@core/packages/progress/use-progress.ts'
|
|
11
|
+
import { useI18n } from 'vue-i18n'
|
|
12
|
+
|
|
13
|
+
const { current, total } = defineProps<{
|
|
14
|
+
current: number
|
|
15
|
+
total: number
|
|
16
|
+
}>()
|
|
17
|
+
|
|
18
|
+
const { n } = useI18n()
|
|
19
|
+
|
|
20
|
+
const { percentage } = useProgress(
|
|
21
|
+
() => current,
|
|
22
|
+
() => total
|
|
23
|
+
)
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<style lang="postcss" scoped>
|
|
27
|
+
.progress-cell {
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: 0.8rem;
|
|
31
|
+
|
|
32
|
+
.progress {
|
|
33
|
+
flex-grow: 1;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</style>
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<UiCard class="card-container">
|
|
3
|
+
<UiCardTitle>
|
|
4
|
+
{{ t('space') }}
|
|
5
|
+
</UiCardTitle>
|
|
6
|
+
|
|
7
|
+
<div class="content">
|
|
8
|
+
<VtsProgressBar noruler :current="used" :total :label legend-type="percent" class="progress" />
|
|
9
|
+
|
|
10
|
+
<VtsCardRowKeyValue>
|
|
11
|
+
<template #key>{{ t('used-space') }}</template>
|
|
12
|
+
<template #value>{{ usedSpace.formattedValue }}</template>
|
|
13
|
+
<template v-if="usedSpace.rawValue > 0" #addons>
|
|
14
|
+
<VtsCopyButton :value="usedSpace.formattedValue" />
|
|
15
|
+
</template>
|
|
16
|
+
</VtsCardRowKeyValue>
|
|
17
|
+
|
|
18
|
+
<VtsCardRowKeyValue>
|
|
19
|
+
<template #key>{{ t('free-space') }}</template>
|
|
20
|
+
<template #value>
|
|
21
|
+
{{ freeSpace.formattedValue }}
|
|
22
|
+
</template>
|
|
23
|
+
<template v-if="freeSpace.rawValue > 0" #addons>
|
|
24
|
+
<VtsCopyButton :value="freeSpace.formattedValue" />
|
|
25
|
+
</template>
|
|
26
|
+
</VtsCardRowKeyValue>
|
|
27
|
+
|
|
28
|
+
<VtsCardRowKeyValue>
|
|
29
|
+
<template #key>{{ totalSizeLabel ? totalSizeLabel : t('size') }}</template>
|
|
30
|
+
<template #value>
|
|
31
|
+
{{ totalSpace.formattedValue }}
|
|
32
|
+
</template>
|
|
33
|
+
<template v-if="totalSpace.rawValue > 0" #addons>
|
|
34
|
+
<VtsCopyButton :value="totalSpace.formattedValue" />
|
|
35
|
+
</template>
|
|
36
|
+
</VtsCardRowKeyValue>
|
|
37
|
+
</div>
|
|
38
|
+
</UiCard>
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<script setup lang="ts">
|
|
42
|
+
import VtsCardRowKeyValue from '@core/components/card/VtsCardRowKeyValue.vue'
|
|
43
|
+
import VtsCopyButton from '@core/components/copy-button/VtsCopyButton.vue'
|
|
44
|
+
import VtsProgressBar from '@core/components/progress-bar/VtsProgressBar.vue'
|
|
45
|
+
import UiCard from '@core/components/ui/card/UiCard.vue'
|
|
46
|
+
import UiCardTitle from '@core/components/ui/card-title/UiCardTitle.vue'
|
|
47
|
+
import { formatSize } from '@core/utils/size.util'
|
|
48
|
+
import { computed } from 'vue'
|
|
49
|
+
import { useI18n } from 'vue-i18n'
|
|
50
|
+
|
|
51
|
+
const { used, total } = defineProps<{
|
|
52
|
+
used: number
|
|
53
|
+
total: number
|
|
54
|
+
label: string
|
|
55
|
+
totalSizeLabel?: string
|
|
56
|
+
}>()
|
|
57
|
+
|
|
58
|
+
const { t } = useI18n()
|
|
59
|
+
|
|
60
|
+
const usedSpace = computed(() => ({
|
|
61
|
+
formattedValue: formatSize(used, 2),
|
|
62
|
+
rawValue: used,
|
|
63
|
+
}))
|
|
64
|
+
|
|
65
|
+
const totalSpace = computed(() => ({
|
|
66
|
+
formattedValue: formatSize(total, 2),
|
|
67
|
+
rawValue: total,
|
|
68
|
+
}))
|
|
69
|
+
|
|
70
|
+
const freeSpace = computed(() => {
|
|
71
|
+
const rawFreeSpace = total - used
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
formattedValue: formatSize(rawFreeSpace, 2),
|
|
75
|
+
rawValue: rawFreeSpace,
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
</script>
|
|
79
|
+
|
|
80
|
+
<style scoped lang="postcss">
|
|
81
|
+
.card-container {
|
|
82
|
+
gap: 1.6rem;
|
|
83
|
+
|
|
84
|
+
.content {
|
|
85
|
+
display: flex;
|
|
86
|
+
flex-direction: column;
|
|
87
|
+
gap: 0.4rem;
|
|
88
|
+
|
|
89
|
+
.progress {
|
|
90
|
+
margin-block-end: 1.6rem;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
</style>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
<!-- v5 -->
|
|
2
2
|
<template>
|
|
3
3
|
<div :class="toVariants({ accent, disabled })" class="ui-input" @click.self="focus()">
|
|
4
|
-
<VtsIcon :name="icon" size="medium" class="left-icon" />
|
|
5
4
|
<input
|
|
6
5
|
:id="wrapperController?.id ?? id"
|
|
7
6
|
ref="inputRef"
|
|
@@ -114,14 +113,9 @@ defineExpose({ focus })
|
|
|
114
113
|
min-width: 15rem;
|
|
115
114
|
padding-inline: 1.6rem;
|
|
116
115
|
|
|
117
|
-
.left-icon,
|
|
118
116
|
.right-icon {
|
|
119
117
|
pointer-events: none;
|
|
120
|
-
color: var(--color-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
&:not(.disabled) .right-icon {
|
|
124
|
-
color: var(--color-brand-item-base);
|
|
118
|
+
color: var(--color-brand-txt-base);
|
|
125
119
|
}
|
|
126
120
|
|
|
127
121
|
.input {
|
|
@@ -133,6 +127,10 @@ defineExpose({ focus })
|
|
|
133
127
|
&::placeholder {
|
|
134
128
|
color: var(--color-neutral-txt-secondary);
|
|
135
129
|
}
|
|
130
|
+
|
|
131
|
+
&::-webkit-search-cancel-button {
|
|
132
|
+
-webkit-appearance: none;
|
|
133
|
+
}
|
|
136
134
|
}
|
|
137
135
|
|
|
138
136
|
/* VARIANT */
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!-- v3 -->
|
|
2
2
|
<template>
|
|
3
3
|
<div :class="toVariants({ accent })" class="ui-label">
|
|
4
|
-
<
|
|
5
|
-
<label :for="htmlFor" :class="{ required }" class="typo-caption label">
|
|
4
|
+
<label :for="htmlFor" :class="{ required }" class="typo-body-bold label">
|
|
6
5
|
<slot />
|
|
7
6
|
</label>
|
|
8
|
-
<UiLink v-if="href"
|
|
7
|
+
<UiLink v-if="href" size="small" :href>{{ t('learn-more') }}</UiLink>
|
|
9
8
|
</div>
|
|
10
9
|
</template>
|
|
11
10
|
|
|
12
11
|
<script lang="ts" setup>
|
|
13
|
-
import VtsIcon from '@core/components/icon/VtsIcon.vue'
|
|
14
12
|
import UiLink from '@core/components/ui/link/UiLink.vue'
|
|
15
|
-
import type { IconName } from '@core/icons'
|
|
16
13
|
import { toVariants } from '@core/utils/to-variants.util'
|
|
17
14
|
import { useI18n } from 'vue-i18n'
|
|
18
15
|
|
|
@@ -21,7 +18,6 @@ export type LabelAccent = 'neutral' | 'warning' | 'danger'
|
|
|
21
18
|
const { for: htmlFor } = defineProps<{
|
|
22
19
|
accent: LabelAccent
|
|
23
20
|
for?: string
|
|
24
|
-
icon?: IconName
|
|
25
21
|
required?: boolean
|
|
26
22
|
href?: string
|
|
27
23
|
}>()
|
|
@@ -33,10 +29,7 @@ const { t } = useI18n()
|
|
|
33
29
|
.ui-label {
|
|
34
30
|
display: flex;
|
|
35
31
|
align-items: center;
|
|
36
|
-
|
|
37
|
-
.icon {
|
|
38
|
-
margin-right: 0.8rem;
|
|
39
|
-
}
|
|
32
|
+
justify-content: space-between;
|
|
40
33
|
|
|
41
34
|
.label {
|
|
42
35
|
&.required::after {
|
|
@@ -46,10 +39,6 @@ const { t } = useI18n()
|
|
|
46
39
|
}
|
|
47
40
|
}
|
|
48
41
|
|
|
49
|
-
.learn-more-link {
|
|
50
|
-
margin-left: auto;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
42
|
/* ACCENT VARIANTS */
|
|
54
43
|
|
|
55
44
|
&.accent--neutral {
|
|
@@ -5,12 +5,15 @@
|
|
|
5
5
|
<slot name="icon">
|
|
6
6
|
<VtsIcon :name="icon" size="medium" />
|
|
7
7
|
</slot>
|
|
8
|
-
<span class="text-ellipsis"
|
|
8
|
+
<span v-tooltip class="text-ellipsis">
|
|
9
|
+
<slot />
|
|
10
|
+
</span>
|
|
9
11
|
</span>
|
|
10
12
|
</template>
|
|
11
13
|
|
|
12
14
|
<script lang="ts" setup>
|
|
13
15
|
import VtsIcon from '@core/components/icon/VtsIcon.vue'
|
|
16
|
+
import { vTooltip } from '@core/directives/tooltip.directive.ts'
|
|
14
17
|
import type { IconName } from '@core/icons'
|
|
15
18
|
import { toVariants } from '@core/utils/to-variants.util'
|
|
16
19
|
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
<!-- v1 -->
|
|
2
2
|
<template>
|
|
3
|
-
<div class="ui-tags-list">
|
|
3
|
+
<div class="ui-tags-list" :class="{ nowrap }">
|
|
4
4
|
<slot />
|
|
5
5
|
</div>
|
|
6
6
|
</template>
|
|
7
7
|
|
|
8
|
+
<script lang="ts" setup>
|
|
9
|
+
defineProps<{
|
|
10
|
+
nowrap?: boolean
|
|
11
|
+
}>()
|
|
12
|
+
</script>
|
|
13
|
+
|
|
8
14
|
<style lang="postcss" scoped>
|
|
9
15
|
.ui-tags-list {
|
|
10
16
|
display: flex;
|
|
11
17
|
flex-wrap: wrap;
|
|
12
18
|
gap: 0.4rem;
|
|
13
19
|
}
|
|
20
|
+
|
|
21
|
+
.nowrap {
|
|
22
|
+
flex-wrap: nowrap;
|
|
23
|
+
}
|
|
14
24
|
</style>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- v2 -->
|
|
2
2
|
<template>
|
|
3
3
|
<div class="ui-textarea" :class="toVariants({ accent: hasMaxCharactersError ? 'danger' : accent })">
|
|
4
|
-
<UiLabel v-if="slots.default" :accent="labelAccent" :required :
|
|
4
|
+
<UiLabel v-if="slots.default" :accent="labelAccent" :required :href :for="id">
|
|
5
5
|
<slot />
|
|
6
6
|
</UiLabel>
|
|
7
7
|
<textarea v-bind="attrs" :id ref="textarea" v-model="model" :disabled class="textarea" />
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
import UiCharacterLimit from '@core/components/ui/character-limit/UiCharacterLimit.vue'
|
|
20
20
|
import UiInfo from '@core/components/ui/info/UiInfo.vue'
|
|
21
21
|
import UiLabel from '@core/components/ui/label/UiLabel.vue'
|
|
22
|
-
import type { IconName } from '@core/icons'
|
|
23
22
|
import { toVariants } from '@core/utils/to-variants.util'
|
|
24
23
|
import { useFocus } from '@vueuse/core'
|
|
25
24
|
import { computed, useAttrs, useId, useTemplateRef } from 'vue'
|
|
@@ -39,7 +38,6 @@ const {
|
|
|
39
38
|
maxCharacters?: number
|
|
40
39
|
disabled?: boolean
|
|
41
40
|
href?: string
|
|
42
|
-
icon?: IconName
|
|
43
41
|
required?: boolean
|
|
44
42
|
}>()
|
|
45
43
|
|
package/lib/i18n.ts
CHANGED
package/lib/icons/fa-icons.ts
CHANGED
|
@@ -65,6 +65,7 @@ import {
|
|
|
65
65
|
faFloppyDisk,
|
|
66
66
|
faFont,
|
|
67
67
|
faGear,
|
|
68
|
+
faHardDrive,
|
|
68
69
|
faHashtag,
|
|
69
70
|
faHeadset,
|
|
70
71
|
faInfo,
|
|
@@ -88,6 +89,7 @@ import {
|
|
|
88
89
|
faPlug,
|
|
89
90
|
faPlus,
|
|
90
91
|
faPowerOff,
|
|
92
|
+
faPuzzlePiece,
|
|
91
93
|
faRemove,
|
|
92
94
|
faRepeat,
|
|
93
95
|
faRotateLeft,
|
|
@@ -174,6 +176,7 @@ export const faIcons = defineIconPack({
|
|
|
174
176
|
'folder-open': { icon: faFolderOpen },
|
|
175
177
|
font: { icon: faFont },
|
|
176
178
|
gear: { icon: faGear },
|
|
179
|
+
'hard-drive': { icon: faHardDrive },
|
|
177
180
|
hashtag: { icon: faHashtag },
|
|
178
181
|
headset: { icon: faHeadset },
|
|
179
182
|
info: { icon: faInfo },
|
|
@@ -210,6 +213,7 @@ export const faIcons = defineIconPack({
|
|
|
210
213
|
star: { icon: faStar },
|
|
211
214
|
stop: { icon: faStop },
|
|
212
215
|
tags: { icon: faTags },
|
|
216
|
+
template: { icon: faPuzzlePiece },
|
|
213
217
|
time: { icon: faClock },
|
|
214
218
|
'thumb-tack': { icon: faThumbTack },
|
|
215
219
|
'thumb-tack-slash': { icon: faThumbTackSlash },
|
|
@@ -44,10 +44,17 @@ export const legacyIcons = defineIconPack({
|
|
|
44
44
|
icon: accent === 'success' ? faCheck : faExclamation,
|
|
45
45
|
},
|
|
46
46
|
]),
|
|
47
|
-
halted:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
halted: [
|
|
48
|
+
{
|
|
49
|
+
icon: faCircle,
|
|
50
|
+
color: 'var(--color-danger-item-base)',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
icon: faStop,
|
|
54
|
+
color: 'var(--color-danger-txt-item)',
|
|
55
|
+
size: 8,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
51
58
|
info: {
|
|
52
59
|
icon: faCircleInfo,
|
|
53
60
|
color: 'var(--color-info-item-base)',
|
|
@@ -68,10 +75,17 @@ export const legacyIcons = defineIconPack({
|
|
|
68
75
|
size: 8,
|
|
69
76
|
},
|
|
70
77
|
],
|
|
71
|
-
running:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
running: [
|
|
79
|
+
{
|
|
80
|
+
icon: faCircle,
|
|
81
|
+
color: 'var(--color-success-item-base)',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
icon: faPlay,
|
|
85
|
+
color: 'var(--color-success-txt-item)',
|
|
86
|
+
size: 8,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
75
89
|
status: defineIcon([['info', 'success', 'warning', 'danger', 'muted']], accent => [
|
|
76
90
|
{
|
|
77
91
|
icon: faCircle,
|
|
@@ -87,4 +101,15 @@ export const legacyIcons = defineIconPack({
|
|
|
87
101
|
icon: faMoon,
|
|
88
102
|
color: 'var(--color-info-item-base)',
|
|
89
103
|
},
|
|
104
|
+
checked: [
|
|
105
|
+
{
|
|
106
|
+
icon: faCircle,
|
|
107
|
+
color: 'var(--color-success-item-base)',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
icon: faCheck,
|
|
111
|
+
color: 'var(--color-success-txt-item)',
|
|
112
|
+
size: 8,
|
|
113
|
+
},
|
|
114
|
+
],
|
|
90
115
|
})
|
package/lib/locales/cs.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"api-info-details": "Podrobnosti o informaci z API",
|
|
35
35
|
"api-warning-details": "Podrobnosti o varování z API",
|
|
36
36
|
"appearance": "Vzhled",
|
|
37
|
+
"aria.breadcrumb.label": "Drobečková navigace",
|
|
37
38
|
"ascending": "vzestupně",
|
|
38
39
|
"auto-generated": "Automaticky vytvořeno",
|
|
39
40
|
"auto-power": "Automatické zapínání",
|
|
@@ -50,12 +51,12 @@
|
|
|
50
51
|
"backup-repositories": "Repozitáře zálohy",
|
|
51
52
|
"backup-repository": "Repozitář pro zálohy (místní, NFS, SMB)",
|
|
52
53
|
"backup-targets": "Cíle zálohování",
|
|
53
|
-
"backup.continuous-replication": "Průběžná replikace",
|
|
54
|
-
"backup.disaster-recovery": "Obnova po havárii",
|
|
55
54
|
"backup.full": "Plná záloha",
|
|
55
|
+
"backup.full-replication": "Úplná replikace",
|
|
56
56
|
"backup.incremental": "Přírůstková záloha",
|
|
57
|
-
"backup.
|
|
58
|
-
"backup.mirror": "
|
|
57
|
+
"backup.incremental-replication": "Přírůstková replikace",
|
|
58
|
+
"backup.mirror.full": "Zrcadlová úplná záloha",
|
|
59
|
+
"backup.mirror.incremental": "Zrcadlová přírůstková záloha",
|
|
59
60
|
"backup.pool-metadata": "Metadata fondu",
|
|
60
61
|
"backup.rolling-snapshot": "Průběžně zachycovaný stav",
|
|
61
62
|
"backup.xo-config": "Nastavení XO",
|
|
@@ -78,7 +79,6 @@
|
|
|
78
79
|
"bond-devices": "Zařízení svazku",
|
|
79
80
|
"bond-status": "Stav svazku",
|
|
80
81
|
"boot-firmware": "Firmware zavádění",
|
|
81
|
-
"boot-firmware-bios": "Šablona už obsahuje řetězec BIOS",
|
|
82
82
|
"boot-firmware-uefi": "Firmware, kterým zaváděno, je UEFI",
|
|
83
83
|
"boot-vm": "Nastartovat virt. stroj",
|
|
84
84
|
"build-number": "Číslo sestavení",
|
|
@@ -293,6 +293,8 @@
|
|
|
293
293
|
"ip-addresses": "IP adresy",
|
|
294
294
|
"ip-mode": "Režim IP",
|
|
295
295
|
"ip-port-placeholder": "adresa[:port]",
|
|
296
|
+
"ipv4": "IPv4 adresa | IPv4 adresy",
|
|
297
|
+
"ipv6": "IPv6 adresa | IPv6 adresy",
|
|
296
298
|
"is-primary-host": "{name} je hlavní hostitel",
|
|
297
299
|
"iscsi-iqn": "iSCSI IQN název",
|
|
298
300
|
"iso-dvd": "ISO/DVD",
|
|
@@ -367,6 +369,7 @@
|
|
|
367
369
|
"manage-citrix-pv-drivers-via-windows-update": "Spravovat citrix PV ovladače prostřednictvím Windows Update",
|
|
368
370
|
"management": "Správa",
|
|
369
371
|
"management-agent-version": "Verze agenta pro správu",
|
|
372
|
+
"management-ip": "IP adresa správy",
|
|
370
373
|
"manufacturer-info": "Informace o výrobci",
|
|
371
374
|
"master": "Hlavní hostitel",
|
|
372
375
|
"maximum-cpu-limit": "Limit procesoru nejvýše",
|
|
@@ -383,7 +386,7 @@
|
|
|
383
386
|
"minimum-dynamic-memory": "Dynamicky přidělované paměti nejméně",
|
|
384
387
|
"minimum-static-memory": "Staticky přidělené paměti nejméně",
|
|
385
388
|
"missing-patches": "Chybějící záplaty",
|
|
386
|
-
"mode": "Režim",
|
|
389
|
+
"mode": "Režim | Režimy",
|
|
387
390
|
"more-actions": "Další akce",
|
|
388
391
|
"mtu": "MTU",
|
|
389
392
|
"multi-creation": "Vícenásobné vytvoření",
|
|
@@ -427,6 +430,7 @@
|
|
|
427
430
|
"no-config": "Žádné nastavení",
|
|
428
431
|
"no-data": "Žádné údaje",
|
|
429
432
|
"no-data-to-calculate": "Žádná data k výpočtu",
|
|
433
|
+
"no-hosts-detected": "Nezjištěni žádní hostitelé.",
|
|
430
434
|
"no-network-detected": "Nezjištěna žádná síť",
|
|
431
435
|
"no-pif-detected": "Nezjištěno žádné fyz. rozhraní",
|
|
432
436
|
"no-pools-detected": "Nezjištěny žádné fondy",
|
|
@@ -573,6 +577,7 @@
|
|
|
573
577
|
"snapshot": "Zachytit stav",
|
|
574
578
|
"snapshot-mode": "Režim zachyceného stavu",
|
|
575
579
|
"sockets-with-cores-per-socket": "{nSockets} patic × {nCores} jader/patici",
|
|
580
|
+
"software": "Software",
|
|
576
581
|
"software-tooling": "Software a nástroje",
|
|
577
582
|
"sort-by": "Seřadit podle",
|
|
578
583
|
"source-backup-repository": "Zdrojový repozitář záloh",
|
|
@@ -627,6 +632,7 @@
|
|
|
627
632
|
"tasks.quick-view.failed": "Nezdařilo se",
|
|
628
633
|
"tasks.quick-view.in-progress": "Probíhá",
|
|
629
634
|
"template": "Šablona",
|
|
635
|
+
"template-has-bios-strings": "Šablona už obsahuje řetězec BIOS",
|
|
630
636
|
"theme-auto": "Automaticky",
|
|
631
637
|
"theme-dark": "Tmavý",
|
|
632
638
|
"theme-light": "Světlý",
|