@cssints/apg-specs 0.0.0-stage → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +65 -2
- package/dist/apg/accordion.bridge.d.mts +35 -0
- package/dist/apg/accordion.bridge.mjs +326 -0
- package/dist/apg/accordion.model.json +8397 -0
- package/dist/apg/alert.bridge.d.mts +22 -0
- package/dist/apg/alert.bridge.mjs +86 -0
- package/dist/apg/alert.model.json +871 -0
- package/dist/apg/alertdialog.bridge.d.mts +21 -0
- package/dist/apg/alertdialog.bridge.mjs +221 -0
- package/dist/apg/alertdialog.model.json +5232 -0
- package/dist/apg/breadcrumb.bridge.d.mts +26 -0
- package/dist/apg/breadcrumb.bridge.mjs +120 -0
- package/dist/apg/breadcrumb.model.json +574 -0
- package/dist/apg/button.bridge.d.mts +35 -0
- package/dist/apg/button.bridge.mjs +208 -0
- package/dist/apg/button.model.json +5814 -0
- package/dist/apg/carousel.bridge.d.mts +44 -0
- package/dist/apg/carousel.bridge.mjs +262 -0
- package/dist/apg/carousel.model.json +8963 -0
- package/dist/apg/checkbox-group.bridge.d.mts +25 -0
- package/dist/apg/checkbox-group.bridge.mjs +276 -0
- package/dist/apg/checkbox-group.model.json +3863 -0
- package/dist/apg/checkbox.bridge.d.mts +34 -0
- package/dist/apg/checkbox.bridge.mjs +253 -0
- package/dist/apg/checkbox.model.json +3158 -0
- package/dist/apg/combobox-autocomplete.bridge.d.mts +14 -0
- package/dist/apg/combobox-autocomplete.bridge.mjs +326 -0
- package/dist/apg/combobox-autocomplete.model.json +11586 -0
- package/dist/apg/combobox-dialog.bridge.d.mts +17 -0
- package/dist/apg/combobox-dialog.bridge.mjs +250 -0
- package/dist/apg/combobox-dialog.model.json +8981 -0
- package/dist/apg/combobox-grid.bridge.d.mts +17 -0
- package/dist/apg/combobox-grid.bridge.mjs +227 -0
- package/dist/apg/combobox-grid.model.json +8554 -0
- package/dist/apg/combobox-select-only.bridge.d.mts +24 -0
- package/dist/apg/combobox-select-only.bridge.mjs +304 -0
- package/dist/apg/combobox-select-only.model.json +7846 -0
- package/dist/apg/combobox-tree.bridge.d.mts +17 -0
- package/dist/apg/combobox-tree.bridge.mjs +211 -0
- package/dist/apg/combobox-tree.model.json +9345 -0
- package/dist/apg/dialog-modal.bridge.d.mts +35 -0
- package/dist/apg/dialog-modal.bridge.mjs +186 -0
- package/dist/apg/dialog-modal.model.json +7580 -0
- package/dist/apg/disclosure.bridge.d.mts +25 -0
- package/dist/apg/disclosure.bridge.mjs +202 -0
- package/dist/apg/disclosure.model.json +4703 -0
- package/dist/apg/feed.bridge.d.mts +31 -0
- package/dist/apg/feed.bridge.mjs +246 -0
- package/dist/apg/feed.model.json +4523 -0
- package/dist/apg/grid-selection.bridge.d.mts +13 -0
- package/dist/apg/grid-selection.bridge.mjs +160 -0
- package/dist/apg/grid-selection.model.json +6974 -0
- package/dist/apg/grid-sort.bridge.d.mts +12 -0
- package/dist/apg/grid-sort.bridge.mjs +138 -0
- package/dist/apg/grid-sort.model.json +3799 -0
- package/dist/apg/grid.bridge.d.mts +54 -0
- package/dist/apg/grid.bridge.mjs +441 -0
- package/dist/apg/grid.model.json +3802 -0
- package/dist/apg/link.bridge.d.mts +24 -0
- package/dist/apg/link.bridge.mjs +126 -0
- package/dist/apg/link.model.json +694 -0
- package/dist/apg/listbox-multi.bridge.d.mts +10 -0
- package/dist/apg/listbox-multi.bridge.mjs +261 -0
- package/dist/apg/listbox-multi.model.json +10893 -0
- package/dist/apg/listbox-rearrangeable.bridge.d.mts +20 -0
- package/dist/apg/listbox-rearrangeable.bridge.mjs +237 -0
- package/dist/apg/listbox-rearrangeable.model.json +17592 -0
- package/dist/apg/listbox-shared.d.mts +58 -0
- package/dist/apg/listbox-shared.mjs +171 -0
- package/dist/apg/listbox-single.bridge.d.mts +10 -0
- package/dist/apg/listbox-single.bridge.mjs +196 -0
- package/dist/apg/listbox-single.model.json +8024 -0
- package/dist/apg/listbox-typeahead.bridge.d.mts +10 -0
- package/dist/apg/listbox-typeahead.bridge.mjs +153 -0
- package/dist/apg/listbox-typeahead.model.json +5615 -0
- package/dist/apg/menu-button.bridge.d.mts +29 -0
- package/dist/apg/menu-button.bridge.mjs +259 -0
- package/dist/apg/menu-button.model.json +5706 -0
- package/dist/apg/menu-checkable.bridge.d.mts +25 -0
- package/dist/apg/menu-checkable.bridge.mjs +226 -0
- package/dist/apg/menu-checkable.model.json +4277 -0
- package/dist/apg/menu-menubar.bridge.d.mts +27 -0
- package/dist/apg/menu-menubar.bridge.mjs +273 -0
- package/dist/apg/menu-menubar.model.json +9540 -0
- package/dist/apg/meter.bridge.d.mts +28 -0
- package/dist/apg/meter.bridge.mjs +159 -0
- package/dist/apg/meter.model.json +1185 -0
- package/dist/apg/player.bridge.d.mts +24 -0
- package/dist/apg/player.bridge.mjs +342 -0
- package/dist/apg/player.model.json +11013 -0
- package/dist/apg/radio.bridge.d.mts +35 -0
- package/dist/apg/radio.bridge.mjs +371 -0
- package/dist/apg/radio.model.json +5011 -0
- package/dist/apg/slider-multithumb.bridge.d.mts +34 -0
- package/dist/apg/slider-multithumb.bridge.mjs +365 -0
- package/dist/apg/slider-multithumb.model.json +5774 -0
- package/dist/apg/slider.bridge.d.mts +54 -0
- package/dist/apg/slider.bridge.mjs +359 -0
- package/dist/apg/slider.model.json +4881 -0
- package/dist/apg/spinbutton.bridge.d.mts +41 -0
- package/dist/apg/spinbutton.bridge.mjs +327 -0
- package/dist/apg/spinbutton.model.json +7571 -0
- package/dist/apg/switch.bridge.d.mts +30 -0
- package/dist/apg/switch.bridge.mjs +243 -0
- package/dist/apg/switch.model.json +3159 -0
- package/dist/apg/tabs.bridge.d.mts +41 -0
- package/dist/apg/tabs.bridge.mjs +294 -0
- package/dist/apg/tabs.model.json +7659 -0
- package/dist/apg/timeline.bridge.d.mts +36 -0
- package/dist/apg/timeline.bridge.mjs +265 -0
- package/dist/apg/timeline.model.json +6189 -0
- package/dist/apg/toolbar.bridge.d.mts +25 -0
- package/dist/apg/toolbar.bridge.mjs +307 -0
- package/dist/apg/toolbar.model.json +6616 -0
- package/dist/apg/tooltip.bridge.d.mts +36 -0
- package/dist/apg/tooltip.bridge.mjs +208 -0
- package/dist/apg/tooltip.model.json +8295 -0
- package/dist/apg/treegrid.bridge.d.mts +28 -0
- package/dist/apg/treegrid.bridge.mjs +311 -0
- package/dist/apg/treegrid.model.json +17358 -0
- package/dist/apg/treeview.bridge.d.mts +26 -0
- package/dist/apg/treeview.bridge.mjs +396 -0
- package/dist/apg/treeview.model.json +13745 -0
- package/dist/apg/windowsplitter.bridge.d.mts +36 -0
- package/dist/apg/windowsplitter.bridge.mjs +242 -0
- package/dist/apg/windowsplitter.model.json +6253 -0
- package/dist/canvas/camera.model.json +6568 -0
- package/dist/canvas/canvas.bridge.d.mts +190 -0
- package/dist/canvas/canvas.bridge.mjs +729 -0
- package/dist/canvas/pointer.model.json +17095 -0
- package/dist/scenario.d.mts +233 -0
- package/dist/scenario.mjs +313 -0
- package/package.json +57 -4
- package/scenarios/apg/README.md +221 -0
- package/scenarios/apg/accordion.base-ui.json +1005 -0
- package/scenarios/apg/accordion.react-aria.json +929 -0
- package/scenarios/apg/alert.base-ui.json +81 -0
- package/scenarios/apg/alert.react-aria.json +98 -0
- package/scenarios/apg/alertdialog.base-ui.json +331 -0
- package/scenarios/apg/alertdialog.react-aria.json +225 -0
- package/scenarios/apg/breadcrumb.react-aria.json +312 -0
- package/scenarios/apg/button.ariakit.json +136 -0
- package/scenarios/apg/button.base-ui.json +747 -0
- package/scenarios/apg/button.react-aria.json +443 -0
- package/scenarios/apg/carousel.apg.json +909 -0
- package/scenarios/apg/checkbox.ariakit.json +299 -0
- package/scenarios/apg/checkbox.base-ui.json +1126 -0
- package/scenarios/apg/checkbox.react-aria.json +518 -0
- package/scenarios/apg/combobox.ariakit.json +945 -0
- package/scenarios/apg/combobox.base-ui.json +2444 -0
- package/scenarios/apg/combobox.react-aria.json +845 -0
- package/scenarios/apg/dialog-modal.ariakit.json +1102 -0
- package/scenarios/apg/dialog-modal.base-ui.json +775 -0
- package/scenarios/apg/dialog-modal.react-aria.json +638 -0
- package/scenarios/apg/disclosure.apg.json +349 -0
- package/scenarios/apg/disclosure.ariakit.json +163 -0
- package/scenarios/apg/disclosure.base-ui.json +451 -0
- package/scenarios/apg/disclosure.react-aria.json +643 -0
- package/scenarios/apg/feed.apg.json +442 -0
- package/scenarios/apg/grid.ariakit.json +197 -0
- package/scenarios/apg/grid.base-ui.json +720 -0
- package/scenarios/apg/grid.react-aria.json +969 -0
- package/scenarios/apg/landmarks.ariakit.json +93 -0
- package/scenarios/apg/landmarks.react-aria.json +330 -0
- package/scenarios/apg/link.ariakit.json +83 -0
- package/scenarios/apg/link.base-ui.json +88 -0
- package/scenarios/apg/link.react-aria.json +186 -0
- package/scenarios/apg/listbox.ariakit.json +78 -0
- package/scenarios/apg/listbox.base-ui.json +163 -0
- package/scenarios/apg/listbox.react-aria.json +1118 -0
- package/scenarios/apg/menu-button.ariakit.json +924 -0
- package/scenarios/apg/menu-button.base-ui.json +1155 -0
- package/scenarios/apg/menu-button.react-aria.json +1080 -0
- package/scenarios/apg/menubar.ariakit.json +758 -0
- package/scenarios/apg/menubar.base-ui.json +673 -0
- package/scenarios/apg/meter.base-ui.json +243 -0
- package/scenarios/apg/meter.react-aria.json +201 -0
- package/scenarios/apg/radio.ariakit.json +459 -0
- package/scenarios/apg/radio.base-ui.json +581 -0
- package/scenarios/apg/radio.react-aria.json +576 -0
- package/scenarios/apg/slider-multithumb.base-ui.json +316 -0
- package/scenarios/apg/slider-multithumb.react-aria.json +363 -0
- package/scenarios/apg/slider.base-ui.json +544 -0
- package/scenarios/apg/slider.react-aria.json +456 -0
- package/scenarios/apg/spinbutton.base-ui.json +1688 -0
- package/scenarios/apg/spinbutton.react-aria.json +426 -0
- package/scenarios/apg/switch.base-ui.json +456 -0
- package/scenarios/apg/switch.react-aria.json +303 -0
- package/scenarios/apg/table.ariakit.json +65 -0
- package/scenarios/apg/table.react-aria.json +221 -0
- package/scenarios/apg/tabs.ariakit.json +329 -0
- package/scenarios/apg/tabs.base-ui.json +875 -0
- package/scenarios/apg/tabs.react-aria.json +644 -0
- package/scenarios/apg/toolbar.ariakit.json +595 -0
- package/scenarios/apg/toolbar.base-ui.json +1189 -0
- package/scenarios/apg/toolbar.react-aria.json +383 -0
- package/scenarios/apg/tooltip.ariakit.json +441 -0
- package/scenarios/apg/tooltip.base-ui.json +411 -0
- package/scenarios/apg/tooltip.react-aria.json +454 -0
- package/scenarios/apg/treegrid.apg.json +2558 -0
- package/scenarios/apg/treegrid.react-aria.json +5094 -0
- package/scenarios/apg/treeview.apg.json +928 -0
- package/scenarios/apg/windowsplitter.apg.json +557 -0
- package/scenarios/canvas/README.md +69 -0
- package/scenarios/canvas/camera.contract.json +237 -0
- package/scenarios/canvas/camera.excalidraw.json +57 -0
- package/scenarios/canvas/marquee.excalidraw.json +122 -0
- package/scenarios/canvas/pan.excalidraw.json +46 -0
- package/scenarios/canvas/pointer.contract.json +528 -0
- package/scenarios/parts.json +291 -0
- package/shared/aria.qnt +186 -0
- package/shared/details-group.qnt +50 -0
- package/shared/focusgroup.qnt +152 -0
- package/shared/invokers.qnt +81 -0
- package/shared/popover.qnt +71 -0
- package/specs/apg/STATIC.md +103 -0
- package/specs/apg/accordion.qnt +578 -0
- package/specs/apg/alert.qnt +131 -0
- package/specs/apg/alertdialog.qnt +455 -0
- package/specs/apg/breadcrumb.qnt +88 -0
- package/specs/apg/button.qnt +445 -0
- package/specs/apg/carousel.qnt +732 -0
- package/specs/apg/checkbox-group.qnt +388 -0
- package/specs/apg/checkbox.qnt +394 -0
- package/specs/apg/combobox-autocomplete.qnt +764 -0
- package/specs/apg/combobox-dialog.qnt +627 -0
- package/specs/apg/combobox-grid.qnt +632 -0
- package/specs/apg/combobox-select-only.qnt +626 -0
- package/specs/apg/combobox-tree.qnt +633 -0
- package/specs/apg/dialog-modal.qnt +499 -0
- package/specs/apg/disclosure.qnt +309 -0
- package/specs/apg/feed.qnt +485 -0
- package/specs/apg/grid-selection.qnt +512 -0
- package/specs/apg/grid-sort.qnt +330 -0
- package/specs/apg/grid.qnt +360 -0
- package/specs/apg/link.qnt +119 -0
- package/specs/apg/listbox-multi.qnt +799 -0
- package/specs/apg/listbox-rearrangeable.qnt +801 -0
- package/specs/apg/listbox-single.qnt +511 -0
- package/specs/apg/listbox-typeahead.qnt +396 -0
- package/specs/apg/menu-button.qnt +363 -0
- package/specs/apg/menu-checkable.qnt +304 -0
- package/specs/apg/menu-menubar.qnt +531 -0
- package/specs/apg/meter.qnt +129 -0
- package/specs/apg/player.qnt +1081 -0
- package/specs/apg/radio.qnt +394 -0
- package/specs/apg/slider-multithumb.qnt +441 -0
- package/specs/apg/slider.qnt +396 -0
- package/specs/apg/spinbutton.qnt +494 -0
- package/specs/apg/switch.qnt +389 -0
- package/specs/apg/tabs.qnt +412 -0
- package/specs/apg/timeline.qnt +612 -0
- package/specs/apg/toolbar.qnt +364 -0
- package/specs/apg/tooltip.qnt +553 -0
- package/specs/apg/treegrid.qnt +983 -0
- package/specs/apg/treeview.qnt +1004 -0
- package/specs/apg/windowsplitter.qnt +487 -0
- package/specs/canvas/camera.qnt +407 -0
- package/specs/canvas/pointer.qnt +841 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pattern": "tooltip",
|
|
3
|
+
"source": "base-ui",
|
|
4
|
+
"commit": "19511bb171f3b360b006c94cf6d07e53cb446505",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"skipped": [
|
|
7
|
+
{
|
|
8
|
+
"reason": "animation and mount lifecycle (data-starting-style / data-ending-style / data-instant, getAnimations, CSS keyframes, exit-animation onOpenChangeComplete timings) - styling and timing internals"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"reason": "popupConformanceTests and describeConformance suites (ref forwarding, render props, prop merging, error messages) - React-API-only"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"reason": "positioning and cursor tracking (tooltip/positioner, trackCursorAxis x/both, side, sideOffset, getBoundingClientRect assertions) - placement internals"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"reason": "inline style assertions (positioner pointer-events for disableHoverablePopup and trackCursorAxis, inline opacity removal)"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"reason": "BaseUIChangeEventDetails API assertions (cancel(), allowPropagation(), details.reason, stopPropagation spy)"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"reason": "prop: actionsRef imperative unmount/close methods and preventUnmountOnClose keep-mounted flows"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"reason": "controlled prop updates (`uses the latest closeDelay after the prop updates`, `does not close when open is controlled`) that rerender with new props mid-timer"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"reason": "detached-trigger and multiple-detached-trigger variants; the contained-trigger behaviour is ported once"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"reason": "shadow-root and empty composedPath nested-trigger fallbacks, touch-pointer nested reopen paths, and safePolygon suppression"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"reason": "rare races (`does not re-announce an open outer tooltip`, `rapidly moving back to a nested trigger`) that require fake-clock interleaving with external opens"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"reason": "provider closeDelay/trigger-delay precedence variants beyond the single override scenario"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"scenarios": [
|
|
42
|
+
{
|
|
43
|
+
"id": "tooltip.base-ui.opens-on-hover-after-open-delay",
|
|
44
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L87",
|
|
45
|
+
"upstreamTest": "<Tooltip.Root /> > uncontrolled open > should open when the trigger is hovered",
|
|
46
|
+
"apg": "pointer",
|
|
47
|
+
"config": { "delay": 600 },
|
|
48
|
+
"steps": [
|
|
49
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
50
|
+
{ "event": "wait", "ms": 300 },
|
|
51
|
+
{ "expect": { "visible": [] } },
|
|
52
|
+
{ "event": "wait", "ms": 300 },
|
|
53
|
+
{ "expect": { "visible": ["tooltip:0"] } }
|
|
54
|
+
],
|
|
55
|
+
"notes": "OPEN_DELAY is 600ms; the first wait is the pending window."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "tooltip.base-ui.does-not-open-for-touch-pointer-hover",
|
|
59
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L103",
|
|
60
|
+
"upstreamTest": "<Tooltip.Root /> > uncontrolled open > does not open when a touch pointer hovers the trigger",
|
|
61
|
+
"apg": "extension",
|
|
62
|
+
"config": { "delay": 600, "pointerType": "touch" },
|
|
63
|
+
"steps": [
|
|
64
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
65
|
+
{ "event": "wait", "ms": 600 },
|
|
66
|
+
{ "expect": { "visible": [] } }
|
|
67
|
+
],
|
|
68
|
+
"notes": "Hover-intent is ignored for touch pointers."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": "tooltip.base-ui.closes-when-trigger-unhovered",
|
|
72
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L119",
|
|
73
|
+
"upstreamTest": "<Tooltip.Root /> > uncontrolled open > should close when the trigger is unhovered",
|
|
74
|
+
"apg": "pointer",
|
|
75
|
+
"config": { "delay": 600, "closeDelay": 0 },
|
|
76
|
+
"steps": [
|
|
77
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
78
|
+
{ "event": "wait", "ms": 600 },
|
|
79
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
80
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
81
|
+
{ "expect": { "visible": [] } }
|
|
82
|
+
],
|
|
83
|
+
"notes": "With no closeDelay the tooltip closes immediately on leave."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "tooltip.base-ui.opens-on-trigger-focus",
|
|
87
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L138",
|
|
88
|
+
"upstreamTest": "<Tooltip.Root /> > uncontrolled open > should open when the trigger is focused",
|
|
89
|
+
"apg": "focus",
|
|
90
|
+
"config": { "delay": 600 },
|
|
91
|
+
"steps": [
|
|
92
|
+
{ "event": "focus", "target": "trigger:0" },
|
|
93
|
+
{ "expect": { "visible": ["tooltip:0"], "focus": "trigger:0" } }
|
|
94
|
+
],
|
|
95
|
+
"notes": "Focus opens without waiting for the rest delay."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "tooltip.base-ui.closes-when-trigger-blurred",
|
|
99
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L154",
|
|
100
|
+
"upstreamTest": "<Tooltip.Root /> > uncontrolled open > should close when the trigger is blurred",
|
|
101
|
+
"apg": "focus",
|
|
102
|
+
"config": { "delay": 600 },
|
|
103
|
+
"steps": [
|
|
104
|
+
{ "event": "focus", "target": "trigger:0" },
|
|
105
|
+
{ "event": "wait", "ms": 600 },
|
|
106
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
107
|
+
{ "event": "blur", "target": "trigger:0" },
|
|
108
|
+
{ "event": "wait", "ms": 600 },
|
|
109
|
+
{ "expect": { "visible": [] } }
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "tooltip.base-ui.opens-after-rest-delay",
|
|
114
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L303",
|
|
115
|
+
"upstreamTest": "<Tooltip.Root /> > prop: delay > should open after rest delay",
|
|
116
|
+
"apg": "extension",
|
|
117
|
+
"config": { "delay": 100 },
|
|
118
|
+
"steps": [
|
|
119
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
120
|
+
{ "event": "wait", "ms": 50 },
|
|
121
|
+
{ "expect": { "visible": [] } },
|
|
122
|
+
{ "event": "wait", "ms": 50 },
|
|
123
|
+
{ "expect": { "visible": ["tooltip:0"] } }
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "tooltip.base-ui.closes-after-close-delay",
|
|
128
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L326",
|
|
129
|
+
"upstreamTest": "<Tooltip.Root /> > prop: closeDelay > should close after delay",
|
|
130
|
+
"apg": "extension",
|
|
131
|
+
"config": { "delay": 600, "closeDelay": 100 },
|
|
132
|
+
"steps": [
|
|
133
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
134
|
+
{ "event": "wait", "ms": 600 },
|
|
135
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
136
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
137
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
138
|
+
{ "event": "wait", "ms": 100 },
|
|
139
|
+
{ "expect": { "visible": [] } }
|
|
140
|
+
],
|
|
141
|
+
"notes": "The tooltip stays mounted during the closeDelay grace."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "tooltip.base-ui.trigger-delay-overrides-provider-delay",
|
|
145
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/provider/TooltipProvider.test.tsx#L79",
|
|
146
|
+
"upstreamTest": "<Tooltip.Provider /> > prop: delay > respects trigger delay prop over provider delay prop",
|
|
147
|
+
"apg": "extension",
|
|
148
|
+
"config": { "providerDelay": 10, "delay": 100 },
|
|
149
|
+
"steps": [
|
|
150
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
151
|
+
{ "event": "wait", "ms": 50 },
|
|
152
|
+
{ "expect": { "visible": [] } },
|
|
153
|
+
{ "event": "wait", "ms": 50 },
|
|
154
|
+
{ "expect": { "visible": ["tooltip:0"] } }
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "tooltip.base-ui.disabled-does-not-open-on-hover-or-focus",
|
|
159
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L840",
|
|
160
|
+
"upstreamTest": "<Tooltip.Root /> > prop: disabled > should not open when disabled",
|
|
161
|
+
"apg": "extension",
|
|
162
|
+
"config": { "disabled": true, "delay": 600 },
|
|
163
|
+
"steps": [
|
|
164
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
165
|
+
{ "event": "wait", "ms": 600 },
|
|
166
|
+
{ "expect": { "visible": [] } },
|
|
167
|
+
{ "event": "focus", "target": "trigger:0" },
|
|
168
|
+
{ "expect": { "visible": [] } }
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "tooltip.base-ui.disabled-marks-the-trigger",
|
|
173
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L904",
|
|
174
|
+
"upstreamTest": "<Tooltip.Root /> > prop: disabled > marks the trigger as disabled when the root is disabled",
|
|
175
|
+
"apg": "aria",
|
|
176
|
+
"config": { "disabled": true },
|
|
177
|
+
"steps": [
|
|
178
|
+
{
|
|
179
|
+
"expect": {
|
|
180
|
+
"attrs": { "trigger:0": { "data-trigger-disabled": "true" } }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "tooltip.base-ui.escape-closes-and-notifies",
|
|
187
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1088",
|
|
188
|
+
"upstreamTest": "<Tooltip.Root /> > dismissal > should close when Escape is pressed",
|
|
189
|
+
"apg": "keyboard",
|
|
190
|
+
"config": { "defaultOpen": true },
|
|
191
|
+
"steps": [
|
|
192
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
193
|
+
{ "event": "key", "key": "Escape", "target": "trigger:0" },
|
|
194
|
+
{ "expect": { "visible": [], "events": { "onOpenChange": [false] } } }
|
|
195
|
+
],
|
|
196
|
+
"notes": "Only the callback's boolean payload is restated; details.reason is a React-only API."
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "tooltip.base-ui.click-before-delay-cancels-open",
|
|
200
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1110",
|
|
201
|
+
"upstreamTest": "<Tooltip.Root /> > dismissal > should not open when the trigger was clicked before delay duration",
|
|
202
|
+
"apg": "extension",
|
|
203
|
+
"config": { "delay": 600 },
|
|
204
|
+
"steps": [
|
|
205
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
206
|
+
{ "event": "wait", "ms": 300 },
|
|
207
|
+
{ "event": "click", "target": "trigger:0" },
|
|
208
|
+
{ "event": "wait", "ms": 300 },
|
|
209
|
+
{ "expect": { "visible": [] } }
|
|
210
|
+
],
|
|
211
|
+
"notes": "Clicking the trigger during the rest delay cancels the pending open."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"id": "tooltip.base-ui.click-before-delay-with-close-on-click-false-opens",
|
|
215
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1150",
|
|
216
|
+
"upstreamTest": "<Tooltip.Root /> > dismissal > should open when the trigger was clicked before delay duration and closeOnClick is false",
|
|
217
|
+
"apg": "extension",
|
|
218
|
+
"config": { "delay": 600, "closeOnClick": false },
|
|
219
|
+
"steps": [
|
|
220
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
221
|
+
{ "event": "wait", "ms": 300 },
|
|
222
|
+
{ "event": "click", "target": "trigger:0" },
|
|
223
|
+
{ "event": "wait", "ms": 300 },
|
|
224
|
+
{ "expect": { "visible": ["tooltip:0"] } }
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"id": "tooltip.base-ui.click-after-open-closes",
|
|
229
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1170",
|
|
230
|
+
"upstreamTest": "<Tooltip.Root /> > dismissal > should close when the trigger is clicked after delay duration",
|
|
231
|
+
"apg": "extension",
|
|
232
|
+
"config": { "delay": 600 },
|
|
233
|
+
"steps": [
|
|
234
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
235
|
+
{ "event": "wait", "ms": 600 },
|
|
236
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
237
|
+
{ "event": "click", "target": "trigger:0" },
|
|
238
|
+
{ "expect": { "visible": [] } }
|
|
239
|
+
]
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"id": "tooltip.base-ui.reopens-on-hover-after-click-close",
|
|
243
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1210",
|
|
244
|
+
"upstreamTest": "<Tooltip.Root /> > dismissal > reopens on hover after the trigger is clicked closed",
|
|
245
|
+
"apg": "extension",
|
|
246
|
+
"config": { "delay": 100 },
|
|
247
|
+
"steps": [
|
|
248
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
249
|
+
{ "event": "wait", "ms": 100 },
|
|
250
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
251
|
+
{ "event": "click", "target": "trigger:0" },
|
|
252
|
+
{ "expect": { "visible": [] } },
|
|
253
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
254
|
+
{ "event": "wait", "ms": 100 },
|
|
255
|
+
{ "expect": { "visible": ["tooltip:0"] } }
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"id": "tooltip.base-ui.controlled-calls-on-open-change",
|
|
260
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L178",
|
|
261
|
+
"upstreamTest": "<Tooltip.Root /> > controlled open > should call onOpenChange when the open state changes",
|
|
262
|
+
"apg": "extension",
|
|
263
|
+
"config": { "controlled": true, "open": false, "delay": 600 },
|
|
264
|
+
"steps": [
|
|
265
|
+
{ "expect": { "visible": [] } },
|
|
266
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
267
|
+
{ "event": "wait", "ms": 600 },
|
|
268
|
+
{
|
|
269
|
+
"expect": {
|
|
270
|
+
"visible": ["tooltip:0"],
|
|
271
|
+
"events": { "onOpenChange": [true] }
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
275
|
+
{
|
|
276
|
+
"expect": {
|
|
277
|
+
"visible": [],
|
|
278
|
+
"events": { "onOpenChange": [true, false] }
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
],
|
|
282
|
+
"notes": "The upstream records the previous open value; the neutral payload is the next open value."
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"id": "tooltip.base-ui.default-open-uncontrolled-closes-on-unhover",
|
|
286
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L283",
|
|
287
|
+
"upstreamTest": "<Tooltip.Root /> > prop: defaultOpen > should remain uncontrolled",
|
|
288
|
+
"apg": "extension",
|
|
289
|
+
"config": { "defaultOpen": true },
|
|
290
|
+
"steps": [
|
|
291
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
292
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
293
|
+
{ "expect": { "visible": [] } }
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"id": "tooltip.base-ui.hoverable-popup-survives-trigger-to-popup-trip",
|
|
298
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1523",
|
|
299
|
+
"upstreamTest": "<Tooltip.Root /> > hoverable popup > survives the trip from the trigger to the popup, then closes after leaving it",
|
|
300
|
+
"apg": "extension",
|
|
301
|
+
"config": { "delay": 600, "closeDelay": 0, "hoverable": true },
|
|
302
|
+
"steps": [
|
|
303
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
304
|
+
{ "event": "wait", "ms": 600 },
|
|
305
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
306
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
307
|
+
{ "event": "hover", "target": "tooltip:0" },
|
|
308
|
+
{ "event": "wait", "ms": 100 },
|
|
309
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
310
|
+
{ "event": "unhover", "target": "tooltip:0" },
|
|
311
|
+
{ "expect": { "visible": [] } }
|
|
312
|
+
],
|
|
313
|
+
"notes": "WCAG 1.4.13 hoverable: moving the pointer onto the tooltip keeps it open; leaving it closes."
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"id": "tooltip.base-ui.hoverable-popup-disabled-closes-on-trip",
|
|
317
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1544",
|
|
318
|
+
"upstreamTest": "<Tooltip.Root /> > hoverable popup > closes on that same trip when `disableHoverablePopup` is set",
|
|
319
|
+
"apg": "extension",
|
|
320
|
+
"config": { "delay": 600, "closeDelay": 0, "hoverable": false },
|
|
321
|
+
"steps": [
|
|
322
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
323
|
+
{ "event": "wait", "ms": 600 },
|
|
324
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
325
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
326
|
+
{ "event": "hover", "target": "tooltip:0" },
|
|
327
|
+
{ "expect": { "visible": [] } }
|
|
328
|
+
]
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"id": "tooltip.base-ui.adjacent-tooltip-opens-instantly-while-warm",
|
|
332
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/provider/TooltipProvider.test.tsx#L226",
|
|
333
|
+
"upstreamTest": "<Tooltip.Provider /> > prop: timeout > opens an adjacent tooltip instantly while the group is active",
|
|
334
|
+
"apg": "extension",
|
|
335
|
+
"config": { "delay": 100, "timeout": 400 },
|
|
336
|
+
"steps": [
|
|
337
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
338
|
+
{ "event": "wait", "ms": 100 },
|
|
339
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
340
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
341
|
+
{ "event": "hover", "target": "trigger:1" },
|
|
342
|
+
{ "expect": { "visible": ["tooltip:1"] } }
|
|
343
|
+
],
|
|
344
|
+
"notes": "Global warm-up: while the group is warm, an adjacent tooltip opens without its delay and replaces the previous one."
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"id": "tooltip.base-ui.requires-full-delay-once-timeout-elapses",
|
|
348
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/provider/TooltipProvider.test.tsx#L289",
|
|
349
|
+
"upstreamTest": "<Tooltip.Provider /> > prop: timeout > requires the full delay again once the timeout elapses",
|
|
350
|
+
"apg": "extension",
|
|
351
|
+
"config": { "delay": 100, "timeout": 400 },
|
|
352
|
+
"steps": [
|
|
353
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
354
|
+
{ "event": "wait", "ms": 100 },
|
|
355
|
+
{ "expect": { "visible": ["tooltip:0"] } },
|
|
356
|
+
{ "event": "unhover", "target": "trigger:0" },
|
|
357
|
+
{ "event": "wait", "ms": 400 },
|
|
358
|
+
{ "event": "hover", "target": "trigger:1" },
|
|
359
|
+
{ "event": "wait", "ms": 50 },
|
|
360
|
+
{ "expect": { "visible": [] } },
|
|
361
|
+
{ "event": "wait", "ms": 50 },
|
|
362
|
+
{ "expect": { "visible": ["tooltip:1"] } }
|
|
363
|
+
]
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"id": "tooltip.base-ui.nested-trigger-suppresses-outer-tooltip",
|
|
367
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L1615",
|
|
368
|
+
"upstreamTest": "nested tooltips > should not open the outer tooltip when hovering over a nested tooltip trigger",
|
|
369
|
+
"apg": "extension",
|
|
370
|
+
"config": { "nested": true, "delay": 600 },
|
|
371
|
+
"steps": [
|
|
372
|
+
{ "event": "hover", "target": "trigger:1" },
|
|
373
|
+
{ "event": "wait", "ms": 600 },
|
|
374
|
+
{ "expect": { "visible": ["tooltip:1"] } }
|
|
375
|
+
],
|
|
376
|
+
"notes": "trigger:0 is the outer trigger, trigger:1 the nested one; only the inner tooltip opens."
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"id": "tooltip.base-ui.nested-disabled-trigger-allows-outer-tooltip",
|
|
380
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L2514",
|
|
381
|
+
"upstreamTest": "nested tooltips > should allow the parent tooltip to open when a nested trigger is disabled",
|
|
382
|
+
"apg": "extension",
|
|
383
|
+
"config": { "nested": true, "nestedDisabled": true, "delay": 600 },
|
|
384
|
+
"steps": [
|
|
385
|
+
{ "event": "hover", "target": "trigger:1" },
|
|
386
|
+
{ "event": "wait", "ms": 600 },
|
|
387
|
+
{ "expect": { "visible": ["tooltip:0"] } }
|
|
388
|
+
],
|
|
389
|
+
"notes": "A disabled nested trigger does not shadow its parent, so the outer tooltip opens."
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"id": "tooltip.base-ui.trigger-unmounted-during-open-delay-never-opens",
|
|
393
|
+
"upstream": "https://github.com/mui/base-ui/blob/19511bb171f3b360b006c94cf6d07e53cb446505/packages/react/src/tooltip/root/TooltipRoot.test.tsx#L58",
|
|
394
|
+
"upstreamTest": "<Tooltip.Root /> > trigger unmount during the open delay > does not open once the hovered trigger has unmounted",
|
|
395
|
+
"apg": "extension",
|
|
396
|
+
"config": { "delay": 600 },
|
|
397
|
+
"steps": [
|
|
398
|
+
{ "event": "hover", "target": "trigger:0" },
|
|
399
|
+
{ "event": "wait", "ms": 1 },
|
|
400
|
+
{
|
|
401
|
+
"event": "prop",
|
|
402
|
+
"target": "trigger:0",
|
|
403
|
+
"prop": "mounted",
|
|
404
|
+
"value": false
|
|
405
|
+
},
|
|
406
|
+
{ "event": "wait", "ms": 600 },
|
|
407
|
+
{ "expect": { "visible": [] } }
|
|
408
|
+
]
|
|
409
|
+
}
|
|
410
|
+
]
|
|
411
|
+
}
|