mlola-ui 1.1.14 → 1.1.18

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": "mlola-ui",
3
- "version": "1.1.14",
3
+ "version": "1.1.18",
4
4
  "mcpName": "io.github.mlolahq/mlola-ui",
5
5
  "description": "Source-copy CLI that writes framework-free Mlola UI items into your project",
6
6
  "type": "module",
@@ -204,6 +204,7 @@ correct. This table is read out of the stylesheet, so it is never stale.
204
204
  | `.ml-dropdown-menu` | `data-align` | `end` |
205
205
  | `.ml-dropdown-menu` | `data-side` | `top` |
206
206
  | `.ml-dropdown-trigger` | `aria-expanded` | `true` |
207
+ | `.ml-dropdown-trigger` | `data-variant` | `icon` |
207
208
  | `.ml-dropzone` | `aria-disabled` | _presence only_ |
208
209
  | `.ml-dropzone` | `data-dragging` | _presence only_ |
209
210
  | `.ml-dropzone-file` | `data-status` | `error` |
@@ -247,6 +247,13 @@
247
247
  "ml-modal-header",
248
248
  "ml-modal-overlay",
249
249
  "ml-modal-title",
250
+ "ml-motion-counter",
251
+ "ml-motion-counter-digit",
252
+ "ml-motion-magnetic",
253
+ "ml-motion-origin-morph",
254
+ "ml-motion-shimmer",
255
+ "ml-motion-text",
256
+ "ml-motion-tilt-glare",
250
257
  "ml-number-input",
251
258
  "ml-number-input-buttons",
252
259
  "ml-number-input-control",
@@ -697,6 +704,9 @@
697
704
  "ml-dropdown-trigger": {
698
705
  "aria-expanded": [
699
706
  "true"
707
+ ],
708
+ "data-variant": [
709
+ "icon"
700
710
  ]
701
711
  },
702
712
  "ml-dropzone": {
@@ -44,7 +44,27 @@
44
44
  "class": "ml-accordion-panel-inner",
45
45
  "attributes": {}
46
46
  }
47
- ]
47
+ ],
48
+ "rendered": {
49
+ "ml-accordion-item": {
50
+ "data-state": [
51
+ "closed",
52
+ "open"
53
+ ]
54
+ },
55
+ "ml-accordion-panel": {
56
+ "data-state": [
57
+ "closed",
58
+ "open"
59
+ ]
60
+ },
61
+ "ml-accordion-trigger": {
62
+ "data-state": [
63
+ "closed",
64
+ "open"
65
+ ]
66
+ }
67
+ }
48
68
  },
49
69
  "alert": {
50
70
  "needs": "nothing",
@@ -94,6 +114,24 @@
94
114
  "attributes": {}
95
115
  }
96
116
  ],
117
+ "rendered": {
118
+ "ml-alert": {
119
+ "data-state": [
120
+ "open"
121
+ ],
122
+ "data-tone": [
123
+ "danger",
124
+ "info",
125
+ "neutral",
126
+ "success",
127
+ "warning"
128
+ ],
129
+ "data-variant": [
130
+ "card",
131
+ "soft"
132
+ ]
133
+ }
134
+ },
97
135
  "gallery": [
98
136
  {
99
137
  "slug": "dismissible",
@@ -163,7 +201,26 @@
163
201
  "class": "ml-avatar-overflow",
164
202
  "attributes": {}
165
203
  }
166
- ]
204
+ ],
205
+ "rendered": {
206
+ "ml-avatar-root": {
207
+ "data-size": [
208
+ "lg",
209
+ "md",
210
+ "sm",
211
+ "xl",
212
+ "xs"
213
+ ]
214
+ },
215
+ "ml-avatar-status": {
216
+ "data-status": [
217
+ "away",
218
+ "busy",
219
+ "offline",
220
+ "online"
221
+ ]
222
+ }
223
+ }
167
224
  },
168
225
  "badge": {
169
226
  "needs": "nothing",
@@ -202,7 +259,29 @@
202
259
  "class": "ml-badge-remove",
203
260
  "attributes": {}
204
261
  }
205
- ]
262
+ ],
263
+ "rendered": {
264
+ "ml-badge": {
265
+ "data-size": [
266
+ "lg",
267
+ "md",
268
+ "sm"
269
+ ],
270
+ "data-tone": [
271
+ "danger",
272
+ "info",
273
+ "neutral",
274
+ "primary",
275
+ "success",
276
+ "warning"
277
+ ],
278
+ "data-variant": [
279
+ "outline",
280
+ "soft",
281
+ "solid"
282
+ ]
283
+ }
284
+ }
206
285
  },
207
286
  "breadcrumb": {
208
287
  "needs": "nothing",
@@ -291,6 +370,24 @@
291
370
  "attributes": {}
292
371
  }
293
372
  ],
373
+ "rendered": {
374
+ "ml-button": {
375
+ "data-size": [
376
+ "icon",
377
+ "lg",
378
+ "md",
379
+ "sm"
380
+ ],
381
+ "data-variant": [
382
+ "danger",
383
+ "link",
384
+ "outline",
385
+ "primary",
386
+ "secondary",
387
+ "subtle"
388
+ ]
389
+ }
390
+ },
294
391
  "gallery": [
295
392
  {
296
393
  "slug": "with-icons",
@@ -355,6 +452,16 @@
355
452
  "attributes": {}
356
453
  }
357
454
  ],
455
+ "rendered": {
456
+ "ml-card": {
457
+ "data-variant": [
458
+ "default",
459
+ "elevated",
460
+ "glass",
461
+ "specular"
462
+ ]
463
+ }
464
+ },
358
465
  "gallery": [
359
466
  {
360
467
  "slug": "plan",
@@ -467,7 +574,16 @@
467
574
  "class": "ml-checkbox-error",
468
575
  "attributes": {}
469
576
  }
470
- ]
577
+ ],
578
+ "rendered": {
579
+ "ml-checkbox-field": {
580
+ "data-state": [
581
+ "checked",
582
+ "indeterminate",
583
+ "unchecked"
584
+ ]
585
+ }
586
+ }
471
587
  },
472
588
  "command-menu": {
473
589
  "needs": "script",
@@ -566,6 +682,9 @@
566
682
  "attributes": {
567
683
  "aria-expanded": [
568
684
  "true"
685
+ ],
686
+ "data-variant": [
687
+ "icon"
569
688
  ]
570
689
  }
571
690
  },
@@ -620,6 +739,18 @@
620
739
  "attributes": {}
621
740
  }
622
741
  ],
742
+ "rendered": {
743
+ "ml-dropdown": {
744
+ "data-state": [
745
+ "closed"
746
+ ]
747
+ },
748
+ "ml-dropdown-trigger": {
749
+ "data-variant": [
750
+ "icon"
751
+ ]
752
+ }
753
+ },
623
754
  "gallery": [
624
755
  {
625
756
  "slug": "actions",
@@ -691,7 +822,15 @@
691
822
  "class": "ml-dropzone-progress",
692
823
  "attributes": {}
693
824
  }
694
- ]
825
+ ],
826
+ "rendered": {
827
+ "ml-dropzone-file": {
828
+ "data-status": [
829
+ "done",
830
+ "uploading"
831
+ ]
832
+ }
833
+ }
695
834
  },
696
835
  "empty-state": {
697
836
  "needs": "nothing",
@@ -723,6 +862,13 @@
723
862
  "attributes": {}
724
863
  }
725
864
  ],
865
+ "rendered": {
866
+ "ml-empty": {
867
+ "data-size": [
868
+ "inline"
869
+ ]
870
+ }
871
+ },
726
872
  "gallery": [
727
873
  {
728
874
  "slug": "page",
@@ -794,6 +940,20 @@
794
940
  "attributes": {}
795
941
  }
796
942
  ],
943
+ "rendered": {
944
+ "ml-input": {
945
+ "data-size": [
946
+ "lg",
947
+ "md",
948
+ "sm"
949
+ ],
950
+ "data-variant": [
951
+ "default",
952
+ "filled",
953
+ "subtle"
954
+ ]
955
+ }
956
+ },
797
957
  "gallery": [
798
958
  {
799
959
  "slug": "validation",
@@ -937,7 +1097,15 @@
937
1097
  "class": "ml-pagination-ellipsis",
938
1098
  "attributes": {}
939
1099
  }
940
- ]
1100
+ ],
1101
+ "rendered": {
1102
+ "ml-pagination-button": {
1103
+ "data-state": [
1104
+ "active",
1105
+ "inactive"
1106
+ ]
1107
+ }
1108
+ }
941
1109
  },
942
1110
  "popover": {
943
1111
  "needs": "script",
@@ -1033,7 +1201,43 @@
1033
1201
  "class": "ml-circular-progress-label",
1034
1202
  "attributes": {}
1035
1203
  }
1036
- ]
1204
+ ],
1205
+ "rendered": {
1206
+ "ml-circular-progress": {
1207
+ "data-size": [
1208
+ "lg",
1209
+ "md",
1210
+ "sm"
1211
+ ],
1212
+ "data-state": [
1213
+ "complete",
1214
+ "determinate",
1215
+ "indeterminate"
1216
+ ],
1217
+ "data-tone": [
1218
+ "primary",
1219
+ "success",
1220
+ "warning"
1221
+ ]
1222
+ },
1223
+ "ml-progress-root": {
1224
+ "data-size": [
1225
+ "lg",
1226
+ "md",
1227
+ "sm"
1228
+ ],
1229
+ "data-state": [
1230
+ "determinate",
1231
+ "indeterminate"
1232
+ ],
1233
+ "data-tone": [
1234
+ "danger",
1235
+ "primary",
1236
+ "success",
1237
+ "warning"
1238
+ ]
1239
+ }
1240
+ }
1037
1241
  },
1038
1242
  "radio-group": {
1039
1243
  "needs": "nothing",
@@ -1096,7 +1300,15 @@
1096
1300
  "class": "ml-radio-group-description",
1097
1301
  "attributes": {}
1098
1302
  }
1099
- ]
1303
+ ],
1304
+ "rendered": {
1305
+ "ml-radio-item": {
1306
+ "data-state": [
1307
+ "checked",
1308
+ "unchecked"
1309
+ ]
1310
+ }
1311
+ }
1100
1312
  },
1101
1313
  "rating": {
1102
1314
  "needs": "nothing",
@@ -1174,7 +1386,15 @@
1174
1386
  ]
1175
1387
  }
1176
1388
  }
1177
- ]
1389
+ ],
1390
+ "rendered": {
1391
+ "ml-segmented-control-item": {
1392
+ "data-state": [
1393
+ "active",
1394
+ "inactive"
1395
+ ]
1396
+ }
1397
+ }
1178
1398
  },
1179
1399
  "select": {
1180
1400
  "needs": "behavior",
@@ -1300,6 +1520,18 @@
1300
1520
  "attributes": {}
1301
1521
  }
1302
1522
  ],
1523
+ "rendered": {
1524
+ "ml-select": {
1525
+ "data-size": [
1526
+ "lg",
1527
+ "md",
1528
+ "sm"
1529
+ ],
1530
+ "data-state": [
1531
+ "closed"
1532
+ ]
1533
+ }
1534
+ },
1303
1535
  "gallery": [
1304
1536
  {
1305
1537
  "slug": "searchable",
@@ -1477,7 +1709,15 @@
1477
1709
  "class": "ml-slider-range",
1478
1710
  "attributes": {}
1479
1711
  }
1480
- ]
1712
+ ],
1713
+ "rendered": {
1714
+ "ml-slider-field": {
1715
+ "data-size": [
1716
+ "md",
1717
+ "sm"
1718
+ ]
1719
+ }
1720
+ }
1481
1721
  },
1482
1722
  "table": {
1483
1723
  "needs": "nothing",
@@ -1549,6 +1789,19 @@
1549
1789
  "attributes": {}
1550
1790
  }
1551
1791
  ],
1792
+ "rendered": {
1793
+ "ml-table": {
1794
+ "data-size": [
1795
+ "md",
1796
+ "sm"
1797
+ ]
1798
+ },
1799
+ "ml-table-row": {
1800
+ "data-state": [
1801
+ "selected"
1802
+ ]
1803
+ }
1804
+ },
1552
1805
  "gallery": [
1553
1806
  {
1554
1807
  "slug": "sortable",
@@ -1609,6 +1862,27 @@
1609
1862
  "attributes": {}
1610
1863
  }
1611
1864
  ],
1865
+ "rendered": {
1866
+ "ml-tabs": {
1867
+ "data-variant": [
1868
+ "default",
1869
+ "enclosed",
1870
+ "pills"
1871
+ ]
1872
+ },
1873
+ "ml-tabs-content": {
1874
+ "data-state": [
1875
+ "active",
1876
+ "inactive"
1877
+ ]
1878
+ },
1879
+ "ml-tabs-trigger": {
1880
+ "data-state": [
1881
+ "active",
1882
+ "inactive"
1883
+ ]
1884
+ }
1885
+ },
1612
1886
  "gallery": [
1613
1887
  {
1614
1888
  "slug": "vertical",
@@ -1709,7 +1983,28 @@
1709
1983
  "class": "ml-timeline-content",
1710
1984
  "attributes": {}
1711
1985
  }
1712
- ]
1986
+ ],
1987
+ "rendered": {
1988
+ "ml-timeline-item": {
1989
+ "data-status": [
1990
+ "complete",
1991
+ "current",
1992
+ "upcoming"
1993
+ ]
1994
+ },
1995
+ "ml-timeline-marker": {
1996
+ "data-status": [
1997
+ "complete",
1998
+ "current",
1999
+ "upcoming"
2000
+ ],
2001
+ "data-tone": [
2002
+ "danger",
2003
+ "info",
2004
+ "success"
2005
+ ]
2006
+ }
2007
+ }
1713
2008
  },
1714
2009
  "toast": {
1715
2010
  "needs": "behavior",
@@ -1844,6 +2139,28 @@
1844
2139
  }
1845
2140
  }
1846
2141
  ],
2142
+ "rendered": {
2143
+ "ml-toggle": {
2144
+ "data-size": [
2145
+ "lg",
2146
+ "md",
2147
+ "sm"
2148
+ ],
2149
+ "data-state": [
2150
+ "checked",
2151
+ "unchecked"
2152
+ ]
2153
+ },
2154
+ "ml-toggle-button": {
2155
+ "data-size": [
2156
+ "md"
2157
+ ],
2158
+ "data-state": [
2159
+ "off",
2160
+ "on"
2161
+ ]
2162
+ }
2163
+ },
1847
2164
  "gallery": [
1848
2165
  {
1849
2166
  "slug": "settings",
@@ -1949,7 +2266,15 @@
1949
2266
  "class": "ml-heatmap-caption",
1950
2267
  "attributes": {}
1951
2268
  }
1952
- ]
2269
+ ],
2270
+ "rendered": {
2271
+ "ml-heatmap": {
2272
+ "data-tone": [
2273
+ "info",
2274
+ "success"
2275
+ ]
2276
+ }
2277
+ }
1953
2278
  },
1954
2279
  "calendar": {
1955
2280
  "needs": "script",
@@ -2150,7 +2475,19 @@
2150
2475
  ]
2151
2476
  }
2152
2477
  }
2153
- ]
2478
+ ],
2479
+ "rendered": {
2480
+ "ml-status-icon": {
2481
+ "data-status": [
2482
+ "backlog",
2483
+ "canceled",
2484
+ "done",
2485
+ "in-progress",
2486
+ "in-review",
2487
+ "todo"
2488
+ ]
2489
+ }
2490
+ }
2154
2491
  },
2155
2492
  "priority-icon": {
2156
2493
  "needs": "nothing",
@@ -2501,7 +2838,17 @@
2501
2838
  "class": "ml-stepper-meter",
2502
2839
  "attributes": {}
2503
2840
  }
2504
- ]
2841
+ ],
2842
+ "rendered": {
2843
+ "ml-stepper-step": {
2844
+ "data-status": [
2845
+ "complete",
2846
+ "current",
2847
+ "error",
2848
+ "upcoming"
2849
+ ]
2850
+ }
2851
+ }
2505
2852
  },
2506
2853
  "virtual-list": {
2507
2854
  "needs": "script",
@@ -2765,7 +3112,16 @@
2765
3112
  ]
2766
3113
  }
2767
3114
  }
2768
- ]
3115
+ ],
3116
+ "rendered": {
3117
+ "ml-spinner": {
3118
+ "data-size": [
3119
+ "lg",
3120
+ "md",
3121
+ "sm"
3122
+ ]
3123
+ }
3124
+ }
2769
3125
  },
2770
3126
  "copy-button": {
2771
3127
  "needs": "script",
@@ -2780,7 +3136,20 @@
2780
3136
  ]
2781
3137
  }
2782
3138
  }
2783
- ]
3139
+ ],
3140
+ "rendered": {
3141
+ "ml-copy-button": {
3142
+ "data-size": [
3143
+ "icon",
3144
+ "sm"
3145
+ ],
3146
+ "data-variant": [
3147
+ "outline",
3148
+ "secondary",
3149
+ "subtle"
3150
+ ]
3151
+ }
3152
+ }
2784
3153
  },
2785
3154
  "password-input": {
2786
3155
  "needs": "script",
@@ -2,7 +2,7 @@
2
2
  "$schema": "./schema/registry-index.schema.json",
3
3
  "schemaVersion": 2,
4
4
  "name": "mlola-ui",
5
- "version": "1.1.14",
5
+ "version": "1.1.18",
6
6
  "homepage": "https://ui.mlola.com",
7
7
  "themeContract": {
8
8
  "attribute": "data-theme",
@@ -177,8 +177,8 @@
177
177
  },
178
178
  "registryDependencies": [],
179
179
  "engineDependencies": {
180
- "@mlola-ui/behavior": "^1.1.14",
181
- "@mlola-ui/icons": "^1.1.14"
180
+ "@mlola-ui/behavior": "^1.1.18",
181
+ "@mlola-ui/icons": "^1.1.18"
182
182
  },
183
183
  "options": [
184
184
  {
@@ -239,7 +239,7 @@
239
239
  },
240
240
  "registryDependencies": [],
241
241
  "engineDependencies": {
242
- "@mlola-ui/icons": "^1.1.14"
242
+ "@mlola-ui/icons": "^1.1.18"
243
243
  },
244
244
  "options": [
245
245
  {
@@ -401,7 +401,7 @@
401
401
  },
402
402
  "registryDependencies": [],
403
403
  "engineDependencies": {
404
- "@mlola-ui/icons": "^1.1.14"
404
+ "@mlola-ui/icons": "^1.1.18"
405
405
  },
406
406
  "options": [
407
407
  {
@@ -493,7 +493,7 @@
493
493
  },
494
494
  "registryDependencies": [],
495
495
  "engineDependencies": {
496
- "@mlola-ui/icons": "^1.1.14"
496
+ "@mlola-ui/icons": "^1.1.18"
497
497
  },
498
498
  "options": [],
499
499
  "variants": [],
@@ -546,7 +546,7 @@
546
546
  "spinner"
547
547
  ],
548
548
  "engineDependencies": {
549
- "@mlola-ui/motion": "^1.1.14"
549
+ "@mlola-ui/motion": "^1.1.18"
550
550
  },
551
551
  "options": [
552
552
  {
@@ -713,8 +713,8 @@
713
713
  },
714
714
  "registryDependencies": [],
715
715
  "engineDependencies": {
716
- "@mlola-ui/behavior": "^1.1.14",
717
- "@mlola-ui/icons": "^1.1.14"
716
+ "@mlola-ui/behavior": "^1.1.18",
717
+ "@mlola-ui/icons": "^1.1.18"
718
718
  },
719
719
  "options": [
720
720
  {
@@ -782,7 +782,7 @@
782
782
  },
783
783
  "registryDependencies": [],
784
784
  "engineDependencies": {
785
- "@mlola-ui/icons": "^1.1.14"
785
+ "@mlola-ui/icons": "^1.1.18"
786
786
  },
787
787
  "options": [],
788
788
  "variants": [],
@@ -837,7 +837,7 @@
837
837
  "modal"
838
838
  ],
839
839
  "engineDependencies": {
840
- "@mlola-ui/icons": "^1.1.14"
840
+ "@mlola-ui/icons": "^1.1.18"
841
841
  },
842
842
  "options": [],
843
843
  "variants": [],
@@ -889,7 +889,8 @@
889
889
  "tags": [
890
890
  "menu",
891
891
  "overlay",
892
- "navigation"
892
+ "navigation",
893
+ "dropdown"
893
894
  ],
894
895
  "title": "Dropdown Menu",
895
896
  "type": "registry:ui",
@@ -900,8 +901,8 @@
900
901
  },
901
902
  "registryDependencies": [],
902
903
  "engineDependencies": {
903
- "@mlola-ui/behavior": "^1.1.14",
904
- "@mlola-ui/icons": "^1.1.14"
904
+ "@mlola-ui/behavior": "^1.1.18",
905
+ "@mlola-ui/icons": "^1.1.18"
905
906
  },
906
907
  "options": [
907
908
  {
@@ -912,9 +913,21 @@
912
913
  "end"
913
914
  ],
914
915
  "default": "start"
916
+ },
917
+ {
918
+ "component": "DropdownMenu",
919
+ "prop": "variant",
920
+ "values": [
921
+ "button",
922
+ "icon"
923
+ ],
924
+ "default": "button"
915
925
  }
916
926
  ],
917
- "variants": [],
927
+ "variants": [
928
+ "button",
929
+ "icon"
930
+ ],
918
931
  "sizes": [],
919
932
  "files": [
920
933
  {
@@ -939,7 +952,7 @@
939
952
  "path": "packages/components/dropdown-menu/dropdown-menu.tsx",
940
953
  "target": "{{aliases.components}}/dropdown-menu.tsx",
941
954
  "type": "registry:ui",
942
- "integrity": "sha256-/LLytsatKd5giWMlpsZI2uUvh88pHi8qGQalNd7/wQA="
955
+ "integrity": "sha256-TSAsDWcx8mVwLdZVEaCrO0Fkeuiaui7Jw/BbZQmJH1Y="
943
956
  }
944
957
  ],
945
958
  "themeContract": {
@@ -977,7 +990,7 @@
977
990
  "input"
978
991
  ],
979
992
  "engineDependencies": {
980
- "@mlola-ui/icons": "^1.1.14"
993
+ "@mlola-ui/icons": "^1.1.18"
981
994
  },
982
995
  "options": [],
983
996
  "variants": [],
@@ -1201,8 +1214,8 @@
1201
1214
  },
1202
1215
  "registryDependencies": [],
1203
1216
  "engineDependencies": {
1204
- "@mlola-ui/behavior": "^1.1.14",
1205
- "@mlola-ui/icons": "^1.1.14"
1217
+ "@mlola-ui/behavior": "^1.1.18",
1218
+ "@mlola-ui/icons": "^1.1.18"
1206
1219
  },
1207
1220
  "options": [
1208
1221
  {
@@ -1352,7 +1365,7 @@
1352
1365
  },
1353
1366
  "registryDependencies": [],
1354
1367
  "engineDependencies": {
1355
- "@mlola-ui/icons": "^1.1.14"
1368
+ "@mlola-ui/icons": "^1.1.18"
1356
1369
  },
1357
1370
  "options": [],
1358
1371
  "variants": [],
@@ -1403,7 +1416,7 @@
1403
1416
  },
1404
1417
  "registryDependencies": [],
1405
1418
  "engineDependencies": {
1406
- "@mlola-ui/behavior": "^1.1.14"
1419
+ "@mlola-ui/behavior": "^1.1.18"
1407
1420
  },
1408
1421
  "options": [
1409
1422
  {
@@ -1778,7 +1791,7 @@
1778
1791
  },
1779
1792
  "registryDependencies": [],
1780
1793
  "engineDependencies": {
1781
- "@mlola-ui/behavior": "^1.1.14"
1794
+ "@mlola-ui/behavior": "^1.1.18"
1782
1795
  },
1783
1796
  "options": [],
1784
1797
  "variants": [],
@@ -1831,8 +1844,8 @@
1831
1844
  "input"
1832
1845
  ],
1833
1846
  "engineDependencies": {
1834
- "@mlola-ui/behavior": "^1.1.14",
1835
- "@mlola-ui/icons": "^1.1.14"
1847
+ "@mlola-ui/behavior": "^1.1.18",
1848
+ "@mlola-ui/icons": "^1.1.18"
1836
1849
  },
1837
1850
  "options": [
1838
1851
  {
@@ -1900,7 +1913,8 @@
1900
1913
  "tags": [
1901
1914
  "overlay",
1902
1915
  "dialog",
1903
- "panel"
1916
+ "panel",
1917
+ "drawer"
1904
1918
  ],
1905
1919
  "usage": {
1906
1920
  "importPath": "{{aliases.components}}/sheet",
@@ -1909,8 +1923,8 @@
1909
1923
  },
1910
1924
  "registryDependencies": [],
1911
1925
  "engineDependencies": {
1912
- "@mlola-ui/behavior": "^1.1.14",
1913
- "@mlola-ui/icons": "^1.1.14"
1926
+ "@mlola-ui/behavior": "^1.1.18",
1927
+ "@mlola-ui/icons": "^1.1.18"
1914
1928
  },
1915
1929
  "options": [
1916
1930
  {
@@ -2056,7 +2070,7 @@
2056
2070
  "input"
2057
2071
  ],
2058
2072
  "engineDependencies": {
2059
- "@mlola-ui/behavior": "^1.1.14"
2073
+ "@mlola-ui/behavior": "^1.1.18"
2060
2074
  },
2061
2075
  "options": [
2062
2076
  {
@@ -2201,7 +2215,7 @@
2201
2215
  },
2202
2216
  "registryDependencies": [],
2203
2217
  "engineDependencies": {
2204
- "@mlola-ui/behavior": "^1.1.14"
2218
+ "@mlola-ui/behavior": "^1.1.18"
2205
2219
  },
2206
2220
  "options": [
2207
2221
  {
@@ -2333,7 +2347,7 @@
2333
2347
  },
2334
2348
  "registryDependencies": [],
2335
2349
  "engineDependencies": {
2336
- "@mlola-ui/icons": "^1.1.14"
2350
+ "@mlola-ui/icons": "^1.1.18"
2337
2351
  },
2338
2352
  "options": [
2339
2353
  {
@@ -2419,7 +2433,7 @@
2419
2433
  "spinner"
2420
2434
  ],
2421
2435
  "engineDependencies": {
2422
- "@mlola-ui/icons": "^1.1.14"
2436
+ "@mlola-ui/icons": "^1.1.18"
2423
2437
  },
2424
2438
  "options": [
2425
2439
  {
@@ -2447,7 +2461,7 @@
2447
2461
  "path": "packages/components/toast/toast.tsx",
2448
2462
  "target": "{{aliases.components}}/toast.tsx",
2449
2463
  "type": "registry:ui",
2450
- "integrity": "sha256-f0DwN0XuV46fSsQf3i9RJcfQbAs2mSz7A8UJoIIICHg="
2464
+ "integrity": "sha256-6hKQ8wLN6uTnfVebpEeuvAxqAXDppWdjzGi33wtW8Y4="
2451
2465
  }
2452
2466
  ],
2453
2467
  "themeContract": {
@@ -2562,7 +2576,7 @@
2562
2576
  },
2563
2577
  "registryDependencies": [],
2564
2578
  "engineDependencies": {
2565
- "@mlola-ui/behavior": "^1.1.14"
2579
+ "@mlola-ui/behavior": "^1.1.18"
2566
2580
  },
2567
2581
  "options": [
2568
2582
  {
@@ -2701,7 +2715,7 @@
2701
2715
  },
2702
2716
  "registryDependencies": [],
2703
2717
  "engineDependencies": {
2704
- "@mlola-ui/icons": "^1.1.14"
2718
+ "@mlola-ui/icons": "^1.1.18"
2705
2719
  },
2706
2720
  "options": [
2707
2721
  {
@@ -2773,7 +2787,7 @@
2773
2787
  "popover"
2774
2788
  ],
2775
2789
  "engineDependencies": {
2776
- "@mlola-ui/icons": "^1.1.14"
2790
+ "@mlola-ui/icons": "^1.1.18"
2777
2791
  },
2778
2792
  "options": [
2779
2793
  {
@@ -2843,7 +2857,7 @@
2843
2857
  "popover"
2844
2858
  ],
2845
2859
  "engineDependencies": {
2846
- "@mlola-ui/icons": "^1.1.14"
2860
+ "@mlola-ui/icons": "^1.1.18"
2847
2861
  },
2848
2862
  "options": [],
2849
2863
  "variants": [],
@@ -3041,7 +3055,7 @@
3041
3055
  "input"
3042
3056
  ],
3043
3057
  "engineDependencies": {
3044
- "@mlola-ui/icons": "^1.1.14"
3058
+ "@mlola-ui/icons": "^1.1.18"
3045
3059
  },
3046
3060
  "options": [
3047
3061
  {
@@ -3118,7 +3132,7 @@
3118
3132
  "input"
3119
3133
  ],
3120
3134
  "engineDependencies": {
3121
- "@mlola-ui/icons": "^1.1.14"
3135
+ "@mlola-ui/icons": "^1.1.18"
3122
3136
  },
3123
3137
  "options": [],
3124
3138
  "variants": [],
@@ -3173,7 +3187,7 @@
3173
3187
  "input"
3174
3188
  ],
3175
3189
  "engineDependencies": {
3176
- "@mlola-ui/icons": "^1.1.14"
3190
+ "@mlola-ui/icons": "^1.1.18"
3177
3191
  },
3178
3192
  "options": [],
3179
3193
  "variants": [],
@@ -3236,7 +3250,7 @@
3236
3250
  "popover"
3237
3251
  ],
3238
3252
  "engineDependencies": {
3239
- "@mlola-ui/icons": "^1.1.14"
3253
+ "@mlola-ui/icons": "^1.1.18"
3240
3254
  },
3241
3255
  "options": [
3242
3256
  {
@@ -3306,7 +3320,7 @@
3306
3320
  },
3307
3321
  "registryDependencies": [],
3308
3322
  "engineDependencies": {
3309
- "@mlola-ui/icons": "^1.1.14"
3323
+ "@mlola-ui/icons": "^1.1.18"
3310
3324
  },
3311
3325
  "options": [
3312
3326
  {
@@ -3425,8 +3439,8 @@
3425
3439
  },
3426
3440
  "registryDependencies": [],
3427
3441
  "engineDependencies": {
3428
- "@mlola-ui/behavior": "^1.1.14",
3429
- "@mlola-ui/icons": "^1.1.14"
3442
+ "@mlola-ui/behavior": "^1.1.18",
3443
+ "@mlola-ui/icons": "^1.1.18"
3430
3444
  },
3431
3445
  "options": [],
3432
3446
  "variants": [],
@@ -3490,7 +3504,7 @@
3490
3504
  },
3491
3505
  "registryDependencies": [],
3492
3506
  "engineDependencies": {
3493
- "@mlola-ui/behavior": "^1.1.14"
3507
+ "@mlola-ui/behavior": "^1.1.18"
3494
3508
  },
3495
3509
  "options": [
3496
3510
  {
@@ -3577,8 +3591,8 @@
3577
3591
  },
3578
3592
  "registryDependencies": [],
3579
3593
  "engineDependencies": {
3580
- "@mlola-ui/behavior": "^1.1.14",
3581
- "@mlola-ui/icons": "^1.1.14"
3594
+ "@mlola-ui/behavior": "^1.1.18",
3595
+ "@mlola-ui/icons": "^1.1.18"
3582
3596
  },
3583
3597
  "options": [],
3584
3598
  "variants": [],
@@ -3652,7 +3666,7 @@
3652
3666
  "sheet"
3653
3667
  ],
3654
3668
  "engineDependencies": {
3655
- "@mlola-ui/icons": "^1.1.14"
3669
+ "@mlola-ui/icons": "^1.1.18"
3656
3670
  },
3657
3671
  "options": [],
3658
3672
  "variants": [],
@@ -3775,7 +3789,7 @@
3775
3789
  "button"
3776
3790
  ],
3777
3791
  "engineDependencies": {
3778
- "@mlola-ui/icons": "^1.1.14"
3792
+ "@mlola-ui/icons": "^1.1.18"
3779
3793
  },
3780
3794
  "options": [
3781
3795
  {
@@ -3878,8 +3892,8 @@
3878
3892
  "input"
3879
3893
  ],
3880
3894
  "engineDependencies": {
3881
- "@mlola-ui/behavior": "^1.1.14",
3882
- "@mlola-ui/icons": "^1.1.14"
3895
+ "@mlola-ui/behavior": "^1.1.18",
3896
+ "@mlola-ui/icons": "^1.1.18"
3883
3897
  },
3884
3898
  "options": [
3885
3899
  {
@@ -19,14 +19,17 @@ interface DropdownMenuItem {
19
19
  interface DropdownMenuProps {
20
20
  trigger: React.ReactNode;
21
21
  items: DropdownMenuItem[];
22
+ /** Names the menu; with `variant="icon"` it also names and titles the trigger. */
22
23
  label?: string;
24
+ /** `button` shows the trigger with a chevron; `icon` is a small icon-only trigger, such as a card's or a column's "…" menu. */
25
+ variant?: "button" | "icon";
23
26
  align?: "start" | "end";
24
27
  onSelect?: (label: string) => void;
25
28
  className?: string;
26
29
  }
27
30
 
28
31
  const DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(
29
- ({ trigger, items, label = "Menu", align = "start", onSelect, className }, ref) => {
32
+ ({ trigger, items, label = "Menu", variant = "button", align = "start", onSelect, className }, ref) => {
30
33
  const [open, setOpen] = React.useState(false);
31
34
  const [activeIndex, setActiveIndex] = React.useState(-1);
32
35
  const rootRef = React.useRef<HTMLDivElement>(null);
@@ -89,6 +92,10 @@ const DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(
89
92
  type="button"
90
93
  aria-haspopup="menu"
91
94
  aria-expanded={open}
95
+ aria-label={variant === "icon" ? label : undefined}
96
+ title={variant === "icon" ? label : undefined}
97
+ data-variant={variant === "icon" ? "icon" : undefined}
98
+ data-hit={variant === "icon" ? "expand" : undefined}
92
99
  className="ml-dropdown-trigger"
93
100
  onClick={() => open ? close() : openAt(enabled[0] ?? -1)}
94
101
  onKeyDown={(event) => {
@@ -105,8 +112,8 @@ const DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(
105
112
  }
106
113
  }}
107
114
  >
108
- <span className="ml-dropdown-trigger-label">{trigger}</span>
109
- <IconChevronDown aria-hidden="true" className="ml-dropdown-chevron" size="1em" />
115
+ <span className="ml-dropdown-trigger-label" aria-hidden={variant === "icon" || undefined}>{trigger}</span>
116
+ {variant === "icon" ? null : <IconChevronDown aria-hidden="true" className="ml-dropdown-chevron" size="1em" />}
110
117
  </button>
111
118
  {open && portal ? createPortal(
112
119
  <div
@@ -175,6 +175,8 @@ const SWIPE_DISMISS_PX = 72;
175
175
  function ToastCard({ item, paused }: { item: ToastItem; paused: boolean }) {
176
176
  const remaining = React.useRef(item.duration);
177
177
  const [drag, setDrag] = React.useState<{ start: number; offset: number } | null>(null);
178
+ // Swiped away, it carries on the way it was thrown (1 right, -1 left) instead of snapping back to fade.
179
+ const [thrown, setThrown] = React.useState<1 | -1 | null>(null);
178
180
 
179
181
  // A changed toast (loading → success) gets its full time again.
180
182
  React.useEffect(() => {
@@ -182,16 +184,17 @@ function ToastCard({ item, paused }: { item: ToastItem; paused: boolean }) {
182
184
  }, [item.revision, item.duration]);
183
185
 
184
186
  // The timer counts only while the toast can actually be read: not while
185
- // hovered, focused, or in a hidden tab. It resumes where it paused.
187
+ // hovered, focused, held by a finger, or in a hidden tab. It resumes where it paused.
188
+ const held = drag !== null;
186
189
  React.useEffect(() => {
187
- if (paused || item.closing || !Number.isFinite(item.duration) || item.duration <= 0) return;
190
+ if (paused || held || item.closing || !Number.isFinite(item.duration) || item.duration <= 0) return;
188
191
  const started = Date.now();
189
192
  const timer = window.setTimeout(() => dismissToast(item.id), remaining.current);
190
193
  return () => {
191
194
  window.clearTimeout(timer);
192
195
  remaining.current = Math.max(0, remaining.current - (Date.now() - started));
193
196
  };
194
- }, [paused, item.closing, item.duration, item.id, item.revision]);
197
+ }, [paused, held, item.closing, item.duration, item.id, item.revision]);
195
198
 
196
199
  const urgent = item.tone === "danger" || item.tone === "warning";
197
200
  const icon = item.loading ? <Spinner /> : item.icon === undefined ? TONE_ICONS[item.tone] : item.icon;
@@ -207,7 +210,13 @@ function ToastCard({ item, paused }: { item: ToastItem; paused: boolean }) {
207
210
  data-has-description={item.description ? "" : undefined}
208
211
  data-swiping={drag ? "" : undefined}
209
212
  className="ml-toast"
210
- style={drag ? { transform: `translateX(${drag.offset}px)`, opacity: Math.max(0.2, 1 - Math.abs(drag.offset) / 200) } : undefined}
213
+ style={
214
+ drag
215
+ ? { transform: `translateX(${drag.offset}px)`, opacity: Math.max(0.2, 1 - Math.abs(drag.offset) / 200) }
216
+ : thrown
217
+ ? { transform: `translateX(${thrown * 110}%)`, opacity: 0 }
218
+ : undefined
219
+ }
211
220
  onPointerDown={(event) => {
212
221
  if (event.pointerType === "mouse" || (event.target as HTMLElement).closest("button")) return;
213
222
  event.currentTarget.setPointerCapture(event.pointerId);
@@ -217,7 +226,10 @@ function ToastCard({ item, paused }: { item: ToastItem; paused: boolean }) {
217
226
  if (drag) setDrag({ ...drag, offset: event.clientX - drag.start });
218
227
  }}
219
228
  onPointerUp={() => {
220
- if (drag && Math.abs(drag.offset) > SWIPE_DISMISS_PX) dismissToast(item.id);
229
+ if (drag && Math.abs(drag.offset) > SWIPE_DISMISS_PX) {
230
+ setThrown(drag.offset > 0 ? 1 : -1);
231
+ dismissToast(item.id);
232
+ }
221
233
  setDrag(null);
222
234
  }}
223
235
  onPointerCancel={() => setDrag(null)}
@@ -29,7 +29,7 @@
29
29
  "packages/components/context-menu/context-menu.tsx": "sha256-OGaKzthZJGaV5T+4sRWYecA64wEEg2KImKnIzMMg1i4=",
30
30
  "packages/components/copy-button/copy-button.tsx": "sha256-6fvfifoiDOtW+WxKWon4SGEn3THtERuCX2hqGSZDtVM=",
31
31
  "packages/components/date-picker/date-picker.tsx": "sha256-QABmZzPKHc706/Rs+ln3ifDK3T2lXl34rehhuRXW+8o=",
32
- "packages/components/dropdown-menu/dropdown-menu.tsx": "sha256-/LLytsatKd5giWMlpsZI2uUvh88pHi8qGQalNd7/wQA=",
32
+ "packages/components/dropdown-menu/dropdown-menu.tsx": "sha256-TSAsDWcx8mVwLdZVEaCrO0Fkeuiaui7Jw/BbZQmJH1Y=",
33
33
  "packages/components/dropzone/dropzone.tsx": "sha256-tHCCpEWE6839UeLOszTo+R2vAL4Sp9UxuRdLkFLfnq4=",
34
34
  "packages/components/empty-state/empty-state.tsx": "sha256-/phk3A6TDaiqo61fCcAc/4Bi85e1yBGAtKXFaGhrjyw=",
35
35
  "packages/components/hover-card/hover-card.tsx": "sha256-xLBQc3vVIfQbnN85F34r9SHMGQf8FubSYfk7uP+IS2g=",
@@ -64,7 +64,7 @@
64
64
  "packages/components/time-picker/time-picker.tsx": "sha256-HquGogkQB7YGs/1iTSqftSJ310hgXqKdAc+fU1RtQ5Y=",
65
65
  "packages/components/time-picker/times.ts": "sha256-V/4uqFZPn9gVnyx8cB9vwp/RocmTYaPmLxjfy8DPQOI=",
66
66
  "packages/components/timeline/timeline.tsx": "sha256-nVg7lBcAUAzqEb0YrHagJXSaHE2aWWE9bUbQMWQY6PU=",
67
- "packages/components/toast/toast.tsx": "sha256-f0DwN0XuV46fSsQf3i9RJcfQbAs2mSz7A8UJoIIICHg=",
67
+ "packages/components/toast/toast.tsx": "sha256-6hKQ8wLN6uTnfVebpEeuvAxqAXDppWdjzGi33wtW8Y4=",
68
68
  "packages/components/toggle/toggle.tsx": "sha256-8qPHeSliHNdzQS7OLJ47BrvRR75MYyUGJlK4s21XS/U=",
69
69
  "packages/components/tooltip/tooltip.tsx": "sha256-PYjLEr+GFmu8VrLua1d4yzk0plXYbjIKMAUlwfIn+1c=",
70
70
  "packages/components/tour/tour.tsx": "sha256-b2XJokzSio2N9MFDbAbXn6w2f7diJb1KWedSCycRMmE=",
package/src/knowledge.js CHANGED
@@ -232,6 +232,12 @@ function valuesByElement() {
232
232
  for (const [attribute, values] of Object.entries(attributes)) add(cls, attribute, values);
233
233
  }
234
234
  const examples = bundled("examples.json") ?? {};
235
+ // Every value a component's showcase renders, each variant and state.
236
+ for (const example of Object.values(examples)) {
237
+ for (const [cls, attributes] of Object.entries(example.rendered ?? {})) {
238
+ for (const [attribute, list] of Object.entries(attributes)) add(cls, attribute, list);
239
+ }
240
+ }
235
241
  for (const item of loadRegistry().items) {
236
242
  const classes = examples[item.name]?.elements?.map((element) => element.class) ?? [];
237
243
  for (const option of item.options ?? []) {
package/src/mcp.js CHANGED
@@ -104,7 +104,7 @@ function readTools({ cwd, version }) {
104
104
  {
105
105
  name: "check_markup",
106
106
  title: "Check markup against the Mlola contract",
107
- description: "Checks HTML or JSX: classes that do not exist, variant classes, data-* values a class does not react to, utility classes, misuse of data-theme or data-mode, and in style attributes and <style> blocks hand-written colors, overridden theme tokens and text faded with opacity. Run it on markup you wrote before finishing.",
107
+ description: "Checks HTML or JSX: classes that do not exist, variant classes, data-* values a class does not react to, utility classes, misuse of data-theme or data-mode, and in style attributes and <style> blocks hand-written colors, overridden theme tokens and text faded with opacity. Run it on markup you wrote before finishing: pass the whole page or file, <style> blocks included, not an excerpt, since it only checks what it is given.",
108
108
  inputSchema: { type: "object", properties: { markup: { type: "string" } }, required: ["markup"], additionalProperties: false },
109
109
  annotations: { readOnlyHint: true },
110
110
  handler: ({ markup }) => {