@appscode/design-system 2.6.8 → 2.6.10-alpha-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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appscode/design-system",
3
- "version": "2.6.8",
3
+ "version": "2.6.10-alpha-1",
4
4
  "description": "A design system for Appscode websites and dashboards made using Bulma",
5
5
  "main": "main.scss",
6
6
  "scripts": {
@@ -24,29 +24,15 @@ $positions: (
24
24
  border: 1px solid $color-border;
25
25
  }
26
26
 
27
- .is-rounded-0 {
28
- border-radius: 0;
29
- }
30
- .is-rounded-2 {
31
- border-radius: 2px;
32
- }
33
- .is-rounded-4 {
34
- border-radius: 4px;
35
- }
36
- .is-rounded-8 {
37
- border-radius: 8px;
38
- }
39
-
40
- .is-rounded-12 {
41
- border-radius: 12px;
42
- }
43
- .is-rounded-16 {
44
- border-radius: 16px;
45
- }
46
- .is-rounded-50 {
47
- border-radius: 50px;
27
+ // Border radius utilities
28
+ $radius-values: (0, 2, 4, 8, 12, 16, 50);
29
+ @each $value in $radius-values {
30
+ .is-rounded-#{$value} {
31
+ border-radius: #{$value}px;
32
+ }
48
33
  }
49
34
 
35
+ // Full width and height utilities
50
36
  .is-fullwidth {
51
37
  width: 100%;
52
38
  }
@@ -54,7 +40,7 @@ $positions: (
54
40
  height: 100%;
55
41
  }
56
42
 
57
- // for ellipsis
43
+ // Ellipsis utilities
58
44
  @for $i from 0 through 10 {
59
45
  .is-ellipsis-#{$i} {
60
46
  overflow: hidden;
@@ -62,10 +48,10 @@ $positions: (
62
48
  display: -webkit-box;
63
49
  line-clamp: #{$i};
64
50
  -webkit-line-clamp: #{$i};
65
- box-orient: vertical;
66
51
  -webkit-box-orient: vertical;
67
52
  }
68
53
  }
54
+
69
55
  .ac-navbar-area {
70
56
  .brand-tag {
71
57
  color: $color-heading;
@@ -135,24 +121,20 @@ hr {
135
121
  min-height: auto !important;
136
122
  }
137
123
 
124
+ // Additional utilities
138
125
  .is-auto-height {
139
126
  height: auto !important;
140
127
  min-height: auto !important;
141
128
  }
142
-
143
129
  .is-fixed {
144
130
  position: fixed !important;
145
131
  }
146
-
147
132
  .is-not-fixed {
148
133
  position: inherit !important;
149
134
  }
150
-
151
- // border none
152
135
  .is-border-none {
153
136
  border: none !important;
154
137
  }
155
-
156
138
  .is-disabled {
157
139
  opacity: 0.5;
158
140
  cursor: not-allowed;
@@ -199,140 +181,43 @@ hr {
199
181
  justify-content: space-between;
200
182
  align-items: center;
201
183
  }
202
-
203
- .ac-hscrollbar {
184
+ // Scrollbar mixin
185
+ @mixin scrollbar-styles($direction) {
204
186
  padding: 15px;
205
187
  transition: 0.3s ease-in-out;
206
- overflow-x: auto;
188
+ overflow-#{$direction}: auto;
207
189
 
208
190
  &::-webkit-scrollbar {
209
191
  border-radius: 50px;
210
- height: 3px;
192
+ #{if($direction == "y", width, height)}: 3px;
211
193
  }
212
194
 
213
195
  &::-webkit-scrollbar:hover {
214
- height: 7px;
196
+ #{if($direction == "y", width, height)}: 7px;
215
197
  }
216
198
 
217
199
  &::-webkit-scrollbar-thumb {
218
200
  background-color: $gray-80;
219
201
  border-radius: 50px;
220
- height: 2px !important;
221
- }
222
-
223
- &::-webkit-scrollbar-thumb:hover {
224
- background-color: $gray-80;
225
202
  }
226
203
 
227
204
  &:hover::-webkit-scrollbar-corner {
228
- height: 40px;
205
+ #{if($direction == "y", width, height)}: 40px;
229
206
  }
230
207
  }
231
208
 
209
+ // Scrollbar utilities
232
210
  .ac-vscrollbar {
233
- padding: 15px;
234
- transition: 0.3s ease-in-out;
235
- overflow-y: auto;
236
-
237
- &::-webkit-scrollbar {
238
- border-radius: 50px;
239
- width: 3px;
240
- }
241
-
242
- &::-moz-scrollbar {
243
- border-radius: 50px;
244
- width: 3px;
245
- }
246
-
247
- &::-ms-scrollbar {
248
- border-radius: 50px;
249
- width: 3px;
250
- }
251
-
252
- &::-webkit-scrollbar:hover {
253
- width: 7px;
254
- }
255
-
256
- &::-moz-scrollbar:hover {
257
- width: 7px;
258
- }
259
-
260
- &::-ms-scrollbar:hover {
261
- width: 7px;
262
- }
263
-
264
- &::-webkit-scrollbar-thumb {
265
- background-color: $gray-80;
266
- border-radius: 50px;
267
- height: 2px !important;
268
- }
269
-
270
- &::-moz-scrollbar-thumb {
271
- background-color: $gray-80;
272
- border-radius: 50px;
273
- height: 2px !important;
274
- }
275
-
276
- &::-ms-scrollbar-thumb {
277
- background-color: $gray-80;
278
- border-radius: 50px;
279
- height: 2px !important;
280
- }
281
-
282
- &::-webkit-scrollbar-thumb:hover {
283
- background-color: $gray-80;
284
- }
285
-
286
- &::-moz-scrollbar-thumb:hover {
287
- background-color: $gray-80;
288
- }
289
-
290
- &::-ms-scrollbar-thumb:hover {
291
- background-color: $gray-80;
292
- }
293
-
294
- &:hover::-webkit-scrollbar-corner {
295
- height: 40px;
296
- }
297
-
298
- &:hover::-moz-scrollbar-corner {
299
- height: 40px;
300
- }
301
-
302
- &:hover::-ms-scrollbar-corner {
303
- height: 40px;
304
- }
211
+ @include scrollbar-styles("y");
212
+ }
213
+ .ac-hscrollbar {
214
+ @include scrollbar-styles("x");
305
215
  }
306
-
307
216
  .ac-scrollbar {
308
- padding: 15px;
309
- transition: 0.3s ease-in-out;
310
- overflow: auto;
311
-
312
- &::-webkit-scrollbar {
313
- border-radius: 50px;
314
- width: 3px;
315
- }
316
-
317
- &::-webkit-scrollbar:hover {
318
- width: 7px;
319
- }
320
-
321
- &::-webkit-scrollbar-thumb {
322
- background-color: $gray-80;
323
- border-radius: 50px;
324
- width: 2px !important;
325
- }
326
-
327
- &::-webkit-scrollbar-thumb:hover {
328
- background-color: $gray-80;
329
- }
330
-
331
- &:hover::-webkit-scrollbar-corner {
332
- width: 40px;
333
- }
217
+ @include scrollbar-styles("both");
334
218
  }
335
219
 
220
+ // Overflow utilities
336
221
  .overflow-y-hidden {
337
222
  overflow-y: hidden;
338
223
  }
@@ -346,18 +231,23 @@ hr {
346
231
  overflow-x: auto;
347
232
  }
348
233
 
349
- .is-transparent-bg {
350
- background-color: transparent !important;
234
+ // Background and shadow utilities
235
+ .is-bg-white {
236
+ background-color: $white-100 !important;
237
+ }
238
+ .bg-white {
239
+ background-color: $white-100 !important;
351
240
  }
352
-
353
241
  .is-shadowless {
354
242
  box-shadow: none !important;
355
243
  }
356
-
357
244
  .is-shadow {
358
245
  box-shadow: $ac-shadow-1 !important;
359
246
  }
360
247
 
248
+ .is-transparent-bg {
249
+ background-color: transparent !important;
250
+ }
361
251
  .is-transparent {
362
252
  border: none;
363
253
  background-color: transparent !important;
@@ -389,15 +279,6 @@ button {
389
279
  }
390
280
  }
391
281
 
392
- // background color start
393
- .is-bg-white {
394
- background-color: $white-100 !important;
395
- }
396
-
397
- .bg-white {
398
- background-color: $white-100 !important;
399
- }
400
-
401
282
  // background color end
402
283
 
403
284
  // Shake animation
@@ -668,3 +549,54 @@ em {
668
549
  z-index: #{$i}00;
669
550
  }
670
551
  }
552
+
553
+ .whats-new-rel {
554
+ min-width: fit-content !important;
555
+ font-size: 11px !important;
556
+ color: #ffff !important;
557
+ margin-left: 4px;
558
+ margin-right: 0 !important;
559
+ padding: 0 4px;
560
+ position: relative;
561
+ &::before,
562
+ &::after {
563
+ content: "";
564
+ position: absolute;
565
+ z-index: -1;
566
+ left: 50%;
567
+ top: 50%;
568
+ transform: translateX(-50%) translateY(-50%);
569
+ display: block;
570
+ width: 100%;
571
+ height: 100%;
572
+ border-radius: 4px;
573
+ background: $ac-primary;
574
+ }
575
+ &:before {
576
+ animation: pulse-border 1500ms ease-out infinite;
577
+ }
578
+
579
+ &:after {
580
+ transition: all 200ms;
581
+ }
582
+
583
+ @keyframes pulse-border {
584
+ 0% {
585
+ transform: translateX(-50%) translateY(-50%) translateZ(0) scale(1);
586
+ opacity: 1;
587
+ }
588
+
589
+ 100% {
590
+ transform: translateX(-50%) translateY(-50%) translateZ(0) scale(1.4);
591
+ opacity: 0;
592
+ }
593
+ }
594
+ }
595
+
596
+ // white-space
597
+ $whitespace-values: normal, nowrap, pre, pre-line, pre-wrap, break-spaces;
598
+ @each $value in $whitespace-values {
599
+ .is-whitespace-#{$value} {
600
+ white-space: #{$value};
601
+ }
602
+ }
@@ -44,7 +44,7 @@ h4 {
44
44
  } // 18px
45
45
  h5 {
46
46
  font-size: 1.231rem;
47
- font-weight: 600;
47
+ font-weight: 500;
48
48
  letter-spacing: normal;
49
49
  } // 16px
50
50
  h6 {
@@ -6,7 +6,11 @@
6
6
  padding: 8px 16px;
7
7
  font-weight: 500;
8
8
  line-height: 1;
9
-
9
+ &.is-white {
10
+ &:focus {
11
+ background-color: $primary-light-gray;
12
+ }
13
+ }
10
14
  &.is-primary {
11
15
  background-color: $ac-primary;
12
16
  &:hover {
@@ -1,10 +1,40 @@
1
1
  .dropdown-group {
2
2
  margin-bottom: 8px;
3
3
  }
4
+
5
+ .dropdown-menu.show-arrow {
6
+ --left: 2rem;
7
+ &:after {
8
+ position: absolute;
9
+ content: "";
10
+ transform: rotate(45deg);
11
+ top: -2px;
12
+ left: var(--left);
13
+ width: 16px;
14
+ height: 16px;
15
+ background-color: #fff;
16
+ border-radius: 4px;
17
+ z-index: -1;
18
+ border: 1px solid $color-border;
19
+ }
20
+ &:before {
21
+ position: absolute;
22
+ content: "";
23
+ // transform: rotate(45deg);
24
+ top: 3px;
25
+ left: var(--left);
26
+ width: 16px;
27
+ height: 2px;
28
+ background-color: #fff;
29
+ border-radius: 4px 4px 0 0;
30
+ z-index: 1;
31
+ }
32
+ }
33
+
4
34
  .dropdown-content {
5
35
  min-width: 220px;
6
36
  max-width: 500px;
7
- max-height: calc(100vh - 200px);
37
+ max-height: clamp(100px, calc(100vh - 200px), calc(100vh - 200px));
8
38
  overflow-y: auto;
9
39
  border: 1px solid $color-border;
10
40
 
@@ -1,3 +1,8 @@
1
+ .mail-details {
2
+ display: grid;
3
+ grid-template-columns: 460px calc(100% - 460px);
4
+ }
5
+
1
6
  .inbox-sidebar {
2
7
  width: 460px;
3
8
  border-right: 1px solid $color-border;
@@ -41,6 +46,16 @@
41
46
  &:hover {
42
47
  background-color: hsla(var(--secondary-hue), 12%, 95%);
43
48
  }
49
+ p,
50
+ span {
51
+ color: $color-text;
52
+ }
53
+ .time {
54
+ font-size: 11px;
55
+ }
56
+ .ac-checkbox {
57
+ margin-top: 4px;
58
+ }
44
59
  }
45
60
 
46
61
  .message-details {
@@ -71,3 +86,44 @@
71
86
  }
72
87
  }
73
88
  }
89
+ .message-content {
90
+ height: calc(100vh - 170px);
91
+ overflow-y: auto;
92
+ overflow-x: hidden;
93
+ padding-inline: 20px;
94
+ }
95
+
96
+ .is-fullwidth.searchbar {
97
+ .ac-search {
98
+ width: 100%;
99
+ height: 36px;
100
+ &:focus {
101
+ width: 100% !important;
102
+ }
103
+ }
104
+ }
105
+
106
+ body:not(.message-details) .inbox-sidebar {
107
+ width: 100%;
108
+ border-right: none;
109
+ }
110
+
111
+ body:has(.message-details) {
112
+ .inbox-sidebar {
113
+ width: 460px;
114
+ border-right: 1px solid #e2e8f0;
115
+ }
116
+ .ac-system-content {
117
+ max-height: calc(100vh - 60px);
118
+ overflow: hidden;
119
+ }
120
+ }
121
+
122
+ .message-details {
123
+ max-width: 100%;
124
+ overflow: hidden;
125
+ pre {
126
+ max-width: 100%;
127
+ font-size: 1rem;
128
+ }
129
+ }
@@ -251,3 +251,15 @@
251
251
  }
252
252
  }
253
253
  }
254
+
255
+ .router-link-exact-active {
256
+ .whats-new-rel {
257
+ background-color: #fff;
258
+ color: $ac-primary !important;
259
+ z-index: 9;
260
+ &::after,
261
+ &::before {
262
+ background-color: #fff;
263
+ }
264
+ }
265
+ }
@@ -0,0 +1,32 @@
1
+ <script setup lang="ts">
2
+ interface Props {
3
+ open?: boolean;
4
+ }
5
+ withDefaults(defineProps<Props>(), {
6
+ open: false,
7
+ });
8
+ </script>
9
+
10
+ <template>
11
+ <svg v-if="open" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
12
+ <path
13
+ fill="none"
14
+ stroke="currentColor"
15
+ stroke-linecap="round"
16
+ stroke-linejoin="round"
17
+ stroke-width="1.5"
18
+ d="M21.75 9v.906a2.25 2.25 0 0 1-1.183 1.981l-6.478 3.488M2.25 9v.906a2.25 2.25 0 0 0 1.183 1.981l6.478 3.488m8.839 2.51l-4.66-2.51m0 0l-1.023-.55a2.25 2.25 0 0 0-2.134 0l-1.022.55m0 0l-4.661 2.51m16.5 1.615a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V8.844a2.25 2.25 0 0 1 1.183-1.981l7.5-4.039a2.25 2.25 0 0 1 2.134 0l7.5 4.039a2.25 2.25 0 0 1 1.183 1.98z"
19
+ />
20
+ </svg>
21
+
22
+ <svg v-else xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24">
23
+ <path
24
+ fill="none"
25
+ stroke="currentColor"
26
+ stroke-linecap="round"
27
+ stroke-linejoin="round"
28
+ stroke-width="1.5"
29
+ d="M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75"
30
+ />
31
+ </svg>
32
+ </template>
@@ -4,7 +4,7 @@ import MessageList from "./MessageList.vue";
4
4
  </script>
5
5
 
6
6
  <template>
7
- <div class="is-flex">
7
+ <div class="mail-details">
8
8
  <MessageList />
9
9
  <MessageDetails />
10
10
  </div>
@@ -42,7 +42,7 @@ const InfoIcon = defineAsyncComponent(() => import("../icons/InfoIcon.vue"));
42
42
  </div>
43
43
  </div>
44
44
 
45
- <div class="message-content mt-24">
45
+ <div class="message-content mt-24 ac-vscrollbar p-0">
46
46
  <h2 class="mb-4">Update scanner addons</h2>
47
47
  <p>
48
48
  Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the Lorem Ipsum
@@ -5,6 +5,7 @@ import ArrowIcon from "../icons/ArrowIcon.vue";
5
5
  import RefreshIcon from "../icons/RefreshIcon.vue";
6
6
  import EllipsisVertical from "../icons/EllipsisVertical.vue";
7
7
  import StarIcon from "../icons/StarIcon.vue";
8
+ import MailIcon from "../icons/MailIcon.vue";
8
9
 
9
10
  const Searchbar = defineAsyncComponent(() => import("../form-fields/Searchbar.vue"));
10
11
  </script>
@@ -18,7 +19,7 @@ const Searchbar = defineAsyncComponent(() => import("../form-fields/Searchbar.vu
18
19
 
19
20
  <!-- filter -->
20
21
  <div class="is-flex is-justify-content-space-between">
21
- <div class="is-flex gap-8">
22
+ <div class="is-flex gap-8 dropdown-action dropdown">
22
23
  <label class="ac-checkbox" for="checkbox16">
23
24
  <input class="is-danger" id="checkbox16" type="checkbox" /><span class="checkmark"></span>
24
25
  </label>
@@ -27,6 +28,39 @@ const Searchbar = defineAsyncComponent(() => import("../form-fields/Searchbar.vu
27
28
  <ArrowIcon />
28
29
  </span>
29
30
  </button>
31
+ <!-- is-block -->
32
+ <div class="dropdown-menu show-arrow is-block" id="dropdown-menu3" role="menu" style="--left: 2.5rem">
33
+ <div class="dropdown-content ac-scrollbar p-0">
34
+ <div class="dropdown-group">
35
+ <label>Filter</label>
36
+ <a href="#" class="dropdown-item">
37
+ <span class="icon">
38
+ <MailIcon :open="true" />
39
+ </span>
40
+ <span>Read</span>
41
+ </a>
42
+ <a href="#" class="dropdown-item">
43
+ <span class="icon">
44
+ <MailIcon />
45
+ </span>
46
+ <span>Unread</span>
47
+ </a>
48
+ <!-- <hr class="p-0 m-0" /> -->
49
+ <a href="#" class="dropdown-item">
50
+ <span class="icon">
51
+ <StarIcon :fill="true" />
52
+ </span>
53
+ <span>Started</span>
54
+ </a>
55
+ <a href="#" class="dropdown-item">
56
+ <span class="icon">
57
+ <StarIcon />
58
+ </span>
59
+ <span>Unstarted</span>
60
+ </a>
61
+ </div>
62
+ </div>
63
+ </div>
30
64
  </div>
31
65
 
32
66
  <div class="is-flex gap-4">
@@ -43,15 +77,21 @@ const Searchbar = defineAsyncComponent(() => import("../form-fields/Searchbar.vu
43
77
  </span>
44
78
  </button>
45
79
  <!-- dropdown -->
46
- <div class="dropdown-menu" id="dropdown-menu3" role="menu" style="left: auto; right: 0">
80
+ <!-- use "is-block" -->
81
+ <div
82
+ class="dropdown-menu show-arrow"
83
+ id="dropdown-menu3"
84
+ role="menu"
85
+ style="left: auto; right: 0; --left: calc(100% - 1.8rem)"
86
+ >
47
87
  <div class="dropdown-content ac-scrollbar p-0">
48
88
  <div class="dropdown-group">
49
- <label>Options</label>
89
+ <label>Action</label>
50
90
  <a href="#" class="dropdown-item">
51
91
  <span class="icon">
52
- <RefreshIcon />
92
+ <MailIcon />
53
93
  </span>
54
- <span>Read</span>
94
+ <span>Mark as all read</span>
55
95
  </a>
56
96
  </div>
57
97
  </div>
@@ -66,7 +106,7 @@ const Searchbar = defineAsyncComponent(() => import("../form-fields/Searchbar.vu
66
106
  <div class="message-list ac-vscrollbar pt-0 pb-0">
67
107
  <!-- messages '.is-unread' -->
68
108
  <div
69
- class="is-flex gap-16 is-clickable single-message"
109
+ class="is-flex gap-16 is-clickable single-message is-justify-content-space-between"
70
110
  v-for="i in 10"
71
111
  :key="i"
72
112
  :class="{ 'is-unread': i % 2 !== 0 }"
@@ -76,10 +116,12 @@ const Searchbar = defineAsyncComponent(() => import("../form-fields/Searchbar.vu
76
116
  </label>
77
117
  <div class="is-flex gap-4 is-flex-direction-column">
78
118
  <div class="is-flex is-flex-direction-column">
79
- <span>Category</span>
80
- <h6 class="has-text-weight-medium is-size-5">Update scanner addons</h6>
119
+ <span>AppsCode Accounts</span>
120
+ <h6 class="has-text-weight-medium is-size-5 is-ellipsis-1">Update scanner addons</h6>
81
121
  </div>
82
- <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been</p>
122
+ <p class="is-ellipsis-2">
123
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been
124
+ </p>
83
125
  </div>
84
126
  <div class="is-flex is-flex-direction-column is-justify-content-space-between">
85
127
  <p class="is-size-7">2mins</p>
@@ -49,6 +49,7 @@ watch(
49
49
  <img :src="icon" alt="icon" />
50
50
  </span>
51
51
  <strong>{{ title }}</strong>
52
+ <span v-if="id === 'claim'" class="badge is-primary whats-new-rel">NEW</span>
52
53
  </router-link>
53
54
  </li>
54
55
  </template>