@appscode/design-system 2.17.25 → 2.17.26-alpha
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/main.scss +4 -1
- package/package.json +1 -1
- package/vue-components/styles/base/utilities/_global.scss +8 -0
- package/vue-components/styles/base/utilities/_typography.scss +5 -0
- package/vue-components/styles/components/_ac-duration.scss +50 -0
- package/vue-components/styles/components/_file-explore.scss +31 -0
- package/vue-components/styles/components/cards/_all.scss +1 -1
- package/vue-components/styles/components/cards/_cards-group.scss +26 -0
- package/vue-components/styles/components/form-fields/_input-card.scss +3 -1
- package/vue-components/styles/components/form-fields/_input.scss +63 -1
- package/vue-components/v3/alert/AlertLinked.vue +32 -0
- package/vue-components/v3/cards/UsageTableCard.vue +25 -4
- package/vue-components/v3/config-secret/ConfigSecret.vue +61 -0
- package/vue-components/v3/editor/Editor.vue +3 -4
- package/vue-components/v3/form-fields/AcSingleInput.vue +20 -0
- package/vue-components/v3/form-fields/CheckRadio.vue +3 -1
- package/vue-components/v3/icons/ArrowDownLongIcon.vue +8 -0
- package/vue-components/v3/icons/ArrowRightIcon.vue +14 -0
- package/vue-components/v3/icons/InfoLightIcon.vue +15 -0
- package/vue-components/v3/icons/MachineCpuIcon.vue +8 -0
- package/vue-components/v3/icons/MachineMemoryIcon.vue +8 -0
- package/vue-components/v3/icons/StorageIcon-2.vue +14 -0
- package/vue-components/v3/node-selection/NodeSelection.vue +82 -0
- package/vue-components/v3/postgres/Postgres.vue +33 -0
- package/vue-components/v3/replica-set/MachineProfile.vue +119 -0
- package/vue-components/v3/replica-set/MultiMachineProfile.vue +100 -0
- package/vue-components/v3/replica-set/UpgradeSet.vue +40 -0
- package/vue-components/v3/scaling-rules/ScalingRules.vue +93 -0
- package/vue-components/v3/section/SectionContent.vue +1 -1
- package/vue-components/v3/threshold/UsageThreshold.vue +24 -0
- package/vue-components/v3/time/AcDuration.vue +167 -0
- package/vue-components/v3/time/AcDurationNew.vue +235 -0
package/main.scss
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
// @import "@/components/vue-components/styles/components/all";
|
|
18
18
|
@import "@/components/vue-components/styles/components/button";
|
|
19
19
|
@import "@/components/vue-components/styles/components/table";
|
|
20
|
+
@import "@/components/vue-components/styles/components/tabs";
|
|
20
21
|
@import "@/components/vue-components/styles/components/avatar";
|
|
21
22
|
@import "@/components/vue-components/styles/components/terminal";
|
|
22
23
|
@import "@/components/vue-components/styles/components/steps";
|
|
@@ -30,6 +31,8 @@
|
|
|
30
31
|
@import "@/components/vue-components/styles/components/dropdown";
|
|
31
32
|
@import "@/components/vue-components/styles/components/badge-tags";
|
|
32
33
|
@import "@/components/vue-components/styles/components/platform-design";
|
|
33
|
-
@import "@/components/vue-components/styles/components/cards/
|
|
34
|
+
@import "@/components/vue-components/styles/components/cards/cards-group";
|
|
35
|
+
@import "@/components/vue-components/styles/components/file-explore";
|
|
36
|
+
@import "@/components/vue-components/styles/components/ac-duration";
|
|
34
37
|
|
|
35
38
|
// @import "@/components/vue-components/styles/theme/appscode.scss";
|
package/package.json
CHANGED
|
@@ -690,3 +690,11 @@ $whitespace-values: normal, nowrap, pre, pre-line, pre-wrap, break-spaces;
|
|
|
690
690
|
.is-no-underlined {
|
|
691
691
|
text-decoration: none !important;
|
|
692
692
|
}
|
|
693
|
+
|
|
694
|
+
.container-sm {
|
|
695
|
+
max-width: 1080px;
|
|
696
|
+
margin: 0 auto;
|
|
697
|
+
&.is-fullwidth {
|
|
698
|
+
max-width: 100%;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.ac-duration-wrapper {
|
|
2
|
+
position: relative;
|
|
3
|
+
z-index: 1;
|
|
4
|
+
.ac-duration {
|
|
5
|
+
position: absolute;
|
|
6
|
+
bottom: 30px;
|
|
7
|
+
left: 0;
|
|
8
|
+
z-index: 999;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
.ac-duration {
|
|
12
|
+
height: 261px;
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
text-align: center;
|
|
16
|
+
box-shadow: 0px 4px 24px 0px rgba(0, 0, 0, 0.15);
|
|
17
|
+
border: 1px solid $color-border;
|
|
18
|
+
background-color: #fff;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
border-radius: 4px;
|
|
21
|
+
.duration {
|
|
22
|
+
padding: 8px 16px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.duration-header {
|
|
26
|
+
background-color: $secondary-light-gray;
|
|
27
|
+
padding: 8px;
|
|
28
|
+
}
|
|
29
|
+
.duration-body {
|
|
30
|
+
ul {
|
|
31
|
+
li {
|
|
32
|
+
padding: 6px;
|
|
33
|
+
// color: $color-border-dark;
|
|
34
|
+
cursor: all-scroll;
|
|
35
|
+
user-select: none;
|
|
36
|
+
}
|
|
37
|
+
max-height: 150px;
|
|
38
|
+
overflow-y: auto;
|
|
39
|
+
&::-webkit-scrollbar {
|
|
40
|
+
display: none;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
.duration-footer {
|
|
45
|
+
display: flex;
|
|
46
|
+
justify-content: end;
|
|
47
|
+
padding: 4px;
|
|
48
|
+
border-top: 1px solid $color-border;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
.file-explore {
|
|
2
|
+
.content-sidebar {
|
|
3
|
+
width: 220px;
|
|
4
|
+
border: 1px solid $color-border;
|
|
5
|
+
padding: 8px;
|
|
6
|
+
min-height: 400px;
|
|
7
|
+
border-radius: 4px;
|
|
8
|
+
|
|
9
|
+
li {
|
|
10
|
+
a {
|
|
11
|
+
display: flex;
|
|
12
|
+
color: $color-text;
|
|
13
|
+
padding: 4px 8px;
|
|
14
|
+
border-radius: 4px;
|
|
15
|
+
&:hover {
|
|
16
|
+
color: $color-heading;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
&.is-active {
|
|
20
|
+
a {
|
|
21
|
+
color: $color-heading;
|
|
22
|
+
background-color: $secondary-light-gray;
|
|
23
|
+
border: 1px solid $color-border;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
.right-content {
|
|
29
|
+
width: calc(100% - 200px);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.card-group {
|
|
2
|
+
background-color: #f4f5f6;
|
|
3
|
+
border: 1px solid $color-border;
|
|
4
|
+
border-radius: 8px;
|
|
5
|
+
position: relative;
|
|
6
|
+
z-index: 1;
|
|
7
|
+
.card-label {
|
|
8
|
+
position: absolute;
|
|
9
|
+
content: "";
|
|
10
|
+
left: 16px;
|
|
11
|
+
top: -10px;
|
|
12
|
+
&::after {
|
|
13
|
+
position: absolute;
|
|
14
|
+
content: "";
|
|
15
|
+
left: 0px;
|
|
16
|
+
top: 9px;
|
|
17
|
+
background-color: #fff;
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 2px;
|
|
20
|
+
z-index: -1;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
.section-card {
|
|
24
|
+
background-color: #fff;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
.card-select {
|
|
3
3
|
min-height: 98px;
|
|
4
4
|
padding: 16px;
|
|
5
|
-
background-color: $
|
|
5
|
+
background-color: $secondary-light-gray;
|
|
6
6
|
border: 1px solid $color-border;
|
|
7
7
|
box-sizing: border-box;
|
|
8
8
|
border-radius: 4px;
|
|
@@ -104,6 +104,8 @@
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
&.is-selected {
|
|
107
|
+
background-color: $primary-light-gray;
|
|
108
|
+
box-shadow: 0px 8px 50px rgba(0, 0, 0, 0.2);
|
|
107
109
|
&::after {
|
|
108
110
|
position: absolute;
|
|
109
111
|
content: "";
|
|
@@ -338,7 +338,30 @@
|
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
|
-
|
|
341
|
+
.up-down-btns {
|
|
342
|
+
position: absolute;
|
|
343
|
+
right: 1px;
|
|
344
|
+
top: 1px;
|
|
345
|
+
button {
|
|
346
|
+
background-color: #fff;
|
|
347
|
+
border: 1px solid $color-border;
|
|
348
|
+
height: 17px;
|
|
349
|
+
width: 32px;
|
|
350
|
+
display: flex;
|
|
351
|
+
align-items: center;
|
|
352
|
+
justify-content: center;
|
|
353
|
+
cursor: pointer;
|
|
354
|
+
&:hover {
|
|
355
|
+
border-color: $color-border-dark;
|
|
356
|
+
}
|
|
357
|
+
&.arrow-up {
|
|
358
|
+
border-radius: 4px 4px 0 0;
|
|
359
|
+
}
|
|
360
|
+
&.arrow-down {
|
|
361
|
+
border-radius: 0 0 4px 4px;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
342
365
|
.ac-search-button {
|
|
343
366
|
background-color: transparent;
|
|
344
367
|
border: none;
|
|
@@ -578,3 +601,42 @@
|
|
|
578
601
|
}
|
|
579
602
|
}
|
|
580
603
|
}
|
|
604
|
+
// icon with input
|
|
605
|
+
.icon-with-input,
|
|
606
|
+
.input-with-icon {
|
|
607
|
+
position: relative;
|
|
608
|
+
border: 1px solid $color-border-dark;
|
|
609
|
+
border-radius: 4px;
|
|
610
|
+
display: flex;
|
|
611
|
+
&.is-inactive {
|
|
612
|
+
background-color: #f0efef;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.icon {
|
|
616
|
+
width: 36px;
|
|
617
|
+
height: 36px;
|
|
618
|
+
border-right: 1px solid $color-border-dark;
|
|
619
|
+
}
|
|
620
|
+
input {
|
|
621
|
+
border: none;
|
|
622
|
+
width: calc(100% - 36px);
|
|
623
|
+
height: 36px;
|
|
624
|
+
padding: 4px 8px;
|
|
625
|
+
border-radius: 0 4px 4px 0;
|
|
626
|
+
background-color: transparent;
|
|
627
|
+
&:focus {
|
|
628
|
+
outline: 1px solid $color-border-dark;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
.input-with-icon {
|
|
633
|
+
.icon {
|
|
634
|
+
border-right: none;
|
|
635
|
+
border-left: 1px solid $color-border-dark;
|
|
636
|
+
cursor: pointer;
|
|
637
|
+
transition: 0.3s ease-in-out;
|
|
638
|
+
&:hover {
|
|
639
|
+
background-color: $secondary-light-gray;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { defineAsyncComponent } from "vue";
|
|
3
|
+
const AlertMessage = defineAsyncComponent(() => import("@/components/vue-components/v3/alert/AlertMessage.vue"));
|
|
4
|
+
const InfoLightIcon = defineAsyncComponent(() => import("@/components/vue-components/v3/icons/InfoLightIcon.vue"));
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
message?: string;
|
|
8
|
+
hasLink?: boolean;
|
|
9
|
+
linkTitle?: string;
|
|
10
|
+
linkAddress?: string;
|
|
11
|
+
modifierClasses?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
withDefaults(defineProps<Props>(), {
|
|
15
|
+
linkTitle: "Link",
|
|
16
|
+
linkAddress: "#",
|
|
17
|
+
hasLink: false,
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<AlertMessage :modifier-classes="modifierClasses">
|
|
23
|
+
<template #icon>
|
|
24
|
+
<InfoLightIcon />
|
|
25
|
+
</template>
|
|
26
|
+
<template #custom-text>
|
|
27
|
+
<p>
|
|
28
|
+
{{ message }} <a v-if="hasLink" :href="linkAddress">{{ linkTitle }}</a>
|
|
29
|
+
</p>
|
|
30
|
+
</template>
|
|
31
|
+
</AlertMessage>
|
|
32
|
+
</template>
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { defineProps, type Component } from "vue";
|
|
3
|
-
|
|
3
|
+
import AcButton from "../../v3/button/Button.vue";
|
|
4
4
|
interface UsageRow {
|
|
5
5
|
icon?: Component;
|
|
6
6
|
label: string;
|
|
7
7
|
values: (string | number)[];
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
type Header = string | { label: string; button?: boolean; text?: string };
|
|
11
|
+
|
|
9
12
|
withDefaults(
|
|
10
13
|
defineProps<{
|
|
11
14
|
title?: string;
|
|
12
|
-
thead?:
|
|
15
|
+
thead?: Header[];
|
|
13
16
|
tbody?: UsageRow[];
|
|
14
17
|
}>(),
|
|
15
18
|
{
|
|
@@ -24,8 +27,24 @@ withDefaults(
|
|
|
24
27
|
<h5 class="mb-8">{{ title }}</h5>
|
|
25
28
|
<div class="usage-table-card">
|
|
26
29
|
<div class="table-row thead">
|
|
27
|
-
<div v-for="(header, index) in thead" :key="index" class="table-cell">
|
|
30
|
+
<div v-for="(header, index) in thead" :key="index" class="table-cell">
|
|
31
|
+
<template v-if="typeof header === 'string'">
|
|
32
|
+
{{ header }}
|
|
33
|
+
</template>
|
|
34
|
+
<template v-else>
|
|
35
|
+
<div class="is-flex is-align-items-center is-justify-content-flex-end gap-4">
|
|
36
|
+
<span>{{ header.label }}</span>
|
|
37
|
+
<ac-button
|
|
38
|
+
modifier-classes="is-text has-text-primary p-0 height-auto"
|
|
39
|
+
v-if="header.button"
|
|
40
|
+
@click="$emit('total-click')"
|
|
41
|
+
>({{ header.text }})</ac-button
|
|
42
|
+
>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
</div>
|
|
28
46
|
</div>
|
|
47
|
+
|
|
29
48
|
<div v-for="(row, rowIndex) in tbody" :key="rowIndex" class="table-row">
|
|
30
49
|
<div class="table-cell">
|
|
31
50
|
<div class="is-flex gap-8">
|
|
@@ -35,7 +54,9 @@ withDefaults(
|
|
|
35
54
|
<span>{{ row.label }}</span>
|
|
36
55
|
</div>
|
|
37
56
|
</div>
|
|
38
|
-
<div v-for="(val, valIndex) in row.values" :key="valIndex" class="table-cell">
|
|
57
|
+
<div v-for="(val, valIndex) in row.values" :key="valIndex" class="table-cell">
|
|
58
|
+
{{ val }}
|
|
59
|
+
</div>
|
|
39
60
|
</div>
|
|
40
61
|
</div>
|
|
41
62
|
</template>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { defineAsyncComponent } from "vue";
|
|
3
|
+
const SectionContent = defineAsyncComponent(() => import("@/components/vue-components/v3/section/SectionContent.vue"));
|
|
4
|
+
const AlertMessage = defineAsyncComponent(() => import("@/components/vue-components/v3/alert/AlertMessage.vue"));
|
|
5
|
+
const InfoLightIcon = defineAsyncComponent(() => import("@/components/vue-components/v3/icons/InfoLightIcon.vue"));
|
|
6
|
+
|
|
7
|
+
import CustomSelect from "@/components/vue-components/v3/form-fields/CustomSelect.vue";
|
|
8
|
+
import CodeGroup from "@/components/vue-components/v3/code-preview/CodeGroup.vue";
|
|
9
|
+
</script>
|
|
10
|
+
<template>
|
|
11
|
+
<SectionContent class="mt-24" :custom="true">
|
|
12
|
+
<template #custom-header>
|
|
13
|
+
<div class="tabs ac-tabs" style="margin: -8px -16px">
|
|
14
|
+
<ul>
|
|
15
|
+
<li class="is-active"><a href="#">NEW CONFIG SECRET</a></li>
|
|
16
|
+
<li><a href="#">APPLY CONFIG</a></li>
|
|
17
|
+
<li><a href="#">REMOVE</a></li>
|
|
18
|
+
</ul>
|
|
19
|
+
</div>
|
|
20
|
+
</template>
|
|
21
|
+
<template #section-body>
|
|
22
|
+
<h5>Config Secret</h5>
|
|
23
|
+
<p>Select a configuration secret from the available list to update your database settings</p>
|
|
24
|
+
<CustomSelect :multiselect="false" class="mt-16 mb-0 width-300" />
|
|
25
|
+
|
|
26
|
+
<p>You have selected <strong>db_config</strong> secret</p>
|
|
27
|
+
<code-group code="code here">
|
|
28
|
+
<template #left>
|
|
29
|
+
<h5>Value *</h5>
|
|
30
|
+
</template>
|
|
31
|
+
</code-group>
|
|
32
|
+
|
|
33
|
+
<br />
|
|
34
|
+
|
|
35
|
+
<div class="is-flex gap-8 file-explore">
|
|
36
|
+
<div class="left-content content-sidebar">
|
|
37
|
+
<ul>
|
|
38
|
+
<li class="is-active"><a href="#">db_config</a></li>
|
|
39
|
+
<li><a href="#">user.conf</a></li>
|
|
40
|
+
<li><a href="#">mongod.conf</a></li>
|
|
41
|
+
</ul>
|
|
42
|
+
<AlertMessage modifier-classes="is-info" class="mt-8">
|
|
43
|
+
<template #icon>
|
|
44
|
+
<InfoLightIcon />
|
|
45
|
+
</template>
|
|
46
|
+
<template #custom-text>
|
|
47
|
+
<p>Kubedb er <a href="#">link</a> asbe for config secret</p>
|
|
48
|
+
</template>
|
|
49
|
+
</AlertMessage>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="right-content">
|
|
52
|
+
<code-group code="code here">
|
|
53
|
+
<template #left>
|
|
54
|
+
<h5>Value *</h5>
|
|
55
|
+
</template>
|
|
56
|
+
</code-group>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</template>
|
|
60
|
+
</SectionContent>
|
|
61
|
+
</template>
|
|
@@ -15,7 +15,7 @@ interface Props {
|
|
|
15
15
|
schema?: Record<string, unknown>;
|
|
16
16
|
uri: string;
|
|
17
17
|
};
|
|
18
|
-
needsUpdateOnChange?: boolean
|
|
18
|
+
needsUpdateOnChange?: boolean;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -29,7 +29,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
29
29
|
editorTheme: "",
|
|
30
30
|
wordWrap: "on",
|
|
31
31
|
validation: () => ({ uri: "" }),
|
|
32
|
-
needsUpdateOnChange: false
|
|
32
|
+
needsUpdateOnChange: false,
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
const emit = defineEmits(["update:modelValue"]);
|
|
@@ -65,8 +65,7 @@ const theme = computed(() => {
|
|
|
65
65
|
const onChange = (e: Event) => {
|
|
66
66
|
if (typeof e === "string") {
|
|
67
67
|
editorContent.value = e;
|
|
68
|
-
if(props.needsUpdateOnChange)
|
|
69
|
-
emit("update:modelValue", e);
|
|
68
|
+
if (props.needsUpdateOnChange) emit("update:modelValue", e);
|
|
70
69
|
}
|
|
71
70
|
};
|
|
72
71
|
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import ArrowIcon from "../icons/ArrowIcon.vue";
|
|
2
3
|
interface Props {
|
|
3
4
|
modifierClasses?: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
hasModifierBtn?: boolean;
|
|
4
7
|
}
|
|
5
8
|
|
|
6
9
|
withDefaults(defineProps<Props>(), {
|
|
7
10
|
modifierClasses: "",
|
|
11
|
+
type: "",
|
|
12
|
+
hasModifierBtn: false,
|
|
8
13
|
});
|
|
14
|
+
|
|
15
|
+
const emit = defineEmits(["updateCount"]);
|
|
16
|
+
|
|
17
|
+
function changes(value: number) {
|
|
18
|
+
emit("updateCount", value);
|
|
19
|
+
}
|
|
9
20
|
</script>
|
|
10
21
|
|
|
11
22
|
<template>
|
|
@@ -15,6 +26,15 @@ withDefaults(defineProps<Props>(), {
|
|
|
15
26
|
<slot />
|
|
16
27
|
<slot name="eye-switcher" />
|
|
17
28
|
<slot name="error" />
|
|
29
|
+
|
|
30
|
+
<div class="up-down-btns" v-if="hasModifierBtn">
|
|
31
|
+
<button class="arrow-up" title="Button Up" @click="changes(1)">
|
|
32
|
+
<ArrowIcon direction="down" />
|
|
33
|
+
</button>
|
|
34
|
+
<button class="arrow-down" title="Button Down" @click="changes(-1)">
|
|
35
|
+
<ArrowIcon />
|
|
36
|
+
</button>
|
|
37
|
+
</div>
|
|
18
38
|
</div>
|
|
19
39
|
</template>
|
|
20
40
|
|
|
@@ -12,6 +12,7 @@ interface Props {
|
|
|
12
12
|
errorMsg?: string;
|
|
13
13
|
isRow?: boolean;
|
|
14
14
|
hasDescription?: boolean;
|
|
15
|
+
ellipsis?: string;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -20,6 +21,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
20
21
|
errorMsg: "",
|
|
21
22
|
isRow: false,
|
|
22
23
|
hasDescription: false,
|
|
24
|
+
ellipsis: "is-ellipsis-2",
|
|
23
25
|
});
|
|
24
26
|
const includeSelectedClass = (optionValue: unknown) => {
|
|
25
27
|
return props.hasDescription && JSON.stringify(model.value) === JSON.stringify(optionValue);
|
|
@@ -62,7 +64,7 @@ const bodyClass = computed(() => {
|
|
|
62
64
|
<p v-show="errorMsg" class="has-text-danger">
|
|
63
65
|
<slot name="message" />
|
|
64
66
|
</p>
|
|
65
|
-
<p v-if="hasDescription" class="
|
|
67
|
+
<p v-if="hasDescription" class="mt-8" :class="ellipsis" :title="option.description">
|
|
66
68
|
{{ option.description }}
|
|
67
69
|
</p>
|
|
68
70
|
<p v-show="errorMsg" class="has-text-danger mb-16">
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg width="6" height="45" viewBox="0 0 6 45" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path
|
|
4
|
+
d="M3.5 1C3.5 0.723858 3.27614 0.5 3 0.5C2.72386 0.5 2.5 0.723858 2.5 1H3.5ZM3 45L5.88675 40H0.113249L3 45ZM3 1H2.5V40.5H3H3.5V1H3Z"
|
|
5
|
+
fill="#CBD5E1"
|
|
6
|
+
/>
|
|
7
|
+
</svg>
|
|
8
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
|
|
3
|
+
<!-- Icon from Huge Icons by Hugeicons - undefined -->
|
|
4
|
+
<path
|
|
5
|
+
fill="none"
|
|
6
|
+
stroke="currentColor"
|
|
7
|
+
stroke-linecap="round"
|
|
8
|
+
stroke-linejoin="round"
|
|
9
|
+
stroke-width="1.5"
|
|
10
|
+
d="M20 12H4m11 5s5-3.682 5-5s-5-5-5-5"
|
|
11
|
+
color="currentColor"
|
|
12
|
+
/>
|
|
13
|
+
</svg>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
|
|
3
|
+
<g
|
|
4
|
+
fill="none"
|
|
5
|
+
stroke="currentColor"
|
|
6
|
+
stroke-linecap="round"
|
|
7
|
+
stroke-linejoin="round"
|
|
8
|
+
stroke-width="1.5"
|
|
9
|
+
color="currentColor"
|
|
10
|
+
>
|
|
11
|
+
<path d="M22 12c0-5.523-4.477-10-10-10S2 6.477 2 12s4.477 10 10 10s10-4.477 10-10" />
|
|
12
|
+
<path d="M12.242 17v-5c0-.471 0-.707-.146-.854c-.147-.146-.382-.146-.854-.146m.75-3h.009" />
|
|
13
|
+
</g>
|
|
14
|
+
</svg>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256">
|
|
3
|
+
<path
|
|
4
|
+
fill="currentColor"
|
|
5
|
+
d="M152 96h-48a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8m-8 48h-32v-32h32Zm88 0h-16v-32h16a8 8 0 0 0 0-16h-16V56a16 16 0 0 0-16-16h-40V24a8 8 0 0 0-16 0v16h-32V24a8 8 0 0 0-16 0v16H56a16 16 0 0 0-16 16v40H24a8 8 0 0 0 0 16h16v32H24a8 8 0 0 0 0 16h16v40a16 16 0 0 0 16 16h40v16a8 8 0 0 0 16 0v-16h32v16a8 8 0 0 0 16 0v-16h40a16 16 0 0 0 16-16v-40h16a8 8 0 0 0 0-16m-32 56H56V56h144z"
|
|
6
|
+
/>
|
|
7
|
+
</svg>
|
|
8
|
+
</template>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256">
|
|
3
|
+
<path
|
|
4
|
+
fill="currentColor"
|
|
5
|
+
d="M232 56H24A16 16 0 0 0 8 72v128a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0v-16h16v16a8 8 0 0 0 16 0V72a16 16 0 0 0-16-16M24 72h208v96H24Zm88 80a8 8 0 0 0 8-8V96a8 8 0 0 0-8-8H48a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8Zm-56-48h48v32H56Zm88 48h64a8 8 0 0 0 8-8V96a8 8 0 0 0-8-8h-64a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8m8-48h48v32h-48Z"
|
|
6
|
+
/>
|
|
7
|
+
</svg>
|
|
8
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 16 16">
|
|
3
|
+
<!-- Icon from OpenSearch UI by OpenSearch Contributors - https://github.com/opensearch-project/oui/blob/main/LICENSE.txt -->
|
|
4
|
+
<g fill="currentColor" fill-rule="evenodd" transform="translate(0 2)">
|
|
5
|
+
<path
|
|
6
|
+
fill-rule="nonzero"
|
|
7
|
+
d="M2 6a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1zm13 2v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1m1-3V2a2 2 0 0 0-2-2H2a2 2 0 0 0-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8c0-.601-.271-1.133-.689-1.5c.418-.367.689-.899.689-1.5"
|
|
8
|
+
/>
|
|
9
|
+
<circle cx="4.5" cy="9.5" r="1.5" />
|
|
10
|
+
<circle cx="4.5" cy="3.5" r="1.5" />
|
|
11
|
+
<path d="M12 8h1v3h-1zm-2 0h1v3h-1zm2-6h1v3h-1zm-2 0h1v3h-1z" />
|
|
12
|
+
</g>
|
|
13
|
+
</svg>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { defineAsyncComponent, ref } from "vue";
|
|
3
|
+
const SectionContent = defineAsyncComponent(() => import("@/components/vue-components/v3/section/SectionContent.vue"));
|
|
4
|
+
const AcSelect = defineAsyncComponent(() => import("@/components/vue-components/v3/form-fields/AcSelect.vue"));
|
|
5
|
+
const AlertMessage = defineAsyncComponent(() => import("@/components/vue-components/v3/alert/AlertMessage.vue"));
|
|
6
|
+
const AcSingleInput = defineAsyncComponent(
|
|
7
|
+
() => import("@/components/vue-components/v3/form-fields/AcSingleInput.vue"),
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
sectionTitle?: string;
|
|
12
|
+
policyTitle?: string;
|
|
13
|
+
policyDescription?: string;
|
|
14
|
+
policyOptions: Array<{ name: string; id?: string }>;
|
|
15
|
+
hasInfo?: boolean;
|
|
16
|
+
infoMessage?: string;
|
|
17
|
+
topologyTitle?: string;
|
|
18
|
+
topologyDescription?: string;
|
|
19
|
+
topologyKey: string;
|
|
20
|
+
topologyValue: string;
|
|
21
|
+
modifierClasses?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
withDefaults(defineProps<Props>(), {
|
|
25
|
+
hasInfo: false,
|
|
26
|
+
infoMessage: "",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const machine = ref("");
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<template>
|
|
33
|
+
<SectionContent :title="sectionTitle" :class="modifierClasses">
|
|
34
|
+
<template #section-body>
|
|
35
|
+
<div class="columns" style="align-items: end">
|
|
36
|
+
<div class="column is-6">
|
|
37
|
+
<h6>{{ policyTitle }}</h6>
|
|
38
|
+
<p>{{ policyDescription }}</p>
|
|
39
|
+
<AcSelect
|
|
40
|
+
v-model="machine"
|
|
41
|
+
:options="policyOptions"
|
|
42
|
+
:label="policyTitle"
|
|
43
|
+
group-label="language"
|
|
44
|
+
show-by="name"
|
|
45
|
+
/>
|
|
46
|
+
</div>
|
|
47
|
+
<div v-if="hasInfo" class="column is-6">
|
|
48
|
+
<AlertMessage modifier-classes="is-info">
|
|
49
|
+
<template #custom-text>
|
|
50
|
+
<p><strong>Label Selector:</strong> {{ infoMessage }}</p>
|
|
51
|
+
</template>
|
|
52
|
+
</AlertMessage>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="columns is-multiline">
|
|
56
|
+
<div class="column is-12">
|
|
57
|
+
<h6>{{ topologyTitle }}</h6>
|
|
58
|
+
<p class="mb-0">{{ topologyDescription }}</p>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="column is-6">
|
|
61
|
+
<ac-single-input>
|
|
62
|
+
<label for="email" class="ac-label is-required show-label">Key </label>
|
|
63
|
+
<input id="Key" name="Key" type="Key" class="ac-input bg-white" :placeholder="topologyKey" disabled />
|
|
64
|
+
</ac-single-input>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="column is-6">
|
|
67
|
+
<ac-single-input>
|
|
68
|
+
<label for="Value" class="ac-label is-required show-label">Value </label>
|
|
69
|
+
<input
|
|
70
|
+
id="Value"
|
|
71
|
+
name="Value"
|
|
72
|
+
type="Value"
|
|
73
|
+
class="ac-input bg-white"
|
|
74
|
+
:placeholder="topologyValue"
|
|
75
|
+
disabled
|
|
76
|
+
/>
|
|
77
|
+
</ac-single-input>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</template>
|
|
81
|
+
</SectionContent>
|
|
82
|
+
</template>
|