@appscode/design-system 1.1.0 → 2.0.1

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 (215) hide show
  1. package/base/_video-player.scss +65 -0
  2. package/base/utilities/_all.scss +7 -5
  3. package/base/utilities/_colors.scss +377 -0
  4. package/base/utilities/_customize-bulma.scss +23 -27
  5. package/base/utilities/_extended.scss +39 -0
  6. package/base/utilities/{_default.scss → _global.scss} +192 -333
  7. package/base/utilities/_layouts.scss +19 -0
  8. package/base/utilities/_mixin.scss +11 -11
  9. package/base/utilities/_spacing.scss +96 -0
  10. package/base/utilities/_typography.scss +56 -24
  11. package/components/_ac-alert-box.scss +205 -263
  12. package/components/_ac-calendar.scss +4 -4
  13. package/components/_ac-code-highlight.scss +13 -16
  14. package/components/_ac-content-layout.scss +165 -165
  15. package/components/_ac-drag.scss +13 -13
  16. package/components/_ac-modal.scss +212 -212
  17. package/components/_ac-options.scss +122 -123
  18. package/components/_ac-select-box.scss +10 -10
  19. package/components/_ac-table.scss +503 -502
  20. package/components/_ac-tabs.scss +65 -61
  21. package/components/_ac-tags.scss +116 -116
  22. package/components/_accordion.scss +117 -0
  23. package/components/_add-card.scss +3 -3
  24. package/components/_all.scss +35 -28
  25. package/components/_app-drawer.scss +0 -134
  26. package/components/_breadcumb.scss +0 -71
  27. package/components/_buttons.scss +779 -779
  28. package/components/_card-body-wrapper.scss +5 -5
  29. package/components/_dashboard-header.scss +0 -115
  30. package/components/_direct-deploy.scss +8 -8
  31. package/components/_getkeeper.scss +110 -0
  32. package/components/_go-to-top.scss +1 -1
  33. package/components/_graph.scss +10 -10
  34. package/components/_image-upload.scss +9 -9
  35. package/components/_input-card.scss +232 -0
  36. package/components/_input.scss +573 -0
  37. package/components/_left-sidebar-menu.scss +452 -587
  38. package/components/_monaco-editor.scss +2 -2
  39. package/components/{_ac-multi-select.scss → _multi-select.scss} +89 -251
  40. package/components/_navbar.scss +786 -752
  41. package/components/_nested-list.scss +3 -3
  42. package/components/_overview-info.scss +10 -10
  43. package/components/_overview-page.scss +4 -4
  44. package/components/_pagination.scss +106 -124
  45. package/components/_payment-card.scss +21 -21
  46. package/components/_preloader.scss +1 -1
  47. package/components/_preview-modal.scss +18 -18
  48. package/components/_pricing-table.scss +14 -14
  49. package/components/_progress-bar.scss +73 -86
  50. package/components/_subscription-card.scss +22 -24
  51. package/components/_table-of-content.scss +8 -8
  52. package/components/{_ac-terminal.scss → _terminal.scss} +114 -81
  53. package/components/_tfa.scss +9 -9
  54. package/components/_transitions.scss +35 -0
  55. package/components/_widget-menu.scss +252 -257
  56. package/components/_wizard.scss +518 -793
  57. package/components/ac-toaster/_ac-toasted.scss +11 -16
  58. package/components/bbum/_activities-header.scss +1 -1
  59. package/components/bbum/_card-team.scss +12 -12
  60. package/components/bbum/_information-center.scss +21 -23
  61. package/components/bbum/_left-sidebar.scss +8 -8
  62. package/components/bbum/_mobile-desktop.scss +16 -21
  63. package/components/bbum/_post.scss +5 -5
  64. package/components/bbum/_sign-up-notification.scss +10 -10
  65. package/components/bbum/_single-post-preview.scss +29 -29
  66. package/components/bbum/_user-profile.scss +10 -10
  67. package/components/ui-builder/_ui-builder.scss +221 -31
  68. package/components/ui-builder/_vue-open-api.scss +565 -7
  69. package/icons/close-icon.svg +3 -0
  70. package/layouts/_code-preview.scss +17 -18
  71. package/main.scss +26 -10
  72. package/package.json +1 -1
  73. package/plugins/theme.js +11 -9
  74. package/plugins/vue-toaster.js +1 -1
  75. package/vue-components/images/icons/cluster-icon.svg +10 -0
  76. package/vue-components/images/icons/org-icon.svg +10 -0
  77. package/vue-components/plugins/time-convert.js +49 -0
  78. package/vue-components/types/cluster.ts +6 -0
  79. package/vue-components/types/importFlow.ts +16 -0
  80. package/vue-components/types/notification.ts +6 -0
  81. package/vue-components/types/previewYaml.ts +8 -0
  82. package/vue-components/types/table.ts +55 -0
  83. package/vue-components/types/theme.ts +10 -0
  84. package/vue-components/types/user.ts +22 -0
  85. package/vue-components/v2/banner/Banner.vue +1 -1
  86. package/vue-components/v2/button/Buttons.vue +1 -1
  87. package/vue-components/v2/card/Card.vue +1 -1
  88. package/vue-components/v2/card/OverviewCards.vue +17 -2
  89. package/vue-components/v2/content/ContentTable.vue +14 -9
  90. package/vue-components/v2/editor/FilteredFileEditor.vue +2 -2
  91. package/vue-components/v2/editor/ResourceKeyValueEditor.vue +21 -21
  92. package/vue-components/v2/icons/Ellipsis.vue +2 -1
  93. package/vue-components/v2/modal/Modal.vue +2 -6
  94. package/vue-components/v2/navbar/Appdrawer.vue +37 -12
  95. package/vue-components/v2/navbar/Navbar.vue +3 -3
  96. package/vue-components/v2/navbar/NavbarItem.vue +3 -1
  97. package/vue-components/v2/navbar/NavbarItemContent.vue +1 -1
  98. package/vue-components/v2/navbar/User.vue +5 -22
  99. package/vue-components/v2/pagination/Pagination.vue +66 -0
  100. package/vue-components/v2/sidebar/SidebarItem.vue +10 -7
  101. package/{components/_ac-accordion.scss → vue-components/v3/accordion/Accordion.vue} +40 -6
  102. package/vue-components/v3/alert/Alert.vue +238 -0
  103. package/vue-components/v3/alert/Toast.vue +79 -0
  104. package/vue-components/v3/banner/Banner.vue +10 -0
  105. package/vue-components/v3/breadcrumbs/Breadcrumb.vue +166 -0
  106. package/vue-components/v3/button/Button.vue +110 -57
  107. package/vue-components/v3/button/Buttons.vue +22 -0
  108. package/vue-components/v3/button/DownloadBtn.vue +31 -0
  109. package/vue-components/v3/cards/Card.vue +32 -0
  110. package/vue-components/v3/cards/CardContent.vue +7 -0
  111. package/vue-components/v3/cards/CardHeader.vue +14 -0
  112. package/vue-components/v3/cards/Cards.vue +7 -0
  113. package/vue-components/v3/cards/Cluster.vue +159 -0
  114. package/vue-components/v3/cards/Counter.vue +39 -0
  115. package/vue-components/v3/cards/FeatureCard.vue +67 -0
  116. package/vue-components/v3/cards/FeatureCards.vue +6 -0
  117. package/vue-components/v3/cards/InfoCard.vue +242 -0
  118. package/vue-components/v3/cards/Monitoring.vue +90 -0
  119. package/vue-components/v3/cards/OrgClusterCard.vue +86 -0
  120. package/vue-components/v3/cards/OverviewCard.vue +28 -0
  121. package/vue-components/v3/cards/OverviewCards.vue +39 -0
  122. package/vue-components/v3/cards/Payment.vue +62 -0
  123. package/vue-components/v3/cards/Vendor.vue +89 -0
  124. package/vue-components/v3/content/ContentHeader.vue +39 -30
  125. package/vue-components/v3/content/ContentLayout.vue +20 -0
  126. package/vue-components/v3/content/ContentTable.vue +44 -58
  127. package/vue-components/v3/dropdown/DropdownAction.vue +95 -0
  128. package/vue-components/v3/dropdown/DropdownDivider.vue +2 -0
  129. package/vue-components/v3/dropdown/DropdownItem.vue +2 -0
  130. package/vue-components/v3/dropdown/DropdownMenu.vue +85 -91
  131. package/vue-components/v3/editor/Editor.vue +117 -115
  132. package/vue-components/v3/editor/FilteredFileEditor.vue +325 -128
  133. package/vue-components/v3/editor/ResourceKeyValueEditor.vue +73 -94
  134. package/vue-components/v3/footer/FooterArea.vue +40 -0
  135. package/vue-components/v3/footer/FooterItem.vue +32 -0
  136. package/vue-components/v3/footer/FooterItems.vue +15 -0
  137. package/vue-components/v3/footer/Info.vue +25 -0
  138. package/vue-components/v3/footer/Status.vue +43 -0
  139. package/vue-components/v3/footer/Usage.vue +34 -0
  140. package/vue-components/v3/form/Form.vue +24 -36
  141. package/vue-components/v3/form/FormFooter.vue +24 -0
  142. package/vue-components/v3/form/FormFooterControl.vue +7 -0
  143. package/vue-components/v3/form/FormFooterControls.vue +7 -0
  144. package/vue-components/v3/form-fields/AcSingleInput.vue +21 -0
  145. package/vue-components/v3/form-fields/FileUpload.vue +89 -0
  146. package/vue-components/v3/form-fields/Input.vue +19 -15
  147. package/vue-components/v3/header/Header.vue +120 -26
  148. package/vue-components/v3/header/HeaderItem.vue +18 -0
  149. package/vue-components/v3/header/HeaderItems.vue +4 -0
  150. package/vue-components/v3/icons/Ellipsis.vue +2 -0
  151. package/vue-components/v3/loaders/ClusterSwitcherLoader.vue +13 -0
  152. package/vue-components/v3/loaders/InfoCardLoader.vue +19 -0
  153. package/vue-components/v3/loaders/ResourceLoader.vue +4 -12
  154. package/vue-components/v3/loaders/SidebarLoader.vue +4 -12
  155. package/vue-components/v3/loaders/SingleInfoCardLoader.vue +24 -0
  156. package/vue-components/v3/modal/Modal.vue +294 -95
  157. package/vue-components/v3/modals/DeleteConfirmationModal.vue +37 -50
  158. package/vue-components/v3/modals/JsonShowModal.vue +63 -68
  159. package/vue-components/v3/navbar/Appdrawer.vue +198 -51
  160. package/vue-components/v3/navbar/Navbar.vue +139 -0
  161. package/vue-components/v3/navbar/NavbarItem.vue +103 -0
  162. package/vue-components/v3/navbar/NavbarItemContent.vue +282 -0
  163. package/vue-components/v3/navbar/Notification.vue +207 -0
  164. package/vue-components/v3/navbar/ThemeMode.vue +128 -112
  165. package/vue-components/v3/navbar/User.vue +431 -268
  166. package/vue-components/v3/notification/AlertBox.vue +266 -39
  167. package/vue-components/v3/notification/Notification.vue +50 -44
  168. package/vue-components/v3/notification/NotificationItem.vue +51 -19
  169. package/vue-components/v3/option-dots/Options.vue +197 -0
  170. package/vue-components/v3/pagination/Pagination.vue +216 -102
  171. package/vue-components/v3/preloader/Preloader.vue +23 -0
  172. package/vue-components/v3/searchbars/SearchBar.vue +50 -34
  173. package/vue-components/v3/sidebar/AccentColorPicker.vue +97 -0
  174. package/vue-components/v3/sidebar/ClusterSwitcher.vue +71 -86
  175. package/vue-components/v3/sidebar/Sidebar.vue +239 -0
  176. package/vue-components/v3/sidebar/SidebarBody.vue +14 -0
  177. package/vue-components/v3/sidebar/SidebarFooter.vue +89 -0
  178. package/vue-components/v3/sidebar/SidebarHeader.vue +131 -0
  179. package/vue-components/v3/sidebar/SidebarItem.vue +62 -0
  180. package/vue-components/v3/sidebar/SidebarItemWithDropDown.vue +101 -104
  181. package/vue-components/v3/sidebar/SidebarMenuList.vue +9 -0
  182. package/vue-components/v3/sidebar/Steps.vue +152 -0
  183. package/vue-components/v3/sidebar/sidebar-tabs/SidebarTabs.vue +204 -0
  184. package/vue-components/v3/sidebar/sidebar-tabs/SidebarTabsLayout.vue +44 -0
  185. package/vue-components/v3/sidebar/sidebar-tabs/TabsContent.vue +99 -0
  186. package/vue-components/v3/tab/TabItem.vue +10 -12
  187. package/vue-components/v3/tab/Tabs.vue +36 -0
  188. package/vue-components/v3/tab/TabsBody.vue +7 -0
  189. package/vue-components/v3/table/EmptyTableInfo.vue +8 -0
  190. package/vue-components/v3/table/FakeTableCell.vue +22 -31
  191. package/vue-components/v3/table/InfoTable.vue +89 -61
  192. package/vue-components/v3/table/MultiInfoTable.vue +72 -95
  193. package/vue-components/v3/table/Table.vue +596 -157
  194. package/vue-components/v3/table/TableCell.vue +13 -24
  195. package/vue-components/v3/table/TableContainer.vue +50 -28
  196. package/vue-components/v3/table/TableRow.vue +65 -87
  197. package/vue-components/v3/table/table-cell/ArrayCell.vue +94 -103
  198. package/vue-components/v3/table/table-cell/CellValue.vue +74 -106
  199. package/vue-components/v3/table/table-cell/GenericCell.vue +43 -42
  200. package/vue-components/v3/table/table-cell/ObjectCell.vue +91 -101
  201. package/vue-components/v3/table/table-cell/ValueWithModal.vue +22 -31
  202. package/vue-components/v3/tabs/EditorTabs.vue +18 -24
  203. package/vue-components/v3/tag/Tag.vue +16 -12
  204. package/vue-components/v3/tag/Tags.vue +7 -0
  205. package/base/utilities/_derived-variables.scss +0 -25
  206. package/base/utilities/_initial-variables.scss +0 -215
  207. package/base/utilities/dark-theme.scss +0 -26
  208. package/components/_ac-card.scss +0 -597
  209. package/components/_ac-input.scss +0 -876
  210. package/mixins/stickyContent.js +0 -141
  211. package/plugins/caching.ts +0 -243
  212. package/vue-components/v3/long-running-tasks/LongRunningTaskItem.vue +0 -92
  213. package/vue-components/v3/modals/LongRunningTasksModal.vue +0 -400
  214. package/vue-components/v3/terminal/LongRunningTaskTerminal.vue +0 -148
  215. /package/components/{_ac-report.scss → _report.scss} +0 -0
@@ -1,3 +1,100 @@
1
+ <script setup lang="ts">
2
+ import { nextTick, onMounted, ref, watch } from "vue";
3
+
4
+ interface Props {
5
+ isDropDownOpen?: boolean;
6
+ title?: string;
7
+ icon?: string;
8
+ }
9
+
10
+ const props = withDefaults(defineProps<Props>(), {
11
+ isDropDownOpen: false,
12
+ title: "Sidebar Item",
13
+ icon: "https://cdn.appscode.com/k8s/icons/apiextensions.k8s.io/customresourcedefinitions.svg",
14
+ });
15
+
16
+ const emit = defineEmits(["dropDownItemChange"]);
17
+
18
+ const dropDownStatus = ref("close");
19
+ const dropDownSectionHeight = ref<string | null>(null);
20
+ const isCompMounted = ref(false);
21
+ const sectionItems = ref(null as HTMLElement | null);
22
+
23
+ const setDropdownMaxHeight = (mode: string) => {
24
+ if (mode === "open" && sectionItems.value) {
25
+ dropDownSectionHeight.value = `${sectionItems.value.scrollHeight}px`;
26
+ } else {
27
+ dropDownSectionHeight.value = null;
28
+ }
29
+ };
30
+
31
+ const toggleDropDownStatus = () => {
32
+ if (dropDownStatus.value === "open") {
33
+ dropDownStatus.value = "close";
34
+ } else dropDownStatus.value = "open";
35
+ };
36
+
37
+ onMounted(() => {
38
+ isCompMounted.value = true;
39
+ setTimeout(() => {
40
+ // for expanding dropdown
41
+ if (props.isDropDownOpen) {
42
+ setDropdownMaxHeight("open");
43
+ } else {
44
+ setDropdownMaxHeight("close");
45
+ }
46
+ }, 700);
47
+ });
48
+
49
+ watch(
50
+ () => props.title,
51
+ (n, o) => {
52
+ if (n && isCompMounted.value) {
53
+ nextTick(() => {
54
+ // for expanding dropdown
55
+ setDropdownMaxHeight("open");
56
+ });
57
+ }
58
+
59
+ if (o && isCompMounted.value) {
60
+ nextTick(() => {
61
+ // for expanding dropdown
62
+ setDropdownMaxHeight("close");
63
+ });
64
+ }
65
+ }
66
+ );
67
+
68
+ watch(
69
+ () => props.isDropDownOpen,
70
+ (n) => {
71
+ if (n) {
72
+ dropDownStatus.value = "open";
73
+ } else dropDownStatus.value = "close";
74
+ },
75
+ {
76
+ immediate: true,
77
+ }
78
+ );
79
+
80
+ watch(dropDownStatus, (n) => {
81
+ if (n === "open") {
82
+ // emit event to close other drop down items
83
+ emit("dropDownItemChange");
84
+
85
+ nextTick(() => {
86
+ const dropDownUl = sectionItems.value;
87
+ // debugger;
88
+ if (dropDownUl)
89
+ dropDownSectionHeight.value = `${dropDownUl.scrollHeight}px`;
90
+ });
91
+ } else {
92
+ // emit event to close other drop down items
93
+ dropDownSectionHeight.value = null;
94
+ }
95
+ });
96
+ </script>
97
+
1
98
  <template>
2
99
  <li :class="`is-${dropDownStatus}`">
3
100
  <a class="ac-dropdown-button" :title="title" @click="toggleDropDownStatus">
@@ -10,111 +107,11 @@
10
107
  </span>
11
108
  </a>
12
109
 
13
- <ul ref="sectionItems" :style="{ maxHeight: dropDownSectionHeight }">
110
+ <ul
111
+ ref="sectionItems"
112
+ :style="{ maxHeight: dropDownSectionHeight || undefined }"
113
+ >
14
114
  <slot />
15
115
  </ul>
16
116
  </li>
17
117
  </template>
18
-
19
- <script>
20
- import { defineComponent } from "vue";
21
-
22
- export default defineComponent({
23
- props: {
24
- isDropDownOpen: {
25
- type: Boolean,
26
- default: false,
27
- },
28
- title: {
29
- type: String,
30
- default: "Sidebar Item",
31
- },
32
- icon: {
33
- type: String,
34
- default: "@/assets/images/icons/basic.svg",
35
- },
36
- },
37
-
38
- emits: ["dropDownItemChange"],
39
-
40
- data() {
41
- return {
42
- dropDownStatus: "close",
43
- dropDownSectionHeight: null,
44
- isCompMounted: false,
45
- };
46
- },
47
-
48
- mounted() {
49
- this.isCompMounted = true;
50
- setTimeout(() => {
51
- // for expanding dropdown
52
- if (this.isDropDownOpen) {
53
- this.setDropdownMaxHeight("open");
54
- } else {
55
- this.setDropdownMaxHeight("close");
56
- }
57
- }, 700);
58
- },
59
-
60
- watch: {
61
- title(n, o) {
62
- if (n && this.isCompMounted) {
63
- this.$nextTick(() => {
64
- // for expanding dropdown
65
- this.setDropdownMaxHeight("open");
66
- });
67
- }
68
-
69
- if (o && this.isCompMounted) {
70
- this.$nextTick(() => {
71
- // for expanding dropdown
72
- this.setDropdownMaxHeight("close");
73
- });
74
- }
75
- },
76
- isDropDownOpen: {
77
- immediate: true,
78
- handler(n) {
79
- if (n) {
80
- this.dropDownStatus = "open";
81
- } else this.dropDownStatus = "close";
82
- },
83
- },
84
- dropDownStatus: {
85
- immediate: true,
86
- handler(n) {
87
- if (n === "open") {
88
- // emit event to close other drop down items
89
- this.$emit("dropDownItemChange");
90
-
91
- this.$nextTick(() => {
92
- const dropDownUl = this.$refs["sectionItems"];
93
- // debugger;
94
- if (dropDownUl)
95
- this.dropDownSectionHeight = `${dropDownUl.scrollHeight}px`;
96
- });
97
- } else {
98
- // emit event to close other drop down items
99
- this.dropDownSectionHeight = null;
100
- }
101
- },
102
- },
103
- },
104
-
105
- methods: {
106
- setDropdownMaxHeight(mode) {
107
- if (mode === "open") {
108
- this.dropDownSectionHeight = `${this.$refs["sectionItems"].scrollHeight}px`;
109
- } else {
110
- this.dropDownSectionHeight = null;
111
- }
112
- },
113
- toggleDropDownStatus() {
114
- if (this.dropDownStatus === "open") {
115
- this.dropDownStatus = "close";
116
- } else this.dropDownStatus = "open";
117
- },
118
- },
119
- });
120
- </script>
@@ -0,0 +1,9 @@
1
+ <script setup lang="ts"></script>
2
+
3
+ <template>
4
+ <ul class="menu-list ac-menu-list">
5
+ <slot />
6
+ </ul>
7
+ </template>
8
+
9
+ <style lang="scss"></style>
@@ -0,0 +1,152 @@
1
+ <script lang="ts" setup>
2
+ import FeCheck from "~icons/fe/check";
3
+ import type { Step } from "../../types/importFlow";
4
+
5
+ interface Props {
6
+ steps?: Step[];
7
+ activeStepIdentifier?: number;
8
+ activeSubStepIdentifier?: number;
9
+ }
10
+
11
+ withDefaults(defineProps<Props>(), {
12
+ steps: () => [],
13
+ activeStepIdentifier: 1,
14
+ activeSubStepIdentifier: 1,
15
+ });
16
+ </script>
17
+
18
+ <template>
19
+ <li
20
+ v-for="step in steps"
21
+ :key="step.identifier"
22
+ :class="{
23
+ 'is-hidden': !step.isVisible,
24
+ }"
25
+ >
26
+ <strong
27
+ :class="{
28
+ 'is-active': step.identifier <= activeStepIdentifier,
29
+ }"
30
+ >
31
+ <span
32
+ :class="{
33
+ 'step-count': true,
34
+ 'is-active': step.identifier <= activeStepIdentifier,
35
+ }"
36
+ >{{ step.identifier }}</span
37
+ >
38
+ <span class="label-text">{{ step.title }}</span>
39
+ </strong>
40
+ <ul
41
+ :class="{
42
+ 'is-hidden': step.identifier !== activeStepIdentifier,
43
+ }"
44
+ >
45
+ <li
46
+ v-for="substep in step.substeps"
47
+ :key="substep?.identifier"
48
+ :class="{
49
+ 'is-hidden': !substep.isVisible,
50
+ 'is-active': substep.identifier < activeSubStepIdentifier,
51
+ }"
52
+ >
53
+ <strong>
54
+ <span class="step-count"><FeCheck /></span>
55
+ <span
56
+ :class="{
57
+ 'label-text': true,
58
+ 'has-text-weight-semibold':
59
+ substep.identifier <= activeSubStepIdentifier,
60
+ }"
61
+ >{{ substep.title }}</span
62
+ >
63
+ </strong>
64
+ </li>
65
+ </ul>
66
+ </li>
67
+ </template>
68
+
69
+ <style lang="scss" scoped>
70
+ ul {
71
+ padding-left: 4px !important;
72
+ position: relative;
73
+ z-index: 1;
74
+ &::after {
75
+ position: absolute;
76
+ content: "";
77
+ left: 15px;
78
+ top: -16px;
79
+ width: 1px;
80
+ height: 100%;
81
+ /* colors/primary/40-primary */
82
+ border: 1px dashed #186cb4;
83
+ z-index: -1;
84
+ }
85
+ li {
86
+ display: block;
87
+ padding: 6px 0;
88
+ cursor: pointer;
89
+ strong {
90
+ /* colors/white */
91
+ color: #ffffff;
92
+ display: flex;
93
+ align-items: center;
94
+
95
+ .step-count {
96
+ width: 32px;
97
+ height: 32px;
98
+ margin-right: 8px;
99
+ display: flex;
100
+ align-items: center;
101
+ justify-content: center;
102
+ border-radius: 50%;
103
+ background-color: $primary-20;
104
+ border: 1px solid $primary-40;
105
+ color: $primary-80;
106
+ font-size: 16px;
107
+ &.is-active {
108
+ background-color: $primary;
109
+ color: $white-100;
110
+ border: 1px solid $primary-90;
111
+ }
112
+ }
113
+ }
114
+
115
+ ul {
116
+ max-height: 100% !important;
117
+
118
+ li {
119
+ &.is-active {
120
+ strong {
121
+ .step-count {
122
+ background-color: $primary;
123
+ color: $white-100;
124
+ border: 1px solid $primary-90;
125
+ }
126
+ .label-text {
127
+ color: $white-100;
128
+ font-weight: 500;
129
+ }
130
+ }
131
+ }
132
+ strong {
133
+ .step-count {
134
+ width: 22px;
135
+ height: 22px;
136
+ margin-right: 16px;
137
+ background: $primary-20;
138
+ color: $primary-80;
139
+ border: 1px solid $primary-40;
140
+ font-size: 14px;
141
+ }
142
+
143
+ .label-text {
144
+ color: $primary-95;
145
+ font-weight: 400;
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ </style>
@@ -0,0 +1,204 @@
1
+ <script setup lang="ts"></script>
2
+ <template>
3
+ <div class="sidebar-tabs">
4
+ <slot />
5
+ </div>
6
+ </template>
7
+
8
+ <style lang="scss">
9
+ .sidebar-tabs {
10
+ width: 220px;
11
+ border-right: 1px solid $primary-95;
12
+ padding: 8px;
13
+ height: calc(100vh - 50px);
14
+ ul {
15
+ li {
16
+ a {
17
+ display: flex;
18
+ align-items: center;
19
+ color: $primary-10;
20
+ position: relative;
21
+ z-index: 1;
22
+ padding: 8px 16px;
23
+ font-weight: 500;
24
+ transition: 0.3s ease-in-out;
25
+ align-items: center;
26
+ justify-content: space-between;
27
+
28
+ &:after {
29
+ position: absolute;
30
+ content: "";
31
+ left: 0;
32
+ top: 0;
33
+ width: 100%;
34
+ height: 100%;
35
+ background-color: $primary-95;
36
+ border-radius: 4px;
37
+ z-index: -1;
38
+ opacity: 0;
39
+ visibility: hidden;
40
+ transition: 0.3s ease-in-out;
41
+ }
42
+ &:hover {
43
+ color: $primary;
44
+
45
+ &:after {
46
+ opacity: 1;
47
+ visibility: visible;
48
+ background-color: $primary-97;
49
+ }
50
+ }
51
+ &.is-active {
52
+ color: $primary;
53
+ &:hover {
54
+ &::after {
55
+ background-color: $primary-90;
56
+ }
57
+ }
58
+ &:after {
59
+ opacity: 1;
60
+ visibility: visible;
61
+ }
62
+ &.is-danger {
63
+ color: $danger;
64
+ &:hover {
65
+ &::after {
66
+ background-color: $red-90;
67
+ }
68
+ }
69
+ &:after {
70
+ opacity: 1;
71
+ visibility: visible;
72
+ background-color: $red-95;
73
+ }
74
+ }
75
+ &.is-success {
76
+ color: $success;
77
+ &:hover {
78
+ &::after {
79
+ background-color: $green-90;
80
+ }
81
+ }
82
+ &:after {
83
+ opacity: 1;
84
+ visibility: visible;
85
+ background-color: $green-95;
86
+ }
87
+ }
88
+ &.is-warning {
89
+ color: $warning;
90
+ &:hover {
91
+ &::after {
92
+ background-color: $yellow-90;
93
+ }
94
+ }
95
+ &:after {
96
+ opacity: 1;
97
+ visibility: visible;
98
+ background-color: $yellow-95;
99
+ }
100
+ }
101
+ }
102
+ &.is-danger {
103
+ color: $danger;
104
+ &:hover {
105
+ &::after {
106
+ background-color: $red-90;
107
+ }
108
+ }
109
+ &:after {
110
+ opacity: 1;
111
+ visibility: visible;
112
+ background-color: transparent;
113
+ }
114
+ }
115
+ &.is-success {
116
+ color: $success;
117
+ &:hover {
118
+ &::after {
119
+ background-color: $green-90;
120
+ }
121
+ }
122
+ &:after {
123
+ opacity: 1;
124
+ visibility: visible;
125
+ background-color: transparent;
126
+ }
127
+ }
128
+ &.is-warning {
129
+ color: $warning;
130
+ &:hover {
131
+ &::after {
132
+ background-color: $yellow-90;
133
+ }
134
+ }
135
+ &:after {
136
+ opacity: 1;
137
+ visibility: visible;
138
+ background-color: transparent;
139
+ }
140
+ }
141
+ }
142
+ &.is-open {
143
+ transition: 0.3s ease-in-out;
144
+ ul {
145
+ max-height: 250px;
146
+ }
147
+ }
148
+ ul {
149
+ margin-left: 20px;
150
+ position: relative;
151
+ z-index: 1;
152
+ max-height: 0;
153
+ transition: 0.3s ease-in-out !important;
154
+ overflow: hidden;
155
+ &:after {
156
+ position: absolute;
157
+ content: "";
158
+ left: 4px;
159
+ top: 0;
160
+ width: 1px;
161
+ height: calc(100% - 10px);
162
+ background-color: $primary-90;
163
+ }
164
+ li {
165
+ a {
166
+ &:after {
167
+ left: -8px;
168
+ opacity: 0 !important;
169
+ visibility: hidden !important;
170
+ }
171
+ &::before {
172
+ position: absolute;
173
+ content: "";
174
+ left: 0;
175
+ top: 50%;
176
+ margin-top: -4px;
177
+ width: 8px;
178
+ height: 8px;
179
+ border-radius: 50%;
180
+ background-color: $primary;
181
+ transition: 0.3s ease-in-out;
182
+ opacity: 0;
183
+ visibility: hidden;
184
+ }
185
+ &:hover:not(&.is-active) {
186
+ &::before {
187
+ opacity: 1;
188
+ visibility: visible;
189
+ background-color: $primary-80;
190
+ }
191
+ }
192
+ &.is-active {
193
+ &::before {
194
+ opacity: 1;
195
+ visibility: visible;
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ </style>
@@ -0,0 +1,44 @@
1
+ <script lang="ts" setup>
2
+ interface Props {
3
+ isSidebarVisible?: boolean;
4
+ }
5
+ withDefaults(defineProps<Props>(), {
6
+ isSidebarVisible: true,
7
+ });
8
+ </script>
9
+
10
+ <template>
11
+ <div class="sidebar-tabs-layout is-flex">
12
+ <!-- sidebar tabs -->
13
+ <div class="sidebar-tabs-wrapper">
14
+ <slot name="sidebar-tabs" />
15
+ </div>
16
+ <!-- sidebar tabs -->
17
+
18
+ <div
19
+ class="content-wrapper"
20
+ :class="isSidebarVisible ? 'pl-220' : 'pl-0 pb-0'"
21
+ >
22
+ <!-- sidebar content -->
23
+ <slot name="tabs-content" />
24
+ <!-- sidebar content -->
25
+ </div>
26
+ </div>
27
+ </template>
28
+
29
+ <style lang="scss" scoped>
30
+ .sidebar-tabs-wrapper {
31
+ position: fixed;
32
+ background-color: $white-100;
33
+ }
34
+ .pl-220 {
35
+ padding-left: 220px;
36
+ }
37
+ .content-wrapper {
38
+ padding-bottom: 40px;
39
+ width: 100%;
40
+ &:has(.form-footer) {
41
+ padding-bottom: 0;
42
+ }
43
+ }
44
+ </style>