@skyservice-developers/vue-dev-kit 1.5.8 → 1.5.10

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyservice-developers/vue-dev-kit",
3
- "version": "1.5.8",
3
+ "version": "1.5.10",
4
4
  "description": "Vue 2 and Vue 3 developer toolkit - components and helpers",
5
5
  "type": "module",
6
6
  "main": "./dist/vue3/vue-dev-kit.cjs",
@@ -0,0 +1,327 @@
1
+ <template>
2
+ <div
3
+ ref="root"
4
+ class="sky-select"
5
+ :class="{
6
+ 'sky-select-block': block,
7
+ 'sky-select-open': open,
8
+ 'sky-select-disabled': disabled,
9
+ }"
10
+ >
11
+ <button
12
+ type="button"
13
+ class="sky-select-trigger"
14
+ :disabled="disabled"
15
+ @click="toggle"
16
+ @keydown="onKeydown"
17
+ >
18
+ <span
19
+ class="sky-select-value"
20
+ :class="{ 'sky-select-placeholder': selectedOption === null }"
21
+ >
22
+ {{ selectedOption ? selectedOption.label : placeholder }}
23
+ </span>
24
+ <svg class="sky-select-chevron" viewBox="0 0 16 16" fill="none" aria-hidden="true">
25
+ <path d="M4 6l4 4 4-4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
26
+ </svg>
27
+ </button>
28
+
29
+ <template v-if="open">
30
+ <portal v-if="teleport" to="sky-select-portal">
31
+ <div
32
+ class="sky-select-dropdown sky-select-dropdown-teleported"
33
+ :style="dropdownStyle"
34
+ >
35
+ <div
36
+ v-for="(option, idx) in normalizedOptions"
37
+ :key="option.value"
38
+ class="sky-select-option"
39
+ :class="{
40
+ 'sky-select-option-selected': option.value === value,
41
+ 'sky-select-option-focused': idx === focusedIdx,
42
+ }"
43
+ @click="select(option)"
44
+ @mouseenter="focusedIdx = idx"
45
+ >
46
+ <span>{{ option.label }}</span>
47
+ <svg v-if="option.value === value" class="sky-select-check" viewBox="0 0 16 16" fill="none" aria-hidden="true">
48
+ <path d="M3 8l4 4 6-6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
49
+ </svg>
50
+ </div>
51
+ </div>
52
+ </portal>
53
+ <div v-else class="sky-select-dropdown">
54
+ <div
55
+ v-for="(option, idx) in normalizedOptions"
56
+ :key="option.value"
57
+ class="sky-select-option"
58
+ :class="{
59
+ 'sky-select-option-selected': option.value === value,
60
+ 'sky-select-option-focused': idx === focusedIdx,
61
+ }"
62
+ @click="select(option)"
63
+ @mouseenter="focusedIdx = idx"
64
+ >
65
+ <span>{{ option.label }}</span>
66
+ <svg v-if="option.value === value" class="sky-select-check" viewBox="0 0 16 16" fill="none" aria-hidden="true">
67
+ <path d="M3 8l4 4 6-6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
68
+ </svg>
69
+ </div>
70
+ </div>
71
+ </template>
72
+ </div>
73
+ </template>
74
+
75
+ <script>
76
+ export default {
77
+ name: 'SkySelect',
78
+ inheritAttrs: false,
79
+ props: {
80
+ value: {
81
+ default: null,
82
+ },
83
+ options: {
84
+ type: Array,
85
+ default: () => [],
86
+ },
87
+ placeholder: {
88
+ type: String,
89
+ default: '',
90
+ },
91
+ disabled: {
92
+ type: Boolean,
93
+ default: false,
94
+ },
95
+ block: {
96
+ type: Boolean,
97
+ default: false,
98
+ },
99
+ teleport: {
100
+ type: Boolean,
101
+ default: false,
102
+ },
103
+ },
104
+ data() {
105
+ return {
106
+ open: false,
107
+ focusedIdx: -1,
108
+ dropdownStyle: {},
109
+ };
110
+ },
111
+ computed: {
112
+ normalizedOptions() {
113
+ return this.options.map((opt) =>
114
+ typeof opt === 'string' ? { label: opt, value: opt } : opt
115
+ );
116
+ },
117
+ selectedOption() {
118
+ return this.normalizedOptions.find((o) => o.value === this.value) ?? null;
119
+ },
120
+ },
121
+ methods: {
122
+ calcDropdownStyle() {
123
+ if (!this.teleport || !this.$refs.root) return;
124
+ const rect = this.$refs.root.getBoundingClientRect();
125
+ this.dropdownStyle = {
126
+ position: 'fixed',
127
+ top: `${rect.bottom + 4}px`,
128
+ left: `${rect.left}px`,
129
+ width: `${rect.width}px`,
130
+ zIndex: 'var(--sky-select-dropdown-z-index, 9999)',
131
+ };
132
+ },
133
+ toggle() {
134
+ if (this.disabled) return;
135
+ this.open ? this.close() : this.openDropdown();
136
+ },
137
+ openDropdown() {
138
+ this.open = true;
139
+ this.focusedIdx = this.normalizedOptions.findIndex((o) => o.value === this.value);
140
+ this.calcDropdownStyle();
141
+ this.$nextTick(() => document.addEventListener('mousedown', this.onOutsideClick));
142
+ if (this.teleport) {
143
+ window.addEventListener('scroll', this.onScrollOrResize, true);
144
+ window.addEventListener('resize', this.onScrollOrResize);
145
+ }
146
+ },
147
+ close() {
148
+ this.open = false;
149
+ document.removeEventListener('mousedown', this.onOutsideClick);
150
+ window.removeEventListener('scroll', this.onScrollOrResize, true);
151
+ window.removeEventListener('resize', this.onScrollOrResize);
152
+ },
153
+ select(option) {
154
+ this.$emit('input', option.value);
155
+ this.close();
156
+ },
157
+ onOutsideClick(e) {
158
+ if (!this.$refs.root.contains(e.target)) this.close();
159
+ },
160
+ onScrollOrResize() {
161
+ this.calcDropdownStyle();
162
+ },
163
+ onKeydown(e) {
164
+ if (!this.open) {
165
+ if (e.key === 'Enter' || e.key === ' ') {
166
+ e.preventDefault();
167
+ this.openDropdown();
168
+ }
169
+ return;
170
+ }
171
+ if (e.key === 'Escape') {
172
+ this.close();
173
+ } else if (e.key === 'ArrowDown') {
174
+ e.preventDefault();
175
+ this.focusedIdx = Math.min(this.focusedIdx + 1, this.normalizedOptions.length - 1);
176
+ } else if (e.key === 'ArrowUp') {
177
+ e.preventDefault();
178
+ this.focusedIdx = Math.max(this.focusedIdx - 1, 0);
179
+ } else if (e.key === 'Enter') {
180
+ e.preventDefault();
181
+ if (this.focusedIdx >= 0) this.select(this.normalizedOptions[this.focusedIdx]);
182
+ }
183
+ },
184
+ },
185
+ beforeDestroy() {
186
+ document.removeEventListener('mousedown', this.onOutsideClick);
187
+ window.removeEventListener('scroll', this.onScrollOrResize, true);
188
+ window.removeEventListener('resize', this.onScrollOrResize);
189
+ },
190
+ };
191
+ </script>
192
+
193
+ <style scoped>
194
+ .sky-select {
195
+ position: relative;
196
+ display: inline-block;
197
+ font-size: var(--sky-select-font-size, 14px);
198
+ }
199
+
200
+ .sky-select-block {
201
+ display: block;
202
+ width: 100%;
203
+ }
204
+
205
+ .sky-select-block .sky-select-trigger {
206
+ width: 100%;
207
+ }
208
+
209
+ /* Trigger */
210
+ .sky-select-trigger {
211
+ display: inline-flex;
212
+ align-items: center;
213
+ justify-content: space-between;
214
+ gap: 8px;
215
+ width: 100%;
216
+ padding: var(--sky-select-padding, 10px 14px);
217
+ background: var(--sky-select-bg, #fff);
218
+ border: var(--sky-select-border, 1px solid #d1d5db);
219
+ border-radius: var(--sky-select-radius, 6px);
220
+ font-size: inherit;
221
+ font-weight: var(--sky-select-font-weight, 400);
222
+ color: var(--sky-select-color, #374151);
223
+ cursor: pointer;
224
+ user-select: none;
225
+ text-align: left;
226
+ white-space: nowrap;
227
+ }
228
+
229
+ .sky-select-trigger:hover:not(:disabled) {
230
+ border-color: var(--sky-select-border-hover, #9ca3af);
231
+ }
232
+
233
+ .sky-select-open .sky-select-trigger {
234
+ border-color: var(--sky-select-border-focus, #6b7280);
235
+ outline: none;
236
+ }
237
+
238
+ .sky-select-trigger:focus-visible {
239
+ outline: 2px solid var(--sky-select-focus-ring, #24973f);
240
+ outline-offset: 2px;
241
+ }
242
+
243
+ .sky-select-disabled .sky-select-trigger {
244
+ opacity: 0.6;
245
+ cursor: not-allowed;
246
+ }
247
+
248
+ /* Value / Placeholder */
249
+ .sky-select-value {
250
+ overflow: hidden;
251
+ text-overflow: ellipsis;
252
+ flex: 1;
253
+ min-width: 0;
254
+ }
255
+
256
+ .sky-select-placeholder {
257
+ color: var(--sky-select-placeholder-color, #9ca3af);
258
+ }
259
+
260
+ /* Chevron */
261
+ .sky-select-chevron {
262
+ width: 16px;
263
+ height: 16px;
264
+ flex-shrink: 0;
265
+ color: var(--sky-select-chevron-color, #6b7280);
266
+ transition: transform 0.15s ease;
267
+ }
268
+
269
+ .sky-select-open .sky-select-chevron {
270
+ transform: rotate(180deg);
271
+ }
272
+
273
+ /* Dropdown */
274
+ .sky-select-dropdown {
275
+ position: absolute;
276
+ top: calc(100% + 4px);
277
+ left: 0;
278
+ right: 0;
279
+ z-index: var(--sky-select-dropdown-z-index, 100);
280
+ background: var(--sky-select-dropdown-bg, #fff);
281
+ border: var(--sky-select-dropdown-border, 1px solid #d1d5db);
282
+ border-radius: var(--sky-select-dropdown-radius, 6px);
283
+ box-shadow: var(--sky-select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));
284
+ max-height: var(--sky-select-dropdown-max-height, 220px);
285
+ overflow-y: auto;
286
+ padding: 4px;
287
+ }
288
+
289
+ .sky-select-dropdown-teleported {
290
+ position: fixed;
291
+ background: var(--sky-select-dropdown-bg, #fff);
292
+ border: var(--sky-select-dropdown-border, 1px solid #d1d5db);
293
+ border-radius: var(--sky-select-dropdown-radius, 6px);
294
+ box-shadow: var(--sky-select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));
295
+ max-height: var(--sky-select-dropdown-max-height, 220px);
296
+ overflow-y: auto;
297
+ padding: 4px;
298
+ }
299
+
300
+ /* Option */
301
+ .sky-select-option {
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: space-between;
305
+ padding: var(--sky-select-option-padding, 9px 10px);
306
+ border-radius: var(--sky-select-option-radius, 4px);
307
+ cursor: pointer;
308
+ color: var(--sky-select-option-color, #374151);
309
+ }
310
+
311
+ .sky-select-option-focused,
312
+ .sky-select-option:hover {
313
+ background: var(--sky-select-option-hover-bg, #f3f4f6);
314
+ }
315
+
316
+ .sky-select-option-selected {
317
+ color: var(--sky-select-option-selected-color, #24973f);
318
+ font-weight: 500;
319
+ }
320
+
321
+ .sky-select-check {
322
+ width: 14px;
323
+ height: 14px;
324
+ flex-shrink: 0;
325
+ color: var(--sky-select-check-color, #24973f);
326
+ }
327
+ </style>
@@ -2,4 +2,5 @@ export { default as Header } from './Header.vue'
2
2
  export { default as Modal } from './Modal.vue'
3
3
  export { default as Dialog } from './Dialog.vue'
4
4
  export { default as SkyButton } from './SkyButton.vue'
5
+ export { default as SkySelect } from './SkySelect.vue'
5
6
  export { default as BaseTeleport } from './BaseTeleport.vue'
@@ -0,0 +1,374 @@
1
+ <template>
2
+ <div
3
+ ref="root"
4
+ class="sky-select"
5
+ :class="{
6
+ 'sky-select-block': block,
7
+ 'sky-select-open': open,
8
+ 'sky-select-disabled': disabled,
9
+ }"
10
+ >
11
+ <button
12
+ type="button"
13
+ class="sky-select-trigger"
14
+ :disabled="disabled"
15
+ @click="toggle"
16
+ @keydown="onKeydown"
17
+ >
18
+ <span
19
+ class="sky-select-value"
20
+ :class="{ 'sky-select-placeholder': selectedOption === null }"
21
+ >
22
+ {{ selectedOption ? selectedOption.label : placeholder }}
23
+ </span>
24
+ <svg
25
+ class="sky-select-chevron"
26
+ viewBox="0 0 16 16"
27
+ fill="none"
28
+ aria-hidden="true"
29
+ >
30
+ <path
31
+ d="M4 6l4 4 4-4"
32
+ stroke="currentColor"
33
+ stroke-width="1.5"
34
+ stroke-linecap="round"
35
+ stroke-linejoin="round"
36
+ />
37
+ </svg>
38
+ </button>
39
+
40
+ <template v-if="open">
41
+ <Teleport v-if="teleport" to="body">
42
+ <div
43
+ class="sky-select-dropdown sky-select-dropdown-teleported"
44
+ :style="dropdownStyle"
45
+ >
46
+ <div
47
+ v-for="(option, idx) in normalizedOptions"
48
+ :key="option.value"
49
+ class="sky-select-option"
50
+ :class="{
51
+ 'sky-select-option-selected': option.value === modelValue,
52
+ 'sky-select-option-focused': idx === focusedIdx,
53
+ }"
54
+ @click="select(option)"
55
+ @mouseenter="focusedIdx = idx"
56
+ >
57
+ <span>{{ option.label }}</span>
58
+ <svg
59
+ v-if="option.value === modelValue"
60
+ class="sky-select-check"
61
+ viewBox="0 0 16 16"
62
+ fill="none"
63
+ aria-hidden="true"
64
+ >
65
+ <path
66
+ d="M3 8l4 4 6-6"
67
+ stroke="currentColor"
68
+ stroke-width="1.5"
69
+ stroke-linecap="round"
70
+ stroke-linejoin="round"
71
+ />
72
+ </svg>
73
+ </div>
74
+ </div>
75
+ </Teleport>
76
+ <div v-else class="sky-select-dropdown">
77
+ <div
78
+ v-for="(option, idx) in normalizedOptions"
79
+ :key="option.value"
80
+ class="sky-select-option"
81
+ :class="{
82
+ 'sky-select-option-selected': option.value === modelValue,
83
+ 'sky-select-option-focused': idx === focusedIdx,
84
+ }"
85
+ @click="select(option)"
86
+ @mouseenter="focusedIdx = idx"
87
+ >
88
+ <span>{{ option.label }}</span>
89
+ <svg
90
+ v-if="option.value === modelValue"
91
+ class="sky-select-check"
92
+ viewBox="0 0 16 16"
93
+ fill="none"
94
+ aria-hidden="true"
95
+ >
96
+ <path
97
+ d="M3 8l4 4 6-6"
98
+ stroke="currentColor"
99
+ stroke-width="1.5"
100
+ stroke-linecap="round"
101
+ stroke-linejoin="round"
102
+ />
103
+ </svg>
104
+ </div>
105
+ </div>
106
+ </template>
107
+ </div>
108
+ </template>
109
+
110
+ <script setup>
111
+ import { ref, computed, onBeforeUnmount } from "vue";
112
+
113
+ const props = defineProps({
114
+ modelValue: {
115
+ default: null,
116
+ },
117
+ options: {
118
+ type: Array,
119
+ default: () => [],
120
+ },
121
+ placeholder: {
122
+ type: String,
123
+ default: "",
124
+ },
125
+ disabled: {
126
+ type: Boolean,
127
+ default: false,
128
+ },
129
+ block: {
130
+ type: Boolean,
131
+ default: false,
132
+ },
133
+ teleport: {
134
+ type: Boolean,
135
+ default: false,
136
+ },
137
+ });
138
+
139
+ const emit = defineEmits(["update:modelValue"]);
140
+
141
+ const root = ref(null);
142
+ const open = ref(false);
143
+ const focusedIdx = ref(-1);
144
+ const dropdownStyle = ref({});
145
+
146
+ const normalizedOptions = computed(() =>
147
+ props.options.map((opt) =>
148
+ typeof opt === "string" ? { label: opt, value: opt } : opt,
149
+ ),
150
+ );
151
+
152
+ const selectedOption = computed(
153
+ () =>
154
+ normalizedOptions.value.find((o) => o.value === props.modelValue) ?? null,
155
+ );
156
+
157
+ function calcDropdownStyle() {
158
+ if (!props.teleport || !root.value) return;
159
+ const rect = root.value.getBoundingClientRect();
160
+ dropdownStyle.value = {
161
+ position: "fixed",
162
+ top: `${rect.bottom + 4}px`,
163
+ left: `${rect.left}px`,
164
+ width: `${rect.width}px`,
165
+ zIndex: "var(--sky-select-dropdown-z-index, 9999)",
166
+ };
167
+ }
168
+
169
+ function toggle() {
170
+ if (props.disabled) return;
171
+ open.value ? close() : openDropdown();
172
+ }
173
+
174
+ function openDropdown() {
175
+ open.value = true;
176
+ focusedIdx.value = normalizedOptions.value.findIndex(
177
+ (o) => o.value === props.modelValue,
178
+ );
179
+ calcDropdownStyle();
180
+ document.addEventListener("mousedown", onOutsideClick);
181
+ if (props.teleport) {
182
+ window.addEventListener("scroll", onScrollOrResize, true);
183
+ window.addEventListener("resize", onScrollOrResize);
184
+ }
185
+ }
186
+
187
+ function close() {
188
+ open.value = false;
189
+ document.removeEventListener("mousedown", onOutsideClick);
190
+ window.removeEventListener("scroll", onScrollOrResize, true);
191
+ window.removeEventListener("resize", onScrollOrResize);
192
+ }
193
+
194
+ function select(option) {
195
+ emit("update:modelValue", option.value);
196
+ close();
197
+ }
198
+
199
+ function onOutsideClick(e) {
200
+ if (!root.value?.contains(e.target)) close();
201
+ }
202
+
203
+ function onScrollOrResize() {
204
+ calcDropdownStyle();
205
+ }
206
+
207
+ function onKeydown(e) {
208
+ if (!open.value) {
209
+ if (e.key === "Enter" || e.key === " ") {
210
+ e.preventDefault();
211
+ openDropdown();
212
+ }
213
+ return;
214
+ }
215
+ if (e.key === "Escape") {
216
+ close();
217
+ } else if (e.key === "ArrowDown") {
218
+ e.preventDefault();
219
+ focusedIdx.value = Math.min(
220
+ focusedIdx.value + 1,
221
+ normalizedOptions.value.length - 1,
222
+ );
223
+ } else if (e.key === "ArrowUp") {
224
+ e.preventDefault();
225
+ focusedIdx.value = Math.max(focusedIdx.value - 1, 0);
226
+ } else if (e.key === "Enter") {
227
+ e.preventDefault();
228
+ if (focusedIdx.value >= 0)
229
+ select(normalizedOptions.value[focusedIdx.value]);
230
+ }
231
+ }
232
+
233
+ onBeforeUnmount(() => {
234
+ document.removeEventListener("mousedown", onOutsideClick);
235
+ window.removeEventListener("scroll", onScrollOrResize, true);
236
+ window.removeEventListener("resize", onScrollOrResize);
237
+ });
238
+ </script>
239
+
240
+ <style scoped>
241
+ .sky-select {
242
+ position: relative;
243
+ display: inline-block;
244
+ font-size: var(--sky-select-font-size, 14px);
245
+ }
246
+
247
+ .sky-select-block {
248
+ display: block;
249
+ width: 100%;
250
+ }
251
+
252
+ .sky-select-block .sky-select-trigger {
253
+ width: 100%;
254
+ }
255
+
256
+ /* Trigger */
257
+ .sky-select-trigger {
258
+ display: inline-flex;
259
+ align-items: center;
260
+ justify-content: space-between;
261
+ gap: 8px;
262
+ width: 100%;
263
+ padding: var(--sky-select-padding, 10px 14px);
264
+ background: var(--sky-select-bg, #fff);
265
+ border: var(--sky-select-border, 1px solid #d1d5db);
266
+ border-radius: var(--sky-select-radius, 6px);
267
+ font-size: inherit;
268
+ font-weight: var(--sky-select-font-weight, 400);
269
+ color: var(--sky-select-color, #374151);
270
+ cursor: pointer;
271
+ user-select: none;
272
+ text-align: left;
273
+ white-space: nowrap;
274
+ }
275
+
276
+ .sky-select-trigger:hover:not(:disabled) {
277
+ border-color: var(--sky-select-border-hover, #9ca3af);
278
+ }
279
+
280
+ .sky-select-open .sky-select-trigger {
281
+ border-color: var(--sky-select-border-focus, #6b7280);
282
+ outline: none;
283
+ }
284
+
285
+ .sky-select-trigger:focus-visible {
286
+ outline: 2px solid var(--sky-select-focus-ring, #24973f);
287
+ outline-offset: 2px;
288
+ }
289
+
290
+ .sky-select-disabled .sky-select-trigger {
291
+ opacity: 0.6;
292
+ cursor: not-allowed;
293
+ }
294
+
295
+ /* Value / Placeholder */
296
+ .sky-select-value {
297
+ overflow: hidden;
298
+ text-overflow: ellipsis;
299
+ flex: 1;
300
+ min-width: 0;
301
+ }
302
+
303
+ .sky-select-placeholder {
304
+ color: var(--sky-select-placeholder-color, #9ca3af);
305
+ }
306
+
307
+ /* Chevron */
308
+ .sky-select-chevron {
309
+ width: 16px;
310
+ height: 16px;
311
+ flex-shrink: 0;
312
+ color: var(--sky-select-chevron-color, #6b7280);
313
+ transition: transform 0.15s ease;
314
+ }
315
+
316
+ .sky-select-open .sky-select-chevron {
317
+ transform: rotate(180deg);
318
+ }
319
+
320
+ /* Dropdown */
321
+ .sky-select-dropdown {
322
+ position: absolute;
323
+ top: calc(100% + 4px);
324
+ left: 0;
325
+ right: 0;
326
+ z-index: var(--sky-select-dropdown-z-index, 100);
327
+ background: var(--sky-select-dropdown-bg, #fff);
328
+ border: var(--sky-select-dropdown-border, 1px solid #d1d5db);
329
+ border-radius: var(--sky-select-dropdown-radius, 6px);
330
+ box-shadow: var(--sky-select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));
331
+ max-height: var(--sky-select-dropdown-max-height, 220px);
332
+ overflow-y: auto;
333
+ padding: 4px;
334
+ }
335
+
336
+ .sky-select-dropdown-teleported {
337
+ position: fixed;
338
+ background: var(--sky-select-dropdown-bg, #fff);
339
+ border: var(--sky-select-dropdown-border, 1px solid #d1d5db);
340
+ border-radius: var(--sky-select-dropdown-radius, 6px);
341
+ box-shadow: var(--sky-select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));
342
+ max-height: var(--sky-select-dropdown-max-height, 220px);
343
+ overflow-y: auto;
344
+ padding: 4px;
345
+ }
346
+
347
+ /* Option */
348
+ .sky-select-option {
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: space-between;
352
+ padding: var(--sky-select-option-padding, 9px 10px);
353
+ border-radius: var(--sky-select-option-radius, 4px);
354
+ cursor: pointer;
355
+ color: var(--sky-select-option-color, #374151);
356
+ }
357
+
358
+ .sky-select-option-focused,
359
+ .sky-select-option:hover {
360
+ background: var(--sky-select-option-hover-bg, #f3f4f6);
361
+ }
362
+
363
+ .sky-select-option-selected {
364
+ color: var(--sky-select-option-selected-color, #24973f);
365
+ font-weight: 500;
366
+ }
367
+
368
+ .sky-select-check {
369
+ width: 14px;
370
+ height: 14px;
371
+ flex-shrink: 0;
372
+ color: var(--sky-select-check-color, #24973f);
373
+ }
374
+ </style>