@appscode/design-system 2.17.36 → 2.17.38

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 (31) hide show
  1. package/main.scss +4 -1
  2. package/package.json +1 -1
  3. package/vue-components/styles/base/utilities/_global.scss +8 -0
  4. package/vue-components/styles/base/utilities/_typography.scss +5 -0
  5. package/vue-components/styles/components/_ac-duration.scss +50 -0
  6. package/vue-components/styles/components/_file-explore.scss +31 -0
  7. package/vue-components/styles/components/_time-picker.scss +140 -0
  8. package/vue-components/styles/components/cards/_all.scss +1 -1
  9. package/vue-components/styles/components/cards/_cards-group.scss +26 -0
  10. package/vue-components/styles/components/form-fields/_input-card.scss +3 -1
  11. package/vue-components/styles/components/form-fields/_input.scss +63 -1
  12. package/vue-components/v3/alert/AlertLinked.vue +32 -0
  13. package/vue-components/v3/config-secret/ConfigSecret.vue +61 -0
  14. package/vue-components/v3/form-fields/AcSingleInput.vue +20 -0
  15. package/vue-components/v3/form-fields/CheckRadio.vue +3 -1
  16. package/vue-components/v3/icons/ArrowDownLongIcon.vue +8 -0
  17. package/vue-components/v3/icons/ArrowRightIcon.vue +14 -0
  18. package/vue-components/v3/icons/InfoLightIcon.vue +15 -0
  19. package/vue-components/v3/icons/MachineCpuIcon.vue +8 -0
  20. package/vue-components/v3/icons/MachineMemoryIcon.vue +8 -0
  21. package/vue-components/v3/icons/StorageIcon-2.vue +14 -0
  22. package/vue-components/v3/node-selection/NodeSelection.vue +82 -0
  23. package/vue-components/v3/postgres/Postgres.vue +33 -0
  24. package/vue-components/v3/replica-set/MachineProfile.vue +119 -0
  25. package/vue-components/v3/replica-set/MultiMachineProfile.vue +100 -0
  26. package/vue-components/v3/replica-set/UpgradeSet.vue +40 -0
  27. package/vue-components/v3/scaling-rules/ScalingRules.vue +93 -0
  28. package/vue-components/v3/section/SectionContent.vue +1 -1
  29. package/vue-components/v3/threshold/UsageThreshold.vue +24 -0
  30. package/vue-components/v3/time/AcDuration.vue +167 -0
  31. 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/usage-table-card";
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appscode/design-system",
3
- "version": "2.17.36",
3
+ "version": "2.17.38",
4
4
  "description": "A design system for Appscode websites and dashboards made using Bulma",
5
5
  "main": "main.scss",
6
6
  "scripts": {
@@ -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
+ }
@@ -164,3 +164,8 @@ strong {
164
164
  .has-text-primary {
165
165
  color: $ac-primary !important;
166
166
  }
167
+ .text-code {
168
+ font-family: "Inconsolata", monospace;
169
+ font-size: 14px;
170
+ color: $color-heading;
171
+ }
@@ -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,140 @@
1
+ /* ========== Variables ========== */
2
+ $cool-gray: #eff1f1;
3
+ $secondary-light-gray: #f7f9fa;
4
+ $scroll-highlight: darken($cool-gray, 10%);
5
+
6
+ /* ========== Mixins ========== */
7
+ @mixin hide-scrollbars {
8
+ -ms-overflow-style: none; // IE 10+
9
+ scrollbar-width: none; // Firefox
10
+ &::-webkit-scrollbar {
11
+ display: none;
12
+ }
13
+ }
14
+
15
+ /* ========== Container ========== */
16
+ .picker-wrapper {
17
+ background: white;
18
+ box-shadow: 0 0.5vw 2vw -5px rgba(0, 0, 0, 0.2);
19
+ display: inline-flex;
20
+ flex-direction: column;
21
+ border-radius: 8px;
22
+ }
23
+
24
+ /* ========== Header ========== */
25
+ .duration-header {
26
+ background-color: $secondary-light-gray;
27
+ text-align: center;
28
+ height: 36px;
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+
33
+ h6 {
34
+ font-size: 13px;
35
+ margin: 0;
36
+ font-weight: 600;
37
+ }
38
+ }
39
+
40
+ /* ========== Title Labels ========== */
41
+ .d-title {
42
+ display: inline-grid;
43
+ grid-template-columns: repeat(3, fit-content(100px));
44
+ justify-content: end;
45
+ gap: 0.5em;
46
+ font-weight: bold;
47
+ font-size: 11px;
48
+ padding: 8px 1rem 0;
49
+
50
+ span {
51
+ width: 40px;
52
+ text-align: center;
53
+ margin-right: 1em;
54
+ }
55
+ }
56
+
57
+ /* ========== Picker Section ========== */
58
+ .picker {
59
+ position: relative;
60
+ display: inline-grid;
61
+ grid-template-columns: repeat(3, fit-content(80px));
62
+ justify-content: end;
63
+ padding: 0 1rem;
64
+ font-size: 13px;
65
+ font-weight: 500;
66
+ font-feature-settings: "tnum";
67
+
68
+ &::before,
69
+ &::after {
70
+ content: "";
71
+ position: absolute;
72
+ width: 100%;
73
+ pointer-events: none;
74
+ z-index: 1;
75
+ }
76
+
77
+ &::before {
78
+ top: 0;
79
+ height: 50%;
80
+ background: linear-gradient(white, rgba(255, 255, 255, 0));
81
+ }
82
+
83
+ &::after {
84
+ bottom: 0;
85
+ height: 50%;
86
+ background: linear-gradient(rgba(255, 255, 255, 0), white);
87
+ }
88
+
89
+ ul {
90
+ @include hide-scrollbars();
91
+ max-height: 190px;
92
+ overflow-y: scroll;
93
+ padding: 1.5em 0;
94
+ margin-right: 1em;
95
+ scroll-snap-type: y mandatory;
96
+ scroll-behavior: smooth;
97
+
98
+ li {
99
+ scroll-snap-align: center;
100
+ height: 2.35em;
101
+ width: 40px;
102
+ text-align: center;
103
+ user-select: none;
104
+ cursor: pointer;
105
+ line-height: 2.35em;
106
+ border-radius: 4px;
107
+
108
+ &:hover {
109
+ background: #f0f0f0;
110
+ }
111
+ }
112
+ }
113
+ }
114
+
115
+ /* ========== Highlight Window ========== */
116
+ .picker-window {
117
+ position: absolute;
118
+ top: 50%;
119
+ left: 0;
120
+ width: 100%;
121
+ height: 2.4em;
122
+ transform: translateY(-52%);
123
+ border-top: 1px solid $scroll-highlight;
124
+ border-bottom: 1px solid $scroll-highlight;
125
+ pointer-events: none;
126
+ z-index: 2;
127
+ }
128
+
129
+ /* ========== Footer Buttons ========== */
130
+ .duration-footer {
131
+ padding: 0 1rem 1rem;
132
+ display: flex;
133
+ justify-content: flex-end;
134
+ gap: 0.5rem;
135
+
136
+ .buttons {
137
+ display: flex;
138
+ gap: 0.5rem;
139
+ }
140
+ }
@@ -7,4 +7,4 @@
7
7
  @import "payment-card";
8
8
  @import "subscription-card";
9
9
  @import "usage-card";
10
- @import "usage-table-card";
10
+ @import "cards-group";
@@ -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: $white-100;
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;
@@ -579,3 +602,42 @@
579
602
  }
580
603
  }
581
604
  }
605
+ // icon with input
606
+ .icon-with-input,
607
+ .input-with-icon {
608
+ position: relative;
609
+ border: 1px solid $color-border-dark;
610
+ border-radius: 4px;
611
+ display: flex;
612
+ &.is-inactive {
613
+ background-color: #f0efef;
614
+ }
615
+
616
+ .icon {
617
+ width: 36px;
618
+ height: 36px;
619
+ border-right: 1px solid $color-border-dark;
620
+ }
621
+ input {
622
+ border: none;
623
+ width: calc(100% - 36px);
624
+ height: 36px;
625
+ padding: 4px 8px;
626
+ border-radius: 0 4px 4px 0;
627
+ background-color: transparent;
628
+ &:focus {
629
+ outline: 1px solid $color-border-dark;
630
+ }
631
+ }
632
+ }
633
+ .input-with-icon {
634
+ .icon {
635
+ border-right: none;
636
+ border-left: 1px solid $color-border-dark;
637
+ cursor: pointer;
638
+ transition: 0.3s ease-in-out;
639
+ &:hover {
640
+ background-color: $secondary-light-gray;
641
+ }
642
+ }
643
+ }
@@ -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>
@@ -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>
@@ -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="is-ellipsis-2 mt-8" :title="option.description">
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>