adata-ui 2.1.40-beta.10 → 2.1.40-beta.12

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 (139) hide show
  1. package/.claude/settings.local.json +19 -0
  2. package/assets/styles/index.scss +67 -5
  3. package/components/elements/a-select-row/ASelectRowV2.vue +8 -8
  4. package/components/elements/a-select-row/index.vue +3 -5
  5. package/components/elements/accordion/AAccordion.vue +5 -3
  6. package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +3 -3
  7. package/components/elements/alert/AAlert.vue +34 -47
  8. package/components/elements/bg-block/ABgBlock.vue +1 -1
  9. package/components/elements/button/AButton.vue +3 -3
  10. package/components/elements/button/AButtonV2.vue +7 -5
  11. package/components/elements/button-login/index.vue +1 -1
  12. package/components/elements/chip-wrapper/AChipWrapper.vue +1 -1
  13. package/components/elements/chips/AChips.vue +2 -2
  14. package/components/elements/digit-badge/ADigitBadge.vue +21 -19
  15. package/components/elements/feature-description/AFeatureDescription.vue +1 -1
  16. package/components/elements/leave-note/ALeaveNote.vue +1 -1
  17. package/components/elements/pagination/APagination.vue +7 -7
  18. package/components/elements/segmented/ASegmentedV2.vue +103 -10
  19. package/components/elements/select/ASelect.vue +4 -4
  20. package/components/elements/select/ASelectMobile.vue +2 -2
  21. package/components/elements/select/ASelectV2.vue +10 -11
  22. package/components/elements/select/ui/select-button.vue +1 -1
  23. package/components/elements/status-badge/AStatusBadge.vue +22 -19
  24. package/components/elements/status-badge-v2/StatusBadgeV2.vue +1 -3
  25. package/components/elements/table/ATable.vue +1 -1
  26. package/components/elements/table/table.config.ts +2 -2
  27. package/components/elements/tree-select/ATreeSelect.vue +97 -113
  28. package/components/elements/tree-select/TreeService.ts +142 -207
  29. package/components/elements/tree-select/components/ATreeSelectNode.vue +104 -0
  30. package/components/elements/tree-select/types.ts +40 -11
  31. package/components/elements/tree-select/utils.ts +30 -0
  32. package/components/elements/tree-select-modal/ATreeSelectModal.vue +217 -0
  33. package/components/features/color-mode/AColorMode.client.vue +1 -1
  34. package/components/features/dropdown/ADropdownV2.vue +1 -2
  35. package/components/features/lang-switcher/lang-switcher.vue +9 -4
  36. package/components/features/payment/banner/BasicPlusLimitBanner.vue +3 -3
  37. package/components/features/payment/banner/PaymentBanner.vue +3 -3
  38. package/components/features/payment/banner/UpSellBanner.vue +3 -3
  39. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +43 -27
  40. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +34 -23
  41. package/components/features/payment/process/PaymentMethodSidePanel.vue +61 -49
  42. package/components/features/payment/process/PaymentProcess.vue +6 -6
  43. package/components/features/payment/process/PaymentTopUpSidePanel.vue +44 -63
  44. package/components/features/pk-mobile-services/APkMobileServices.vue +1 -1
  45. package/components/features//321/201hange-version/AChangeVersion.vue +2 -2
  46. package/components/forms/checkbox/ACheckbox.vue +1 -1
  47. package/components/forms/checkbox/ACheckboxV2.vue +5 -5
  48. package/components/forms/input/AInputV2.vue +4 -4
  49. package/components/forms/input/date/AInputDate.vue +2 -2
  50. package/components/forms/input/password/AInputPassword.vue +8 -2
  51. package/components/forms/input/standard/AInputStandard.vue +3 -3
  52. package/components/forms/input/textarea/ATextarea.vue +2 -2
  53. package/components/forms/toggle/AToggle.vue +2 -3
  54. package/components/forms/toggle/AToggleV2.vue +3 -3
  55. package/components/modals/AnotherDeviceModal.vue +1 -1
  56. package/components/modals/ContactsMobileModel.vue +1 -1
  57. package/components/modals/ContentNavigationModal.vue +77 -333
  58. package/components/modals/Insufficient-funds-modal.vue +1 -1
  59. package/components/modals/PaymentMethodModal.vue +1 -1
  60. package/components/modals/id/IdBanner.vue +3 -3
  61. package/components/modals/id/IdRecoveryModal.vue +1 -1
  62. package/components/navigation/bottom-navigation/ABottomNavigation.vue +1 -1
  63. package/components/navigation/breadcrumbs/ABreadcrumbs.vue +106 -45
  64. package/components/navigation/breadcrumbs/types.ts +3 -0
  65. package/components/navigation/footer/AFooter.vue +39 -40
  66. package/components/navigation/footer/ui/a-footer-accordion.vue +9 -9
  67. package/components/navigation/header/AHeader.vue +13 -19
  68. package/components/navigation/header/AlmatyContacts.vue +78 -78
  69. package/components/navigation/header/CardGallery.vue +4 -4
  70. package/components/navigation/header/HeaderUsage.vue +4 -6
  71. package/components/navigation/header/ListItem.vue +2 -2
  72. package/components/navigation/header/NavCard.vue +1 -1
  73. package/components/navigation/header/NavList.vue +2 -2
  74. package/components/navigation/header/NotificationsMenu.vue +2 -3
  75. package/components/navigation/header/ProductMenu.vue +7 -7
  76. package/components/navigation/header/ProfileMenu.vue +26 -35
  77. package/components/navigation/header/SystemNotification.vue +1 -3
  78. package/components/navigation/pill-tabs/APillTabs.vue +2 -2
  79. package/components/navigation/pill-tabs/APillTabsV2.vue +22 -6
  80. package/components/overlays/drawer/ADrawerV2.vue +335 -0
  81. package/components/overlays/modal/AModal.vue +4 -4
  82. package/components/overlays/modal/AModalV2.vue +7 -4
  83. package/components/overlays/side-panel/ASidePanel.vue +6 -6
  84. package/components/overlays/sideover/ASlideover.vue +6 -6
  85. package/components/overlays/tooltip/ATooltip.vue +1 -1
  86. package/components/overlays/tooltip/ATooltipV2.vue +2 -12
  87. package/components/transitions/ATransitionHeight.vue +1 -1
  88. package/composables/useHeaderNavigationLinks.ts +100 -94
  89. package/icons/archive.vue +16 -0
  90. package/icons/arrow/arrows-in.vue +11 -0
  91. package/icons/arrow/arrows-out.vue +11 -0
  92. package/icons/arrow/arrows-resize-in.vue +38 -0
  93. package/icons/arrow/arrows-resize-out.vue +17 -0
  94. package/icons/bot.vue +52 -0
  95. package/icons/clock-time.vue +24 -0
  96. package/icons/compare-outlined.vue +8 -0
  97. package/icons/dots-horizontal.vue +31 -0
  98. package/icons/download-line.vue +13 -0
  99. package/icons/egov.vue +41 -0
  100. package/icons/elicense.vue +38 -0
  101. package/icons/favourite-bookmark-outline.vue +17 -0
  102. package/icons/file-pen.vue +31 -0
  103. package/icons/file-stack.vue +31 -0
  104. package/icons/file-types/excel.vue +131 -0
  105. package/icons/file-types/html.vue +13 -0
  106. package/icons/file-types/jpeg.vue +16 -0
  107. package/icons/file-types/pdf.vue +11 -0
  108. package/icons/file-types/png.vue +11 -0
  109. package/icons/file-types/rar.vue +11 -0
  110. package/icons/file-types/word.vue +50 -0
  111. package/icons/file-types/zip.vue +11 -0
  112. package/icons/git-compare.vue +38 -0
  113. package/icons/graduation-cap.vue +31 -0
  114. package/icons/graph-loading.vue +34 -0
  115. package/icons/help-question-circle.vue +26 -0
  116. package/icons/in-row-type.vue +46 -0
  117. package/icons/in-table-type.vue +29 -0
  118. package/icons/message-dotted.vue +30 -0
  119. package/icons/notification-error.vue +17 -0
  120. package/icons/person.vue +22 -0
  121. package/icons/settings.vue +26 -0
  122. package/icons/shield-alert.vue +31 -0
  123. package/icons/socials/facebook-color.vue +16 -0
  124. package/icons/socials/globe-color.vue +16 -0
  125. package/icons/socials/instagram-color.vue +46 -0
  126. package/icons/socials/linkedin-color.vue +14 -0
  127. package/icons/socials/telegram-color.vue +16 -0
  128. package/icons/socials/tiktok-color.vue +14 -0
  129. package/icons/socials/vk-color.vue +16 -0
  130. package/icons/socials/youtube-color.vue +16 -0
  131. package/icons/view-eye-open.vue +13 -0
  132. package/lang/en.ts +1 -0
  133. package/lang/kk.ts +1 -0
  134. package/lang/ru.ts +1 -0
  135. package/package.json +1 -1
  136. package/plugins/toast.client.ts +38 -55
  137. package/tailwind.config.ts +147 -116
  138. package/utils/twMerge.ts +34 -0
  139. package/components/elements/tree-select/components/tree-select-nodes.vue +0 -91
@@ -2,12 +2,12 @@
2
2
  import { removeTrailingSlash } from '#adata-ui/components/utils/removeTrailingSlash'
3
3
 
4
4
  const props = defineProps<{
5
- requestId: number
5
+ requestId: number
6
6
  }>()
7
7
 
8
8
  const emit = defineEmits<{
9
9
  (e: 'back', type: 'kaspi'): void
10
- (e: 'updateUserRate'): void
10
+ (e: 'updateUserRate'): void
11
11
  }>()
12
12
 
13
13
  const isOpen = defineModel({ default: false })
@@ -78,35 +78,46 @@ watch(isOpen, async (value) => {
78
78
  v-model="isOpen"
79
79
  width="484px"
80
80
  >
81
- <div class="flex flex-col gap-5">
82
- <p class="text-center text-2xl font-bold whitespace-pre-wrap">
81
+ <div class="flex flex-col gap-6">
82
+ <p class="whitespace-pre-wrap text-center text-xl font-bold text-deepblue-900 dark:text-gray-100">
83
83
  {{ t('payment.redirect.title') }}
84
84
  </p>
85
- <a-button block @click="goKaspi">
86
- {{ t('payment.redirect.goKaspi') }}
87
- </a-button>
88
- <div class="flex flex-col gap-2">
89
- <p class="text-center text-sm">
85
+
86
+ <div class="flex flex-col items-center gap-1 rounded-xl bg-gray-50 p-5 text-center dark:bg-white/[0.03]">
87
+ <span class="text-xs text-gray-500 dark:text-gray-400">
90
88
  {{ t('payment.redirect.paymentId') }}
91
- </p>
92
- <p class="text-center text-xl font-semibold">
89
+ </span>
90
+ <span class="text-2xl font-bold text-deepblue-900 dark:text-gray-100">
93
91
  {{ requestId }}
94
- </p>
92
+ </span>
95
93
  </div>
96
- <p class="text-center text-sm">
94
+
95
+ <p class="text-center text-sm text-gray-600 dark:text-gray-300">
97
96
  {{ t('payment.redirect.description') }}
98
97
  </p>
99
- <a-button
100
- view="outline"
101
- block
102
- @click="onBack"
103
- >
104
- {{ t('payment.redirect.changeMethod') }}
105
- </a-button>
106
98
  </div>
99
+
100
+ <template #footer>
101
+ <div class="flex flex-col gap-2">
102
+ <a-button-v2
103
+ size="lg"
104
+ block
105
+ @click="goKaspi"
106
+ >
107
+ {{ t('payment.redirect.goKaspi') }}
108
+ </a-button-v2>
109
+ <a-button-v2
110
+ view="outline"
111
+ color="gray"
112
+ size="lg"
113
+ block
114
+ @click="onBack"
115
+ >
116
+ {{ t('payment.redirect.changeMethod') }}
117
+ </a-button-v2>
118
+ </div>
119
+ </template>
107
120
  </a-side-panel>
108
121
  </template>
109
122
 
110
- <style scoped>
111
-
112
- </style>
123
+ <style scoped></style>
@@ -16,24 +16,16 @@ const isOpen = defineModel({ default: false })
16
16
 
17
17
  const { t } = useI18n()
18
18
 
19
- const checkbox = ref<IBank>('kaspi')
19
+ const selected = ref<IBank>('kaspi')
20
20
  const cards = [
21
- {
22
- id: 'kaspi',
23
- name: 'payment.method.kaspi',
24
- sum: 10000,
25
- img: AIconPaymentKaspi,
26
- },
27
- {
28
- id: 'other',
29
- name: 'payment.method.other',
30
- sum: 10000,
31
- img: AIconPaymentCard,
32
- },
33
- ]
21
+ { id: 'kaspi', name: 'payment.method.kaspi', img: AIconPaymentKaspi },
22
+ { id: 'other', name: 'payment.method.other', img: AIconPaymentCard },
23
+ ] as const
24
+
25
+ const formattedSum = computed(() => Math.round(props.sum).toLocaleString('ru-RU'))
34
26
 
35
27
  function confirm() {
36
- emit('nextBank', checkbox.value, props.sum)
28
+ emit('nextBank', selected.value, props.sum)
37
29
  }
38
30
 
39
31
  function cancel() {
@@ -52,70 +44,90 @@ function onBack() {
52
44
  >
53
45
  <template #header>
54
46
  <div class="flex items-center gap-2">
55
- <button @click="onBack">
47
+ <button
48
+ type="button"
49
+ class="rounded-md p-1 transition-colors hover:bg-gray-100 dark:hover:bg-white/[0.06]"
50
+ @click="onBack"
51
+ >
56
52
  <a-icon-chevron-left class="size-6" />
57
53
  </button>
58
- <p class="text-xl font-semibold">
54
+ <p class="text-xl font-semibold text-deepblue-900 dark:text-gray-100">
59
55
  {{ t('payment.method.title') }}
60
56
  </p>
61
57
  </div>
62
58
  </template>
63
59
 
64
60
  <div class="flex flex-col gap-6">
65
- <div class="flex flex-col items-center gap-4">
61
+ <div class="flex flex-col items-center gap-4 rounded-xl bg-gray-50 p-6 text-center dark:bg-white/[0.03]">
66
62
  <a-ill-phone-check class="size-[120px]" />
67
- <p class="text-center text-sm font-semibold">
63
+ <p class="text-sm font-medium text-gray-600 dark:text-gray-300">
68
64
  {{ t('payment.method.description') }}
69
65
  </p>
70
66
  </div>
71
67
 
72
- <div class="font-semibold">
73
- {{ t('payment.method.note') }}
74
- </div>
75
-
76
68
  <div class="flex flex-col gap-2">
77
- <a-radio-button
78
- v-for="(item) in cards"
69
+ <p class="text-sm font-semibold text-deepblue-900 dark:text-gray-100">
70
+ {{ t('payment.method.note') }}
71
+ </p>
72
+
73
+ <button
74
+ v-for="item in cards"
79
75
  :key="item.id"
80
- v-model="checkbox"
81
- :name="`${item.name}`"
82
- side="right"
83
- size="lg"
84
- :value="item.id"
85
- class="flex items-center justify-between gap-2 rounded-md bg-gray-50 p-[10px_16px] dark:bg-[#393D40]"
76
+ type="button"
77
+ class="flex items-center gap-3 rounded-xl border p-4 text-left transition-colors"
78
+ :class="selected === item.id
79
+ ? 'border-blue-500 bg-blue-50/60 dark:border-blue-400 dark:bg-blue-950/30'
80
+ : 'border-gray-200 bg-white hover:border-gray-300 hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-900 dark:hover:bg-gray-800'"
81
+ @click="selected = item.id"
86
82
  >
87
- <div class="flex w-full items-center gap-2">
88
- <component :is="item.img" />
89
- <div class="flex w-full items-center justify-between">
83
+ <component
84
+ :is="item.img"
85
+ class="h-7 w-auto shrink-0"
86
+ />
87
+ <div class="flex min-w-0 flex-1 items-center justify-between gap-2">
88
+ <span class="text-sm font-semibold text-deepblue-900 dark:text-gray-100">
90
89
  {{ t(item.name) }}
91
- <p class="body-600">
92
- {{ Math.round(sum).toLocaleString('RU-ru') }} ₸
93
- </p>
94
- </div>
90
+ </span>
91
+ <span class="text-sm font-semibold text-gray-600 dark:text-gray-300">
92
+ {{ formattedSum }} ₸
93
+ </span>
95
94
  </div>
96
- </a-radio-button>
95
+ <span
96
+ class="flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors"
97
+ :class="selected === item.id
98
+ ? 'border-blue-600 dark:border-blue-400'
99
+ : 'border-gray-300 dark:border-gray-600'"
100
+ >
101
+ <span
102
+ v-if="selected === item.id"
103
+ class="size-2.5 rounded-full bg-blue-600 dark:bg-blue-400"
104
+ />
105
+ </span>
106
+ </button>
97
107
  </div>
108
+ </div>
98
109
 
99
- <div class="flex flex-col gap-2 ">
100
- <a-button
101
- :disabled="!checkbox"
110
+ <template #footer>
111
+ <div class="flex flex-col gap-2">
112
+ <a-button-v2
113
+ size="lg"
102
114
  block
103
115
  @click="confirm"
104
116
  >
105
117
  {{ t('actions.topUp') }}
106
- </a-button>
107
- <a-button
118
+ </a-button-v2>
119
+ <a-button-v2
108
120
  view="outline"
121
+ color="gray"
122
+ size="lg"
109
123
  block
110
124
  @click="cancel"
111
125
  >
112
126
  {{ t('actions.close') }}
113
- </a-button>
127
+ </a-button-v2>
114
128
  </div>
115
- </div>
129
+ </template>
116
130
  </a-side-panel>
117
131
  </template>
118
132
 
119
- <style scoped>
120
-
121
- </style>
133
+ <style scoped></style>
@@ -1,8 +1,8 @@
1
1
  <script setup lang="ts">
2
- import PaymentTopUpSidePanel from '#adata-ui/components/features/payment/process/PaymentTopUpSidePanel.vue'
3
- import PaymentMethodSidePanel from '#adata-ui/components/features/payment/process/PaymentMethodSidePanel.vue'
4
2
  import PaymentKaspiQrSidePanel from '#adata-ui/components/features/payment/process/PaymentKaspiQrSidePanel.vue'
5
3
  import PaymentKaspiRedirectSidePanel from '#adata-ui/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue'
4
+ import PaymentMethodSidePanel from '#adata-ui/components/features/payment/process/PaymentMethodSidePanel.vue'
5
+ import PaymentTopUpSidePanel from '#adata-ui/components/features/payment/process/PaymentTopUpSidePanel.vue'
6
6
  import { removeTrailingSlash } from '#adata-ui/components/utils/removeTrailingSlash'
7
7
 
8
8
  const { $toast } = useNuxtApp()
@@ -16,7 +16,7 @@ const {
16
16
  methodSidePanel,
17
17
  kaspiQRSidePanel,
18
18
  kaspiRedirectSidePanel,
19
- payByCard
19
+ payByCard,
20
20
  } = usePayment()
21
21
 
22
22
  const userApiURL = commonAuth.userApiURL
@@ -132,23 +132,23 @@ async function updateUserRate() {
132
132
 
133
133
  <payment-method-side-panel
134
134
  v-model="methodSidePanel"
135
- @back="onBack"
136
135
  :sum="paymentSum"
136
+ @back="onBack"
137
137
  @next-bank="directionsBanks"
138
138
  />
139
139
 
140
140
  <payment-kaspi-qr-side-panel
141
141
  v-model="kaspiQRSidePanel"
142
- @back="onBack"
143
142
  :request-url="requestUrl"
144
143
  :request-id="requestId as number"
144
+ @back="onBack"
145
145
  @update-user-rate="updateUserRate"
146
146
  />
147
147
 
148
148
  <payment-kaspi-redirect-side-panel
149
149
  v-model="kaspiRedirectSidePanel"
150
- @back="onBack"
151
150
  :request-id="requestId as number"
151
+ @back="onBack"
152
152
  @update-user-rate="updateUserRate"
153
153
  />
154
154
  </template>
@@ -1,6 +1,4 @@
1
1
  <script setup lang="ts">
2
- import ASidePanel from "#adata-ui/components/overlays/side-panel/ASidePanel.vue";
3
-
4
2
  const emit = defineEmits<{
5
3
  (e: 'next', sum: number): void
6
4
  }>()
@@ -9,35 +7,18 @@ const isOpen = defineModel({ default: false })
9
7
 
10
8
  const { t } = useI18n()
11
9
 
12
- const money = ref(0)
10
+ const money = ref<number | string>(0)
13
11
  const errorAlert = ref(false)
14
12
 
15
- const sumArr = ref([
16
- {
17
- id: 1,
18
- value: 2000,
19
- label: '2 000 ₸',
20
- },
21
- {
22
- id: 2,
23
- value: 5000,
24
- label: '5 000 ₸',
25
- },
26
- {
27
- id: 3,
28
- value: 10000,
29
- label: '10 000 ₸',
30
- },
31
- {
32
- id: 4,
33
- value: 20000,
34
- label: '20 000 ₸',
35
- },
36
- ])
13
+ const sumArr = [
14
+ { id: 1, value: 2000, label: '2 000 ₸' },
15
+ { id: 2, value: 5000, label: '5 000 ₸' },
16
+ { id: 3, value: 10000, label: '10 000 ₸' },
17
+ { id: 4, value: 20000, label: '20 000 ₸' },
18
+ ]
37
19
 
38
- const filterMoney = computed(() => {
39
- return money.value >= 1
40
- })
20
+ const amount = computed(() => Number(money.value) || 0)
21
+ const filterMoney = computed(() => amount.value >= 1)
41
22
 
42
23
  function onSelectAmount(value: number) {
43
24
  money.value = value
@@ -50,10 +31,11 @@ function onClose() {
50
31
  }
51
32
 
52
33
  function handlePayment() {
53
- if (money.value <= 1000000) {
54
- emit('next', money.value)
34
+ if (amount.value <= 1000000) {
35
+ emit('next', amount.value)
55
36
  errorAlert.value = false
56
- } else {
37
+ }
38
+ else {
57
39
  errorAlert.value = true
58
40
  }
59
41
  }
@@ -65,69 +47,68 @@ function handlePayment() {
65
47
  width="484px"
66
48
  >
67
49
  <template #header>
68
- <div class="text-xl font-semibold">
50
+ <div class="text-xl font-semibold text-deepblue-900 dark:text-gray-100">
69
51
  {{ t('payment.topUp.title') }}
70
52
  </div>
71
53
  </template>
72
54
 
73
55
  <div class="flex flex-col gap-6">
74
- <div class="flex flex-col items-center gap-4 ">
56
+ <div class="flex flex-col items-center gap-4 rounded-xl bg-gray-50 p-6 text-center dark:bg-white/[0.03]">
75
57
  <a-ill-bill class="size-[120px]" />
76
- <p class="text-center text-sm font-semibold">
58
+ <p class="text-sm font-medium text-gray-600 dark:text-gray-300">
77
59
  {{ t('payment.topUp.info') }}
78
60
  </p>
79
61
  </div>
80
62
 
81
- <div class="flex flex-col gap-4">
82
- <a-input-standard
63
+ <div class="flex flex-col gap-3">
64
+ <a-input-v2
83
65
  v-model="money"
84
- :label="`${t('payment.topUp.enterAmount')}`"
66
+ :label="t('payment.topUp.enterAmount')"
85
67
  type="number"
86
- pattern="[0-9]*"
68
+ size="md"
87
69
  clearable
70
+ :error="errorAlert ? t('modals.replenish_modal.error') : undefined"
88
71
  />
89
- <a-alert
90
- v-if="errorAlert"
91
- color="red"
92
- >
93
- {{ t('modals.replenish_modal.error') }}
94
- </a-alert>
95
- <div class="flex gap-4">
96
- <a-chips
72
+
73
+ <div class="grid grid-cols-2 gap-2 sm:grid-cols-4">
74
+ <button
97
75
  v-for="item in sumArr"
98
76
  :key="item.id"
99
- view="standard"
100
- size="lg"
101
- :class="[
102
- money === item.value
103
- ? 'bg-blue-700 text-white hover:bg-blue-700 dark:border-blue-500 dark:bg-transparent dark:text-blue-500 dark:hover:bg-transparent'
104
- : '',
105
- ]"
77
+ type="button"
78
+ class="rounded-lg border px-3 py-2.5 text-sm font-semibold transition-colors"
79
+ :class="amount === item.value
80
+ ? 'border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-950/40 dark:text-blue-300'
81
+ : 'border-gray-200 bg-white text-deepblue-900 hover:border-gray-300 hover:bg-gray-50 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100 dark:hover:bg-gray-800'"
106
82
  @click.stop="onSelectAmount(item.value)"
107
83
  >
108
- <span>{{ item.label }}</span>
109
- </a-chips>
84
+ {{ item.label }}
85
+ </button>
110
86
  </div>
111
87
  </div>
88
+ </div>
112
89
 
90
+ <template #footer>
113
91
  <div class="flex flex-col gap-2">
114
- <a-button
92
+ <a-button-v2
93
+ size="lg"
94
+ block
115
95
  :disabled="!filterMoney"
116
96
  @click="handlePayment"
117
97
  >
118
98
  {{ t('actions.topUp') }}
119
- </a-button>
120
- <a-button
99
+ </a-button-v2>
100
+ <a-button-v2
121
101
  view="outline"
102
+ color="gray"
103
+ size="lg"
104
+ block
122
105
  @click="onClose"
123
106
  >
124
107
  {{ t('actions.back') }}
125
- </a-button>
108
+ </a-button-v2>
126
109
  </div>
127
- </div>
110
+ </template>
128
111
  </a-side-panel>
129
112
  </template>
130
113
 
131
- <style scoped>
132
-
133
- </style>
114
+ <style scoped></style>
@@ -29,7 +29,7 @@ const blockStyles = [
29
29
  :class="['flex flex-col items-center gap-2 p-2', blockStyles[index]]"
30
30
  >
31
31
  <div
32
- class="size-10 p-2 rounded-lg"
32
+ class="size-10 p-2 rounded-md"
33
33
  :class="[
34
34
  'bg-deepblue-900/5 dark:bg-gray-200/5',
35
35
  {'!bg-blue-700 text-white dark:!bg-blue-500 ': isActiveService(service.to)}
@@ -10,9 +10,9 @@ const { t } = useI18n()
10
10
  <nuxt-link
11
11
  :to="url"
12
12
  target="_blank"
13
- class="flex cursor-pointer items-center justify-center gap-1 rounded-md bg-blue-700/10 px-3 py-2 text-blue-700 transition-colors duration-150 hover:bg-blue-700/15 dark:bg-blue-400/10 dark:text-blue-300 dark:hover:bg-blue-400/20"
13
+ class="flex cursor-pointer items-center justify-center gap-1 rounded-sm bg-blue-700/10 px-3 py-2 text-blue-700 transition-colors duration-150 hover:bg-blue-700/15 dark:bg-blue-400/10 dark:text-blue-300 dark:hover:bg-blue-400/20"
14
14
  >
15
- <span class="body-400">{{ t('header.oldVersion') }}</span>
15
+ <span class="text-body-md">{{ t('header.oldVersion') }}</span>
16
16
  <a-icon-arrow-bottom-left-on-square class="rotate-180" />
17
17
  </nuxt-link>
18
18
  </template>
@@ -58,7 +58,7 @@
58
58
  </template>
59
59
 
60
60
  <script setup lang="ts">
61
- import { twMerge } from 'tailwind-merge'
61
+ import { twMerge } from '#adata-ui/utils/twMerge'
62
62
 
63
63
 
64
64
  defineOptions({ name: 'ACheckbox' })
@@ -64,9 +64,9 @@ const gapClass = computed(() => {
64
64
 
65
65
  const textClass = computed(() => {
66
66
  switch (props.size) {
67
- case 'sm': return 'text-xs'
68
- case 'lg': return 'text-base'
69
- default: return 'text-sm'
67
+ case 'sm': return 'text-body-sm'
68
+ case 'lg': return 'text-body-lg'
69
+ default: return 'text-body-md'
70
70
  }
71
71
  })
72
72
 
@@ -82,7 +82,7 @@ const isActive = computed(() => isChecked.value || props.intermediate)
82
82
 
83
83
  const squareClass = computed(() => {
84
84
  const base = [
85
- 'checkbox-square inline-flex shrink-0 items-center justify-center rounded-md border transition-colors duration-150',
85
+ 'checkbox-square inline-flex shrink-0 items-center justify-center rounded-sm border transition-colors duration-150',
86
86
  squareSizeClass.value,
87
87
  ]
88
88
 
@@ -101,7 +101,7 @@ const squareClass = computed(() => {
101
101
 
102
102
  const chipClass = computed(() => {
103
103
  const base = [
104
- 'inline-flex items-center rounded-full border px-3 py-1 text-xs transition-colors duration-150',
104
+ 'inline-flex items-center rounded-full border px-3 py-1 text-body-sm transition-colors duration-150',
105
105
  ]
106
106
 
107
107
  if (isActive.value) {
@@ -303,7 +303,7 @@ function rowDisplay(item: T): unknown {
303
303
  <template>
304
304
  <div
305
305
  ref="wrapperRef"
306
- class="input-v2 relative w-full text-sm"
306
+ class="input-v2 relative w-full text-body-md"
307
307
  v-bind="wrapperAttrs"
308
308
  >
309
309
  <div
@@ -395,7 +395,7 @@ function rowDisplay(item: T): unknown {
395
395
  <div
396
396
  v-if="isDropdownOpen"
397
397
  ref="floatingRef"
398
- class="input-v2__dropdown z-[10000] flex flex-col gap-2 rounded-xl border border-gray-200 bg-white p-1.5 shadow-lg shadow-gray-900/10 dark:border-gray-700 dark:bg-gray-900 dark:shadow-black/30"
398
+ class="input-v2__dropdown z-[10000] flex flex-col gap-2 rounded-lg border border-gray-200 bg-white p-1.5 shadow-lg shadow-gray-900/10 dark:border-gray-700 dark:bg-gray-900 dark:shadow-black/30"
399
399
  :style="{
400
400
  position: strategy,
401
401
  left: x != null ? `${x}px` : '',
@@ -406,7 +406,7 @@ function rowDisplay(item: T): unknown {
406
406
  <li
407
407
  v-for="(item, idx) in autocompleteList"
408
408
  :key="idx"
409
- class="cursor-pointer rounded-lg px-3 py-2 text-sm transition-colors duration-100 hover:bg-gray-50 dark:hover:bg-gray-800/60"
409
+ class="cursor-pointer rounded-md px-3 py-2 text-body-md transition-colors duration-100 hover:bg-gray-50 dark:hover:bg-gray-800/60"
410
410
  :class="{ 'input-v2__option--active': currentItemIndex === idx }"
411
411
  @mousedown.prevent="onSelectOption(item)"
412
412
  @touchend.prevent="onTouchEndOption(item)"
@@ -430,7 +430,7 @@ function rowDisplay(item: T): unknown {
430
430
  leave-from-class="input-v2__error-leave-from"
431
431
  leave-to-class="input-v2__error-leave-to"
432
432
  >
433
- <p v-if="hasError" class="mt-1 flex flex-col text-xs text-red-500 dark:text-red-400">
433
+ <p v-if="hasError" class="mt-1 flex flex-col text-body-sm text-red-500 dark:text-red-400">
434
434
  <span v-for="(err, idx) in errorMessages" :key="idx">{{ err }}</span>
435
435
  </p>
436
436
  </transition>
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
- import { twJoin, twMerge } from 'tailwind-merge'
3
2
  import ACalendar from "#adata-ui/components/elements/calendar/ACalendar.vue";
3
+ import { twJoin, twMerge } from '#adata-ui/utils/twMerge'
4
4
 
5
5
 
6
6
  interface Props {
@@ -48,7 +48,7 @@ const uiConfig = {
48
48
  "input-wrapper": {
49
49
  base: 'relative inline-block w-full text-sm sm:min-w-full'
50
50
  },
51
- base: 'w-full border-0 rounded-md text-deepblue-900 dark:text-gray-200 hover:outline hover:outline-1 hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500 mt-0',
51
+ base: 'w-full border-0 rounded-sm text-deepblue-900 dark:text-gray-200 hover:outline hover:outline-1 hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500 mt-0',
52
52
  size: {
53
53
  sm: 'h-8 px-4 py-1.5 sm',
54
54
  md: 'h-10 px-4 pb-1.5 pt-[18px] md'
@@ -1,13 +1,13 @@
1
1
  <script lang="ts" setup>
2
2
  import AInputStandard from "#adata-ui/components/forms/input/standard/AInputStandard.vue";
3
3
 
4
-
5
4
  interface Props {
6
5
  disabled?: boolean
7
6
  label?: string
8
7
  size?: 'sm' | 'md'
9
8
  error?: string
10
9
  required?: boolean
10
+ iconEyeTestId?: string
11
11
  }
12
12
 
13
13
  const props = withDefaults(defineProps<Props>(), {
@@ -19,19 +19,25 @@ const props = withDefaults(defineProps<Props>(), {
19
19
  })
20
20
 
21
21
  const isOpened = ref<boolean>(false)
22
+
23
+ const inputProps = computed(() => {
24
+ const { iconEyeTestId, ...rest } = props
25
+ return rest
26
+ })
22
27
  </script>
23
28
 
24
29
  <template>
25
30
  <a-input-standard
26
31
  v-bind="$attrs"
27
32
  :type="isOpened ? 'text' : 'password'"
28
- v-bind.prop="props"
33
+ v-bind.prop="inputProps"
29
34
  >
30
35
  <template #endButton>
31
36
  <button
32
37
  class="absolute top-1/2 right-4 text-gray-500 fill-gray-500 pointer-events-click text-2xl transform translate-y-[-50%] hover:opacity-80 disabled:pointer-events-none"
33
38
  :disabled="disabled"
34
39
  type="button"
40
+ :data-test-id="iconEyeTestId"
35
41
  @click="isOpened = !isOpened"
36
42
  >
37
43
  <a-icon-eye-closed
@@ -1,6 +1,6 @@
1
1
  <script generic="T, K extends keyof T" lang="ts" setup>
2
- import {twMerge, twJoin} from 'tailwind-merge'
3
2
  import AAlert from '#adata-ui/components/elements/alert/AAlert.vue'
3
+ import {twJoin, twMerge} from '#adata-ui/utils/twMerge'
4
4
 
5
5
  interface Props {
6
6
  disabled?: boolean
@@ -44,11 +44,11 @@ const {t} = useI18n()
44
44
  const uiConfig = {
45
45
  wrapper: 'transition duration-500 w-full',
46
46
  'input-wrapper': {
47
- base: 'relative inline-block w-full text-sm sm:min-w-full',
47
+ base: 'relative inline-block w-full text-body-md sm:min-w-full',
48
48
  readonly: 'pointer-events-none user-select-none',
49
49
  disabled: 'pointer-events-none user-select-none opacity-40'
50
50
  },
51
- base: 'w-full border-0 rounded-md text-deepblue-900 dark:text-gray-200 hover:outline outline-offset-[-1px] hover:outline-1 hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500 mt-0',
51
+ base: 'w-full border-0 rounded-sm text-deepblue-900 dark:text-gray-200 hover:outline outline-offset-[-1px] hover:outline-1 hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500 mt-0',
52
52
  size: {
53
53
  sm: 'h-8 px-4 py-1.5 sm',
54
54
  md: 'h-10 px-4 pb-1.5 pt-[18px] md',
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
- import { twMerge, twJoin } from 'tailwind-merge'
3
2
  import AAlert from '#adata-ui/components/elements/alert/AAlert.vue'
3
+ import { twJoin, twMerge } from '#adata-ui/utils/twMerge'
4
4
 
5
5
  interface Props {
6
6
  disabled?: boolean
@@ -38,7 +38,7 @@ const uiConfig = {
38
38
  disabled: 'pointer-events-none user-select-none opacity-40',
39
39
  color: 'bg-deepblue-900/5 dark:bg-gray-200/5'
40
40
  },
41
- base: 'w-full border-0 rounded-md text-deepblue-900 dark:text-gray-200 outline-none mt-0',
41
+ base: 'w-full border-0 rounded-sm text-deepblue-900 dark:text-gray-200 outline-none mt-0',
42
42
  size: {
43
43
  sm: 'h-8 px-4 py-1.5 sm',
44
44
  md: 'h-10 px-4 pb-1.5 pt-[8px] md'