Skip to content

Commit

Permalink
feat(lite/component): created UiResources + UiResource (#6932)
Browse files Browse the repository at this point in the history
  • Loading branch information
ByScripts committed Aug 1, 2023
1 parent d307730 commit abd0a30
Show file tree
Hide file tree
Showing 6 changed files with 179 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
</AppMenu>
</UiTabBar>

<div class="tabs">
<div :class="{ 'full-width': fullWidthComponent }" class="tabs">
<UiCard v-if="selectedTab === TAB.NONE" class="tab-content">
<i>No configuration defined</i>
</UiCard>
Expand Down Expand Up @@ -102,11 +102,11 @@ import StorySettingParams from "@/components/component-story/StorySettingParams.
import StorySlotParams from "@/components/component-story/StorySlotParams.vue";
import AppMenu from "@/components/menu/AppMenu.vue";
import MenuItem from "@/components/menu/MenuItem.vue";
import UiIcon from "@/components/ui/icon/UiIcon.vue";
import UiButton from "@/components/ui/UiButton.vue";
import UiCard from "@/components/ui/UiCard.vue";
import UiCardTitle from "@/components/ui/UiCardTitle.vue";
import UiCounter from "@/components/ui/UiCounter.vue";
import UiIcon from "@/components/ui/icon/UiIcon.vue";
import UiTab from "@/components/ui/UiTab.vue";
import UiTabBar from "@/components/ui/UiTabBar.vue";
import {
Expand Down Expand Up @@ -140,6 +140,7 @@ const props = defineProps<{
settings?: Record<string, any>;
}
>;
fullWidthComponent?: boolean;
}>();
enum TAB {
Expand Down Expand Up @@ -329,6 +330,10 @@ const applyPreset = (preset: {
padding: 1rem;
gap: 1rem;
&.full-width {
flex-direction: column;
}
.tab-content {
flex: 1;
height: auto;
Expand Down
50 changes: 50 additions & 0 deletions @xen-orchestra/lite/src/components/ui/resources/UiResource.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<template>
<li class="ui-resource">
<UiIcon :icon="icon" class="icon" />
<div class="separator" />
<div class="label">{{ label }}</div>
<div class="count">{{ count }}</div>
</li>
</template>

<script lang="ts" setup>
import UiIcon from "@/components/ui/icon/UiIcon.vue";
import type { IconDefinition } from "@fortawesome/fontawesome-common-types";
defineProps<{
icon: IconDefinition;
label: string;
count: string | number;
}>();
</script>

<style lang="postcss" scoped>
.ui-resource {
display: flex;
align-items: center;
}
.icon {
color: var(--color-extra-blue-base);
font-size: 3.2rem;
}
.separator {
height: 4.5rem;
width: 0;
border-left: 0.1rem solid var(--color-extra-blue-base);
background-color: var(--color-extra-blue-base);
margin: 0 1.5rem;
}
.label {
font-size: 1.6rem;
font-weight: 700;
}
.count {
font-size: 1.4rem;
font-weight: 400;
margin-left: 2rem;
}
</style>
13 changes: 13 additions & 0 deletions @xen-orchestra/lite/src/components/ui/resources/UiResources.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<template>
<ul class="ui-resources">
<slot />
</ul>
</template>

<style lang="postcss" scoped>
.ui-resources {
display: flex;
gap: 1rem 5.4rem;
flex-wrap: wrap;
}
</style>
70 changes: 70 additions & 0 deletions @xen-orchestra/lite/src/stories/ui-resource.story.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<template>
<ComponentStory
v-slot="{ properties }"
:params="[
iconProp().preset(faRocket),
prop('label').required().str().widget().preset('Rockets'),
prop('count')
.required()
.type('string | number')
.widget(text())
.preset('175'),
]"
:presets="presets"
>
<UiResource v-bind="properties" />
</ComponentStory>
</template>

<script lang="ts" setup>
import ComponentStory from "@/components/component-story/ComponentStory.vue";
import UiResource from "@/components/ui/resources/UiResource.vue";
import { iconProp, prop } from "@/libs/story/story-param";
import { text } from "@/libs/story/story-widget";
import {
faDatabase,
faDisplay,
faMemory,
faMicrochip,
faNetworkWired,
faRocket,
} from "@fortawesome/free-solid-svg-icons";
const presets = {
VMs: {
props: {
icon: faDisplay,
count: 1,
label: "VMs",
},
},
vCPUs: {
props: {
icon: faMicrochip,
count: 4,
label: "vCPUs",
},
},
RAM: {
props: {
icon: faMemory,
count: 2,
label: "RAM",
},
},
SR: {
props: {
icon: faDatabase,
count: 1,
label: "SR",
},
},
Interfaces: {
props: {
icon: faNetworkWired,
count: 2,
label: "Interfaces",
},
},
};
</script>
11 changes: 11 additions & 0 deletions @xen-orchestra/lite/src/stories/ui-resources.story.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Example

```vue-template
<UiResources>
<UiResource :icon="faDisplay" count="1" label="VMs" />
<UiResource :icon="faMicrochip" count="4" label="vCPUs" />
<UiResource :icon="faMemory" count="2" label="RAM" />
<UiResource :icon="faDatabase" count="1" label="SR" />
<UiResource :icon="faNetworkWired" count="2" label="Interfaces" />
</UiResources>
```
28 changes: 28 additions & 0 deletions @xen-orchestra/lite/src/stories/ui-resources.story.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<template>
<ComponentStory
:params="[slot().help('One or multiple `UiResource`')]"
full-width-component
>
<UiResources>
<UiResource :icon="faDisplay" count="1" label="VMs" />
<UiResource :icon="faMicrochip" count="4" label="vCPUs" />
<UiResource :icon="faMemory" count="2" label="RAM" />
<UiResource :icon="faDatabase" count="1" label="SR" />
<UiResource :icon="faNetworkWired" count="2" label="Interfaces" />
</UiResources>
</ComponentStory>
</template>

<script lang="ts" setup>
import ComponentStory from "@/components/component-story/ComponentStory.vue";
import UiResource from "@/components/ui/resources/UiResource.vue";
import UiResources from "@/components/ui/resources/UiResources.vue";
import { slot } from "@/libs/story/story-param";
import {
faDatabase,
faDisplay,
faMemory,
faMicrochip,
faNetworkWired,
} from "@fortawesome/free-solid-svg-icons";
</script>

0 comments on commit abd0a30

Please sign in to comment.