@vc-shell/framework 1.0.38 → 1.0.39

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 (142) hide show
  1. package/components/atoms/vc-badge/vc-badge.stories.ts +27 -0
  2. package/components/atoms/vc-badge/vc-badge.vue +63 -0
  3. package/components/atoms/vc-button/vc-button.stories.ts +34 -0
  4. package/components/atoms/vc-button/vc-button.vue +219 -0
  5. package/components/atoms/vc-card/vc-card.vue +137 -0
  6. package/components/atoms/vc-checkbox/vc-checkbox.stories.ts +25 -0
  7. package/components/atoms/vc-checkbox/vc-checkbox.vue +130 -0
  8. package/components/atoms/vc-col/vc-col.vue +22 -0
  9. package/components/atoms/vc-container/vc-container.stories.ts +31 -0
  10. package/components/atoms/vc-container/vc-container.vue +220 -0
  11. package/components/atoms/vc-hint/vc-hint.stories.ts +23 -0
  12. package/components/atoms/vc-hint/vc-hint.vue +11 -0
  13. package/components/atoms/vc-icon/vc-icon.stories.ts +32 -0
  14. package/components/atoms/vc-icon/vc-icon.vue +36 -0
  15. package/components/atoms/vc-image/vc-image.stories.ts +40 -0
  16. package/components/atoms/vc-image/vc-image.vue +122 -0
  17. package/components/atoms/vc-info-row/vc-info-row.vue +42 -0
  18. package/components/atoms/vc-label/vc-label.stories.ts +23 -0
  19. package/components/atoms/vc-label/vc-label.vue +49 -0
  20. package/components/atoms/vc-link/vc-link.stories.ts +30 -0
  21. package/components/atoms/vc-link/vc-link.vue +46 -0
  22. package/components/atoms/vc-loading/vc-loading.vue +30 -0
  23. package/components/atoms/vc-progress/vc-progress.stories.ts +25 -0
  24. package/components/atoms/vc-progress/vc-progress.vue +65 -0
  25. package/components/atoms/vc-row/vc-row.vue +13 -0
  26. package/components/atoms/vc-status/vc-status.stories.ts +26 -0
  27. package/components/atoms/vc-status/vc-status.vue +78 -0
  28. package/components/atoms/vc-status-icon/vc-status-icon.vue +21 -0
  29. package/components/atoms/vc-switch/vc-switch.stories.ts +27 -0
  30. package/components/atoms/vc-switch/vc-switch.vue +100 -0
  31. package/components/atoms/vc-widget/vc-widget.vue +85 -0
  32. package/components/index.ts +43 -0
  33. package/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue +103 -0
  34. package/components/molecules/vc-breadcrumbs/vc-breadcrumbs.stories.ts +39 -0
  35. package/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +21 -0
  36. package/components/molecules/vc-editor/vc-editor.vue +117 -0
  37. package/components/molecules/vc-file-upload/vc-file-upload.vue +134 -0
  38. package/components/molecules/vc-form/vc-form.stories.ts +23 -0
  39. package/components/molecules/vc-form/vc-form.vue +5 -0
  40. package/components/molecules/vc-input/vc-input.stories.ts +26 -0
  41. package/components/molecules/vc-input/vc-input.vue +443 -0
  42. package/components/molecules/vc-multivalue/vc-multivalue.vue +447 -0
  43. package/components/molecules/vc-notification/vc-notification.vue +101 -0
  44. package/components/molecules/vc-pagination/vc-pagination.stories.ts +23 -0
  45. package/components/molecules/vc-pagination/vc-pagination.vue +169 -0
  46. package/components/molecules/vc-rating/vc-rating.stories.ts +23 -0
  47. package/components/molecules/vc-rating/vc-rating.vue +77 -0
  48. package/components/molecules/vc-select/vc-select.stories.ts +25 -0
  49. package/components/molecules/vc-select/vc-select.vue +402 -0
  50. package/components/molecules/vc-slider/vc-slider.vue +106 -0
  51. package/components/molecules/vc-textarea/vc-textarea.stories.ts +23 -0
  52. package/components/molecules/vc-textarea/vc-textarea.vue +155 -0
  53. package/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +146 -0
  54. package/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +148 -0
  55. package/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +157 -0
  56. package/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +110 -0
  57. package/components/organisms/vc-app/vc-app.stories.ts +75 -0
  58. package/components/organisms/vc-app/vc-app.vue +171 -0
  59. package/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +126 -0
  60. package/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +223 -0
  61. package/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +67 -0
  62. package/components/organisms/vc-blade/vc-blade.stories.ts +46 -0
  63. package/components/organisms/vc-blade/vc-blade.vue +87 -0
  64. package/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +292 -0
  65. package/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +123 -0
  66. package/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue +93 -0
  67. package/components/organisms/vc-gallery/vc-gallery.vue +186 -0
  68. package/components/organisms/vc-login-form/vc-login-form.stories.ts +55 -0
  69. package/components/organisms/vc-login-form/vc-login-form.vue +48 -0
  70. package/components/organisms/vc-popup/vc-popup.stories.ts +23 -0
  71. package/components/organisms/vc-popup/vc-popup.vue +97 -0
  72. package/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +113 -0
  73. package/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue +29 -0
  74. package/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue +152 -0
  75. package/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue +272 -0
  76. package/components/organisms/vc-table/vc-table.stories.ts +99 -0
  77. package/components/organisms/vc-table/vc-table.vue +638 -0
  78. package/core/api/index.ts +1 -0
  79. package/core/api/platform.ts +8332 -0
  80. package/core/composables/index.ts +8 -0
  81. package/core/composables/useAutosave/index.ts +57 -0
  82. package/core/composables/useFunctions/debounce.ts +18 -0
  83. package/core/composables/useFunctions/delay.ts +7 -0
  84. package/core/composables/useFunctions/index.ts +21 -0
  85. package/core/composables/useFunctions/once.ts +14 -0
  86. package/core/composables/useFunctions/sleep.ts +4 -0
  87. package/core/composables/useFunctions/throttle.ts +17 -0
  88. package/core/composables/useI18n/index.ts +28 -0
  89. package/core/composables/useLogger/index.ts +24 -0
  90. package/core/composables/useNotifications/index.ts +116 -0
  91. package/core/composables/usePermissions/index.ts +32 -0
  92. package/core/composables/useSettings/index.ts +36 -0
  93. package/core/composables/useUser/index.ts +266 -0
  94. package/core/directives/autofocus/index.ts +9 -0
  95. package/core/directives/click-outside/index.ts +21 -0
  96. package/core/directives/index.ts +4 -0
  97. package/core/directives/loading/index.ts +28 -0
  98. package/core/directives/permissions/index.ts +20 -0
  99. package/core/plugins/index.ts +1 -0
  100. package/core/plugins/validation/index.ts +2 -0
  101. package/core/plugins/validation/rules.ts +196 -0
  102. package/core/types/index.ts +92 -0
  103. package/core/utilities/camelToSnake.ts +7 -0
  104. package/core/utilities/index.ts +1 -0
  105. package/dist/core/composables/useNotifications/index.d.ts +1 -1
  106. package/dist/core/composables/useNotifications/index.d.ts.map +1 -1
  107. package/dist/core/composables/useUser/index.d.ts +2 -2
  108. package/dist/core/composables/useUser/index.d.ts.map +1 -1
  109. package/dist/core/plugins/validation/index.d.ts.map +1 -1
  110. package/dist/core/types/index.d.ts +1 -1
  111. package/dist/core/types/index.d.ts.map +1 -1
  112. package/dist/framework.js +70 -97
  113. package/dist/framework.js.map +1 -1
  114. package/dist/shared/app-switcher/composables/useAppSwitcher/index.d.ts +1 -1
  115. package/dist/shared/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -1
  116. package/dist/shared/app-switcher/index.d.ts +2 -2
  117. package/dist/shared/app-switcher/index.d.ts.map +1 -1
  118. package/dist/shared/blade-navigation/composables/useBladeNavigation/index.d.ts +1 -1
  119. package/dist/shared/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
  120. package/dist/shared/blade-navigation/types/index.d.ts +1 -1
  121. package/dist/shared/blade-navigation/types/index.d.ts.map +1 -1
  122. package/dist/style.css +1 -1
  123. package/dist/tsconfig.tsbuildinfo +1 -0
  124. package/dist/vite.config.d.ts.map +1 -1
  125. package/package.json +11 -8
  126. package/shared/app-switcher/components/index.ts +1 -0
  127. package/shared/app-switcher/components/vc-app-switcher/vc-app-switcher.vue +90 -0
  128. package/shared/app-switcher/composables/index.ts +1 -0
  129. package/shared/app-switcher/composables/useAppSwitcher/index.ts +54 -0
  130. package/shared/app-switcher/index.ts +14 -0
  131. package/shared/assets/components/assets-details/assets-details.vue +138 -0
  132. package/shared/assets/components/index.ts +1 -0
  133. package/shared/assets/index.ts +19 -0
  134. package/shared/assets/locales/en.json +29 -0
  135. package/shared/assets/locales/index.ts +2 -0
  136. package/shared/blade-navigation/components/index.ts +1 -0
  137. package/shared/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +84 -0
  138. package/shared/blade-navigation/composables/index.ts +1 -0
  139. package/shared/blade-navigation/composables/useBladeNavigation/index.ts +216 -0
  140. package/shared/blade-navigation/index.ts +15 -0
  141. package/shared/blade-navigation/types/index.ts +52 -0
  142. package/shared/index.ts +16 -0
@@ -0,0 +1,443 @@
1
+ <template>
2
+ <div
3
+ class="vc-input"
4
+ :class="[
5
+ `vc-input_${type}`,
6
+ {
7
+ 'vc-input_clearable': clearable,
8
+ 'vc-input_error': errorMessage,
9
+ 'vc-input_disabled': disabled,
10
+ },
11
+ ]"
12
+ >
13
+ <!-- Input label -->
14
+ <VcLabel v-if="label" class="mb-2" :required="isRequired">
15
+ <span>{{ label }}</span>
16
+ <template v-if="tooltip" v-slot:tooltip>{{ tooltip }}</template>
17
+ </VcLabel>
18
+
19
+ <!-- Input field -->
20
+ <div class="vc-input__field-wrapper">
21
+ <input
22
+ class="vc-input__field"
23
+ :placeholder="placeholder"
24
+ :type="internalType"
25
+ :value="calcValue"
26
+ :disabled="disabled"
27
+ @input="onInput"
28
+ @blur="$emit('blur')"
29
+ ref="inputRef"
30
+ :max="max"
31
+ :name="name"
32
+ :maxlength="maxchars"
33
+ />
34
+
35
+ <!-- Dropdown button -->
36
+ <div v-if="options && options.length" class="vc-input__dropdown-wrap">
37
+ <div
38
+ @click.stop="showDrop"
39
+ aria-describedby="tooltip"
40
+ ref="toggleDropRef"
41
+ :class="[
42
+ { 'vc-input__dropdown-btn_disabled': disabled },
43
+ 'vc-input__dropdown-btn',
44
+ ]"
45
+ >
46
+ {{ optionsValue }}
47
+ </div>
48
+ <teleport to="body">
49
+ <div
50
+ v-if="dropActive"
51
+ ref="dropRef"
52
+ role="tooltip"
53
+ class="vc-input__dropdown"
54
+ v-click-outside="closeDrop"
55
+ >
56
+ <p class="vc-input__dropdown-title">{{ optionsTitle }}</p>
57
+ <input
58
+ class="vc-input__dropdown-search"
59
+ v-model="search"
60
+ ref="searchInput"
61
+ />
62
+ <ul class="vc-input__dropdown-list">
63
+ <li v-for="(item, i) in searchFilter" :key="i">
64
+ <button
65
+ @click="onItemSelect(item)"
66
+ :class="[
67
+ 'vc-input__dropdown-selector',
68
+ {
69
+ 'vc-input__dropdown-selector-active':
70
+ item[displayProperty] === optionsValue,
71
+ },
72
+ ]"
73
+ >
74
+ {{ item[displayProperty] }}
75
+ </button>
76
+ </li>
77
+ </ul>
78
+ </div>
79
+ </teleport>
80
+ </div>
81
+
82
+ <!-- Input clear button -->
83
+ <div
84
+ v-if="clearable && modelValue && !disabled && type !== 'password'"
85
+ class="vc-input__clear"
86
+ @click="onReset"
87
+ >
88
+ <VcIcon size="s" icon="fas fa-times"></VcIcon>
89
+ </div>
90
+
91
+ <div
92
+ class="vc-input__showhide"
93
+ v-if="type === 'password' && internalType === 'password'"
94
+ @click="internalType = 'text'"
95
+ >
96
+ <VcIcon size="s" icon="fas fa-eye-slash"></VcIcon>
97
+ </div>
98
+
99
+ <div
100
+ class="vc-input__showhide"
101
+ v-if="type === 'password' && internalType === 'text'"
102
+ @click="internalType = 'password'"
103
+ >
104
+ <VcIcon size="s" icon="fas fa-eye"></VcIcon>
105
+ </div>
106
+ </div>
107
+
108
+ <slot v-if="errorMessage" name="error">
109
+ <VcHint class="vc-input__error">
110
+ {{ errorMessage }}
111
+ </VcHint>
112
+ </slot>
113
+ <slot v-if="fieldDescription" name="error">
114
+ <VcHint class="vc-input__desc">
115
+ {{ fieldDescription }}
116
+ </VcHint>
117
+ </slot>
118
+ </div>
119
+ </template>
120
+
121
+ <script lang="ts" setup>
122
+ import {
123
+ computed,
124
+ getCurrentInstance,
125
+ nextTick,
126
+ onMounted,
127
+ ref,
128
+ unref,
129
+ watch,
130
+ } from "vue";
131
+ import { GenericValidateFunction } from "vee-validate";
132
+ import { VcIcon, VcLabel } from "@/components";
133
+ import { IValidationRules } from "@/core/types";
134
+ import { createPopper, Instance } from "@popperjs/core";
135
+ import {
136
+ useCurrencyInput,
137
+ UseCurrencyInput,
138
+ parse,
139
+ CurrencyDisplay,
140
+ } from "vue-currency-input";
141
+ import { clickOutside as vClickOutside } from "@/core/directives";
142
+
143
+ export type ValueType = string | number | Date | null;
144
+
145
+ export interface Props {
146
+ placeholder?: string;
147
+ modelValue?: ValueType;
148
+ clearable?: boolean;
149
+ isRequired?: boolean;
150
+ disabled?: boolean;
151
+ type?: string;
152
+ label?: string;
153
+ tooltip?: string;
154
+ name?: string;
155
+ rules?:
156
+ | string
157
+ | IValidationRules
158
+ | GenericValidateFunction<ValueType>
159
+ | GenericValidateFunction<ValueType>[];
160
+ currency?: boolean;
161
+ options?: Record<string, string>[];
162
+ optionsTitle?: string;
163
+ optionsValue?: string;
164
+ keyProperty?: string;
165
+ displayProperty?: string;
166
+ fieldDescription?: string;
167
+ maxchars?: string;
168
+ max?: string | number;
169
+ errorMessage?: string;
170
+ }
171
+
172
+ export interface Emits {
173
+ (event: "update:modelValue", value: ValueType): void;
174
+ (event: "update:optionsValue", value: string): void;
175
+ (event: 'blur'): void;
176
+ }
177
+
178
+ const props = withDefaults(defineProps<Props>(), {
179
+ placeholder: "",
180
+ modelValue: null,
181
+ clearable: false,
182
+ isRequired: false,
183
+ disabled: false,
184
+ type: "text",
185
+ name: "Field",
186
+ currency: false,
187
+ options: () => [],
188
+ optionsTitle: "Select",
189
+ optionsValue: "",
190
+ keyProperty: "id",
191
+ displayProperty: "title",
192
+ fieldDescription: "",
193
+ maxchars: "1024",
194
+ });
195
+
196
+ const emit = defineEmits<Emits>();
197
+
198
+ let currencyConverter: UseCurrencyInput | undefined = undefined;
199
+ const internalType = ref(unref(props.type));
200
+ const toggleDropRef = ref();
201
+ const dropRef = ref();
202
+ const dropActive = ref(false);
203
+ const instance = getCurrentInstance();
204
+ const popper = ref<Instance>();
205
+ const search = ref("");
206
+ const searchInput = ref();
207
+ const calcValue = computed(() => {
208
+ if (props.currency) {
209
+ return currencyConverter?.formattedValue.value;
210
+ } else {
211
+ return props.modelValue;
212
+ }
213
+ });
214
+
215
+ // Init currency composable if input type === currency (created hook)
216
+ if (props.currency) {
217
+ currencyConverter = useCurrencyInput({
218
+ currency: props.optionsValue || "USD",
219
+ autoSign: false,
220
+ currencyDisplay: CurrencyDisplay.hidden,
221
+ });
222
+ }
223
+
224
+ onMounted(() => {
225
+ if (!props.modelValue && props.currency) {
226
+ currencyConverter && currencyConverter.setValue(null);
227
+ }
228
+ });
229
+
230
+ // Change currency settings
231
+ watch(
232
+ () => props.optionsValue,
233
+ (newVal) => {
234
+ currencyConverter &&
235
+ currencyConverter.setOptions({
236
+ currency: newVal,
237
+ autoSign: false,
238
+ currencyDisplay: CurrencyDisplay.hidden,
239
+ });
240
+ }
241
+ );
242
+
243
+ const searchFilter = computed(() => {
244
+ return props.options.filter((opt) =>
245
+ opt[props.displayProperty]
246
+ .toLowerCase()
247
+ .includes(search.value.toLowerCase())
248
+ );
249
+ });
250
+
251
+ const inputRef = currencyConverter && currencyConverter.inputRef;
252
+
253
+ watch(
254
+ () => props.modelValue,
255
+ (value) => {
256
+ let initialValue = unref(value);
257
+ if (
258
+ initialValue &&
259
+ initialValue.toString().length >= parseInt(props.maxchars)
260
+ ) {
261
+ initialValue.toString().slice(0, parseInt(props.maxchars));
262
+
263
+ return;
264
+ }
265
+
266
+ emit("update:modelValue", initialValue);
267
+ }
268
+ );
269
+
270
+ function showDrop() {
271
+ if (!dropActive.value && !props.disabled) {
272
+ dropActive.value = true;
273
+ nextTick(() => {
274
+ searchInput.value.focus();
275
+ popper.value = createPopper(toggleDropRef.value, dropRef.value, {
276
+ placement: "bottom-end",
277
+ modifiers: [
278
+ {
279
+ name: "offset",
280
+ options: {
281
+ offset: [13, 15],
282
+ },
283
+ },
284
+ ],
285
+ });
286
+ });
287
+ } else {
288
+ closeDrop();
289
+ }
290
+ }
291
+
292
+ function closeDrop() {
293
+ dropActive.value = false;
294
+ search.value = "";
295
+ popper.value?.destroy();
296
+ }
297
+
298
+ function onItemSelect(item: { [x: string]: string }) {
299
+ emit("update:optionsValue", item[props.keyProperty]);
300
+ closeDrop();
301
+ }
302
+
303
+ // Handle input event to properly validate value and emit changes
304
+ function onInput(e: Event) {
305
+ const newValue = (e.target as HTMLInputElement).value;
306
+ if (newValue) {
307
+ if (props.currency) {
308
+ const parsed = parse(newValue, { currency: props.optionsValue });
309
+ emit("update:modelValue", parsed);
310
+ } else {
311
+ emit("update:modelValue", newValue);
312
+ }
313
+ } else {
314
+ emit("update:modelValue", null);
315
+ }
316
+ }
317
+
318
+ // Handle input event to propertly reset value and emit changes
319
+ function onReset() {
320
+ if (props.currency) {
321
+ currencyConverter && currencyConverter.setValue(null);
322
+ }
323
+ emit("update:modelValue", null);
324
+ }
325
+ </script>
326
+
327
+ <style lang="scss">
328
+ :root {
329
+ --input-height: 38px;
330
+ --input-border-radius: 3px;
331
+ --input-border-color: #d3dbe9;
332
+ --input-border-color-error: #f14e4e;
333
+ --input-background-color: #ffffff;
334
+ --input-placeholder-color: #a5a5a5;
335
+ --input-clear-color: #43b0e6;
336
+ --input-clear-color-hover: #319ed4;
337
+ }
338
+
339
+ .vc-input {
340
+ @apply overflow-hidden;
341
+
342
+ &_date,
343
+ &_datetime-local {
344
+ @apply max-w-[220px];
345
+
346
+ .vc-app_mobile & {
347
+ @apply max-w-full;
348
+ }
349
+ }
350
+
351
+ &__field-wrapper {
352
+ @apply border border-solid border-[color:var(--input-border-color)]
353
+ rounded-[var(--input-border-radius)]
354
+ bg-[color:var(--input-background-color)] flex items-stretch;
355
+ }
356
+
357
+ &_error &__field-wrapper {
358
+ @apply border border-solid border-[color:var(--input-border-color-error)];
359
+ }
360
+
361
+ &__error {
362
+ @apply mt-1 [--hint-color:var(--input-border-color-error)];
363
+ }
364
+
365
+ &__desc {
366
+ @apply text-[color:var(--multivalue-placeholder-color)] mt-1 break-words p-0;
367
+ }
368
+
369
+ &__field {
370
+ @apply border-none outline-none h-[var(--input-height)] min-w-0 box-border grow pl-3;
371
+
372
+ &::-webkit-input-placeholder {
373
+ @apply text-[color:var(--input-placeholder-color)];
374
+ }
375
+
376
+ &::-moz-placeholder {
377
+ @apply text-[color:var(--input-placeholder-color)];
378
+ }
379
+
380
+ &::-ms-placeholder {
381
+ @apply text-[color:var(--input-placeholder-color)];
382
+ }
383
+
384
+ &::placeholder {
385
+ @apply text-[color:var(--input-placeholder-color)];
386
+ }
387
+
388
+ &::-ms-reveal,
389
+ &::-ms-clear {
390
+ @apply hidden;
391
+ }
392
+ }
393
+
394
+ &__clear {
395
+ @apply cursor-pointer text-[color:var(--input-clear-color)] hover:text-[color:var(--input-clear-color-hover)] px-3 flex items-center;
396
+ }
397
+
398
+ &__showhide {
399
+ @apply cursor-pointer text-[color:var(--input-placeholder-color)] hover:text-[color:var(--input-clear-color-hover)] px-3 flex items-center;
400
+ }
401
+
402
+ &__dropdown-wrap {
403
+ @apply relative px-3 flex items-center;
404
+ }
405
+
406
+ &__dropdown-btn {
407
+ @apply text-[color:var(--input-clear-color)] not-italic font-medium text-[13px] leading-[20px] cursor-pointer;
408
+
409
+ &_disabled {
410
+ @apply text-[#7e8e9d] cursor-default;
411
+ }
412
+ }
413
+
414
+ &__dropdown {
415
+ @apply absolute bg-white shadow-[1px_1px_11px_rgba(141,152,163,0.6)] rounded-[3px] p-[11px] w-[120px] box-border;
416
+ }
417
+
418
+ &__dropdown-title {
419
+ @apply not-italic font-normal text-base leading-[20px] text-[#333333] p-0 mb-[7px];
420
+ }
421
+
422
+ &__dropdown-search {
423
+ @apply bg-white border border-solid border-[#eaecf2] box-border rounded-[4px] h-8 w-full outline-none px-2;
424
+ }
425
+
426
+ &__dropdown-list {
427
+ @apply list-none p-0 mt-2;
428
+ }
429
+
430
+ &__dropdown-selector {
431
+ @apply border-none bg-transparent p-[9px] text-left w-full cursor-pointer text-lg rounded-[3px] hover:bg-[#eff7fc];
432
+
433
+ &-active {
434
+ @apply bg-[#dfeef9];
435
+ }
436
+ }
437
+
438
+ &_disabled &__field-wrapper,
439
+ &_disabled &__field {
440
+ @apply bg-[#fafafa] text-[#424242];
441
+ }
442
+ }
443
+ </style>