mithril-materialized 3.0.0 → 3.2.0

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 CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  A Mithril.js component library inspired by [materialize-css](https://materializecss.com) design principles, [available on npm](https://www.npmjs.com/package/mithril-materialized). This library provides you with ready-to-use Mithril components that follow Material Design guidelines, with **no external JavaScript dependencies**.
4
4
 
5
- ## 🚀 v2.0.0 Beta - Major Release
5
+ ## 🚀 v3.0.0 - Latest Release
6
6
 
7
- This is a **major breaking release** that removes all external JavaScript dependencies, making the library completely self-contained and significantly reducing bundle sizes.
7
+ The current stable release that provides a complete Mithril.js Material Design component library with no external JavaScript dependencies.
8
8
 
9
9
  ### ✨ What's New
10
10
 
@@ -16,29 +16,23 @@ This is a **major breaking release** that removes all external JavaScript depend
16
16
  - **📱 Modern Architecture**: Factory components with proper TypeScript support
17
17
  - **🎯 CSS-Only Styling**: Uses only CSS for styling - no JavaScript initialization needed
18
18
 
19
- ### 💥 Breaking Changes from v1.x
19
+ ### Key Features
20
20
 
21
- - **Removed dependencies**: No longer requires `materialize-css` or `material-icons` packages
22
- - **Component updates**: DatePicker and TimePicker now have custom implementations
23
- - **Icon changes**: Library uses custom SVG icons. Material Icons font is supported too, but not required.
24
- - **Installation**: Simpler installation process with fewer dependencies
25
-
26
- ### 📈 Migration from v1.x
27
-
28
- **Old installation (v1.x):**
29
-
30
- ```bash
31
- npm install materialize-css material-icons mithril mithril-materialized
32
- ```
21
+ - **🔥 Zero External JS Dependencies**: No longer requires `materialize-css` JavaScript or `material-icons` fonts
22
+ - **📦 Smaller Bundle Size**: Reduced package size by eliminating external dependencies
23
+ - **🎨 Custom SVG Icons**: Built-in MaterialIcon component with custom SVG icons
24
+ - **⚡ Better Performance**: Direct implementations without jQuery or other heavy dependencies
25
+ - **🛠️ Enhanced Components**: Comprehensive component library with modern features
26
+ - **📱 Modern Architecture**: Factory components with proper TypeScript support
27
+ - **🎯 CSS-Only Styling**: Uses only CSS for styling - no JavaScript initialization needed
28
+ - **🌗 Dark Theme Support**: Built-in light/dark theme system with CSS custom properties
33
29
 
34
- **New installation (v2.x):**
30
+ ### 📦 Installation
35
31
 
36
32
  ```bash
37
33
  npm install mithril mithril-materialized
38
34
  ```
39
35
 
40
- Your CSS imports can remain the same, but you no longer need the materialize-css JavaScript.
41
-
42
36
  ## Supported Components
43
37
 
44
38
  - [Buttons](https://erikvullings.github.io/mithril-materialized/#!/buttons)
@@ -363,7 +357,7 @@ See the [live documentation](https://erikvullings.github.io/mithril-materialized
363
357
 
364
358
  ### 📊 Bundle Size Targets
365
359
 
366
- **Current Status (v2.0.0-beta.15):**
360
+ **Current Status (v3.0.0):**
367
361
 
368
362
  - Total: 70KB gzipped (44KB JS + 26KB CSS)
369
363
  - Modular CSS can reduce bundle by 30-50%
@@ -394,7 +388,7 @@ See our [contributing guide](CONTRIBUTING.md) for detailed information.
394
388
 
395
389
  **Bundle Size Comparison:**
396
390
 
397
- - mithril-materialized v2.0: 64KB gzipped
391
+ - mithril-materialized v3.0: 64KB gzipped
398
392
  - Material-UI: ~350KB gzipped
399
393
  - Materialize CSS + jQuery: ~180KB gzipped
400
394
  - Vuetify: ~250KB gzipped
@@ -1116,6 +1116,9 @@ button.btn-floating {
1116
1116
  margin: 0 24px 0 0;
1117
1117
  width: 24px;
1118
1118
  }
1119
+ .dropdown-content li.disabled {
1120
+ cursor: not-allowed;
1121
+ }
1119
1122
 
1120
1123
  body.keyboard-focused .dropdown-content li:focus {
1121
1124
  background-color: var(--mm-dropdown-focus, rgb(217.6, 217.6, 217.6));
package/dist/core.css CHANGED
@@ -2675,6 +2675,24 @@ textarea.materialize-textarea {
2675
2675
  min-height: 18px;
2676
2676
  }
2677
2677
 
2678
+ /* Input Clear Button */
2679
+ .input-clear-btn {
2680
+ position: absolute;
2681
+ right: 8px;
2682
+ top: 1rem;
2683
+ cursor: pointer;
2684
+ z-index: 1;
2685
+ color: var(--mm-text-hint, #d1d1d1);
2686
+ transition: color 0.2s ease;
2687
+ }
2688
+ .input-clear-btn:hover {
2689
+ color: var(--mm-text-secondary, rgba(0, 0, 0, 0.7));
2690
+ }
2691
+ .input-clear-btn svg {
2692
+ width: 18px;
2693
+ height: 18px;
2694
+ }
2695
+
2678
2696
  /* Radio Buttons
2679
2697
  ========================================================================== */
2680
2698
  [type=radio]:not(:checked),
@@ -2799,6 +2817,10 @@ textarea.materialize-textarea {
2799
2817
  pointer-events: none;
2800
2818
  }
2801
2819
 
2820
+ [type=checkbox]:disabled + span {
2821
+ color: var(--mm-text-disabled, rgba(0, 0, 0, 0.42));
2822
+ }
2823
+
2802
2824
  [type=checkbox] {
2803
2825
  /* checkbox aspect */
2804
2826
  }
@@ -2959,6 +2981,7 @@ textarea.materialize-textarea {
2959
2981
  .switch * {
2960
2982
  -webkit-tap-highlight-color: transparent;
2961
2983
  user-select: none;
2984
+ margin: 13px 0 17px 0;
2962
2985
  }
2963
2986
 
2964
2987
  .switch label {
@@ -3173,6 +3196,137 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
3173
3196
  padding-left: 1rem;
3174
3197
  }
3175
3198
 
3199
+ /* Dark theme overrides to ensure proper colors */
3200
+ [data-theme=dark] .select-dropdown.dropdown-content li:hover,
3201
+ [data-theme=dark] .dropdown-content li:hover,
3202
+ [data-theme=dark] .dropdown-content li.active {
3203
+ background-color: #444 !important;
3204
+ }
3205
+ [data-theme=dark] .chip {
3206
+ background-color: #424242 !important;
3207
+ color: var(--mm-text-secondary) !important;
3208
+ }
3209
+
3210
+ /* Auto dark mode support */
3211
+ @media (prefers-color-scheme: dark) {
3212
+ :root:not([data-theme=light]) .select-dropdown.dropdown-content li:hover,
3213
+ :root:not([data-theme=light]) .dropdown-content li:hover,
3214
+ :root:not([data-theme=light]) .dropdown-content li.active {
3215
+ background-color: #444 !important;
3216
+ }
3217
+ :root:not([data-theme=light]) .chip {
3218
+ background-color: #424242 !important;
3219
+ color: var(--mm-text-secondary) !important;
3220
+ }
3221
+ }
3222
+ /* SearchSelect Specific Styles
3223
+ ========================================================================== */
3224
+ .search-wrapper {
3225
+ padding: 0 16px;
3226
+ position: relative;
3227
+ }
3228
+
3229
+ .search-select-input {
3230
+ width: 100%;
3231
+ outline: none;
3232
+ font-size: 0.875rem;
3233
+ border: none;
3234
+ padding: 8px 0;
3235
+ border-bottom: 1px solid var(--mm-input-border, #9e9e9e);
3236
+ background-color: transparent;
3237
+ color: var(--mm-text-primary, inherit);
3238
+ }
3239
+ .search-select-input:focus {
3240
+ border-bottom-color: var(--mm-primary-color, #2196F3);
3241
+ }
3242
+ .search-select-input::placeholder {
3243
+ color: var(--mm-text-hint, #9e9e9e);
3244
+ }
3245
+
3246
+ .search-select-no-options {
3247
+ padding: 8px 16px;
3248
+ color: var(--mm-text-hint, #9e9e9e);
3249
+ font-style: italic;
3250
+ text-align: center;
3251
+ border-bottom: none;
3252
+ }
3253
+ .search-select-no-options:hover {
3254
+ background-color: transparent;
3255
+ cursor: default;
3256
+ }
3257
+
3258
+ .search-select-option-label {
3259
+ display: flex;
3260
+ align-items: center;
3261
+ width: 100%;
3262
+ cursor: pointer;
3263
+ padding: 0;
3264
+ margin: 0;
3265
+ min-height: var(--mm-dropdown-item-height, 50px);
3266
+ }
3267
+ .search-select-option-label input[type=checkbox] {
3268
+ margin-right: 8px;
3269
+ position: relative;
3270
+ appearance: none;
3271
+ width: 18px;
3272
+ height: 18px;
3273
+ border: 2px solid var(--mm-border-color, #9e9e9e);
3274
+ border-radius: 2px;
3275
+ background-color: transparent;
3276
+ }
3277
+ .search-select-option-label input[type=checkbox]:checked {
3278
+ background-color: var(--mm-primary-color, #2196F3);
3279
+ border-color: var(--mm-primary-color, #2196F3);
3280
+ }
3281
+ .search-select-option-label input[type=checkbox]:checked:after {
3282
+ content: "✓";
3283
+ color: white;
3284
+ font-size: 12px;
3285
+ position: absolute;
3286
+ top: -2px;
3287
+ left: 2px;
3288
+ }
3289
+ .search-select-option-label input[type=checkbox]:focus {
3290
+ outline: 2px solid var(--mm-primary-color, #2196F3);
3291
+ outline-offset: 2px;
3292
+ }
3293
+ .search-select-option-label span {
3294
+ flex: 1;
3295
+ }
3296
+
3297
+ .multi-select-dropdown .chips-container {
3298
+ display: flex;
3299
+ align-items: flex-end;
3300
+ flex-wrap: wrap;
3301
+ cursor: pointer;
3302
+ position: relative;
3303
+ min-height: var(--mm-input-height, 3rem);
3304
+ padding: 4px 0;
3305
+ }
3306
+ .multi-select-dropdown .chips-container .chip {
3307
+ margin: 2px 4px 2px 0;
3308
+ }
3309
+ .multi-select-dropdown .chips-container .chip .material-icons.close {
3310
+ cursor: pointer;
3311
+ font-size: 16px;
3312
+ margin-left: 4px;
3313
+ }
3314
+ .multi-select-dropdown .chips-container .chip .material-icons.close:hover {
3315
+ color: var(--mm-error-color, #f44336);
3316
+ }
3317
+ .multi-select-dropdown .chips-container .placeholder {
3318
+ color: var(--mm-text-hint, #9e9e9e);
3319
+ flex-grow: 1;
3320
+ padding: 8px 0;
3321
+ }
3322
+ .multi-select-dropdown .chips-container .spacer {
3323
+ flex-grow: 1;
3324
+ }
3325
+ .multi-select-dropdown .chips-container .caret {
3326
+ margin-left: auto;
3327
+ cursor: pointer;
3328
+ }
3329
+
3176
3330
  /* File Input
3177
3331
  ========================================================================== */
3178
3332
  .file-field {
@@ -3386,17 +3540,3 @@ input[type=range]::-ms-thumb {
3386
3540
  cursor: text;
3387
3541
  text-align: initial;
3388
3542
  }
3389
-
3390
- select:focus {
3391
- outline: 1px solid rgb(201.05, 242.65, 238.75);
3392
- }
3393
-
3394
- button:focus {
3395
- outline: none;
3396
- background-color: rgb(41.8, 182.6, 169.4);
3397
- }
3398
-
3399
- label {
3400
- font-size: 0.8rem;
3401
- color: #9e9e9e;
3402
- }
@@ -28,13 +28,16 @@ export interface DropdownAttrs<T extends string | number> extends Attributes {
28
28
  /** Item array to show in the dropdown. If the value is not supplied, uses he name. */
29
29
  items: DropdownItem<T>[];
30
30
  /**
31
- * Selected value or name
32
- * @deprecated Use initialValue instead
31
+ * Currently selected item id for controlled mode. If provided along with `onchange`, the component operates in controlled mode
32
+ * where the parent manages the state. The parent must update this value in response to `onchange` callbacks.
33
33
  */
34
34
  checkedId?: T;
35
- /** Selected value or name */
36
- initialValue?: T;
37
- /** When a value or name is selected */
35
+ /**
36
+ * Default selected item id for uncontrolled mode. Only used when `checkedId` and `onchange` are not provided.
37
+ * The component will manage its own internal state in uncontrolled mode.
38
+ */
39
+ defaultCheckedId?: T;
40
+ /** When a value or name is selected. Optional for uncontrolled mode. */
38
41
  onchange?: (value: T) => void;
39
42
  /** Uses Materialize icons as a prefix or postfix. */
40
43
  iconName?: string;
package/dist/forms.css CHANGED
@@ -1284,6 +1284,24 @@ textarea.materialize-textarea {
1284
1284
  min-height: 18px;
1285
1285
  }
1286
1286
 
1287
+ /* Input Clear Button */
1288
+ .input-clear-btn {
1289
+ position: absolute;
1290
+ right: 8px;
1291
+ top: 1rem;
1292
+ cursor: pointer;
1293
+ z-index: 1;
1294
+ color: var(--mm-text-hint, #d1d1d1);
1295
+ transition: color 0.2s ease;
1296
+ }
1297
+ .input-clear-btn:hover {
1298
+ color: var(--mm-text-secondary, rgba(0, 0, 0, 0.7));
1299
+ }
1300
+ .input-clear-btn svg {
1301
+ width: 18px;
1302
+ height: 18px;
1303
+ }
1304
+
1287
1305
  /* Select Field
1288
1306
  ========================================================================== */
1289
1307
  select.browser-default {
@@ -1423,6 +1441,137 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
1423
1441
  padding-left: 1rem;
1424
1442
  }
1425
1443
 
1444
+ /* Dark theme overrides to ensure proper colors */
1445
+ [data-theme=dark] .select-dropdown.dropdown-content li:hover,
1446
+ [data-theme=dark] .dropdown-content li:hover,
1447
+ [data-theme=dark] .dropdown-content li.active {
1448
+ background-color: #444 !important;
1449
+ }
1450
+ [data-theme=dark] .chip {
1451
+ background-color: #424242 !important;
1452
+ color: var(--mm-text-secondary) !important;
1453
+ }
1454
+
1455
+ /* Auto dark mode support */
1456
+ @media (prefers-color-scheme: dark) {
1457
+ :root:not([data-theme=light]) .select-dropdown.dropdown-content li:hover,
1458
+ :root:not([data-theme=light]) .dropdown-content li:hover,
1459
+ :root:not([data-theme=light]) .dropdown-content li.active {
1460
+ background-color: #444 !important;
1461
+ }
1462
+ :root:not([data-theme=light]) .chip {
1463
+ background-color: #424242 !important;
1464
+ color: var(--mm-text-secondary) !important;
1465
+ }
1466
+ }
1467
+ /* SearchSelect Specific Styles
1468
+ ========================================================================== */
1469
+ .search-wrapper {
1470
+ padding: 0 16px;
1471
+ position: relative;
1472
+ }
1473
+
1474
+ .search-select-input {
1475
+ width: 100%;
1476
+ outline: none;
1477
+ font-size: 0.875rem;
1478
+ border: none;
1479
+ padding: 8px 0;
1480
+ border-bottom: 1px solid var(--mm-input-border, #9e9e9e);
1481
+ background-color: transparent;
1482
+ color: var(--mm-text-primary, inherit);
1483
+ }
1484
+ .search-select-input:focus {
1485
+ border-bottom-color: var(--mm-primary-color, #2196F3);
1486
+ }
1487
+ .search-select-input::placeholder {
1488
+ color: var(--mm-text-hint, #9e9e9e);
1489
+ }
1490
+
1491
+ .search-select-no-options {
1492
+ padding: 8px 16px;
1493
+ color: var(--mm-text-hint, #9e9e9e);
1494
+ font-style: italic;
1495
+ text-align: center;
1496
+ border-bottom: none;
1497
+ }
1498
+ .search-select-no-options:hover {
1499
+ background-color: transparent;
1500
+ cursor: default;
1501
+ }
1502
+
1503
+ .search-select-option-label {
1504
+ display: flex;
1505
+ align-items: center;
1506
+ width: 100%;
1507
+ cursor: pointer;
1508
+ padding: 0;
1509
+ margin: 0;
1510
+ min-height: var(--mm-dropdown-item-height, 50px);
1511
+ }
1512
+ .search-select-option-label input[type=checkbox] {
1513
+ margin-right: 8px;
1514
+ position: relative;
1515
+ appearance: none;
1516
+ width: 18px;
1517
+ height: 18px;
1518
+ border: 2px solid var(--mm-border-color, #9e9e9e);
1519
+ border-radius: 2px;
1520
+ background-color: transparent;
1521
+ }
1522
+ .search-select-option-label input[type=checkbox]:checked {
1523
+ background-color: var(--mm-primary-color, #2196F3);
1524
+ border-color: var(--mm-primary-color, #2196F3);
1525
+ }
1526
+ .search-select-option-label input[type=checkbox]:checked:after {
1527
+ content: "✓";
1528
+ color: white;
1529
+ font-size: 12px;
1530
+ position: absolute;
1531
+ top: -2px;
1532
+ left: 2px;
1533
+ }
1534
+ .search-select-option-label input[type=checkbox]:focus {
1535
+ outline: 2px solid var(--mm-primary-color, #2196F3);
1536
+ outline-offset: 2px;
1537
+ }
1538
+ .search-select-option-label span {
1539
+ flex: 1;
1540
+ }
1541
+
1542
+ .multi-select-dropdown .chips-container {
1543
+ display: flex;
1544
+ align-items: flex-end;
1545
+ flex-wrap: wrap;
1546
+ cursor: pointer;
1547
+ position: relative;
1548
+ min-height: var(--mm-input-height, 3rem);
1549
+ padding: 4px 0;
1550
+ }
1551
+ .multi-select-dropdown .chips-container .chip {
1552
+ margin: 2px 4px 2px 0;
1553
+ }
1554
+ .multi-select-dropdown .chips-container .chip .material-icons.close {
1555
+ cursor: pointer;
1556
+ font-size: 16px;
1557
+ margin-left: 4px;
1558
+ }
1559
+ .multi-select-dropdown .chips-container .chip .material-icons.close:hover {
1560
+ color: var(--mm-error-color, #f44336);
1561
+ }
1562
+ .multi-select-dropdown .chips-container .placeholder {
1563
+ color: var(--mm-text-hint, #9e9e9e);
1564
+ flex-grow: 1;
1565
+ padding: 8px 0;
1566
+ }
1567
+ .multi-select-dropdown .chips-container .spacer {
1568
+ flex-grow: 1;
1569
+ }
1570
+ .multi-select-dropdown .chips-container .caret {
1571
+ margin-left: auto;
1572
+ cursor: pointer;
1573
+ }
1574
+
1426
1575
  /* Checkboxes
1427
1576
  ========================================================================== */
1428
1577
  /* Remove default checkbox */
@@ -1433,6 +1582,10 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
1433
1582
  pointer-events: none;
1434
1583
  }
1435
1584
 
1585
+ [type=checkbox]:disabled + span {
1586
+ color: var(--mm-text-disabled, rgba(0, 0, 0, 0.42));
1587
+ }
1588
+
1436
1589
  [type=checkbox] {
1437
1590
  /* checkbox aspect */
1438
1591
  }
@@ -1707,6 +1860,7 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
1707
1860
  .switch * {
1708
1861
  -webkit-tap-highlight-color: transparent;
1709
1862
  user-select: none;
1863
+ margin: 13px 0 17px 0;
1710
1864
  }
1711
1865
 
1712
1866
  .switch label {
package/dist/index.css CHANGED
@@ -5283,6 +5283,9 @@ button.btn-floating {
5283
5283
  margin: 0 24px 0 0;
5284
5284
  width: 24px;
5285
5285
  }
5286
+ .dropdown-content li.disabled {
5287
+ cursor: not-allowed;
5288
+ }
5286
5289
 
5287
5290
  body.keyboard-focused .dropdown-content li:focus {
5288
5291
  background-color: var(--mm-dropdown-focus, rgb(217.6, 217.6, 217.6));
@@ -6324,6 +6327,24 @@ textarea.materialize-textarea {
6324
6327
  min-height: 18px;
6325
6328
  }
6326
6329
 
6330
+ /* Input Clear Button */
6331
+ .input-clear-btn {
6332
+ position: absolute;
6333
+ right: 8px;
6334
+ top: 1rem;
6335
+ cursor: pointer;
6336
+ z-index: 1;
6337
+ color: var(--mm-text-hint, #d1d1d1);
6338
+ transition: color 0.2s ease;
6339
+ }
6340
+ .input-clear-btn:hover {
6341
+ color: var(--mm-text-secondary, rgba(0, 0, 0, 0.7));
6342
+ }
6343
+ .input-clear-btn svg {
6344
+ width: 18px;
6345
+ height: 18px;
6346
+ }
6347
+
6327
6348
  /* Radio Buttons
6328
6349
  ========================================================================== */
6329
6350
  [type=radio]:not(:checked),
@@ -6450,6 +6471,10 @@ textarea.materialize-textarea {
6450
6471
  pointer-events: none;
6451
6472
  }
6452
6473
 
6474
+ [type=checkbox]:disabled + span {
6475
+ color: var(--mm-text-disabled, rgba(0, 0, 0, 0.42));
6476
+ }
6477
+
6453
6478
  [type=checkbox] {
6454
6479
  /* checkbox aspect */
6455
6480
  }
@@ -6614,6 +6639,7 @@ textarea.materialize-textarea {
6614
6639
  -webkit-user-select: none;
6615
6640
  -moz-user-select: none;
6616
6641
  user-select: none;
6642
+ margin: 13px 0 17px 0;
6617
6643
  }
6618
6644
 
6619
6645
  .switch label {
@@ -6832,6 +6858,142 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
6832
6858
  padding-left: 1rem;
6833
6859
  }
6834
6860
 
6861
+ /* Dark theme overrides to ensure proper colors */
6862
+ [data-theme=dark] .select-dropdown.dropdown-content li:hover,
6863
+ [data-theme=dark] .dropdown-content li:hover,
6864
+ [data-theme=dark] .dropdown-content li.active {
6865
+ background-color: #444 !important;
6866
+ }
6867
+ [data-theme=dark] .chip {
6868
+ background-color: #424242 !important;
6869
+ color: var(--mm-text-secondary) !important;
6870
+ }
6871
+
6872
+ /* Auto dark mode support */
6873
+ @media (prefers-color-scheme: dark) {
6874
+ :root:not([data-theme=light]) .select-dropdown.dropdown-content li:hover,
6875
+ :root:not([data-theme=light]) .dropdown-content li:hover,
6876
+ :root:not([data-theme=light]) .dropdown-content li.active {
6877
+ background-color: #444 !important;
6878
+ }
6879
+ :root:not([data-theme=light]) .chip {
6880
+ background-color: #424242 !important;
6881
+ color: var(--mm-text-secondary) !important;
6882
+ }
6883
+ }
6884
+ /* SearchSelect Specific Styles
6885
+ ========================================================================== */
6886
+ .search-wrapper {
6887
+ padding: 0 16px;
6888
+ position: relative;
6889
+ }
6890
+
6891
+ .search-select-input {
6892
+ width: 100%;
6893
+ outline: none;
6894
+ font-size: 0.875rem;
6895
+ border: none;
6896
+ padding: 8px 0;
6897
+ border-bottom: 1px solid var(--mm-input-border, #9e9e9e);
6898
+ background-color: transparent;
6899
+ color: var(--mm-text-primary, inherit);
6900
+ }
6901
+ .search-select-input:focus {
6902
+ border-bottom-color: var(--mm-primary-color, #2196F3);
6903
+ }
6904
+ .search-select-input::-moz-placeholder {
6905
+ color: var(--mm-text-hint, #9e9e9e);
6906
+ }
6907
+ .search-select-input::placeholder {
6908
+ color: var(--mm-text-hint, #9e9e9e);
6909
+ }
6910
+
6911
+ .search-select-no-options {
6912
+ padding: 8px 16px;
6913
+ color: var(--mm-text-hint, #9e9e9e);
6914
+ font-style: italic;
6915
+ text-align: center;
6916
+ border-bottom: none;
6917
+ }
6918
+ .search-select-no-options:hover {
6919
+ background-color: transparent;
6920
+ cursor: default;
6921
+ }
6922
+
6923
+ .search-select-option-label {
6924
+ display: flex;
6925
+ align-items: center;
6926
+ width: 100%;
6927
+ cursor: pointer;
6928
+ padding: 0;
6929
+ margin: 0;
6930
+ min-height: var(--mm-dropdown-item-height, 50px);
6931
+ }
6932
+ .search-select-option-label input[type=checkbox] {
6933
+ margin-right: 8px;
6934
+ position: relative;
6935
+ -webkit-appearance: none;
6936
+ -moz-appearance: none;
6937
+ appearance: none;
6938
+ width: 18px;
6939
+ height: 18px;
6940
+ border: 2px solid var(--mm-border-color, #9e9e9e);
6941
+ border-radius: 2px;
6942
+ background-color: transparent;
6943
+ }
6944
+ .search-select-option-label input[type=checkbox]:checked {
6945
+ background-color: var(--mm-primary-color, #2196F3);
6946
+ border-color: var(--mm-primary-color, #2196F3);
6947
+ }
6948
+ .search-select-option-label input[type=checkbox]:checked:after {
6949
+ content: "✓";
6950
+ color: white;
6951
+ font-size: 12px;
6952
+ position: absolute;
6953
+ top: -2px;
6954
+ left: 2px;
6955
+ }
6956
+ .search-select-option-label input[type=checkbox]:focus {
6957
+ outline: 2px solid var(--mm-primary-color, #2196F3);
6958
+ outline-offset: 2px;
6959
+ }
6960
+ .search-select-option-label span {
6961
+ flex: 1;
6962
+ }
6963
+
6964
+ .multi-select-dropdown .chips-container {
6965
+ display: flex;
6966
+ align-items: flex-end;
6967
+ flex-wrap: wrap;
6968
+ cursor: pointer;
6969
+ position: relative;
6970
+ min-height: var(--mm-input-height, 3rem);
6971
+ padding: 4px 0;
6972
+ }
6973
+ .multi-select-dropdown .chips-container .chip {
6974
+ margin: 2px 4px 2px 0;
6975
+ }
6976
+ .multi-select-dropdown .chips-container .chip .material-icons.close {
6977
+ cursor: pointer;
6978
+ font-size: 16px;
6979
+ margin-left: 4px;
6980
+ }
6981
+ .multi-select-dropdown .chips-container .chip .material-icons.close:hover {
6982
+ color: var(--mm-error-color, #f44336);
6983
+ }
6984
+ .multi-select-dropdown .chips-container .placeholder {
6985
+ color: var(--mm-text-hint, #9e9e9e);
6986
+ flex-grow: 1;
6987
+ padding: 8px 0;
6988
+ }
6989
+ .multi-select-dropdown .chips-container .spacer {
6990
+ flex-grow: 1;
6991
+ }
6992
+ .multi-select-dropdown .chips-container .caret {
6993
+ margin-left: auto;
6994
+ cursor: pointer;
6995
+ }
6996
+
6835
6997
  /* File Input
6836
6998
  ========================================================================== */
6837
6999
  .file-field {
@@ -7049,20 +7211,6 @@ input[type=range]::-ms-thumb {
7049
7211
  text-align: initial;
7050
7212
  }
7051
7213
 
7052
- select:focus {
7053
- outline: 1px solid rgb(201.05, 242.65, 238.75);
7054
- }
7055
-
7056
- button:focus {
7057
- outline: none;
7058
- background-color: rgb(41.8, 182.6, 169.4);
7059
- }
7060
-
7061
- label {
7062
- font-size: 0.8rem;
7063
- color: #9e9e9e;
7064
- }
7065
-
7066
7214
  /* Enhanced Range Sliders
7067
7215
  ========================================================================== */
7068
7216
  .range-slider.vertical {