@usssa/component-library 1.0.0-alpha.2 → 1.0.0-alpha.200

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/README.md +8 -5
  2. package/package.json +24 -8
  3. package/src/assets/logo.svg +19 -0
  4. package/src/assets/no-result.svg +25 -0
  5. package/src/assets/quasar-logo-vertical.svg +15 -0
  6. package/src/assets/upload-illustration.svg +48 -0
  7. package/src/components/ComponentLink.vue +26 -0
  8. package/src/components/core/UAvatar.vue +210 -0
  9. package/src/components/core/UAvatarGroup.vue +129 -0
  10. package/src/components/core/UBadgeStd.vue +96 -0
  11. package/src/components/core/UBannerStd.vue +184 -0
  12. package/src/components/core/UBreadCrumbs.vue +171 -0
  13. package/src/components/core/UBtnIcon.vue +160 -0
  14. package/src/components/core/UBtnStd.vue +134 -0
  15. package/src/components/core/UBtnToggle.vue +73 -0
  16. package/src/components/core/UCheckboxStd.vue +101 -0
  17. package/src/components/core/UChip.vue +274 -0
  18. package/src/components/core/UDate.vue +581 -0
  19. package/src/components/core/UDialogStd.vue +614 -0
  20. package/src/components/core/UDrawer/UDrawer.vue +471 -0
  21. package/src/components/core/UDrawer/UDrawerMenuItem.vue +124 -0
  22. package/src/components/core/UExpansionStd.vue +266 -0
  23. package/src/components/core/UInnerLoader.vue +69 -0
  24. package/src/components/core/UInputAddressLookup.vue +484 -0
  25. package/src/components/core/UInputPhoneStd.vue +303 -0
  26. package/src/components/core/UInputTextStd.vue +308 -0
  27. package/src/components/core/UInputTypeahead.vue +44 -0
  28. package/src/components/core/UInputTypeaheadAdvanceSearch.vue +134 -0
  29. package/src/components/core/UMenuButtonStd.vue +280 -0
  30. package/src/components/core/UMenuDropdown.vue +80 -0
  31. package/src/components/core/UMenuDropdownAdvancedSearch.vue +306 -0
  32. package/src/components/core/UMenuItem.vue +183 -0
  33. package/src/components/core/UMenuSearch.vue +73 -0
  34. package/src/components/core/UModal.vue +660 -0
  35. package/src/components/core/UMultiSelectStd.vue +699 -0
  36. package/src/components/core/UPagination.vue +156 -0
  37. package/src/components/core/URadioBtn.vue +139 -0
  38. package/src/components/core/URadioStd.vue +71 -0
  39. package/src/components/core/USelectStd.vue +564 -0
  40. package/src/components/core/USheet.vue +349 -0
  41. package/src/components/core/UStepper/UProgress.vue +157 -0
  42. package/src/components/core/UStepper/UStepper.vue +211 -0
  43. package/src/components/core/UTabBtnStd.vue +181 -0
  44. package/src/components/core/UTable/UTable.vue +1984 -0
  45. package/src/components/core/UTable/UTd.vue +63 -0
  46. package/src/components/core/UTable/UTh.vue +48 -0
  47. package/src/components/core/UTable/UTr.vue +20 -0
  48. package/src/components/core/UTableStd.vue +1449 -0
  49. package/src/components/core/UTabsStd.vue +140 -0
  50. package/src/components/core/UToggleStd.vue +164 -0
  51. package/src/components/core/UToolbar/UCustomMenuIcon.vue +58 -0
  52. package/src/components/core/UToolbar/UToolbar.vue +226 -0
  53. package/src/components/core/UTooltip.vue +78 -0
  54. package/src/components/core/UTypeahead.vue +890 -0
  55. package/src/components/core/UUploader.vue +644 -0
  56. package/src/components/index.js +91 -0
  57. package/src/composables/useNotify.js +79 -0
  58. package/src/composables/useOverlayLoader.js +23 -0
  59. package/src/composables/useScreenType.js +30 -0
  60. package/src/css/app.sass +168 -0
  61. package/src/css/colors.sass +103 -0
  62. package/src/css/media.sass +1 -0
  63. package/src/css/quasar.variables.sass +150 -0
  64. package/src/css/typography.sass +0 -0
  65. package/src/css/vars/colors.variables.sass +113 -0
  66. package/src/utils/data.ts +170 -0
  67. package/dist/spa/assets/Avatar.45667392.js +0 -9
  68. package/dist/spa/assets/AvatarGroup.99557443.js +0 -9
  69. package/dist/spa/assets/AvatarGroup.bb4cd03a.css +0 -1
  70. package/dist/spa/assets/BadgeStd.ee4129c5.js +0 -6
  71. package/dist/spa/assets/BannerPage.6c6a98c4.js +0 -10
  72. package/dist/spa/assets/BannerPage.d195fcac.css +0 -1
  73. package/dist/spa/assets/BtnIcon.89e50d2e.css +0 -1
  74. package/dist/spa/assets/BtnIcon.934f8c5b.js +0 -10
  75. package/dist/spa/assets/BtnStd.95fc4510.js +0 -11
  76. package/dist/spa/assets/CheckBox.3c204a4b.css +0 -1
  77. package/dist/spa/assets/CheckBox.fbc0bd1a.js +0 -7
  78. package/dist/spa/assets/Chip.49ffc857.js +0 -11
  79. package/dist/spa/assets/Chip.74acaa33.css +0 -1
  80. package/dist/spa/assets/ComponentBase.1ae19b7e.js +0 -1
  81. package/dist/spa/assets/ErrorNotFound.6cccfaee.js +0 -1
  82. package/dist/spa/assets/IndexPage.17d09b76.js +0 -1
  83. package/dist/spa/assets/InputText.19c0d7d1.css +0 -1
  84. package/dist/spa/assets/InputText.3fcd97a4.js +0 -20
  85. package/dist/spa/assets/KFOkCnqEu92Fr1MmgVxIIzQ.34e9582c.woff +0 -0
  86. package/dist/spa/assets/KFOlCnqEu92Fr1MmEU9fBBc-.9ce7f3ac.woff +0 -0
  87. package/dist/spa/assets/KFOlCnqEu92Fr1MmSU5fBBc-.bf14c7d7.woff +0 -0
  88. package/dist/spa/assets/KFOlCnqEu92Fr1MmWUlfBBc-.e0fd57c0.woff +0 -0
  89. package/dist/spa/assets/KFOlCnqEu92Fr1MmYUtfBBc-.f6537e32.woff +0 -0
  90. package/dist/spa/assets/KFOmCnqEu92Fr1Mu4mxM.f2abf7fb.woff +0 -0
  91. package/dist/spa/assets/MainLayout.912bb0f8.js +0 -1
  92. package/dist/spa/assets/MultiSelectStd.644b108c.js +0 -17
  93. package/dist/spa/assets/MultiSelectStd.c7af49eb.css +0 -1
  94. package/dist/spa/assets/QAvatar.5940a79e.js +0 -1
  95. package/dist/spa/assets/QCheckbox.48b43f7d.js +0 -1
  96. package/dist/spa/assets/QPage.ca395ec4.js +0 -1
  97. package/dist/spa/assets/QRadio.0a7f5e2c.js +0 -1
  98. package/dist/spa/assets/QResizeObserver.30c3566c.js +0 -1
  99. package/dist/spa/assets/QSelect.a40eb786.js +0 -1
  100. package/dist/spa/assets/QTabs.72f2507e.js +0 -1
  101. package/dist/spa/assets/QToggle.376c48be.js +0 -1
  102. package/dist/spa/assets/QTooltip.5aa8e325.js +0 -1
  103. package/dist/spa/assets/Radio.0ac35288.js +0 -7
  104. package/dist/spa/assets/Radio.aca54a89.css +0 -1
  105. package/dist/spa/assets/SelectStd.5c6891db.css +0 -1
  106. package/dist/spa/assets/SelectStd.daf1def9.js +0 -16
  107. package/dist/spa/assets/TabButtonPage.20e871dd.js +0 -7
  108. package/dist/spa/assets/TabButtonPage.36ce9f9c.css +0 -1
  109. package/dist/spa/assets/TabsPage.9b94ff39.css +0 -1
  110. package/dist/spa/assets/TabsPage.b92cccee.js +0 -9
  111. package/dist/spa/assets/TogglePage.8129b631.css +0 -1
  112. package/dist/spa/assets/TogglePage.ba6e325c.js +0 -9
  113. package/dist/spa/assets/UAvatar.dda7e478.js +0 -1
  114. package/dist/spa/assets/UAvatar.ea8daa38.css +0 -1
  115. package/dist/spa/assets/UBadgeStd.3965db9a.css +0 -1
  116. package/dist/spa/assets/UBadgeStd.e165ee05.js +0 -1
  117. package/dist/spa/assets/UBtnStd.979ec4e8.js +0 -1
  118. package/dist/spa/assets/UBtnStd.bdd4f5e5.css +0 -1
  119. package/dist/spa/assets/UTooltip.d2e04d0c.js +0 -1
  120. package/dist/spa/assets/UTooltip.efa029a7.css +0 -1
  121. package/dist/spa/assets/dom.e9d4ad51.js +0 -1
  122. package/dist/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.fd84f88b.woff +0 -0
  123. package/dist/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.4a4dbc62.woff2 +0 -0
  124. package/dist/spa/assets/format.41663636.js +0 -1
  125. package/dist/spa/assets/index.43c62a18.js +0 -21
  126. package/dist/spa/assets/index.4fbd73cf.css +0 -5
  127. package/dist/spa/assets/option-sizes.10cc02d3.js +0 -1
  128. package/dist/spa/assets/render.e67ff27a.js +0 -1
  129. package/dist/spa/assets/tooltip.7c0d0774.js +0 -8
  130. package/dist/spa/assets/touch.9135741d.js +0 -1
  131. package/dist/spa/assets/use-checkbox.44a623c0.js +0 -1
  132. package/dist/spa/favicon.ico +0 -0
  133. package/dist/spa/icons/caret-down.svg +0 -5
  134. package/dist/spa/icons/circle-xmark.svg +0 -6
  135. package/dist/spa/icons/favicon-128x128.png +0 -0
  136. package/dist/spa/icons/favicon-16x16.png +0 -0
  137. package/dist/spa/icons/favicon-32x32.png +0 -0
  138. package/dist/spa/icons/favicon-96x96.png +0 -0
  139. package/dist/spa/index.html +0 -3
@@ -0,0 +1,303 @@
1
+ <script setup>
2
+ import UInputTextStd from './UInputTextStd.vue'
3
+
4
+ const emit = defineEmits(['update-country'])
5
+ const modelValue = defineModel()
6
+ const props = defineProps({
7
+ ariaLabel: {
8
+ type: String,
9
+ required: true,
10
+ },
11
+ borderless: {
12
+ type: Boolean,
13
+ default: false,
14
+ },
15
+ dataTestId: {
16
+ type: String,
17
+ default: 'input-phone-std',
18
+ },
19
+ disable: {
20
+ type: Boolean,
21
+ default: false,
22
+ },
23
+ error: {
24
+ type: Boolean,
25
+ },
26
+ errorMessage: {
27
+ type: String,
28
+ },
29
+ hintIcon: {
30
+ type: String,
31
+ default: 'fa-kit-duotone fa-circle-info',
32
+ },
33
+ hintText: {
34
+ type: String,
35
+ },
36
+ isRequired: {
37
+ type: Boolean,
38
+ default: false,
39
+ },
40
+ label: {
41
+ type: String,
42
+ },
43
+ mask: {
44
+ type: String,
45
+ default: '##########',
46
+ },
47
+ options: {
48
+ type: Array,
49
+ },
50
+ outlined: {
51
+ type: Boolean,
52
+ default: true,
53
+ },
54
+ placeholder: {
55
+ type: String,
56
+ default: 'Input Text',
57
+ },
58
+ readonly: {
59
+ type: Boolean,
60
+ default: false,
61
+ },
62
+ rightIcon: {
63
+ type: String,
64
+ },
65
+ selectedCountry: {
66
+ type: Object,
67
+ },
68
+ size: {
69
+ type: String,
70
+ default: 'md',
71
+ validator: (val) => ['sm', 'md', 'lg'].includes(val),
72
+ },
73
+ toolTipText: {
74
+ type: String,
75
+ },
76
+ validationRules: {
77
+ type: Array,
78
+ default: () => [(val) => val.length === 10],
79
+ },
80
+ })
81
+
82
+ const selectCountry = (country) => {
83
+ emit('update-country', country)
84
+ }
85
+ const toLowerCase = (str) => str?.toLowerCase()
86
+ </script>
87
+
88
+ <template>
89
+ <UInputTextStd
90
+ v-model="modelValue"
91
+ class="phone-input"
92
+ :borderless="borderless"
93
+ :dataTestId="'input-text-std'"
94
+ :disable="disable"
95
+ :error="error"
96
+ :error-message="errorMessage"
97
+ :hintIcon="hintIcon"
98
+ :hintText="hintText"
99
+ :isRequired="isRequired"
100
+ :label="label"
101
+ inputType="tel"
102
+ leftIcon="true"
103
+ :mask="mask"
104
+ :outlined="outlined"
105
+ :placeholder="placeholder"
106
+ :readonly="readonly"
107
+ :rightIcon="rightIcon"
108
+ :size="size"
109
+ :toolTipText="toolTipText"
110
+ :validationRules="validationRules"
111
+ >
112
+ <template v-slot:prepend>
113
+ <q-btn-dropdown
114
+ :class="['u-phone-dropdown', 'text-body-sm', 'btn-field-' + size]"
115
+ content-class="u-dropdown-list"
116
+ :aria-label="ariaLabel"
117
+ :dataTestId="dataTestId"
118
+ :disable="disable"
119
+ flat
120
+ menu-anchor="top right"
121
+ :menu-offset="[30, 5]"
122
+ menu-self="bottom middle"
123
+ rounded
124
+ >
125
+ <template #label>
126
+ <q-icon
127
+ :class="`fi fi-${toLowerCase(
128
+ selectedCountry?.flag
129
+ )} flag-icon q-mr-xs`"
130
+ :aria-label="selectedCountry?.name"
131
+ left
132
+ />
133
+ <label class="selected-code">{{ selectedCountry?.code }}</label>
134
+ </template>
135
+
136
+ <q-list class="u-list">
137
+ <q-item
138
+ v-close-popup
139
+ v-for="country in options"
140
+ v-ripple
141
+ class="q-my-xxs"
142
+ clickable
143
+ :key="country?.code"
144
+ @click="selectCountry(country)"
145
+ >
146
+ <q-item-section class="flag-section">
147
+ <q-icon
148
+ :class="`fi fi-${toLowerCase(country?.flag)} flag-icon q-mr-xs`"
149
+ :aria-label="country?.name"
150
+ left
151
+ size="1.25rem"
152
+ />
153
+ </q-item-section>
154
+ <q-item-section>
155
+ <q-item-label class="text-body-sm">
156
+ {{ country?.name }}
157
+ </q-item-label>
158
+ </q-item-section>
159
+ </q-item>
160
+ </q-list>
161
+ </q-btn-dropdown>
162
+ </template>
163
+ </UInputTextStd>
164
+ </template>
165
+
166
+ <style lang="sass">
167
+ .selected-code
168
+ width: 1.5rem
169
+ color: $dark
170
+ .u-dropdown-list
171
+ .q-item__section--main
172
+ margin-left: 0px
173
+
174
+ .flag-icon
175
+ width: 1rem
176
+ height: 0.65rem
177
+ .phone-input
178
+ .q-field__control
179
+ &:hover
180
+ .q-btn-dropdown.u-phone-dropdown
181
+ border-right: 1.5px solid $primary
182
+ &.q-field--outlined .q-field__control:before
183
+ transition: none
184
+ .u-phone-dropdown
185
+ background: #6f7d9812
186
+
187
+ &.q-field--error .q-field__control
188
+ &:hover
189
+ .u-phone-dropdown
190
+ border-right: 2px solid $accent
191
+ &.q-field--outlined.q-field--readonly .q-field__control:focus-within::before
192
+ border: 1.5px solid $primary
193
+
194
+ &.q-field--error
195
+ &:hover
196
+ .u-phone-dropdown
197
+ border-right: 2px solid $accent
198
+ .u-phone-dropdown
199
+ border-right: 2px solid $accent
200
+
201
+ &.q-field--borderless
202
+ .q-field__control.relative-position.row.no-wrap.text-negative:focus-within
203
+ .q-btn-dropdown.u-phone-dropdown
204
+ border-right: 2px solid $accent-transparent
205
+ &.field-lg
206
+ &.q-field--outlined .q-field__control
207
+ padding: 0 $sm 0 0
208
+
209
+ .u-list
210
+ width: 15rem
211
+ padding: $xxs
212
+ .q-item
213
+ height: $md
214
+ padding: 0px $xs
215
+ .q-item__section--main
216
+ flex: none
217
+ .u-phone-dropdown
218
+ border-radius: $xs 0px 0px $xs
219
+ border-right: 1.5px solid $neutral-4
220
+ &:hover::before
221
+ border: 0px solid $primary
222
+
223
+ &.q-btn
224
+ height: 2rem
225
+ min-height: 2rem
226
+ padding: 0px $xs
227
+
228
+ &.btn-field-sm
229
+ height: $md
230
+ &.btn-field-md
231
+ height: $lg
232
+ &.btn-field-lg
233
+ height: $xl
234
+
235
+ .q-btn-dropdown__arrow
236
+ width: 1rem
237
+ height: 1rem
238
+
239
+ .phone-input
240
+ .q-field__inner
241
+ border-radius: $xs
242
+ &.q-field--borderless
243
+ .q-field__control
244
+ padding: 0 $xs 0 0
245
+ background: $neutral-1
246
+ border-radius: $xs
247
+ &:hover
248
+ box-shadow : 0px 0px 0px 2px $primary-transparent
249
+ .q-btn-dropdown.u-phone-dropdown
250
+ border-right: 2px solid $neutral-4
251
+ .q-btn-dropdown.u-phone-dropdown
252
+ border-right: none
253
+ &:focus-within
254
+ .q-btn-dropdown.u-phone-dropdown
255
+ border-right: 2px solid $neutral-4
256
+ .q-btn-dropdown.u-phone-dropdown
257
+ border-right: 2px solid transparent
258
+
259
+ .q-field--standout .q-field__control
260
+ border-radius: $xs
261
+
262
+ .q-field__append.q-field__marginal.row.no-wrap.items-center.q-anchor--skip
263
+ display: none
264
+
265
+ .q-field__before,
266
+ .q-field__prepend
267
+ padding: 0 $xs
268
+ padding-left: 0
269
+
270
+ .q-field__after,
271
+ .q-field__append
272
+ padding-left: 0px
273
+
274
+ .q-icon
275
+ &.slot-icon-size-sm
276
+ font-size: $sm
277
+ &.slot-icon-size-md
278
+ font-size: $ba
279
+ &.slot-icon-size-lg
280
+ font-size: $ba
281
+
282
+ &.q-field--auto-height .q-field__control,
283
+ &.q-field--auto-height .q-field__native
284
+ min-height: 2rem
285
+
286
+ &.q-field--outlined .q-field__control
287
+ border-radius: $xs
288
+ padding: 0 $xs 0 0
289
+ background: $neutral-1
290
+ &::before
291
+ border:1.5px solid $neutral-4
292
+ &:hover::before
293
+ border:1.5px solid $primary
294
+
295
+ .q-field__control.relative-position.row.no-wrap.text-negative:focus-within
296
+ box-shadow: 0px 0px 0px 2px $accent-transparent
297
+ .q-btn-dropdown.u-phone-dropdown
298
+ border-right: 2px solid $accent
299
+ .q-field__control:focus-within
300
+ box-shadow : 0px 0px 0px 2px $primary-transparent
301
+ .q-btn-dropdown.u-phone-dropdown
302
+ border-right: 2px solid $primary
303
+ </style>
@@ -0,0 +1,308 @@
1
+ <script setup>
2
+ import { computed } from 'vue'
3
+ import UTooltip from './UTooltip.vue'
4
+
5
+ const emit = defineEmits(['onRightIconClick'])
6
+
7
+ const modelValue = defineModel()
8
+ defineOptions({
9
+ inheritAttrs: false,
10
+ })
11
+ const props = defineProps({
12
+ borderless: {
13
+ type: Boolean,
14
+ default: false,
15
+ },
16
+ dataTestId: {
17
+ type: String,
18
+ default: 'input-text-std',
19
+ },
20
+ disable: {
21
+ type: Boolean,
22
+ default: false,
23
+ },
24
+ error: {
25
+ type: Boolean,
26
+ },
27
+ errorMessage: {
28
+ type: String,
29
+ },
30
+ hintIcon: {
31
+ type: String,
32
+ },
33
+ hintText: {
34
+ type: String,
35
+ },
36
+ inputType: {
37
+ type: String,
38
+ default: 'text',
39
+ },
40
+ isRequired: {
41
+ type: Boolean,
42
+ default: false,
43
+ },
44
+ label: {
45
+ type: String,
46
+ },
47
+ leftBorderRadius: {
48
+ type: Boolean,
49
+ default: false,
50
+ },
51
+ leftIcon: {
52
+ type: String,
53
+ },
54
+ loading: {
55
+ type: Boolean,
56
+ },
57
+ mask: { default: '' },
58
+ outlined: {
59
+ type: Boolean,
60
+ default: true,
61
+ },
62
+ parentClass: {
63
+ type: String,
64
+ },
65
+ placeholder: {
66
+ type: String,
67
+ },
68
+ readonly: {
69
+ type: Boolean,
70
+ default: false,
71
+ },
72
+ rightIcon: {
73
+ type: String,
74
+ },
75
+ rightIconAriaLabel: {
76
+ type: String,
77
+ },
78
+ size: {
79
+ type: String,
80
+ default: 'md',
81
+ validator: (val) => ['sm', 'md', 'lg'].includes(val),
82
+ },
83
+ toolTipText: {
84
+ type: String,
85
+ },
86
+ validationRules: {
87
+ type: Array,
88
+ },
89
+ })
90
+
91
+ const leftBorderRadius = computed(() => {
92
+ if (props.leftBorderRadius === true) {
93
+ return 'leftBorderRadius'
94
+ }
95
+ return ''
96
+ })
97
+
98
+ const handleRightIconClick = () => {
99
+ emit('onRightIconClick')
100
+ }
101
+ </script>
102
+
103
+ <template>
104
+ <div :class="`q-gutter-xs ${parentClass}`" :dataTestId="dataTestId">
105
+ <label
106
+ v-if="label"
107
+ class="row items-center q-mb-xxs"
108
+ for="input"
109
+ role="label"
110
+ >
111
+ <div class="u-input-label text-body-sm">
112
+ <span>{{ label }}</span>
113
+ <span v-if="isRequired" class="text-red-5 text-body-sm q-mx-xs">
114
+ {{ '*' }}
115
+ </span>
116
+ </div>
117
+ <q-icon
118
+ v-if="toolTipText"
119
+ class="fa-kit-duotone fa-circle-info cursor-pointer"
120
+ :aria-label="toolTipText"
121
+ color="neutral-9"
122
+ size="1rem"
123
+ >
124
+ <UTooltip
125
+ anchor="top middle"
126
+ :description="toolTipText"
127
+ :offset="[0, 0]"
128
+ self="bottom middle"
129
+ />
130
+ </q-icon>
131
+ </label>
132
+ <q-input
133
+ v-bind="$attrs"
134
+ v-model="modelValue"
135
+ :class="`u-input field-${size} ${leftBorderRadius}`"
136
+ :aria-describedby="hintText"
137
+ :borderless="borderless"
138
+ :bottom-slots="!!hintText"
139
+ :disable="disable"
140
+ :error="error"
141
+ hide-bottom-space
142
+ id="input"
143
+ :mask="mask"
144
+ name="input"
145
+ :outlined="outlined"
146
+ :placeholder="placeholder"
147
+ :readonly="readonly"
148
+ :rules="validationRules"
149
+ :standout="!outlined"
150
+ :type="inputType"
151
+ >
152
+ <!--Added below line to resolve "Missing form label" accessibility issue -->
153
+ <template class="hidden">{{ label }}</template>
154
+ <template v-if="leftIcon" #prepend>
155
+ <slot name="prepend"></slot>
156
+ <q-icon
157
+ v-if="!$slots.prepend"
158
+ :class="`slot-icon-size-${size} ${leftIcon}`"
159
+ />
160
+ </template>
161
+ <template v-if="hintText" #hint>
162
+ <div class="row items-center text-neutral-9 no-wrap">
163
+ <q-icon
164
+ v-if="hintIcon"
165
+ :class="`${hintIcon} icon-secondary-opacity`"
166
+ :aria-label="hintText"
167
+ size="1rem"
168
+ />
169
+ <div class="q-ml-xxs text-body-xs">{{ hintText }}</div>
170
+ </div>
171
+ </template>
172
+ <template #append>
173
+ <slot name="append">
174
+ <q-spinner v-if="loading" size="1rem" />
175
+ <q-icon
176
+ v-if="rightIcon"
177
+ :class="`slot-icon-size-${size} ${rightIcon}`"
178
+ :aria-label="
179
+ rightIcon && rightIconAriaLabel
180
+ ? rightIconAriaLabel
181
+ : 'right input icon '
182
+ "
183
+ :tabindex="0"
184
+ @click="handleRightIconClick"
185
+ />
186
+ </slot>
187
+ </template>
188
+ <template v-slot:error>
189
+ <div v-if="errorMessage" class="row items-center no-wrap">
190
+ <q-icon
191
+ class="fa-kit-duotone fa-warning-octagon"
192
+ :aria-label="errorMessage"
193
+ size="1rem"
194
+ />
195
+ <div class="q-ml-xxs text-body-xs" role="validation error">
196
+ {{ errorMessage }}
197
+ </div>
198
+ </div>
199
+ </template>
200
+ <slot name="menu" />
201
+ </q-input>
202
+ </div>
203
+ </template>
204
+ <style lang="sass">
205
+ .u-input
206
+ .q-field--with-bottom
207
+ padding-bottom: 0px
208
+ &.q-field--outlined.q-field--disabled .q-field__control
209
+ background: $neutral-3
210
+ &.leftBorderRadius
211
+ &.q-field--outlined .q-field__control
212
+ border-radius: 0px $xs $xs 0px
213
+ &.q-field--borderless
214
+ .q-field__control
215
+ border-radius: 0px $xs $xs 0px
216
+
217
+ .q-field__inner
218
+ border-radius: $xs
219
+
220
+ &.q-field--borderless
221
+ .q-field__control
222
+ padding: 0 $xs
223
+ background: $neutral-1
224
+ border-radius: $xs
225
+ &:hover
226
+ box-shadow : 0px 0px 0px 2px $primary-transparent
227
+
228
+ .q-field--standout .q-field__control
229
+ border-radius: $xs
230
+
231
+ .q-field__append.q-field__marginal.row.no-wrap.items-center.q-anchor--skip
232
+ display: none
233
+
234
+ .q-field__before,
235
+ .q-field__prepend
236
+ padding: 0 $xs
237
+ padding-left: 0
238
+
239
+ .q-field__after,
240
+ .q-field__append
241
+ padding-left: $xs
242
+
243
+ .q-icon
244
+ &.slot-icon-size-sm
245
+ font-size: $sm
246
+ &.slot-icon-size-md
247
+ font-size: $ba
248
+ &.slot-icon-size-lg
249
+ font-size: $ba
250
+
251
+ &.q-field--auto-height .q-field__control,
252
+ &.q-field--auto-height .q-field__native
253
+ min-height: $md
254
+
255
+ &.q-field--outlined .q-field__control
256
+ border-radius: $xs
257
+ padding: 0 $xs
258
+ background: $neutral-1
259
+
260
+ &::before
261
+ border:1.5px solid $neutral-4
262
+
263
+ &:hover::before
264
+ border:1.5px solid $primary
265
+
266
+ .q-field__control.relative-position.row.no-wrap.text-negative:focus-within
267
+ box-shadow: 0px 0px 0px 2px $accent-transparent
268
+
269
+ .q-field__control:focus-within
270
+ box-shadow : 0px 0px 0px 2px $primary-transparent
271
+
272
+ &.field-sm
273
+ .q-field__control,
274
+ .q-field__marginal
275
+ height: $md
276
+ &.q-field--outlined.q-field__control
277
+ padding: 0 $xs
278
+
279
+ &.q-field__prepend .q-field__marginal
280
+ padding: 0 $xs
281
+
282
+ &.field-md
283
+ .q-field__control,
284
+ .q-field__marginal
285
+ height: $lg
286
+ &.q-field--outlined.q-field__control
287
+ padding: 0 $xs
288
+
289
+ &.q-field__prepend.q-field__marginal
290
+ padding: 0 $xs
291
+ padding-left: 0
292
+
293
+ &.field-lg
294
+ .q-field__control,
295
+ .q-field__marginal
296
+ height: $xl
297
+ &.q-field--outlined .q-field__control
298
+ padding: 0 $sm
299
+ .q-field__prepend.q-field__marginal
300
+ padding-left: 0px
301
+
302
+ .q-field__bottom
303
+ padding: 0
304
+ align-items: center
305
+
306
+ .q-field__messages
307
+ margin-top: $xxs
308
+ </style>
@@ -0,0 +1,44 @@
1
+ <script setup>
2
+ import UInputTextStd from './UInputTextStd.vue'
3
+ import { useScreenType } from '../../composables/useScreenType'
4
+
5
+ const emit = defineEmits(['updateInputVal'])
6
+
7
+ const props = defineProps({
8
+ label: {
9
+ type: String,
10
+ },
11
+ loading: {
12
+ type: Boolean,
13
+ },
14
+ searchText: {
15
+ type: String,
16
+ },
17
+ })
18
+
19
+ const $screen = useScreenType()
20
+
21
+ const updateInputVal = (event) => {
22
+ emit('updateInputVal', event)
23
+ }
24
+ </script>
25
+
26
+ <template>
27
+ <UInputTextStd
28
+ v-bind="$attrs"
29
+ :aria-label="label"
30
+ autocapitalize="off"
31
+ autocomplete="off"
32
+ autocorrect="off"
33
+ :debounce="500"
34
+ :label="label"
35
+ :loading="loading"
36
+ :modelValue="searchText"
37
+ spellcheck="false"
38
+ @update:modelValue="updateInputVal($event)"
39
+ >
40
+ <template v-if="!$screen.isMobile" v-slot:menu>
41
+ <slot name="menu" />
42
+ </template>
43
+ </UInputTextStd>
44
+ </template>