@usssa/component-library 1.0.0-alpha.4 → 1.0.0-alpha.41

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 (161) hide show
  1. package/README.md +4 -1
  2. package/package.json +6 -4
  3. package/src/App.vue +9 -0
  4. package/src/assets/quasar-logo-vertical.svg +15 -0
  5. package/src/boot/.gitkeep +0 -0
  6. package/src/boot/google-maps.js +11 -0
  7. package/src/components/ComponentLink.vue +26 -0
  8. package/src/components/core/UAvatar.vue +161 -0
  9. package/src/components/core/UAvatarGroup.vue +119 -0
  10. package/src/components/core/UBadgeStd.vue +91 -0
  11. package/src/components/core/UBannerStd.vue +115 -0
  12. package/src/components/core/UBreadCrumbs.vue +67 -0
  13. package/src/components/core/UBtnIcon.vue +159 -0
  14. package/src/components/core/UBtnStd.vue +129 -0
  15. package/src/components/core/UBtnToggle.vue +68 -0
  16. package/src/components/core/UCheckboxStd.vue +95 -0
  17. package/src/components/core/UChip.vue +251 -0
  18. package/src/components/core/UDialogStd.vue +242 -0
  19. package/src/components/core/UDrawer.vue +211 -0
  20. package/src/components/core/UInnerLoader.vue +58 -0
  21. package/src/components/core/UInputAddressLookup.vue +466 -0
  22. package/src/components/core/UInputPhoneStd.vue +295 -0
  23. package/src/components/core/UInputTextStd.vue +293 -0
  24. package/src/components/core/UMenuButtonStd.vue +274 -0
  25. package/src/components/core/UMenuDropdown.vue +77 -0
  26. package/src/components/core/UMenuDropdownAdvancedSearch.vue +262 -0
  27. package/src/components/core/UMenuItem.vue +132 -0
  28. package/src/components/core/UMultiSelectStd.vue +259 -0
  29. package/src/components/core/UPagination.vue +104 -0
  30. package/src/components/core/URadioBtn.vue +116 -0
  31. package/src/components/core/URadioStd.vue +62 -0
  32. package/src/components/core/USelectStd.vue +233 -0
  33. package/src/components/core/UTabBtnStd.vue +167 -0
  34. package/src/components/core/UTable/UTable.vue +93 -0
  35. package/src/components/core/UTable/UTd.vue +63 -0
  36. package/src/components/core/UTable/UTh.vue +48 -0
  37. package/src/components/core/UTable/UTr.vue +20 -0
  38. package/src/components/core/UTableStd.vue +636 -0
  39. package/src/components/core/UTabsStd.vue +111 -0
  40. package/src/components/core/UToggleStd.vue +159 -0
  41. package/src/components/core/UTooltip.vue +71 -0
  42. package/src/components/index.js +66 -0
  43. package/src/composables/useNotify.js +79 -0
  44. package/src/composables/useOverlayLoader.js +23 -0
  45. package/src/css/app.sass +159 -0
  46. package/src/css/colors.sass +101 -0
  47. package/src/css/media.sass +1 -0
  48. package/src/css/quasar.variables.sass +119 -0
  49. package/src/css/typography.sass +0 -0
  50. package/src/css/vars/colors.variables.sass +126 -0
  51. package/src/layouts/MainLayout.vue +173 -0
  52. package/src/pages/AdvancedSearch.vue +512 -0
  53. package/src/pages/Avatar.vue +77 -0
  54. package/src/pages/AvatarGroup.vue +139 -0
  55. package/src/pages/BadgeStd.vue +83 -0
  56. package/src/pages/BannerPage.vue +76 -0
  57. package/src/pages/BreadCrumbs.vue +100 -0
  58. package/src/pages/BtnIcon.vue +120 -0
  59. package/src/pages/BtnStd.vue +138 -0
  60. package/src/pages/BtnToggle.vue +131 -0
  61. package/src/pages/CheckBox.vue +62 -0
  62. package/src/pages/Chip.vue +108 -0
  63. package/src/pages/ComponentBase.vue +54 -0
  64. package/src/pages/Dialog.vue +221 -0
  65. package/src/pages/Drawer.vue +128 -0
  66. package/src/pages/ErrorNotFound.vue +11 -0
  67. package/src/pages/IndexPage.vue +11 -0
  68. package/src/pages/InnerLoader.vue +81 -0
  69. package/src/pages/InputAddressLookup.vue +258 -0
  70. package/src/pages/InputPhone.vue +152 -0
  71. package/src/pages/InputText.vue +140 -0
  72. package/src/pages/MenuButton.vue +194 -0
  73. package/src/pages/MenuDropdown.vue +79 -0
  74. package/src/pages/MenuItem.vue +68 -0
  75. package/src/pages/MultiSelectStd.vue +174 -0
  76. package/src/pages/NotifyPage.vue +109 -0
  77. package/src/pages/OverlayLoader.vue +128 -0
  78. package/src/pages/Pagination.vue +71 -0
  79. package/src/pages/Radio.vue +80 -0
  80. package/src/pages/RadioBtn.vue +104 -0
  81. package/src/pages/SelectStd.vue +160 -0
  82. package/src/pages/TabButtonPage.vue +126 -0
  83. package/src/pages/TablePage.vue +375 -0
  84. package/src/pages/TabsPage.vue +261 -0
  85. package/src/pages/TogglePage.vue +58 -0
  86. package/src/pages/TooltipPage.vue +125 -0
  87. package/src/router/index.js +34 -0
  88. package/src/router/routes.js +149 -0
  89. package/dist/spa/assets/Avatar.45667392.js +0 -9
  90. package/dist/spa/assets/AvatarGroup.99557443.js +0 -9
  91. package/dist/spa/assets/AvatarGroup.bb4cd03a.css +0 -1
  92. package/dist/spa/assets/BadgeStd.ee4129c5.js +0 -6
  93. package/dist/spa/assets/BannerPage.6c6a98c4.js +0 -10
  94. package/dist/spa/assets/BannerPage.d195fcac.css +0 -1
  95. package/dist/spa/assets/BtnIcon.89e50d2e.css +0 -1
  96. package/dist/spa/assets/BtnIcon.934f8c5b.js +0 -10
  97. package/dist/spa/assets/BtnStd.95fc4510.js +0 -11
  98. package/dist/spa/assets/CheckBox.3c204a4b.css +0 -1
  99. package/dist/spa/assets/CheckBox.fbc0bd1a.js +0 -7
  100. package/dist/spa/assets/Chip.49ffc857.js +0 -11
  101. package/dist/spa/assets/Chip.74acaa33.css +0 -1
  102. package/dist/spa/assets/ComponentBase.1ae19b7e.js +0 -1
  103. package/dist/spa/assets/ErrorNotFound.6cccfaee.js +0 -1
  104. package/dist/spa/assets/IndexPage.17d09b76.js +0 -1
  105. package/dist/spa/assets/InputText.19c0d7d1.css +0 -1
  106. package/dist/spa/assets/InputText.3fcd97a4.js +0 -20
  107. package/dist/spa/assets/KFOkCnqEu92Fr1MmgVxIIzQ.34e9582c.woff +0 -0
  108. package/dist/spa/assets/KFOlCnqEu92Fr1MmEU9fBBc-.9ce7f3ac.woff +0 -0
  109. package/dist/spa/assets/KFOlCnqEu92Fr1MmSU5fBBc-.bf14c7d7.woff +0 -0
  110. package/dist/spa/assets/KFOlCnqEu92Fr1MmWUlfBBc-.e0fd57c0.woff +0 -0
  111. package/dist/spa/assets/KFOlCnqEu92Fr1MmYUtfBBc-.f6537e32.woff +0 -0
  112. package/dist/spa/assets/KFOmCnqEu92Fr1Mu4mxM.f2abf7fb.woff +0 -0
  113. package/dist/spa/assets/MainLayout.912bb0f8.js +0 -1
  114. package/dist/spa/assets/MultiSelectStd.644b108c.js +0 -17
  115. package/dist/spa/assets/MultiSelectStd.c7af49eb.css +0 -1
  116. package/dist/spa/assets/QAvatar.5940a79e.js +0 -1
  117. package/dist/spa/assets/QCheckbox.48b43f7d.js +0 -1
  118. package/dist/spa/assets/QPage.ca395ec4.js +0 -1
  119. package/dist/spa/assets/QRadio.0a7f5e2c.js +0 -1
  120. package/dist/spa/assets/QResizeObserver.30c3566c.js +0 -1
  121. package/dist/spa/assets/QSelect.a40eb786.js +0 -1
  122. package/dist/spa/assets/QTabs.72f2507e.js +0 -1
  123. package/dist/spa/assets/QToggle.376c48be.js +0 -1
  124. package/dist/spa/assets/QTooltip.5aa8e325.js +0 -1
  125. package/dist/spa/assets/Radio.0ac35288.js +0 -7
  126. package/dist/spa/assets/Radio.aca54a89.css +0 -1
  127. package/dist/spa/assets/SelectStd.5c6891db.css +0 -1
  128. package/dist/spa/assets/SelectStd.daf1def9.js +0 -16
  129. package/dist/spa/assets/TabButtonPage.20e871dd.js +0 -7
  130. package/dist/spa/assets/TabButtonPage.36ce9f9c.css +0 -1
  131. package/dist/spa/assets/TabsPage.9b94ff39.css +0 -1
  132. package/dist/spa/assets/TabsPage.b92cccee.js +0 -9
  133. package/dist/spa/assets/TogglePage.8129b631.css +0 -1
  134. package/dist/spa/assets/TogglePage.ba6e325c.js +0 -9
  135. package/dist/spa/assets/UAvatar.dda7e478.js +0 -1
  136. package/dist/spa/assets/UAvatar.ea8daa38.css +0 -1
  137. package/dist/spa/assets/UBadgeStd.3965db9a.css +0 -1
  138. package/dist/spa/assets/UBadgeStd.e165ee05.js +0 -1
  139. package/dist/spa/assets/UBtnStd.979ec4e8.js +0 -1
  140. package/dist/spa/assets/UBtnStd.bdd4f5e5.css +0 -1
  141. package/dist/spa/assets/UTooltip.d2e04d0c.js +0 -1
  142. package/dist/spa/assets/UTooltip.efa029a7.css +0 -1
  143. package/dist/spa/assets/dom.e9d4ad51.js +0 -1
  144. package/dist/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.fd84f88b.woff +0 -0
  145. package/dist/spa/assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.4a4dbc62.woff2 +0 -0
  146. package/dist/spa/assets/format.41663636.js +0 -1
  147. package/dist/spa/assets/index.43c62a18.js +0 -21
  148. package/dist/spa/assets/index.4fbd73cf.css +0 -5
  149. package/dist/spa/assets/option-sizes.10cc02d3.js +0 -1
  150. package/dist/spa/assets/render.e67ff27a.js +0 -1
  151. package/dist/spa/assets/tooltip.7c0d0774.js +0 -8
  152. package/dist/spa/assets/touch.9135741d.js +0 -1
  153. package/dist/spa/assets/use-checkbox.44a623c0.js +0 -1
  154. package/dist/spa/favicon.ico +0 -0
  155. package/dist/spa/icons/caret-down.svg +0 -5
  156. package/dist/spa/icons/circle-xmark.svg +0 -6
  157. package/dist/spa/icons/favicon-128x128.png +0 -0
  158. package/dist/spa/icons/favicon-16x16.png +0 -0
  159. package/dist/spa/icons/favicon-32x32.png +0 -0
  160. package/dist/spa/icons/favicon-96x96.png +0 -0
  161. package/dist/spa/index.html +0 -3
@@ -0,0 +1,466 @@
1
+ <script setup>
2
+ import { computed, onMounted, ref, watch } from 'vue'
3
+ import UTooltip from './UTooltip.vue'
4
+ import UInputTextStd from './UInputTextStd.vue'
5
+
6
+ const props = defineProps({
7
+ hintText: {
8
+ type: String,
9
+ },
10
+ hintIcon: {
11
+ type: String,
12
+ },
13
+ isRequired: {
14
+ type: Boolean,
15
+ default: false,
16
+ },
17
+ label: {
18
+ type: String,
19
+ },
20
+ leftIcon: {
21
+ type: String,
22
+ },
23
+ rightIcon: {
24
+ type: String,
25
+ },
26
+ outlined: {
27
+ type: Boolean,
28
+ default: true,
29
+ },
30
+ borderless: {
31
+ type: Boolean,
32
+ default: false,
33
+ },
34
+ placeholder: {
35
+ type: String,
36
+ },
37
+ rightIconAriaLabel: {
38
+ type: String,
39
+ },
40
+ size: {
41
+ type: String,
42
+ default: 'md',
43
+ validator: (val) => ['sm', 'md', 'lg'].includes(val),
44
+ },
45
+ toolTipText: {
46
+ type: String,
47
+ },
48
+ validationRules: {
49
+ type: Array,
50
+ },
51
+ readonly: {
52
+ type: Boolean,
53
+ default: false,
54
+ },
55
+ disable: {
56
+ type: Boolean,
57
+ default: false,
58
+ },
59
+ error: {
60
+ type: Boolean,
61
+ },
62
+ errorMessage: {
63
+ type: String,
64
+ },
65
+ leftBorderRadius: {
66
+ type: Boolean,
67
+ default: false,
68
+ },
69
+ parentClass: {
70
+ type: String,
71
+ },
72
+ })
73
+ const emit = defineEmits(['onRightIconClick', 'onUpdate'])
74
+ const modelValue = defineModel()
75
+ defineOptions({
76
+ inheritAttrs: false,
77
+ })
78
+
79
+ let sessionToken, autocompleteSuggestion
80
+
81
+ const inputRef = ref(null)
82
+ const predictions = ref([])
83
+ const resultsMenuRef = ref(null)
84
+ const resultsMenuShowing = ref(false)
85
+ const resultItem = ref({})
86
+
87
+ const leftBorderRadius = computed(() => {
88
+ if (props.leftBorderRadius === true) {
89
+ return 'leftBorderRadius'
90
+ }
91
+ return ''
92
+ })
93
+
94
+ const handleClear = () => {
95
+ modelValue.value = ''
96
+ }
97
+
98
+ const parseAddressComponents = (addressComponents) => {
99
+ const address = {}
100
+ for (const component of addressComponents) {
101
+ const { types, longText, shortText } = component
102
+ if (types.includes('street_number')) address.street_number = longText
103
+ if (types.includes('route')) address.street = longText
104
+ if (types.includes('locality')) address.city = longText
105
+ if (types.includes('administrative_area_level_1')) address.state = shortText
106
+ if (types.includes('administrative_area_level_2')) address.county = longText
107
+ if (types.includes('country')) address.country = shortText
108
+ if (types.includes('postal_code')) address.postal_code = longText
109
+ if (types.includes('plus_code')) address.plus_code = longText
110
+ }
111
+ if (address.street && address.street_number)
112
+ address.street_address = `${address.street_number} ${address.street}`
113
+ if (address.street && !address.street_number)
114
+ address.street_address = address.street
115
+
116
+ return address
117
+ }
118
+
119
+ const handleUpdate = async (input) => {
120
+ // fetchAutocompleteSuggestions reference
121
+ // https://developers.google.com/maps/documentation/javascript/reference/autocomplete-data#AutocompleteRequest
122
+ const payload = {
123
+ input,
124
+ sessionToken,
125
+ language: 'en-US',
126
+ // locationRestriction: {
127
+ // west: 0,
128
+ // north: 0,
129
+ // east: 0,
130
+ // south: 0,
131
+ // }
132
+ // origin: { lat: 0, lng: 0 }
133
+ // region: 'us',
134
+ }
135
+
136
+ const { suggestions } =
137
+ await autocompleteSuggestion.fetchAutocompleteSuggestions(payload)
138
+
139
+ const result = []
140
+ for (let suggestion of suggestions) {
141
+ let prediction = suggestion.placePrediction.toPlace()
142
+ await prediction.fetchFields({
143
+ fields: [
144
+ 'addressComponents',
145
+ 'adrFormatAddress',
146
+ 'displayName',
147
+ 'formattedAddress',
148
+ 'googleMapsURI',
149
+ 'internationalPhoneNumber',
150
+ 'location',
151
+ 'nationalPhoneNumber',
152
+ 'websiteURI',
153
+ ],
154
+ })
155
+
156
+ const {
157
+ addressComponents,
158
+ adrFormatAddress,
159
+ displayName,
160
+ formattedAddress,
161
+ googleMapsURI,
162
+ internationalPhoneNumber,
163
+ location,
164
+ nationalPhoneNumber,
165
+ websiteURI,
166
+ } = prediction
167
+
168
+ const parsedAddressComponents = parseAddressComponents(addressComponents)
169
+ const finalResult = {
170
+ ...parsedAddressComponents,
171
+ adrFormatAddress,
172
+ coordinates: {
173
+ lat: location.lat(),
174
+ lng: location.lng(),
175
+ },
176
+ displayName,
177
+ formattedAddress,
178
+ googleMapsURI,
179
+ internationalPhoneNumber,
180
+ nationalPhoneNumber,
181
+ websiteURI,
182
+ }
183
+ result.push(finalResult)
184
+ }
185
+
186
+ predictions.value = result
187
+ }
188
+
189
+ const onClick = (item) => {
190
+ resultItem.value = item
191
+ resultsMenuRef.value.hide()
192
+ emit('onUpdate', item)
193
+ }
194
+
195
+ onMounted(async () => {
196
+ const { AutocompleteSessionToken, AutocompleteSuggestion } =
197
+ await google.maps.importLibrary('places')
198
+
199
+ sessionToken = new AutocompleteSessionToken()
200
+ autocompleteSuggestion = AutocompleteSuggestion
201
+ })
202
+
203
+ watch(modelValue, async (value) => {
204
+ if (value) {
205
+ if (!resultsMenuShowing.value && resultsMenuRef.value)
206
+ resultsMenuRef.value.show()
207
+ await handleUpdate(value)
208
+ } else {
209
+ if (resultsMenuShowing.value && resultsMenuRef.value)
210
+ resultsMenuRef.value.hide()
211
+ predictions.value = []
212
+ resultItem.value = {}
213
+ emit('onUpdate', {})
214
+ }
215
+ })
216
+ </script>
217
+
218
+ <template>
219
+ <div
220
+ v-if="JSON.stringify(resultItem) === '{}'"
221
+ class="q-gutter-xs"
222
+ :class="parentClass"
223
+ >
224
+ <label
225
+ v-if="label"
226
+ role="label"
227
+ for="input"
228
+ class="row items-center q-mb-xxs"
229
+ >
230
+ <div class="u-input-label text-body-sm">
231
+ {{ label }}
232
+ <span class="text-red-5 text-body-sm q-mx-xxs" v-if="isRequired">
233
+ *
234
+ </span>
235
+ </div>
236
+ <q-icon
237
+ class="q-ml-xxs fa-kit-duotone fa-circle-info cursor-pointer"
238
+ v-if="toolTipText"
239
+ size="1rem"
240
+ color="neutral-9"
241
+ :aria-label="toolTipText"
242
+ >
243
+ <UTooltip
244
+ :description="toolTipText"
245
+ anchor="top middle"
246
+ self="bottom middle"
247
+ :offset="[0, 0]"
248
+ />
249
+ </q-icon>
250
+ </label>
251
+ <q-input
252
+ v-bind="$attrs"
253
+ v-model="modelValue"
254
+ class="u-input"
255
+ :class="`field-${size} ${leftBorderRadius}`"
256
+ :debounce="500"
257
+ :borderless="borderless"
258
+ :bottom-slots="!!hintText"
259
+ :disable="disable"
260
+ :error="error"
261
+ hide-bottom-space
262
+ id="input"
263
+ name="input"
264
+ :outlined="outlined"
265
+ :placeholder="placeholder"
266
+ :readonly="readonly"
267
+ ref="inputRef"
268
+ :rules="validationRules"
269
+ :standout="!outlined"
270
+ type="text"
271
+ >
272
+ <q-menu
273
+ v-model="resultsMenuShowing"
274
+ no-focus
275
+ ref="resultsMenuRef"
276
+ @show="resultsMenuShowing = true"
277
+ @hide="resultsMenuShowing = false"
278
+ >
279
+ <q-list bordered>
280
+ <q-item
281
+ v-for="(p, i) of predictions"
282
+ :key="i"
283
+ clickable
284
+ @click="onClick(p)"
285
+ >
286
+ <q-item-section avatar>
287
+ <q-icon class="fa-kit-duotone fa-location-dot" color="primary" />
288
+ </q-item-section>
289
+ <q-item-section>
290
+ <q-item-label>{{ p.displayName }}</q-item-label>
291
+ <q-item-label caption
292
+ ><span class="text-caption">{{
293
+ p.formattedAddress
294
+ }}</span></q-item-label
295
+ >
296
+ </q-item-section>
297
+ </q-item>
298
+ </q-list>
299
+ </q-menu>
300
+
301
+ <template #prepend v-if="leftIcon">
302
+ <slot name="prepend"></slot>
303
+ <q-icon
304
+ v-if="!$slots.prepend"
305
+ :class="`slot-icon-size-${size} ${leftIcon}`"
306
+ />
307
+ </template>
308
+
309
+ <template #hint v-if="hintText">
310
+ <div class="row items-center text-neutral-9 no-wrap">
311
+ <q-icon
312
+ :class="hintIcon"
313
+ v-if="hintIcon"
314
+ size="1rem"
315
+ :aria-label="hintText"
316
+ />
317
+ <div class="q-ml-xxs text-body-xs">{{ hintText }}</div>
318
+ </div>
319
+ </template>
320
+
321
+ <template #append>
322
+ <slot name="append">
323
+ <q-icon
324
+ v-if="rightIcon"
325
+ @click="handleRightIconClick"
326
+ :class="`slot-icon-size-${size} ${rightIcon}`"
327
+ :tabindex="0"
328
+ :aria-label="
329
+ rightIcon && rightIconAriaLabel
330
+ ? rightIconAriaLabel
331
+ : 'right input icon '
332
+ "
333
+ />
334
+ </slot>
335
+ </template>
336
+
337
+ <template v-slot:error>
338
+ <div class="row items-center no-wrap" v-if="errorMessage">
339
+ <q-icon
340
+ class="fa-kit-duotone fa-warning-octagon"
341
+ size="1rem"
342
+ :aria-label="errorMessage"
343
+ />
344
+ <div class="q-ml-xxs text-body-xs" role="validation error">
345
+ {{ errorMessage }}
346
+ </div>
347
+ </div>
348
+ </template>
349
+ </q-input>
350
+ </div>
351
+ <UInputTextStd
352
+ v-if="JSON.stringify(resultItem) !== '{}'"
353
+ v-model="resultItem.street_address"
354
+ label="Address"
355
+ readonly
356
+ rightIcon="fa-kit-duotone fa-circle-xmark"
357
+ size="sm"
358
+ @onRightIconClick="handleClear"
359
+ />
360
+ </template>
361
+
362
+ <style lang="sass">
363
+ .u-input
364
+ .q-field--with-bottom
365
+ padding-bottom: 0px
366
+ &.q-field--outlined.q-field--disabled .q-field__control
367
+ background: $neutral-3
368
+ &.leftBorderRadius
369
+ &.q-field--outlined .q-field__control
370
+ border-radius: 0px $xs $xs 0px
371
+ &.q-field--borderless
372
+ .q-field__control
373
+ border-radius: 0px $xs $xs 0px
374
+
375
+ .q-field__inner
376
+ border-radius: $xs
377
+
378
+ &.q-field--borderless
379
+ .q-field__control
380
+ padding: 0 $xs
381
+ background: $neutral-1
382
+ border-radius: $xs
383
+ &:hover
384
+ box-shadow : 0px 0px 0px 2px $primary-transparent
385
+
386
+ .q-field--standout .q-field__control
387
+ border-radius: $xs
388
+
389
+ .q-field__append.q-field__marginal.row.no-wrap.items-center.q-anchor--skip
390
+ display: none
391
+
392
+ .q-field__before,
393
+ .q-field__prepend
394
+ padding: 0 $xs
395
+ padding-left: 0
396
+
397
+ .q-field__after,
398
+ .q-field__append
399
+ padding-left: $xs
400
+
401
+ .q-icon
402
+ &.slot-icon-size-sm
403
+ font-size: $sm
404
+ &.slot-icon-size-md
405
+ font-size: $ba
406
+ &.slot-icon-size-lg
407
+ font-size: $ba
408
+
409
+ &.q-field--auto-height .q-field__control,
410
+ &.q-field--auto-height .q-field__native
411
+ min-height: $md
412
+
413
+ &.q-field--outlined .q-field__control
414
+ border-radius: $xs
415
+ padding: 0 $xs
416
+ background: $neutral-1
417
+
418
+ &::before
419
+ border:1.5px solid $neutral-4
420
+
421
+ &:hover::before
422
+ border:1.5px solid $primary
423
+
424
+ .q-field__control.relative-position.row.no-wrap.text-negative:focus-within
425
+ box-shadow: 0px 0px 0px 2px $accent-transparent
426
+
427
+ .q-field__control:focus-within
428
+ box-shadow : 0px 0px 0px 2px $primary-transparent
429
+
430
+ &.field-sm
431
+ .q-field__control,
432
+ .q-field__marginal
433
+ height: $md
434
+ &.q-field--outlined.q-field__control
435
+ padding: 0 $xs
436
+
437
+ &.q-field__prepend .q-field__marginal
438
+ padding: 0 $xs
439
+
440
+ &.field-md
441
+ .q-field__control,
442
+ .q-field__marginal
443
+ height: $lg
444
+ &.q-field--outlined.q-field__control
445
+ padding: 0 $xs
446
+
447
+ &.q-field__prepend.q-field__marginal
448
+ padding: 0 $xs
449
+ padding-left: 0
450
+
451
+ &.field-lg
452
+ .q-field__control,
453
+ .q-field__marginal
454
+ height: $xl
455
+ &.q-field--outlined .q-field__control
456
+ padding: 0 $sm
457
+ .q-field__prepend.q-field__marginal
458
+ padding-left: 0px
459
+
460
+ .q-field__bottom
461
+ padding: 0
462
+ align-items: center
463
+
464
+ .q-field__messages
465
+ margin-top: $xxs
466
+ </style>