@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,484 @@
1
+ <script setup>
2
+ import { computed, onMounted, ref, watch } from 'vue'
3
+ import UInputTextStd from './UInputTextStd.vue'
4
+ import UTooltip from './UTooltip.vue'
5
+
6
+ const emit = defineEmits(['onRightIconClick', 'onUpdate'])
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: 'address-lookup',
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
+ isRequired: {
37
+ type: Boolean,
38
+ default: false,
39
+ },
40
+ label: {
41
+ type: String,
42
+ },
43
+ leftBorderRadius: {
44
+ type: Boolean,
45
+ default: false,
46
+ },
47
+ leftIcon: {
48
+ type: String,
49
+ },
50
+ outlined: {
51
+ type: Boolean,
52
+ default: true,
53
+ },
54
+ parentClass: {
55
+ type: String,
56
+ },
57
+ placeholder: {
58
+ type: String,
59
+ },
60
+ readonly: {
61
+ type: Boolean,
62
+ default: false,
63
+ },
64
+ rightIcon: {
65
+ type: String,
66
+ },
67
+ rightIconAriaLabel: {
68
+ type: String,
69
+ },
70
+ size: {
71
+ type: String,
72
+ default: 'md',
73
+ validator: (val) => ['sm', 'md', 'lg'].includes(val),
74
+ },
75
+ toolTipText: {
76
+ type: String,
77
+ },
78
+ validationRules: {
79
+ type: Array,
80
+ },
81
+ })
82
+
83
+ let sessionToken, autocompleteSuggestion
84
+
85
+ const inputRef = ref(null)
86
+ const menuWidth = ref(0)
87
+ const predictions = ref([])
88
+ const resultItem = ref({})
89
+ const resultsMenuRef = ref(null)
90
+ const resultsMenuShowing = ref(false)
91
+
92
+ const leftBorderRadius = computed(() => {
93
+ if (props.leftBorderRadius === true) {
94
+ return 'leftBorderRadius'
95
+ }
96
+ return ''
97
+ })
98
+
99
+ const handleClear = () => {
100
+ modelValue.value = ''
101
+ }
102
+
103
+ const handleUpdate = async (input) => {
104
+ // fetchAutocompleteSuggestions reference
105
+ // https://developers.google.com/maps/documentation/javascript/reference/autocomplete-data#AutocompleteRequest
106
+ const payload = {
107
+ input,
108
+ sessionToken,
109
+ language: 'en-US',
110
+ // locationRestriction: {
111
+ // west: 0,
112
+ // north: 0,
113
+ // east: 0,
114
+ // south: 0,
115
+ // }
116
+ // origin: { lat: 0, lng: 0 }
117
+ // region: 'us',
118
+ }
119
+
120
+ const { suggestions } =
121
+ await autocompleteSuggestion.fetchAutocompleteSuggestions(payload)
122
+
123
+ const result = []
124
+ for (let suggestion of suggestions) {
125
+ let prediction = suggestion.placePrediction.toPlace()
126
+ await prediction.fetchFields({
127
+ fields: [
128
+ 'addressComponents',
129
+ 'adrFormatAddress',
130
+ 'displayName',
131
+ 'formattedAddress',
132
+ 'googleMapsURI',
133
+ 'internationalPhoneNumber',
134
+ 'location',
135
+ 'nationalPhoneNumber',
136
+ 'websiteURI',
137
+ ],
138
+ })
139
+
140
+ const {
141
+ addressComponents,
142
+ adrFormatAddress,
143
+ displayName,
144
+ formattedAddress,
145
+ googleMapsURI,
146
+ internationalPhoneNumber,
147
+ location,
148
+ nationalPhoneNumber,
149
+ websiteURI,
150
+ } = prediction
151
+
152
+ const parsedAddressComponents = parseAddressComponents(addressComponents)
153
+ const finalResult = {
154
+ ...parsedAddressComponents,
155
+ adrFormatAddress,
156
+ coordinates: {
157
+ lat: location.lat(),
158
+ lng: location.lng(),
159
+ },
160
+ displayName,
161
+ formattedAddress,
162
+ googleMapsURI,
163
+ internationalPhoneNumber,
164
+ nationalPhoneNumber,
165
+ websiteURI,
166
+ }
167
+ result.push(finalResult)
168
+ }
169
+
170
+ predictions.value = result
171
+ }
172
+
173
+ const onClick = (item) => {
174
+ resultItem.value = item
175
+ resultsMenuRef.value.hide()
176
+ emit('onUpdate', item)
177
+ }
178
+
179
+ const onMenuShow = () => {
180
+ const el =
181
+ inputRef.value?.$el.querySelector('.q-field__control') ||
182
+ inputRef.value?.$el
183
+ menuWidth.value = `${el?.offsetWidth || 0}px`
184
+ resultsMenuShowing.value = true
185
+ }
186
+
187
+ const parseAddressComponents = (addressComponents) => {
188
+ const address = {}
189
+ for (const component of addressComponents) {
190
+ const { types, longText, shortText } = component
191
+ if (types.includes('street_number')) address.street_number = longText
192
+ if (types.includes('route')) address.street = longText
193
+ if (types.includes('locality')) address.city = longText
194
+ if (types.includes('administrative_area_level_1')) address.state = shortText
195
+ if (types.includes('administrative_area_level_2')) address.county = longText
196
+ if (types.includes('country')) address.country = shortText
197
+ if (types.includes('postal_code')) address.postal_code = longText
198
+ if (types.includes('plus_code')) address.plus_code = longText
199
+ }
200
+ if (address.street && address.street_number)
201
+ address.street_address = `${address.street_number} ${address.street}`
202
+ if (address.street && !address.street_number)
203
+ address.street_address = address.street
204
+
205
+ return address
206
+ }
207
+
208
+ onMounted(async () => {
209
+ const { AutocompleteSessionToken, AutocompleteSuggestion } =
210
+ await google.maps.importLibrary('places')
211
+
212
+ sessionToken = new AutocompleteSessionToken()
213
+ autocompleteSuggestion = AutocompleteSuggestion
214
+ })
215
+
216
+ watch(modelValue, async (value) => {
217
+ if (value) {
218
+ if (!resultsMenuShowing.value && resultsMenuRef.value)
219
+ resultsMenuRef.value.show()
220
+ await handleUpdate(value)
221
+ } else {
222
+ if (resultsMenuShowing.value && resultsMenuRef.value)
223
+ resultsMenuRef.value.hide()
224
+ predictions.value = []
225
+ resultItem.value = {}
226
+ emit('onUpdate', {})
227
+ }
228
+ })
229
+ </script>
230
+
231
+ <template>
232
+ <div
233
+ v-if="JSON.stringify(resultItem) === '{}'"
234
+ :class="`q-gutter-xs ${parentClass}`"
235
+ :dataTestId="dataTestId"
236
+ >
237
+ <label
238
+ v-if="label"
239
+ class="row items-center q-mb-xxs"
240
+ for="input"
241
+ role="label"
242
+ >
243
+ <div class="u-input-label text-body-sm">
244
+ <span>{{ label }}</span>
245
+ <span v-if="isRequired" class="text-red-5 text-body-sm q-mx-xs">
246
+ {{ '*' }}
247
+ </span>
248
+ </div>
249
+ <q-icon
250
+ v-if="toolTipText"
251
+ class="fa-kit-duotone fa-circle-info cursor-pointer"
252
+ :aria-label="toolTipText"
253
+ color="neutral-9"
254
+ size="1rem"
255
+ >
256
+ <UTooltip
257
+ anchor="top middle"
258
+ :description="toolTipText"
259
+ :offset="[0, 0]"
260
+ self="bottom middle"
261
+ />
262
+ </q-icon>
263
+ </label>
264
+ <q-input
265
+ v-bind="$attrs"
266
+ v-model="modelValue"
267
+ :class="`u-input field-${size} ${leftBorderRadius}`"
268
+ :borderless="borderless"
269
+ :bottom-slots="!!hintText"
270
+ :debounce="500"
271
+ :disable="disable"
272
+ :error="error"
273
+ hide-bottom-space
274
+ id="input"
275
+ name="input"
276
+ :outlined="outlined"
277
+ :placeholder="placeholder"
278
+ :readonly="readonly"
279
+ ref="inputRef"
280
+ :rules="validationRules"
281
+ :standout="!outlined"
282
+ type="text"
283
+ >
284
+ <!-- The 'fit' prop is used to ensure the menu matches the anchor's width for correct positioning,
285
+ while the manual width styling enforces a specific width for visual consistency. -->
286
+ <q-menu
287
+ v-model="resultsMenuShowing"
288
+ fit
289
+ no-focus
290
+ ref="resultsMenuRef"
291
+ :style="{ width: menuWidth }"
292
+ @hide="resultsMenuShowing = false"
293
+ @show="onMenuShow"
294
+ >
295
+ <q-list bordered>
296
+ <q-item
297
+ v-for="(p, i) of predictions"
298
+ clickable
299
+ :key="i"
300
+ @click="onClick(p)"
301
+ >
302
+ <q-item-section avatar>
303
+ <q-icon class="fa-kit-duotone fa-location-dot" color="primary" />
304
+ </q-item-section>
305
+ <q-item-section>
306
+ <q-item-label>{{ p.displayName }}</q-item-label>
307
+ <q-item-label caption>
308
+ <span class="text-caption">
309
+ {{ p.formattedAddress }}
310
+ </span>
311
+ </q-item-label>
312
+ </q-item-section>
313
+ </q-item>
314
+ </q-list>
315
+ </q-menu>
316
+
317
+ <template v-if="leftIcon" #prepend>
318
+ <slot name="prepend"></slot>
319
+ <q-icon
320
+ v-if="!$slots.prepend"
321
+ :class="`slot-icon-size-${size} ${leftIcon}`"
322
+ />
323
+ </template>
324
+
325
+ <template v-if="hintText" #hint>
326
+ <div class="row items-center text-neutral-9 no-wrap">
327
+ <q-icon
328
+ v-if="hintIcon"
329
+ :class="hintIcon"
330
+ :aria-label="hintText"
331
+ size="1rem"
332
+ />
333
+ <div class="q-ml-xxs text-body-xs">{{ hintText }}</div>
334
+ </div>
335
+ </template>
336
+
337
+ <template #append>
338
+ <slot name="append">
339
+ <q-icon
340
+ v-if="rightIcon"
341
+ :class="`slot-icon-size-${size} ${rightIcon}`"
342
+ :aria-label="
343
+ rightIcon && rightIconAriaLabel
344
+ ? rightIconAriaLabel
345
+ : 'right input icon '
346
+ "
347
+ :tabindex="0"
348
+ @click="handleRightIconClick"
349
+ />
350
+ </slot>
351
+ </template>
352
+
353
+ <template v-slot:error>
354
+ <div v-if="errorMessage" class="row items-center no-wrap">
355
+ <q-icon
356
+ class="fa-kit-duotone fa-warning-octagon"
357
+ :aria-label="errorMessage"
358
+ size="1rem"
359
+ />
360
+ <div class="q-ml-xxs text-body-xs" role="validation error">
361
+ {{ errorMessage }}
362
+ </div>
363
+ </div>
364
+ </template>
365
+ </q-input>
366
+ </div>
367
+
368
+ <UInputTextStd
369
+ v-if="JSON.stringify(resultItem) !== '{}'"
370
+ v-model="resultItem.formattedAddress"
371
+ :dataTestId="dataTestId"
372
+ :label="label"
373
+ readonly
374
+ rightIcon="fa-kit-duotone fa-circle-xmark"
375
+ :size="size"
376
+ @onRightIconClick="handleClear"
377
+ />
378
+ </template>
379
+
380
+ <style lang="sass">
381
+ .u-input
382
+ .q-field--with-bottom
383
+ padding-bottom: 0px
384
+ &.q-field--outlined.q-field--disabled .q-field__control
385
+ background: $neutral-3
386
+ &.leftBorderRadius
387
+ &.q-field--outlined .q-field__control
388
+ border-radius: 0px $xs $xs 0px
389
+ &.q-field--borderless
390
+ .q-field__control
391
+ border-radius: 0px $xs $xs 0px
392
+
393
+ .q-field__inner
394
+ border-radius: $xs
395
+
396
+ &.q-field--borderless
397
+ .q-field__control
398
+ padding: 0 $xs
399
+ background: $neutral-1
400
+ border-radius: $xs
401
+ &:hover
402
+ box-shadow : 0px 0px 0px 2px $primary-transparent
403
+
404
+ .q-field--standout .q-field__control
405
+ border-radius: $xs
406
+
407
+ .q-field__append.q-field__marginal.row.no-wrap.items-center.q-anchor--skip
408
+ display: none
409
+
410
+ .q-field__before,
411
+ .q-field__prepend
412
+ padding: 0 $xs
413
+ padding-left: 0
414
+
415
+ .q-field__after,
416
+ .q-field__append
417
+ padding-left: $xs
418
+
419
+ .q-icon
420
+ &.slot-icon-size-sm
421
+ font-size: $sm
422
+ &.slot-icon-size-md
423
+ font-size: $ba
424
+ &.slot-icon-size-lg
425
+ font-size: $ba
426
+
427
+ &.q-field--auto-height .q-field__control,
428
+ &.q-field--auto-height .q-field__native
429
+ min-height: $md
430
+
431
+ &.q-field--outlined .q-field__control
432
+ border-radius: $xs
433
+ padding: 0 $xs
434
+ background: $neutral-1
435
+
436
+ &::before
437
+ border:1.5px solid $neutral-4
438
+
439
+ &:hover::before
440
+ border:1.5px solid $primary
441
+
442
+ .q-field__control.relative-position.row.no-wrap.text-negative:focus-within
443
+ box-shadow: 0px 0px 0px 2px $accent-transparent
444
+
445
+ .q-field__control:focus-within
446
+ box-shadow : 0px 0px 0px 2px $primary-transparent
447
+
448
+ &.field-sm
449
+ .q-field__control,
450
+ .q-field__marginal
451
+ height: $md
452
+ &.q-field--outlined.q-field__control
453
+ padding: 0 $xs
454
+
455
+ &.q-field__prepend .q-field__marginal
456
+ padding: 0 $xs
457
+
458
+ &.field-md
459
+ .q-field__control,
460
+ .q-field__marginal
461
+ height: $lg
462
+ &.q-field--outlined.q-field__control
463
+ padding: 0 $xs
464
+
465
+ &.q-field__prepend.q-field__marginal
466
+ padding: 0 $xs
467
+ padding-left: 0
468
+
469
+ &.field-lg
470
+ .q-field__control,
471
+ .q-field__marginal
472
+ height: $xl
473
+ &.q-field--outlined .q-field__control
474
+ padding: 0 $sm
475
+ .q-field__prepend.q-field__marginal
476
+ padding-left: 0px
477
+
478
+ .q-field__bottom
479
+ padding: 0
480
+ align-items: center
481
+
482
+ .q-field__messages
483
+ margin-top: $xxs
484
+ </style>