@smilodon/core 1.3.4 → 1.3.6
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/README.md +269 -10
- package/dist/index.cjs +72 -60
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +72 -60
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.umd.js +72 -60
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -216,21 +216,280 @@ const filtered = select.getFilteredItems();
|
|
|
216
216
|
|
|
217
217
|
### Custom Styling
|
|
218
218
|
|
|
219
|
-
Smilodon uses CSS custom properties for theming
|
|
219
|
+
Smilodon uses CSS custom properties (CSS variables) for easy theming and customization. The default theme is **light mode** with a clean white background.
|
|
220
220
|
|
|
221
|
+
#### Basic Customization
|
|
222
|
+
|
|
223
|
+
```css
|
|
224
|
+
enhanced-select {
|
|
225
|
+
/* Options styling */
|
|
226
|
+
--select-option-bg: #ffffff;
|
|
227
|
+
--select-option-color: #1f2937;
|
|
228
|
+
--select-option-padding: 8px 12px;
|
|
229
|
+
|
|
230
|
+
/* Hover state */
|
|
231
|
+
--select-option-hover-bg: #f3f4f6;
|
|
232
|
+
--select-option-hover-color: #1f2937;
|
|
233
|
+
|
|
234
|
+
/* Selected state */
|
|
235
|
+
--select-option-selected-bg: #e0e7ff;
|
|
236
|
+
--select-option-selected-color: #4338ca;
|
|
237
|
+
|
|
238
|
+
/* Active/focused state */
|
|
239
|
+
--select-option-active-bg: #f3f4f6;
|
|
240
|
+
--select-option-active-color: #1f2937;
|
|
241
|
+
|
|
242
|
+
/* Dropdown */
|
|
243
|
+
--select-dropdown-bg: white;
|
|
244
|
+
--select-dropdown-border: #ccc;
|
|
245
|
+
--select-dropdown-shadow: 0 4px 6px rgba(0,0,0,0.1);
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### Dark Mode (Opt-in)
|
|
250
|
+
|
|
251
|
+
Dark mode is **opt-in only** and can be enabled by adding a class or data attribute:
|
|
252
|
+
|
|
253
|
+
```html
|
|
254
|
+
<!-- Using class -->
|
|
255
|
+
<enhanced-select class="dark-mode"></enhanced-select>
|
|
256
|
+
|
|
257
|
+
<!-- Using data attribute -->
|
|
258
|
+
<enhanced-select data-theme="dark"></enhanced-select>
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
```css
|
|
262
|
+
/* Custom dark mode colors */
|
|
263
|
+
enhanced-select.dark-mode {
|
|
264
|
+
--select-dark-bg: #1f2937;
|
|
265
|
+
--select-dark-text: #f9fafb;
|
|
266
|
+
--select-dark-border: #4b5563;
|
|
267
|
+
--select-dark-dropdown-bg: #1f2937;
|
|
268
|
+
--select-dark-option-color: #f9fafb;
|
|
269
|
+
--select-dark-option-bg: #1f2937;
|
|
270
|
+
--select-dark-option-hover-bg: #374151;
|
|
271
|
+
--select-dark-option-selected-bg: #3730a3;
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### Available CSS Variables
|
|
276
|
+
|
|
277
|
+
**Light Mode (Default)**
|
|
278
|
+
```css
|
|
279
|
+
--select-options-bg /* Options container background (white) */
|
|
280
|
+
--select-option-color /* Option text color (#1f2937) */
|
|
281
|
+
--select-option-bg /* Option background (white) */
|
|
282
|
+
--select-option-padding /* Option padding (8px 12px) */
|
|
283
|
+
--select-option-hover-bg /* Hover background (#f3f4f6) */
|
|
284
|
+
--select-option-hover-color /* Hover text color (#1f2937) */
|
|
285
|
+
--select-option-selected-bg /* Selected background (#e0e7ff) */
|
|
286
|
+
--select-option-selected-color /* Selected text color (#4338ca) */
|
|
287
|
+
--select-option-active-bg /* Active background (#f3f4f6) */
|
|
288
|
+
--select-option-active-color /* Active text color (#1f2937) */
|
|
289
|
+
--select-dropdown-bg /* Dropdown background (white) */
|
|
290
|
+
--select-dropdown-border /* Dropdown border color (#ccc) */
|
|
291
|
+
--select-dropdown-shadow /* Dropdown shadow */
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Dark Mode (Opt-in)**
|
|
295
|
+
```css
|
|
296
|
+
--select-dark-bg /* Dark input background (#1f2937) */
|
|
297
|
+
--select-dark-text /* Dark text color (#f9fafb) */
|
|
298
|
+
--select-dark-border /* Dark border color (#4b5563) */
|
|
299
|
+
--select-dark-dropdown-bg /* Dark dropdown background (#1f2937) */
|
|
300
|
+
--select-dark-options-bg /* Dark options container bg (#1f2937) */
|
|
301
|
+
--select-dark-option-color /* Dark option text (#f9fafb) */
|
|
302
|
+
--select-dark-option-bg /* Dark option background (#1f2937) */
|
|
303
|
+
--select-dark-option-hover-bg /* Dark hover background (#374151) */
|
|
304
|
+
--select-dark-option-selected-bg /* Dark selected bg (#3730a3) */
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**Complete CSS Variables List (60+ variables)**
|
|
308
|
+
|
|
309
|
+
See the [full CSS variables reference](https://github.com/navidrezadoost/smilodon/blob/main/CHANGELOG.md#135---2026-02-09) for all 60+ customizable properties including:
|
|
310
|
+
- Input container (gap, padding, height, borders, focus states)
|
|
311
|
+
- Input field (width, padding, font, colors)
|
|
312
|
+
- Arrow/icon (size, color, hover states, position)
|
|
313
|
+
- **Separator line** (width, height, gradient, position)
|
|
314
|
+
- **Selection badges** (padding, colors, **remove/delete button**)
|
|
315
|
+
- Dropdown (margins, max-height, borders, shadows)
|
|
316
|
+
- Options (font size, line height, borders, transitions)
|
|
317
|
+
- Load more button (padding, borders, colors, hover states)
|
|
318
|
+
- Loading/empty states (padding, colors, backgrounds, spinner)
|
|
319
|
+
|
|
320
|
+
#### Highlighted Customization Features
|
|
321
|
+
|
|
322
|
+
**Separator Line Between Input and Arrow**
|
|
323
|
+
The vertical separator line that appears between the input area and the dropdown arrow is fully customizable:
|
|
324
|
+
|
|
325
|
+
```css
|
|
326
|
+
enhanced-select {
|
|
327
|
+
/* Customize the separator line */
|
|
328
|
+
--select-separator-width: 2px; /* Line thickness */
|
|
329
|
+
--select-separator-height: 80%; /* Line height */
|
|
330
|
+
--select-separator-position: 40px; /* Distance from right edge */
|
|
331
|
+
--select-separator-gradient: linear-gradient(
|
|
332
|
+
to bottom,
|
|
333
|
+
transparent 0%,
|
|
334
|
+
#3b82f6 20%,
|
|
335
|
+
#3b82f6 80%,
|
|
336
|
+
transparent 100%
|
|
337
|
+
);
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Badge Remove/Delete Button (Multi-Select)**
|
|
342
|
+
The × button that removes selected items in multi-select mode is fully customizable:
|
|
343
|
+
|
|
344
|
+
```css
|
|
345
|
+
enhanced-select {
|
|
346
|
+
/* Customize badge appearance */
|
|
347
|
+
--select-badge-bg: #10b981; /* Badge background */
|
|
348
|
+
--select-badge-color: white; /* Badge text color */
|
|
349
|
+
--select-badge-padding: 6px 10px; /* Badge spacing */
|
|
350
|
+
|
|
351
|
+
/* Customize the × (remove/delete) button */
|
|
352
|
+
--select-badge-remove-size: 18px; /* Button size */
|
|
353
|
+
--select-badge-remove-bg: rgba(255, 255, 255, 0.3); /* Button background */
|
|
354
|
+
--select-badge-remove-color: white; /* × symbol color */
|
|
355
|
+
--select-badge-remove-font-size: 18px; /* × symbol size */
|
|
356
|
+
--select-badge-remove-hover-bg: rgba(255, 255, 255, 0.6); /* Hover state */
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
#### Real-World Customization Examples
|
|
361
|
+
|
|
362
|
+
**Example 1: Bootstrap-style Select**
|
|
363
|
+
```css
|
|
364
|
+
enhanced-select {
|
|
365
|
+
--select-input-border: 1px solid #ced4da;
|
|
366
|
+
--select-input-border-radius: 0.375rem;
|
|
367
|
+
--select-input-focus-border: #86b7fe;
|
|
368
|
+
--select-input-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
|
|
369
|
+
--select-option-hover-bg: #e9ecef;
|
|
370
|
+
--select-option-selected-bg: #0d6efd;
|
|
371
|
+
--select-option-selected-color: white;
|
|
372
|
+
--select-badge-bg: #0d6efd;
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Example 2: Material Design**
|
|
377
|
+
```css
|
|
378
|
+
enhanced-select {
|
|
379
|
+
--select-input-border-radius: 4px;
|
|
380
|
+
--select-input-focus-border: #1976d2;
|
|
381
|
+
--select-input-focus-shadow: none;
|
|
382
|
+
--select-option-padding: 16px;
|
|
383
|
+
--select-option-hover-bg: rgba(0, 0, 0, 0.04);
|
|
384
|
+
--select-option-selected-bg: #e3f2fd;
|
|
385
|
+
--select-option-selected-color: #1976d2;
|
|
386
|
+
--select-badge-bg: #1976d2;
|
|
387
|
+
--select-badge-border-radius: 16px;
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**Example 3: Tailwind-style**
|
|
392
|
+
```css
|
|
393
|
+
enhanced-select {
|
|
394
|
+
--select-input-border: 1px solid #e5e7eb;
|
|
395
|
+
--select-input-border-radius: 0.5rem;
|
|
396
|
+
--select-input-focus-border: #3b82f6;
|
|
397
|
+
--select-input-focus-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
|
|
398
|
+
--select-option-padding: 0.5rem 0.75rem;
|
|
399
|
+
--select-option-hover-bg: #f3f4f6;
|
|
400
|
+
--select-option-selected-bg: #dbeafe;
|
|
401
|
+
--select-option-selected-color: #1e40af;
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
**Example 4: Custom Brand Colors**
|
|
221
406
|
```css
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
--
|
|
225
|
-
--
|
|
226
|
-
--
|
|
227
|
-
--
|
|
228
|
-
--
|
|
229
|
-
--
|
|
230
|
-
--
|
|
407
|
+
enhanced-select {
|
|
408
|
+
/* Your brand colors */
|
|
409
|
+
--select-input-focus-border: #ff6b6b;
|
|
410
|
+
--select-arrow-color: #ff6b6b;
|
|
411
|
+
--select-badge-bg: #ff6b6b;
|
|
412
|
+
--select-option-selected-bg: #ffe0e0;
|
|
413
|
+
--select-option-selected-color: #c92a2a;
|
|
414
|
+
--select-button-border: 1px solid #ff6b6b;
|
|
415
|
+
--select-button-color: #ff6b6b;
|
|
416
|
+
--select-button-hover-bg: #ff6b6b;
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
#### Framework-Specific Examples
|
|
421
|
+
|
|
422
|
+
**React - Customizing Separator & Badge Remove Button**
|
|
423
|
+
```jsx
|
|
424
|
+
import { Select } from '@smilodon/react';
|
|
425
|
+
|
|
426
|
+
function App() {
|
|
427
|
+
return (
|
|
428
|
+
<Select
|
|
429
|
+
items={items}
|
|
430
|
+
multiple
|
|
431
|
+
style={{
|
|
432
|
+
'--select-option-hover-bg': '#2563eb',
|
|
433
|
+
'--select-option-padding': '12px 16px',
|
|
434
|
+
'--select-badge-bg': '#3b82f6',
|
|
435
|
+
'--select-badge-remove-bg': 'rgba(255, 255, 255, 0.4)',
|
|
436
|
+
'--select-badge-remove-hover-bg': 'rgba(255, 255, 255, 0.7)',
|
|
437
|
+
'--select-separator-gradient': 'linear-gradient(to bottom, transparent 0%, #3b82f6 20%, #3b82f6 80%, transparent 100%)'
|
|
438
|
+
}}
|
|
439
|
+
/>
|
|
440
|
+
);
|
|
231
441
|
}
|
|
232
442
|
```
|
|
233
443
|
|
|
444
|
+
**Vue - Complete Customization**
|
|
445
|
+
```vue
|
|
446
|
+
<template>
|
|
447
|
+
<Select
|
|
448
|
+
:items="items"
|
|
449
|
+
multiple
|
|
450
|
+
:style="{
|
|
451
|
+
'--select-option-hover-bg': '#2563eb',
|
|
452
|
+
'--select-option-padding': '12px 16px',
|
|
453
|
+
'--select-badge-bg': '#3b82f6',
|
|
454
|
+
'--select-badge-remove-size': '20px',
|
|
455
|
+
'--select-badge-remove-bg': 'rgba(255, 255, 255, 0.4)',
|
|
456
|
+
'--select-separator-width': '2px',
|
|
457
|
+
'--select-separator-height': '70%'
|
|
458
|
+
}"
|
|
459
|
+
/>
|
|
460
|
+
</template>
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**Svelte - Themed Components**
|
|
464
|
+
```svelte
|
|
465
|
+
<script>
|
|
466
|
+
import { Select } from '@smilodon/svelte';
|
|
467
|
+
</script>
|
|
468
|
+
|
|
469
|
+
<Select
|
|
470
|
+
items={items}
|
|
471
|
+
multiple
|
|
472
|
+
style="
|
|
473
|
+
--select-badge-bg: #10b981;
|
|
474
|
+
--select-badge-remove-bg: rgba(255, 255, 255, 0.3);
|
|
475
|
+
--select-badge-remove-hover-bg: rgba(255, 255, 255, 0.6);
|
|
476
|
+
--select-separator-gradient: linear-gradient(to bottom, transparent, #10b981, transparent);
|
|
477
|
+
"
|
|
478
|
+
/>
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**Vanilla JS - Dynamic Styling**
|
|
482
|
+
```javascript
|
|
483
|
+
const select = document.querySelector('enhanced-select');
|
|
484
|
+
|
|
485
|
+
// Apply custom separator and badge styles
|
|
486
|
+
select.style.setProperty('--select-separator-width', '2px');
|
|
487
|
+
select.style.setProperty('--select-separator-gradient', 'linear-gradient(to bottom, transparent, #ff6b6b, transparent)');
|
|
488
|
+
select.style.setProperty('--select-badge-bg', '#ff6b6b');
|
|
489
|
+
select.style.setProperty('--select-badge-remove-size', '18px');
|
|
490
|
+
select.style.setProperty('--select-badge-remove-bg', 'rgba(255, 255, 255, 0.3)');
|
|
491
|
+
```
|
|
492
|
+
|
|
234
493
|
### Server-Side Rendering (SSR)
|
|
235
494
|
|
|
236
495
|
Smilodon gracefully handles SSR environments:
|
package/dist/index.cjs
CHANGED
|
@@ -1668,19 +1668,19 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1668
1668
|
display: flex;
|
|
1669
1669
|
align-items: center;
|
|
1670
1670
|
flex-wrap: wrap;
|
|
1671
|
-
gap: 6px;
|
|
1672
|
-
padding: 6px 52px 6px 8px;
|
|
1673
|
-
min-height: 44px;
|
|
1674
|
-
background: white;
|
|
1675
|
-
border: 1px solid #d1d5db;
|
|
1676
|
-
border-radius: 6px;
|
|
1671
|
+
gap: var(--select-input-gap, 6px);
|
|
1672
|
+
padding: var(--select-input-padding, 6px 52px 6px 8px);
|
|
1673
|
+
min-height: var(--select-input-min-height, 44px);
|
|
1674
|
+
background: var(--select-input-bg, white);
|
|
1675
|
+
border: var(--select-input-border, 1px solid #d1d5db);
|
|
1676
|
+
border-radius: var(--select-input-border-radius, 6px);
|
|
1677
1677
|
box-sizing: border-box;
|
|
1678
1678
|
transition: all 0.2s ease;
|
|
1679
1679
|
}
|
|
1680
1680
|
|
|
1681
1681
|
.input-container:focus-within {
|
|
1682
|
-
border-color: #667eea;
|
|
1683
|
-
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
|
|
1682
|
+
border-color: var(--select-input-focus-border, #667eea);
|
|
1683
|
+
box-shadow: var(--select-input-focus-shadow, 0 0 0 3px rgba(102, 126, 234, 0.1));
|
|
1684
1684
|
}
|
|
1685
1685
|
|
|
1686
1686
|
/* Gradient separator before arrow */
|
|
@@ -1688,17 +1688,17 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1688
1688
|
content: '';
|
|
1689
1689
|
position: absolute;
|
|
1690
1690
|
top: 50%;
|
|
1691
|
-
right: 40px;
|
|
1691
|
+
right: var(--select-separator-position, 40px);
|
|
1692
1692
|
transform: translateY(-50%);
|
|
1693
|
-
width: 1px;
|
|
1694
|
-
height: 60
|
|
1695
|
-
background: linear-gradient(
|
|
1693
|
+
width: var(--select-separator-width, 1px);
|
|
1694
|
+
height: var(--select-separator-height, 60%);
|
|
1695
|
+
background: var(--select-separator-gradient, linear-gradient(
|
|
1696
1696
|
to bottom,
|
|
1697
1697
|
transparent 0%,
|
|
1698
1698
|
rgba(0, 0, 0, 0.1) 20%,
|
|
1699
1699
|
rgba(0, 0, 0, 0.1) 80%,
|
|
1700
1700
|
transparent 100%
|
|
1701
|
-
);
|
|
1701
|
+
));
|
|
1702
1702
|
pointer-events: none;
|
|
1703
1703
|
z-index: 1;
|
|
1704
1704
|
}
|
|
@@ -1708,30 +1708,30 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1708
1708
|
top: 0;
|
|
1709
1709
|
right: 0;
|
|
1710
1710
|
bottom: 0;
|
|
1711
|
-
width: 40px;
|
|
1711
|
+
width: var(--select-arrow-width, 40px);
|
|
1712
1712
|
display: flex;
|
|
1713
1713
|
align-items: center;
|
|
1714
1714
|
justify-content: center;
|
|
1715
1715
|
cursor: pointer;
|
|
1716
1716
|
transition: background-color 0.2s ease;
|
|
1717
|
-
border-radius: 0 4px 4px 0;
|
|
1717
|
+
border-radius: var(--select-arrow-border-radius, 0 4px 4px 0);
|
|
1718
1718
|
z-index: 2;
|
|
1719
1719
|
}
|
|
1720
1720
|
|
|
1721
1721
|
.dropdown-arrow-container:hover {
|
|
1722
|
-
background-color: rgba(102, 126, 234, 0.08);
|
|
1722
|
+
background-color: var(--select-arrow-hover-bg, rgba(102, 126, 234, 0.08));
|
|
1723
1723
|
}
|
|
1724
1724
|
|
|
1725
1725
|
.dropdown-arrow {
|
|
1726
|
-
width: 16px;
|
|
1727
|
-
height: 16px;
|
|
1728
|
-
color: #667eea;
|
|
1726
|
+
width: var(--select-arrow-size, 16px);
|
|
1727
|
+
height: var(--select-arrow-size, 16px);
|
|
1728
|
+
color: var(--select-arrow-color, #667eea);
|
|
1729
1729
|
transition: transform 0.2s ease, color 0.2s ease;
|
|
1730
1730
|
transform: translateY(0);
|
|
1731
1731
|
}
|
|
1732
1732
|
|
|
1733
1733
|
.dropdown-arrow-container:hover .dropdown-arrow {
|
|
1734
|
-
color: #667eea;
|
|
1734
|
+
color: var(--select-arrow-hover-color, #667eea);
|
|
1735
1735
|
}
|
|
1736
1736
|
|
|
1737
1737
|
.dropdown-arrow.open {
|
|
@@ -1740,31 +1740,32 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1740
1740
|
|
|
1741
1741
|
.select-input {
|
|
1742
1742
|
flex: 1;
|
|
1743
|
-
min-width: 120px;
|
|
1744
|
-
padding: 4px;
|
|
1743
|
+
min-width: var(--select-input-min-width, 120px);
|
|
1744
|
+
padding: var(--select-input-field-padding, 4px);
|
|
1745
1745
|
border: none;
|
|
1746
|
-
font-size: 14px;
|
|
1747
|
-
line-height: 1.5;
|
|
1748
|
-
color: #1f2937;
|
|
1746
|
+
font-size: var(--select-input-font-size, 14px);
|
|
1747
|
+
line-height: var(--select-input-line-height, 1.5);
|
|
1748
|
+
color: var(--select-input-color, #1f2937);
|
|
1749
1749
|
background: transparent;
|
|
1750
1750
|
box-sizing: border-box;
|
|
1751
1751
|
outline: none;
|
|
1752
|
+
font-family: var(--select-font-family, inherit);
|
|
1752
1753
|
}
|
|
1753
1754
|
|
|
1754
1755
|
.select-input::placeholder {
|
|
1755
|
-
color: #9ca3af;
|
|
1756
|
+
color: var(--select-input-placeholder-color, #9ca3af);
|
|
1756
1757
|
}
|
|
1757
1758
|
|
|
1758
1759
|
.selection-badge {
|
|
1759
1760
|
display: inline-flex;
|
|
1760
1761
|
align-items: center;
|
|
1761
|
-
gap: 4px;
|
|
1762
|
-
padding: 4px 8px;
|
|
1763
|
-
margin: 2px;
|
|
1764
|
-
background: #667eea;
|
|
1765
|
-
color: white;
|
|
1766
|
-
border-radius: 4px;
|
|
1767
|
-
font-size: 13px;
|
|
1762
|
+
gap: var(--select-badge-gap, 4px);
|
|
1763
|
+
padding: var(--select-badge-padding, 4px 8px);
|
|
1764
|
+
margin: var(--select-badge-margin, 2px);
|
|
1765
|
+
background: var(--select-badge-bg, #667eea);
|
|
1766
|
+
color: var(--select-badge-color, white);
|
|
1767
|
+
border-radius: var(--select-badge-border-radius, 4px);
|
|
1768
|
+
font-size: var(--select-badge-font-size, 13px);
|
|
1768
1769
|
line-height: 1;
|
|
1769
1770
|
}
|
|
1770
1771
|
|
|
@@ -1772,22 +1773,22 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1772
1773
|
display: inline-flex;
|
|
1773
1774
|
align-items: center;
|
|
1774
1775
|
justify-content: center;
|
|
1775
|
-
width: 16px;
|
|
1776
|
-
height: 16px;
|
|
1776
|
+
width: var(--select-badge-remove-size, 16px);
|
|
1777
|
+
height: var(--select-badge-remove-size, 16px);
|
|
1777
1778
|
padding: 0;
|
|
1778
1779
|
margin-left: 4px;
|
|
1779
|
-
background: rgba(255, 255, 255, 0.3);
|
|
1780
|
+
background: var(--select-badge-remove-bg, rgba(255, 255, 255, 0.3));
|
|
1780
1781
|
border: none;
|
|
1781
1782
|
border-radius: 50%;
|
|
1782
|
-
color: white;
|
|
1783
|
-
font-size: 16px;
|
|
1783
|
+
color: var(--select-badge-remove-color, white);
|
|
1784
|
+
font-size: var(--select-badge-remove-font-size, 16px);
|
|
1784
1785
|
line-height: 1;
|
|
1785
1786
|
cursor: pointer;
|
|
1786
1787
|
transition: background 0.2s;
|
|
1787
1788
|
}
|
|
1788
1789
|
|
|
1789
1790
|
.badge-remove:hover {
|
|
1790
|
-
background: rgba(255, 255, 255, 0.5);
|
|
1791
|
+
background: var(--select-badge-remove-hover-bg, rgba(255, 255, 255, 0.5));
|
|
1791
1792
|
}
|
|
1792
1793
|
|
|
1793
1794
|
.select-input:disabled {
|
|
@@ -1801,19 +1802,19 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1801
1802
|
top: 100%;
|
|
1802
1803
|
left: 0;
|
|
1803
1804
|
right: 0;
|
|
1804
|
-
margin-top: 4px;
|
|
1805
|
-
max-height: 300px;
|
|
1805
|
+
margin-top: var(--select-dropdown-margin-top, 4px);
|
|
1806
|
+
max-height: var(--select-dropdown-max-height, 300px);
|
|
1806
1807
|
overflow: hidden;
|
|
1807
1808
|
background: var(--select-dropdown-bg, white);
|
|
1808
|
-
border:
|
|
1809
|
-
border-radius: var(--select-border-radius, 4px);
|
|
1809
|
+
border: var(--select-dropdown-border, 1px solid #ccc);
|
|
1810
|
+
border-radius: var(--select-dropdown-border-radius, 4px);
|
|
1810
1811
|
box-shadow: var(--select-dropdown-shadow, 0 4px 6px rgba(0,0,0,0.1));
|
|
1811
1812
|
z-index: var(--select-dropdown-z-index, 1000);
|
|
1812
1813
|
}
|
|
1813
1814
|
|
|
1814
1815
|
.options-container {
|
|
1815
1816
|
position: relative;
|
|
1816
|
-
max-height: 300px;
|
|
1817
|
+
max-height: var(--select-options-max-height, 300px);
|
|
1817
1818
|
overflow: auto;
|
|
1818
1819
|
transition: opacity 0.2s ease-in-out;
|
|
1819
1820
|
background: var(--select-options-bg, white);
|
|
@@ -1824,8 +1825,11 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1824
1825
|
cursor: pointer;
|
|
1825
1826
|
color: var(--select-option-color, #1f2937);
|
|
1826
1827
|
background: var(--select-option-bg, white);
|
|
1827
|
-
transition: background-color 0.15s ease;
|
|
1828
|
+
transition: var(--select-option-transition, background-color 0.15s ease);
|
|
1828
1829
|
user-select: none;
|
|
1830
|
+
font-size: var(--select-option-font-size, 14px);
|
|
1831
|
+
line-height: var(--select-option-line-height, 1.5);
|
|
1832
|
+
border-bottom: var(--select-option-border-bottom, none);
|
|
1829
1833
|
}
|
|
1830
1834
|
|
|
1831
1835
|
.option:hover {
|
|
@@ -1836,7 +1840,7 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1836
1840
|
.option.selected {
|
|
1837
1841
|
background-color: var(--select-option-selected-bg, #e0e7ff);
|
|
1838
1842
|
color: var(--select-option-selected-color, #4338ca);
|
|
1839
|
-
font-weight: 500;
|
|
1843
|
+
font-weight: var(--select-option-selected-weight, 500);
|
|
1840
1844
|
}
|
|
1841
1845
|
|
|
1842
1846
|
.option.active {
|
|
@@ -1845,19 +1849,21 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1845
1849
|
}
|
|
1846
1850
|
|
|
1847
1851
|
.load-more-container {
|
|
1848
|
-
padding: 12px;
|
|
1852
|
+
padding: var(--select-load-more-padding, 12px);
|
|
1849
1853
|
text-align: center;
|
|
1850
|
-
border-top:
|
|
1854
|
+
border-top: var(--select-divider-border, 1px solid #e0e0e0);
|
|
1855
|
+
background: var(--select-load-more-bg, white);
|
|
1851
1856
|
}
|
|
1852
1857
|
|
|
1853
1858
|
.load-more-button {
|
|
1854
|
-
padding: 8px 16px;
|
|
1855
|
-
border:
|
|
1859
|
+
padding: var(--select-button-padding, 8px 16px);
|
|
1860
|
+
border: var(--select-button-border, 1px solid #1976d2);
|
|
1856
1861
|
background: var(--select-button-bg, white);
|
|
1857
1862
|
color: var(--select-button-color, #1976d2);
|
|
1858
|
-
border-radius: 4px;
|
|
1863
|
+
border-radius: var(--select-button-border-radius, 4px);
|
|
1859
1864
|
cursor: pointer;
|
|
1860
|
-
font-size: 14px;
|
|
1865
|
+
font-size: var(--select-button-font-size, 14px);
|
|
1866
|
+
font-family: var(--select-font-family, inherit);
|
|
1861
1867
|
transition: all 0.2s ease;
|
|
1862
1868
|
}
|
|
1863
1869
|
|
|
@@ -1867,21 +1873,23 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1867
1873
|
}
|
|
1868
1874
|
|
|
1869
1875
|
.load-more-button:disabled {
|
|
1870
|
-
opacity: 0.5;
|
|
1876
|
+
opacity: var(--select-button-disabled-opacity, 0.5);
|
|
1871
1877
|
cursor: not-allowed;
|
|
1872
1878
|
}
|
|
1873
1879
|
|
|
1874
1880
|
.busy-bucket {
|
|
1875
|
-
padding: 16px;
|
|
1881
|
+
padding: var(--select-busy-padding, 16px);
|
|
1876
1882
|
text-align: center;
|
|
1877
1883
|
color: var(--select-busy-color, #666);
|
|
1884
|
+
background: var(--select-busy-bg, white);
|
|
1885
|
+
font-size: var(--select-busy-font-size, 14px);
|
|
1878
1886
|
}
|
|
1879
1887
|
|
|
1880
1888
|
.spinner {
|
|
1881
1889
|
display: inline-block;
|
|
1882
|
-
width: 20px;
|
|
1883
|
-
height: 20px;
|
|
1884
|
-
border:
|
|
1890
|
+
width: var(--select-spinner-size, 20px);
|
|
1891
|
+
height: var(--select-spinner-size, 20px);
|
|
1892
|
+
border: var(--select-spinner-border, 2px solid #ccc);
|
|
1885
1893
|
border-top-color: var(--select-spinner-active-color, #1976d2);
|
|
1886
1894
|
border-radius: 50%;
|
|
1887
1895
|
animation: spin 0.6s linear infinite;
|
|
@@ -1892,16 +1900,20 @@ class EnhancedSelect extends HTMLElement {
|
|
|
1892
1900
|
}
|
|
1893
1901
|
|
|
1894
1902
|
.empty-state {
|
|
1895
|
-
padding: 24px;
|
|
1903
|
+
padding: var(--select-empty-padding, 24px);
|
|
1896
1904
|
text-align: center;
|
|
1897
1905
|
color: var(--select-empty-color, #999);
|
|
1906
|
+
font-size: var(--select-empty-font-size, 14px);
|
|
1907
|
+
background: var(--select-empty-bg, white);
|
|
1898
1908
|
}
|
|
1899
1909
|
|
|
1900
1910
|
.searching-state {
|
|
1901
|
-
padding: 24px;
|
|
1911
|
+
padding: var(--select-searching-padding, 24px);
|
|
1902
1912
|
text-align: center;
|
|
1903
|
-
color: #667eea;
|
|
1913
|
+
color: var(--select-searching-color, #667eea);
|
|
1914
|
+
font-size: var(--select-searching-font-size, 14px);
|
|
1904
1915
|
font-style: italic;
|
|
1916
|
+
background: var(--select-searching-bg, white);
|
|
1905
1917
|
animation: pulse 1.5s ease-in-out infinite;
|
|
1906
1918
|
}
|
|
1907
1919
|
|