@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.
Files changed (260) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -2
  3. package/dist/apg/accordion.bridge.d.mts +35 -0
  4. package/dist/apg/accordion.bridge.mjs +326 -0
  5. package/dist/apg/accordion.model.json +8397 -0
  6. package/dist/apg/alert.bridge.d.mts +22 -0
  7. package/dist/apg/alert.bridge.mjs +86 -0
  8. package/dist/apg/alert.model.json +871 -0
  9. package/dist/apg/alertdialog.bridge.d.mts +21 -0
  10. package/dist/apg/alertdialog.bridge.mjs +221 -0
  11. package/dist/apg/alertdialog.model.json +5232 -0
  12. package/dist/apg/breadcrumb.bridge.d.mts +26 -0
  13. package/dist/apg/breadcrumb.bridge.mjs +120 -0
  14. package/dist/apg/breadcrumb.model.json +574 -0
  15. package/dist/apg/button.bridge.d.mts +35 -0
  16. package/dist/apg/button.bridge.mjs +208 -0
  17. package/dist/apg/button.model.json +5814 -0
  18. package/dist/apg/carousel.bridge.d.mts +44 -0
  19. package/dist/apg/carousel.bridge.mjs +262 -0
  20. package/dist/apg/carousel.model.json +8963 -0
  21. package/dist/apg/checkbox-group.bridge.d.mts +25 -0
  22. package/dist/apg/checkbox-group.bridge.mjs +276 -0
  23. package/dist/apg/checkbox-group.model.json +3863 -0
  24. package/dist/apg/checkbox.bridge.d.mts +34 -0
  25. package/dist/apg/checkbox.bridge.mjs +253 -0
  26. package/dist/apg/checkbox.model.json +3158 -0
  27. package/dist/apg/combobox-autocomplete.bridge.d.mts +14 -0
  28. package/dist/apg/combobox-autocomplete.bridge.mjs +326 -0
  29. package/dist/apg/combobox-autocomplete.model.json +11586 -0
  30. package/dist/apg/combobox-dialog.bridge.d.mts +17 -0
  31. package/dist/apg/combobox-dialog.bridge.mjs +250 -0
  32. package/dist/apg/combobox-dialog.model.json +8981 -0
  33. package/dist/apg/combobox-grid.bridge.d.mts +17 -0
  34. package/dist/apg/combobox-grid.bridge.mjs +227 -0
  35. package/dist/apg/combobox-grid.model.json +8554 -0
  36. package/dist/apg/combobox-select-only.bridge.d.mts +24 -0
  37. package/dist/apg/combobox-select-only.bridge.mjs +304 -0
  38. package/dist/apg/combobox-select-only.model.json +7846 -0
  39. package/dist/apg/combobox-tree.bridge.d.mts +17 -0
  40. package/dist/apg/combobox-tree.bridge.mjs +211 -0
  41. package/dist/apg/combobox-tree.model.json +9345 -0
  42. package/dist/apg/dialog-modal.bridge.d.mts +35 -0
  43. package/dist/apg/dialog-modal.bridge.mjs +186 -0
  44. package/dist/apg/dialog-modal.model.json +7580 -0
  45. package/dist/apg/disclosure.bridge.d.mts +25 -0
  46. package/dist/apg/disclosure.bridge.mjs +202 -0
  47. package/dist/apg/disclosure.model.json +4703 -0
  48. package/dist/apg/feed.bridge.d.mts +31 -0
  49. package/dist/apg/feed.bridge.mjs +246 -0
  50. package/dist/apg/feed.model.json +4523 -0
  51. package/dist/apg/grid-selection.bridge.d.mts +13 -0
  52. package/dist/apg/grid-selection.bridge.mjs +160 -0
  53. package/dist/apg/grid-selection.model.json +6974 -0
  54. package/dist/apg/grid-sort.bridge.d.mts +12 -0
  55. package/dist/apg/grid-sort.bridge.mjs +138 -0
  56. package/dist/apg/grid-sort.model.json +3799 -0
  57. package/dist/apg/grid.bridge.d.mts +54 -0
  58. package/dist/apg/grid.bridge.mjs +441 -0
  59. package/dist/apg/grid.model.json +3802 -0
  60. package/dist/apg/link.bridge.d.mts +24 -0
  61. package/dist/apg/link.bridge.mjs +126 -0
  62. package/dist/apg/link.model.json +694 -0
  63. package/dist/apg/listbox-multi.bridge.d.mts +10 -0
  64. package/dist/apg/listbox-multi.bridge.mjs +261 -0
  65. package/dist/apg/listbox-multi.model.json +10893 -0
  66. package/dist/apg/listbox-rearrangeable.bridge.d.mts +20 -0
  67. package/dist/apg/listbox-rearrangeable.bridge.mjs +237 -0
  68. package/dist/apg/listbox-rearrangeable.model.json +17592 -0
  69. package/dist/apg/listbox-shared.d.mts +58 -0
  70. package/dist/apg/listbox-shared.mjs +171 -0
  71. package/dist/apg/listbox-single.bridge.d.mts +10 -0
  72. package/dist/apg/listbox-single.bridge.mjs +196 -0
  73. package/dist/apg/listbox-single.model.json +8024 -0
  74. package/dist/apg/listbox-typeahead.bridge.d.mts +10 -0
  75. package/dist/apg/listbox-typeahead.bridge.mjs +153 -0
  76. package/dist/apg/listbox-typeahead.model.json +5615 -0
  77. package/dist/apg/menu-button.bridge.d.mts +29 -0
  78. package/dist/apg/menu-button.bridge.mjs +259 -0
  79. package/dist/apg/menu-button.model.json +5706 -0
  80. package/dist/apg/menu-checkable.bridge.d.mts +25 -0
  81. package/dist/apg/menu-checkable.bridge.mjs +226 -0
  82. package/dist/apg/menu-checkable.model.json +4277 -0
  83. package/dist/apg/menu-menubar.bridge.d.mts +27 -0
  84. package/dist/apg/menu-menubar.bridge.mjs +273 -0
  85. package/dist/apg/menu-menubar.model.json +9540 -0
  86. package/dist/apg/meter.bridge.d.mts +28 -0
  87. package/dist/apg/meter.bridge.mjs +159 -0
  88. package/dist/apg/meter.model.json +1185 -0
  89. package/dist/apg/player.bridge.d.mts +24 -0
  90. package/dist/apg/player.bridge.mjs +342 -0
  91. package/dist/apg/player.model.json +11013 -0
  92. package/dist/apg/radio.bridge.d.mts +35 -0
  93. package/dist/apg/radio.bridge.mjs +371 -0
  94. package/dist/apg/radio.model.json +5011 -0
  95. package/dist/apg/slider-multithumb.bridge.d.mts +34 -0
  96. package/dist/apg/slider-multithumb.bridge.mjs +365 -0
  97. package/dist/apg/slider-multithumb.model.json +5774 -0
  98. package/dist/apg/slider.bridge.d.mts +54 -0
  99. package/dist/apg/slider.bridge.mjs +359 -0
  100. package/dist/apg/slider.model.json +4881 -0
  101. package/dist/apg/spinbutton.bridge.d.mts +41 -0
  102. package/dist/apg/spinbutton.bridge.mjs +327 -0
  103. package/dist/apg/spinbutton.model.json +7571 -0
  104. package/dist/apg/switch.bridge.d.mts +30 -0
  105. package/dist/apg/switch.bridge.mjs +243 -0
  106. package/dist/apg/switch.model.json +3159 -0
  107. package/dist/apg/tabs.bridge.d.mts +41 -0
  108. package/dist/apg/tabs.bridge.mjs +294 -0
  109. package/dist/apg/tabs.model.json +7659 -0
  110. package/dist/apg/timeline.bridge.d.mts +36 -0
  111. package/dist/apg/timeline.bridge.mjs +265 -0
  112. package/dist/apg/timeline.model.json +6189 -0
  113. package/dist/apg/toolbar.bridge.d.mts +25 -0
  114. package/dist/apg/toolbar.bridge.mjs +307 -0
  115. package/dist/apg/toolbar.model.json +6616 -0
  116. package/dist/apg/tooltip.bridge.d.mts +36 -0
  117. package/dist/apg/tooltip.bridge.mjs +208 -0
  118. package/dist/apg/tooltip.model.json +8295 -0
  119. package/dist/apg/treegrid.bridge.d.mts +28 -0
  120. package/dist/apg/treegrid.bridge.mjs +311 -0
  121. package/dist/apg/treegrid.model.json +17358 -0
  122. package/dist/apg/treeview.bridge.d.mts +26 -0
  123. package/dist/apg/treeview.bridge.mjs +396 -0
  124. package/dist/apg/treeview.model.json +13745 -0
  125. package/dist/apg/windowsplitter.bridge.d.mts +36 -0
  126. package/dist/apg/windowsplitter.bridge.mjs +242 -0
  127. package/dist/apg/windowsplitter.model.json +6253 -0
  128. package/dist/canvas/camera.model.json +6568 -0
  129. package/dist/canvas/canvas.bridge.d.mts +190 -0
  130. package/dist/canvas/canvas.bridge.mjs +729 -0
  131. package/dist/canvas/pointer.model.json +17095 -0
  132. package/dist/scenario.d.mts +233 -0
  133. package/dist/scenario.mjs +313 -0
  134. package/package.json +57 -4
  135. package/scenarios/apg/README.md +221 -0
  136. package/scenarios/apg/accordion.base-ui.json +1005 -0
  137. package/scenarios/apg/accordion.react-aria.json +929 -0
  138. package/scenarios/apg/alert.base-ui.json +81 -0
  139. package/scenarios/apg/alert.react-aria.json +98 -0
  140. package/scenarios/apg/alertdialog.base-ui.json +331 -0
  141. package/scenarios/apg/alertdialog.react-aria.json +225 -0
  142. package/scenarios/apg/breadcrumb.react-aria.json +312 -0
  143. package/scenarios/apg/button.ariakit.json +136 -0
  144. package/scenarios/apg/button.base-ui.json +747 -0
  145. package/scenarios/apg/button.react-aria.json +443 -0
  146. package/scenarios/apg/carousel.apg.json +909 -0
  147. package/scenarios/apg/checkbox.ariakit.json +299 -0
  148. package/scenarios/apg/checkbox.base-ui.json +1126 -0
  149. package/scenarios/apg/checkbox.react-aria.json +518 -0
  150. package/scenarios/apg/combobox.ariakit.json +945 -0
  151. package/scenarios/apg/combobox.base-ui.json +2444 -0
  152. package/scenarios/apg/combobox.react-aria.json +845 -0
  153. package/scenarios/apg/dialog-modal.ariakit.json +1102 -0
  154. package/scenarios/apg/dialog-modal.base-ui.json +775 -0
  155. package/scenarios/apg/dialog-modal.react-aria.json +638 -0
  156. package/scenarios/apg/disclosure.apg.json +349 -0
  157. package/scenarios/apg/disclosure.ariakit.json +163 -0
  158. package/scenarios/apg/disclosure.base-ui.json +451 -0
  159. package/scenarios/apg/disclosure.react-aria.json +643 -0
  160. package/scenarios/apg/feed.apg.json +442 -0
  161. package/scenarios/apg/grid.ariakit.json +197 -0
  162. package/scenarios/apg/grid.base-ui.json +720 -0
  163. package/scenarios/apg/grid.react-aria.json +969 -0
  164. package/scenarios/apg/landmarks.ariakit.json +93 -0
  165. package/scenarios/apg/landmarks.react-aria.json +330 -0
  166. package/scenarios/apg/link.ariakit.json +83 -0
  167. package/scenarios/apg/link.base-ui.json +88 -0
  168. package/scenarios/apg/link.react-aria.json +186 -0
  169. package/scenarios/apg/listbox.ariakit.json +78 -0
  170. package/scenarios/apg/listbox.base-ui.json +163 -0
  171. package/scenarios/apg/listbox.react-aria.json +1118 -0
  172. package/scenarios/apg/menu-button.ariakit.json +924 -0
  173. package/scenarios/apg/menu-button.base-ui.json +1155 -0
  174. package/scenarios/apg/menu-button.react-aria.json +1080 -0
  175. package/scenarios/apg/menubar.ariakit.json +758 -0
  176. package/scenarios/apg/menubar.base-ui.json +673 -0
  177. package/scenarios/apg/meter.base-ui.json +243 -0
  178. package/scenarios/apg/meter.react-aria.json +201 -0
  179. package/scenarios/apg/radio.ariakit.json +459 -0
  180. package/scenarios/apg/radio.base-ui.json +581 -0
  181. package/scenarios/apg/radio.react-aria.json +576 -0
  182. package/scenarios/apg/slider-multithumb.base-ui.json +316 -0
  183. package/scenarios/apg/slider-multithumb.react-aria.json +363 -0
  184. package/scenarios/apg/slider.base-ui.json +544 -0
  185. package/scenarios/apg/slider.react-aria.json +456 -0
  186. package/scenarios/apg/spinbutton.base-ui.json +1688 -0
  187. package/scenarios/apg/spinbutton.react-aria.json +426 -0
  188. package/scenarios/apg/switch.base-ui.json +456 -0
  189. package/scenarios/apg/switch.react-aria.json +303 -0
  190. package/scenarios/apg/table.ariakit.json +65 -0
  191. package/scenarios/apg/table.react-aria.json +221 -0
  192. package/scenarios/apg/tabs.ariakit.json +329 -0
  193. package/scenarios/apg/tabs.base-ui.json +875 -0
  194. package/scenarios/apg/tabs.react-aria.json +644 -0
  195. package/scenarios/apg/toolbar.ariakit.json +595 -0
  196. package/scenarios/apg/toolbar.base-ui.json +1189 -0
  197. package/scenarios/apg/toolbar.react-aria.json +383 -0
  198. package/scenarios/apg/tooltip.ariakit.json +441 -0
  199. package/scenarios/apg/tooltip.base-ui.json +411 -0
  200. package/scenarios/apg/tooltip.react-aria.json +454 -0
  201. package/scenarios/apg/treegrid.apg.json +2558 -0
  202. package/scenarios/apg/treegrid.react-aria.json +5094 -0
  203. package/scenarios/apg/treeview.apg.json +928 -0
  204. package/scenarios/apg/windowsplitter.apg.json +557 -0
  205. package/scenarios/canvas/README.md +69 -0
  206. package/scenarios/canvas/camera.contract.json +237 -0
  207. package/scenarios/canvas/camera.excalidraw.json +57 -0
  208. package/scenarios/canvas/marquee.excalidraw.json +122 -0
  209. package/scenarios/canvas/pan.excalidraw.json +46 -0
  210. package/scenarios/canvas/pointer.contract.json +528 -0
  211. package/scenarios/parts.json +291 -0
  212. package/shared/aria.qnt +186 -0
  213. package/shared/details-group.qnt +50 -0
  214. package/shared/focusgroup.qnt +152 -0
  215. package/shared/invokers.qnt +81 -0
  216. package/shared/popover.qnt +71 -0
  217. package/specs/apg/STATIC.md +103 -0
  218. package/specs/apg/accordion.qnt +578 -0
  219. package/specs/apg/alert.qnt +131 -0
  220. package/specs/apg/alertdialog.qnt +455 -0
  221. package/specs/apg/breadcrumb.qnt +88 -0
  222. package/specs/apg/button.qnt +445 -0
  223. package/specs/apg/carousel.qnt +732 -0
  224. package/specs/apg/checkbox-group.qnt +388 -0
  225. package/specs/apg/checkbox.qnt +394 -0
  226. package/specs/apg/combobox-autocomplete.qnt +764 -0
  227. package/specs/apg/combobox-dialog.qnt +627 -0
  228. package/specs/apg/combobox-grid.qnt +632 -0
  229. package/specs/apg/combobox-select-only.qnt +626 -0
  230. package/specs/apg/combobox-tree.qnt +633 -0
  231. package/specs/apg/dialog-modal.qnt +499 -0
  232. package/specs/apg/disclosure.qnt +309 -0
  233. package/specs/apg/feed.qnt +485 -0
  234. package/specs/apg/grid-selection.qnt +512 -0
  235. package/specs/apg/grid-sort.qnt +330 -0
  236. package/specs/apg/grid.qnt +360 -0
  237. package/specs/apg/link.qnt +119 -0
  238. package/specs/apg/listbox-multi.qnt +799 -0
  239. package/specs/apg/listbox-rearrangeable.qnt +801 -0
  240. package/specs/apg/listbox-single.qnt +511 -0
  241. package/specs/apg/listbox-typeahead.qnt +396 -0
  242. package/specs/apg/menu-button.qnt +363 -0
  243. package/specs/apg/menu-checkable.qnt +304 -0
  244. package/specs/apg/menu-menubar.qnt +531 -0
  245. package/specs/apg/meter.qnt +129 -0
  246. package/specs/apg/player.qnt +1081 -0
  247. package/specs/apg/radio.qnt +394 -0
  248. package/specs/apg/slider-multithumb.qnt +441 -0
  249. package/specs/apg/slider.qnt +396 -0
  250. package/specs/apg/spinbutton.qnt +494 -0
  251. package/specs/apg/switch.qnt +389 -0
  252. package/specs/apg/tabs.qnt +412 -0
  253. package/specs/apg/timeline.qnt +612 -0
  254. package/specs/apg/toolbar.qnt +364 -0
  255. package/specs/apg/tooltip.qnt +553 -0
  256. package/specs/apg/treegrid.qnt +983 -0
  257. package/specs/apg/treeview.qnt +1004 -0
  258. package/specs/apg/windowsplitter.qnt +487 -0
  259. package/specs/canvas/camera.qnt +407 -0
  260. package/specs/canvas/pointer.qnt +841 -0
@@ -0,0 +1,36 @@
1
+ import { ActionStep, Probe, ScenarioConfig, SpecBridge } from "../scenario.mjs";
2
+ //#region src/apg/windowsplitter.bridge.d.ts
3
+ export type SplitterOrientation = "vertical" | "horizontal";
4
+ /**
5
+ * Scenario `config` -> what both targets are mounted with. The spec hard-codes
6
+ * MIN=0, MAX=6, STEP=2, so any other range/step is not modelled; `value` must be
7
+ * reachable from the spec's INITIAL=4 by whole steps. `prev` is remembered by the
8
+ * spec itself at the moment of collapse, never configured.
9
+ *
10
+ * `controlled` puts `value` in a host: the host answers every request
11
+ * (`accepts`, the default) or ignores them all (`accepts: false`, a pinned value).
12
+ */
13
+ export interface WindowsplitterConfig {
14
+ readonly orientation: SplitterOrientation;
15
+ readonly fixed: boolean;
16
+ readonly value: number;
17
+ readonly collapsed: boolean;
18
+ readonly labelledby: string | null;
19
+ readonly controlled: boolean;
20
+ readonly accepts: boolean;
21
+ }
22
+ export declare const windowsplitterConfig: (config: ScenarioConfig) => WindowsplitterConfig;
23
+ /**
24
+ * Window splitter vocabulary <-> `specs/apg/windowsplitter.qnt`. Parts:
25
+ * `separator` (spec `splitter`) and the `primary` / `secondary` panes the F6
26
+ * cycle focuses. Keys are accepted on any of the three (the spec ignores them
27
+ * unless the splitter has focus); anything else throws `Unsupported`.
28
+ *
29
+ * `controlled` puts `value` in a host; `setValue` / `hostToggle` are the host
30
+ * writing it (inert while uncontrolled).
31
+ */
32
+ export declare const windowsplitterBridge: SpecBridge;
33
+ /** The user-level steps a differential walk draws from. */
34
+ export declare const windowsplitterSteps: ReadonlyArray<ActionStep>;
35
+ export declare const windowsplitterProbe: Probe;
36
+ //#endregion
@@ -0,0 +1,242 @@
1
+ import { Unsupported } from "../scenario.mjs";
2
+ //#region src/apg/windowsplitter.bridge.ts
3
+ const specEvent = (tag, params = {}) => ({
4
+ _tag: tag,
5
+ ...params
6
+ });
7
+ const num = (value) => value === void 0 ? 0 : Number(value);
8
+ const MIN = 0;
9
+ const MAX = 6;
10
+ const STEP = 2;
11
+ const INITIAL = 4;
12
+ const windowsplitterConfig = (config) => {
13
+ let orientation = "vertical";
14
+ let fixed = false;
15
+ let value = INITIAL;
16
+ let collapsed = false;
17
+ let labelledby = null;
18
+ let controlled = false;
19
+ let accepts = true;
20
+ for (const [key, raw] of Object.entries(config)) if (key === "orientation" && (raw === "vertical" || raw === "horizontal")) orientation = raw;
21
+ else if (key === "fixed" && typeof raw === "boolean") fixed = raw;
22
+ else if (key === "value" && typeof raw === "number") value = raw;
23
+ else if (key === "collapsed" && typeof raw === "boolean") collapsed = raw;
24
+ else if (key === "controlled" && typeof raw === "boolean") controlled ||= raw;
25
+ else if (key === "accepts" && typeof raw === "boolean") accepts = raw;
26
+ else if (key === "labelledby" && (raw === null || typeof raw === "string")) labelledby = raw;
27
+ else if (key === "min" && raw === MIN) continue;
28
+ else if (key === "max" && raw === MAX) continue;
29
+ else if (key === "step" && raw === STEP) continue;
30
+ else if (key === "prev" && typeof raw === "number") continue;
31
+ else throw new Unsupported(`config ${key}=${JSON.stringify(raw)}`);
32
+ if (value < MIN || value > MAX || value % STEP !== 0) throw new Unsupported(`value ${value}`);
33
+ return {
34
+ orientation,
35
+ fixed,
36
+ value,
37
+ collapsed,
38
+ labelledby,
39
+ controlled,
40
+ accepts: controlled && accepts
41
+ };
42
+ };
43
+ const isSeparator = (target) => {
44
+ const part = (target ?? "separator").replace(/:0$/, "");
45
+ if (part !== "separator") throw new Unsupported(`part ${part}`);
46
+ };
47
+ const KEY_EVENTS = {
48
+ ArrowLeft: "left",
49
+ ArrowRight: "right",
50
+ ArrowUp: "up",
51
+ ArrowDown: "down",
52
+ Home: "home",
53
+ End: "end",
54
+ Enter: "enter",
55
+ F6: "f6"
56
+ };
57
+ const isKeyEvent = (key) => key in KEY_EVENTS;
58
+ const valueOf = (value) => {
59
+ if (typeof value !== "number") throw new Unsupported(`value ${JSON.stringify(value)}`);
60
+ return BigInt(value);
61
+ };
62
+ /**
63
+ * Window splitter vocabulary <-> `specs/apg/windowsplitter.qnt`. Parts:
64
+ * `separator` (spec `splitter`) and the `primary` / `secondary` panes the F6
65
+ * cycle focuses. Keys are accepted on any of the three (the spec ignores them
66
+ * unless the splitter has focus); anything else throws `Unsupported`.
67
+ *
68
+ * `controlled` puts `value` in a host; `setValue` / `hostToggle` are the host
69
+ * writing it (inert while uncontrolled).
70
+ */
71
+ const windowsplitterBridge = {
72
+ setup: (config) => {
73
+ const c = windowsplitterConfig(config);
74
+ const events = [];
75
+ if (c.orientation === "horizontal") events.push(specEvent("orientHorizontal"));
76
+ if (c.controlled) {
77
+ events.push(specEvent("control"));
78
+ if (c.accepts) events.push(specEvent("acceptRequests"));
79
+ events.push(specEvent("setValue", { v: BigInt(c.value) }));
80
+ } else if (c.value !== INITIAL) {
81
+ events.push(specEvent("focusSplitter"));
82
+ const key = c.value < INITIAL ? "left" : "right";
83
+ for (let i = 0; i < Math.abs(c.value - INITIAL) / STEP; i += 1) events.push(specEvent(key));
84
+ }
85
+ if (c.fixed) events.push(specEvent("makeFixed"));
86
+ return events;
87
+ },
88
+ event: (step) => {
89
+ switch (step.event) {
90
+ case "focus":
91
+ isSeparator(step.target);
92
+ return [specEvent("focusSplitter")];
93
+ case "blur": return [specEvent("blur")];
94
+ case "key": {
95
+ const key = step.key ?? "";
96
+ if (!isKeyEvent(key)) throw new Unsupported(`key ${key}`);
97
+ return [specEvent(KEY_EVENTS[key])];
98
+ }
99
+ case "hover":
100
+ case "unhover": return [];
101
+ case "prop": switch (step.prop) {
102
+ case "orientation":
103
+ if (step.value === "horizontal") return [specEvent("orientHorizontal")];
104
+ if (step.value === "vertical") return [specEvent("orientVertical")];
105
+ throw new Unsupported(`orientation ${JSON.stringify(step.value)}`);
106
+ case "fixed": return [specEvent(step.value === false ? "makeResizable" : "makeFixed")];
107
+ case "makeFixed": return [specEvent("makeFixed")];
108
+ case "makeResizable": return [specEvent("makeResizable")];
109
+ case "cycleFocus": return [specEvent("f6")];
110
+ case "setValue": return [specEvent("setValue", { v: valueOf(step.value) })];
111
+ case "hostToggle": return [specEvent("hostToggle")];
112
+ default: throw new Unsupported(`prop ${step.prop ?? ""}`);
113
+ }
114
+ default: throw new Unsupported(`event ${step.event}`);
115
+ }
116
+ },
117
+ value: (state) => num(state["value"]),
118
+ focus: (state) => {
119
+ switch (state["focus"]) {
120
+ case "splitter": return "separator";
121
+ case "primary": return "primary";
122
+ case "secondary": return "secondary";
123
+ default: return null;
124
+ }
125
+ },
126
+ attr: (state, target, name) => {
127
+ isSeparator(target);
128
+ switch (name) {
129
+ case "role": return "separator";
130
+ case "aria-orientation": return state["orientation"] === "horizontal" ? "horizontal" : "vertical";
131
+ case "aria-valuenow": return String(state["ariaNow"]);
132
+ case "aria-valuemin": return String(MIN);
133
+ case "aria-valuemax": return String(MAX);
134
+ case "tabindex": return "0";
135
+ default: throw new Unsupported(`attribute ${name} on ${target}`);
136
+ }
137
+ },
138
+ visible: () => [],
139
+ events: (before, after) => before["requests"] === after["requests"] ? [] : [["onValueChange", num(after["requested"])]]
140
+ };
141
+ /** The user-level steps a differential walk draws from. */
142
+ const windowsplitterSteps = [
143
+ {
144
+ event: "focus",
145
+ target: "separator"
146
+ },
147
+ {
148
+ event: "blur",
149
+ target: "separator"
150
+ },
151
+ {
152
+ event: "key",
153
+ key: "ArrowLeft",
154
+ target: "separator"
155
+ },
156
+ {
157
+ event: "key",
158
+ key: "ArrowRight",
159
+ target: "separator"
160
+ },
161
+ {
162
+ event: "key",
163
+ key: "ArrowUp",
164
+ target: "separator"
165
+ },
166
+ {
167
+ event: "key",
168
+ key: "ArrowDown",
169
+ target: "separator"
170
+ },
171
+ {
172
+ event: "key",
173
+ key: "Home",
174
+ target: "separator"
175
+ },
176
+ {
177
+ event: "key",
178
+ key: "End",
179
+ target: "separator"
180
+ },
181
+ {
182
+ event: "key",
183
+ key: "Enter",
184
+ target: "separator"
185
+ },
186
+ {
187
+ event: "key",
188
+ key: "F6",
189
+ target: "separator"
190
+ },
191
+ {
192
+ event: "prop",
193
+ prop: "cycleFocus"
194
+ },
195
+ {
196
+ event: "prop",
197
+ prop: "orientation",
198
+ value: "horizontal"
199
+ },
200
+ {
201
+ event: "prop",
202
+ prop: "orientation",
203
+ value: "vertical"
204
+ },
205
+ {
206
+ event: "prop",
207
+ prop: "fixed",
208
+ value: true
209
+ },
210
+ {
211
+ event: "prop",
212
+ prop: "fixed",
213
+ value: false
214
+ },
215
+ {
216
+ event: "prop",
217
+ prop: "setValue",
218
+ value: 6
219
+ },
220
+ {
221
+ event: "prop",
222
+ prop: "setValue",
223
+ value: 0
224
+ },
225
+ {
226
+ event: "prop",
227
+ prop: "hostToggle"
228
+ }
229
+ ];
230
+ const windowsplitterProbe = {
231
+ attrs: [
232
+ ["separator", "role"],
233
+ ["separator", "aria-orientation"],
234
+ ["separator", "aria-valuenow"],
235
+ ["separator", "aria-valuemin"],
236
+ ["separator", "aria-valuemax"],
237
+ ["separator", "tabindex"]
238
+ ],
239
+ events: ["onValueChange"]
240
+ };
241
+ //#endregion
242
+ export { windowsplitterBridge, windowsplitterConfig, windowsplitterProbe, windowsplitterSteps };