adata-ui 4.0.36 → 4.0.37

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 (50) hide show
  1. package/README.md +84 -84
  2. package/dist/module.json +1 -1
  3. package/dist/runtime/components/Alert.vue +26 -26
  4. package/dist/runtime/components/Header.vue.d.ts +1 -1
  5. package/dist/runtime/components/Tag.vue +4 -4
  6. package/dist/runtime/components/accordion/Accordion.vue.d.ts +1 -1
  7. package/dist/runtime/components/button/Button.vue +1 -1
  8. package/dist/runtime/components/button/Button.vue.d.ts +2 -2
  9. package/dist/runtime/components/forms/input/textarea/ATextarea.vue.d.ts +1 -1
  10. package/dist/runtime/components/header/NavList.vue +45 -2
  11. package/dist/runtime/components/header/NavList.vue.d.ts +2 -0
  12. package/dist/runtime/components/header/ProductMenu.vue +31 -3
  13. package/dist/runtime/components/header/ProfileMenu.vue +13 -210
  14. package/dist/runtime/components/header/ProfileMenuContent.vue +227 -0
  15. package/dist/runtime/components/header/ProfileMenuContent.vue.d.ts +16 -0
  16. package/dist/runtime/components/mobile-navigation/BottomNavigation.vue +78 -0
  17. package/dist/runtime/components/mobile-navigation/BottomNavigation.vue.d.ts +29 -0
  18. package/dist/runtime/components/mobile-navigation/MainButton.vue +16 -0
  19. package/dist/runtime/components/mobile-navigation/MainButton.vue.d.ts +2 -0
  20. package/dist/runtime/components/mobile-navigation/MobileProductMenu.vue +261 -0
  21. package/dist/runtime/components/pill-tabs/PillTabs.vue.d.ts +1 -1
  22. package/dist/runtime/components/row-card/RowCard.vue +1 -1
  23. package/dist/runtime/composables/projectState.d.ts +2 -1
  24. package/dist/runtime/composables/projectState.js +1 -0
  25. package/dist/runtime/i18n/i18n.config.d.ts +24 -0
  26. package/dist/runtime/i18n.d.ts +1 -1
  27. package/dist/runtime/icons/avatar.vue +41 -0
  28. package/dist/runtime/icons/avatar.vue.d.ts +2 -0
  29. package/dist/runtime/icons/file/file.vue.d.ts +2 -0
  30. package/dist/runtime/icons/file/files.vue +17 -0
  31. package/dist/runtime/icons/file/files.vue.d.ts +2 -0
  32. package/dist/runtime/icons/invoice.vue +35 -0
  33. package/dist/runtime/icons/invoice.vue.d.ts +2 -0
  34. package/dist/runtime/icons/menu/menu-filled.vue +61 -0
  35. package/dist/runtime/icons/menu/menu-filled.vue.d.ts +2 -0
  36. package/dist/runtime/icons/menu/menu.vue +41 -0
  37. package/dist/runtime/icons/menu/menu.vue.d.ts +2 -0
  38. package/dist/runtime/icons/notifications.vue +25 -0
  39. package/dist/runtime/icons/notifications.vue.d.ts +2 -0
  40. package/dist/runtime/icons/warning-triangle.vue +29 -29
  41. package/dist/runtime/lang/en.js +8 -0
  42. package/dist/runtime/lang/kk.js +8 -0
  43. package/dist/runtime/lang/ru.d.ts +8 -0
  44. package/dist/runtime/lang/ru.js +8 -0
  45. package/dist/runtime/server/tsconfig.json +3 -3
  46. package/dist/runtime/shared/constants/pages.d.ts +3 -0
  47. package/dist/runtime/shared/constants/pages.js +3 -0
  48. package/package.json +1 -1
  49. /package/dist/runtime/{icons/file.vue.d.ts → components/mobile-navigation/MobileProductMenu.vue.d.ts} +0 -0
  50. /package/dist/runtime/icons/{file.vue → file/file.vue} +0 -0
@@ -1,22 +1,7 @@
1
1
  <script setup>
2
2
  import { DropdownMenuContent, DropdownMenuPortal, DropdownMenuRoot, DropdownMenuTrigger } from "reka-ui";
3
- import { PAGES } from "../../shared/constants/pages";
4
- import AStatusBadge from "../Tag.vue";
5
- import AButton from "../button/Button.vue";
6
- import ColorMode from "../ColorMode.vue";
7
- import { ref, useI18n, useAppConfig } from "#imports";
8
- import IPlus from "#icons/plus.vue";
9
- import ILogout from "#icons/navigation/logout.vue";
10
- import IProfile from "#icons/document/profile.vue";
11
- import ILock from "#icons/lock.vue";
12
- import IReceipt from "#icons/receipt/receipt.vue";
13
- import IBookmark from "#icons/bookmark.vue";
14
- import IFile from "#icons/file.vue";
15
- import IHistory from "#icons/history.vue";
16
- import IUsers from "#icons/users/users.vue";
17
- import IMessage from "#icons/message.vue";
18
3
  import IChevronDown from "#icons/arrow/chevron-down.vue";
19
- const isLargeScreen = true;
4
+ import { ref } from "#imports";
20
5
  const props = defineProps({
21
6
  rate: { type: String, required: true },
22
7
  daysRemaining: { type: Number, required: false, default: 0 },
@@ -28,58 +13,8 @@ const props = defineProps({
28
13
  email: { type: String, required: false },
29
14
  showLogin: { type: Boolean, required: false }
30
15
  });
31
- const appConfig = useAppConfig();
32
- const mode = appConfig.adataUI.mode;
33
- defineEmits(["logout"]);
34
- const { t } = useI18n();
35
16
  const profileMenuOpen = ref(false);
36
- const items = [
37
- {
38
- title: t("header.profile.menu.personalInfo"),
39
- icon: IProfile,
40
- to: `https://${mode}.kz` + PAGES.profile.index
41
- },
42
- {
43
- title: t("header.profile.menu.security"),
44
- icon: ILock,
45
- to: `https://${mode}.kz` + PAGES.profile.security
46
- },
47
- {
48
- title: t("header.profile.menu.paymentHistory"),
49
- icon: IReceipt,
50
- to: `https://${mode}.kz` + PAGES.profile.paymentHistory
51
- },
52
- {
53
- title: t("header.profile.menu.favourites"),
54
- icon: IBookmark,
55
- to: `https://${mode}.kz` + PAGES.profile.favourites
56
- },
57
- {
58
- title: t("header.profile.menu.myReports"),
59
- icon: IFile,
60
- to: `https://${mode}.kz` + PAGES.profile.reports
61
- },
62
- {
63
- title: t("header.profile.menu.browsingHistory"),
64
- icon: IHistory,
65
- to: `https://${mode}.kz` + PAGES.profile.browsingHistory
66
- },
67
- {
68
- title: t("header.profile.menu.myGroups"),
69
- icon: IUsers,
70
- to: `https://${mode}.kz` + PAGES.profile.myGroups
71
- },
72
- {
73
- title: t("header.profile.menu.notes"),
74
- icon: IMessage,
75
- to: `https://${mode}.kz` + PAGES.profile.notes
76
- }
77
- ];
78
- const onReplenish = () => {
79
- if (window) {
80
- window.location.href = `https://${mode}.kz/profile?popupBalance=1`;
81
- }
82
- };
17
+ defineEmits(["logout"]);
83
18
  </script>
84
19
 
85
20
  <template>
@@ -101,153 +36,21 @@ const onReplenish = () => {
101
36
  :side-offset="20"
102
37
  class="shadow-md"
103
38
  >
104
- <div class="max-w-full lg:w-[440px]">
105
- <!-- desktop -->
106
- <div
107
- class="gradient-bg hidden px-4 py-4 text-white dark:text-gray-900 lg:block lg:rounded-t-[0.5rem] lg:px-8 lg:dark:text-white"
108
- >
109
- <div class="hidden text-sm lg:block">
110
- {{ t("header.profile.tariff") }}
111
- </div>
112
- <div class="flex items-center justify-between gap-4 lg:mt-2">
113
- <div>
114
- <span class="mr-2 font-semibold lg:text-lg">{{ rate }}</span>
115
- <a-status-badge
116
- type="success"
117
- class="!px-3 font-semibold text-white"
118
- size="sm"
119
- >
120
- {{ t("header.profile.connected") }}
121
- </a-status-badge>
122
- </div>
123
- <span class="bg-deepblue ml-2 rounded-xl px-2 py-1 text-xs lg:hidden">{{ balance.toLocaleString("RU-ru") }} ₸</span>
124
- </div>
125
- <div class="mt-2 hidden items-center justify-between lg:flex">
126
- <div class="text-xs">
127
- {{ t("header.profile.currentBalance") }}
128
- <span class="ml-2 rounded-xl bg-deepblue-900 px-2 py-1">{{ balance.toLocaleString("RU-ru") }} ₸</span>
129
- </div>
130
- <a-button
131
- size="sm"
132
- view="outline"
133
- variant="ghost"
134
- @click="onReplenish"
135
- >
136
- {{ t("header.profile.addBalance") }}
137
- </a-button>
138
- </div>
139
- </div>
140
- <!-- mobile -->
141
- <div class="gradient-bg px-4 py-4 text-white dark:text-gray-900 lg:hidden">
142
- <div class="flex justify-between gap-4 lg:mt-2">
143
- <div class="flex flex-col items-center">
144
- <div class="font-semibold">
145
- {{ rate }}
146
- </div>
147
- <a-status-badge
148
- type="success"
149
- class="!px-3 font-semibold text-white dark:text-gray-900"
150
- size="sm"
151
- >
152
- {{ t("header.profile.connected") }}
153
- </a-status-badge>
154
- </div>
155
- <div class="flex min-w-[90px] flex-col">
156
- <div class="font-semibold">
157
- {{ t("header.profile.balance") }}
158
- </div>
159
- <div class="flex gap-1">
160
- <a-status-badge
161
- size="sm"
162
- class="!px-3 font-semibold text-white dark:!bg-[#E3E5E8] dark:text-gray-900"
163
- type="gray"
164
- >
165
- {{ balance.toLocaleString("RU-ru") }} ₸
166
- </a-status-badge>
167
- <button
168
- class="flex h-[23px] w-[23px] items-center justify-center rounded-md bg-white text-deepblue-900 dark:bg-gray-900 dark:text-[#E3E5E8]"
169
- @click="onReplenish"
170
- >
171
- <i-plus
172
- width="16px"
173
- height="16px"
174
- />
175
- </button>
176
- </div>
177
- </div>
178
- </div>
179
- </div>
180
- <div class="rounded-b-[0.5rem] bg-white p-4 dark:bg-[#232324]">
181
- <div class="mb-2 flex justify-between gap-2 lg:hidden">
182
- <a-status-badge
183
- size="sm"
184
- class="w-full py-[6px] font-semibold"
185
- >
186
- <span>
187
- {{ t("header.profile.requests") }}
188
- </span>
189
- {{ limitRemaining }}
190
- </a-status-badge>
191
- <a-status-badge
192
- size="sm"
193
- class="w-full py-[6px] font-semibold"
194
- >
195
- <span>
196
- {{ t("header.profile.daysLeft") }}
197
- </span>
198
- {{ daysRemaining }}
199
- </a-status-badge>
200
- </div>
201
- <div class="grid grid-cols-2 gap-2">
202
- <nuxt-link
203
- v-for="item in items"
204
- :key="item.title"
205
- class="flex flex-col items-center rounded-[6px] bg-gray-50 py-[10px] text-center text-sm hover:bg-deepblue-900/10 active:bg-deepblue-900 active:text-white dark:bg-[#161617] active:dark:bg-[#E3E5E8] active:dark:text-gray-900 lg:px-4 lg:dark:bg-[#393D40] lg:dark:hover:bg-gray-900"
206
- :to="item.to"
207
- target="_blank"
208
- >
209
- <component
210
- :is="item.icon"
211
- class="h-[24px] w-[24px]"
212
- />
213
- <span>{{ item.title }}</span>
214
- </nuxt-link>
215
- </div>
216
- <div class="mt-2">
217
- <div
218
- v-if="oldVersion"
219
- :url="oldVersion"
220
- />
221
- </div>
222
- <div
223
- v-if="!isLargeScreen"
224
- class="my-4 flex items-center justify-between text-sm"
225
- >
226
- <span>
227
- {{ t("header.profile.colorScheme") }}
228
- </span>
229
- <color-mode />
230
- </div>
231
- <a-button
232
- class="lg:mt-2"
233
- block
234
- @click="() => {
39
+ <adt-header-profile-menu-content
40
+ :email="email"
41
+ :is-authenticated="isAuthenticated"
42
+ :balance="balance"
43
+ :days-remaining="daysRemaining"
44
+ :limit-remaining="limitRemaining"
45
+ :rate="rate"
46
+ :replenish="replenish"
47
+ :show-login="showLogin"
48
+ @logout="() => {
235
49
  $emit('logout');
236
50
  profileMenuOpen = false;
237
51
  }"
238
- >
239
- <i-logout class="h-5 w-5" />
240
- <span>
241
- {{ t("header.profile.logout") }}
242
- </span>
243
- </a-button>
244
- </div>
245
- </div>
52
+ />
246
53
  </dropdown-menu-content>
247
54
  </dropdown-menu-portal>
248
55
  </dropdown-menu-root>
249
56
  </template>
250
-
251
- <style scoped>
252
- .gradient-bg{background:linear-gradient(236.46deg,#479fff -2.39%,#0070eb 79.1%)}
253
- </style>
@@ -0,0 +1,227 @@
1
+ <script setup>
2
+ import AStatusBadge from "../Tag.vue";
3
+ import ColorMode from "../ColorMode.vue";
4
+ import AButton from "../button/Button.vue";
5
+ import { PAGES } from "../../shared/constants/pages";
6
+ import IPlus from "#icons/plus.vue";
7
+ import ILogout from "#icons/navigation/logout.vue";
8
+ import { useAppConfig, useI18n } from "#imports";
9
+ import IProfile from "#icons/document/profile.vue";
10
+ import ILock from "#icons/lock.vue";
11
+ import IReceipt from "#icons/receipt/receipt.vue";
12
+ import IBookmark from "#icons/bookmark.vue";
13
+ import IFile from "#icons/file/file.vue";
14
+ import IHistory from "#icons/history.vue";
15
+ import IUsers from "#icons/users/users.vue";
16
+ import IMessage from "#icons/message.vue";
17
+ import { useMediaQuery } from "@vueuse/core";
18
+ const props = defineProps({
19
+ rate: { type: String, required: true },
20
+ daysRemaining: { type: Number, required: false, default: 0 },
21
+ limitRemaining: { type: Number, required: false, default: 0 },
22
+ balance: { type: Number, required: true },
23
+ replenish: { type: String, required: false },
24
+ oldVersion: { type: String, required: false },
25
+ isAuthenticated: { type: Boolean, required: false },
26
+ email: { type: String, required: false },
27
+ showLogin: { type: Boolean, required: false }
28
+ });
29
+ const appConfig = useAppConfig();
30
+ const mode = appConfig.adataUI.mode;
31
+ const { t } = useI18n();
32
+ const isLargeScreen = useMediaQuery("(min-width: 1024px)");
33
+ defineEmits(["logout"]);
34
+ const items = [
35
+ {
36
+ title: t("header.profile.menu.personalInfo"),
37
+ icon: IProfile,
38
+ to: `https://${mode}.kz` + PAGES.profile.index
39
+ },
40
+ {
41
+ title: t("header.profile.menu.security"),
42
+ icon: ILock,
43
+ to: `https://${mode}.kz` + PAGES.profile.security
44
+ },
45
+ {
46
+ title: t("header.profile.menu.paymentHistory"),
47
+ icon: IReceipt,
48
+ to: `https://${mode}.kz` + PAGES.profile.paymentHistory
49
+ },
50
+ {
51
+ title: t("header.profile.menu.favourites"),
52
+ icon: IBookmark,
53
+ to: `https://${mode}.kz` + PAGES.profile.favourites
54
+ },
55
+ {
56
+ title: t("header.profile.menu.myReports"),
57
+ icon: IFile,
58
+ to: `https://${mode}.kz` + PAGES.profile.reports
59
+ },
60
+ {
61
+ title: t("header.profile.menu.browsingHistory"),
62
+ icon: IHistory,
63
+ to: `https://${mode}.kz` + PAGES.profile.browsingHistory
64
+ },
65
+ {
66
+ title: t("header.profile.menu.myGroups"),
67
+ icon: IUsers,
68
+ to: `https://${mode}.kz` + PAGES.profile.myGroups
69
+ },
70
+ {
71
+ title: t("header.profile.menu.notes"),
72
+ icon: IMessage,
73
+ to: `https://${mode}.kz` + PAGES.profile.notes
74
+ }
75
+ ];
76
+ const onReplenish = () => {
77
+ if (window) {
78
+ window.location.href = `https://${mode}.kz/profile?popupBalance=1`;
79
+ }
80
+ };
81
+ </script>
82
+
83
+ <template>
84
+ <div class="max-w-full lg:w-[440px]">
85
+ <!-- desktop -->
86
+ <div
87
+ class="gradient-bg hidden px-4 py-4 text-white dark:text-gray-900 lg:block lg:rounded-t-[0.5rem] lg:px-8 lg:dark:text-white"
88
+ >
89
+ <div class="hidden text-sm lg:block">
90
+ {{ t("header.profile.tariff") }}
91
+ </div>
92
+ <div class="flex items-center justify-between gap-4 lg:mt-2">
93
+ <div>
94
+ <span class="mr-2 font-semibold lg:text-lg">{{ rate }}</span>
95
+ <a-status-badge
96
+ type="success"
97
+ class="!px-3 font-semibold text-white"
98
+ size="sm"
99
+ >
100
+ {{ t("header.profile.connected") }}
101
+ </a-status-badge>
102
+ </div>
103
+ <span class="bg-deepblue ml-2 rounded-xl px-2 py-1 text-xs lg:hidden">{{ balance.toLocaleString("RU-ru") }} ₸</span>
104
+ </div>
105
+ <div class="mt-2 hidden items-center justify-between lg:flex">
106
+ <div class="text-xs">
107
+ {{ t("header.profile.currentBalance") }}
108
+ <span class="ml-2 rounded-xl bg-deepblue-900 px-2 py-1">{{ balance.toLocaleString("RU-ru") }} ₸</span>
109
+ </div>
110
+ <a-button
111
+ size="sm"
112
+ view="outline"
113
+ variant="ghost"
114
+ @click="onReplenish"
115
+ >
116
+ {{ t("header.profile.addBalance") }}
117
+ </a-button>
118
+ </div>
119
+ </div>
120
+ <!-- mobile -->
121
+ <div class="gradient-bg px-4 py-4 text-white dark:text-gray-900 lg:hidden">
122
+ <div class="flex justify-between gap-4 lg:mt-2">
123
+ <div class="flex flex-col items-center">
124
+ <div class="font-semibold">
125
+ {{ rate }}
126
+ </div>
127
+ <a-status-badge
128
+ type="success"
129
+ class="!px-3 font-semibold text-white dark:text-gray-900"
130
+ size="sm"
131
+ >
132
+ {{ t("header.profile.connected") }}
133
+ </a-status-badge>
134
+ </div>
135
+ <div class="flex min-w-[90px] flex-col">
136
+ <div class="font-semibold">
137
+ {{ t("header.profile.balance") }}
138
+ </div>
139
+ <div class="flex gap-1">
140
+ <a-status-badge
141
+ size="sm"
142
+ class="!px-3 font-semibold text-white dark:!bg-[#E3E5E8] dark:text-gray-900"
143
+ type="gray"
144
+ >
145
+ {{ balance.toLocaleString("RU-ru") }} ₸
146
+ </a-status-badge>
147
+ <button
148
+ class="flex h-[23px] w-[23px] items-center justify-center rounded-md bg-white text-deepblue-900 dark:bg-gray-900 dark:text-[#E3E5E8]"
149
+ @click="onReplenish"
150
+ >
151
+ <i-plus
152
+ width="16px"
153
+ height="16px"
154
+ />
155
+ </button>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ <div class="rounded-b-[0.5rem] bg-white p-4 dark:bg-[#232324]">
161
+ <div class="mb-2 flex justify-between gap-2 lg:hidden">
162
+ <a-status-badge
163
+ size="sm"
164
+ class="w-full py-[6px] font-semibold"
165
+ >
166
+ <span>
167
+ {{ t("header.profile.requests") }}
168
+ </span>
169
+ {{ limitRemaining }}
170
+ </a-status-badge>
171
+ <a-status-badge
172
+ size="sm"
173
+ class="w-full py-[6px] font-semibold"
174
+ >
175
+ <span>
176
+ {{ t("header.profile.daysLeft") }}
177
+ </span>
178
+ {{ daysRemaining }}
179
+ </a-status-badge>
180
+ </div>
181
+ <div class="grid grid-cols-2 gap-2">
182
+ <nuxt-link
183
+ v-for="item in items"
184
+ :key="item.title"
185
+ class="flex flex-col items-center rounded-[6px] bg-gray-50 py-[10px] text-center text-sm hover:bg-deepblue-900/10 active:bg-deepblue-900 active:text-white dark:bg-[#161617] active:dark:bg-[#E3E5E8] active:dark:text-gray-900 lg:px-4 lg:dark:bg-[#393D40] lg:dark:hover:bg-gray-900"
186
+ :to="item.to"
187
+ target="_blank"
188
+ >
189
+ <component
190
+ :is="item.icon"
191
+ class="h-[24px] w-[24px]"
192
+ />
193
+ <span>{{ item.title }}</span>
194
+ </nuxt-link>
195
+ </div>
196
+ <div class="mt-2">
197
+ <div
198
+ v-if="oldVersion"
199
+ :url="oldVersion"
200
+ />
201
+ </div>
202
+ <div
203
+ v-if="!isLargeScreen"
204
+ class="my-4 flex items-center justify-between text-sm"
205
+ >
206
+ <span>
207
+ {{ t("header.profile.colorScheme") }}
208
+ </span>
209
+ <color-mode />
210
+ </div>
211
+ <a-button
212
+ class="lg:mt-2"
213
+ block
214
+ @click="$emit('logout')"
215
+ >
216
+ <i-logout class="h-5 w-5" />
217
+ <span>
218
+ {{ t("header.profile.logout") }}
219
+ </span>
220
+ </a-button>
221
+ </div>
222
+ </div>
223
+ </template>
224
+
225
+ <style scoped>
226
+ .gradient-bg{background:linear-gradient(236.46deg,#479fff -2.39%,#0070eb 79.1%)}
227
+ </style>
@@ -0,0 +1,16 @@
1
+ interface Props {
2
+ rate: string;
3
+ daysRemaining?: number;
4
+ limitRemaining?: number;
5
+ balance: number;
6
+ replenish?: string;
7
+ oldVersion?: string;
8
+ isAuthenticated?: boolean;
9
+ email?: string;
10
+ showLogin?: boolean;
11
+ }
12
+ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {
13
+ daysRemaining: number;
14
+ limitRemaining: number;
15
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
+ export default _default;
@@ -0,0 +1,78 @@
1
+ <script setup>
2
+ import { useAppConfig, useI18n } from "#imports";
3
+ const props = defineProps({
4
+ items: { type: Array, required: true },
5
+ hasNotification: { type: Boolean, required: false },
6
+ isAuthenticated: { type: Boolean, required: true }
7
+ });
8
+ const activeModel = defineModel({ type: String, ...{ default: "" } });
9
+ const appConfig = useAppConfig();
10
+ const mode = appConfig.adataUI.mode;
11
+ const { t } = useI18n();
12
+ function pushItem(value) {
13
+ if (value === activeModel.value) value = "";
14
+ activeModel.value = value;
15
+ }
16
+ function pushProfile() {
17
+ if (props.isAuthenticated) {
18
+ pushItem("profile");
19
+ } else {
20
+ const fullPath = encodeURIComponent(window.location.toString());
21
+ location.href = `https://id.${mode}.kz/?url=${fullPath}`;
22
+ }
23
+ }
24
+ </script>
25
+
26
+ <template>
27
+ <div class="sticky bottom-0 z-100 lg:hidden">
28
+ <div class="w-full border-t border-gray-500/50 bg-white dark:bg-gray-900">
29
+ <div class="grid w-full grid-cols-4 items-center">
30
+ <slot>
31
+ <button
32
+ v-for="item in items"
33
+ :key="item"
34
+ class="h-16 w-full flex flex-col justify-center items-center"
35
+ @click="pushItem(item.value)"
36
+ >
37
+ <component
38
+ :is="item.icon"
39
+ class="size-6 shrink-0"
40
+ />
41
+ <span class="text-[10px] leading-5">{{ t(item.label) }}</span>
42
+ </button>
43
+ </slot>
44
+ <slot
45
+ name="notifications"
46
+ :items="items"
47
+ />
48
+ <button
49
+ class="h-16 w-full flex flex-col justify-center items-center"
50
+ @click="pushProfile"
51
+ >
52
+ <i-avatar
53
+ v-if="isAuthenticated"
54
+ class="shrink-0"
55
+ />
56
+ <i-navigation-logout
57
+ v-else
58
+ class="shrink-0"
59
+ />
60
+ <span
61
+ v-if="isAuthenticated"
62
+ class="text-[10px] leading-5"
63
+ @click="pushProfile"
64
+ >
65
+ {{ t("modals.mobile_navigation.type_profile") }}
66
+ </span>
67
+ <span
68
+ v-else
69
+ class="text-[10px] leading-5"
70
+ @click="pushProfile"
71
+ >
72
+ {{ t("header.login") }}
73
+ </span>
74
+ </button>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ </template>
@@ -0,0 +1,29 @@
1
+ interface Props {
2
+ items: T[];
3
+ hasNotification?: boolean;
4
+ isAuthenticated: boolean;
5
+ }
6
+ type __VLS_Props = Props;
7
+ type __VLS_PublicProps = __VLS_Props & {
8
+ modelValue?: string;
9
+ };
10
+ declare var __VLS_1: {}, __VLS_7: {
11
+ items: any;
12
+ };
13
+ type __VLS_Slots = {} & {
14
+ default?: (props: typeof __VLS_1) => any;
15
+ } & {
16
+ notifications?: (props: typeof __VLS_7) => any;
17
+ };
18
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
19
+ "update:modelValue": (value: string) => any;
20
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
21
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
22
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
24
+ export default _default;
25
+ type __VLS_WithSlots<T, S> = T & {
26
+ new (): {
27
+ $slots: S;
28
+ };
29
+ };
@@ -0,0 +1,16 @@
1
+ <script setup>
2
+ import { useI18n } from "#imports";
3
+ const emits = defineEmits(["pushMain"]);
4
+ const { t } = useI18n();
5
+ </script>
6
+
7
+ <template>
8
+ <nuxt-link
9
+ to="/"
10
+ class="flex items-center gap-4 px-4 py-3 bg-gray-50 rounded-md dark:bg-gray-800"
11
+ @click="emits('pushMain')"
12
+ >
13
+ <i-menu />
14
+ {{ t("modals.mobile_navigation.return_button") }}
15
+ </nuxt-link>
16
+ </template>
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ export default _default;