@usssa/component-library 1.0.0-alpha.1 → 1.0.0-alpha.100

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