@awes-io/ui 2.69.0 → 2.70.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.70.0](https://github.com/awes-io/client/compare/@awes-io/ui@2.69.0...@awes-io/ui@2.70.0) (2023-09-04)
7
+
8
+
9
+ ### Features
10
+
11
+ * create new styles for layout ([0406558](https://github.com/awes-io/client/commit/04065588301b26f2941e01a2b72f3ff6890a9840))
12
+
13
+
14
+
15
+
16
+
6
17
  # [2.69.0](https://github.com/awes-io/client/compare/@awes-io/ui@2.68.1...@awes-io/ui@2.69.0) (2023-09-04)
7
18
 
8
19
 
@@ -47,6 +47,7 @@
47
47
  @import './layout-menu.css';
48
48
  @import './mobile-menu-nav.css';
49
49
  @import './mobile-menu-item.css';
50
+ @import './mobile-menu-item-new.css';
50
51
  @import './mobile-menu.css';
51
52
  @import './icon-menu-item.css';
52
53
  @import './user-menu.css';
@@ -8,26 +8,57 @@
8
8
 
9
9
  position: relative;
10
10
 
11
- &--clip {
12
- overflow: hidden;
11
+ &:hover {
12
+ .aw-icon-menu-item {
13
+ &__icon,
14
+ &__text {
15
+ color: var(--c-on-surface);
16
+ }
17
+ }
13
18
  }
14
19
 
15
- &__icon-block {
16
- padding: theme('spacing.4') theme('spacing.3');
17
- display: block;
18
- width: 100%;
19
- text-align: center;
20
- position: relative;
21
- line-height: 1;
22
-
23
- &--clip {
24
- overflow: hidden;
25
- padding: theme('spacing.2') theme('spacing.1') theme('spacing.1');
20
+ &--active {
21
+ .aw-icon-menu-item {
22
+ &__icon,
23
+ &__text {
24
+ color: var(--c-on-surface);
25
+ }
26
26
  }
27
+ }
27
28
 
28
- &--small {
29
- padding: theme('spacing.2') theme('spacing.1');
30
- }
29
+ &__icon {
30
+ display: block;
31
+ color: var(--c-mono-300);
32
+ transition: 60ms color;
33
+
34
+ &-block {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ flex-direction: column;
39
+
40
+ padding: 0.75rem;
41
+
42
+ width: 100%;
43
+ position: relative;
44
+ }
45
+ }
46
+
47
+ &__text {
48
+ display: block;
49
+
50
+ font-size: 0.5625rem;
51
+ font-weight: 400;
52
+ line-height: 0.625rem;
53
+ color: var(--c-mono-400);
54
+ transition: 60ms color;
55
+
56
+ text-align: center;
57
+
58
+ white-space: nowrap;
59
+ text-overflow: ellipsis;
60
+ overflow: hidden;
61
+ width: 100%;
31
62
  }
32
63
 
33
64
  &__icon-badge {
@@ -51,31 +82,22 @@
51
82
  min-width: theme('spacing.4');
52
83
  transform: translate(50%, -50%);
53
84
  }
85
+ }
54
86
 
55
- &__icon {
56
- color: var(--icon-color, currentColor);
57
- transition: 60ms color;
58
- }
59
-
60
- &:hover &__icon,
61
- &__icon--highlight {
62
- fill: var(--icon-color-active, currentColor);
63
- }
64
-
65
-
66
- &:hover &__text {
67
- color: var(--icon-color-active, currentColor);
68
- }
69
-
70
- &__text {
71
- @apply truncate;
72
- font-size: 0.625rem;
73
- display: block;
74
- max-width: 100%;
75
- margin: 0 auto theme('spacing.1', 0.25rem);
76
-
77
- &--highlight {
78
- color: var(--icon-color-active, currentColor);
87
+ @screen lg {
88
+ .aw-icon-menu-item {
89
+ &--active {
90
+ &:before {
91
+ border-radius: 0.625rem;
92
+ position: absolute;
93
+ top: 50%;
94
+ left: 50%;
95
+ transform: translate(-50%, -50%);
96
+ width: 3.5rem;
97
+ height: 2.875rem;
98
+ content: '';
99
+ background-color: var(--c-mono-800);
100
+ }
79
101
  }
80
102
  }
81
103
  }
@@ -3,7 +3,7 @@
3
3
  background-image: linear-gradient(var(--c-brand, transparent), var(--c-brand-tuned, transparent));
4
4
 
5
5
  display: grid;
6
- grid-template-columns: 60px auto;
6
+ grid-template-columns: 72px auto;
7
7
  grid-template-rows: 80px minmax(0, 2fr) minmax(0, 1fr) 80px minmax(0, auto);
8
8
 
9
9
  z-index: 1;
@@ -0,0 +1,44 @@
1
+ .aw-mobile-menu-item-new {
2
+ @apply bg-surface;
3
+ font-size: theme('fontSize.base', 1rem);
4
+ display: flex;
5
+ align-items: center;
6
+ width: 100%;
7
+ padding: 1.5rem;
8
+ border-radius: 1.25rem;
9
+
10
+ &:hover,
11
+ &:focus {
12
+ oultine: none;
13
+ text-decoration: none;
14
+ }
15
+
16
+ &--active {
17
+ color: var(--c-accent);
18
+ font-weight: bold;
19
+ }
20
+
21
+ &__icon-bg {
22
+ margin-right: 1rem;
23
+ align-self: start;
24
+ }
25
+
26
+ &__text {
27
+ font-size: 1rem;
28
+ line-height: 1.5rem;
29
+ }
30
+
31
+ &__description {
32
+ display: block;
33
+ font-weight: 400;
34
+ color: var(--c-mono-400);
35
+ font-size: theme('fontSize.xs', 0.75rem);
36
+ margin-top: 0.25rem;
37
+ }
38
+
39
+ &__arrow {
40
+ margin-left: auto;
41
+ flex: none;
42
+ color: var(--c-on-surface);
43
+ }
44
+ }
@@ -14,9 +14,10 @@
14
14
  list-style: none;
15
15
  padding: 0;
16
16
  margin: 0;
17
+ border-radius: 1.25rem;
17
18
  }
18
19
 
19
- li + li {
20
+ li + li .aw-mobile-menu-nav__item--divide {
20
21
  position: relative;
21
22
 
22
23
  &:before {
@@ -31,4 +32,9 @@
31
32
  right: 1.875rem;
32
33
  }
33
34
  }
35
+
36
+ li + li .aw-mobile-menu-item-new {
37
+ position: relative;
38
+ margin-top: 0.125rem;
39
+ }
34
40
  }
@@ -44,35 +44,35 @@
44
44
  &__user {
45
45
  @apply bg-surface;
46
46
 
47
- display: grid;
48
- grid-template-columns: 3.75rem auto minmax(0, 1.5rem);
49
- grid-template-rows: auto auto;
50
- padding: 1.25rem 1.875rem;
51
- margin-bottom: 1.25rem;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ padding: 1.5rem;
52
51
 
53
52
  position: relative;
54
53
 
54
+ &:after {
55
+ @apply bg-mono-900;
56
+ content: '';
57
+ display: block;
58
+ height: 1px;
59
+
60
+ position: absolute;
61
+ bottom: 0;
62
+ left: 1.875rem;
63
+ right: 1.875rem;
64
+ }
65
+
55
66
  .aw-avatar {
56
- --ui-avatar-size: 3.75rem !important;
67
+ --ui-avatar-size: 2.5rem !important;
57
68
  --ui-avatar-font-size: 1.875rem !important;
58
- grid-column: 1;
59
- grid-row: 1 / -1;
60
69
  }
61
70
 
62
71
  &-name {
63
- grid-column: 2;
64
- grid-row: 1;
65
- align-self: end;
66
72
  margin-top: 0;
67
- line-height: 1;
68
- padding-left: 0.9375rem;
69
- }
70
-
71
- &-desc {
72
- grid-column: 2;
73
- grid-row: 2;
74
- align-self: start;
75
- padding-left: 0.9375rem;
73
+ font-size: 1rem;
74
+ line-height: 1.5rem;
75
+ font-weight: 400;
76
76
  }
77
77
 
78
78
  &-link {
@@ -96,6 +96,30 @@
96
96
  }
97
97
  }
98
98
 
99
+ &__theme {
100
+ @apply bg-surface;
101
+
102
+ display: flex;
103
+ align-items: center;
104
+ position: relative;
105
+
106
+ padding: 1.5rem;
107
+
108
+ &-icon {
109
+ margin-right: 1rem;
110
+ }
111
+
112
+ &-text {
113
+ font-size: 1rem;
114
+ font-weight: 400;
115
+ line-height: 1.3125rem;
116
+ }
117
+
118
+ &-switcher {
119
+ margin-left: auto;
120
+ }
121
+ }
122
+
99
123
  &__logo {
100
124
  display: block;
101
125
  align-self: center;
@@ -47,7 +47,7 @@
47
47
 
48
48
  &--partial {
49
49
  &:checked {
50
- background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 20 20' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M3.33089 10.8334H16.6667C16.8877 10.8334 17.0997 10.7456 17.256 10.5893C17.4123 10.4331 17.5001 10.2211 17.5001 10.0001C17.5001 9.77907 17.4123 9.56711 17.256 9.41083C17.0997 9.25455 16.8877 9.16675 16.6667 9.16675H3.33089C3.10988 9.16675 2.89792 9.25455 2.74164 9.41083C2.58536 9.56711 2.49756 9.77907 2.49756 10.0001C2.49756 10.2211 2.58536 10.4331 2.74164 10.5893C2.89792 10.7456 3.10988 10.8334 3.33089 10.8334Z'/%3e%3c/svg%3e");
50
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 22 22' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M4.77765 11.5553H17.2224C17.4286 11.5553 17.6264 11.4734 17.7722 11.3275C17.9181 11.1817 18 10.9839 18 10.7776C18 10.5714 17.9181 10.3736 17.7722 10.2278C17.6264 10.0819 17.4286 10 17.2224 10H4.77765C4.5714 10 4.37361 10.0819 4.22777 10.2278C4.08193 10.3736 4 10.5714 4 10.7776C4 10.9839 4.08193 11.1817 4.22777 11.3275C4.37361 11.4734 4.5714 11.5553 4.77765 11.5553V11.5553Z'/%3e%3c/svg%3e");
51
51
  }
52
52
  }
53
53
  }
@@ -9,13 +9,57 @@
9
9
  &__header {
10
10
  display: block;
11
11
  color: inherit;
12
- padding: theme('spacing.5', 1,25rem);
12
+ padding: 0.75rem 1rem;
13
13
  border-bottom-width: 1px;
14
+
15
+ .aw-userpic {
16
+ flex-direction: row-reverse;
17
+ justify-content: space-between;
18
+
19
+ &__name {
20
+ font-size: 1rem;
21
+ line-height: 1.5rem;
22
+ }
23
+
24
+ &__content {
25
+ margin-left: 0;
26
+ }
27
+
28
+ .aw-avatar {
29
+ --ui-avatar-size: 40px !important;
30
+ }
31
+ }
14
32
  }
15
33
 
16
- &__theme-switcher {
17
- padding: theme('spacing.3', 0,75rem) theme('spacing.5', 1,25rem);
18
- border-bottom-width: 1px;
34
+ &__theme {
35
+ display: flex;
36
+ align-items: center;
37
+
38
+ padding: 1rem;
39
+ color: var(--c-on-surface);
40
+
41
+ &-icon {
42
+ margin-right: 1rem;
43
+ }
44
+
45
+ &-text {
46
+ font-size: 1rem;
47
+ line-height: 1.3125rem;
48
+ font-weight: 400;
49
+ }
50
+
51
+ &-switcher {
52
+ margin-left: auto;
53
+ padding-top: 0;
54
+ padding-bottom: 0;
55
+
56
+ .aw-switch-field {
57
+ &__switch {
58
+ margin-top: 0;
59
+ margin-bottom: 0;
60
+ }
61
+ }
62
+ }
19
63
  }
20
64
 
21
65
  &__menu {
@@ -33,13 +77,17 @@
33
77
 
34
78
  &__nav-item {
35
79
  @apply bg-surface;
36
- padding: theme('spacing.3', 0,75rem) theme('spacing.5', 1,25rem);
80
+ padding: 1rem;
37
81
  display: block;
38
82
  width: 100%;
39
83
 
84
+ font-size: 1rem;
85
+ line-height: 1.3125rem;
86
+ font-weight: 400;
87
+
40
88
  svg {
41
- width: 1.2rem;
42
- height: 1.2rem;
89
+ width: 1.5rem;
90
+ height: 1.5rem;
43
91
  }
44
92
 
45
93
  &:focus {
@@ -1,4 +1,6 @@
1
1
  export default {
2
+ light:
3
+ 'M9.31.69A.7.7 0 0 1 10 0a.7.7 0 0 1 .69.69v2.03a.7.7 0 0 1-.69.7.7.7 0 0 1-.69-.7V.7Zm4.23 5.77A5.04 5.04 0 0 0 10 4.97 5.04 5.04 0 0 0 4.97 10a5.04 5.04 0 0 0 8.57 3.54 4.93 4.93 0 0 0 0-7.09Zm-.95 6.13A3.66 3.66 0 0 1 10 13.65c-1 0-1.93-.4-2.6-1.06A3.66 3.66 0 0 1 6.36 10c0-1 .4-1.93 1.06-2.6A3.66 3.66 0 0 1 10 6.36c1 0 1.93.4 2.6 1.06A3.66 3.66 0 0 1 13.64 10c0 1-.4 1.93-1.06 2.6Zm6.72-3.28h-2.03a.7.7 0 0 0-.7.69c0 .37.32.69.7.69h2.03A.7.7 0 0 0 20 10a.7.7 0 0 0-.69-.69Zm-10 7.97a.7.7 0 0 1 .69-.7.7.7 0 0 1 .69.7v2.03A.7.7 0 0 1 10 20a.7.7 0 0 1-.69-.69v-2.03Zm7.75-1.17-1.45-1.45c-.24-.27-.69-.27-.95 0a.67.67 0 0 0 0 .95l1.45 1.45c.27.27.69.27.95 0a.67.67 0 0 0 0-.95Zm.03-13.17a.67.67 0 0 0-.95 0l-1.46 1.45a.67.67 0 0 0 0 .95c.24.27.69.27.95 0L17.1 3.9a.67.67 0 0 0 0-.95ZM.69 9.3h2.03a.7.7 0 0 1 .7.69.7.7 0 0 1-.7.69H.7A.68.68 0 0 1 0 10a.7.7 0 0 1 .69-.69Zm4.63 5.35c-.24-.27-.69-.27-.95 0L2.9 16.1a.67.67 0 0 0 0 .95c.26.27.69.27.95 0l1.46-1.45a.67.67 0 0 0 0-.95ZM3.86 2.94l1.46 1.45c.26.27.26.69 0 .95a.67.67 0 0 1-.95 0L2.9 3.9a.67.67 0 0 1 0-.95.67.67 0 0 1 .95 0Z',
2
4
  close:
3
5
  'M15.88 5.88a1.25 1.25 0 0 0-1.76-1.76L10 8.23 5.88 4.12a1.25 1.25 0 0 0-1.76 1.76L8.23 10l-4.11 4.12a1.25 1.25 0 1 0 1.76 1.76L10 11.77l4.12 4.11a1.25 1.25 0 1 0 1.76-1.76L11.77 10l4.11-4.12Z',
4
6
  angle:
@@ -14,7 +14,7 @@
14
14
  </slot>
15
15
 
16
16
  <div class="aw-layout-menu__menu">
17
- <slot name="menu">
17
+ <slot name="menu" :mainMenu="mainMenu" :activeMenu="activeMenu">
18
18
  <template v-for="(item, i) in mainMenu">
19
19
  <!-- eslint-disable-next-line vue/require-component-is -->
20
20
  <Component v-if="item.is" :key="'cmp-' + i" v-bind="item" />
@@ -31,7 +31,11 @@
31
31
  </div>
32
32
 
33
33
  <div class="aw-layout-menu__secondary-menu">
34
- <slot name="secondary-menu">
34
+ <slot
35
+ name="secondary-menu"
36
+ :secondaryMenu="secondaryMenu"
37
+ :activeMenu="activeMenu"
38
+ >
35
39
  <template v-for="(item, i) in secondaryMenu">
36
40
  <!-- eslint-disable-next-line vue/require-component-is -->
37
41
  <Component v-if="item.is" :key="'cmp-' + i" v-bind="item" />
@@ -51,7 +55,11 @@
51
55
  <AwUserMenu class="aw-layout-menu__aw-user-menu" />
52
56
 
53
57
  <div class="aw-layout-menu__tertiary-menu">
54
- <slot name="tertiary-menu">
58
+ <slot
59
+ name="tertiary-menu"
60
+ :tertiaryMenu="tertiaryMenu"
61
+ :activeMenu="activeMenu"
62
+ >
55
63
  <template v-for="(item, i) in tertiaryMenu">
56
64
  <!-- eslint-disable-next-line vue/require-component-is -->
57
65
  <Component v-if="item.is" :key="'cmp-' + i" v-bind="item" />
@@ -2,7 +2,6 @@
2
2
  <Component
3
3
  :is="_linkComponent"
4
4
  :class="{
5
- 'aw-icon-menu-item--clip': !tooltip,
6
5
  'aw-icon-menu-item--active': active
7
6
  }"
8
7
  class="aw-icon-menu-item focus-outline"
@@ -10,26 +9,20 @@
10
9
  v-on="$listeners"
11
10
  >
12
11
  <slot v-bind="$props">
13
- <span
14
- v-tooltip:right="
15
- tooltip ? { content: text, offset: [0, -6] } : null
16
- "
17
- :class="{
18
- 'aw-icon-menu-item__icon-block--clip':
19
- !tooltip && !hideText,
20
- 'aw-icon-menu-item__icon-block--small': !tooltip && hideText
21
- }"
22
- class="aw-icon-menu-item__icon-block"
23
- tabindex="-1"
24
- >
12
+ <span class="aw-icon-menu-item__icon-block" tabindex="-1">
25
13
  <AwIcon
26
14
  :name="(active && iconActive) || icon"
27
15
  :size="size"
28
16
  :class="{
29
- 'aw-icon-menu-item__icon--highlight': active
17
+ 'aw-icon-menu-item__icon--active': active
30
18
  }"
31
19
  class="aw-icon-menu-item__icon"
32
20
  />
21
+
22
+ <span class="aw-icon-menu-item__text">
23
+ {{ text }}
24
+ </span>
25
+
33
26
  <span
34
27
  v-if="badge"
35
28
  class="aw-icon-menu-item__icon-badge"
@@ -44,18 +37,6 @@
44
37
  {{ badge.text }}
45
38
  </span>
46
39
  </span>
47
- <span
48
- v-if="!hideText"
49
- v-show="!tooltip"
50
- class="aw-icon-menu-item__text"
51
- :class="{
52
- 'aw-icon-menu-item__text--highlight': active
53
- }"
54
- >
55
- {{ text }}
56
- <AwIconSystemMono v-if="_linkExternal" name="external" />
57
- </span>
58
- <span v-if="hideText" class="sr-only">{{ text }}</span>
59
40
  </slot>
60
41
  </Component>
61
42
  </template>
@@ -36,18 +36,6 @@
36
36
  </AwHeadline>
37
37
  </template>
38
38
 
39
- <!-- theme switcher -->
40
- <AwSwitcher
41
- v-else
42
- v-model="isDarkTheme"
43
- :label="$t('Dark theme')"
44
- icon="moon"
45
- icon-place-in
46
- icon-color="warning"
47
- active-color="mono-600"
48
- inactive-color="mono-600"
49
- />
50
-
51
39
  <!-- close button -->
52
40
  <AwButton
53
41
  theme="ghost"
@@ -65,26 +53,6 @@
65
53
  </AwButton>
66
54
  </div>
67
55
 
68
- <!-- user -->
69
- <div v-if="user" v-show="!submenuOpened" class="aw-mobile-menu__user">
70
- <AwAvatar :src="user.src" :name="user.name" size="56" />
71
- <AwHeadline tag="span" class="aw-mobile-menu__user-name truncate">
72
- {{ user.name }}
73
- </AwHeadline>
74
- <AwDescription class="aw-mobile-menu__user-desc truncate">
75
- {{ user.description }}
76
- </AwDescription>
77
-
78
- <NLink
79
- v-if="profileUrl"
80
- :to="profileUrl"
81
- :aria-label="$t('User profile')"
82
- class="aw-mobile-menu__user-link"
83
- >
84
- <AwIconSystemMono name="angle" rotate="180" />
85
- </NLink>
86
- </div>
87
-
88
56
  <slot v-if="!submenuOpened" name="before-mobile-menu">
89
57
  <Component
90
58
  v-if="beforeMobileMenuComponent"
@@ -100,7 +68,29 @@
100
68
  :items="mainMenu"
101
69
  class="aw-mobile-menu__menu"
102
70
  @click:submenu="showSubmenu"
103
- />
71
+ >
72
+ <template #default="{items, _getChildrenCount, isActive }">
73
+ <li v-for="(item, i) in items" :key="i" v-show="!item.abstract">
74
+ <AwMobileMenuItemNew
75
+ v-bind="item"
76
+ :href="_getChildrenCount(item) ? null : item.href"
77
+ :arrow="!!(item.href || _getChildrenCount(item))"
78
+ :active="isActive(item)"
79
+ v-on="
80
+ _getChildrenCount(item)
81
+ ? {
82
+ click: () =>
83
+ showSubmenu(
84
+ item.children,
85
+ item.subtitle || item.text
86
+ )
87
+ }
88
+ : item.listeners || null
89
+ "
90
+ />
91
+ </li>
92
+ </template>
93
+ </AwMobileMenuNav>
104
94
 
105
95
  <AwMobileMenuNav
106
96
  v-show="!submenuOpened"
@@ -108,7 +98,29 @@
108
98
  :items="secondaryMenu"
109
99
  class="aw-mobile-menu__menu"
110
100
  @click:submenu="showSubmenu"
111
- />
101
+ >
102
+ <template #default="{items, _getChildrenCount, isActive }">
103
+ <li v-for="(item, i) in items" :key="i" v-show="!item.abstract">
104
+ <AwMobileMenuItemNew
105
+ v-bind="item"
106
+ :href="_getChildrenCount(item) ? null : item.href"
107
+ :arrow="!!(item.href || _getChildrenCount(item))"
108
+ :active="isActive(item)"
109
+ v-on="
110
+ _getChildrenCount(item)
111
+ ? {
112
+ click: () =>
113
+ showSubmenu(
114
+ item.children,
115
+ item.subtitle || item.text
116
+ )
117
+ }
118
+ : item.listeners || null
119
+ "
120
+ />
121
+ </li>
122
+ </template>
123
+ </AwMobileMenuNav>
112
124
 
113
125
  <AwMobileMenuNav
114
126
  v-show="!submenuOpened"
@@ -116,7 +128,51 @@
116
128
  :items="userMenu"
117
129
  class="aw-mobile-menu__menu"
118
130
  @click:submenu="showSubmenu"
119
- />
131
+ >
132
+ <template #before>
133
+ <!-- user -->
134
+ <NLink
135
+ v-if="user"
136
+ :to="profileUrl"
137
+ class="aw-mobile-menu__user"
138
+ >
139
+ <div>
140
+ <AwHeadline
141
+ tag="span"
142
+ class="aw-mobile-menu__user-name truncate"
143
+ >
144
+ {{ user.name }}
145
+ </AwHeadline>
146
+
147
+ <AwDescription
148
+ tag="div"
149
+ class="aw-mobile-menu__user-desc truncate"
150
+ >
151
+ {{ user.description }}
152
+ </AwDescription>
153
+ </div>
154
+
155
+ <AwAvatar :src="user.src" :name="user.name" size="56" />
156
+ </NLink>
157
+
158
+ <div class="aw-mobile-menu__theme">
159
+ <AwIconSystemMono
160
+ :size="24"
161
+ class="aw-mobile-menu__theme-icon"
162
+ name="light"
163
+ />
164
+
165
+ <span class="aw-mobile-menu__theme-text">{{
166
+ $t('Dark theme')
167
+ }}</span>
168
+
169
+ <AwSwitcher
170
+ v-model="isDarkTheme"
171
+ class="aw-mobile-menu__theme-switcher"
172
+ />
173
+ </div>
174
+ </template>
175
+ </AwMobileMenuNav>
120
176
 
121
177
  <AwMobileMenuNav
122
178
  v-show="!submenuOpened"
@@ -145,18 +201,6 @@
145
201
  v-bind="afterMobileMenuComponent.props"
146
202
  />
147
203
  </slot>
148
-
149
- <!-- logo -->
150
- <slot name="logo" v-bind="logo">
151
- <Component
152
- :is="logoComponent.is"
153
- v-bind="logoComponent.props"
154
- class="aw-mobile-menu__logo"
155
- />
156
- <span class="aw-mobile-menu__version">
157
- {{ $t('version v{version}', { version: $config.VERSION }) }}
158
- </span>
159
- </slot>
160
204
  </div>
161
205
  </template>
162
206
 
@@ -165,6 +209,7 @@ import { mapGetters } from 'vuex'
165
209
  import { pathOr, viewOr, lensProp, partition } from 'rambdax'
166
210
  import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'
167
211
  import AwMobileMenuNav from '@AwLayouts/_AwMobileMenuNav.vue'
212
+ import AwMobileMenuItemNew from '@AwLayouts/_AwMobileMenuItemNew.vue'
168
213
  // import AwMobileMenuItem from '@AwLayouts/_AwMobileMenuItem.vue'
169
214
 
170
215
  export default {
@@ -172,7 +217,8 @@ export default {
172
217
 
173
218
  components: {
174
219
  AwMobileMenuNav,
175
- AwLayoutLogo: () => import('@AwLayouts/_AwLayoutLogo.vue')
220
+ AwLayoutLogo: () => import('@AwLayouts/_AwLayoutLogo.vue'),
221
+ AwMobileMenuItemNew
176
222
  // AwMobileMenuItem
177
223
  },
178
224
 
@@ -18,20 +18,25 @@
18
18
  class="aw-mobile-menu-item__icon"
19
19
  />
20
20
  </span>
21
+
21
22
  <span class="aw-mobile-menu-item__text" tabindex="-1">
22
23
  {{ text }}
24
+
23
25
  <span
24
26
  v-if="description"
25
27
  v-html="$sanitize(description)"
26
28
  class="aw-mobile-menu-item__description"
27
29
  ></span>
28
30
  </span>
31
+
29
32
  <AwBadge v-if="badge" v-bind="badge" class="mr-2" />
33
+
30
34
  <AwIconSystemMono
31
35
  v-if="_linkExternal"
32
36
  name="external"
33
37
  class="aw-mobile-menu-item__arrow"
34
38
  />
39
+
35
40
  <AwIconSystemMono
36
41
  v-else-if="arrow"
37
42
  name="angle"
@@ -0,0 +1,122 @@
1
+ <template>
2
+ <Component
3
+ :is="_linkComponent"
4
+ v-bind="_linkAttrs"
5
+ :class="{ 'aw-mobile-menu-item-new--active': active }"
6
+ class="aw-mobile-menu-item-new focus-outline"
7
+ v-on="$listeners"
8
+ >
9
+ <slot>
10
+ <span
11
+ v-if="icon"
12
+ class="aw-mobile-menu-item-new__icon-bg"
13
+ :style="iconColor"
14
+ >
15
+ <AwIcon
16
+ :name="(active && iconActive) || icon"
17
+ size="24"
18
+ class="aw-mobile-menu-item-new__icon"
19
+ />
20
+ </span>
21
+
22
+ <span class="aw-mobile-menu-item-new__text" tabindex="-1">
23
+ {{ text }}
24
+
25
+ <span
26
+ v-if="childrenDescription"
27
+ class="aw-mobile-menu-item-new__description"
28
+ >
29
+ {{ childrenDescription }}
30
+ </span>
31
+ </span>
32
+
33
+ <AwBadge v-if="badge" v-bind="badge" class="mr-2" />
34
+
35
+ <AwIconSystemMono
36
+ v-if="_linkExternal"
37
+ name="external"
38
+ class="aw-mobile-menu-item-new__arrow"
39
+ />
40
+
41
+ <AwIconSystemMono
42
+ v-else-if="arrow"
43
+ name="angle"
44
+ rotate="180"
45
+ class="aw-mobile-menu-item-new__arrow"
46
+ />
47
+ </slot>
48
+ </Component>
49
+ </template>
50
+
51
+ <script>
52
+ import linkMixin from '@AwMixins/link'
53
+
54
+ export default {
55
+ name: 'AwMobileMenuItemNew',
56
+
57
+ mixins: [linkMixin],
58
+
59
+ props: {
60
+ text: {
61
+ type: String,
62
+ required: true
63
+ },
64
+
65
+ description: {
66
+ type: String,
67
+ default: ''
68
+ },
69
+
70
+ href: {
71
+ type: [String, Object],
72
+ default: ''
73
+ },
74
+
75
+ children: {
76
+ type: Array,
77
+ default: () => []
78
+ },
79
+
80
+ icon: {
81
+ type: String,
82
+ default: ''
83
+ },
84
+
85
+ iconBg: {
86
+ type: String,
87
+ default: ''
88
+ },
89
+
90
+ iconActive: {
91
+ type: String,
92
+ default: ''
93
+ },
94
+
95
+ badge: {
96
+ type: Object,
97
+ default: null
98
+ },
99
+
100
+ arrow: Boolean,
101
+
102
+ active: Boolean
103
+ },
104
+
105
+ computed: {
106
+ iconColor() {
107
+ return this.iconBg
108
+ ? {
109
+ backgroundColor: this.iconBg,
110
+ color: '#fff'
111
+ }
112
+ : null
113
+ },
114
+
115
+ childrenDescription() {
116
+ const childrenText = this.children.map((item) => this.$t(item.text))
117
+
118
+ return childrenText.join(' • ')
119
+ }
120
+ }
121
+ }
122
+ </script>
@@ -4,35 +4,47 @@
4
4
  {{ title }}
5
5
  <AwBadge v-if="badge" v-bind="badge" />
6
6
  </h3>
7
+
7
8
  <ol>
8
9
  <slot name="before" />
9
- <li v-for="(item, i) in items" :key="i" v-show="!item.abstract">
10
- <AwMobileMenuItem
11
- v-bind="_getItemProps(item)"
12
- :href="_getChildrenCount(item) ? null : item.href"
13
- :arrow="!!(item.href || _getChildrenCount(item))"
14
- :active="isActive(item)"
15
- v-on="
16
- _getChildrenCount(item)
17
- ? {
18
- click: () =>
19
- $emit(
20
- 'click:submenu',
21
- item.children,
22
- item.subtitle || item.text
23
- )
24
- }
25
- : item.listeners || null
26
- "
27
- />
28
- </li>
10
+
11
+ <slot
12
+ :items="items"
13
+ :_getChildrenCount="_getChildrenCount"
14
+ :isActive="isActive"
15
+ >
16
+ <li v-for="(item, i) in items" :key="i" v-show="!item.abstract">
17
+ <AwMobileMenuItem
18
+ v-bind="item"
19
+ :class="{
20
+ 'aw-mobile-menu-nav__item--divide': item.isDivide
21
+ }"
22
+ :href="_getChildrenCount(item) ? null : item.href"
23
+ :arrow="!!(item.href || _getChildrenCount(item))"
24
+ :active="isActive(item)"
25
+ v-on="
26
+ _getChildrenCount(item)
27
+ ? {
28
+ click: () =>
29
+ $emit(
30
+ 'click:submenu',
31
+ item.children,
32
+ item.subtitle || item.text
33
+ )
34
+ }
35
+ : item.listeners || null
36
+ "
37
+ />
38
+ </li>
39
+ </slot>
40
+
29
41
  <slot name="after" />
30
42
  </ol>
31
43
  </nav>
32
44
  </template>
33
45
 
34
46
  <script>
35
- import { viewOr, lensProp, omit } from 'rambdax'
47
+ import { viewOr, lensProp } from 'rambdax'
36
48
  import AwMobileMenuItem from '@AwLayouts/_AwMobileMenuItem.vue'
37
49
 
38
50
  export default {
@@ -72,10 +84,6 @@ export default {
72
84
  },
73
85
 
74
86
  methods: {
75
- _getItemProps(props) {
76
- return omit('children', props)
77
- },
78
-
79
87
  _getChildrenCount(item) {
80
88
  return item.children ? item.children.length : 0
81
89
  },
@@ -15,7 +15,7 @@
15
15
  @focus="openDropdown"
16
16
  @mouseenter="openDropdown"
17
17
  >
18
- <AwAvatar v-bind="user" size="32" tabindex="-1" />
18
+ <AwAvatar v-bind="user" size="40" tabindex="-1" />
19
19
  </button>
20
20
  </slot>
21
21
 
@@ -35,20 +35,29 @@
35
35
  >
36
36
  <AwUserpic v-bind="user" big-image />
37
37
  </Component>
38
- <AwSwitcher
39
- v-model="isDarkTheme"
40
- :label="$t('Dark theme')"
41
- icon="moon"
42
- icon-place-in
43
- icon-color="warning"
44
- active-color="mono-600"
45
- inactive-color="mono-600"
46
- class="aw-user-menu__theme-switcher"
47
- />
38
+
39
+ <span class="aw-user-menu__theme">
40
+ <AwIconSystemMono
41
+ :size="24"
42
+ class="aw-user-menu__theme-icon"
43
+ name="light"
44
+ />
45
+
46
+ <span class="aw-user-menu__theme-text">{{
47
+ $t('Dark theme')
48
+ }}</span>
49
+
50
+ <AwSwitcher
51
+ v-model="isDarkTheme"
52
+ class="aw-user-menu__theme-switcher"
53
+ size="sm"
54
+ />
55
+ </span>
48
56
 
49
57
  <template v-for="(item, i) in userMenu">
50
58
  <!-- eslint-disable-next-line vue/require-component-is -->
51
59
  <Component v-if="item.is" :key="'cmp-' + i" v-bind="item" />
60
+
52
61
  <AwNavItem
53
62
  v-else
54
63
  :key="i"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awes-io/ui",
3
- "version": "2.69.0",
3
+ "version": "2.70.0",
4
4
  "description": "User Interface (UI) components",
5
5
  "keywords": [
6
6
  "ui",
@@ -112,5 +112,5 @@
112
112
  "rollup-plugin-visualizer": "^2.6.0",
113
113
  "rollup-plugin-vue": "^5.0.1"
114
114
  },
115
- "gitHead": "4759d6f928a64de1452f06409a79b2a00fcbd735"
115
+ "gitHead": "3fd940536b101cc0a6aba3a0d832788a1a3c809f"
116
116
  }