@mlola-ui/engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1234 @@
1
+ {
2
+ "$schema": "./contract.schema.json",
3
+ "version": 1,
4
+ "description": "Classes and the data-/aria- attributes the stylesheet reacts to. Emit these from any language or framework and the visuals are correct. Derived from the stylesheet, not hand written.",
5
+ "styling": {
6
+ "attributeSource": "data-theme, data-mode",
7
+ "elements": {
8
+ "ml-accordion-item": {
9
+ "data-state": [
10
+ "open"
11
+ ]
12
+ },
13
+ "ml-alert": {
14
+ "data-state": [
15
+ "closing"
16
+ ],
17
+ "data-tone": [
18
+ "danger",
19
+ "info",
20
+ "neutral",
21
+ "success",
22
+ "warning"
23
+ ],
24
+ "data-variant": [
25
+ "soft"
26
+ ]
27
+ },
28
+ "ml-app-shell": {
29
+ "data-narrow": []
30
+ },
31
+ "ml-avatar-root": {
32
+ "data-size": [
33
+ "lg",
34
+ "sm",
35
+ "xl",
36
+ "xs"
37
+ ]
38
+ },
39
+ "ml-avatar-status": {
40
+ "data-status": [
41
+ "away",
42
+ "busy",
43
+ "online"
44
+ ]
45
+ },
46
+ "ml-badge": {
47
+ "data-size": [
48
+ "lg",
49
+ "sm"
50
+ ],
51
+ "data-tone": [
52
+ "danger",
53
+ "info",
54
+ "primary",
55
+ "success",
56
+ "warning"
57
+ ],
58
+ "data-variant": [
59
+ "outline",
60
+ "solid"
61
+ ]
62
+ },
63
+ "ml-breadcrumb-item": {
64
+ "data-collapse-indicator": [],
65
+ "data-collapsible": []
66
+ },
67
+ "ml-button": {
68
+ "aria-disabled": [
69
+ "true"
70
+ ],
71
+ "aria-pressed": [
72
+ "true"
73
+ ],
74
+ "data-loading": [],
75
+ "data-size": [
76
+ "icon",
77
+ "lg",
78
+ "sm"
79
+ ],
80
+ "data-state": [
81
+ "success"
82
+ ],
83
+ "data-variant": [
84
+ "danger",
85
+ "link",
86
+ "outline",
87
+ "primary",
88
+ "secondary",
89
+ "subtle"
90
+ ]
91
+ },
92
+ "ml-calendar-cell": {
93
+ "data-preview": [],
94
+ "data-range": [
95
+ "end",
96
+ "start"
97
+ ]
98
+ },
99
+ "ml-calendar-day": {
100
+ "aria-disabled": [
101
+ "true"
102
+ ],
103
+ "data-outside": [],
104
+ "data-selected": [],
105
+ "data-today": [],
106
+ "data-unreachable": []
107
+ },
108
+ "ml-card": {
109
+ "data-interactive": [],
110
+ "data-variant": [
111
+ "elevated",
112
+ "glass",
113
+ "specular"
114
+ ]
115
+ },
116
+ "ml-carousel": {
117
+ "data-playing": []
118
+ },
119
+ "ml-carousel-arrow": {
120
+ "data-side": [
121
+ "next",
122
+ "previous"
123
+ ]
124
+ },
125
+ "ml-carousel-dot": {
126
+ "aria-current": [
127
+ "true"
128
+ ]
129
+ },
130
+ "ml-chart-bar": {
131
+ "data-highlighted": [
132
+ "true"
133
+ ]
134
+ },
135
+ "ml-checkbox-field": {
136
+ "data-state": [
137
+ "checked",
138
+ "indeterminate"
139
+ ]
140
+ },
141
+ "ml-circular-progress": {
142
+ "data-size": [
143
+ "lg",
144
+ "sm"
145
+ ],
146
+ "data-state": [
147
+ "complete",
148
+ "indeterminate"
149
+ ],
150
+ "data-tone": [
151
+ "danger",
152
+ "info",
153
+ "success",
154
+ "warning"
155
+ ]
156
+ },
157
+ "ml-color-picker-preset": {
158
+ "aria-pressed": [
159
+ "true"
160
+ ]
161
+ },
162
+ "ml-combobox-control": {
163
+ "data-open": []
164
+ },
165
+ "ml-combobox-input": {
166
+ "data-clearable": [],
167
+ "data-leading": []
168
+ },
169
+ "ml-combobox-option": {
170
+ "aria-disabled": [
171
+ "true"
172
+ ],
173
+ "aria-selected": [
174
+ "true"
175
+ ],
176
+ "data-create": [],
177
+ "data-highlighted": []
178
+ },
179
+ "ml-combobox-popover": {
180
+ "data-side": [
181
+ "top"
182
+ ]
183
+ },
184
+ "ml-command-item": {
185
+ "aria-disabled": [],
186
+ "aria-selected": [
187
+ "true"
188
+ ]
189
+ },
190
+ "ml-context-menu-item": {
191
+ "aria-disabled": [
192
+ "true"
193
+ ],
194
+ "data-danger": [],
195
+ "data-highlighted": []
196
+ },
197
+ "ml-date-picker-panel": {
198
+ "data-presets": []
199
+ },
200
+ "ml-date-picker-trigger": {
201
+ "data-empty": []
202
+ },
203
+ "ml-dropdown-item": {
204
+ "data-danger": [],
205
+ "data-highlighted": []
206
+ },
207
+ "ml-dropdown-menu": {
208
+ "data-align": [
209
+ "end"
210
+ ]
211
+ },
212
+ "ml-dropdown-trigger": {
213
+ "aria-expanded": [
214
+ "true"
215
+ ]
216
+ },
217
+ "ml-dropzone": {
218
+ "aria-disabled": [],
219
+ "data-dragging": []
220
+ },
221
+ "ml-dropzone-file": {
222
+ "data-status": [
223
+ "error"
224
+ ]
225
+ },
226
+ "ml-empty": {
227
+ "data-size": [
228
+ "page"
229
+ ]
230
+ },
231
+ "ml-filter-chip": {
232
+ "aria-pressed": [
233
+ "true"
234
+ ],
235
+ "data-state": [
236
+ "active"
237
+ ]
238
+ },
239
+ "ml-form-message": {
240
+ "data-tone": [
241
+ "danger",
242
+ "success"
243
+ ]
244
+ },
245
+ "ml-grid": {
246
+ "data-columns": [
247
+ "1",
248
+ "2",
249
+ "3",
250
+ "4",
251
+ "6"
252
+ ],
253
+ "data-layout": [
254
+ "3-col",
255
+ "4-col",
256
+ "list"
257
+ ]
258
+ },
259
+ "ml-heatmap": {
260
+ "data-tone": [
261
+ "info",
262
+ "success",
263
+ "warning"
264
+ ]
265
+ },
266
+ "ml-heatmap-cell": {
267
+ "data-active": [],
268
+ "data-level": [
269
+ "1",
270
+ "2",
271
+ "3",
272
+ "4"
273
+ ],
274
+ "data-outside": []
275
+ },
276
+ "ml-input": {
277
+ "aria-invalid": [
278
+ "true"
279
+ ],
280
+ "data-size": [
281
+ "lg",
282
+ "sm"
283
+ ],
284
+ "data-variant": [
285
+ "filled",
286
+ "subtle"
287
+ ]
288
+ },
289
+ "ml-input-control": {
290
+ "data-leading": [],
291
+ "data-trailing": []
292
+ },
293
+ "ml-input-field": {
294
+ "data-invalid": []
295
+ },
296
+ "ml-modal": {
297
+ "data-size": [
298
+ "full",
299
+ "lg",
300
+ "sm",
301
+ "xl"
302
+ ]
303
+ },
304
+ "ml-number-input-control": {
305
+ "data-disabled": [],
306
+ "data-invalid": []
307
+ },
308
+ "ml-otp": {
309
+ "data-invalid": []
310
+ },
311
+ "ml-pagination-button": {
312
+ "aria-current": [
313
+ "page"
314
+ ],
315
+ "data-state": [
316
+ "active"
317
+ ]
318
+ },
319
+ "ml-popover": {
320
+ "data-side": [
321
+ "bottom",
322
+ "left",
323
+ "right",
324
+ "top"
325
+ ]
326
+ },
327
+ "ml-priority-icon": {
328
+ "data-priority": [
329
+ "high",
330
+ "none",
331
+ "urgent"
332
+ ]
333
+ },
334
+ "ml-progress-root": {
335
+ "data-active": [],
336
+ "data-size": [
337
+ "lg",
338
+ "sm"
339
+ ],
340
+ "data-state": [
341
+ "complete",
342
+ "indeterminate"
343
+ ],
344
+ "data-tone": [
345
+ "danger",
346
+ "info",
347
+ "success",
348
+ "warning"
349
+ ]
350
+ },
351
+ "ml-radio-group": {
352
+ "data-orientation": [
353
+ "horizontal"
354
+ ]
355
+ },
356
+ "ml-radio-item": {
357
+ "data-state": [
358
+ "checked"
359
+ ]
360
+ },
361
+ "ml-resizable": {
362
+ "data-anchor": [
363
+ "second"
364
+ ],
365
+ "data-direction": [
366
+ "horizontal",
367
+ "vertical"
368
+ ]
369
+ },
370
+ "ml-resizable-pane": {
371
+ "data-folded": []
372
+ },
373
+ "ml-segmented-control-item": {
374
+ "aria-pressed": [
375
+ "true"
376
+ ],
377
+ "data-state": [
378
+ "active"
379
+ ]
380
+ },
381
+ "ml-select": {
382
+ "data-size": [
383
+ "lg",
384
+ "sm"
385
+ ],
386
+ "data-state": [
387
+ "open"
388
+ ]
389
+ },
390
+ "ml-select-option": {
391
+ "data-disabled": [],
392
+ "data-highlighted": [],
393
+ "data-state": [
394
+ "checked"
395
+ ]
396
+ },
397
+ "ml-select-popover": {
398
+ "data-side": [
399
+ "top"
400
+ ]
401
+ },
402
+ "ml-select-root": {
403
+ "data-invalid": []
404
+ },
405
+ "ml-select-value": {
406
+ "data-placeholder": []
407
+ },
408
+ "ml-sheet-panel": {
409
+ "data-side": [
410
+ "bottom",
411
+ "left",
412
+ "right",
413
+ "top"
414
+ ],
415
+ "data-size": [
416
+ "lg",
417
+ "sm"
418
+ ]
419
+ },
420
+ "ml-sidebar-item": {
421
+ "aria-current": [
422
+ "page"
423
+ ]
424
+ },
425
+ "ml-sidebar-title": {
426
+ "aria-expanded": [
427
+ "false"
428
+ ],
429
+ "data-collapsible": []
430
+ },
431
+ "ml-skeleton": {
432
+ "data-rounded": [
433
+ "none"
434
+ ]
435
+ },
436
+ "ml-slider-field": {
437
+ "data-size": [
438
+ "sm"
439
+ ]
440
+ },
441
+ "ml-status-icon": {
442
+ "data-status": [
443
+ "backlog",
444
+ "canceled",
445
+ "done",
446
+ "in-progress",
447
+ "in-review"
448
+ ]
449
+ },
450
+ "ml-stepper": {
451
+ "data-orientation": [
452
+ "horizontal",
453
+ "vertical"
454
+ ]
455
+ },
456
+ "ml-stepper-step": {
457
+ "data-status": [
458
+ "complete",
459
+ "current",
460
+ "error",
461
+ "upcoming"
462
+ ]
463
+ },
464
+ "ml-table": {
465
+ "data-size": [
466
+ "sm"
467
+ ],
468
+ "data-stripe": [
469
+ "alternate"
470
+ ],
471
+ "data-striped": []
472
+ },
473
+ "ml-table-row": {
474
+ "data-state": [
475
+ "selected"
476
+ ]
477
+ },
478
+ "ml-tabs": {
479
+ "data-orientation": [
480
+ "vertical"
481
+ ],
482
+ "data-variant": [
483
+ "enclosed",
484
+ "pills"
485
+ ]
486
+ },
487
+ "ml-tabs-trigger": {
488
+ "aria-selected": [
489
+ "true"
490
+ ],
491
+ "data-state": [
492
+ "active"
493
+ ]
494
+ },
495
+ "ml-tag-input-control": {
496
+ "data-disabled": [],
497
+ "data-invalid": []
498
+ },
499
+ "ml-tag-input-tag": {
500
+ "data-armed": []
501
+ },
502
+ "ml-textarea-count": {
503
+ "data-full": []
504
+ },
505
+ "ml-time-picker-control": {
506
+ "data-disabled": [],
507
+ "data-unavailable": []
508
+ },
509
+ "ml-time-picker-option": {
510
+ "aria-selected": [
511
+ "true"
512
+ ]
513
+ },
514
+ "ml-time-picker-segment": {
515
+ "data-empty": [],
516
+ "data-period": []
517
+ },
518
+ "ml-timeline-item": {
519
+ "data-status": [
520
+ "complete",
521
+ "current",
522
+ "upcoming"
523
+ ]
524
+ },
525
+ "ml-timeline-marker": {
526
+ "data-status": [
527
+ "complete",
528
+ "current",
529
+ "upcoming"
530
+ ],
531
+ "data-tone": [
532
+ "danger",
533
+ "info",
534
+ "primary",
535
+ "success",
536
+ "warning"
537
+ ]
538
+ },
539
+ "ml-toast": {
540
+ "data-has-description": [],
541
+ "data-swiping": [],
542
+ "data-tone": [
543
+ "danger",
544
+ "info",
545
+ "success",
546
+ "warning"
547
+ ]
548
+ },
549
+ "ml-toast-slot": {
550
+ "data-state": [
551
+ "closed"
552
+ ]
553
+ },
554
+ "ml-toaster": {
555
+ "data-position": [
556
+ "bottom-center",
557
+ "bottom-right",
558
+ "top-center",
559
+ "top-right"
560
+ ]
561
+ },
562
+ "ml-toggle": {
563
+ "aria-checked": [
564
+ "true"
565
+ ],
566
+ "data-size": [
567
+ "lg",
568
+ "sm"
569
+ ],
570
+ "data-state": [
571
+ "checked"
572
+ ]
573
+ },
574
+ "ml-toggle-button": {
575
+ "aria-pressed": [
576
+ "true"
577
+ ],
578
+ "data-state": [
579
+ "on"
580
+ ]
581
+ },
582
+ "ml-tooltip": {
583
+ "data-side": [
584
+ "bottom",
585
+ "left",
586
+ "right",
587
+ "top"
588
+ ]
589
+ },
590
+ "ml-tour-button": {
591
+ "data-primary": []
592
+ },
593
+ "ml-tour-card": {
594
+ "data-centred": []
595
+ },
596
+ "ml-tour-dot": {
597
+ "data-active": []
598
+ },
599
+ "ml-tour-scrim": {
600
+ "data-spotlight": []
601
+ }
602
+ }
603
+ },
604
+ "behavior": {
605
+ "accordion": {
606
+ "summary": "Disclosure list. One panel open at a time, or several.",
607
+ "root": "ml-accordion",
608
+ "parts": {
609
+ "item": "ml-accordion-item",
610
+ "trigger": "ml-accordion-trigger",
611
+ "panel": "ml-accordion-panel"
612
+ },
613
+ "state": {
614
+ "data-state": [
615
+ "open",
616
+ "closed"
617
+ ]
618
+ },
619
+ "aria": {
620
+ "trigger": {
621
+ "role": "button (a real <button> is preferred)",
622
+ "aria-expanded": "true when the item is open",
623
+ "aria-controls": "id of the panel"
624
+ },
625
+ "panel": {
626
+ "role": "region",
627
+ "aria-labelledby": "id of the trigger"
628
+ }
629
+ },
630
+ "keyboard": [
631
+ {
632
+ "keys": [
633
+ "Enter",
634
+ "Space"
635
+ ],
636
+ "does": "Toggle the focused item."
637
+ },
638
+ {
639
+ "keys": [
640
+ "ArrowDown",
641
+ "ArrowUp"
642
+ ],
643
+ "does": "Move focus between triggers."
644
+ },
645
+ {
646
+ "keys": [
647
+ "Home",
648
+ "End"
649
+ ],
650
+ "does": "Focus the first or last trigger."
651
+ }
652
+ ],
653
+ "transitions": [
654
+ {
655
+ "on": "click or activate a trigger",
656
+ "set": "data-state on the item, trigger and panel",
657
+ "to": "open, or closed when it was open and collapsing is allowed",
658
+ "also": "hide the closed panel from the accessibility tree"
659
+ }
660
+ ],
661
+ "options": {
662
+ "multiple": "Allow more than one open item.",
663
+ "collapsible": "Allow closing the last open item. Default true."
664
+ }
665
+ },
666
+ "tabs": {
667
+ "summary": "One panel visible at a time, selected by a tab strip.",
668
+ "root": "ml-tabs",
669
+ "parts": {
670
+ "list": "ml-tabs-list",
671
+ "trigger": "ml-tabs-trigger",
672
+ "content": "ml-tabs-content"
673
+ },
674
+ "state": {
675
+ "data-state": [
676
+ "active",
677
+ "inactive"
678
+ ],
679
+ "data-orientation": [
680
+ "horizontal",
681
+ "vertical"
682
+ ]
683
+ },
684
+ "aria": {
685
+ "list": {
686
+ "role": "tablist",
687
+ "aria-orientation": "matches data-orientation"
688
+ },
689
+ "trigger": {
690
+ "role": "tab",
691
+ "aria-selected": "true on the active tab",
692
+ "aria-controls": "id of the panel",
693
+ "tabindex": "0 on the active tab, -1 on the rest"
694
+ },
695
+ "content": {
696
+ "role": "tabpanel",
697
+ "aria-labelledby": "id of the tab"
698
+ }
699
+ },
700
+ "keyboard": [
701
+ {
702
+ "keys": [
703
+ "ArrowRight",
704
+ "ArrowLeft"
705
+ ],
706
+ "does": "Move to the next or previous enabled tab when horizontal, wrapping around."
707
+ },
708
+ {
709
+ "keys": [
710
+ "ArrowDown",
711
+ "ArrowUp"
712
+ ],
713
+ "does": "The same when vertical."
714
+ },
715
+ {
716
+ "keys": [
717
+ "Home",
718
+ "End"
719
+ ],
720
+ "does": "Move to the first or last enabled tab."
721
+ }
722
+ ],
723
+ "transitions": [
724
+ {
725
+ "on": "select a tab by pointer or key",
726
+ "set": "data-state and aria-selected on triggers, data-state on panels",
727
+ "to": "active for the chosen pair, inactive for the rest",
728
+ "also": "move focus to the newly selected tab"
729
+ }
730
+ ],
731
+ "notes": "Selection follows focus. Disabled tabs are skipped, never focused."
732
+ },
733
+ "dropdown-menu": {
734
+ "summary": "A menu anchored to a trigger.",
735
+ "root": "ml-dropdown",
736
+ "parts": {
737
+ "trigger": "ml-dropdown-trigger",
738
+ "menu": "ml-dropdown-menu",
739
+ "item": "ml-dropdown-item"
740
+ },
741
+ "state": {
742
+ "data-align": [
743
+ "start",
744
+ "end"
745
+ ]
746
+ },
747
+ "signals": {
748
+ "data-state": [
749
+ "open",
750
+ "closed"
751
+ ],
752
+ "data-highlighted": [
753
+ "present on the active item"
754
+ ]
755
+ },
756
+ "aria": {
757
+ "trigger": {
758
+ "aria-haspopup": "menu",
759
+ "aria-expanded": "true while open"
760
+ },
761
+ "menu": {
762
+ "role": "menu"
763
+ },
764
+ "item": {
765
+ "role": "menuitem",
766
+ "data-highlighted": "present on the active item"
767
+ }
768
+ },
769
+ "keyboard": [
770
+ {
771
+ "keys": [
772
+ "ArrowDown",
773
+ "ArrowUp"
774
+ ],
775
+ "does": "Open the menu, then move the highlight."
776
+ },
777
+ {
778
+ "keys": [
779
+ "Enter",
780
+ "Space"
781
+ ],
782
+ "does": "Activate the highlighted item."
783
+ },
784
+ {
785
+ "keys": [
786
+ "Escape"
787
+ ],
788
+ "does": "Close and return focus to the trigger."
789
+ },
790
+ {
791
+ "keys": [
792
+ "Tab"
793
+ ],
794
+ "does": "Close without activating."
795
+ }
796
+ ],
797
+ "transitions": [
798
+ {
799
+ "on": "click the trigger",
800
+ "set": "data-state",
801
+ "to": "open or closed"
802
+ },
803
+ {
804
+ "on": "pointer over an item",
805
+ "set": "data-highlighted",
806
+ "to": "that item only"
807
+ },
808
+ {
809
+ "on": "pointer down outside the root",
810
+ "set": "data-state",
811
+ "to": "closed"
812
+ }
813
+ ],
814
+ "notes": "Disabled items are skipped by the highlight and cannot be activated."
815
+ },
816
+ "select": {
817
+ "summary": "A listbox behind a combobox trigger.",
818
+ "root": "ml-select-root",
819
+ "parts": {
820
+ "trigger": "ml-select",
821
+ "popover": "ml-select-popover",
822
+ "list": "ml-select-list",
823
+ "option": "ml-select-option",
824
+ "search": "ml-select-search"
825
+ },
826
+ "state": {
827
+ "data-state": [
828
+ "open",
829
+ "closed",
830
+ "checked",
831
+ "unchecked"
832
+ ]
833
+ },
834
+ "aria": {
835
+ "trigger": {
836
+ "role": "combobox",
837
+ "aria-expanded": "true while open",
838
+ "aria-controls": "id of the listbox",
839
+ "aria-activedescendant": "id of the highlighted option while open"
840
+ },
841
+ "list": {
842
+ "role": "listbox",
843
+ "aria-multiselectable": "true when multiple"
844
+ },
845
+ "option": {
846
+ "role": "option",
847
+ "aria-selected": "true when chosen",
848
+ "data-highlighted": "present on the active option"
849
+ }
850
+ },
851
+ "keyboard": [
852
+ {
853
+ "keys": [
854
+ "ArrowDown",
855
+ "ArrowUp"
856
+ ],
857
+ "does": "Open, then move the highlight past disabled options."
858
+ },
859
+ {
860
+ "keys": [
861
+ "Enter",
862
+ "Space"
863
+ ],
864
+ "does": "Choose the highlighted option. Space types when a search field has focus."
865
+ },
866
+ {
867
+ "keys": [
868
+ "Home",
869
+ "End"
870
+ ],
871
+ "does": "Highlight the first or last enabled option."
872
+ },
873
+ {
874
+ "keys": [
875
+ "Escape"
876
+ ],
877
+ "does": "Close and return focus to the trigger."
878
+ },
879
+ {
880
+ "keys": [
881
+ "Tab"
882
+ ],
883
+ "does": "Close without choosing."
884
+ }
885
+ ],
886
+ "transitions": [
887
+ {
888
+ "on": "choose an option",
889
+ "set": "aria-selected and data-state on options",
890
+ "to": "checked for the chosen option",
891
+ "also": "single select closes and restores focus; multiple select stays open"
892
+ }
893
+ ],
894
+ "options": {
895
+ "multiple": "Toggle several values and keep the list open."
896
+ }
897
+ },
898
+ "modal": {
899
+ "summary": "A dialog over the page that owns focus while open.",
900
+ "root": "ml-modal",
901
+ "parts": {
902
+ "overlay": "ml-modal-overlay",
903
+ "close": "ml-modal-close"
904
+ },
905
+ "state": {
906
+ "data-size": [
907
+ "sm",
908
+ "md",
909
+ "lg",
910
+ "xl",
911
+ "full"
912
+ ]
913
+ },
914
+ "signals": {
915
+ "data-state": [
916
+ "open",
917
+ "closed"
918
+ ]
919
+ },
920
+ "aria": {
921
+ "root": {
922
+ "role": "dialog",
923
+ "aria-modal": "true",
924
+ "aria-labelledby": "id of the title, or aria-label"
925
+ }
926
+ },
927
+ "keyboard": [
928
+ {
929
+ "keys": [
930
+ "Escape"
931
+ ],
932
+ "does": "Close, unless closing on Escape is disabled."
933
+ },
934
+ {
935
+ "keys": [
936
+ "Tab",
937
+ "Shift+Tab"
938
+ ],
939
+ "does": "Cycle focus inside the dialog and never leave it."
940
+ }
941
+ ],
942
+ "transitions": [
943
+ {
944
+ "on": "open",
945
+ "set": "focus",
946
+ "to": "the first focusable element inside",
947
+ "also": "lock page scroll"
948
+ },
949
+ {
950
+ "on": "close",
951
+ "set": "focus",
952
+ "to": "the element that opened the dialog",
953
+ "also": "release page scroll"
954
+ },
955
+ {
956
+ "on": "pointer down on the backdrop",
957
+ "set": "closed",
958
+ "to": "unless closing on backdrop is disabled"
959
+ }
960
+ ]
961
+ },
962
+ "sheet": {
963
+ "summary": "A dialog anchored to one edge of the viewport.",
964
+ "root": "ml-sheet-panel",
965
+ "parts": {
966
+ "overlay": "ml-sheet-overlay",
967
+ "close": "ml-sheet-close"
968
+ },
969
+ "state": {
970
+ "data-side": [
971
+ "left",
972
+ "right",
973
+ "top",
974
+ "bottom"
975
+ ],
976
+ "data-size": [
977
+ "sm",
978
+ "md",
979
+ "lg"
980
+ ]
981
+ },
982
+ "signals": {
983
+ "data-state": [
984
+ "open",
985
+ "closed"
986
+ ]
987
+ },
988
+ "aria": {
989
+ "root": {
990
+ "role": "dialog",
991
+ "aria-modal": "true"
992
+ }
993
+ },
994
+ "keyboard": [
995
+ {
996
+ "keys": [
997
+ "Escape"
998
+ ],
999
+ "does": "Close, unless closing on Escape is disabled."
1000
+ },
1001
+ {
1002
+ "keys": [
1003
+ "Tab",
1004
+ "Shift+Tab"
1005
+ ],
1006
+ "does": "Cycle focus inside the panel."
1007
+ }
1008
+ ],
1009
+ "transitions": [
1010
+ {
1011
+ "on": "open",
1012
+ "set": "focus",
1013
+ "to": "inside the panel",
1014
+ "also": "lock page scroll"
1015
+ },
1016
+ {
1017
+ "on": "close",
1018
+ "set": "focus",
1019
+ "to": "the trigger",
1020
+ "also": "release page scroll"
1021
+ }
1022
+ ],
1023
+ "notes": "Identical to modal apart from which edge it is anchored to."
1024
+ },
1025
+ "tooltip": {
1026
+ "summary": "A short label shown on hover or focus.",
1027
+ "root": "ml-tooltip-root",
1028
+ "parts": {
1029
+ "tooltip": "ml-tooltip",
1030
+ "arrow": "ml-tooltip-arrow"
1031
+ },
1032
+ "state": {
1033
+ "data-side": [
1034
+ "top",
1035
+ "right",
1036
+ "bottom",
1037
+ "left"
1038
+ ]
1039
+ },
1040
+ "signals": {
1041
+ "data-state": [
1042
+ "open"
1043
+ ]
1044
+ },
1045
+ "aria": {
1046
+ "tooltip": {
1047
+ "role": "tooltip"
1048
+ },
1049
+ "trigger": {
1050
+ "aria-describedby": "id of the tooltip while it is open"
1051
+ }
1052
+ },
1053
+ "keyboard": [
1054
+ {
1055
+ "keys": [
1056
+ "Escape"
1057
+ ],
1058
+ "does": "Hide the tooltip."
1059
+ }
1060
+ ],
1061
+ "transitions": [
1062
+ {
1063
+ "on": "pointer enter or focus the trigger",
1064
+ "set": "visible",
1065
+ "to": "after the delay"
1066
+ },
1067
+ {
1068
+ "on": "pointer leave or blur",
1069
+ "set": "hidden",
1070
+ "to": "immediately, cancelling any pending delay"
1071
+ }
1072
+ ],
1073
+ "notes": "Never put essential information or interactive content in a tooltip."
1074
+ },
1075
+ "toast": {
1076
+ "summary": "Transient messages in a live region.",
1077
+ "root": "ml-toaster",
1078
+ "parts": {
1079
+ "toast": "ml-toast",
1080
+ "action": "ml-toast-action",
1081
+ "close": "ml-toast-close"
1082
+ },
1083
+ "state": {
1084
+ "data-tone": [
1085
+ "neutral",
1086
+ "info",
1087
+ "success",
1088
+ "warning",
1089
+ "danger"
1090
+ ],
1091
+ "data-position": [
1092
+ "top-right",
1093
+ "top-center",
1094
+ "bottom-right",
1095
+ "bottom-center"
1096
+ ]
1097
+ },
1098
+ "aria": {
1099
+ "root": {
1100
+ "role": "region",
1101
+ "aria-label": "distinct per region, so several are distinguishable"
1102
+ },
1103
+ "toast": {
1104
+ "role": "status for ordinary messages, alert for danger and warning",
1105
+ "aria-live": "polite, or assertive for danger and warning",
1106
+ "aria-busy": "true while it waits on work (a loading toast)"
1107
+ }
1108
+ },
1109
+ "keyboard": [
1110
+ {
1111
+ "keys": [
1112
+ "Tab"
1113
+ ],
1114
+ "does": "Reach the action and dismiss controls."
1115
+ }
1116
+ ],
1117
+ "transitions": [
1118
+ {
1119
+ "on": "push",
1120
+ "set": "a toast into the region matching its position",
1121
+ "to": "visible"
1122
+ },
1123
+ {
1124
+ "on": "duration elapsed",
1125
+ "set": "removed",
1126
+ "to": "unless the duration is zero"
1127
+ }
1128
+ ]
1129
+ },
1130
+ "switch": {
1131
+ "summary": "An on/off control that is not a native checkbox.",
1132
+ "root": "ml-toggle",
1133
+ "parts": {
1134
+ "thumb": "ml-toggle-thumb"
1135
+ },
1136
+ "state": {
1137
+ "data-state": [
1138
+ "checked",
1139
+ "unchecked"
1140
+ ],
1141
+ "data-size": [
1142
+ "sm",
1143
+ "md",
1144
+ "lg"
1145
+ ]
1146
+ },
1147
+ "aria": {
1148
+ "root": {
1149
+ "role": "switch",
1150
+ "aria-checked": "true or false"
1151
+ }
1152
+ },
1153
+ "keyboard": [
1154
+ {
1155
+ "keys": [
1156
+ "Enter",
1157
+ "Space"
1158
+ ],
1159
+ "does": "Toggle."
1160
+ }
1161
+ ],
1162
+ "transitions": [
1163
+ {
1164
+ "on": "activate",
1165
+ "set": "aria-checked and data-state",
1166
+ "to": "the opposite value"
1167
+ }
1168
+ ],
1169
+ "notes": "Prefer a native checkbox unless the control genuinely reads as a switch."
1170
+ },
1171
+ "slider": {
1172
+ "summary": "A single value chosen from a range.",
1173
+ "root": "ml-slider-field",
1174
+ "parts": {
1175
+ "control": "ml-slider",
1176
+ "track": "ml-slider-track",
1177
+ "range": "ml-slider-range",
1178
+ "thumb": "ml-slider-thumb"
1179
+ },
1180
+ "state": {
1181
+ "data-size": [
1182
+ "sm",
1183
+ "md"
1184
+ ]
1185
+ },
1186
+ "aria": {
1187
+ "thumb": {
1188
+ "role": "slider",
1189
+ "aria-valuenow": "current value",
1190
+ "aria-valuemin": "minimum",
1191
+ "aria-valuemax": "maximum",
1192
+ "tabindex": "0 unless disabled"
1193
+ }
1194
+ },
1195
+ "keyboard": [
1196
+ {
1197
+ "keys": [
1198
+ "ArrowRight",
1199
+ "ArrowUp"
1200
+ ],
1201
+ "does": "Increase by one step."
1202
+ },
1203
+ {
1204
+ "keys": [
1205
+ "ArrowLeft",
1206
+ "ArrowDown"
1207
+ ],
1208
+ "does": "Decrease by one step."
1209
+ },
1210
+ {
1211
+ "keys": [
1212
+ "Home",
1213
+ "End"
1214
+ ],
1215
+ "does": "Jump to the minimum or maximum."
1216
+ },
1217
+ {
1218
+ "keys": [
1219
+ "PageUp",
1220
+ "PageDown"
1221
+ ],
1222
+ "does": "Move by a larger step."
1223
+ }
1224
+ ],
1225
+ "transitions": [
1226
+ {
1227
+ "on": "pointer down on the track, or drag the thumb",
1228
+ "set": "the value from the pointer position, snapped to the step",
1229
+ "to": "within min and max"
1230
+ }
1231
+ ]
1232
+ }
1233
+ }
1234
+ }