@appscode/design-system 1.1.0-beta.8 → 1.1.0-beta.81

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 (117) hide show
  1. package/base/utilities/_all.scss +2 -2
  2. package/base/utilities/_colors.scss +105 -136
  3. package/base/utilities/_global.scss +25 -20
  4. package/base/utilities/_layouts.scss +0 -138
  5. package/base/utilities/_typography.scss +2 -2
  6. package/components/_ac-alert-box.scss +2 -2
  7. package/components/_ac-code-highlight.scss +9 -12
  8. package/components/_ac-drag.scss +4 -4
  9. package/components/_ac-modal.scss +2 -2
  10. package/components/_ac-select-box.scss +5 -5
  11. package/components/_ac-table.scss +7 -7
  12. package/components/_ac-tabs.scss +29 -26
  13. package/components/_all.scss +8 -5
  14. package/components/_buttons.scss +10 -10
  15. package/components/_getkeeper.scss +110 -0
  16. package/components/_graph.scss +10 -10
  17. package/components/_image-upload.scss +4 -4
  18. package/components/_input-card.scss +232 -0
  19. package/components/_input.scss +573 -0
  20. package/components/_left-sidebar-menu.scss +9 -13
  21. package/components/_monaco-editor.scss +2 -2
  22. package/components/_multi-select.scss +589 -0
  23. package/components/_navbar.scss +7 -7
  24. package/components/_nested-list.scss +2 -2
  25. package/components/_overview-info.scss +3 -3
  26. package/components/_pricing-table.scss +5 -5
  27. package/components/_progress-bar.scss +61 -74
  28. package/components/_subscription-card.scss +8 -10
  29. package/components/_table-of-content.scss +4 -4
  30. package/components/{_ac-terminal.scss → _terminal.scss} +63 -74
  31. package/components/_widget-menu.scss +7 -12
  32. package/components/_wizard.scss +13 -286
  33. package/components/ac-toaster/_ac-toasted.scss +4 -4
  34. package/components/bbum/_information-center.scss +8 -10
  35. package/components/bbum/_mobile-desktop.scss +9 -14
  36. package/components/bbum/_single-post-preview.scss +9 -9
  37. package/components/ui-builder/_ui-builder.scss +202 -18
  38. package/components/ui-builder/_vue-open-api.scss +63 -18
  39. package/icons/close-icon.svg +3 -0
  40. package/layouts/_code-preview.scss +6 -7
  41. package/package.json +1 -1
  42. package/vue-components/types/importFlow.ts +16 -0
  43. package/vue-components/types/notification.ts +3 -3
  44. package/vue-components/types/table.ts +1 -0
  45. package/vue-components/v2/banner/Banner.vue +1 -1
  46. package/vue-components/v2/button/Buttons.vue +1 -1
  47. package/vue-components/v2/modal/Modal.vue +1 -1
  48. package/vue-components/v3/alert/Alert.vue +2 -2
  49. package/vue-components/v3/banner/Banner.vue +2 -2
  50. package/vue-components/v3/breadcrumbs/Breadcrumb.vue +66 -4
  51. package/vue-components/v3/button/Button.vue +49 -786
  52. package/vue-components/v3/button/Buttons.vue +18 -2
  53. package/vue-components/v3/cards/Cluster.vue +37 -26
  54. package/vue-components/v3/cards/FeatureCard.vue +7 -11
  55. package/vue-components/v3/cards/FeatureCards.vue +1 -1
  56. package/vue-components/v3/cards/InfoCard.vue +1 -2
  57. package/vue-components/v3/cards/Monitoring.vue +6 -10
  58. package/vue-components/v3/cards/OverviewCard.vue +4 -0
  59. package/vue-components/v3/cards/OverviewCards.vue +10 -2
  60. package/vue-components/v3/cards/Vendor.vue +10 -6
  61. package/vue-components/v3/content/ContentHeader.vue +1 -1
  62. package/vue-components/v3/content/ContentTable.vue +1 -1
  63. package/vue-components/v3/dropdown/DropdownAction.vue +92 -0
  64. package/vue-components/v3/editor/Editor.vue +1 -1
  65. package/vue-components/v3/editor/FilteredFileEditor.vue +7 -0
  66. package/vue-components/v3/editor/ResourceKeyValueEditor.vue +3 -0
  67. package/vue-components/v3/footer/FooterArea.vue +8 -2
  68. package/vue-components/v3/footer/Info.vue +10 -8
  69. package/vue-components/v3/footer/Status.vue +24 -23
  70. package/vue-components/v3/footer/Usage.vue +20 -30
  71. package/vue-components/v3/form/Form.vue +0 -3
  72. package/vue-components/v3/form/FormFooter.vue +24 -0
  73. package/vue-components/v3/form-fields/AcSingleInput.vue +1 -508
  74. package/vue-components/v3/form-fields/FileUpload.vue +89 -0
  75. package/vue-components/v3/form-fields/Input.vue +2 -3
  76. package/vue-components/v3/header/Header.vue +1 -1
  77. package/vue-components/v3/loaders/InfoCardLoader.vue +18 -60
  78. package/vue-components/v3/loaders/SingleInfoCardLoader.vue +24 -0
  79. package/vue-components/v3/modal/Modal.vue +7 -12
  80. package/vue-components/v3/modals/JsonShowModal.vue +1 -0
  81. package/vue-components/v3/navbar/Navbar.vue +0 -159
  82. package/vue-components/v3/navbar/NavbarItem.vue +37 -15
  83. package/vue-components/v3/navbar/NavbarItemContent.vue +6 -3
  84. package/vue-components/v3/navbar/Notification.vue +35 -9
  85. package/vue-components/v3/navbar/User.vue +35 -31
  86. package/vue-components/v3/notification/AlertBox.vue +233 -3
  87. package/vue-components/v3/notification/Notification.vue +2 -2
  88. package/vue-components/v3/option-dots/Options.vue +17 -8
  89. package/vue-components/v3/pagination/Pagination.vue +27 -17
  90. package/vue-components/v3/preloader/Preloader.vue +1 -1
  91. package/vue-components/v3/searchbars/SearchBar.vue +1 -10
  92. package/vue-components/v3/sidebar/ClusterSwitcher.vue +1 -765
  93. package/vue-components/v3/sidebar/Sidebar.vue +3 -30
  94. package/vue-components/v3/sidebar/SidebarBody.vue +9 -2
  95. package/vue-components/v3/sidebar/SidebarFooter.vue +6 -3
  96. package/vue-components/v3/sidebar/SidebarHeader.vue +6 -2
  97. package/vue-components/v3/sidebar/Steps.vue +55 -51
  98. package/vue-components/v3/sidebar/sidebar-tabs/SidebarTabs.vue +78 -2
  99. package/vue-components/v3/sidebar/sidebar-tabs/SidebarTabsLayout.vue +12 -3
  100. package/vue-components/v3/table/Table.vue +14 -16
  101. package/vue-components/v3/table/TableCell.vue +1 -9
  102. package/vue-components/v3/table/TableRow.vue +2 -2
  103. package/vue-components/v3/table/table-cell/ArrayCell.vue +35 -32
  104. package/vue-components/v3/table/table-cell/CellValue.vue +14 -40
  105. package/vue-components/v3/table/table-cell/ObjectCell.vue +40 -38
  106. package/vue-components/v3/tag/Tag.vue +1 -0
  107. package/base/utilities/dark-theme.scss +0 -26
  108. package/components/_ac-card.scss +0 -0
  109. package/components/_ac-input.scss +0 -901
  110. package/components/_ac-multi-select.scss +0 -780
  111. package/vue-components/text.vue +0 -1
  112. package/vue-components/types/longRunningTasks.ts +0 -20
  113. package/vue-components/v3/long-running-tasks/LongRunningTaskItem.vue +0 -94
  114. package/vue-components/v3/modals/LongRunningTasksModal.vue +0 -402
  115. package/vue-components/v3/terminal/LongRunningTaskTerminal.vue +0 -151
  116. /package/components/{_ac-accordion.scss → _accordion.scss} +0 -0
  117. /package/components/{_ac-report.scss → _report.scss} +0 -0
@@ -1,6 +1,22 @@
1
- <script setup lang="ts"></script>
1
+ <script setup lang="ts">
2
+ withDefaults(
3
+ defineProps<{
4
+ isMaxWidth?: boolean;
5
+ }>(),
6
+ { isMaxWidth: false }
7
+ );
8
+ </script>
2
9
  <template>
3
- <div class="buttons">
10
+ <div v-if="isMaxWidth" :style="{ width: 'max-content' }" class="buttons">
4
11
  <slot />
5
12
  </div>
13
+ <div v-else class="buttons"><slot /></div>
6
14
  </template>
15
+
16
+ <!-- <style lang="scss">
17
+ .buttons {
18
+ .button {
19
+ margin-bottom: 16px;
20
+ }
21
+ }
22
+ </style> -->
@@ -28,32 +28,38 @@ const OptionDots = defineAsyncComponent(
28
28
  </script>
29
29
 
30
30
  <template>
31
- <div class="card-details" :class="modifierClasses">
32
- <div class="c-header">
33
- <div class="c-logo">
34
- <img :src="clusterData.providerIcon" alt="" />
35
- </div>
36
- <div class="c-content">
37
- <div class="is-flex is-justify-content-space-between">
38
- <h4>{{ clusterData.name }}</h4>
39
- <option-dots v-if="showOptions" :position="'is-right'">
40
- <slot name="options" />
41
- </option-dots>
31
+ <div class="card-details" data-testid="cluster-item-navigate">
32
+ <option-dots v-if="showOptions" :position="'is-right'">
33
+ <slot name="options" />
34
+ </option-dots>
35
+ <div class="card-details-inner" :class="modifierClasses">
36
+ <div class="c-header">
37
+ <div class="c-logo">
38
+ <img :src="clusterData.providerIcon" alt="" />
42
39
  </div>
43
- <div class="tags">
44
- <span
45
- v-for="(tag, idx) in clusterData.tags"
46
- :key="idx + tag.value"
47
- :class="tag.class"
48
- >{{ tag.value }}</span
49
- >
40
+ <div class="c-content">
41
+ <div class="is-flex is-justify-content-space-between pr-32">
42
+ <h4 data-testid="cluster-title-text">{{ clusterData.name }}</h4>
43
+ </div>
44
+ <div class="tags">
45
+ <span
46
+ v-for="(tag, idx) in clusterData.tags"
47
+ :key="idx + tag.value"
48
+ :class="tag.class"
49
+ :data-testid="idx === 0 ? 'cluster-status-text' : undefined"
50
+ >{{ tag.value }}</span
51
+ >
52
+ </div>
50
53
  </div>
51
54
  </div>
52
- </div>
53
- <div class="c-body">
54
- <p v-for="(detail, idx) in clusterData.details" :key="idx + detail.title">
55
- <span>{{ detail.title }}</span> <strong>{{ detail.value }}</strong>
56
- </p>
55
+ <div class="c-body">
56
+ <p
57
+ v-for="(detail, idx) in clusterData.details"
58
+ :key="idx + detail.title"
59
+ >
60
+ <span>{{ detail.title }}</span> <strong>{{ detail.value }}</strong>
61
+ </p>
62
+ </div>
57
63
  </div>
58
64
  </div>
59
65
  </template>
@@ -65,10 +71,15 @@ const OptionDots = defineAsyncComponent(
65
71
  transition: 0.3s ease-in-out;
66
72
  position: relative;
67
73
  z-index: 1;
68
- width: calc(33% - 6px);
69
- min-width: 455px;
74
+ width: calc(33% - 7px);
75
+ min-width: 430px;
70
76
  max-width: 530px;
71
-
77
+ .ac-options {
78
+ position: absolute;
79
+ right: 20px;
80
+ top: 30px;
81
+ z-index: 999;
82
+ }
72
83
  .c-header {
73
84
  display: flex;
74
85
  margin-bottom: 20px;
@@ -12,7 +12,7 @@ withDefaults(
12
12
  </script>
13
13
  <template>
14
14
  <!-- single card wrapper start -->
15
- <div class="card-basic b-1">
15
+ <div class="card-basic b-1" data-testid="simple-feature-card">
16
16
  <div class="c-header is-flex is-justify-content-space-between">
17
17
  <div
18
18
  v-if="isRequired"
@@ -21,11 +21,11 @@ withDefaults(
21
21
  Required
22
22
  </div>
23
23
 
24
- <div class="c-title is-flex is-align-items-center">
25
- <div class="icon mr-8">
24
+ <div class="c-title is-flex gap-8 is-fullwidth is-align-items-center">
25
+ <div class="icon">
26
26
  <slot name="card-logo" />
27
27
  </div>
28
- <h4><slot name="card-title" /></h4>
28
+ <h5><slot name="card-title" /></h5>
29
29
  </div>
30
30
  <!-- <span class="tag has-background-dark-light has-text-dark is-rounded"
31
31
  >Dark</span
@@ -53,15 +53,11 @@ withDefaults(
53
53
  left: 20px;
54
54
  top: -9px;
55
55
  }
56
- .c-header {
57
- .c-title {
58
- h4 {
59
- font-size: 18px;
60
- color: #061b2d;
61
- }
56
+ .c-title {
57
+ h5 {
58
+ width: calc(100% - 28px);
62
59
  }
63
60
  }
64
-
65
61
  .c-body {
66
62
  p {
67
63
  color: #0c365a;
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts"></script>
2
2
  <template>
3
- <div class="is-flex is-flex-wrap-wrap" style="gap: 16px">
3
+ <div class="is-flex is-flex-wrap-wrap" data-testid="simple-feature-sets" style="gap: 16px">
4
4
  <slot />
5
5
  </div>
6
6
  </template>
@@ -166,9 +166,8 @@ const OptionDots = defineAsyncComponent(
166
166
  .header {
167
167
  display: flex;
168
168
  align-items: center;
169
- padding: 8px 16px;
169
+ padding: 12px 16px;
170
170
  border-bottom: 1px dashed $primary-90;
171
- background-color: $primary-97;
172
171
 
173
172
  .logo {
174
173
  display: flex;
@@ -18,8 +18,8 @@ withDefaults(defineProps<Props>(), {
18
18
  >
19
19
  REQUIRED
20
20
  </div>
21
- <div class="c-title is-flex is-align-items-center">
22
- <div class="icon mr-8">
21
+ <div class="c-title is-flex gap-8 is-fullwidth is-align-items-center">
22
+ <div class="icon">
23
23
  <svg
24
24
  width="24"
25
25
  height="24"
@@ -50,7 +50,7 @@ withDefaults(defineProps<Props>(), {
50
50
  ></path>
51
51
  </svg>
52
52
  </div>
53
- <h4>{{ title }}</h4>
53
+ <h5>{{ title }}</h5>
54
54
  </div>
55
55
  <div class="tag has-background-success-light has-text-success is-rounded">
56
56
  ENABLED
@@ -76,15 +76,11 @@ withDefaults(defineProps<Props>(), {
76
76
  left: 20px;
77
77
  top: -9px;
78
78
  }
79
- .c-header {
80
- .c-title {
81
- h4 {
82
- font-size: 18px;
83
- color: #061b2d;
84
- }
79
+ .c-title {
80
+ h5 {
81
+ width: calc(100% - 28px);
85
82
  }
86
83
  }
87
-
88
84
  .c-body {
89
85
  p {
90
86
  color: #0c365a;
@@ -20,5 +20,9 @@
20
20
  border: 1px solid $primary-90;
21
21
  padding: 8px 16px;
22
22
  border-radius: 2px;
23
+ strong {
24
+ min-width: 30px;
25
+ font-size: 14px;
26
+ }
23
27
  }
24
28
  </style>
@@ -4,12 +4,20 @@ import { defineAsyncComponent } from "vue";
4
4
  const ContentHeader = defineAsyncComponent(
5
5
  () => import("./../content/ContentHeader.vue")
6
6
  );
7
+
8
+ interface Props {
9
+ headerTitle: string;
10
+ }
11
+
12
+ withDefaults(defineProps<Props>(), {
13
+ headerTitle: "",
14
+ });
7
15
  </script>
8
16
 
9
17
  <template>
10
18
  <div class="overview-cards-wrapper">
11
19
  <!-- title -->
12
- <content-header headerTitle="Resource Usage"></content-header>
20
+ <content-header :headerTitle="headerTitle"></content-header>
13
21
  <!-- title -->
14
22
  <div class="overview-cards b-t-1">
15
23
  <slot />
@@ -20,7 +28,7 @@ const ContentHeader = defineAsyncComponent(
20
28
  .overview-cards-wrapper {
21
29
  border: 1px solid $primary-90;
22
30
  margin-right: 20px;
23
- height: 100%;
31
+ height: calc(100% - 16px);
24
32
  }
25
33
  .overview-cards {
26
34
  display: grid;
@@ -11,18 +11,21 @@ withDefaults(defineProps<Props>(), {
11
11
  logo: "https://bb-developer-v1.web.app/_nuxt/img/azure-logo.4fa9281.svg",
12
12
  });
13
13
  </script>
14
+
14
15
  <template>
15
16
  <!-- use "is-selected" for select item -->
16
- <a class="ac-single-card has-text-centered">
17
+ <div class="ac-single-card has-text-centered">
17
18
  <div class="ac-card-logo">
18
- <div class="card-status"></div>
19
+ <div class="card-status" />
19
20
  <img :src="logo" alt="vendor logo" />
20
21
  </div>
21
22
  <div class="ac-card-name">
22
23
  <p>{{ title }}</p>
23
- <p class="has-text-weight-normal mt-8" v-if="subTitle">{{ subTitle }}</p>
24
+ <p v-if="subTitle" class="has-text-weight-normal mt-8">
25
+ {{ subTitle }}
26
+ </p>
24
27
  </div>
25
- </a>
28
+ </div>
26
29
  </template>
27
30
 
28
31
  <style lang="scss" scoped>
@@ -34,7 +37,7 @@ withDefaults(defineProps<Props>(), {
34
37
  flex-direction: column;
35
38
  justify-content: space-between;
36
39
  background-color: $primary-97;
37
- min-width: 220px;
40
+ min-width: 215px;
38
41
  padding: 30px 20px 20px;
39
42
  cursor: pointer;
40
43
 
@@ -54,13 +57,14 @@ withDefaults(defineProps<Props>(), {
54
57
  width: 70px;
55
58
  height: 70px;
56
59
  border: 1px solid $primary-90;
57
- background-color: #fff;
60
+ background-color: $white-100;
58
61
  border-radius: 50%;
59
62
  padding: 16px;
60
63
  margin-inline: auto;
61
64
  margin-bottom: 20px;
62
65
  display: flex;
63
66
  align-items: center;
67
+ overflow: hidden;
64
68
 
65
69
  img {
66
70
  width: 100%;
@@ -24,7 +24,7 @@ withDefaults(defineProps<Props>(), {
24
24
  <div class="ac-cheader-left">
25
25
  <!-- title -->
26
26
  <div class="ac-content-title">
27
- <h5 class="is-flex is-align-items-center">
27
+ <h5 class="is-flex is-align-items-center gap-8">
28
28
  <slot name="header-icon" />
29
29
  {{ headerTitle }}
30
30
  <slot name="title-right-actions" />
@@ -54,7 +54,7 @@ const updateSearchText = (text: string) => {
54
54
  <search-bar
55
55
  v-if="searchable"
56
56
  @search="updateSearchText"
57
- :id="acInuptId"
57
+ :ac-input-id="acInuptId"
58
58
  />
59
59
  </header-item>
60
60
  <slot name="content-right-controls" />
@@ -0,0 +1,92 @@
1
+ <script setup lang="ts">
2
+ import { defineAsyncComponent, ref } from "vue";
3
+ import HeroiconsChevronDown from "~icons/heroicons/chevron-down";
4
+ import HeroiconsChevronUp from "~icons/heroicons/chevron-up";
5
+ import { onClickOutside } from "@vueuse/core";
6
+
7
+ const AcButton = defineAsyncComponent(() => import("../button/Button.vue"));
8
+ interface Props {
9
+ modelValue: boolean;
10
+ title?: string;
11
+ buttonModifierClass?: string;
12
+ disabled?: boolean;
13
+ iconClass: string;
14
+ }
15
+ withDefaults(defineProps<Props>(), {
16
+ modelValue: false,
17
+ title: "",
18
+ buttonModifierClass: "",
19
+ disabled: false,
20
+ iconClass: "",
21
+ });
22
+ const actionDropdown = ref<HTMLElement | null>(null);
23
+ const emit = defineEmits(["update:modelValue"]);
24
+
25
+ onClickOutside(actionDropdown, () => emit("update:modelValue", false));
26
+ </script>
27
+
28
+ <template>
29
+ <!-- dropdown start -->
30
+ <div
31
+ ref="actionDropdown"
32
+ class="dropdown-action"
33
+ :class="{ 'dropdown is-active': modelValue }"
34
+ >
35
+ <div class="dropdown-trigger">
36
+ <ac-button
37
+ :modifier-classes="buttonModifierClass"
38
+ aria-haspopup="true"
39
+ aria-controls="dropdown-menu3"
40
+ :disabled="disabled"
41
+ :icon-class="iconClass"
42
+ @click="emit('update:modelValue', !modelValue)"
43
+ >
44
+ <template #icon>
45
+ <slot name="icon" />
46
+ </template>
47
+ <span>{{ title }}</span>
48
+ <span class="icon is-small">
49
+ <HeroiconsChevronDown v-if="!modelValue" />
50
+ <HeroiconsChevronUp v-else />
51
+ </span>
52
+ </ac-button>
53
+ </div>
54
+ <div class="dropdown-menu" id="dropdown-menu3" role="menu">
55
+ <div class="dropdown-content">
56
+ <slot name="list" />
57
+ </div>
58
+ </div>
59
+ </div>
60
+ <!-- dropdown end -->
61
+ </template>
62
+ <style lang="scss">
63
+ .dropdown-group {
64
+ margin-bottom: 16px;
65
+ }
66
+ .dropdown-action {
67
+ .dropdown-content {
68
+ min-width: 220px;
69
+ border: 1px solid $primary-90;
70
+
71
+ label {
72
+ padding: 8px 16px;
73
+ display: flex;
74
+ border-bottom: 1px solid $primary-95;
75
+ color: $primary-20;
76
+ font-weight: 500;
77
+ }
78
+ .dropdown-item {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 8px;
82
+ font-size: 13px;
83
+ padding: 8px 16px;
84
+ color: $primary-20;
85
+ &:hover {
86
+ background-color: $primary-97;
87
+ color: $primary;
88
+ }
89
+ }
90
+ }
91
+ }
92
+ </style>
@@ -20,7 +20,7 @@ const props = withDefaults(defineProps<Props>(), {
20
20
  showMinimap: false,
21
21
  editorHeight: 40,
22
22
  editorTheme: "",
23
- wordWrap: "off",
23
+ wordWrap: "on",
24
24
  });
25
25
 
26
26
  const emit = defineEmits(["update:modelValue"]);
@@ -10,6 +10,7 @@ interface Props {
10
10
  previewYamls?: Array<PreviewYamlType>;
11
11
  showMinimap?: boolean;
12
12
  editorHeight?: number;
13
+ wordWrap?: string;
13
14
  }
14
15
 
15
16
  const props = withDefaults(defineProps<Props>(), {
@@ -20,6 +21,7 @@ const props = withDefaults(defineProps<Props>(), {
20
21
  previewYamls: () => [],
21
22
  showMinimap: false,
22
23
  editorHeight: 60,
24
+ wordWrap: "on",
23
25
  });
24
26
 
25
27
  const emit = defineEmits(["setActiveKey"]);
@@ -174,6 +176,7 @@ watch(
174
176
  :read-only="isEditorReadOnly"
175
177
  :editor-height="editorHeight"
176
178
  :show-minimap="showMinimap"
179
+ :word-wrap="wordWrap"
177
180
  />
178
181
  </div>
179
182
  </template>
@@ -288,6 +291,10 @@ watch(
288
291
 
289
292
  .ac-files {
290
293
  ul {
294
+ margin: 0;
295
+ padding: 0;
296
+ list-style: none;
297
+
291
298
  li {
292
299
  &.is-active {
293
300
  a {
@@ -14,6 +14,7 @@ interface Props {
14
14
  deleteModalStatus?: string;
15
15
  editorHeight?: number;
16
16
  hideHeader?: boolean;
17
+ editorWordWrap?: string;
17
18
  }
18
19
 
19
20
  const props = withDefaults(defineProps<Props>(), {
@@ -28,6 +29,7 @@ const props = withDefaults(defineProps<Props>(), {
28
29
  deleteModalStatus: "closed",
29
30
  editorHeight: 60,
30
31
  hideHeader: false,
32
+ editorWordWrap: "on",
31
33
  });
32
34
 
33
35
  const emit = defineEmits(["activeKey"]);
@@ -95,6 +97,7 @@ watch(
95
97
  :show-minimap="showMinimap"
96
98
  :editor-height="editorHeight"
97
99
  @setActiveKey="setActiveKey"
100
+ :word-wrap="editorWordWrap"
98
101
  />
99
102
  </template>
100
103
  </content-table>
@@ -21,8 +21,9 @@
21
21
  min-height: 30px;
22
22
  padding: 0 20px;
23
23
  background: $primary-20;
24
- border-top: 1px solid $primary-90;
25
- z-index: 99;
24
+ border-top: 1px solid #3d5e7c;
25
+ z-index: 9999;
26
+ transition: 0.3s ease-in-out;
26
27
  }
27
28
 
28
29
  .footer-left,
@@ -31,4 +32,9 @@
31
32
  align-items: center;
32
33
  gap: 32px;
33
34
  }
35
+ .sidebar-collapsed {
36
+ .footer-area {
37
+ width: calc(100% - 60px);
38
+ }
39
+ }
34
40
  </style>
@@ -1,20 +1,22 @@
1
1
  <script lang="ts" setup>
2
- import { ref, defineAsyncComponent } from "vue";
2
+ import { defineAsyncComponent } from "vue";
3
3
 
4
4
  const FooterItems = defineAsyncComponent(() => import("./FooterItems.vue"));
5
5
  const FooterItem = defineAsyncComponent(() => import("./FooterItem.vue"));
6
6
 
7
- const dataObj = ref([
8
- { key: "VERSION:", value: "10.5.8" },
9
- { key: "NAMESPACE:", value: "demo" },
10
- { key: "MODE:", value: "Standalone" },
11
- ]);
7
+ interface Props {
8
+ infoData?: Array<Record<string, string>>;
9
+ }
10
+
11
+ withDefaults(defineProps<Props>(), {
12
+ infoData: () => [],
13
+ });
12
14
  </script>
13
15
 
14
16
  <template>
15
17
  <footer-items>
16
- <footer-item v-for="(data, idx) in dataObj" :key="idx">
17
- <span class="">{{ data.key }}</span>
18
+ <footer-item v-for="(data, idx) in infoData" :key="idx + data.key">
19
+ <span class="">{{ data.key }}:</span>
18
20
  <span>{{ data.value }}</span>
19
21
  </footer-item>
20
22
  </footer-items>
@@ -5,36 +5,37 @@ const FooterItem = defineAsyncComponent(() => import("./FooterItem.vue"));
5
5
  const HeroiconsCheckBadge = defineAsyncComponent(
6
6
  () => import("~icons/heroicons/check-badge")
7
7
  );
8
+ const HeroiconsCrossBadge = defineAsyncComponent(
9
+ () => import("~icons/heroicons/x-circle")
10
+ );
11
+ const HeroiconsLoadingBadge = defineAsyncComponent(
12
+ () => import("~icons/heroicons/arrow-path")
13
+ );
14
+ interface Props {
15
+ statusInfo?: Array<Record<string, string>>;
16
+ }
8
17
 
9
- const status = ref([
10
- {
11
- icon: "HeroiconsCheckCircle",
12
- label: "Not Exposed",
13
- classType: "has-text-warning",
14
- },
15
- { icon: "HeroiconsXCircle", label: "TLS", classType: "has-text-danger" },
16
- {
17
- icon: "HeroiconsCheckBadge",
18
- label: "Backup",
19
- classType: "has-text-success",
20
- },
21
- {
22
- icon: "HeroiconsXCircle",
23
- label: "Monitoring",
24
- classType: "has-text-danger",
25
- },
26
- ]);
18
+ withDefaults(defineProps<Props>(), {
19
+ statusInfo: () => [],
20
+ });
27
21
  </script>
28
22
 
29
23
  <template>
30
24
  <footer-items>
31
25
  <footer-item
32
- v-for="(item, idx) in status"
33
- :key="idx"
34
- :modifier-classes="item.classType"
26
+ v-for="(item, idx) in statusInfo"
27
+ :key="idx + item.label"
28
+ :modifier-classes="item.color"
35
29
  >
36
- <span class="icon"><HeroiconsCheckBadge :size="20" /></span
37
- ><span>{{ item.label }}</span>
30
+ <span class="icon">
31
+ <HeroiconsCheckBadge v-if="item.color === `has-text-success`" />
32
+ <i
33
+ v-else-if="item.color === `has-text-warning`"
34
+ class="fa fa-refresh fa-spin fa-fw"
35
+ ></i>
36
+ <HeroiconsCrossBadge v-else />
37
+ </span>
38
+ <span>{{ item.label }}</span>
38
39
  </footer-item>
39
40
  </footer-items>
40
41
  </template>
@@ -1,42 +1,32 @@
1
1
  <script lang="ts" setup>
2
- import { defineAsyncComponent, ref } from "vue";
2
+ import { defineAsyncComponent } from "vue";
3
3
  const FooterItems = defineAsyncComponent(() => import("./FooterItems.vue"));
4
4
  const FooterItem = defineAsyncComponent(() => import("./FooterItem.vue"));
5
5
 
6
- const HeroiconsCpuChip = defineAsyncComponent(
7
- () => import("~icons/heroicons/cpu-chip")
8
- );
6
+ interface Props {
7
+ usages?: Array<{
8
+ icon?: string;
9
+ useData?: {
10
+ limit?: string;
11
+ request?: string;
12
+ };
13
+ }>;
14
+ }
9
15
 
10
- const usages = ref([
11
- {
12
- icon: "HeroiconsCpuChip",
13
- useData: {
14
- limit: "500m",
15
- usage: "500m",
16
- },
17
- },
18
- {
19
- icon: "HeroiconsCpuChip",
20
- useData: {
21
- limit: "1G",
22
- usage: "1G",
23
- },
24
- },
25
- {
26
- icon: "HeroiconsCpuChip",
27
- useData: {
28
- limit: "10Gi",
29
- usage: "10Gi",
30
- },
31
- },
32
- ]);
16
+ withDefaults(defineProps<Props>(), {
17
+ usages: () => [],
18
+ });
33
19
  </script>
34
20
 
35
21
  <template>
36
22
  <footer-items>
37
- <footer-item v-for="(type, idx) in usages" :key="idx">
38
- <span class="icon"><HeroiconsCpuChip :size="20" /></span
39
- ><span>{{ type.useData.limit }}/{{ type.useData.usage }}</span>
23
+ <footer-item v-for="(info, idx) in usages" :key="idx">
24
+ <span class="icon"><img :src="info.icon" /></span
25
+ ><span
26
+ >{{ info.useData?.limit || "N" }}/{{
27
+ info.useData?.request || "A"
28
+ }}</span
29
+ >
40
30
  </footer-item>
41
31
  </footer-items>
42
32
  </template>
@@ -22,9 +22,6 @@ withDefaults(defineProps<Props>(), {
22
22
  <div class="form-wrapper">
23
23
  <div
24
24
  :class="{
25
- 'pt-20': !reducePaddingTop,
26
- 'pt-10': reducePaddingTop,
27
- 'pl-20': !isContainer,
28
25
  'form-content': !isContainer,
29
26
  container: isContainer,
30
27
  }"