adata-ui 2.1.40-beta.2 → 2.1.40-beta.4

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.
@@ -1,13 +1,18 @@
1
1
  <script setup lang="ts">
2
2
  import * as z from 'zod'
3
3
  import { useUIValidation } from '#adata-ui/composables/useUIValidation'
4
+ import AButtonV2 from '#adata-ui/components/elements/button/AButtonV2.vue'
4
5
 
5
- const props = defineProps<{
6
+ const props = withDefaults(defineProps<{
6
7
  isError?: boolean,
7
8
  errorText?: string
8
- }>()
9
+ }>(), {
10
+ isError: false,
11
+ errorText: '',
12
+ })
9
13
 
10
14
  const emit = defineEmits<{
15
+ (e: 'onCancel'): void
11
16
  (e: 'onSubmit'): void
12
17
  }>()
13
18
 
@@ -30,6 +35,12 @@ const { validation, getError } = useUIValidation(
30
35
  submitted,
31
36
  )
32
37
 
38
+ function onCancel() {
39
+ submitted.value = false
40
+ note.value = ''
41
+ emit('onCancel')
42
+ }
43
+
33
44
  async function onSubmit() {
34
45
  submitted.value = true
35
46
  if (validation.value) return
@@ -48,31 +59,41 @@ defineExpose({
48
59
  </p>
49
60
  <a-textarea
50
61
  v-model="note"
62
+ class="min-h-[120px]"
63
+ color-classes="bg-deepblue-900/5 outline outline-1 outline-gray-200 dark:outline-gray-600 dark:bg-gray-200/5 !rounded-[10px]"
64
+ size="sm"
65
+ resizeable="y"
51
66
  :label="t('forms.leaveNote.placeholder')"
52
67
  :error="getError('note')"
53
- class="mb-2 min-h-[120px]"
54
- resizeable="none"
55
- clearable
56
- required
57
68
  >
58
69
  <template #alert>
59
70
  <a-alert
60
- v-if="isError || getError('note')"
71
+ v-if="isError"
61
72
  color="red"
62
73
  class="mt-1"
63
74
  >
64
- {{ getError('note') || (isError ? (!!errorText ? errorText : t('forms.leaveNote.limit')) : '') }}
75
+ {{ isError ? (!!errorText ? errorText : t('forms.leaveNote.limit')) : '' }}
65
76
  </a-alert>
66
77
  </template>
67
78
  </a-textarea>
68
- <a-button
69
- :disabled="!note.trim() && isLoading"
70
- class="w-full sm:w-auto"
71
- size="lg"
72
- :loading="isLoading"
73
- @click="onSubmit"
74
- >
75
- {{ t('actions.send') }}
76
- </a-button>
79
+ <div class="mt-2 flex w-full justify-end items-center gap-2 md:gap-[10px]">
80
+ <a-button-v2
81
+ class="w-full sm:w-auto"
82
+ view="outline"
83
+ size="md"
84
+ @click="onCancel"
85
+ >
86
+ {{ t('actions.cancel') }}
87
+ </a-button-v2>
88
+ <a-button-v2
89
+ :disabled="!note.trim() && isLoading"
90
+ class="w-full sm:w-auto"
91
+ size="md"
92
+ :loading="isLoading"
93
+ @click="onSubmit"
94
+ >
95
+ {{ t('actions.send') }}
96
+ </a-button-v2>
97
+ </div>
77
98
  </div>
78
99
  </template>
@@ -18,6 +18,8 @@ interface Props {
18
18
  fontSize?: number;
19
19
  error?: string | boolean;
20
20
  errorSize?: 'sm' | 'lg';
21
+ hideValue?: boolean;
22
+ hideEmptyStars?: boolean;
21
23
  }
22
24
 
23
25
  const props = withDefaults(defineProps<Props>(), {
@@ -32,7 +34,9 @@ const props = withDefaults(defineProps<Props>(), {
32
34
  ratingPlacement: 'left',
33
35
  fontSize: 14,
34
36
  error: false,
35
- errorSize: 'lg'
37
+ errorSize: 'lg',
38
+ hideValue: false,
39
+ hideEmptyStars: false
36
40
  })
37
41
 
38
42
  const fillLevel = ref<number[]>([])
@@ -51,6 +55,10 @@ const roundedRating = computed(() => {
51
55
  })
52
56
  const shouldRound = computed(() => ratingSelected.value || props.roundStartRating)
53
57
 
58
+ const visibleStarsCount = computed(() => {
59
+ if (!props.hideEmptyStars) return props.max
60
+ return Math.min(props.max, Math.max(1, Math.ceil(currentRating.value)))
61
+ })
54
62
 
55
63
  watch(modelValue, (e)=>{
56
64
  currentRating.value = e
@@ -105,7 +113,7 @@ createStars(shouldRound.value)
105
113
  <div>
106
114
  <div class="w-full flex items-center gap-2">
107
115
  <span
108
- v-if="ratingPlacement === 'left'"
116
+ v-if="ratingPlacement === 'left' && !hideValue"
109
117
  class="text-gray-600 dark:text-gray-300 mt-px"
110
118
  :style="{fontSize: `${fontSize}px`}"
111
119
  >
@@ -118,7 +126,7 @@ createStars(shouldRound.value)
118
126
  @mouseleave="resetRating"
119
127
  >
120
128
  <star
121
- v-for="n in max"
129
+ v-for="n in visibleStarsCount"
122
130
  :key="n"
123
131
  :fill="fillLevel[n-1]"
124
132
  :size="starSize"
@@ -127,7 +135,7 @@ createStars(shouldRound.value)
127
135
  />
128
136
  </div>
129
137
  <span
130
- v-if="ratingPlacement === 'right'"
138
+ v-if="ratingPlacement === 'right' && !hideValue"
131
139
  class="text-sm text-gray-600 dark:text-gray-300 mt-px"
132
140
  >
133
141
  {{ modelValue }}
@@ -109,7 +109,7 @@ onMounted(() => {
109
109
  <system-notification />
110
110
  <header
111
111
  ref="headerRef"
112
- class="relative h-16 border-b border-deepblue-900/10 bg-gray-50/30 backdrop-blur-lg dark:border-gray-200/10 dark:bg-gray-900/30"
112
+ class="relative h-16 border-b border-deepblue-900/10 bg-gray-50/20 backdrop-blur-lg dark:border-gray-200/10 dark:bg-gray-900/30"
113
113
  >
114
114
  <div class="a-container mobile-padding flex h-full items-center justify-between gap-2">
115
115
  <!-- Desktop hidden -->
@@ -135,18 +135,18 @@ onMounted(() => {
135
135
  </div>
136
136
  <div
137
137
  v-else-if="mobileHeaderType === 'search'"
138
- class="flex w-full items-center gap-2 bg-white dark:bg-gray-900 lg:hidden"
138
+ class="flex w-full items-center gap-2 lg:hidden"
139
139
  >
140
140
  <logo
141
141
  class="dark:text-gray-200"
142
142
  @click="goToAnotherModule"
143
143
  />
144
144
  <button
145
- class="flex w-full items-center gap-2 rounded bg-gray-50 px-4 py-1.5 dark:bg-gray-800 dark:text-gray-500"
145
+ class="flex w-full items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-1.5 shadow-sm dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400"
146
146
  @click="$emit('search')"
147
147
  >
148
- <a-icon-search />
149
- <span class="body-400">Найти</span>
148
+ <a-icon-search class="text-gray-400 dark:text-gray-500" />
149
+ <span class="body-400 text-gray-500 dark:text-gray-400">Найти</span>
150
150
  </button>
151
151
  </div>
152
152
  </section>
package/lang/en.ts CHANGED
@@ -470,7 +470,7 @@ const EnLocale: RuLocale = {
470
470
  },
471
471
  leaveNote: {
472
472
  title: 'Leave a note',
473
- placeholder: 'Write a note...',
473
+ placeholder: 'Your note',
474
474
  limit: 'The limit on notes for this company by you has expired',
475
475
  errors: {
476
476
  required: 'This field is required',
package/lang/kk.ts CHANGED
@@ -471,7 +471,7 @@ const KkLocale: RuLocale = {
471
471
  },
472
472
  leaveNote: {
473
473
  title: 'Ескертпе қалдыру',
474
- placeholder: 'Ескертпе жазу...',
474
+ placeholder: 'Сіздің жазбаңыз',
475
475
  limit: 'Сіз осы компанияға арналған жазбалар лимитін тауысып қойдыңыз',
476
476
  errors: {
477
477
  required: 'Бұл өріс міндетті',
package/lang/ru.ts CHANGED
@@ -471,7 +471,7 @@ const RuLocale = {
471
471
  },
472
472
  leaveNote: {
473
473
  title: 'Оставить заметку',
474
- placeholder: 'Написать заметку...',
474
+ placeholder: 'Ваша заметка',
475
475
  limit: 'Лимит на заметки для этой компании, установленный вами, истек',
476
476
  errors: {
477
477
  required: 'Обязательное поле',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adata-ui",
3
3
  "type": "module",
4
- "version": "2.1.40-beta.2",
4
+ "version": "2.1.40-beta.4",
5
5
  "main": "./nuxt.config.ts",
6
6
  "scripts": {
7
7
  "dev": "nuxi dev .playground",