@appscode/design-system 1.1.0-alpha.8 → 1.1.0-beta.10

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 (200) hide show
  1. package/base/_video-player.scss +65 -0
  2. package/base/utilities/_all.scss +6 -5
  3. package/base/utilities/_colors.scss +408 -0
  4. package/base/utilities/_customize-bulma.scss +23 -27
  5. package/base/utilities/_extended.scss +9 -4
  6. package/base/utilities/{_default.scss → _global.scss} +185 -331
  7. package/base/utilities/_layouts.scss +157 -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/base/utilities/dark-theme.scss +1 -1
  12. package/components/_ac-accordion.scss +117 -117
  13. package/components/_ac-alert-box.scss +205 -263
  14. package/components/_ac-calendar.scss +4 -4
  15. package/components/_ac-card.scss +0 -597
  16. package/components/_ac-code-highlight.scss +6 -6
  17. package/components/_ac-content-layout.scss +165 -165
  18. package/components/_ac-drag.scss +11 -11
  19. package/components/_ac-input.scss +477 -452
  20. package/components/_ac-modal.scss +212 -212
  21. package/components/_ac-multi-select.scss +780 -751
  22. package/components/_ac-options.scss +122 -123
  23. package/components/_ac-select-box.scss +5 -5
  24. package/components/_ac-table.scss +503 -502
  25. package/components/_ac-tabs.scss +39 -38
  26. package/components/_ac-tags.scss +116 -116
  27. package/components/_ac-terminal.scss +95 -51
  28. package/components/_add-card.scss +3 -3
  29. package/components/_all.scss +29 -26
  30. package/components/_app-drawer.scss +0 -134
  31. package/components/_breadcumb.scss +0 -71
  32. package/components/_buttons.scss +779 -779
  33. package/components/_card-body-wrapper.scss +5 -5
  34. package/components/_dashboard-header.scss +0 -115
  35. package/components/_direct-deploy.scss +8 -8
  36. package/components/_go-to-top.scss +1 -1
  37. package/components/_image-upload.scss +5 -5
  38. package/components/_left-sidebar-menu.scss +448 -579
  39. package/components/_monaco-editor.scss +1 -1
  40. package/components/_navbar.scss +786 -752
  41. package/components/_nested-list.scss +1 -1
  42. package/components/_overview-info.scss +7 -7
  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 +10 -10
  49. package/components/_progress-bar.scss +12 -12
  50. package/components/_subscription-card.scss +14 -14
  51. package/components/_table-of-content.scss +4 -4
  52. package/components/_tfa.scss +9 -9
  53. package/components/_widget-menu.scss +247 -247
  54. package/components/_wizard.scss +557 -559
  55. package/components/ac-toaster/_ac-toasted.scss +7 -12
  56. package/components/bbum/_activities-header.scss +1 -1
  57. package/components/bbum/_card-team.scss +12 -12
  58. package/components/bbum/_information-center.scss +13 -13
  59. package/components/bbum/_left-sidebar.scss +8 -8
  60. package/components/bbum/_mobile-desktop.scss +7 -7
  61. package/components/bbum/_post.scss +5 -5
  62. package/components/bbum/_sign-up-notification.scss +10 -10
  63. package/components/bbum/_single-post-preview.scss +21 -21
  64. package/components/bbum/_user-profile.scss +10 -10
  65. package/components/ui-builder/_ui-builder.scss +15 -15
  66. package/components/ui-builder/_vue-open-api.scss +515 -2
  67. package/layouts/_code-preview.scss +11 -11
  68. package/main.scss +26 -10
  69. package/package.json +1 -1
  70. package/plugins/theme.js +11 -9
  71. package/plugins/vue-toaster.js +1 -1
  72. package/vue-components/plugins/time-convert.js +49 -0
  73. package/vue-components/text.vue +1 -0
  74. package/vue-components/types/cluster.ts +6 -0
  75. package/vue-components/types/importFlow.ts +16 -0
  76. package/vue-components/types/longRunningTasks.ts +20 -0
  77. package/vue-components/types/notification.ts +6 -0
  78. package/vue-components/types/previewYaml.ts +8 -0
  79. package/vue-components/types/table.ts +54 -0
  80. package/vue-components/types/theme.ts +10 -0
  81. package/vue-components/types/user.ts +22 -0
  82. package/vue-components/v2/card/Card.vue +1 -1
  83. package/vue-components/v2/card/OverviewCards.vue +17 -2
  84. package/vue-components/v2/editor/FilteredFileEditor.vue +2 -2
  85. package/vue-components/v2/editor/ResourceKeyValueEditor.vue +21 -21
  86. package/vue-components/v2/icons/Ellipsis.vue +2 -1
  87. package/vue-components/v2/modal/Modal.vue +0 -5
  88. package/vue-components/v2/navbar/Appdrawer.vue +37 -12
  89. package/vue-components/v2/navbar/Navbar.vue +3 -3
  90. package/vue-components/v2/navbar/NavbarItem.vue +3 -1
  91. package/vue-components/v2/navbar/NavbarItemContent.vue +1 -1
  92. package/vue-components/v2/navbar/User.vue +5 -22
  93. package/vue-components/v2/pagination/Pagination.vue +66 -0
  94. package/vue-components/v2/sidebar/SidebarItem.vue +10 -7
  95. package/vue-components/v3/accordion/Accordion.vue +151 -0
  96. package/vue-components/v3/alert/Alert.vue +238 -0
  97. package/vue-components/v3/alert/Toast.vue +79 -0
  98. package/vue-components/v3/banner/Banner.vue +10 -0
  99. package/vue-components/v3/breadcrumbs/Breadcrumb.vue +104 -0
  100. package/vue-components/v3/button/Button.vue +839 -58
  101. package/vue-components/v3/button/Buttons.vue +6 -0
  102. package/vue-components/v3/button/DownloadBtn.vue +31 -0
  103. package/vue-components/v3/cards/Card.vue +32 -0
  104. package/vue-components/v3/cards/CardContent.vue +7 -0
  105. package/vue-components/v3/cards/CardHeader.vue +14 -0
  106. package/vue-components/v3/cards/Cards.vue +7 -0
  107. package/vue-components/v3/cards/Cluster.vue +149 -0
  108. package/vue-components/v3/cards/Counter.vue +39 -0
  109. package/vue-components/v3/cards/FeatureCard.vue +71 -0
  110. package/vue-components/v3/cards/FeatureCards.vue +6 -0
  111. package/vue-components/v3/cards/InfoCard.vue +243 -0
  112. package/vue-components/v3/cards/Monitoring.vue +94 -0
  113. package/vue-components/v3/cards/OverviewCard.vue +24 -0
  114. package/vue-components/v3/cards/OverviewCards.vue +31 -0
  115. package/vue-components/v3/cards/Payment.vue +62 -0
  116. package/vue-components/v3/cards/Vendor.vue +85 -0
  117. package/vue-components/v3/content/ContentHeader.vue +39 -30
  118. package/vue-components/v3/content/ContentLayout.vue +20 -0
  119. package/vue-components/v3/content/ContentTable.vue +43 -62
  120. package/vue-components/v3/dropdown/DropdownDivider.vue +2 -0
  121. package/vue-components/v3/dropdown/DropdownItem.vue +2 -0
  122. package/vue-components/v3/dropdown/DropdownMenu.vue +85 -91
  123. package/vue-components/v3/editor/Editor.vue +100 -113
  124. package/vue-components/v3/editor/FilteredFileEditor.vue +317 -127
  125. package/vue-components/v3/editor/ResourceKeyValueEditor.vue +70 -94
  126. package/vue-components/v3/footer/FooterArea.vue +34 -0
  127. package/vue-components/v3/footer/FooterItem.vue +32 -0
  128. package/vue-components/v3/footer/FooterItems.vue +15 -0
  129. package/vue-components/v3/footer/Info.vue +23 -0
  130. package/vue-components/v3/footer/Status.vue +42 -0
  131. package/vue-components/v3/footer/Usage.vue +44 -0
  132. package/vue-components/v3/form/Form.vue +24 -33
  133. package/vue-components/v3/form/FormFooterControl.vue +7 -0
  134. package/vue-components/v3/form/FormFooterControls.vue +7 -0
  135. package/vue-components/v3/form-fields/AcSingleInput.vue +528 -0
  136. package/vue-components/v3/form-fields/Input.vue +19 -14
  137. package/vue-components/v3/header/Header.vue +119 -25
  138. package/vue-components/v3/header/HeaderItem.vue +18 -0
  139. package/vue-components/v3/header/HeaderItems.vue +4 -0
  140. package/vue-components/v3/icons/Ellipsis.vue +2 -0
  141. package/vue-components/v3/loaders/InfoCardLoader.vue +65 -0
  142. package/vue-components/v3/loaders/ResourceLoader.vue +4 -12
  143. package/vue-components/v3/loaders/SidebarLoader.vue +4 -12
  144. package/vue-components/v3/long-running-tasks/LongRunningTaskItem.vue +17 -15
  145. package/vue-components/v3/modal/Modal.vue +292 -96
  146. package/vue-components/v3/modals/DeleteConfirmationModal.vue +37 -50
  147. package/vue-components/v3/modals/JsonShowModal.vue +62 -68
  148. package/vue-components/v3/modals/LongRunningTasksModal.vue +145 -143
  149. package/vue-components/v3/navbar/Appdrawer.vue +196 -51
  150. package/vue-components/v3/navbar/Navbar.vue +298 -0
  151. package/vue-components/v3/navbar/NavbarItem.vue +81 -0
  152. package/vue-components/v3/navbar/NavbarItemContent.vue +284 -0
  153. package/vue-components/v3/navbar/Notification.vue +179 -0
  154. package/vue-components/v3/navbar/ThemeMode.vue +128 -112
  155. package/vue-components/v3/navbar/User.vue +383 -268
  156. package/vue-components/v3/notification/AlertBox.vue +41 -44
  157. package/vue-components/v3/notification/Notification.vue +49 -43
  158. package/vue-components/v3/notification/NotificationItem.vue +51 -19
  159. package/vue-components/v3/option-dots/Options.vue +188 -0
  160. package/vue-components/v3/pagination/Pagination.vue +203 -99
  161. package/vue-components/v3/preloader/Preloader.vue +23 -0
  162. package/vue-components/v3/searchbars/SearchBar.vue +59 -34
  163. package/vue-components/v3/sidebar/AccentColorPicker.vue +97 -0
  164. package/vue-components/v3/sidebar/ClusterSwitcher.vue +835 -81
  165. package/vue-components/v3/sidebar/Sidebar.vue +267 -0
  166. package/vue-components/v3/sidebar/SidebarBody.vue +7 -0
  167. package/vue-components/v3/sidebar/SidebarFooter.vue +80 -0
  168. package/vue-components/v3/sidebar/SidebarHeader.vue +124 -0
  169. package/vue-components/v3/sidebar/SidebarItem.vue +62 -0
  170. package/vue-components/v3/sidebar/SidebarItemWithDropDown.vue +101 -104
  171. package/vue-components/v3/sidebar/SidebarMenuList.vue +9 -0
  172. package/vue-components/v3/sidebar/Steps.vue +152 -0
  173. package/vue-components/v3/sidebar/sidebar-tabs/SidebarTabs.vue +128 -0
  174. package/vue-components/v3/sidebar/sidebar-tabs/SidebarTabsLayout.vue +29 -0
  175. package/vue-components/v3/sidebar/sidebar-tabs/TabsContent.vue +99 -0
  176. package/vue-components/v3/tab/TabItem.vue +10 -12
  177. package/vue-components/v3/tab/Tabs.vue +9 -0
  178. package/vue-components/v3/tab/TabsBody.vue +7 -0
  179. package/vue-components/v3/table/EmptyTableInfo.vue +8 -0
  180. package/vue-components/v3/table/FakeTableCell.vue +22 -31
  181. package/vue-components/v3/table/InfoTable.vue +89 -61
  182. package/vue-components/v3/table/MultiInfoTable.vue +72 -95
  183. package/vue-components/v3/table/Table.vue +589 -151
  184. package/vue-components/v3/table/TableCell.vue +20 -23
  185. package/vue-components/v3/table/TableContainer.vue +50 -28
  186. package/vue-components/v3/table/TableRow.vue +63 -85
  187. package/vue-components/v3/table/table-cell/ArrayCell.vue +67 -79
  188. package/vue-components/v3/table/table-cell/CellValue.vue +97 -103
  189. package/vue-components/v3/table/table-cell/GenericCell.vue +43 -42
  190. package/vue-components/v3/table/table-cell/ObjectCell.vue +67 -79
  191. package/vue-components/v3/table/table-cell/ValueWithModal.vue +22 -31
  192. package/vue-components/v3/tabs/EditorTabs.vue +18 -24
  193. package/vue-components/v3/tag/Tag.vue +15 -12
  194. package/vue-components/v3/tag/Tags.vue +7 -0
  195. package/vue-components/v3/terminal/LongRunningTaskTerminal.vue +26 -23
  196. package/base/utilities/_derived-variables.scss +0 -25
  197. package/base/utilities/_initial-variables.scss +0 -215
  198. package/components/_basic-card.scss +0 -124
  199. package/mixins/stickyContent.js +0 -141
  200. package/plugins/caching.ts +0 -243
@@ -1,215 +0,0 @@
1
- // Typography
2
- @import url("https://fonts.googleapis.com/css2?family=Inconsolata:wght@200;300;400;500;600;700&family=Roboto:ital,wght@0,400;0,500;0,700;0,900;1,400;1,500;1,700&display=swap");
3
-
4
- $ac-family-heading: "Roboto", sans-serif;
5
- $ac-family-paragraph: "Roboto", sans-serif;
6
-
7
- // body font size
8
- $font-size-medium: 16px;
9
- $font-size-semi-normal: 15px;
10
- $font-size-normal: 14px;
11
- $font-size-small: 13px;
12
- $font-size-extra-small: 12px;
13
- $font-size-tiny: 11px;
14
-
15
- // Base Color
16
- $ac-orange: #ff8000;
17
- $ac-yellow: #f7ad2a;
18
- $ac-green: #158748;
19
- $ac-blue: #0aafff;
20
- $ac-purple: #791e94;
21
- $ac-red: #ff3729;
22
-
23
- // Products Color
24
- $voyager-primary: #2d2a78;
25
- $guard-primary: #d84e27;
26
- $kubeci-primary: #2c3e50;
27
- $kubed-primary: #1c7bd4;
28
- $kubedb-primary: #4d4dcb;
29
- $kubesheild-primary: #2516c7;
30
- $kubevault-primary: #326ce5;
31
- $pharmer-primary: #326de6;
32
- $searchlight-primary: #111738;
33
- $servicebroker-primary: #29b4a2;
34
- $stash-primary: #5e2dea;
35
- $swift-primary: #3f51b6;
36
-
37
- // Colors Primary
38
- // root colors
39
- :root {
40
- --hsl-hue: 208;
41
- --hsl-saturation: 77%;
42
- --hsl-lightness: 42%;
43
- --contrast-threshold: 60%;
44
- --ac-bg: #ffffff;
45
- --ac-white: #ffffff;
46
- --ac-full-white: #ffffff;
47
- --ac-gray-dark: #5f5f5f;
48
- --ac-gray-light: #8d8d8d;
49
- --ac-gray-lightest: #d1d1d1;
50
- --ac-white-light: #d2e7f9;
51
- --ac-white-lighter: #f2f5f8;
52
- --ac-white-lightest: #f8f9fb;
53
-
54
- --ac-black: #000000;
55
- --ac-color-text-90: #323232;
56
- --ac-link-black: #32325d;
57
- --ac-gray-darker: #494949;
58
- --ac-gray: #767676;
59
- --ac-gray-lighter: #a4a4a4;
60
- --ac-white-text: #b4c0cc;
61
-
62
- // theme color
63
- --dark-bg: #21272e;
64
- --dark-bg-light: #2e323c;
65
-
66
- --ac-blue-light: #eceff4;
67
- --ac-bg-light-gray: #f4f6f9;
68
- --table-header: #e4e8ef;
69
- --ac-label-text: #a6abbd;
70
-
71
- --font-hsl-hue: 0;
72
- --font-hsl-saturation: 0%;
73
- --font-hsl-lightness: 11%;
74
-
75
- --ac-primary: hsla(
76
- var(--hsl-hue),
77
- var(--hsl-saturation),
78
- var(--hsl-lightness),
79
- 1
80
- );
81
-
82
- --ac-text: hsla(
83
- var(--font-hsl-hue),
84
- calc(var(--font-hsl-saturation) + 10%),
85
- calc(var(--font-hsl-lightness) + 10%),
86
- 1
87
- );
88
- --ac-text-heading: hsla(
89
- var(--font-hsl-hue),
90
- var(--font-hsl-saturation),
91
- var(--font-hsl-lightness),
92
- 1
93
- );
94
- --ac-color-value: hsl(
95
- var(--font-hsl-hue),
96
- var(--font-hsl-saturation),
97
- calc(var(--font-hsl-lightness) + 25%)
98
- );
99
- }
100
-
101
- $ac-bg: var(--ac-bg);
102
- $ac-primary: var(--ac-primary);
103
- $ac-color-value: var(--ac-color-value);
104
-
105
- // Colors
106
- $ac-black: var(--ac-black);
107
- $ac-color-text-90: var(--ac-color-text-90);
108
- $ac-link-black: var(--ac-link-black);
109
- $ac-gray-darker: var(--ac-gray-darker);
110
- $ac-gray-dark: var(--ac-gray-dark);
111
- $ac-gray: var(--ac-gray);
112
- $ac-gray-light: var(--ac-gray-light);
113
- $ac-gray-lighter: var(--ac-gray-lighter);
114
- $ac-gray-lightest: var(--ac-gray-lightest);
115
- $ac-white-light: var(--ac-white-light);
116
- $ac-white-lighter: var(--ac-white-lighter);
117
- $ac-white-lightest: var(--ac-white-lightest);
118
- $ac-white: var(--ac-white);
119
- $ac-full-white: var(--ac-full-white);
120
-
121
- $ac-blue-light: var(--ac-blue-light);
122
- $ac-bg-light-gray: var(--ac-bg-light-gray);
123
- $table-header: var(--table-header);
124
- $ac-label-text: var(--ac-label-text);
125
-
126
- // for dark theme CSS
127
- $dark-bg: var(--dark-bg);
128
- $dark-bg-light: var(--dark-bg-light);
129
-
130
- /* Deafult Margin & Padding view-height & view-width */
131
- @for $i from 0 through 100 {
132
- .m-#{$i} {
133
- margin: #{$i}px !important;
134
- }
135
-
136
- .mt-#{$i} {
137
- margin-top: #{$i}px !important;
138
- }
139
-
140
- .mb-#{$i} {
141
- margin-bottom: #{$i}px !important;
142
- }
143
-
144
- .ml-#{$i} {
145
- margin-left: #{$i}px !important;
146
- }
147
-
148
- .mr-#{$i} {
149
- margin-right: #{$i}px !important;
150
- }
151
-
152
- .p-#{$i} {
153
- padding: #{$i}px !important;
154
- }
155
-
156
- .pt-#{$i} {
157
- padding-top: #{$i}px !important;
158
- }
159
-
160
- .pb-#{$i} {
161
- padding-bottom: #{$i}px !important;
162
- }
163
-
164
- .pl-#{$i} {
165
- padding-left: #{$i}px !important;
166
- }
167
-
168
- .pr-#{$i} {
169
- padding-right: #{$i}px !important;
170
- }
171
-
172
- .vh-#{$i} {
173
- height: #{$i}vh !important;
174
- }
175
-
176
- .vw-#{$i} {
177
- width: #{$i}vw !important;
178
- }
179
-
180
- .font-size-#{$i} {
181
- font-size: #{$i}px !important;
182
- }
183
- }
184
-
185
- .mx-auto {
186
- margin: 0 auto;
187
- }
188
- .mr-auto{
189
- margin-right: auto;
190
- }
191
- .ml-auto{
192
- margin-left: auto;
193
- }
194
-
195
- /* Deafult height & widht */
196
- @for $i from 0 through 300 {
197
- .height-#{$i} {
198
- height: #{$i}px !important;
199
- }
200
-
201
- .width-#{$i} {
202
- width: #{$i}px !important;
203
- }
204
- }
205
-
206
- /* Deafult z-index and font-weight*/
207
- @for $i from 0 through 10 {
208
- .z-index-#{$i} {
209
- z-index: #{$i} !important;
210
- }
211
-
212
- .font-weight-#{$i*100} {
213
- font-weight: #{$i * 100} !important;
214
- }
215
- }
@@ -1,124 +0,0 @@
1
- .card-details {
2
- border: 1px solid #d2e7f9;
3
- padding: 30px 20px;
4
- width: calc(33.3% - 8px);
5
- min-width: 400px;
6
- max-width: 525px;
7
- // border-radius: 4px;
8
- transition: 0.3s ease-in-out;
9
- position: relative;
10
- z-index: 1;
11
- @extend %card-hover;
12
-
13
- // &:hover {
14
- // border: 1px solid #1971bd;
15
- // }
16
-
17
- .c-header {
18
- display: flex;
19
- margin-bottom: 20px;
20
-
21
- .c-logo {
22
- width: 54px;
23
- height: 54px;
24
- background: #e8f3fc;
25
- border-radius: 50%;
26
- display: flex;
27
- align-items: center;
28
- justify-content: center;
29
- margin-right: 24px;
30
-
31
- img {
32
- height: 24px;
33
- }
34
- }
35
-
36
- .c-content {
37
- width: calc(100% - 78px);
38
- h4 {
39
- font-size: 18px;
40
- line-height: 130%;
41
- color: #030d17;
42
- }
43
- .icon {
44
- color: #0c365a;
45
- cursor: pointer;
46
- position: relative;
47
- z-index: 1;
48
- &:after {
49
- position: absolute;
50
- content: "";
51
- border-radius: 50%;
52
- width: 32px;
53
- height: 32px;
54
- background: #e8f3fc;
55
- opacity: 0;
56
- visibility: hidden;
57
- transition: 0.3s ease-in-out;
58
- z-index: -1;
59
- }
60
- &:hover {
61
- &:after {
62
- opacity: 1;
63
- visibility: visible;
64
- }
65
- }
66
- }
67
- .tags {
68
- margin-top: 12px;
69
- }
70
- }
71
- }
72
-
73
- .c-body {
74
- display: flex;
75
- flex-wrap: wrap;
76
- gap: 20px;
77
- justify-content: space-between;
78
- p {
79
- width: calc(25% - 16px);
80
-
81
- span {
82
- font-size: 11px;
83
- color: #666666;
84
- display: block;
85
- }
86
- strong {
87
- color: #061b2d;
88
- font-size: 13px;
89
- font-weight: 400;
90
- }
91
- }
92
- }
93
- }
94
-
95
- // ac card
96
- .card-basic {
97
- padding: 20px;
98
- width: calc(25% - 8px);
99
- max-width: 390px;
100
- min-width: 290px;
101
- position: relative;
102
- @extend %card-hover;
103
-
104
- .required {
105
- position: absolute;
106
- left: 20px;
107
- top: -9px;
108
- }
109
- .c-header {
110
- .c-title {
111
-
112
- h4 {
113
- font-size: 18px;
114
- color: #061b2d;
115
- }
116
- }
117
- }
118
-
119
- .c-body {
120
- p {
121
- color: #0C365A;
122
- }
123
- }
124
- }
@@ -1,141 +0,0 @@
1
- module.exports = {
2
- data() {
3
- return {
4
- stickyByRootRef: true,
5
- topBoundary_Ref: "",
6
- topBoundary_Sticky: 0,
7
- contentsArray_Sticky: [],
8
- isStickySectionViewed: [],
9
- mutationObserver: null
10
- };
11
- },
12
-
13
- mounted() {
14
- if (this.stickyByRootRef) {
15
- this.topBoundary_Sticky = Math.max(
16
- this.$refs[this.topBoundary_Ref].getBoundingClientRect().top,
17
- this.topBoundary_Sticky,
18
- 210
19
- ); // 201 is for min-top-boundary
20
- }
21
- this.configSticky();
22
- window.addEventListener("resize", this.onWindowResize);
23
- window.addEventListener("scroll", this.configSticky);
24
-
25
- // first declare the mutation observer handler method
26
- const handler = mutationList => {
27
- // loop through the list of mutations
28
- for (const mutation of mutationList) {
29
- if (mutation.type === "childList") {
30
- // react to child nodes added or removed
31
- this.configSticky();
32
- }
33
- }
34
- };
35
- // Create an observer instance linked to the callback function
36
- this.mutationObserver = new MutationObserver(handler);
37
- // Start observing the target node for configured mutations
38
- this.contentsArray_Sticky.forEach(item => {
39
- this.mutationObserver.observe(this.$refs[item[0]], {
40
- attributes: false,
41
- childList: true,
42
- subtree: true
43
- });
44
- });
45
- },
46
-
47
- beforeDestroy() {
48
- window.removeEventListener("resize", this.onWindowResize);
49
- window.removeEventListener("scroll", this.configSticky);
50
- // detach the mutation observer
51
- this.mutationObserver.disconnect();
52
- },
53
-
54
- methods: {
55
- onWindowResize() {
56
- if (this.stickyByRootRef) {
57
- this.updateSticky(
58
- this.topBoundary_Ref,
59
- this.contentsArray_Sticky,
60
- true
61
- );
62
- }
63
- },
64
-
65
- // initialize the data of full sticky section
66
- // called at created hook
67
- initStickyData(topBoundary, contentsArray, hasTopRef) {
68
- if (hasTopRef) {
69
- this.topBoundary_Ref = topBoundary;
70
- } else {
71
- this.topBoundary_Sticky = topBoundary;
72
- }
73
- this.stickyByRootRef = hasTopRef;
74
- this.contentsArray_Sticky = contentsArray;
75
- },
76
-
77
- // to update top boundary and content array
78
- updateSticky(topBoundary, contentsArray, hasTopRef) {
79
- this.initStickyData(topBoundary, contentsArray, hasTopRef);
80
- if (this.stickyByRootRef) {
81
- this.topBoundary_Sticky = Math.max(
82
- this.$refs[this.topBoundary_Ref].getBoundingClientRect().top,
83
- this.topBoundary_Sticky,
84
- 210
85
- ); // 210 is for min-top-boundary
86
- }
87
- this.configSticky();
88
- },
89
-
90
- // to check the current sticky section
91
- configSticky() {
92
- this.setBottomSectionConfig(
93
- this.$refs,
94
- this.contentsArray_Sticky,
95
- window.innerHeight,
96
- this.topBoundary_Sticky
97
- );
98
- },
99
-
100
- // Handle Multiple sticky section
101
- setBottomSectionConfig(refs, refArray, windowHeight, topBoundary) {
102
- refArray.forEach((item, idx) => {
103
- const contentRef = refs[item[0]];
104
- const actionRef = refs[item[1]];
105
- const bound = contentRef.getBoundingClientRect();
106
-
107
- if (actionRef.getBoundingClientRect().bottom <= windowHeight) {
108
- this.isStickySectionViewed[idx] = true;
109
- }
110
-
111
- // Extra 21 for margin-top
112
- if (
113
- bound.top < topBoundary + 21 &&
114
- bound.bottom > windowHeight - actionRef.offsetHeight
115
- ) {
116
- if (
117
- !actionRef.classList.contains("is-sticky") &&
118
- this.isStickySectionViewed[idx]
119
- ) {
120
- actionRef.classList.add("is-sticky");
121
- }
122
- } else {
123
- if (actionRef.classList.contains("is-sticky")) {
124
- actionRef.classList.remove("is-sticky");
125
- }
126
- }
127
- });
128
- },
129
-
130
- // to remove is-sticky class
131
- removeAllSticky() {
132
- this.isStickySectionViewed = [];
133
- this.contentsArray_Sticky.forEach((item) => {
134
- const actionRef = this.$refs[item[1]];
135
- if (actionRef.classList.contains("is-sticky")) {
136
- actionRef.classList.remove("is-sticky");
137
- }
138
- });
139
- }
140
- }
141
- };
@@ -1,243 +0,0 @@
1
- import { AxiosRequestConfig, AxiosResponse } from "axios";
2
- import md5 from "crypto-js/md5";
3
- import stringify from "fast-json-stable-stringify";
4
-
5
- const resourceListApiRgx =
6
- /^\/clusters\/([^/]+)\/([^/]+)\/proxy\/([^/]+)\/([^/]+)(\/namespaces\/([^/?]+))?\/([^/?]+)(.*)$/;
7
- const usermenuUpdateApiRgx =
8
- /^\/clusters\/([^/]+)\/([^/]+)\/proxy\/meta\.k8s\.appscode\.com\/([^/]+)\/usermenus\/cluster$/;
9
-
10
- function getRequestInterceptor(config: AxiosRequestConfig) {
11
- // get call
12
- const { url, _recurringCall, params } = config;
13
- const matchListApi = url?.match(resourceListApiRgx);
14
- if (matchListApi) {
15
- // url matches list / render api call
16
- const [, user, cluster, group, version, , namespace, resource] =
17
- matchListApi;
18
-
19
- const suffix = `${user}.${cluster}.${group}.${version}.${resource}${
20
- namespace ? ".ns." + namespace : ""
21
- }${params ? ".q." + md5(stringify(params)).toString() : ""}`;
22
-
23
- if (_recurringCall) {
24
- // always send latest date time as ctag
25
- return new Date().getTime();
26
- } else {
27
- // read ctag from local storage if exists
28
- const storageKey = `ctag.${suffix}`;
29
- // read local storage ctag
30
- return localStorage.getItem(storageKey);
31
- }
32
- }
33
- }
34
-
35
- function getResponseInterceptor(resp: AxiosResponse) {
36
- // get call
37
- const { config, headers } = resp;
38
- const { url, _recurringCall, params } = config;
39
-
40
- // queryParams without ctag
41
- const queryParamsWithoutCtag = Object.keys(params).reduce((ob, key) => {
42
- if (key !== "ctag") return { ...ob, [key]: params[key] };
43
- else return { ...ob };
44
- }, {});
45
-
46
- const matchListApi = url?.match(resourceListApiRgx);
47
- if (matchListApi) {
48
- // url matches list / render api call
49
- // window.console.log(matchListApi)
50
- const [, user, cluster, group, version, , namespace, resource] =
51
- matchListApi;
52
-
53
- const suffix = `${user}.${cluster}.${group}.${version}.${resource}${
54
- namespace ? ".ns." + namespace : ""
55
- }${
56
- params ? ".q." + md5(stringify(queryParamsWithoutCtag)).toString() : ""
57
- }`;
58
-
59
- const storageKey = `etag.${suffix}`;
60
- // local storage etag
61
- const eTag = localStorage.getItem(storageKey);
62
- // etag in header
63
- const headerEtag = headers?.["etag"];
64
-
65
- // window.console.log({ eTag, headerEtag, _recurringCall, url });
66
-
67
- if (_recurringCall) {
68
- // for recurring api call
69
- if (headerEtag && headerEtag !== eTag) {
70
- // etag missmatch
71
- if (params.ctag) {
72
- // save request query parameter ctag into local storage
73
- localStorage.setItem(`ctag.${suffix}`, params.ctag);
74
- }
75
- // update store etag with latest header etag
76
- localStorage.setItem(`etag.${suffix}`, headerEtag);
77
-
78
- if (namespace) {
79
- // for namespaced list calls if etag missmatch happens
80
- // update the ctag storage for all namespaces
81
- // this will force the all namespaced list call to ignore disk cache
82
- localStorage.setItem(
83
- `etag.${user}.${cluster}.${group}.${version}.${resource}`,
84
- new Date().getTime().toString()
85
- );
86
- }
87
- }
88
- } else {
89
- // not recurring api call
90
- if (eTag !== headerEtag && headerEtag) {
91
- // if the etag missmatches, then the data has changed
92
- // update local etag
93
- localStorage.setItem(storageKey, headerEtag);
94
- }
95
- }
96
- }
97
- }
98
-
99
- function putResponseInterceptor(resp: AxiosResponse) {
100
- const { config } = resp;
101
- const { url } = config;
102
- const matchUsermenuUpdate = url?.match(usermenuUpdateApiRgx);
103
- if (matchUsermenuUpdate) {
104
- // user menu update api is called
105
- const [, user, cluster, version] = matchUsermenuUpdate;
106
-
107
- // calculate the local storage key
108
- const renderStorageKey = `ctag.${user}.${cluster}.meta.k8s.appscode.com.${version}.rendermenus.q.${md5(
109
- stringify({
110
- apiVersion: `meta.k8s.appscode.com/${version}`,
111
- kind: "RenderMenu",
112
- request: {
113
- menu: "cluster",
114
- mode: "Accordion",
115
- },
116
- })
117
- ).toString()}`;
118
- const availableMenuStorageKey = `ctag.${user}.${cluster}.meta.k8s.appscode.com.${version}.usermenus`;
119
-
120
- // set new ctag to that storage key
121
- // next time render menu is called, cached data won't be used
122
- localStorage.setItem(renderStorageKey, new Date().getTime().toString());
123
- // for all available menus api
124
- localStorage.setItem(
125
- availableMenuStorageKey,
126
- new Date().getTime().toString()
127
- );
128
- }
129
- }
130
-
131
- export function handleCacheFromYamls(
132
- yamls: Array<{
133
- apiVersion: string;
134
- kind: string;
135
- metadata: { name: string; namespace: string };
136
- }>,
137
- user: string,
138
- cluster: string,
139
- gkToGvrMap: Record<string, string>
140
- ) {
141
- return function () {
142
- yamls.forEach((yaml) => {
143
- const { apiVersion, kind, metadata } = yaml;
144
- const { namespace } = metadata || {};
145
- const apiVersionMatch = apiVersion.match(/^(([^/]+)\/)?([^/]+)$/);
146
- if (apiVersionMatch) {
147
- // separate the group and version
148
- const [, , group] = apiVersionMatch;
149
- const groupKind = `${group || "core"}/${kind}`;
150
- const gvr = (gkToGvrMap && gkToGvrMap[groupKind]) || "";
151
-
152
- const storageKeyPrefix = `ctag.${user}.${cluster}.${gvr.replaceAll(
153
- "/",
154
- "."
155
- )}`;
156
-
157
- // clear list cache for all namespaces
158
- localStorage.setItem(
159
- `${storageKeyPrefix}.q.${md5(
160
- stringify({ convertToTable: true })
161
- ).toString()}`,
162
- new Date().getTime().toString()
163
- );
164
- // clear list cache for specific namespace
165
- localStorage.setItem(
166
- `${storageKeyPrefix}.ns.${namespace || "default"}.q.${md5(
167
- stringify({ convertToTable: true })
168
- ).toString()}`,
169
- new Date().getTime().toString()
170
- );
171
-
172
- // clear for genericresources and resourcesummaries
173
- localStorage.setItem(
174
- `ctag.${user}.${cluster}.core.k8s.appscode.com.v1alpha1.resourcesummaries.q.${md5(
175
- stringify({
176
- convertToTable: true,
177
- labelSelector: `k8s.io/group=${group}`,
178
- })
179
- ).toString()}`,
180
- new Date().getTime().toString()
181
- );
182
- localStorage.setItem(
183
- `ctag.${user}.${cluster}.core.k8s.appscode.com.v1alpha1.resourcesummaries.q.${md5(
184
- stringify({
185
- convertToTable: true,
186
- labelSelector: `k8s.io/group-kind=${kind}.${group}`,
187
- })
188
- ).toString()}`,
189
- new Date().getTime().toString()
190
- );
191
- localStorage.setItem(
192
- `ctag.${user}.${cluster}.core.k8s.appscode.com.v1alpha1.genericresources.q.${md5(
193
- stringify({
194
- convertToTable: true,
195
- labelSelector: `k8s.io/group=${group}`,
196
- })
197
- ).toString()}`,
198
- new Date().getTime().toString()
199
- );
200
- localStorage.setItem(
201
- `ctag.${user}.${cluster}.core.k8s.appscode.com.v1alpha1.genericresources.q.${md5(
202
- stringify({
203
- convertToTable: true,
204
- labelSelector: `k8s.io/group-kind=${kind}.${group}`,
205
- })
206
- ).toString()}`,
207
- new Date().getTime().toString()
208
- );
209
- }
210
- });
211
- };
212
- }
213
-
214
- export async function requestInterceptor(config: AxiosRequestConfig) {
215
- // parse the request url
216
- const { method, params } = config;
217
-
218
- let ctag;
219
-
220
- if (method === "get") {
221
- ctag = getRequestInterceptor(config);
222
- }
223
-
224
- return {
225
- ...config,
226
- params: { ...params, ctag },
227
- };
228
- }
229
-
230
- export function responseInterceptor(resp: AxiosResponse) {
231
- const { config } = resp;
232
- // parse the request url
233
- const { method } = config;
234
-
235
- if (method === "get") {
236
- // get call
237
- getResponseInterceptor(resp);
238
- } else if (method === "put") {
239
- putResponseInterceptor(resp);
240
- }
241
-
242
- return resp;
243
- }