@mlola-ui/registry 1.0.5 → 1.0.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.
Files changed (111) hide show
  1. package/components/accordion.json +15 -7
  2. package/components/activity-heatmap.json +15 -0
  3. package/components/alert.json +29 -9
  4. package/components/app-shell.json +4 -1
  5. package/components/avatar.json +33 -9
  6. package/components/badge.json +46 -15
  7. package/components/breadcrumb.json +4 -3
  8. package/components/button.json +40 -14
  9. package/components/calendar.json +14 -1
  10. package/components/card.json +20 -7
  11. package/components/carousel.json +16 -4
  12. package/components/checkbox.json +4 -3
  13. package/components/color-picker.json +15 -1
  14. package/components/combobox.json +13 -1
  15. package/components/command-menu.json +4 -1
  16. package/components/context-menu.json +5 -2
  17. package/components/date-picker.json +13 -1
  18. package/components/dropdown-menu.json +15 -4
  19. package/components/dropzone.json +4 -1
  20. package/components/empty-state.json +16 -0
  21. package/components/hover-card.json +26 -1
  22. package/components/input.json +24 -10
  23. package/components/kbd.json +3 -0
  24. package/components/modal.json +25 -11
  25. package/components/number-input.json +4 -1
  26. package/components/otp-input.json +13 -0
  27. package/components/pagination.json +4 -3
  28. package/components/popover.json +26 -1
  29. package/components/priority-icon.json +15 -0
  30. package/components/progress.json +52 -11
  31. package/components/radio-group.json +13 -2
  32. package/components/rating.json +3 -2
  33. package/components/resizable.json +31 -0
  34. package/components/segmented-control.json +4 -3
  35. package/components/select.json +19 -8
  36. package/components/sheet.json +31 -13
  37. package/components/skeleton.json +3 -2
  38. package/components/slider.json +17 -6
  39. package/components/status-icon.json +16 -0
  40. package/components/stepper.json +14 -1
  41. package/components/table.json +37 -9
  42. package/components/tabs.json +28 -7
  43. package/components/tag-input.json +4 -1
  44. package/components/textarea.json +3 -0
  45. package/components/time-picker.json +4 -1
  46. package/components/timeline.json +37 -7
  47. package/components/toast.json +16 -9
  48. package/components/toggle.json +28 -6
  49. package/components/tooltip.json +15 -2
  50. package/components/tour.json +5 -2
  51. package/components/virtual-list.json +3 -0
  52. package/generated/catalog.ts +692 -95
  53. package/generated/examples.json +2538 -0
  54. package/index.json +1 -1
  55. package/package.json +1 -1
  56. package/snapshot/index.json +863 -218
  57. package/snapshot/items/components/accordion.json +15 -7
  58. package/snapshot/items/components/activity-heatmap.json +15 -0
  59. package/snapshot/items/components/alert.json +29 -9
  60. package/snapshot/items/components/app-shell.json +4 -1
  61. package/snapshot/items/components/avatar.json +33 -9
  62. package/snapshot/items/components/badge.json +46 -15
  63. package/snapshot/items/components/breadcrumb.json +4 -3
  64. package/snapshot/items/components/button.json +40 -14
  65. package/snapshot/items/components/calendar.json +14 -1
  66. package/snapshot/items/components/card.json +20 -7
  67. package/snapshot/items/components/carousel.json +16 -4
  68. package/snapshot/items/components/checkbox.json +4 -3
  69. package/snapshot/items/components/color-picker.json +15 -1
  70. package/snapshot/items/components/combobox.json +13 -1
  71. package/snapshot/items/components/command-menu.json +4 -1
  72. package/snapshot/items/components/context-menu.json +5 -2
  73. package/snapshot/items/components/date-picker.json +13 -1
  74. package/snapshot/items/components/dropdown-menu.json +15 -4
  75. package/snapshot/items/components/dropzone.json +4 -1
  76. package/snapshot/items/components/empty-state.json +16 -0
  77. package/snapshot/items/components/hover-card.json +26 -1
  78. package/snapshot/items/components/input.json +24 -10
  79. package/snapshot/items/components/kbd.json +3 -0
  80. package/snapshot/items/components/modal.json +25 -11
  81. package/snapshot/items/components/number-input.json +4 -1
  82. package/snapshot/items/components/otp-input.json +13 -0
  83. package/snapshot/items/components/pagination.json +4 -3
  84. package/snapshot/items/components/popover.json +26 -1
  85. package/snapshot/items/components/priority-icon.json +15 -0
  86. package/snapshot/items/components/progress.json +52 -11
  87. package/snapshot/items/components/radio-group.json +13 -2
  88. package/snapshot/items/components/rating.json +3 -2
  89. package/snapshot/items/components/resizable.json +31 -0
  90. package/snapshot/items/components/segmented-control.json +4 -3
  91. package/snapshot/items/components/select.json +19 -8
  92. package/snapshot/items/components/sheet.json +31 -13
  93. package/snapshot/items/components/skeleton.json +3 -2
  94. package/snapshot/items/components/slider.json +17 -6
  95. package/snapshot/items/components/status-icon.json +16 -0
  96. package/snapshot/items/components/stepper.json +14 -1
  97. package/snapshot/items/components/table.json +37 -9
  98. package/snapshot/items/components/tabs.json +28 -7
  99. package/snapshot/items/components/tag-input.json +4 -1
  100. package/snapshot/items/components/textarea.json +3 -0
  101. package/snapshot/items/components/time-picker.json +4 -1
  102. package/snapshot/items/components/timeline.json +37 -7
  103. package/snapshot/items/components/toast.json +16 -9
  104. package/snapshot/items/components/toggle.json +28 -6
  105. package/snapshot/items/components/tooltip.json +15 -2
  106. package/snapshot/items/components/tour.json +5 -2
  107. package/snapshot/items/components/virtual-list.json +3 -0
  108. package/snapshot/source/packages/components/avatar/avatar.tsx +6 -1
  109. package/snapshot/source/packages/components/modal/modal.tsx +5 -2
  110. package/snapshot/source/packages/components/table/table.tsx +28 -6
  111. package/snapshot/source-manifest.json +3 -3
@@ -0,0 +1,2538 @@
1
+ {
2
+ "accordion": {
3
+ "needs": "behavior",
4
+ "react": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"@/components/ui/accordion\";\n\nexport default function Example() {\n return (\n <Accordion type=\"single\" defaultValue=\"plans\" collapsible>\n <AccordionItem value=\"plans\">\n <AccordionTrigger>Is there a free plan?</AccordionTrigger>\n <AccordionContent>Yes. The open-source components are free forever.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"themes\">\n <AccordionTrigger>Can I change themes later?</AccordionTrigger>\n <AccordionContent>Change data-theme on any ancestor. Nothing else moves.</AccordionContent>\n </AccordionItem>\n </Accordion>\n );\n}",
5
+ "html": "<div class=\"ml-accordion\">\n <div class=\"ml-accordion-item\" data-state=\"open\">\n <h3 class=\"ml-accordion-heading\"><button class=\"ml-accordion-trigger\" id=\"accordion-1-trigger\" type=\"button\" aria-expanded=\"true\" aria-controls=\"accordion-1-content\" data-state=\"open\"><span class=\"ml-accordion-trigger-label\">Is there a free plan?</span><svg class=\"mlola-glyph ml-accordion-chevron\" width=\"var(--mlola-glyph-size, 1.125rem)\" height=\"var(--mlola-glyph-size, 1.125rem)\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"6 9 12 15 18 9\" pathLength=\"1\"></polyline></svg></button></h3>\n <div class=\"ml-accordion-panel\" id=\"accordion-1-content\" role=\"region\" aria-labelledby=\"accordion-1-trigger\" data-state=\"open\">\n <div class=\"ml-accordion-panel-inner\">Yes. The open-source components are free forever.</div>\n </div>\n </div>\n <div class=\"ml-accordion-item\" data-state=\"closed\">\n <h3 class=\"ml-accordion-heading\"><button class=\"ml-accordion-trigger\" id=\"accordion-2-trigger\" type=\"button\" aria-expanded=\"false\" aria-controls=\"accordion-2-content\" data-state=\"closed\"><span class=\"ml-accordion-trigger-label\">Can I change themes later?</span><svg class=\"mlola-glyph ml-accordion-chevron\" width=\"var(--mlola-glyph-size, 1.125rem)\" height=\"var(--mlola-glyph-size, 1.125rem)\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"6 9 12 15 18 9\" pathLength=\"1\"></polyline></svg></button></h3>\n <div class=\"ml-accordion-panel\" id=\"accordion-2-content\" role=\"region\" aria-labelledby=\"accordion-2-trigger\" hidden=\"\" data-state=\"closed\">\n <div class=\"ml-accordion-panel-inner\">Change data-theme on any ancestor. Nothing else moves.</div>\n </div>\n </div>\n</div>",
6
+ "behavior": {
7
+ "name": "accordion",
8
+ "html": "<div class=\"ml-accordion\" data-ml=\"accordion\">\n <article class=\"ml-accordion-item\" data-state=\"open\">\n <h3 class=\"ml-accordion-heading\">\n <button id=\"t1\" class=\"ml-accordion-trigger\" data-state=\"open\" aria-expanded=\"true\" aria-controls=\"p1\">\n <span>Is there a free plan?</span>\n <svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m6 9 6 6 6-6\"/></svg>\n </button>\n </h3>\n <div id=\"p1\" class=\"ml-accordion-panel\" role=\"region\" aria-labelledby=\"t1\" data-state=\"open\">\n <p>Yes. The components in the open-source registry are free forever.</p>\n </div>\n </article>\n <article class=\"ml-accordion-item\" data-state=\"closed\">\n <h3 class=\"ml-accordion-heading\">\n <button id=\"t2\" class=\"ml-accordion-trigger\" data-state=\"closed\" aria-expanded=\"false\" aria-controls=\"p2\">\n <span>Can I change themes later?</span>\n <svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m6 9 6 6 6-6\"/></svg>\n </button>\n </h3>\n <div id=\"p2\" class=\"ml-accordion-panel\" role=\"region\" aria-labelledby=\"t2\" data-state=\"closed\" hidden>\n <p>Change data-theme on any ancestor. Nothing else moves.</p>\n </div>\n </article>\n</div>"
9
+ },
10
+ "elements": [
11
+ {
12
+ "class": "ml-accordion",
13
+ "attributes": {}
14
+ },
15
+ {
16
+ "class": "ml-accordion-item",
17
+ "attributes": {
18
+ "data-state": [
19
+ "open"
20
+ ]
21
+ }
22
+ },
23
+ {
24
+ "class": "ml-accordion-heading",
25
+ "attributes": {}
26
+ },
27
+ {
28
+ "class": "ml-accordion-trigger",
29
+ "attributes": {}
30
+ },
31
+ {
32
+ "class": "ml-accordion-trigger-label",
33
+ "attributes": {}
34
+ },
35
+ {
36
+ "class": "ml-accordion-chevron",
37
+ "attributes": {}
38
+ },
39
+ {
40
+ "class": "ml-accordion-panel",
41
+ "attributes": {}
42
+ },
43
+ {
44
+ "class": "ml-accordion-panel-inner",
45
+ "attributes": {}
46
+ }
47
+ ]
48
+ },
49
+ "alert": {
50
+ "needs": "nothing",
51
+ "react": "import { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\n\nexport default function Example() {\n return (\n <Alert tone=\"warning\">\n <AlertTitle>Your card expires soon</AlertTitle>\n <AlertDescription>Update it before September 30 to keep your plan.</AlertDescription>\n </Alert>\n );\n}",
52
+ "html": "<div class=\"ml-alert\" role=\"alert\" data-tone=\"warning\" data-variant=\"card\" data-state=\"open\">\n <span class=\"ml-alert-icon\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m10.3 3.8-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3.2l-8-14a2 2 0 0 0-3.4 0Z\" pathLength=\"1\"></path><path d=\"M12 9v4M12 17h.01\" pathLength=\"1\"></path></svg></span>\n <div class=\"ml-alert-content\">\n <p class=\"ml-alert-title\">Your card expires soon</p>\n <div class=\"ml-alert-description\">Update it before September 30 to keep your plan.</div>\n </div>\n</div>",
53
+ "elements": [
54
+ {
55
+ "class": "ml-alert",
56
+ "attributes": {
57
+ "data-state": [
58
+ "closing"
59
+ ],
60
+ "data-tone": [
61
+ "danger",
62
+ "info",
63
+ "neutral",
64
+ "success",
65
+ "warning"
66
+ ],
67
+ "data-variant": [
68
+ "soft"
69
+ ]
70
+ }
71
+ },
72
+ {
73
+ "class": "ml-alert-title",
74
+ "attributes": {}
75
+ },
76
+ {
77
+ "class": "ml-alert-icon",
78
+ "attributes": {}
79
+ },
80
+ {
81
+ "class": "ml-alert-content",
82
+ "attributes": {}
83
+ },
84
+ {
85
+ "class": "ml-alert-description",
86
+ "attributes": {}
87
+ },
88
+ {
89
+ "class": "ml-alert-actions",
90
+ "attributes": {}
91
+ },
92
+ {
93
+ "class": "ml-alert-dismiss",
94
+ "attributes": {}
95
+ }
96
+ ]
97
+ },
98
+ "avatar": {
99
+ "needs": "nothing",
100
+ "react": "import { Avatar, AvatarGroup } from \"@/components/ui/avatar\";\n\nexport default function Example() {\n return (\n <AvatarGroup max={3}>\n <Avatar name=\"Lena Park\" status=\"online\" />\n <Avatar name=\"Kai Tanaka\" />\n <Avatar name=\"Rin Sato\" />\n <Avatar name=\"Omar Haddad\" />\n </AvatarGroup>\n );\n}",
101
+ "html": "<div class=\"ml-avatar-group\" role=\"group\" aria-label=\"Avatar group, 4 people\">\n <span class=\"ml-avatar-group-item\"><span class=\"ml-avatar-root\" data-size=\"md\"><span class=\"ml-avatar\"><span class=\"ml-avatar-fallback\" role=\"img\" aria-label=\"Lena Park\">LP</span></span><span class=\"ml-avatar-status\" role=\"status\" aria-label=\"Lena Park is online\" data-status=\"online\"></span></span></span>\n <span class=\"ml-avatar-group-item\"><span class=\"ml-avatar-root\" data-size=\"md\"><span class=\"ml-avatar\"><span class=\"ml-avatar-fallback\" role=\"img\" aria-label=\"Kai Tanaka\">KT</span></span></span></span>\n <span class=\"ml-avatar-group-item\"><span class=\"ml-avatar-root\" data-size=\"md\"><span class=\"ml-avatar\"><span class=\"ml-avatar-fallback\" role=\"img\" aria-label=\"Rin Sato\">RS</span></span></span></span>\n <span class=\"ml-avatar-overflow\"><span aria-hidden=\"true\">+1</span><span class=\"ml-visually-hidden\">1 more person</span></span>\n</div>",
102
+ "elements": [
103
+ {
104
+ "class": "ml-avatar-root",
105
+ "attributes": {
106
+ "data-size": [
107
+ "lg",
108
+ "sm",
109
+ "xl",
110
+ "xs"
111
+ ]
112
+ }
113
+ },
114
+ {
115
+ "class": "ml-avatar",
116
+ "attributes": {}
117
+ },
118
+ {
119
+ "class": "ml-avatar-image",
120
+ "attributes": {}
121
+ },
122
+ {
123
+ "class": "ml-avatar-fallback",
124
+ "attributes": {}
125
+ },
126
+ {
127
+ "class": "ml-avatar-status",
128
+ "attributes": {
129
+ "data-status": [
130
+ "away",
131
+ "busy",
132
+ "online"
133
+ ]
134
+ }
135
+ },
136
+ {
137
+ "class": "ml-avatar-group",
138
+ "attributes": {}
139
+ },
140
+ {
141
+ "class": "ml-avatar-group-item",
142
+ "attributes": {}
143
+ },
144
+ {
145
+ "class": "ml-avatar-overflow",
146
+ "attributes": {}
147
+ }
148
+ ]
149
+ },
150
+ "badge": {
151
+ "needs": "nothing",
152
+ "react": "import { Badge } from \"@/components/ui/badge\";\n\nexport default function Example() {\n return (\n <div className=\"ml-cluster\">\n <Badge>Draft</Badge>\n <Badge tone=\"success\" dot>Live</Badge>\n <Badge tone=\"warning\" variant=\"outline\">Review</Badge>\n <Badge tone=\"danger\" variant=\"solid\">Failed</Badge>\n </div>\n );\n}",
153
+ "html": "<div class=\"ml-cluster\">\n <span class=\"ml-badge\" data-tone=\"neutral\" data-variant=\"soft\" data-size=\"md\"><span class=\"ml-badge-label\">Draft</span></span>\n <span class=\"ml-badge\" data-tone=\"success\" data-variant=\"soft\" data-size=\"md\"><span class=\"ml-badge-dot\" aria-hidden=\"true\"></span><span class=\"ml-badge-label\">Live</span></span>\n <span class=\"ml-badge\" data-tone=\"warning\" data-variant=\"outline\" data-size=\"md\"><span class=\"ml-badge-label\">Review</span></span>\n <span class=\"ml-badge\" data-tone=\"danger\" data-variant=\"solid\" data-size=\"md\"><span class=\"ml-badge-label\">Failed</span></span>\n</div>",
154
+ "elements": [
155
+ {
156
+ "class": "ml-badge",
157
+ "attributes": {
158
+ "data-size": [
159
+ "lg",
160
+ "sm"
161
+ ],
162
+ "data-tone": [
163
+ "danger",
164
+ "info",
165
+ "primary",
166
+ "success",
167
+ "warning"
168
+ ],
169
+ "data-variant": [
170
+ "outline",
171
+ "solid"
172
+ ]
173
+ }
174
+ },
175
+ {
176
+ "class": "ml-badge-label",
177
+ "attributes": {}
178
+ },
179
+ {
180
+ "class": "ml-badge-dot",
181
+ "attributes": {}
182
+ },
183
+ {
184
+ "class": "ml-badge-remove",
185
+ "attributes": {}
186
+ }
187
+ ]
188
+ },
189
+ "breadcrumb": {
190
+ "needs": "nothing",
191
+ "react": "import { Breadcrumb } from \"@/components/ui/breadcrumb\";\n\nexport default function Example() {\n return (\n <Breadcrumb\n items={[\n { label: \"Projects\", href: \"/projects\" },\n { label: \"Atlas\", href: \"/projects/atlas\" },\n { label: \"Settings\" },\n ]}\n />\n );\n}",
192
+ "html": "<nav class=\"ml-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"ml-breadcrumb-list\">\n <li class=\"ml-breadcrumb-item\">\n <a class=\"ml-breadcrumb-link\" data-hit=\"expand\" href=\"/projects\">Projects</a>\n <span class=\"ml-breadcrumb-separator\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m9 18 6-6-6-6\" pathLength=\"1\"></path></svg></span>\n </li>\n <li class=\"ml-breadcrumb-item\">\n <a class=\"ml-breadcrumb-link\" data-hit=\"expand\" href=\"/projects/atlas\">Atlas</a>\n <span class=\"ml-breadcrumb-separator\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m9 18 6-6-6-6\" pathLength=\"1\"></path></svg></span>\n </li>\n <li class=\"ml-breadcrumb-item\">\n <span class=\"ml-breadcrumb-page\" aria-current=\"page\">Settings</span>\n </li>\n </ol>\n</nav>",
193
+ "elements": [
194
+ {
195
+ "class": "ml-breadcrumb",
196
+ "attributes": {}
197
+ },
198
+ {
199
+ "class": "ml-breadcrumb-list",
200
+ "attributes": {}
201
+ },
202
+ {
203
+ "class": "ml-breadcrumb-item",
204
+ "attributes": {
205
+ "data-collapse-indicator": [],
206
+ "data-collapsible": []
207
+ }
208
+ },
209
+ {
210
+ "class": "ml-breadcrumb-link",
211
+ "attributes": {}
212
+ },
213
+ {
214
+ "class": "ml-breadcrumb-page",
215
+ "attributes": {}
216
+ },
217
+ {
218
+ "class": "ml-breadcrumb-separator",
219
+ "attributes": {}
220
+ },
221
+ {
222
+ "class": "ml-breadcrumb-ellipsis",
223
+ "attributes": {}
224
+ }
225
+ ]
226
+ },
227
+ "button": {
228
+ "needs": "nothing",
229
+ "react": "import { Button } from \"@/components/ui/button\";\n\nexport default function Example() {\n return (\n <div className=\"ml-cluster\">\n <Button>Save changes</Button>\n <Button variant=\"secondary\">Cancel</Button>\n <Button variant=\"danger\" size=\"sm\">Delete</Button>\n </div>\n );\n}",
230
+ "html": "<div class=\"ml-cluster\">\n <button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\"><span class=\"ml-button-label\">Save changes</span></button>\n <button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\"><span class=\"ml-button-label\">Cancel</span></button>\n <button class=\"ml-button\" type=\"button\" data-variant=\"danger\" data-size=\"sm\"><span class=\"ml-button-label\">Delete</span></button>\n</div>",
231
+ "elements": [
232
+ {
233
+ "class": "ml-button",
234
+ "attributes": {
235
+ "aria-disabled": [
236
+ "true"
237
+ ],
238
+ "aria-pressed": [
239
+ "true"
240
+ ],
241
+ "data-loading": [],
242
+ "data-size": [
243
+ "icon",
244
+ "lg",
245
+ "sm"
246
+ ],
247
+ "data-state": [
248
+ "success"
249
+ ],
250
+ "data-variant": [
251
+ "danger",
252
+ "link",
253
+ "outline",
254
+ "primary",
255
+ "secondary",
256
+ "subtle"
257
+ ]
258
+ }
259
+ },
260
+ {
261
+ "class": "ml-button-label",
262
+ "attributes": {}
263
+ },
264
+ {
265
+ "class": "ml-button-spinner",
266
+ "attributes": {}
267
+ },
268
+ {
269
+ "class": "ml-kbd",
270
+ "attributes": {}
271
+ }
272
+ ]
273
+ },
274
+ "card": {
275
+ "needs": "nothing",
276
+ "react": "import { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\";\n\nexport default function Example() {\n return (\n <Card>\n <CardHeader>\n <CardTitle>Team</CardTitle>\n <CardDescription>Four members, two pending invitations.</CardDescription>\n </CardHeader>\n <CardContent>Everyone can edit projects; only owners can change billing.</CardContent>\n <CardFooter>\n <Button size=\"sm\">Invite</Button>\n </CardFooter>\n </Card>\n );\n}",
277
+ "html": "<div class=\"ml-card\" data-variant=\"default\">\n <div class=\"ml-card-header\">\n <h3 class=\"ml-card-title\">Team</h3>\n <p class=\"ml-card-description\">Four members, two pending invitations.</p>\n </div>\n <div class=\"ml-card-content\">Everyone can edit projects; only owners can change billing.</div>\n <div class=\"ml-card-footer\">\n <button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"sm\"><span class=\"ml-button-label\">Invite</span></button>\n </div>\n</div>",
278
+ "elements": [
279
+ {
280
+ "class": "ml-card",
281
+ "attributes": {
282
+ "data-interactive": [],
283
+ "data-variant": [
284
+ "elevated",
285
+ "glass",
286
+ "specular"
287
+ ]
288
+ }
289
+ },
290
+ {
291
+ "class": "ml-card-header",
292
+ "attributes": {}
293
+ },
294
+ {
295
+ "class": "ml-card-title",
296
+ "attributes": {}
297
+ },
298
+ {
299
+ "class": "ml-card-description",
300
+ "attributes": {}
301
+ },
302
+ {
303
+ "class": "ml-card-content",
304
+ "attributes": {}
305
+ },
306
+ {
307
+ "class": "ml-card-footer",
308
+ "attributes": {}
309
+ }
310
+ ]
311
+ },
312
+ "carousel": {
313
+ "needs": "script",
314
+ "react": "import { Carousel } from \"@/components/ui/carousel\";\n\nconst slides = [\"Plan\", \"Build\", \"Ship\"].map((title) => (\n <div key={title} className=\"ml-card\" data-variant=\"elevated\">\n <div className=\"ml-card-content\">{title}</div>\n </div>\n));\n\nexport default function Example() {\n return <Carousel label=\"Release stages\" items={slides} itemLabels={[\"Plan\", \"Build\", \"Ship\"]} />;\n}",
315
+ "html": "<div class=\"ml-carousel\" role=\"group\" aria-roledescription=\"carousel\" aria-label=\"Release stages\" style=\"--ml-carousel-per-view:1;--ml-carousel-peek:0px;--ml-carousel-min:0px;--ml-carousel-autoplay:0ms\">\n <div class=\"ml-carousel-viewport\">\n <div class=\"ml-carousel-track\" tabindex=\"0\" aria-label=\"Release stages, use the arrow keys\">\n <div class=\"ml-carousel-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 3: Plan\" data-current=\"true\">\n <div class=\"ml-card\" data-variant=\"elevated\"><div class=\"ml-card-content\">Plan</div></div>\n </div>\n <div class=\"ml-carousel-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 3: Build\">\n <div class=\"ml-card\" data-variant=\"elevated\"><div class=\"ml-card-content\">Build</div></div>\n </div>\n <div class=\"ml-carousel-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 3: Ship\">\n <div class=\"ml-card\" data-variant=\"elevated\"><div class=\"ml-card-content\">Ship</div></div>\n </div>\n </div>\n <button class=\"ml-carousel-arrow\" type=\"button\" data-side=\"previous\" aria-label=\"Previous slide\"><svg class=\"mlola-glyph\" width=\"1.1em\" height=\"1.1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m15 18-6-6 6-6\" pathLength=\"1\"></path></svg></button>\n <button class=\"ml-carousel-arrow\" type=\"button\" data-side=\"next\" aria-label=\"Next slide\"><svg class=\"mlola-glyph\" width=\"1.1em\" height=\"1.1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m9 18 6-6-6-6\" pathLength=\"1\"></path></svg></button>\n </div>\n <div class=\"ml-carousel-dots\" role=\"group\" aria-label=\"Choose release stages\">\n <button class=\"ml-carousel-dot\" type=\"button\" data-hit=\"expand\" aria-current=\"true\" aria-label=\"Plan\" tabindex=\"0\"></button>\n <button class=\"ml-carousel-dot\" type=\"button\" data-hit=\"expand\" aria-label=\"Build\" tabindex=\"-1\"></button>\n <button class=\"ml-carousel-dot\" type=\"button\" data-hit=\"expand\" aria-label=\"Ship\" tabindex=\"-1\"></button>\n </div>\n</div>",
316
+ "elements": [
317
+ {
318
+ "class": "ml-carousel",
319
+ "attributes": {
320
+ "data-playing": []
321
+ }
322
+ },
323
+ {
324
+ "class": "ml-carousel-viewport",
325
+ "attributes": {}
326
+ },
327
+ {
328
+ "class": "ml-carousel-track",
329
+ "attributes": {}
330
+ },
331
+ {
332
+ "class": "ml-carousel-slide",
333
+ "attributes": {}
334
+ },
335
+ {
336
+ "class": "ml-carousel-arrow",
337
+ "attributes": {
338
+ "data-side": [
339
+ "next",
340
+ "previous"
341
+ ]
342
+ }
343
+ },
344
+ {
345
+ "class": "ml-carousel-dots",
346
+ "attributes": {}
347
+ },
348
+ {
349
+ "class": "ml-carousel-dot",
350
+ "attributes": {
351
+ "aria-current": [
352
+ "true"
353
+ ]
354
+ }
355
+ },
356
+ {
357
+ "class": "ml-carousel-dot-fill",
358
+ "attributes": {}
359
+ },
360
+ {
361
+ "class": "ml-carousel-counter",
362
+ "attributes": {}
363
+ }
364
+ ]
365
+ },
366
+ "checkbox": {
367
+ "needs": "nothing",
368
+ "react": "import { Checkbox } from \"@/components/ui/checkbox\";\n\nexport default function Example() {\n return <Checkbox label=\"Email me about releases\" description=\"At most once a month.\" defaultChecked />;\n}",
369
+ "html": "<div class=\"ml-checkbox-field\" data-state=\"checked\">\n <label class=\"ml-checkbox-control\" data-hit=\"expand\"><input class=\"ml-checkbox-input\" id=\"checkbox-1\" type=\"checkbox\" aria-checked=\"true\" aria-describedby=\"checkbox-1-description\" checked=\"\"/><span class=\"ml-checkbox-indicator\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"0.75em\" height=\"0.75em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"20 6 9 17 4 12\" pathLength=\"1\"></polyline></svg></span></label>\n <span class=\"ml-checkbox-copy\"><label class=\"ml-checkbox-label\" for=\"checkbox-1\"><span class=\"ml-checkbox-text\">Email me about releases</span></label><span class=\"ml-checkbox-description\" id=\"checkbox-1-description\">At most once a month.</span></span>\n</div>",
370
+ "elements": [
371
+ {
372
+ "class": "ml-checkbox-field",
373
+ "attributes": {
374
+ "data-state": [
375
+ "checked",
376
+ "indeterminate"
377
+ ]
378
+ }
379
+ },
380
+ {
381
+ "class": "ml-checkbox-control",
382
+ "attributes": {}
383
+ },
384
+ {
385
+ "class": "ml-checkbox-input",
386
+ "attributes": {}
387
+ },
388
+ {
389
+ "class": "ml-checkbox-indicator",
390
+ "attributes": {}
391
+ },
392
+ {
393
+ "class": "ml-checkbox-label",
394
+ "attributes": {}
395
+ },
396
+ {
397
+ "class": "ml-checkbox-text",
398
+ "attributes": {}
399
+ },
400
+ {
401
+ "class": "ml-checkbox-copy",
402
+ "attributes": {}
403
+ },
404
+ {
405
+ "class": "ml-checkbox-description",
406
+ "attributes": {}
407
+ },
408
+ {
409
+ "class": "ml-checkbox-error",
410
+ "attributes": {}
411
+ }
412
+ ]
413
+ },
414
+ "command-menu": {
415
+ "needs": "script",
416
+ "react": "\"use client\";\n\nimport * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { CommandMenu } from \"@/components/ui/command-menu\";\n\nexport default function Example() {\n const [open, setOpen] = React.useState(false);\n return (\n <>\n <Button variant=\"secondary\" onClick={() => setOpen(true)}>Search commands</Button>\n <CommandMenu\n open={open}\n onOpenChange={setOpen}\n groups={[\n {\n heading: \"Project\",\n items: [\n { id: \"new\", label: \"New project\", shortcut: \"mod+n\", onSelect: () => setOpen(false) },\n { id: \"invite\", label: \"Invite a teammate\", onSelect: () => setOpen(false) },\n ],\n },\n ]}\n />\n </>\n );\n}",
417
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\"><span class=\"ml-button-label\">Search commands</span></button>",
418
+ "elements": [
419
+ {
420
+ "class": "ml-command",
421
+ "attributes": {}
422
+ },
423
+ {
424
+ "class": "ml-modal",
425
+ "attributes": {
426
+ "data-size": [
427
+ "full",
428
+ "lg",
429
+ "sm",
430
+ "xl"
431
+ ]
432
+ }
433
+ },
434
+ {
435
+ "class": "ml-command-search",
436
+ "attributes": {}
437
+ },
438
+ {
439
+ "class": "ml-command-input",
440
+ "attributes": {}
441
+ },
442
+ {
443
+ "class": "ml-command-list",
444
+ "attributes": {}
445
+ },
446
+ {
447
+ "class": "ml-command-group",
448
+ "attributes": {}
449
+ },
450
+ {
451
+ "class": "ml-command-heading",
452
+ "attributes": {}
453
+ },
454
+ {
455
+ "class": "ml-command-item",
456
+ "attributes": {
457
+ "aria-disabled": [],
458
+ "aria-selected": [
459
+ "true"
460
+ ]
461
+ }
462
+ },
463
+ {
464
+ "class": "ml-command-icon",
465
+ "attributes": {}
466
+ },
467
+ {
468
+ "class": "ml-command-text",
469
+ "attributes": {}
470
+ },
471
+ {
472
+ "class": "ml-command-label",
473
+ "attributes": {}
474
+ },
475
+ {
476
+ "class": "ml-command-description",
477
+ "attributes": {}
478
+ },
479
+ {
480
+ "class": "ml-command-match",
481
+ "attributes": {}
482
+ },
483
+ {
484
+ "class": "ml-command-empty",
485
+ "attributes": {}
486
+ },
487
+ {
488
+ "class": "ml-command-footer",
489
+ "attributes": {}
490
+ }
491
+ ]
492
+ },
493
+ "dropdown-menu": {
494
+ "needs": "behavior",
495
+ "react": "import { DropdownMenu } from \"@/components/ui/dropdown-menu\";\n\nexport default function Example() {\n return (\n <DropdownMenu\n trigger=\"File\"\n label=\"File\"\n items={[\n { label: \"New\", shortcut: \"⌘N\" },\n { label: \"Duplicate\" },\n { label: \"Delete\", danger: true, separatorBefore: true },\n ]}\n />\n );\n}",
496
+ "html": "<div class=\"ml-dropdown\" data-state=\"closed\">\n <button class=\"ml-dropdown-trigger\" type=\"button\" aria-haspopup=\"menu\" aria-expanded=\"false\"><span class=\"ml-dropdown-trigger-label\">File</span><svg class=\"mlola-glyph ml-dropdown-chevron\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"6 9 12 15 18 9\" pathLength=\"1\"></polyline></svg></button>\n</div>",
497
+ "behavior": {
498
+ "name": "dropdown-menu",
499
+ "html": "<div class=\"ml-dropdown\" data-ml=\"dropdown-menu\">\n <button class=\"ml-dropdown-trigger\" type=\"button\" aria-haspopup=\"menu\" aria-expanded=\"false\">\n <span class=\"ml-dropdown-trigger-label\">File</span>\n <svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m6 9 6 6 6-6\"/></svg>\n </button>\n <div class=\"ml-dropdown-menu\" role=\"menu\" aria-label=\"File\" data-align=\"start\" hidden>\n <button class=\"ml-dropdown-item\" type=\"button\" role=\"menuitem\">New</button>\n <button class=\"ml-dropdown-item\" type=\"button\" role=\"menuitem\">Open</button>\n <button class=\"ml-dropdown-item\" type=\"button\" role=\"menuitem\" data-danger>Delete</button>\n </div>\n</div>"
500
+ },
501
+ "elements": [
502
+ {
503
+ "class": "ml-dropdown",
504
+ "attributes": {}
505
+ },
506
+ {
507
+ "class": "ml-dropdown-trigger",
508
+ "attributes": {
509
+ "aria-expanded": [
510
+ "true"
511
+ ]
512
+ }
513
+ },
514
+ {
515
+ "class": "ml-dropdown-trigger-label",
516
+ "attributes": {}
517
+ },
518
+ {
519
+ "class": "ml-dropdown-chevron",
520
+ "attributes": {}
521
+ },
522
+ {
523
+ "class": "ml-dropdown-menu",
524
+ "attributes": {
525
+ "data-align": [
526
+ "end"
527
+ ]
528
+ }
529
+ },
530
+ {
531
+ "class": "ml-dropdown-label",
532
+ "attributes": {}
533
+ },
534
+ {
535
+ "class": "ml-dropdown-item",
536
+ "attributes": {
537
+ "data-danger": [],
538
+ "data-highlighted": []
539
+ }
540
+ },
541
+ {
542
+ "class": "ml-dropdown-item-icon",
543
+ "attributes": {}
544
+ },
545
+ {
546
+ "class": "ml-dropdown-item-label",
547
+ "attributes": {}
548
+ },
549
+ {
550
+ "class": "ml-dropdown-shortcut",
551
+ "attributes": {}
552
+ },
553
+ {
554
+ "class": "ml-dropdown-separator",
555
+ "attributes": {}
556
+ },
557
+ {
558
+ "class": "ml-dropdown-status",
559
+ "attributes": {}
560
+ }
561
+ ]
562
+ },
563
+ "dropzone": {
564
+ "needs": "script",
565
+ "react": "\"use client\";\n\nimport * as React from \"react\";\nimport { Dropzone } from \"@/components/ui/dropzone\";\n\nexport default function Example() {\n const [files, setFiles] = React.useState<File[]>([]);\n return (\n <Dropzone\n label=\"Attachments\"\n hint={files.length ? `${files.length} selected` : \"PNG or PDF, up to 10 MB\"}\n accept=\"image/png,application/pdf\"\n maxSize={10 * 1024 * 1024}\n multiple\n onFiles={setFiles}\n />\n );\n}",
566
+ "html": "<div class=\"ml-dropzone-root\">\n <div class=\"ml-input-field\">\n <label class=\"ml-input-label\" for=\"dropzone-1\">Attachments</label>\n <div class=\"ml-dropzone\" id=\"dropzone-1\" role=\"button\" tabindex=\"0\" aria-label=\"Attachments: drop files here, or press Enter to choose\" aria-describedby=\"dropzone-1-hint\">\n <span class=\"ml-dropzone-icon\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"M12 15V3m-5 5 5-5 5 5M5 21h14\" pathLength=\"1\"></path></svg></span>\n <span class=\"ml-dropzone-title\">Drop files here, or choose</span>\n <span class=\"ml-dropzone-rules\">PNG, PDF · up to 10.0 MB</span>\n <input type=\"file\" hidden=\"\" accept=\"image/png,application/pdf\" multiple=\"\"/>\n </div>\n <p class=\"ml-input-hint\" id=\"dropzone-1-hint\">PNG or PDF, up to 10 MB</p>\n </div>\n</div>",
567
+ "elements": [
568
+ {
569
+ "class": "ml-dropzone-root",
570
+ "attributes": {}
571
+ },
572
+ {
573
+ "class": "ml-dropzone",
574
+ "attributes": {
575
+ "aria-disabled": [],
576
+ "data-dragging": []
577
+ }
578
+ },
579
+ {
580
+ "class": "ml-dropzone-icon",
581
+ "attributes": {}
582
+ },
583
+ {
584
+ "class": "ml-dropzone-title",
585
+ "attributes": {}
586
+ },
587
+ {
588
+ "class": "ml-dropzone-rules",
589
+ "attributes": {}
590
+ },
591
+ {
592
+ "class": "ml-dropzone-rejected",
593
+ "attributes": {}
594
+ },
595
+ {
596
+ "class": "ml-dropzone-files",
597
+ "attributes": {}
598
+ },
599
+ {
600
+ "class": "ml-dropzone-file",
601
+ "attributes": {
602
+ "data-status": [
603
+ "error"
604
+ ]
605
+ }
606
+ },
607
+ {
608
+ "class": "ml-dropzone-file-name",
609
+ "attributes": {}
610
+ },
611
+ {
612
+ "class": "ml-dropzone-file-meta",
613
+ "attributes": {}
614
+ },
615
+ {
616
+ "class": "ml-dropzone-remove",
617
+ "attributes": {}
618
+ },
619
+ {
620
+ "class": "ml-dropzone-progress",
621
+ "attributes": {}
622
+ }
623
+ ]
624
+ },
625
+ "empty-state": {
626
+ "needs": "nothing",
627
+ "react": "import { IconMail } from \"@mlola-ui/icons\";\nimport { Button } from \"@/components/ui/button\";\nimport { EmptyState } from \"@/components/ui/empty-state\";\n\nexport default function Example() {\n return (\n <EmptyState\n icon={<IconMail size=\"1.5em\" />}\n title=\"No messages yet\"\n description=\"New conversations appear here.\"\n actions={<Button size=\"sm\">Start one</Button>}\n />\n );\n}",
628
+ "html": "<section class=\"ml-empty\" data-size=\"inline\">\n <span class=\"ml-empty-icon\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1.5em\" height=\"1.5em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" pathLength=\"1\"></rect><path d=\"m4 7 8 6 8-6\" pathLength=\"1\"></path></svg></span>\n <h3 class=\"ml-empty-title\">No messages yet</h3>\n <p class=\"ml-empty-description\">New conversations appear here.</p>\n <div class=\"ml-empty-actions\">\n <button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"sm\"><span class=\"ml-button-label\">Start one</span></button>\n </div>\n</section>",
629
+ "elements": [
630
+ {
631
+ "class": "ml-empty",
632
+ "attributes": {
633
+ "data-size": [
634
+ "page"
635
+ ]
636
+ }
637
+ },
638
+ {
639
+ "class": "ml-empty-icon",
640
+ "attributes": {}
641
+ },
642
+ {
643
+ "class": "ml-empty-title",
644
+ "attributes": {}
645
+ },
646
+ {
647
+ "class": "ml-empty-description",
648
+ "attributes": {}
649
+ },
650
+ {
651
+ "class": "ml-empty-actions",
652
+ "attributes": {}
653
+ }
654
+ ]
655
+ },
656
+ "input": {
657
+ "needs": "nothing",
658
+ "react": "import { Input } from \"@/components/ui/input\";\n\nexport default function Example() {\n return <Input label=\"Email\" type=\"email\" placeholder=\"you@company.com\" hint=\"We never share it.\" />;\n}",
659
+ "html": "<div class=\"ml-input-field\">\n <label class=\"ml-input-label\" for=\"input-1\">Email</label>\n <div class=\"ml-input-control\">\n <input class=\"ml-input\" id=\"input-1\" aria-describedby=\"input-1-hint\" data-variant=\"default\" data-size=\"md\" type=\"email\" placeholder=\"you@company.com\"/>\n </div>\n <p class=\"ml-input-hint\" id=\"input-1-hint\">We never share it.</p>\n</div>",
660
+ "elements": [
661
+ {
662
+ "class": "ml-input-field",
663
+ "attributes": {
664
+ "data-invalid": []
665
+ }
666
+ },
667
+ {
668
+ "class": "ml-input",
669
+ "attributes": {
670
+ "aria-invalid": [
671
+ "true"
672
+ ],
673
+ "data-size": [
674
+ "lg",
675
+ "sm"
676
+ ],
677
+ "data-variant": [
678
+ "filled",
679
+ "subtle"
680
+ ]
681
+ }
682
+ },
683
+ {
684
+ "class": "ml-textarea",
685
+ "attributes": {}
686
+ },
687
+ {
688
+ "class": "ml-input-control",
689
+ "attributes": {
690
+ "data-leading": [],
691
+ "data-trailing": []
692
+ }
693
+ },
694
+ {
695
+ "class": "ml-input-trailing",
696
+ "attributes": {}
697
+ },
698
+ {
699
+ "class": "ml-input-label",
700
+ "attributes": {}
701
+ },
702
+ {
703
+ "class": "ml-input-hint",
704
+ "attributes": {}
705
+ },
706
+ {
707
+ "class": "ml-input-error",
708
+ "attributes": {}
709
+ },
710
+ {
711
+ "class": "ml-input-leading",
712
+ "attributes": {}
713
+ }
714
+ ]
715
+ },
716
+ "kbd": {
717
+ "needs": "nothing",
718
+ "react": "import { Kbd, Shortcut } from \"@/components/ui/kbd\";\n\nexport default function Example() {\n return (\n <p>\n Press <Shortcut keys=\"mod+k\" /> to search, or <Kbd>Esc</Kbd> to close.\n </p>\n );\n}",
719
+ "html": "<p>Press <kbd class=\"ml-shortcut\"><kbd class=\"ml-kbd\" aria-hidden=\"true\">⌘</kbd><kbd class=\"ml-kbd\" aria-hidden=\"true\">K</kbd><span class=\"ml-visually-hidden\">Command K</span></kbd> to search, or <kbd class=\"ml-kbd\">Esc</kbd> to close.</p>",
720
+ "elements": [
721
+ {
722
+ "class": "ml-kbd",
723
+ "attributes": {}
724
+ },
725
+ {
726
+ "class": "ml-shortcut",
727
+ "attributes": {}
728
+ }
729
+ ]
730
+ },
731
+ "modal": {
732
+ "needs": "behavior",
733
+ "react": "\"use client\";\n\nimport * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from \"@/components/ui/modal\";\n\nexport default function Example() {\n const [open, setOpen] = React.useState(false);\n const close = () => setOpen(false);\n return (\n <>\n <Button variant=\"danger\" onClick={() => setOpen(true)}>Delete project</Button>\n <Modal open={open} onClose={close} size=\"sm\" role=\"alertdialog\" label=\"Delete project\">\n <ModalHeader title=\"Delete project\" onClose={close} />\n <ModalBody>This removes the project and every deployment attached to it.</ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={close}>Keep it</Button>\n <Button variant=\"danger\" onClick={close}>Delete</Button>\n </ModalFooter>\n </Modal>\n </>\n );\n}",
734
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"danger\" data-size=\"md\"><span class=\"ml-button-label\">Delete project</span></button>",
735
+ "behavior": {
736
+ "name": "modal",
737
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"danger\" data-ml-opens=\"delete-project\">\n <span class=\"ml-button-label\">Delete project</span>\n</button>\n\n<div class=\"ml-modal-overlay\" data-ml-for=\"delete-project\" hidden></div>\n<div class=\"ml-modal\" id=\"delete-project\" data-ml=\"modal\" role=\"alertdialog\" aria-modal=\"true\" aria-labelledby=\"delete-project-title\" data-size=\"sm\" tabindex=\"-1\" hidden>\n <div class=\"ml-modal-header\">\n <h2 class=\"ml-modal-title\" id=\"delete-project-title\">Delete project</h2>\n <button class=\"ml-modal-close\" type=\"button\" aria-label=\"Close dialog\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M18 6 6 18M6 6l12 12\"/></svg></button>\n </div>\n <div class=\"ml-modal-body\">This removes the project and every deployment attached to it.</div>\n <div class=\"ml-modal-footer\">\n <button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-ml-close><span class=\"ml-button-label\">Keep it</span></button>\n <button class=\"ml-button\" type=\"button\" data-variant=\"danger\"><span class=\"ml-button-label\">Delete</span></button>\n </div>\n</div>"
738
+ },
739
+ "elements": [
740
+ {
741
+ "class": "ml-modal-overlay",
742
+ "attributes": {}
743
+ },
744
+ {
745
+ "class": "ml-modal",
746
+ "attributes": {
747
+ "data-size": [
748
+ "full",
749
+ "lg",
750
+ "sm",
751
+ "xl"
752
+ ]
753
+ }
754
+ },
755
+ {
756
+ "class": "ml-modal-header",
757
+ "attributes": {}
758
+ },
759
+ {
760
+ "class": "ml-modal-title",
761
+ "attributes": {}
762
+ },
763
+ {
764
+ "class": "ml-modal-close",
765
+ "attributes": {}
766
+ },
767
+ {
768
+ "class": "ml-modal-body",
769
+ "attributes": {}
770
+ },
771
+ {
772
+ "class": "ml-modal-footer",
773
+ "attributes": {}
774
+ }
775
+ ]
776
+ },
777
+ "otp-input": {
778
+ "needs": "script",
779
+ "react": "import { OtpInput } from \"@/components/ui/otp-input\";\n\nexport default function Example() {\n return <OtpInput label=\"Verification code\" hint=\"Sent to your email.\" length={6} />;\n}",
780
+ "html": "<div class=\"ml-input-field\">\n <label class=\"ml-input-label\" for=\"otp-1\">Verification code</label>\n <div class=\"ml-otp\" role=\"group\" aria-label=\"Verification code\">\n <input class=\"ml-otp-box\" id=\"otp-1\" inputMode=\"numeric\" autoComplete=\"one-time-code\" aria-label=\"Digit 1 of 6\" aria-describedby=\"otp-1-hint\" maxLength=\"6\" value=\"\"/>\n <input class=\"ml-otp-box\" inputMode=\"numeric\" autoComplete=\"off\" aria-label=\"Digit 2 of 6\" maxLength=\"1\" value=\"\"/>\n <input class=\"ml-otp-box\" inputMode=\"numeric\" autoComplete=\"off\" aria-label=\"Digit 3 of 6\" maxLength=\"1\" value=\"\"/>\n <input class=\"ml-otp-box\" inputMode=\"numeric\" autoComplete=\"off\" aria-label=\"Digit 4 of 6\" maxLength=\"1\" value=\"\"/>\n <input class=\"ml-otp-box\" inputMode=\"numeric\" autoComplete=\"off\" aria-label=\"Digit 5 of 6\" maxLength=\"1\" value=\"\"/>\n <input class=\"ml-otp-box\" inputMode=\"numeric\" autoComplete=\"off\" aria-label=\"Digit 6 of 6\" maxLength=\"1\" value=\"\"/>\n </div>\n <p class=\"ml-input-hint\" id=\"otp-1-hint\">Sent to your email.</p>\n</div>",
781
+ "elements": [
782
+ {
783
+ "class": "ml-otp",
784
+ "attributes": {
785
+ "data-invalid": []
786
+ }
787
+ },
788
+ {
789
+ "class": "ml-otp-box",
790
+ "attributes": {}
791
+ },
792
+ {
793
+ "class": "ml-otp-separator",
794
+ "attributes": {}
795
+ }
796
+ ]
797
+ },
798
+ "pagination": {
799
+ "needs": "script",
800
+ "react": "\"use client\";\n\nimport * as React from \"react\";\nimport { Pagination } from \"@/components/ui/pagination\";\n\nexport default function Example() {\n const [page, setPage] = React.useState(3);\n return <Pagination currentPage={page} totalPages={12} onPageChange={setPage} />;\n}",
801
+ "html": "<nav class=\"ml-pagination\" aria-label=\"Pagination\">\n <ol class=\"ml-pagination-list\">\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to previous page\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m15 18-6-6 6-6\" pathLength=\"1\"></path></svg><span class=\"ml-pagination-button-label\">Previous</span></button>\n </li>\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to page 1\" data-state=\"inactive\">1</button>\n </li>\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to page 2\" data-state=\"inactive\">2</button>\n </li>\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to page 3\" aria-current=\"page\" data-state=\"active\">3</button>\n </li>\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to page 4\" data-state=\"inactive\">4</button>\n </li>\n <li><span class=\"ml-pagination-ellipsis\" aria-hidden=\"true\">…</span></li>\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to page 12\" data-state=\"inactive\">12</button>\n </li>\n <li>\n <button class=\"ml-pagination-button\" type=\"button\" aria-label=\"Go to next page\"><span class=\"ml-pagination-button-label\">Next</span><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m9 18 6-6-6-6\" pathLength=\"1\"></path></svg></button>\n </li>\n </ol>\n</nav>",
802
+ "elements": [
803
+ {
804
+ "class": "ml-pagination",
805
+ "attributes": {}
806
+ },
807
+ {
808
+ "class": "ml-pagination-list",
809
+ "attributes": {}
810
+ },
811
+ {
812
+ "class": "ml-pagination-button",
813
+ "attributes": {
814
+ "aria-current": [
815
+ "page"
816
+ ],
817
+ "data-state": [
818
+ "active"
819
+ ]
820
+ }
821
+ },
822
+ {
823
+ "class": "ml-pagination-button-label",
824
+ "attributes": {}
825
+ },
826
+ {
827
+ "class": "ml-pagination-ellipsis",
828
+ "attributes": {}
829
+ }
830
+ ]
831
+ },
832
+ "popover": {
833
+ "needs": "script",
834
+ "react": "import { Button } from \"@/components/ui/button\";\nimport { Popover } from \"@/components/ui/popover\";\n\nexport default function Example() {\n return (\n <Popover label=\"Share\" trigger={<Button variant=\"secondary\">Share</Button>}>\n <p>Anyone with the link can view this page.</p>\n </Popover>\n );\n}",
835
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\" aria-haspopup=\"dialog\" aria-expanded=\"false\"><span class=\"ml-button-label\">Share</span></button>",
836
+ "elements": [
837
+ {
838
+ "class": "ml-popover",
839
+ "attributes": {
840
+ "data-side": [
841
+ "bottom",
842
+ "left",
843
+ "right",
844
+ "top"
845
+ ]
846
+ }
847
+ }
848
+ ]
849
+ },
850
+ "progress": {
851
+ "needs": "nothing",
852
+ "react": "import { Progress } from \"@/components/ui/progress\";\n\nexport default function Example() {\n return <Progress value={64} label=\"Uploading\" showLabel />;\n}",
853
+ "html": "<div class=\"ml-progress-root\" data-tone=\"primary\" data-size=\"md\" data-state=\"determinate\">\n <div class=\"ml-progress-label\">\n <span>Uploading</span>\n <span class=\"ml-progress-value\" aria-hidden=\"true\">0%</span>\n </div>\n <div class=\"ml-progress-track\" role=\"progressbar\" aria-label=\"Uploading\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"64\" aria-valuetext=\"64%\">\n <div class=\"ml-progress-fill\" aria-hidden=\"true\" style=\"width:64%\"></div>\n </div>\n</div>",
854
+ "elements": [
855
+ {
856
+ "class": "ml-progress-root",
857
+ "attributes": {
858
+ "data-active": [],
859
+ "data-size": [
860
+ "lg",
861
+ "sm"
862
+ ],
863
+ "data-state": [
864
+ "complete",
865
+ "indeterminate"
866
+ ],
867
+ "data-tone": [
868
+ "danger",
869
+ "info",
870
+ "success",
871
+ "warning"
872
+ ]
873
+ }
874
+ },
875
+ {
876
+ "class": "ml-progress-label",
877
+ "attributes": {}
878
+ },
879
+ {
880
+ "class": "ml-progress-value",
881
+ "attributes": {}
882
+ },
883
+ {
884
+ "class": "ml-progress-track",
885
+ "attributes": {}
886
+ },
887
+ {
888
+ "class": "ml-progress-fill",
889
+ "attributes": {}
890
+ },
891
+ {
892
+ "class": "ml-circular-progress",
893
+ "attributes": {
894
+ "data-size": [
895
+ "lg",
896
+ "sm"
897
+ ],
898
+ "data-state": [
899
+ "complete",
900
+ "indeterminate"
901
+ ],
902
+ "data-tone": [
903
+ "danger",
904
+ "info",
905
+ "success",
906
+ "warning"
907
+ ]
908
+ }
909
+ },
910
+ {
911
+ "class": "ml-circular-progress-svg",
912
+ "attributes": {}
913
+ },
914
+ {
915
+ "class": "ml-circular-progress-track",
916
+ "attributes": {}
917
+ },
918
+ {
919
+ "class": "ml-circular-progress-fill",
920
+ "attributes": {}
921
+ },
922
+ {
923
+ "class": "ml-circular-progress-label",
924
+ "attributes": {}
925
+ }
926
+ ]
927
+ },
928
+ "radio-group": {
929
+ "needs": "nothing",
930
+ "react": "import { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";\n\nexport default function Example() {\n return (\n <RadioGroup label=\"Billing\" defaultValue=\"yearly\" name=\"billing\">\n <RadioGroupItem value=\"monthly\" label=\"Monthly\" />\n <RadioGroupItem value=\"yearly\" label=\"Yearly\" description=\"Two months free.\" />\n </RadioGroup>\n );\n}",
931
+ "html": "<div class=\"ml-radio-group\" role=\"radiogroup\" aria-labelledby=\"billing-label\" aria-orientation=\"vertical\" data-orientation=\"vertical\">\n <div class=\"ml-radio-group-label\" id=\"billing-label\">Billing</div>\n <div class=\"ml-radio-group-items\">\n <label class=\"ml-radio-item\" for=\"billing-1\" data-state=\"unchecked\"><span class=\"ml-radio-control\"><input class=\"ml-radio-input\" id=\"billing-1\" type=\"radio\" name=\"billing\" value=\"monthly\"/><span class=\"ml-radio-indicator\" aria-hidden=\"true\"></span></span><span class=\"ml-radio-copy\"><span class=\"ml-radio-label\">Monthly</span></span></label>\n <label class=\"ml-radio-item\" for=\"billing-2\" data-state=\"checked\"><span class=\"ml-radio-control\"><input class=\"ml-radio-input\" id=\"billing-2\" type=\"radio\" aria-describedby=\"billing-2-description\" name=\"billing\" checked=\"\" value=\"yearly\"/><span class=\"ml-radio-indicator\" aria-hidden=\"true\"></span></span><span class=\"ml-radio-copy\"><span class=\"ml-radio-label\">Yearly</span><span class=\"ml-radio-description\" id=\"billing-2-description\">Two months free.</span></span></label>\n </div>\n</div>",
932
+ "elements": [
933
+ {
934
+ "class": "ml-radio-item",
935
+ "attributes": {
936
+ "data-state": [
937
+ "checked"
938
+ ]
939
+ }
940
+ },
941
+ {
942
+ "class": "ml-radio-control",
943
+ "attributes": {}
944
+ },
945
+ {
946
+ "class": "ml-radio-input",
947
+ "attributes": {}
948
+ },
949
+ {
950
+ "class": "ml-radio-indicator",
951
+ "attributes": {}
952
+ },
953
+ {
954
+ "class": "ml-radio-label",
955
+ "attributes": {}
956
+ },
957
+ {
958
+ "class": "ml-radio-copy",
959
+ "attributes": {}
960
+ },
961
+ {
962
+ "class": "ml-radio-description",
963
+ "attributes": {}
964
+ },
965
+ {
966
+ "class": "ml-radio-group-error",
967
+ "attributes": {}
968
+ },
969
+ {
970
+ "class": "ml-radio-group",
971
+ "attributes": {
972
+ "data-orientation": [
973
+ "horizontal"
974
+ ]
975
+ }
976
+ },
977
+ {
978
+ "class": "ml-radio-group-items",
979
+ "attributes": {}
980
+ },
981
+ {
982
+ "class": "ml-radio-group-label",
983
+ "attributes": {}
984
+ },
985
+ {
986
+ "class": "ml-radio-group-description",
987
+ "attributes": {}
988
+ }
989
+ ]
990
+ },
991
+ "rating": {
992
+ "needs": "nothing",
993
+ "react": "import { Rating } from \"@/components/ui/rating\";\n\nexport default function Example() {\n return <Rating value={4.5} count={128} showValue label=\"Average rating\" />;\n}",
994
+ "html": "<span class=\"ml-rating\" role=\"img\" aria-label=\"Average rating\"><span class=\"ml-rating-track\" aria-hidden=\"true\"><span class=\"ml-rating-fill\" style=\"--ml-rating:90%\">★★★★★</span>★★★★★</span><span class=\"ml-rating-value\">4.5</span><span class=\"ml-rating-count\">(128)</span></span>",
995
+ "elements": [
996
+ {
997
+ "class": "ml-rating",
998
+ "attributes": {}
999
+ },
1000
+ {
1001
+ "class": "ml-rating-track",
1002
+ "attributes": {}
1003
+ },
1004
+ {
1005
+ "class": "ml-rating-fill",
1006
+ "attributes": {}
1007
+ },
1008
+ {
1009
+ "class": "ml-rating-count",
1010
+ "attributes": {}
1011
+ },
1012
+ {
1013
+ "class": "ml-rating-value",
1014
+ "attributes": {}
1015
+ }
1016
+ ]
1017
+ },
1018
+ "resizable": {
1019
+ "needs": "script",
1020
+ "react": "import { Resizable } from \"@/components/ui/resizable\";\n\nexport default function Example() {\n return (\n <div style={{ height: 200 }}>\n <Resizable\n label=\"Resize sidebar\"\n defaultSize={30}\n min={20}\n max={50}\n first={<nav>Files</nav>}\n second={<main>Editor</main>}\n />\n </div>\n );\n}",
1021
+ "html": "<div style=\"height:200px\">\n <div class=\"ml-resizable\" data-direction=\"horizontal\" data-anchor=\"first\" style=\"--ml-resizable-size:30%\">\n <div class=\"ml-resizable-pane\"><nav>Files</nav></div>\n <div class=\"ml-resizable-handle\" role=\"separator\" tabindex=\"0\" aria-label=\"Resize sidebar\" aria-orientation=\"vertical\" aria-valuemin=\"20\" aria-valuemax=\"50\" aria-valuenow=\"30\"></div>\n <div class=\"ml-resizable-pane\"><main>Editor</main></div>\n </div>\n</div>",
1022
+ "elements": [
1023
+ {
1024
+ "class": "ml-resizable",
1025
+ "attributes": {
1026
+ "data-anchor": [
1027
+ "second"
1028
+ ],
1029
+ "data-direction": [
1030
+ "horizontal",
1031
+ "vertical"
1032
+ ]
1033
+ }
1034
+ },
1035
+ {
1036
+ "class": "ml-resizable-pane",
1037
+ "attributes": {
1038
+ "data-folded": []
1039
+ }
1040
+ },
1041
+ {
1042
+ "class": "ml-resizable-handle",
1043
+ "attributes": {}
1044
+ }
1045
+ ]
1046
+ },
1047
+ "segmented-control": {
1048
+ "needs": "script",
1049
+ "react": "import { SegmentedControl } from \"@/components/ui/segmented-control\";\n\nexport default function Example() {\n return (\n <SegmentedControl\n label=\"View\"\n defaultValue=\"board\"\n options={[\n { value: \"list\", label: \"List\" },\n { value: \"board\", label: \"Board\" },\n { value: \"calendar\", label: \"Calendar\" },\n ]}\n />\n );\n}",
1050
+ "html": "<div class=\"ml-segmented-control\" role=\"radiogroup\" aria-label=\"View\">\n <button class=\"ml-segmented-control-item\" type=\"button\" role=\"radio\" aria-checked=\"false\" data-state=\"inactive\" tabindex=\"-1\">List</button>\n <button class=\"ml-segmented-control-item\" type=\"button\" role=\"radio\" aria-checked=\"true\" data-state=\"active\" tabindex=\"0\">Board</button>\n <button class=\"ml-segmented-control-item\" type=\"button\" role=\"radio\" aria-checked=\"false\" data-state=\"inactive\" tabindex=\"-1\">Calendar</button>\n</div>",
1051
+ "elements": [
1052
+ {
1053
+ "class": "ml-segmented-control",
1054
+ "attributes": {}
1055
+ },
1056
+ {
1057
+ "class": "ml-segmented-control-item",
1058
+ "attributes": {
1059
+ "aria-pressed": [
1060
+ "true"
1061
+ ],
1062
+ "data-state": [
1063
+ "active"
1064
+ ]
1065
+ }
1066
+ }
1067
+ ]
1068
+ },
1069
+ "select": {
1070
+ "needs": "behavior",
1071
+ "react": "import { Select } from \"@/components/ui/select\";\n\nexport default function Example() {\n return (\n <Select\n label=\"Region\"\n placeholder=\"Choose a region\"\n defaultValue=\"eu\"\n options={[\n { value: \"us\", label: \"United States\" },\n { value: \"eu\", label: \"Europe\" },\n { value: \"ap\", label: \"Asia Pacific\" },\n ]}\n />\n );\n}",
1072
+ "html": "<div class=\"ml-select-root\">\n <span class=\"ml-select-label\" id=\"select-1-label\">Region</span>\n <div class=\"ml-select-control\">\n <button class=\"ml-select\" type=\"button\" role=\"combobox\" aria-haspopup=\"listbox\" aria-expanded=\"false\" aria-labelledby=\"select-1-label\" data-size=\"md\" data-state=\"closed\"><span class=\"ml-select-value\">Europe</span><svg class=\"mlola-glyph ml-select-chevron\" width=\"1.125em\" height=\"1.125em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"6 9 12 15 18 9\" pathLength=\"1\"></polyline></svg></button>\n </div>\n</div>",
1073
+ "behavior": {
1074
+ "name": "select",
1075
+ "html": "<div class=\"ml-select-root\" data-ml=\"select\">\n <span class=\"ml-select-label\" id=\"fruit-label\">Fruit</span>\n <div class=\"ml-select-control\">\n <button class=\"ml-select\" type=\"button\" role=\"combobox\" aria-expanded=\"false\" aria-controls=\"fruit-list\" aria-labelledby=\"fruit-label\" data-state=\"closed\">\n <span class=\"ml-select-value\" data-placeholder>Select…</span>\n <span class=\"ml-select-chevron\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m6 9 6 6 6-6\"/></svg></span>\n </button>\n </div>\n <div class=\"ml-select-popover\" hidden>\n <ul class=\"ml-select-list\" id=\"fruit-list\" role=\"listbox\" aria-labelledby=\"fruit-label\">\n <li class=\"ml-select-option\" id=\"opt-apple\" role=\"option\" aria-selected=\"false\" data-state=\"unchecked\">Apple</li>\n <li class=\"ml-select-option\" id=\"opt-pear\" role=\"option\" aria-selected=\"false\" data-state=\"unchecked\">Pear</li>\n <li class=\"ml-select-option\" id=\"opt-durian\" role=\"option\" aria-selected=\"false\" aria-disabled=\"true\" data-state=\"unchecked\">Durian</li>\n </ul>\n </div>\n</div>"
1076
+ },
1077
+ "elements": [
1078
+ {
1079
+ "class": "ml-select-root",
1080
+ "attributes": {
1081
+ "data-invalid": []
1082
+ }
1083
+ },
1084
+ {
1085
+ "class": "ml-select-control",
1086
+ "attributes": {}
1087
+ },
1088
+ {
1089
+ "class": "ml-select",
1090
+ "attributes": {
1091
+ "data-size": [
1092
+ "lg",
1093
+ "sm"
1094
+ ],
1095
+ "data-state": [
1096
+ "open"
1097
+ ]
1098
+ }
1099
+ },
1100
+ {
1101
+ "class": "ml-select-value",
1102
+ "attributes": {
1103
+ "data-placeholder": []
1104
+ }
1105
+ },
1106
+ {
1107
+ "class": "ml-select-chips",
1108
+ "attributes": {}
1109
+ },
1110
+ {
1111
+ "class": "ml-select-chip-overflow",
1112
+ "attributes": {}
1113
+ },
1114
+ {
1115
+ "class": "ml-select-chevron",
1116
+ "attributes": {}
1117
+ },
1118
+ {
1119
+ "class": "ml-select-clear",
1120
+ "attributes": {}
1121
+ },
1122
+ {
1123
+ "class": "ml-select-popover",
1124
+ "attributes": {
1125
+ "data-side": [
1126
+ "top"
1127
+ ]
1128
+ }
1129
+ },
1130
+ {
1131
+ "class": "ml-select-search-wrap",
1132
+ "attributes": {}
1133
+ },
1134
+ {
1135
+ "class": "ml-select-search",
1136
+ "attributes": {}
1137
+ },
1138
+ {
1139
+ "class": "ml-select-list",
1140
+ "attributes": {}
1141
+ },
1142
+ {
1143
+ "class": "ml-select-group",
1144
+ "attributes": {}
1145
+ },
1146
+ {
1147
+ "class": "ml-select-label",
1148
+ "attributes": {}
1149
+ },
1150
+ {
1151
+ "class": "ml-select-option",
1152
+ "attributes": {
1153
+ "data-disabled": [],
1154
+ "data-highlighted": [],
1155
+ "data-state": [
1156
+ "checked"
1157
+ ]
1158
+ }
1159
+ },
1160
+ {
1161
+ "class": "ml-select-option-label",
1162
+ "attributes": {}
1163
+ },
1164
+ {
1165
+ "class": "ml-select-option-text",
1166
+ "attributes": {}
1167
+ },
1168
+ {
1169
+ "class": "ml-select-option-description",
1170
+ "attributes": {}
1171
+ },
1172
+ {
1173
+ "class": "ml-select-option-leading",
1174
+ "attributes": {}
1175
+ },
1176
+ {
1177
+ "class": "ml-select-option-trailing",
1178
+ "attributes": {}
1179
+ },
1180
+ {
1181
+ "class": "ml-select-check",
1182
+ "attributes": {}
1183
+ },
1184
+ {
1185
+ "class": "ml-select-empty",
1186
+ "attributes": {}
1187
+ },
1188
+ {
1189
+ "class": "ml-select-error",
1190
+ "attributes": {}
1191
+ }
1192
+ ]
1193
+ },
1194
+ "sheet": {
1195
+ "needs": "behavior",
1196
+ "react": "\"use client\";\n\nimport * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Sheet, SheetBody, SheetFooter } from \"@/components/ui/sheet\";\n\nexport default function Example() {\n const [open, setOpen] = React.useState(false);\n const close = () => setOpen(false);\n return (\n <>\n <Button variant=\"secondary\" onClick={() => setOpen(true)}>Settings</Button>\n <Sheet open={open} onClose={close} title=\"Account settings\" description=\"Changes apply instantly.\">\n <SheetBody>Escape closes the panel, and so does the backdrop.</SheetBody>\n <SheetFooter>\n <Button onClick={close}>Done</Button>\n </SheetFooter>\n </Sheet>\n </>\n );\n}",
1197
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\"><span class=\"ml-button-label\">Settings</span></button>",
1198
+ "behavior": {
1199
+ "name": "sheet",
1200
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-ml-opens=\"account-settings\">\n <span class=\"ml-button-label\">Settings</span>\n</button>\n\n<div class=\"ml-sheet-overlay\" data-ml-for=\"account-settings\" hidden></div>\n<div class=\"ml-sheet-panel\" id=\"account-settings\" data-ml=\"sheet\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"account-settings-title\" data-side=\"right\" data-size=\"md\" tabindex=\"-1\" hidden>\n <div class=\"ml-sheet-header\">\n <div class=\"ml-sheet-heading\">\n <h2 class=\"ml-sheet-title\" id=\"account-settings-title\">Account settings</h2>\n <p class=\"ml-sheet-description\">Changes apply instantly.</p>\n </div>\n <button class=\"ml-sheet-close\" type=\"button\" aria-label=\"Close panel\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M18 6 6 18M6 6l12 12\"/></svg></button>\n </div>\n <div class=\"ml-sheet-body\">\n <p>Escape closes the panel, and so does the backdrop.</p>\n </div>\n</div>"
1201
+ },
1202
+ "elements": [
1203
+ {
1204
+ "class": "ml-sheet-overlay",
1205
+ "attributes": {}
1206
+ },
1207
+ {
1208
+ "class": "ml-sheet-close",
1209
+ "attributes": {}
1210
+ },
1211
+ {
1212
+ "class": "ml-sheet-layer",
1213
+ "attributes": {}
1214
+ },
1215
+ {
1216
+ "class": "ml-sheet-panel",
1217
+ "attributes": {
1218
+ "data-side": [
1219
+ "bottom",
1220
+ "left",
1221
+ "right",
1222
+ "top"
1223
+ ],
1224
+ "data-size": [
1225
+ "lg",
1226
+ "sm"
1227
+ ]
1228
+ }
1229
+ },
1230
+ {
1231
+ "class": "ml-sheet-header",
1232
+ "attributes": {}
1233
+ },
1234
+ {
1235
+ "class": "ml-sheet-heading",
1236
+ "attributes": {}
1237
+ },
1238
+ {
1239
+ "class": "ml-sheet-title",
1240
+ "attributes": {}
1241
+ },
1242
+ {
1243
+ "class": "ml-sheet-description",
1244
+ "attributes": {}
1245
+ },
1246
+ {
1247
+ "class": "ml-sheet-body",
1248
+ "attributes": {}
1249
+ },
1250
+ {
1251
+ "class": "ml-sheet-footer",
1252
+ "attributes": {}
1253
+ }
1254
+ ]
1255
+ },
1256
+ "skeleton": {
1257
+ "needs": "nothing",
1258
+ "react": "import { SkeletonAvatar, SkeletonRegion, SkeletonText } from \"@/components/ui/skeleton\";\n\nexport default function Example() {\n return (\n <SkeletonRegion label=\"Loading profile\">\n <div className=\"ml-cluster\">\n <SkeletonAvatar size={40} />\n <SkeletonText lines={2} />\n </div>\n </SkeletonRegion>\n );\n}",
1259
+ "html": "<div class=\"ml-skeleton-region\" role=\"status\" aria-busy=\"true\">\n <span class=\"ml-visually-hidden\">Loading profile</span>\n <div class=\"ml-cluster\">\n <div class=\"ml-skeleton ml-skeleton-avatar\" aria-hidden=\"true\" style=\"width:40px;height:40px;border-radius:50%\"></div>\n <div class=\"ml-skeleton-text\" aria-hidden=\"true\">\n <div class=\"ml-skeleton ml-skeleton-line\" data-rounded=\"\"></div>\n <div class=\"ml-skeleton ml-skeleton-line\" data-rounded=\"\"></div>\n </div>\n </div>\n</div>",
1260
+ "elements": [
1261
+ {
1262
+ "class": "ml-skeleton",
1263
+ "attributes": {
1264
+ "data-rounded": [
1265
+ "none"
1266
+ ]
1267
+ }
1268
+ },
1269
+ {
1270
+ "class": "ml-skeleton-text",
1271
+ "attributes": {}
1272
+ },
1273
+ {
1274
+ "class": "ml-skeleton-line",
1275
+ "attributes": {}
1276
+ },
1277
+ {
1278
+ "class": "ml-skeleton-avatar",
1279
+ "attributes": {}
1280
+ },
1281
+ {
1282
+ "class": "ml-skeleton-card",
1283
+ "attributes": {}
1284
+ },
1285
+ {
1286
+ "class": "ml-skeleton-card-media",
1287
+ "attributes": {}
1288
+ },
1289
+ {
1290
+ "class": "ml-skeleton-card-title",
1291
+ "attributes": {}
1292
+ },
1293
+ {
1294
+ "class": "ml-skeleton-region",
1295
+ "attributes": {}
1296
+ }
1297
+ ]
1298
+ },
1299
+ "slider": {
1300
+ "needs": "behavior",
1301
+ "react": "import { Slider } from \"@/components/ui/slider\";\n\nexport default function Example() {\n return <Slider label=\"Volume\" defaultValue={40} step={5} showValue />;\n}",
1302
+ "html": "<div class=\"ml-slider-field\" data-size=\"md\">\n <div class=\"ml-slider-header\">\n <span class=\"ml-slider-label\" id=\"slider-1-label\">Volume</span>\n <output class=\"ml-slider-output\" id=\"slider-1-value\" for=\"slider-1\">40</output>\n </div>\n <div class=\"ml-slider\" id=\"slider-1\" role=\"slider\" tabindex=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"40\" aria-valuetext=\"40 of 100\" aria-labelledby=\"slider-1-label\" aria-describedby=\"slider-1-value\">\n <div class=\"ml-slider-track\">\n <span class=\"ml-slider-range\" aria-hidden=\"true\" style=\"width:40%\"></span>\n <span class=\"ml-slider-thumb\" aria-hidden=\"true\" style=\"left:40%\"></span>\n </div>\n </div>\n</div>",
1303
+ "behavior": {
1304
+ "name": "slider",
1305
+ "html": "<div class=\"ml-slider-field\" data-ml=\"slider\" data-size=\"md\" data-ml-step=\"5\">\n <div class=\"ml-slider-header\">\n <span class=\"ml-slider-label\" id=\"bright-label\">Brightness</span>\n <span class=\"ml-slider-output\">40</span>\n </div>\n <div class=\"ml-slider\">\n <div class=\"ml-slider-track\">\n <span class=\"ml-slider-range\" style=\"width: 40%\"></span>\n <span class=\"ml-slider-thumb\" id=\"bright-thumb\" role=\"slider\" tabindex=\"0\"\n aria-labelledby=\"bright-label\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"40\"\n style=\"left: 40%\"></span>\n </div>\n </div>\n</div>"
1306
+ },
1307
+ "elements": [
1308
+ {
1309
+ "class": "ml-slider-field",
1310
+ "attributes": {
1311
+ "data-size": [
1312
+ "sm"
1313
+ ]
1314
+ }
1315
+ },
1316
+ {
1317
+ "class": "ml-slider-header",
1318
+ "attributes": {}
1319
+ },
1320
+ {
1321
+ "class": "ml-slider-label",
1322
+ "attributes": {}
1323
+ },
1324
+ {
1325
+ "class": "ml-slider-output",
1326
+ "attributes": {}
1327
+ },
1328
+ {
1329
+ "class": "ml-slider",
1330
+ "attributes": {}
1331
+ },
1332
+ {
1333
+ "class": "ml-slider-track",
1334
+ "attributes": {}
1335
+ },
1336
+ {
1337
+ "class": "ml-slider-thumb",
1338
+ "attributes": {}
1339
+ },
1340
+ {
1341
+ "class": "ml-slider-range",
1342
+ "attributes": {}
1343
+ }
1344
+ ]
1345
+ },
1346
+ "table": {
1347
+ "needs": "nothing",
1348
+ "react": "import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from \"@/components/ui/table\";\n\nconst invoices = [\n { id: \"INV-104\", status: \"Paid\", amount: \"$240.00\" },\n { id: \"INV-105\", status: \"Open\", amount: \"$1,120.00\" },\n];\n\nexport default function Example() {\n return (\n <Table>\n <TableCaption>Recent invoices</TableCaption>\n <TableHeader>\n <TableRow>\n <TableHead>Invoice</TableHead>\n <TableHead>Status</TableHead>\n <TableHead align=\"right\">Amount</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {invoices.map((invoice) => (\n <TableRow key={invoice.id}>\n <TableCell>{invoice.id}</TableCell>\n <TableCell>{invoice.status}</TableCell>\n <TableCell numeric>{invoice.amount}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}",
1349
+ "html": "<div class=\"ml-table-container\">\n <table class=\"ml-table\" data-size=\"md\">\n <caption class=\"ml-table-caption\">Recent invoices</caption>\n <thead class=\"ml-table-header\">\n <tr class=\"ml-table-row\">\n <th class=\"ml-table-head\" scope=\"col\" data-align=\"left\">Invoice</th>\n <th class=\"ml-table-head\" scope=\"col\" data-align=\"left\">Status</th>\n <th class=\"ml-table-head\" scope=\"col\" data-align=\"right\">Amount</th>\n </tr>\n </thead>\n <tbody class=\"ml-table-body\">\n <tr class=\"ml-table-row\">\n <td class=\"ml-table-cell\" data-align=\"left\">INV-104</td>\n <td class=\"ml-table-cell\" data-align=\"left\">Paid</td>\n <td class=\"ml-table-cell\" data-align=\"right\" data-numeric=\"\">$240.00</td>\n </tr>\n <tr class=\"ml-table-row\">\n <td class=\"ml-table-cell\" data-align=\"left\">INV-105</td>\n <td class=\"ml-table-cell\" data-align=\"left\">Open</td>\n <td class=\"ml-table-cell\" data-align=\"right\" data-numeric=\"\">$1,120.00</td>\n </tr>\n </tbody>\n </table>\n</div>",
1350
+ "elements": [
1351
+ {
1352
+ "class": "ml-table-container",
1353
+ "attributes": {}
1354
+ },
1355
+ {
1356
+ "class": "ml-table-card",
1357
+ "attributes": {}
1358
+ },
1359
+ {
1360
+ "class": "ml-table-toolbar",
1361
+ "attributes": {}
1362
+ },
1363
+ {
1364
+ "class": "ml-table",
1365
+ "attributes": {
1366
+ "data-size": [
1367
+ "sm"
1368
+ ],
1369
+ "data-stripe": [
1370
+ "alternate"
1371
+ ],
1372
+ "data-striped": []
1373
+ }
1374
+ },
1375
+ {
1376
+ "class": "ml-table-header",
1377
+ "attributes": {}
1378
+ },
1379
+ {
1380
+ "class": "ml-table-head",
1381
+ "attributes": {}
1382
+ },
1383
+ {
1384
+ "class": "ml-table-cell",
1385
+ "attributes": {}
1386
+ },
1387
+ {
1388
+ "class": "ml-table-body",
1389
+ "attributes": {}
1390
+ },
1391
+ {
1392
+ "class": "ml-table-row",
1393
+ "attributes": {
1394
+ "data-state": [
1395
+ "selected"
1396
+ ]
1397
+ }
1398
+ },
1399
+ {
1400
+ "class": "ml-table-caption",
1401
+ "attributes": {}
1402
+ },
1403
+ {
1404
+ "class": "ml-table-footer",
1405
+ "attributes": {}
1406
+ },
1407
+ {
1408
+ "class": "ml-table-sort",
1409
+ "attributes": {}
1410
+ },
1411
+ {
1412
+ "class": "ml-table-sort-icon",
1413
+ "attributes": {}
1414
+ }
1415
+ ]
1416
+ },
1417
+ "tabs": {
1418
+ "needs": "behavior",
1419
+ "react": "import { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\n\nexport default function Example() {\n return (\n <Tabs defaultValue=\"overview\">\n <TabsList aria-label=\"Project\">\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\">Everything at a glance.</TabsContent>\n <TabsContent value=\"activity\">Who changed what, and when.</TabsContent>\n <TabsContent value=\"settings\">Names, members and billing.</TabsContent>\n </Tabs>\n );\n}",
1420
+ "html": "<div class=\"ml-tabs\" data-variant=\"default\" data-orientation=\"horizontal\">\n <div class=\"ml-tabs-list\" role=\"tablist\" aria-label=\"Project\" aria-orientation=\"horizontal\">\n <button class=\"ml-tabs-trigger\" id=\"tabs-1-tab-overview\" type=\"button\" role=\"tab\" aria-selected=\"true\" aria-controls=\"tabs-1-panel-overview\" tabindex=\"0\" data-state=\"active\">Overview</button>\n <button class=\"ml-tabs-trigger\" id=\"tabs-1-tab-activity\" type=\"button\" role=\"tab\" aria-selected=\"false\" aria-controls=\"tabs-1-panel-activity\" tabindex=\"-1\" data-state=\"inactive\">Activity</button>\n <button class=\"ml-tabs-trigger\" id=\"tabs-1-tab-settings\" type=\"button\" role=\"tab\" aria-selected=\"false\" aria-controls=\"tabs-1-panel-settings\" tabindex=\"-1\" data-state=\"inactive\">Settings</button>\n </div>\n <div class=\"ml-tabs-content\" id=\"tabs-1-panel-overview\" role=\"tabpanel\" aria-labelledby=\"tabs-1-tab-overview\" tabindex=\"0\" data-state=\"active\">Everything at a glance.</div>\n <div class=\"ml-tabs-content\" id=\"tabs-1-panel-activity\" role=\"tabpanel\" aria-labelledby=\"tabs-1-tab-activity\" tabindex=\"0\" hidden=\"\" data-state=\"inactive\">Who changed what, and when.</div>\n <div class=\"ml-tabs-content\" id=\"tabs-1-panel-settings\" role=\"tabpanel\" aria-labelledby=\"tabs-1-tab-settings\" tabindex=\"0\" hidden=\"\" data-state=\"inactive\">Names, members and billing.</div>\n</div>",
1421
+ "behavior": {
1422
+ "name": "tabs",
1423
+ "html": "<div class=\"ml-tabs\" data-ml=\"tabs\" data-variant=\"default\" data-orientation=\"horizontal\">\n <div class=\"ml-tabs-list\" role=\"tablist\" aria-label=\"Project\" aria-orientation=\"horizontal\">\n <button class=\"ml-tabs-trigger\" type=\"button\" role=\"tab\" id=\"tab-a\" aria-controls=\"panel-a\" aria-selected=\"true\" data-state=\"active\" tabindex=\"0\">Overview</button>\n <button class=\"ml-tabs-trigger\" type=\"button\" role=\"tab\" id=\"tab-b\" aria-controls=\"panel-b\" aria-selected=\"false\" data-state=\"inactive\" tabindex=\"-1\">Activity</button>\n <button class=\"ml-tabs-trigger\" type=\"button\" role=\"tab\" id=\"tab-c\" aria-controls=\"panel-c\" aria-selected=\"false\" data-state=\"inactive\" tabindex=\"-1\">Settings</button>\n </div>\n <div class=\"ml-tabs-content\" role=\"tabpanel\" id=\"panel-a\" aria-labelledby=\"tab-a\" tabindex=\"0\" data-state=\"active\">Overview panel</div>\n <div class=\"ml-tabs-content\" role=\"tabpanel\" id=\"panel-b\" aria-labelledby=\"tab-b\" tabindex=\"0\" data-state=\"inactive\" hidden>Activity panel</div>\n <div class=\"ml-tabs-content\" role=\"tabpanel\" id=\"panel-c\" aria-labelledby=\"tab-c\" tabindex=\"0\" data-state=\"inactive\" hidden>Settings panel</div>\n</div>"
1424
+ },
1425
+ "elements": [
1426
+ {
1427
+ "class": "ml-tabs",
1428
+ "attributes": {
1429
+ "data-orientation": [
1430
+ "vertical"
1431
+ ],
1432
+ "data-variant": [
1433
+ "enclosed",
1434
+ "pills"
1435
+ ]
1436
+ }
1437
+ },
1438
+ {
1439
+ "class": "ml-tabs-list",
1440
+ "attributes": {}
1441
+ },
1442
+ {
1443
+ "class": "ml-tabs-trigger",
1444
+ "attributes": {
1445
+ "aria-selected": [
1446
+ "true"
1447
+ ],
1448
+ "data-state": [
1449
+ "active"
1450
+ ]
1451
+ }
1452
+ },
1453
+ {
1454
+ "class": "ml-tabs-content",
1455
+ "attributes": {}
1456
+ }
1457
+ ]
1458
+ },
1459
+ "textarea": {
1460
+ "needs": "nothing",
1461
+ "react": "import { Textarea } from \"@/components/ui/textarea\";\n\nexport default function Example() {\n return <Textarea label=\"Feedback\" hint=\"What would make this better?\" maxLength={280} showCount rows={3} />;\n}",
1462
+ "html": "<div class=\"ml-input-field\">\n <label class=\"ml-input-label\" for=\"textarea-1\">Feedback</label>\n <textarea class=\"ml-textarea\" id=\"textarea-1\" rows=\"3\" maxLength=\"280\" aria-describedby=\"textarea-1-hint\" style=\"--ml-textarea-max-rows:12\"></textarea>\n <p class=\"ml-textarea-count\" aria-live=\"polite\">0 / 280</p>\n <p class=\"ml-input-hint\" id=\"textarea-1-hint\">What would make this better?</p>\n</div>",
1463
+ "elements": [
1464
+ {
1465
+ "class": "ml-textarea",
1466
+ "attributes": {}
1467
+ },
1468
+ {
1469
+ "class": "ml-textarea-count",
1470
+ "attributes": {
1471
+ "data-full": []
1472
+ }
1473
+ }
1474
+ ]
1475
+ },
1476
+ "timeline": {
1477
+ "needs": "nothing",
1478
+ "react": "import { Timeline, TimelineItem } from \"@/components/ui/timeline\";\n\nexport default function Example() {\n return (\n <Timeline>\n <TimelineItem status=\"complete\" title=\"Order placed\" time=\"Sep 12\" dateTime=\"2026-09-12\" />\n <TimelineItem status=\"current\" title=\"Shipped\" time=\"Sep 14\" dateTime=\"2026-09-14\" description=\"In transit to the local hub.\" />\n <TimelineItem status=\"upcoming\" title=\"Delivered\" />\n </Timeline>\n );\n}",
1479
+ "html": "<ol class=\"ml-timeline\">\n <li class=\"ml-timeline-item\" data-status=\"complete\">\n <span class=\"ml-timeline-marker\" aria-hidden=\"true\" data-status=\"complete\"><svg class=\"mlola-glyph\" width=\"0.75rem\" height=\"0.75rem\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"20 6 9 17 4 12\" pathLength=\"1\"></polyline></svg></span>\n <div class=\"ml-timeline-body\">\n <div class=\"ml-timeline-heading\">\n <p class=\"ml-timeline-title\">Order placed</p>\n <time class=\"ml-timeline-time\" dateTime=\"2026-09-12\">Sep 12</time>\n </div>\n </div>\n </li>\n <li class=\"ml-timeline-item\" data-status=\"current\" aria-current=\"step\">\n <span class=\"ml-timeline-marker\" aria-hidden=\"true\" data-status=\"current\"><span class=\"ml-timeline-pulse\"></span></span>\n <div class=\"ml-timeline-body\">\n <div class=\"ml-timeline-heading\">\n <p class=\"ml-timeline-title\">Shipped</p>\n <time class=\"ml-timeline-time\" dateTime=\"2026-09-14\">Sep 14</time>\n </div>\n <p class=\"ml-timeline-description\">In transit to the local hub.</p>\n </div>\n </li>\n <li class=\"ml-timeline-item\" data-status=\"upcoming\">\n <span class=\"ml-timeline-marker\" aria-hidden=\"true\" data-status=\"upcoming\"></span>\n <div class=\"ml-timeline-body\">\n <div class=\"ml-timeline-heading\"><p class=\"ml-timeline-title\">Delivered</p></div>\n </div>\n </li>\n</ol>",
1480
+ "elements": [
1481
+ {
1482
+ "class": "ml-timeline",
1483
+ "attributes": {}
1484
+ },
1485
+ {
1486
+ "class": "ml-timeline-item",
1487
+ "attributes": {
1488
+ "data-status": [
1489
+ "complete",
1490
+ "current",
1491
+ "upcoming"
1492
+ ]
1493
+ }
1494
+ },
1495
+ {
1496
+ "class": "ml-timeline-marker",
1497
+ "attributes": {
1498
+ "data-status": [
1499
+ "complete",
1500
+ "current",
1501
+ "upcoming"
1502
+ ],
1503
+ "data-tone": [
1504
+ "danger",
1505
+ "info",
1506
+ "primary",
1507
+ "success",
1508
+ "warning"
1509
+ ]
1510
+ }
1511
+ },
1512
+ {
1513
+ "class": "ml-timeline-pulse",
1514
+ "attributes": {}
1515
+ },
1516
+ {
1517
+ "class": "ml-timeline-body",
1518
+ "attributes": {}
1519
+ },
1520
+ {
1521
+ "class": "ml-timeline-heading",
1522
+ "attributes": {}
1523
+ },
1524
+ {
1525
+ "class": "ml-timeline-title",
1526
+ "attributes": {}
1527
+ },
1528
+ {
1529
+ "class": "ml-timeline-time",
1530
+ "attributes": {}
1531
+ },
1532
+ {
1533
+ "class": "ml-timeline-description",
1534
+ "attributes": {}
1535
+ },
1536
+ {
1537
+ "class": "ml-timeline-content",
1538
+ "attributes": {}
1539
+ }
1540
+ ]
1541
+ },
1542
+ "toast": {
1543
+ "needs": "behavior",
1544
+ "react": "\"use client\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Toaster, toast } from \"@/components/ui/toast\";\n\nexport default function Example() {\n return (\n <>\n <Button onClick={() => toast.success(\"Draft saved to your workspace.\")}>Save draft</Button>\n <Toaster />\n </>\n );\n}",
1545
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\"><span class=\"ml-button-label\">Save draft</span></button>\n<div class=\"ml-toaster\" role=\"region\" aria-label=\"Notifications (top right)\" data-position=\"top-right\"></div>",
1546
+ "behavior": {
1547
+ "name": "toast",
1548
+ "html": "<div class=\"ml-toaster\" data-ml=\"toast\" role=\"region\" aria-label=\"Notifications\" data-position=\"top-right\">\n <div class=\"ml-toast\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" data-tone=\"success\" data-ml-duration=\"6000\">\n <div class=\"ml-toast-content\">\n <p class=\"ml-toast-message\">Draft saved to your workspace.</p>\n </div>\n <button class=\"ml-toast-close\" type=\"button\" aria-label=\"Dismiss notification\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M18 6 6 18M6 6l12 12\"/></svg></button>\n </div>\n</div>"
1549
+ },
1550
+ "elements": [
1551
+ {
1552
+ "class": "ml-toaster",
1553
+ "attributes": {
1554
+ "data-position": [
1555
+ "bottom-center",
1556
+ "bottom-right",
1557
+ "top-center",
1558
+ "top-right"
1559
+ ]
1560
+ }
1561
+ },
1562
+ {
1563
+ "class": "ml-toast-slot",
1564
+ "attributes": {
1565
+ "data-state": [
1566
+ "closed"
1567
+ ]
1568
+ }
1569
+ },
1570
+ {
1571
+ "class": "ml-toast",
1572
+ "attributes": {
1573
+ "data-has-description": [],
1574
+ "data-swiping": [],
1575
+ "data-tone": [
1576
+ "danger",
1577
+ "info",
1578
+ "success",
1579
+ "warning"
1580
+ ]
1581
+ }
1582
+ },
1583
+ {
1584
+ "class": "ml-toast-icon",
1585
+ "attributes": {}
1586
+ },
1587
+ {
1588
+ "class": "ml-toast-spinner",
1589
+ "attributes": {}
1590
+ },
1591
+ {
1592
+ "class": "ml-toast-content",
1593
+ "attributes": {}
1594
+ },
1595
+ {
1596
+ "class": "ml-toast-message",
1597
+ "attributes": {}
1598
+ },
1599
+ {
1600
+ "class": "ml-toast-description",
1601
+ "attributes": {}
1602
+ },
1603
+ {
1604
+ "class": "ml-toast-action",
1605
+ "attributes": {}
1606
+ },
1607
+ {
1608
+ "class": "ml-toast-close",
1609
+ "attributes": {}
1610
+ }
1611
+ ]
1612
+ },
1613
+ "toggle": {
1614
+ "needs": "behavior",
1615
+ "react": "import { Switch } from \"@/components/ui/toggle\";\n\nexport default function Example() {\n return <Switch label=\"Email notifications\" defaultChecked />;\n}",
1616
+ "html": "<span class=\"ml-switch-field\"><button class=\"ml-toggle\" type=\"button\" role=\"switch\" aria-checked=\"true\" aria-labelledby=\"toggle-1-label\" data-state=\"checked\" data-size=\"md\" data-hit=\"expand\"><span class=\"ml-toggle-thumb\" aria-hidden=\"true\"></span></button><span class=\"ml-switch-label\" id=\"toggle-1-label\">Email notifications</span></span>",
1617
+ "behavior": {
1618
+ "name": "switch",
1619
+ "html": "<span class=\"ml-switch-field\">\n <button class=\"ml-toggle\" type=\"button\" data-ml=\"switch\" role=\"switch\" aria-checked=\"false\" aria-labelledby=\"notify-label\" data-state=\"unchecked\" data-size=\"md\" data-hit=\"expand\">\n <span class=\"ml-toggle-thumb\" aria-hidden=\"true\"></span>\n </button>\n <span class=\"ml-switch-label\" id=\"notify-label\">Email notifications</span>\n</span>"
1620
+ },
1621
+ "elements": [
1622
+ {
1623
+ "class": "ml-switch-field",
1624
+ "attributes": {}
1625
+ },
1626
+ {
1627
+ "class": "ml-switch-label",
1628
+ "attributes": {}
1629
+ },
1630
+ {
1631
+ "class": "ml-toggle",
1632
+ "attributes": {
1633
+ "aria-checked": [
1634
+ "true"
1635
+ ],
1636
+ "data-size": [
1637
+ "lg",
1638
+ "sm"
1639
+ ],
1640
+ "data-state": [
1641
+ "checked"
1642
+ ]
1643
+ }
1644
+ },
1645
+ {
1646
+ "class": "ml-toggle-thumb",
1647
+ "attributes": {}
1648
+ },
1649
+ {
1650
+ "class": "ml-toggle-button",
1651
+ "attributes": {
1652
+ "aria-pressed": [
1653
+ "true"
1654
+ ],
1655
+ "data-state": [
1656
+ "on"
1657
+ ]
1658
+ }
1659
+ }
1660
+ ]
1661
+ },
1662
+ "tooltip": {
1663
+ "needs": "behavior",
1664
+ "react": "import { Button } from \"@/components/ui/button\";\nimport { Tooltip } from \"@/components/ui/tooltip\";\n\nexport default function Example() {\n return (\n <Tooltip content=\"Copy a link to this page\">\n <Button variant=\"secondary\" size=\"sm\">Share</Button>\n </Tooltip>\n );\n}",
1665
+ "html": "<span class=\"ml-tooltip-root\"><button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"sm\"><span class=\"ml-button-label\">Share</span></button></span>",
1666
+ "behavior": {
1667
+ "name": "tooltip",
1668
+ "html": "<span class=\"ml-tooltip-root\" data-ml=\"tooltip\">\n <button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"sm\"><span class=\"ml-button-label\">Share</span></button>\n <span class=\"ml-tooltip\" id=\"share-tip\" role=\"tooltip\" data-side=\"top\" hidden>\n Copy a link to this page\n <span class=\"ml-tooltip-arrow\" aria-hidden=\"true\"></span>\n </span>\n</span>"
1669
+ },
1670
+ "elements": [
1671
+ {
1672
+ "class": "ml-tooltip-root",
1673
+ "attributes": {}
1674
+ },
1675
+ {
1676
+ "class": "ml-tooltip",
1677
+ "attributes": {
1678
+ "data-side": [
1679
+ "bottom",
1680
+ "left",
1681
+ "right",
1682
+ "top"
1683
+ ]
1684
+ }
1685
+ },
1686
+ {
1687
+ "class": "ml-tooltip-arrow",
1688
+ "attributes": {}
1689
+ }
1690
+ ]
1691
+ },
1692
+ "activity-heatmap": {
1693
+ "needs": "nothing",
1694
+ "react": "import { ActivityHeatmap } from \"@/components/ui/activity-heatmap\";\n\n// Counts by day; days not listed count as zero.\nconst data = [\n { date: \"2026-09-21\", count: 3 },\n { date: \"2026-09-22\", count: 7 },\n { date: \"2026-09-24\", count: 1 },\n { date: \"2026-09-25\", count: 12 },\n];\n\nexport default function Example() {\n return <ActivityHeatmap data={data} end=\"2026-09-26\" weeks={8} unit=\"commit\" label=\"Commits in the last eight weeks\" />;\n}",
1695
+ "html": "<div class=\"ml-heatmap\" data-tone=\"primary\" style=\"--ml-heatmap-weeks:8\">\n <div class=\"ml-heatmap-grid\" role=\"grid\" aria-label=\"Commits in the last eight weeks\" aria-readonly=\"true\">\n <div class=\"ml-heatmap-months\" aria-hidden=\"true\">\n <span class=\"ml-heatmap-month\" style=\"grid-column:2\">Aug</span>\n <span class=\"ml-heatmap-month\" style=\"grid-column:7\">Sep</span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:2\"><span>Mon</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 3, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 10, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 17, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 24, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 31, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, September 7, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, September 14, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"1\" aria-label=\"3 commit on Monday, September 21, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:2\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:3\"><span aria-hidden=\"true\" data-hidden=\"true\">Tue</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 4, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 11, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 18, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 25, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 1, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 8, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 15, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"2\" aria-label=\"7 commit on Tuesday, September 22, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:3\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:4\"><span>Wed</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 5, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 12, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 19, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 26, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 2, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 9, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 16, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 23, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:4\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:5\"><span aria-hidden=\"true\" data-hidden=\"true\">Thu</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 6, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 13, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 20, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 27, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 3, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 10, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 17, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"1\" aria-label=\"1 commit on Thursday, September 24, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:5\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:6\"><span>Fri</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 7, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 14, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 21, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 28, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 4, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 11, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 18, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"3\" aria-label=\"12 commit on Friday, September 25, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:6\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:7\"><span aria-hidden=\"true\" data-hidden=\"true\">Sat</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 8, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 15, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 22, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 29, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 5, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 12, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 19, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 26, 2026\" tabindex=\"0\" style=\"grid-column:9;grid-row:7\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:8\"><span aria-hidden=\"true\" data-hidden=\"true\">Sun</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 9, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 16, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 23, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 30, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 6, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 13, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 20, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" data-outside=\"true\" aria-hidden=\"true\" style=\"grid-column:9;grid-row:8\"></span>\n </div>\n </div>\n <div class=\"ml-heatmap-tooltip\" role=\"presentation\" hidden=\"\"></div>\n <div class=\"ml-heatmap-footer\">\n <span class=\"ml-heatmap-caption\">23 commit over 4 active days</span>\n <span class=\"ml-heatmap-legend\" aria-hidden=\"true\">Less<span class=\"ml-heatmap-cell\" data-level=\"0\"></span><span class=\"ml-heatmap-cell\" data-level=\"1\"></span><span class=\"ml-heatmap-cell\" data-level=\"2\"></span><span class=\"ml-heatmap-cell\" data-level=\"3\"></span><span class=\"ml-heatmap-cell\" data-level=\"4\"></span>More</span>\n </div>\n</div>",
1696
+ "elements": [
1697
+ {
1698
+ "class": "ml-heatmap",
1699
+ "attributes": {
1700
+ "data-tone": [
1701
+ "info",
1702
+ "success",
1703
+ "warning"
1704
+ ]
1705
+ }
1706
+ },
1707
+ {
1708
+ "class": "ml-heatmap-grid",
1709
+ "attributes": {}
1710
+ },
1711
+ {
1712
+ "class": "ml-heatmap-months",
1713
+ "attributes": {}
1714
+ },
1715
+ {
1716
+ "class": "ml-heatmap-row",
1717
+ "attributes": {}
1718
+ },
1719
+ {
1720
+ "class": "ml-heatmap-month",
1721
+ "attributes": {}
1722
+ },
1723
+ {
1724
+ "class": "ml-heatmap-weekday",
1725
+ "attributes": {}
1726
+ },
1727
+ {
1728
+ "class": "ml-heatmap-cell",
1729
+ "attributes": {
1730
+ "data-active": [],
1731
+ "data-level": [
1732
+ "1",
1733
+ "2",
1734
+ "3",
1735
+ "4"
1736
+ ],
1737
+ "data-outside": []
1738
+ }
1739
+ },
1740
+ {
1741
+ "class": "ml-heatmap-tooltip",
1742
+ "attributes": {}
1743
+ },
1744
+ {
1745
+ "class": "ml-heatmap-footer",
1746
+ "attributes": {}
1747
+ },
1748
+ {
1749
+ "class": "ml-heatmap-legend",
1750
+ "attributes": {}
1751
+ },
1752
+ {
1753
+ "class": "ml-heatmap-caption",
1754
+ "attributes": {}
1755
+ }
1756
+ ]
1757
+ },
1758
+ "calendar": {
1759
+ "needs": "script",
1760
+ "react": "import { Calendar } from \"@/components/ui/calendar\";\n\nexport default function Example() {\n return <Calendar defaultValue=\"2026-09-18\" defaultMonth=\"2026-09-01\" today=\"2026-09-14\" label=\"Delivery date\" />;\n}",
1761
+ "html": "<div class=\"ml-calendar\" role=\"group\" aria-label=\"Delivery date\" data-months=\"1\">\n <div class=\"ml-calendar-months\">\n <div class=\"ml-calendar-month\">\n <div class=\"ml-calendar-caption\">\n <button class=\"ml-calendar-nav\" type=\"button\" aria-label=\"Previous month\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m15 18-6-6 6-6\" pathLength=\"1\"></path></svg></button>\n <p class=\"ml-calendar-title\" aria-live=\"polite\">September 2026</p>\n <button class=\"ml-calendar-nav\" type=\"button\" aria-label=\"Next month\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m9 18 6-6-6-6\" pathLength=\"1\"></path></svg></button>\n </div>\n <div class=\"ml-calendar-grid\" role=\"grid\" aria-label=\"September 2026\">\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Monday\">Mo</span>\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Tuesday\">Tu</span>\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Wednesday\">We</span>\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Thursday\">Th</span>\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Friday\">Fr</span>\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Saturday\">Sa</span>\n <span class=\"ml-calendar-weekday\" role=\"columnheader\" aria-label=\"Sunday\">Su</span>\n </div>\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Monday, August 31, 2026\" data-outside=\"true\">31</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Tuesday, September 1, 2026\">1</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Wednesday, September 2, 2026\">2</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Thursday, September 3, 2026\">3</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Friday, September 4, 2026\">4</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Saturday, September 5, 2026\">5</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Sunday, September 6, 2026\">6</button></span>\n </div>\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Monday, September 7, 2026\">7</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Tuesday, September 8, 2026\">8</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Wednesday, September 9, 2026\">9</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Thursday, September 10, 2026\">10</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Friday, September 11, 2026\">11</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Saturday, September 12, 2026\">12</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Sunday, September 13, 2026\">13</button></span>\n </div>\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Monday, September 14, 2026\" aria-current=\"date\" data-today=\"true\">14</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Tuesday, September 15, 2026\">15</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Wednesday, September 16, 2026\">16</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Thursday, September 17, 2026\">17</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\" aria-selected=\"true\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"0\" aria-label=\"Friday, September 18, 2026\" data-selected=\"true\">18</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Saturday, September 19, 2026\">19</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Sunday, September 20, 2026\">20</button></span>\n </div>\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Monday, September 21, 2026\">21</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Tuesday, September 22, 2026\">22</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Wednesday, September 23, 2026\">23</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Thursday, September 24, 2026\">24</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Friday, September 25, 2026\">25</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Saturday, September 26, 2026\">26</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Sunday, September 27, 2026\">27</button></span>\n </div>\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Monday, September 28, 2026\">28</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Tuesday, September 29, 2026\">29</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Wednesday, September 30, 2026\">30</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Thursday, October 1, 2026\" data-outside=\"true\">1</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Friday, October 2, 2026\" data-outside=\"true\">2</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Saturday, October 3, 2026\" data-outside=\"true\">3</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Sunday, October 4, 2026\" data-outside=\"true\">4</button></span>\n </div>\n <div class=\"ml-calendar-row\" role=\"row\">\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Monday, October 5, 2026\" data-outside=\"true\">5</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Tuesday, October 6, 2026\" data-outside=\"true\">6</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Wednesday, October 7, 2026\" data-outside=\"true\">7</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Thursday, October 8, 2026\" data-outside=\"true\">8</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Friday, October 9, 2026\" data-outside=\"true\">9</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Saturday, October 10, 2026\" data-outside=\"true\">10</button></span>\n <span class=\"ml-calendar-cell\" role=\"gridcell\"><button class=\"ml-calendar-day\" type=\"button\" tabindex=\"-1\" aria-label=\"Sunday, October 11, 2026\" data-outside=\"true\">11</button></span>\n </div>\n </div>\n </div>\n </div>\n</div>",
1762
+ "elements": [
1763
+ {
1764
+ "class": "ml-calendar",
1765
+ "attributes": {}
1766
+ },
1767
+ {
1768
+ "class": "ml-calendar-month",
1769
+ "attributes": {}
1770
+ },
1771
+ {
1772
+ "class": "ml-calendar-caption",
1773
+ "attributes": {}
1774
+ },
1775
+ {
1776
+ "class": "ml-calendar-title",
1777
+ "attributes": {}
1778
+ },
1779
+ {
1780
+ "class": "ml-calendar-nav",
1781
+ "attributes": {}
1782
+ },
1783
+ {
1784
+ "class": "ml-calendar-months",
1785
+ "attributes": {}
1786
+ },
1787
+ {
1788
+ "class": "ml-calendar-grid",
1789
+ "attributes": {}
1790
+ },
1791
+ {
1792
+ "class": "ml-calendar-row",
1793
+ "attributes": {}
1794
+ },
1795
+ {
1796
+ "class": "ml-calendar-weekday",
1797
+ "attributes": {}
1798
+ },
1799
+ {
1800
+ "class": "ml-calendar-cell",
1801
+ "attributes": {
1802
+ "data-preview": [],
1803
+ "data-range": [
1804
+ "end",
1805
+ "start"
1806
+ ]
1807
+ }
1808
+ },
1809
+ {
1810
+ "class": "ml-calendar-day",
1811
+ "attributes": {
1812
+ "aria-disabled": [
1813
+ "true"
1814
+ ],
1815
+ "data-outside": [],
1816
+ "data-selected": [],
1817
+ "data-today": [],
1818
+ "data-unreachable": []
1819
+ }
1820
+ }
1821
+ ]
1822
+ },
1823
+ "date-picker": {
1824
+ "needs": "script",
1825
+ "react": "import { DatePicker } from \"@/components/ui/date-picker\";\n\nexport default function Example() {\n return <DatePicker label=\"Start date\" defaultValue=\"2026-09-18\" today=\"2026-09-14\" clearable />;\n}",
1826
+ "html": "<div class=\"ml-input-field ml-date-picker\">\n <label class=\"ml-input-label\" for=\"date-picker-1\">Start date</label>\n <div class=\"ml-date-picker-control\">\n <button class=\"ml-input ml-date-picker-trigger\" id=\"date-picker-1\" type=\"button\" aria-haspopup=\"dialog\" aria-expanded=\"false\"><svg class=\"mlola-glyph ml-date-picker-icon\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" pathLength=\"1\"></rect><path d=\"M8 3v4M16 3v4M3 10h18\" pathLength=\"1\"></path></svg><span class=\"ml-date-picker-value\">Sep 18, 2026</span></button>\n <button class=\"ml-date-picker-clear\" type=\"button\" data-hit=\"expand\" aria-label=\"Clear date\"><svg class=\"mlola-glyph\" width=\"0.9em\" height=\"0.9em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"M18 6 6 18M6 6l12 12\" pathLength=\"1\"></path></svg></button>\n </div>\n</div>",
1827
+ "elements": [
1828
+ {
1829
+ "class": "ml-date-picker",
1830
+ "attributes": {}
1831
+ },
1832
+ {
1833
+ "class": "ml-date-picker-control",
1834
+ "attributes": {}
1835
+ },
1836
+ {
1837
+ "class": "ml-date-picker-trigger",
1838
+ "attributes": {
1839
+ "data-empty": []
1840
+ }
1841
+ },
1842
+ {
1843
+ "class": "ml-date-picker-value",
1844
+ "attributes": {}
1845
+ },
1846
+ {
1847
+ "class": "ml-date-picker-icon",
1848
+ "attributes": {}
1849
+ },
1850
+ {
1851
+ "class": "ml-date-picker-clear",
1852
+ "attributes": {}
1853
+ },
1854
+ {
1855
+ "class": "ml-popover",
1856
+ "attributes": {
1857
+ "data-side": [
1858
+ "bottom",
1859
+ "left",
1860
+ "right",
1861
+ "top"
1862
+ ]
1863
+ }
1864
+ },
1865
+ {
1866
+ "class": "ml-date-picker-popover",
1867
+ "attributes": {}
1868
+ },
1869
+ {
1870
+ "class": "ml-date-picker-panel",
1871
+ "attributes": {
1872
+ "data-presets": []
1873
+ }
1874
+ },
1875
+ {
1876
+ "class": "ml-date-picker-presets",
1877
+ "attributes": {}
1878
+ },
1879
+ {
1880
+ "class": "ml-date-picker-preset",
1881
+ "attributes": {}
1882
+ }
1883
+ ]
1884
+ },
1885
+ "time-picker": {
1886
+ "needs": "script",
1887
+ "react": "import { TimePicker } from \"@/components/ui/time-picker\";\n\nexport default function Example() {\n return <TimePicker label=\"Reminder\" defaultValue=\"09:30\" step={15} hourCycle={24} />;\n}",
1888
+ "html": "<div class=\"ml-input-field ml-time-picker\">\n <label class=\"ml-input-label\" for=\"time-picker-1\">Reminder</label>\n <div class=\"ml-input ml-time-picker-control\" role=\"group\" id=\"time-picker-1\" aria-label=\"Reminder\">\n <span class=\"ml-time-picker-segment\" role=\"spinbutton\" tabindex=\"0\" aria-label=\"Hours\" aria-valuemin=\"0\" aria-valuemax=\"23\" aria-valuenow=\"9\" aria-valuetext=\"09\">09</span>\n <span class=\"ml-time-picker-colon\" aria-hidden=\"true\">:</span>\n <span class=\"ml-time-picker-segment\" role=\"spinbutton\" tabindex=\"0\" aria-label=\"Minutes\" aria-valuemin=\"0\" aria-valuemax=\"59\" aria-valuenow=\"30\" aria-valuetext=\"30\">30</span>\n <button class=\"ml-time-picker-open\" type=\"button\" aria-label=\"Choose from a list\" aria-haspopup=\"dialog\" aria-expanded=\"false\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><circle cx=\"12\" cy=\"12\" r=\"9.5\" pathLength=\"1\"></circle><path d=\"M12 7v5l3 2\" pathLength=\"1\"></path></svg></button>\n </div>\n</div>",
1889
+ "elements": [
1890
+ {
1891
+ "class": "ml-time-picker",
1892
+ "attributes": {}
1893
+ },
1894
+ {
1895
+ "class": "ml-time-picker-control",
1896
+ "attributes": {
1897
+ "data-disabled": [],
1898
+ "data-unavailable": []
1899
+ }
1900
+ },
1901
+ {
1902
+ "class": "ml-time-picker-segment",
1903
+ "attributes": {
1904
+ "data-empty": [],
1905
+ "data-period": []
1906
+ }
1907
+ },
1908
+ {
1909
+ "class": "ml-time-picker-colon",
1910
+ "attributes": {}
1911
+ },
1912
+ {
1913
+ "class": "ml-time-picker-open",
1914
+ "attributes": {}
1915
+ },
1916
+ {
1917
+ "class": "ml-time-picker-list",
1918
+ "attributes": {}
1919
+ },
1920
+ {
1921
+ "class": "ml-time-picker-option",
1922
+ "attributes": {
1923
+ "aria-selected": [
1924
+ "true"
1925
+ ]
1926
+ }
1927
+ }
1928
+ ]
1929
+ },
1930
+ "status-icon": {
1931
+ "needs": "nothing",
1932
+ "react": "import { StatusIcon } from \"@/components/ui/status-icon\";\n\nexport default function Example() {\n return (\n <div className=\"ml-cluster\">\n <StatusIcon status=\"todo\" />\n <StatusIcon status=\"in-progress\" progress={0.5} />\n <StatusIcon status=\"done\" />\n </div>\n );\n}",
1933
+ "html": "<div class=\"ml-cluster\">\n <svg class=\"ml-status-icon\" viewBox=\"0 0 14 14\" width=\"1em\" height=\"1em\" data-status=\"todo\" role=\"img\" aria-label=\"Todo\"><circle cx=\"7\" cy=\"7\" r=\"5.75\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"></circle></svg>\n <svg class=\"ml-status-icon\" viewBox=\"0 0 14 14\" width=\"1em\" height=\"1em\" data-status=\"in-progress\" role=\"img\" aria-label=\"In progress\"><circle cx=\"7\" cy=\"7\" r=\"5.75\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"></circle><circle cx=\"7\" cy=\"7\" r=\"2.4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4.8\" stroke-dasharray=\"7.5398223686155035 15.079644737231007\" transform=\"rotate(-90 7 7)\"></circle></svg>\n <svg class=\"ml-status-icon\" viewBox=\"0 0 14 14\" width=\"1em\" height=\"1em\" data-status=\"done\" role=\"img\" aria-label=\"Done\"><circle cx=\"7\" cy=\"7\" r=\"6\" fill=\"currentColor\"></circle><path d=\"M4.4 7.2 6.2 9 9.7 5.2\" fill=\"none\" stroke=\"var(--ml-status-mark)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\n</div>",
1934
+ "elements": [
1935
+ {
1936
+ "class": "ml-status-icon",
1937
+ "attributes": {
1938
+ "data-status": [
1939
+ "backlog",
1940
+ "canceled",
1941
+ "done",
1942
+ "in-progress",
1943
+ "in-review"
1944
+ ]
1945
+ }
1946
+ }
1947
+ ]
1948
+ },
1949
+ "priority-icon": {
1950
+ "needs": "nothing",
1951
+ "react": "import { PriorityIcon } from \"@/components/ui/priority-icon\";\n\nexport default function Example() {\n return (\n <div className=\"ml-cluster\">\n <PriorityIcon priority=\"urgent\" />\n <PriorityIcon priority=\"high\" />\n <PriorityIcon priority=\"low\" />\n </div>\n );\n}",
1952
+ "html": "<div class=\"ml-cluster\">\n <svg class=\"ml-priority-icon\" viewBox=\"0 0 14 14\" width=\"1em\" height=\"1em\" data-priority=\"urgent\" role=\"img\" aria-label=\"Urgent\"><rect x=\"1\" y=\"1\" width=\"12\" height=\"12\" rx=\"3\" fill=\"currentColor\"></rect><path d=\"M7 3.8v3.9\" stroke=\"var(--ml-priority-mark)\" stroke-width=\"1.6\" stroke-linecap=\"round\"></path><circle cx=\"7\" cy=\"10\" r=\"0.95\" fill=\"var(--ml-priority-mark)\"></circle></svg>\n <svg class=\"ml-priority-icon\" viewBox=\"0 0 14 14\" width=\"1em\" height=\"1em\" data-priority=\"high\" role=\"img\" aria-label=\"High\"><rect x=\"1.5\" y=\"9\" width=\"3\" height=\"3.5\" rx=\"1\" fill=\"currentColor\" opacity=\"1\"></rect><rect x=\"5.5\" y=\"5.8\" width=\"3\" height=\"6.7\" rx=\"1\" fill=\"currentColor\" opacity=\"1\"></rect><rect x=\"9.5\" y=\"2.5999999999999996\" width=\"3\" height=\"9.9\" rx=\"1\" fill=\"currentColor\" opacity=\"1\"></rect></svg>\n <svg class=\"ml-priority-icon\" viewBox=\"0 0 14 14\" width=\"1em\" height=\"1em\" data-priority=\"low\" role=\"img\" aria-label=\"Low\"><rect x=\"1.5\" y=\"9\" width=\"3\" height=\"3.5\" rx=\"1\" fill=\"currentColor\" opacity=\"1\"></rect><rect x=\"5.5\" y=\"5.8\" width=\"3\" height=\"6.7\" rx=\"1\" fill=\"currentColor\" opacity=\"0.28\"></rect><rect x=\"9.5\" y=\"2.5999999999999996\" width=\"3\" height=\"9.9\" rx=\"1\" fill=\"currentColor\" opacity=\"0.28\"></rect></svg>\n</div>",
1953
+ "elements": [
1954
+ {
1955
+ "class": "ml-priority-icon",
1956
+ "attributes": {
1957
+ "data-priority": [
1958
+ "high",
1959
+ "none",
1960
+ "urgent"
1961
+ ]
1962
+ }
1963
+ }
1964
+ ]
1965
+ },
1966
+ "combobox": {
1967
+ "needs": "script",
1968
+ "react": "import { Combobox } from \"@/components/ui/combobox\";\n\nexport default function Example() {\n return (\n <Combobox\n label=\"Framework\"\n placeholder=\"Search frameworks\"\n clearable\n options={[\n { value: \"next\", label: \"Next.js\" },\n { value: \"remix\", label: \"Remix\" },\n { value: \"astro\", label: \"Astro\" },\n ]}\n />\n );\n}",
1969
+ "html": "<div class=\"ml-input-field ml-combobox\">\n <label class=\"ml-input-label\" for=\"combobox-1\">Framework</label>\n <div class=\"ml-combobox-control\">\n <input class=\"ml-input ml-combobox-input\" id=\"combobox-1\" role=\"combobox\" aria-expanded=\"false\" aria-controls=\"combobox-1-list\" aria-autocomplete=\"list\" placeholder=\"Search frameworks\" autoComplete=\"off\" spellCheck=\"false\" value=\"\"/>\n <svg class=\"mlola-glyph ml-combobox-chevron\" width=\"1.1em\" height=\"1.1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"6 9 12 15 18 9\" pathLength=\"1\"></polyline></svg>\n </div>\n</div>",
1970
+ "elements": [
1971
+ {
1972
+ "class": "ml-combobox",
1973
+ "attributes": {}
1974
+ },
1975
+ {
1976
+ "class": "ml-combobox-control",
1977
+ "attributes": {
1978
+ "data-open": []
1979
+ }
1980
+ },
1981
+ {
1982
+ "class": "ml-combobox-input",
1983
+ "attributes": {
1984
+ "data-clearable": [],
1985
+ "data-leading": []
1986
+ }
1987
+ },
1988
+ {
1989
+ "class": "ml-combobox-value-leading",
1990
+ "attributes": {}
1991
+ },
1992
+ {
1993
+ "class": "ml-combobox-chevron",
1994
+ "attributes": {}
1995
+ },
1996
+ {
1997
+ "class": "ml-combobox-clear",
1998
+ "attributes": {}
1999
+ },
2000
+ {
2001
+ "class": "ml-combobox-popover",
2002
+ "attributes": {
2003
+ "data-side": [
2004
+ "top"
2005
+ ]
2006
+ }
2007
+ },
2008
+ {
2009
+ "class": "ml-combobox-list",
2010
+ "attributes": {}
2011
+ },
2012
+ {
2013
+ "class": "ml-combobox-group",
2014
+ "attributes": {}
2015
+ },
2016
+ {
2017
+ "class": "ml-combobox-option",
2018
+ "attributes": {
2019
+ "aria-disabled": [
2020
+ "true"
2021
+ ],
2022
+ "aria-selected": [
2023
+ "true"
2024
+ ],
2025
+ "data-create": [],
2026
+ "data-highlighted": []
2027
+ }
2028
+ },
2029
+ {
2030
+ "class": "ml-combobox-leading",
2031
+ "attributes": {}
2032
+ },
2033
+ {
2034
+ "class": "ml-combobox-text",
2035
+ "attributes": {}
2036
+ },
2037
+ {
2038
+ "class": "ml-combobox-label",
2039
+ "attributes": {}
2040
+ },
2041
+ {
2042
+ "class": "ml-combobox-description",
2043
+ "attributes": {}
2044
+ },
2045
+ {
2046
+ "class": "ml-combobox-check",
2047
+ "attributes": {}
2048
+ },
2049
+ {
2050
+ "class": "ml-combobox-empty",
2051
+ "attributes": {}
2052
+ }
2053
+ ]
2054
+ },
2055
+ "tag-input": {
2056
+ "needs": "script",
2057
+ "react": "import { TagInput } from \"@/components/ui/tag-input\";\n\nexport default function Example() {\n return <TagInput label=\"Labels\" defaultValue={[\"design\", \"billing\"]} placeholder=\"Add a label\" max={5} />;\n}",
2058
+ "html": "<div class=\"ml-input-field ml-tag-input\">\n <label class=\"ml-input-label\" for=\"tag-input-1\">Labels</label>\n <div class=\"ml-tag-input-control\">\n <ul class=\"ml-tag-input-tags\" aria-label=\"Added\">\n <li class=\"ml-tag-input-tag\">\n <span class=\"ml-tag-input-text\">design</span>\n <button class=\"ml-tag-input-remove\" type=\"button\" data-hit=\"expand\" tabindex=\"-1\" aria-label=\"Remove design\"><svg class=\"mlola-glyph\" width=\"0.8em\" height=\"0.8em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"M18 6 6 18M6 6l12 12\" pathLength=\"1\"></path></svg></button>\n </li>\n <li class=\"ml-tag-input-tag\">\n <span class=\"ml-tag-input-text\">billing</span>\n <button class=\"ml-tag-input-remove\" type=\"button\" data-hit=\"expand\" tabindex=\"-1\" aria-label=\"Remove billing\"><svg class=\"mlola-glyph\" width=\"0.8em\" height=\"0.8em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"M18 6 6 18M6 6l12 12\" pathLength=\"1\"></path></svg></button>\n </li>\n </ul>\n <input class=\"ml-tag-input-field\" id=\"tag-input-1\" placeholder=\"Add a label\" autoComplete=\"off\" value=\"\"/>\n <span class=\"ml-tag-input-count\" aria-hidden=\"true\">2/5</span>\n </div>\n <p class=\"ml-visually-hidden\" role=\"status\" aria-live=\"polite\"></p>\n</div>",
2059
+ "elements": [
2060
+ {
2061
+ "class": "ml-tag-input",
2062
+ "attributes": {}
2063
+ },
2064
+ {
2065
+ "class": "ml-tag-input-control",
2066
+ "attributes": {
2067
+ "data-disabled": [],
2068
+ "data-invalid": []
2069
+ }
2070
+ },
2071
+ {
2072
+ "class": "ml-tag-input-tags",
2073
+ "attributes": {}
2074
+ },
2075
+ {
2076
+ "class": "ml-tag-input-tag",
2077
+ "attributes": {
2078
+ "data-armed": []
2079
+ }
2080
+ },
2081
+ {
2082
+ "class": "ml-tag-input-text",
2083
+ "attributes": {}
2084
+ },
2085
+ {
2086
+ "class": "ml-tag-input-remove",
2087
+ "attributes": {}
2088
+ },
2089
+ {
2090
+ "class": "ml-tag-input-field",
2091
+ "attributes": {}
2092
+ },
2093
+ {
2094
+ "class": "ml-tag-input-count",
2095
+ "attributes": {}
2096
+ }
2097
+ ]
2098
+ },
2099
+ "number-input": {
2100
+ "needs": "script",
2101
+ "react": "import { NumberInput } from \"@/components/ui/number-input\";\n\nexport default function Example() {\n return <NumberInput label=\"Seats\" defaultValue={5} min={1} max={50} hint=\"Up to 50 on this plan.\" locale=\"en-US\" />;\n}",
2102
+ "html": "<div class=\"ml-input-field ml-number-input\">\n <label class=\"ml-input-label\" for=\"number-input-1\">Seats</label>\n <div class=\"ml-number-input-control\">\n <input class=\"ml-number-input-field\" id=\"number-input-1\" role=\"spinbutton\" inputMode=\"decimal\" autoComplete=\"off\" aria-valuenow=\"5\" aria-valuemin=\"1\" aria-valuemax=\"50\" aria-valuetext=\"5\" aria-describedby=\"number-input-1-hint\" value=\"5\"/>\n <span class=\"ml-number-input-buttons\"><button class=\"ml-number-input-step\" type=\"button\" tabindex=\"-1\" aria-label=\"Decrease\"><svg class=\"mlola-glyph\" width=\"0.9em\" height=\"0.9em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"M5 12h14\" pathLength=\"1\"></path></svg></button><button class=\"ml-number-input-step\" type=\"button\" tabindex=\"-1\" aria-label=\"Increase\"><svg class=\"mlola-glyph\" width=\"0.9em\" height=\"0.9em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"M12 5v14M5 12h14\" pathLength=\"1\"></path></svg></button></span>\n </div>\n <p class=\"ml-input-hint\" id=\"number-input-1-hint\">Up to 50 on this plan.</p>\n</div>",
2103
+ "elements": [
2104
+ {
2105
+ "class": "ml-number-input",
2106
+ "attributes": {}
2107
+ },
2108
+ {
2109
+ "class": "ml-number-input-control",
2110
+ "attributes": {
2111
+ "data-disabled": [],
2112
+ "data-invalid": []
2113
+ }
2114
+ },
2115
+ {
2116
+ "class": "ml-number-input-field",
2117
+ "attributes": {}
2118
+ },
2119
+ {
2120
+ "class": "ml-number-input-buttons",
2121
+ "attributes": {}
2122
+ },
2123
+ {
2124
+ "class": "ml-number-input-step",
2125
+ "attributes": {}
2126
+ }
2127
+ ]
2128
+ },
2129
+ "color-picker": {
2130
+ "needs": "script",
2131
+ "react": "import { ColorPicker } from \"@/components/ui/color-picker\";\n\nexport default function Example() {\n return <ColorPicker label=\"Brand color\" defaultValue=\"oklch(0.62 0.19 255)\" format=\"oklch\" />;\n}",
2132
+ "html": "<div class=\"ml-input-field ml-color-picker\">\n <label class=\"ml-input-label\" for=\"color-picker-1\">Brand color</label>\n <button class=\"ml-input ml-color-picker-trigger\" id=\"color-picker-1\" type=\"button\" aria-label=\"Brand color: oklch(61.9% 0.191 255.2)\" aria-haspopup=\"dialog\" aria-expanded=\"false\"><span class=\"ml-color-picker-swatch\" style=\"--ml-color:rgb(29 132 245)\" aria-hidden=\"true\"></span><span class=\"ml-color-picker-value\">oklch(61.9% 0.191 255.2)</span></button>\n</div>",
2133
+ "elements": [
2134
+ {
2135
+ "class": "ml-color-picker",
2136
+ "attributes": {}
2137
+ },
2138
+ {
2139
+ "class": "ml-color-picker-trigger",
2140
+ "attributes": {}
2141
+ },
2142
+ {
2143
+ "class": "ml-color-picker-swatch",
2144
+ "attributes": {}
2145
+ },
2146
+ {
2147
+ "class": "ml-color-picker-preset",
2148
+ "attributes": {
2149
+ "aria-pressed": [
2150
+ "true"
2151
+ ]
2152
+ }
2153
+ },
2154
+ {
2155
+ "class": "ml-color-picker-sample",
2156
+ "attributes": {}
2157
+ },
2158
+ {
2159
+ "class": "ml-color-picker-value",
2160
+ "attributes": {}
2161
+ },
2162
+ {
2163
+ "class": "ml-popover",
2164
+ "attributes": {
2165
+ "data-side": [
2166
+ "bottom",
2167
+ "left",
2168
+ "right",
2169
+ "top"
2170
+ ]
2171
+ }
2172
+ },
2173
+ {
2174
+ "class": "ml-color-picker-popover",
2175
+ "attributes": {}
2176
+ },
2177
+ {
2178
+ "class": "ml-color-picker-panel",
2179
+ "attributes": {}
2180
+ },
2181
+ {
2182
+ "class": "ml-color-picker-area",
2183
+ "attributes": {}
2184
+ },
2185
+ {
2186
+ "class": "ml-color-picker-thumb",
2187
+ "attributes": {}
2188
+ },
2189
+ {
2190
+ "class": "ml-color-picker-sliders",
2191
+ "attributes": {}
2192
+ },
2193
+ {
2194
+ "class": "ml-color-picker-track",
2195
+ "attributes": {}
2196
+ },
2197
+ {
2198
+ "class": "ml-color-picker-hue",
2199
+ "attributes": {}
2200
+ },
2201
+ {
2202
+ "class": "ml-color-picker-alpha",
2203
+ "attributes": {}
2204
+ },
2205
+ {
2206
+ "class": "ml-color-picker-row",
2207
+ "attributes": {}
2208
+ },
2209
+ {
2210
+ "class": "ml-color-picker-format",
2211
+ "attributes": {}
2212
+ },
2213
+ {
2214
+ "class": "ml-color-picker-eyedropper",
2215
+ "attributes": {}
2216
+ },
2217
+ {
2218
+ "class": "ml-color-picker-text",
2219
+ "attributes": {}
2220
+ },
2221
+ {
2222
+ "class": "ml-color-picker-swatches",
2223
+ "attributes": {}
2224
+ },
2225
+ {
2226
+ "class": "ml-color-picker-contrast",
2227
+ "attributes": {}
2228
+ }
2229
+ ]
2230
+ },
2231
+ "stepper": {
2232
+ "needs": "script",
2233
+ "react": "import { Stepper } from \"@/components/ui/stepper\";\n\nexport default function Example() {\n return (\n <Stepper\n label=\"Checkout\"\n current={1}\n steps={[{ label: \"Cart\" }, { label: \"Shipping\" }, { label: \"Payment\" }, { label: \"Review\", optional: true }]}\n />\n );\n}",
2234
+ "html": "<nav class=\"ml-stepper\" aria-label=\"Checkout\" data-orientation=\"horizontal\">\n <p class=\"ml-stepper-summary\" aria-hidden=\"true\"><span>Step 2 of 4</span><strong>Shipping</strong><span class=\"ml-stepper-meter\" style=\"--ml-stepper-progress:0.3333333333333333\"></span></p>\n <ol class=\"ml-stepper-list\">\n <li class=\"ml-stepper-step\" data-status=\"complete\">\n <span class=\"ml-stepper-target\"><span class=\"ml-stepper-marker\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"0.8em\" height=\"0.8em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><polyline points=\"20 6 9 17 4 12\" pathLength=\"1\"></polyline></svg></span><span class=\"ml-stepper-text\"><span class=\"ml-stepper-label\">Cart</span></span><span class=\"ml-visually-hidden\">, completed</span></span>\n </li>\n <li class=\"ml-stepper-step\" data-status=\"current\" aria-current=\"step\">\n <span class=\"ml-stepper-target\"><span class=\"ml-stepper-marker\" aria-hidden=\"true\">2</span><span class=\"ml-stepper-text\"><span class=\"ml-stepper-label\">Shipping</span></span><span class=\"ml-visually-hidden\"></span></span>\n </li>\n <li class=\"ml-stepper-step\" data-status=\"upcoming\">\n <span class=\"ml-stepper-target\"><span class=\"ml-stepper-marker\" aria-hidden=\"true\">3</span><span class=\"ml-stepper-text\"><span class=\"ml-stepper-label\">Payment</span></span><span class=\"ml-visually-hidden\">, not started</span></span>\n </li>\n <li class=\"ml-stepper-step\" data-status=\"upcoming\">\n <span class=\"ml-stepper-target\"><span class=\"ml-stepper-marker\" aria-hidden=\"true\">4</span><span class=\"ml-stepper-text\"><span class=\"ml-stepper-label\">Review</span><span class=\"ml-stepper-description\">Optional</span></span><span class=\"ml-visually-hidden\">, not started</span></span>\n </li>\n </ol>\n</nav>",
2235
+ "elements": [
2236
+ {
2237
+ "class": "ml-stepper",
2238
+ "attributes": {
2239
+ "data-orientation": [
2240
+ "horizontal",
2241
+ "vertical"
2242
+ ]
2243
+ }
2244
+ },
2245
+ {
2246
+ "class": "ml-stepper-list",
2247
+ "attributes": {}
2248
+ },
2249
+ {
2250
+ "class": "ml-stepper-step",
2251
+ "attributes": {
2252
+ "data-status": [
2253
+ "complete",
2254
+ "current",
2255
+ "error",
2256
+ "upcoming"
2257
+ ]
2258
+ }
2259
+ },
2260
+ {
2261
+ "class": "ml-stepper-target",
2262
+ "attributes": {}
2263
+ },
2264
+ {
2265
+ "class": "ml-stepper-label",
2266
+ "attributes": {}
2267
+ },
2268
+ {
2269
+ "class": "ml-stepper-marker",
2270
+ "attributes": {}
2271
+ },
2272
+ {
2273
+ "class": "ml-stepper-text",
2274
+ "attributes": {}
2275
+ },
2276
+ {
2277
+ "class": "ml-stepper-description",
2278
+ "attributes": {}
2279
+ },
2280
+ {
2281
+ "class": "ml-stepper-summary",
2282
+ "attributes": {}
2283
+ },
2284
+ {
2285
+ "class": "ml-stepper-meter",
2286
+ "attributes": {}
2287
+ }
2288
+ ]
2289
+ },
2290
+ "virtual-list": {
2291
+ "needs": "script",
2292
+ "react": "import { VirtualList } from \"@/components/ui/virtual-list\";\n\nexport default function Example() {\n return (\n <VirtualList\n label=\"Events\"\n count={10000}\n height={240}\n estimateSize={36}\n renderItem={(index) => <div>Event {index + 1}</div>}\n />\n );\n}",
2293
+ "html": "<div class=\"ml-virtual-list\" style=\"height:240px\" role=\"list\" aria-label=\"Events\" tabindex=\"0\">\n <div class=\"ml-virtual-list-space\" style=\"height:360000px\">\n <div class=\"ml-virtual-list-row\" data-index=\"0\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"1\" style=\"transform:translateY(0px)\">\n <div>Event 1</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"1\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"2\" style=\"transform:translateY(36px)\">\n <div>Event 2</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"2\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"3\" style=\"transform:translateY(72px)\">\n <div>Event 3</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"3\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"4\" style=\"transform:translateY(108px)\">\n <div>Event 4</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"4\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"5\" style=\"transform:translateY(144px)\">\n <div>Event 5</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"5\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"6\" style=\"transform:translateY(180px)\">\n <div>Event 6</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"6\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"7\" style=\"transform:translateY(216px)\">\n <div>Event 7</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"7\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"8\" style=\"transform:translateY(252px)\">\n <div>Event 8</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"8\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"9\" style=\"transform:translateY(288px)\">\n <div>Event 9</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"9\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"10\" style=\"transform:translateY(324px)\">\n <div>Event 10</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"10\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"11\" style=\"transform:translateY(360px)\">\n <div>Event 11</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"11\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"12\" style=\"transform:translateY(396px)\">\n <div>Event 12</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"12\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"13\" style=\"transform:translateY(432px)\">\n <div>Event 13</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"13\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"14\" style=\"transform:translateY(468px)\">\n <div>Event 14</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"14\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"15\" style=\"transform:translateY(504px)\">\n <div>Event 15</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"15\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"16\" style=\"transform:translateY(540px)\">\n <div>Event 16</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"16\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"17\" style=\"transform:translateY(576px)\">\n <div>Event 17</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"17\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"18\" style=\"transform:translateY(612px)\">\n <div>Event 18</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"18\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"19\" style=\"transform:translateY(648px)\">\n <div>Event 19</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"19\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"20\" style=\"transform:translateY(684px)\">\n <div>Event 20</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"20\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"21\" style=\"transform:translateY(720px)\">\n <div>Event 21</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"21\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"22\" style=\"transform:translateY(756px)\">\n <div>Event 22</div>\n </div>\n <div class=\"ml-virtual-list-row\" data-index=\"22\" role=\"listitem\" aria-setsize=\"10000\" aria-posinset=\"23\" style=\"transform:translateY(792px)\">\n <div>Event 23</div>\n </div>\n </div>\n</div>",
2294
+ "elements": [
2295
+ {
2296
+ "class": "ml-virtual-list",
2297
+ "attributes": {}
2298
+ },
2299
+ {
2300
+ "class": "ml-virtual-list-space",
2301
+ "attributes": {}
2302
+ },
2303
+ {
2304
+ "class": "ml-virtual-list-row",
2305
+ "attributes": {}
2306
+ }
2307
+ ]
2308
+ },
2309
+ "context-menu": {
2310
+ "needs": "script",
2311
+ "react": "import { ContextMenu } from \"@/components/ui/context-menu\";\n\nexport default function Example() {\n return (\n <ContextMenu\n label=\"File actions\"\n items={[\n { label: \"Rename\", shortcut: \"F2\" },\n { label: \"Duplicate\" },\n { label: \"Delete\", danger: true, separatorBefore: true },\n ]}\n >\n <div className=\"ml-card\" data-variant=\"outline\">\n <div className=\"ml-card-content\">Right-click, or press Shift+F10, on this file.</div>\n </div>\n </ContextMenu>\n );\n}",
2312
+ "html": "<div class=\"ml-context-menu-area\">\n <div class=\"ml-card\" data-variant=\"outline\">\n <div class=\"ml-card-content\">Right-click, or press Shift+F10, on this file.</div>\n </div>\n</div>",
2313
+ "elements": [
2314
+ {
2315
+ "class": "ml-context-menu-area",
2316
+ "attributes": {}
2317
+ },
2318
+ {
2319
+ "class": "ml-context-menu",
2320
+ "attributes": {}
2321
+ },
2322
+ {
2323
+ "class": "ml-context-menu-item",
2324
+ "attributes": {
2325
+ "aria-disabled": [
2326
+ "true"
2327
+ ],
2328
+ "data-danger": [],
2329
+ "data-highlighted": []
2330
+ }
2331
+ },
2332
+ {
2333
+ "class": "ml-context-menu-icon",
2334
+ "attributes": {}
2335
+ },
2336
+ {
2337
+ "class": "ml-context-menu-label",
2338
+ "attributes": {}
2339
+ },
2340
+ {
2341
+ "class": "ml-context-menu-shortcut",
2342
+ "attributes": {}
2343
+ },
2344
+ {
2345
+ "class": "ml-context-menu-separator",
2346
+ "attributes": {}
2347
+ }
2348
+ ]
2349
+ },
2350
+ "hover-card": {
2351
+ "needs": "script",
2352
+ "react": "import { HoverCard } from \"@/components/ui/hover-card\";\n\nexport default function Example() {\n return (\n <HoverCard content={<p>Lena Park, design lead. Owns the pricing page.</p>}>\n <a href=\"/people/lena\">@lena</a>\n </HoverCard>\n );\n}",
2353
+ "html": "<a href=\"/people/lena\">@lena</a>",
2354
+ "elements": [
2355
+ {
2356
+ "class": "ml-hover-card",
2357
+ "attributes": {}
2358
+ }
2359
+ ]
2360
+ },
2361
+ "tour": {
2362
+ "needs": "script",
2363
+ "react": "\"use client\";\n\nimport * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Tour } from \"@/components/ui/tour\";\n\nexport default function Example() {\n const [open, setOpen] = React.useState(false);\n return (\n <>\n <div className=\"ml-cluster\">\n <Button id=\"tour-search\" variant=\"secondary\">Search</Button>\n <Button id=\"tour-new\">New project</Button>\n <Button variant=\"subtle\" onClick={() => setOpen(true)}>Take the tour</Button>\n </div>\n <Tour\n open={open}\n onOpenChange={setOpen}\n steps={[\n { target: \"#tour-search\", title: \"Find anything\", body: \"Search projects, people and settings.\" },\n { target: \"#tour-new\", title: \"Start here\", body: \"A project holds pages, members and billing.\" },\n ]}\n />\n </>\n );\n}",
2364
+ "html": "<div class=\"ml-cluster\">\n <button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\" id=\"tour-search\"><span class=\"ml-button-label\">Search</span></button>\n <button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\" id=\"tour-new\"><span class=\"ml-button-label\">New project</span></button>\n <button class=\"ml-button\" type=\"button\" data-variant=\"subtle\" data-size=\"md\"><span class=\"ml-button-label\">Take the tour</span></button>\n</div>",
2365
+ "elements": [
2366
+ {
2367
+ "class": "ml-tour",
2368
+ "attributes": {}
2369
+ },
2370
+ {
2371
+ "class": "ml-tour-scrim",
2372
+ "attributes": {
2373
+ "data-spotlight": []
2374
+ }
2375
+ },
2376
+ {
2377
+ "class": "ml-tour-spotlight",
2378
+ "attributes": {}
2379
+ },
2380
+ {
2381
+ "class": "ml-tour-card",
2382
+ "attributes": {
2383
+ "data-centered": []
2384
+ }
2385
+ },
2386
+ {
2387
+ "class": "ml-tour-head",
2388
+ "attributes": {}
2389
+ },
2390
+ {
2391
+ "class": "ml-tour-count",
2392
+ "attributes": {}
2393
+ },
2394
+ {
2395
+ "class": "ml-tour-skip",
2396
+ "attributes": {}
2397
+ },
2398
+ {
2399
+ "class": "ml-tour-title",
2400
+ "attributes": {}
2401
+ },
2402
+ {
2403
+ "class": "ml-tour-body",
2404
+ "attributes": {}
2405
+ },
2406
+ {
2407
+ "class": "ml-tour-foot",
2408
+ "attributes": {}
2409
+ },
2410
+ {
2411
+ "class": "ml-tour-dots",
2412
+ "attributes": {}
2413
+ },
2414
+ {
2415
+ "class": "ml-tour-dot",
2416
+ "attributes": {
2417
+ "data-active": []
2418
+ }
2419
+ },
2420
+ {
2421
+ "class": "ml-tour-button",
2422
+ "attributes": {
2423
+ "data-primary": []
2424
+ }
2425
+ }
2426
+ ]
2427
+ },
2428
+ "app-shell": {
2429
+ "needs": "script",
2430
+ "react": "import { IconHome, IconMail, IconSettings } from \"@mlola-ui/icons\";\nimport { AppShell, Sidebar, SidebarItem, SidebarSection } from \"@/components/ui/app-shell\";\n\nexport default function Example() {\n return (\n <div style={{ height: 320 }}>\n <AppShell\n label=\"Workspace\"\n sidebar={\n <Sidebar header={<strong>Atlas</strong>}>\n <SidebarSection title=\"Workspace\">\n <SidebarItem label=\"Home\" icon={<IconHome size=\"1em\" />} href=\"/\" current />\n <SidebarItem label=\"Inbox\" icon={<IconMail size=\"1em\" />} href=\"/inbox\" count={3} />\n <SidebarItem label=\"Settings\" icon={<IconSettings size=\"1em\" />} href=\"/settings\" />\n </SidebarSection>\n </Sidebar>\n }\n >\n <main>Home</main>\n </AppShell>\n </div>\n );\n}",
2431
+ "html": "<div style=\"height:320px\">\n <div class=\"ml-app-shell\">\n <div class=\"ml-resizable ml-app-shell-frame\" data-direction=\"horizontal\" data-anchor=\"first\" style=\"--ml-resizable-size:248px\">\n <div class=\"ml-resizable-pane\">\n <nav class=\"ml-app-shell-sidebar\" aria-label=\"Workspace\">\n <div class=\"ml-sidebar\">\n <div class=\"ml-sidebar-header\"><strong>Atlas</strong></div>\n <div class=\"ml-sidebar-body\">\n <section class=\"ml-sidebar-section\">\n <h2 class=\"ml-sidebar-title\">Workspace</h2>\n <ul class=\"ml-sidebar-list\" id=\"app-shell-1\">\n <li class=\"ml-sidebar-entry\">\n <a class=\"ml-sidebar-item\" href=\"/\" aria-current=\"page\"><span class=\"ml-sidebar-icon\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><path d=\"m3 11 9-8 9 8v10h-6v-6H9v6H3Z\" pathLength=\"1\"></path></svg></span><span class=\"ml-sidebar-label\">Home</span></a>\n </li>\n <li class=\"ml-sidebar-entry\">\n <a class=\"ml-sidebar-item\" href=\"/inbox\"><span class=\"ml-sidebar-icon\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\" pathLength=\"1\"></rect><path d=\"m4 7 8 6 8-6\" pathLength=\"1\"></path></svg></span><span class=\"ml-sidebar-label\">Inbox</span><span class=\"ml-sidebar-count\">3</span></a>\n </li>\n <li class=\"ml-sidebar-entry\">\n <a class=\"ml-sidebar-item\" href=\"/settings\"><span class=\"ml-sidebar-icon\" aria-hidden=\"true\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"var(--mlola-glyph-stroke, var(--ml-icon-stroke, 1.75))\" stroke-linecap=\"round\" stroke-linejoin=\"round\" focusable=\"false\" aria-hidden=\"true\" data-optical-size=\"default\" style=\"color:var(--mlola-glyph-color, currentColor);scale:var(--mlola-glyph-optical-scale, 1);transform-origin:center\"><circle cx=\"12\" cy=\"12\" r=\"3\" pathLength=\"1\"></circle><path d=\"M19.4 15a1.7 1.7 0 0 0 .3 1.9l.1.1-2.8 2.8-.1-.1a1.7 1.7 0 0 0-1.9-.3 1.7 1.7 0 0 0-1 1.6v.2h-4V21a1.7 1.7 0 0 0-1-1.6 1.7 1.7 0 0 0-1.9.3l-.1.1L4.2 17l.1-.1a1.7 1.7 0 0 0 .3-1.9A1.7 1.7 0 0 0 3 14H2.8v-4H3a1.7 1.7 0 0 0 1.6-1 1.7 1.7 0 0 0-.3-1.9L4.2 7 7 4.2l.1.1A1.7 1.7 0 0 0 9 4.6a1.7 1.7 0 0 0 1-1.6v-.2h4V3a1.7 1.7 0 0 0 1 1.6 1.7 1.7 0 0 0 1.9-.3l.1-.1L19.8 7l-.1.1a1.7 1.7 0 0 0-.3 1.9 1.7 1.7 0 0 0 1.6 1h.2v4H21a1.7 1.7 0 0 0-1.6 1Z\" pathLength=\"1\"></path></svg></span><span class=\"ml-sidebar-label\">Settings</span></a>\n </li>\n </ul>\n </section>\n </div>\n </div>\n </nav>\n </div>\n <div class=\"ml-resizable-handle\" role=\"separator\" tabindex=\"0\" aria-label=\"Resize workspace\" aria-orientation=\"vertical\" aria-valuemin=\"0\" aria-valuemax=\"360\" aria-valuenow=\"248\"></div>\n <div class=\"ml-resizable-pane\"><div class=\"ml-app-shell-main\"><main>Home</main></div></div>\n </div>\n </div>\n</div>",
2432
+ "elements": [
2433
+ {
2434
+ "class": "ml-app-shell",
2435
+ "attributes": {
2436
+ "data-narrow": []
2437
+ }
2438
+ },
2439
+ {
2440
+ "class": "ml-app-shell-frame",
2441
+ "attributes": {}
2442
+ },
2443
+ {
2444
+ "class": "ml-app-shell-sidebar",
2445
+ "attributes": {}
2446
+ },
2447
+ {
2448
+ "class": "ml-app-shell-main",
2449
+ "attributes": {}
2450
+ },
2451
+ {
2452
+ "class": "ml-resizable",
2453
+ "attributes": {
2454
+ "data-anchor": [
2455
+ "second"
2456
+ ],
2457
+ "data-direction": [
2458
+ "horizontal",
2459
+ "vertical"
2460
+ ]
2461
+ }
2462
+ },
2463
+ {
2464
+ "class": "ml-app-shell-drawer",
2465
+ "attributes": {}
2466
+ },
2467
+ {
2468
+ "class": "ml-app-shell-menu",
2469
+ "attributes": {}
2470
+ },
2471
+ {
2472
+ "class": "ml-sidebar",
2473
+ "attributes": {}
2474
+ },
2475
+ {
2476
+ "class": "ml-sidebar-header",
2477
+ "attributes": {}
2478
+ },
2479
+ {
2480
+ "class": "ml-sidebar-footer",
2481
+ "attributes": {}
2482
+ },
2483
+ {
2484
+ "class": "ml-sidebar-body",
2485
+ "attributes": {}
2486
+ },
2487
+ {
2488
+ "class": "ml-sidebar-section",
2489
+ "attributes": {}
2490
+ },
2491
+ {
2492
+ "class": "ml-sidebar-title",
2493
+ "attributes": {
2494
+ "aria-expanded": [
2495
+ "false"
2496
+ ],
2497
+ "data-collapsible": []
2498
+ }
2499
+ },
2500
+ {
2501
+ "class": "ml-sidebar-chevron",
2502
+ "attributes": {}
2503
+ },
2504
+ {
2505
+ "class": "ml-sidebar-list",
2506
+ "attributes": {}
2507
+ },
2508
+ {
2509
+ "class": "ml-sidebar-entry",
2510
+ "attributes": {}
2511
+ },
2512
+ {
2513
+ "class": "ml-sidebar-item",
2514
+ "attributes": {
2515
+ "aria-current": [
2516
+ "page"
2517
+ ]
2518
+ }
2519
+ },
2520
+ {
2521
+ "class": "ml-sidebar-icon",
2522
+ "attributes": {}
2523
+ },
2524
+ {
2525
+ "class": "ml-sidebar-label",
2526
+ "attributes": {}
2527
+ },
2528
+ {
2529
+ "class": "ml-sidebar-count",
2530
+ "attributes": {}
2531
+ },
2532
+ {
2533
+ "class": "ml-sidebar-actions",
2534
+ "attributes": {}
2535
+ }
2536
+ ]
2537
+ }
2538
+ }