tosijs-3d 0.12.2 → 0.12.4

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 (320) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/changelog/v0.12.3.md +47 -0
  3. package/changelog/v0.12.4.md +48 -0
  4. package/dist/agent-driver.d.ts +75 -0
  5. package/dist/agent-driver.d.ts.map +1 -0
  6. package/dist/agent-driver.js +163 -0
  7. package/dist/agent-driver.js.map +1 -0
  8. package/dist/angle-field.d.ts.map +1 -1
  9. package/dist/angle-field.js +24 -0
  10. package/dist/angle-field.js.map +1 -1
  11. package/dist/aria-mirror.d.ts +36 -0
  12. package/dist/aria-mirror.d.ts.map +1 -0
  13. package/dist/aria-mirror.js +526 -0
  14. package/dist/aria-mirror.js.map +1 -0
  15. package/dist/asset-url.d.ts +1 -1
  16. package/dist/asset-url.js +1 -1
  17. package/dist/b3d-agent.d.ts +118 -0
  18. package/dist/b3d-agent.d.ts.map +1 -0
  19. package/dist/b3d-agent.js +774 -0
  20. package/dist/b3d-agent.js.map +1 -0
  21. package/dist/b3d-aircraft.d.ts +1 -0
  22. package/dist/b3d-aircraft.d.ts.map +1 -1
  23. package/dist/b3d-aircraft.js +2 -1
  24. package/dist/b3d-aircraft.js.map +1 -1
  25. package/dist/b3d-biped.d.ts +21 -22
  26. package/dist/b3d-biped.d.ts.map +1 -1
  27. package/dist/b3d-biped.js +108 -6
  28. package/dist/b3d-biped.js.map +1 -1
  29. package/dist/b3d-car.d.ts +1 -0
  30. package/dist/b3d-car.d.ts.map +1 -1
  31. package/dist/b3d-car.js +3 -2
  32. package/dist/b3d-car.js.map +1 -1
  33. package/dist/b3d-cloud-deck.d.ts.map +1 -1
  34. package/dist/b3d-cloud-deck.js +4 -2
  35. package/dist/b3d-cloud-deck.js.map +1 -1
  36. package/dist/b3d-controllable.d.ts +15 -1
  37. package/dist/b3d-controllable.d.ts.map +1 -1
  38. package/dist/b3d-controllable.js +40 -3
  39. package/dist/b3d-controllable.js.map +1 -1
  40. package/dist/b3d-input-focus.d.ts +5 -0
  41. package/dist/b3d-input-focus.d.ts.map +1 -1
  42. package/dist/b3d-input-focus.js +13 -0
  43. package/dist/b3d-input-focus.js.map +1 -1
  44. package/dist/b3d-launcher.d.ts +14 -0
  45. package/dist/b3d-launcher.d.ts.map +1 -1
  46. package/dist/b3d-launcher.js +174 -33
  47. package/dist/b3d-launcher.js.map +1 -1
  48. package/dist/b3d-library.d.ts.map +1 -1
  49. package/dist/b3d-library.js +5 -3
  50. package/dist/b3d-library.js.map +1 -1
  51. package/dist/b3d-manipulator.d.ts +2 -0
  52. package/dist/b3d-manipulator.d.ts.map +1 -1
  53. package/dist/b3d-manipulator.js +66 -11
  54. package/dist/b3d-manipulator.js.map +1 -1
  55. package/dist/b3d-panel.d.ts.map +1 -1
  56. package/dist/b3d-panel.js +6 -0
  57. package/dist/b3d-panel.js.map +1 -1
  58. package/dist/b3d-tank.d.ts +1 -0
  59. package/dist/b3d-tank.d.ts.map +1 -1
  60. package/dist/b3d-tank.js +2 -1
  61. package/dist/b3d-tank.js.map +1 -1
  62. package/dist/bar-menu.d.ts +15 -0
  63. package/dist/bar-menu.d.ts.map +1 -1
  64. package/dist/bar-menu.js +22 -12
  65. package/dist/bar-menu.js.map +1 -1
  66. package/dist/body-export.d.ts +41 -0
  67. package/dist/body-export.d.ts.map +1 -0
  68. package/dist/body-export.js +149 -0
  69. package/dist/body-export.js.map +1 -0
  70. package/dist/bone-heat.d.ts +1 -0
  71. package/dist/bone-heat.d.ts.map +1 -1
  72. package/dist/bone-heat.js +205 -3
  73. package/dist/bone-heat.js.map +1 -1
  74. package/dist/character-builder.d.ts.map +1 -1
  75. package/dist/character-builder.js +814 -215
  76. package/dist/character-builder.js.map +1 -1
  77. package/dist/character-core.d.ts.map +1 -1
  78. package/dist/character-core.js +5 -0
  79. package/dist/character-core.js.map +1 -1
  80. package/dist/character-file.d.ts +4 -0
  81. package/dist/character-file.d.ts.map +1 -1
  82. package/dist/character-file.js +28 -4
  83. package/dist/character-file.js.map +1 -1
  84. package/dist/character-settings.d.ts +1 -1
  85. package/dist/character-settings.d.ts.map +1 -1
  86. package/dist/character-settings.js +18 -1
  87. package/dist/character-settings.js.map +1 -1
  88. package/dist/character-store.d.ts.map +1 -1
  89. package/dist/character-store.js +25 -2
  90. package/dist/character-store.js.map +1 -1
  91. package/dist/character.d.ts +14 -0
  92. package/dist/character.d.ts.map +1 -1
  93. package/dist/character.js +180 -27
  94. package/dist/character.js.map +1 -1
  95. package/dist/city-drive.d.ts.map +1 -1
  96. package/dist/city-drive.js +22 -3
  97. package/dist/city-drive.js.map +1 -1
  98. package/dist/cloth-bake.d.ts.map +1 -1
  99. package/dist/cloth-bake.js.map +1 -1
  100. package/dist/cloth-drape.d.ts +79 -0
  101. package/dist/cloth-drape.d.ts.map +1 -0
  102. package/dist/cloth-drape.js +715 -0
  103. package/dist/cloth-drape.js.map +1 -0
  104. package/dist/cloth-shading.d.ts.map +1 -1
  105. package/dist/cloth-shading.js +46 -11
  106. package/dist/cloth-shading.js.map +1 -1
  107. package/dist/color-field.d.ts +5 -0
  108. package/dist/color-field.d.ts.map +1 -1
  109. package/dist/color-field.js +38 -11
  110. package/dist/color-field.js.map +1 -1
  111. package/dist/color-picker.d.ts +6 -0
  112. package/dist/color-picker.d.ts.map +1 -1
  113. package/dist/color-picker.js +47 -2
  114. package/dist/color-picker.js.map +1 -1
  115. package/dist/curve-field.d.ts.map +1 -1
  116. package/dist/curve-field.js +28 -6
  117. package/dist/curve-field.js.map +1 -1
  118. package/dist/curve-program.d.ts.map +1 -1
  119. package/dist/curve-program.js +12 -0
  120. package/dist/curve-program.js.map +1 -1
  121. package/dist/extremes-sweep.d.ts.map +1 -1
  122. package/dist/extremes-sweep.js +4 -2
  123. package/dist/extremes-sweep.js.map +1 -1
  124. package/dist/fabric-textures.d.ts +19 -0
  125. package/dist/fabric-textures.d.ts.map +1 -0
  126. package/dist/fabric-textures.js +133 -0
  127. package/dist/fabric-textures.js.map +1 -0
  128. package/dist/footprint-field.d.ts.map +1 -1
  129. package/dist/footprint-field.js +20 -0
  130. package/dist/footprint-field.js.map +1 -1
  131. package/dist/frame-panel.d.ts.map +1 -1
  132. package/dist/frame-panel.js +25 -12
  133. package/dist/frame-panel.js.map +1 -1
  134. package/dist/game-controller.d.ts +3 -0
  135. package/dist/game-controller.d.ts.map +1 -1
  136. package/dist/game-controller.js +19 -0
  137. package/dist/game-controller.js.map +1 -1
  138. package/dist/garment-cut.d.ts +17 -0
  139. package/dist/garment-cut.d.ts.map +1 -1
  140. package/dist/garment-cut.js +268 -1
  141. package/dist/garment-cut.js.map +1 -1
  142. package/dist/glass-gamepad.d.ts +4 -0
  143. package/dist/glass-gamepad.d.ts.map +1 -1
  144. package/dist/glass-gamepad.js +74 -0
  145. package/dist/glass-gamepad.js.map +1 -1
  146. package/dist/glb-rig.d.ts +48 -0
  147. package/dist/glb-rig.d.ts.map +1 -0
  148. package/dist/glb-rig.js +412 -0
  149. package/dist/glb-rig.js.map +1 -0
  150. package/dist/hair-place.d.ts.map +1 -1
  151. package/dist/hair-place.js.map +1 -1
  152. package/dist/hold-grip.d.ts +24 -0
  153. package/dist/hold-grip.d.ts.map +1 -0
  154. package/dist/hold-grip.js +101 -0
  155. package/dist/hold-grip.js.map +1 -0
  156. package/dist/human-rig.d.ts +50 -3
  157. package/dist/human-rig.d.ts.map +1 -1
  158. package/dist/human-rig.js +196 -3
  159. package/dist/human-rig.js.map +1 -1
  160. package/dist/icon-data.d.ts +15 -0
  161. package/dist/icon-data.d.ts.map +1 -1
  162. package/dist/icon-data.js +19 -4
  163. package/dist/icon-data.js.map +1 -1
  164. package/dist/icon-grid.d.ts.map +1 -1
  165. package/dist/icon-grid.js +13 -0
  166. package/dist/icon-grid.js.map +1 -1
  167. package/dist/index.d.ts +29 -7
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +21 -4
  170. package/dist/index.js.map +1 -1
  171. package/dist/inspect-view.d.ts +21 -0
  172. package/dist/inspect-view.d.ts.map +1 -1
  173. package/dist/inspect-view.js +22 -1
  174. package/dist/inspect-view.js.map +1 -1
  175. package/dist/keyboard.d.ts +11 -0
  176. package/dist/keyboard.d.ts.map +1 -1
  177. package/dist/keyboard.js +27 -1
  178. package/dist/keyboard.js.map +1 -1
  179. package/dist/land-and-sky.js +1 -0
  180. package/dist/land-and-sky.js.map +1 -1
  181. package/dist/light-editor.d.ts.map +1 -1
  182. package/dist/light-editor.js +12 -0
  183. package/dist/light-editor.js.map +1 -1
  184. package/dist/light-pool.d.ts +7 -0
  185. package/dist/light-pool.d.ts.map +1 -1
  186. package/dist/light-pool.js +11 -0
  187. package/dist/light-pool.js.map +1 -1
  188. package/dist/manipulator-view.d.ts +1 -1
  189. package/dist/manipulator-view.d.ts.map +1 -1
  190. package/dist/manipulator-view.js +7 -8
  191. package/dist/manipulator-view.js.map +1 -1
  192. package/dist/manipulator.d.ts +3 -1
  193. package/dist/manipulator.d.ts.map +1 -1
  194. package/dist/manipulator.js +40 -10
  195. package/dist/manipulator.js.map +1 -1
  196. package/dist/material-apply.d.ts +18 -0
  197. package/dist/material-apply.d.ts.map +1 -1
  198. package/dist/material-apply.js +53 -10
  199. package/dist/material-apply.js.map +1 -1
  200. package/dist/material-picker.d.ts +6 -0
  201. package/dist/material-picker.d.ts.map +1 -1
  202. package/dist/material-picker.js +263 -20
  203. package/dist/material-picker.js.map +1 -1
  204. package/dist/material-pictures.d.ts +13 -0
  205. package/dist/material-pictures.d.ts.map +1 -0
  206. package/dist/material-pictures.js +93 -0
  207. package/dist/material-pictures.js.map +1 -0
  208. package/dist/material-preview.d.ts +2 -2
  209. package/dist/material-preview.d.ts.map +1 -1
  210. package/dist/material-preview.js +72 -28
  211. package/dist/material-preview.js.map +1 -1
  212. package/dist/material-recipe.d.ts +10 -0
  213. package/dist/material-recipe.d.ts.map +1 -1
  214. package/dist/material-recipe.js +75 -7
  215. package/dist/material-recipe.js.map +1 -1
  216. package/dist/outline-field.d.ts +21 -0
  217. package/dist/outline-field.d.ts.map +1 -1
  218. package/dist/outline-field.js +74 -5
  219. package/dist/outline-field.js.map +1 -1
  220. package/dist/picker.d.ts.map +1 -1
  221. package/dist/picker.js +14 -0
  222. package/dist/picker.js.map +1 -1
  223. package/dist/playback-field.d.ts +40 -0
  224. package/dist/playback-field.d.ts.map +1 -0
  225. package/dist/playback-field.js +315 -0
  226. package/dist/playback-field.js.map +1 -0
  227. package/dist/playground.d.ts.map +1 -1
  228. package/dist/playground.js +117 -64
  229. package/dist/playground.js.map +1 -1
  230. package/dist/remesh.d.ts +45 -0
  231. package/dist/remesh.d.ts.map +1 -0
  232. package/dist/remesh.js +570 -0
  233. package/dist/remesh.js.map +1 -0
  234. package/dist/retarget.d.ts +5 -0
  235. package/dist/retarget.d.ts.map +1 -1
  236. package/dist/retarget.js +18 -11
  237. package/dist/retarget.js.map +1 -1
  238. package/dist/rig-build.d.ts +5 -0
  239. package/dist/rig-build.d.ts.map +1 -1
  240. package/dist/rig-build.js +5 -1
  241. package/dist/rig-build.js.map +1 -1
  242. package/dist/rig-fit.d.ts +10 -0
  243. package/dist/rig-fit.d.ts.map +1 -1
  244. package/dist/rig-fit.js +187 -8
  245. package/dist/rig-fit.js.map +1 -1
  246. package/dist/rig-recipe.d.ts +7 -1
  247. package/dist/rig-recipe.d.ts.map +1 -1
  248. package/dist/rig-recipe.js +7 -1
  249. package/dist/rig-recipe.js.map +1 -1
  250. package/dist/rig-tool.d.ts +14 -1
  251. package/dist/rig-tool.d.ts.map +1 -1
  252. package/dist/rig-tool.js +664 -111
  253. package/dist/rig-tool.js.map +1 -1
  254. package/dist/rigged-body-glb.d.ts +34 -0
  255. package/dist/rigged-body-glb.d.ts.map +1 -0
  256. package/dist/rigged-body-glb.js +872 -0
  257. package/dist/rigged-body-glb.js.map +1 -0
  258. package/dist/rigged-body.d.ts +5 -1
  259. package/dist/rigged-body.d.ts.map +1 -1
  260. package/dist/rigged-body.js +36 -3
  261. package/dist/rigged-body.js.map +1 -1
  262. package/dist/scene-description.d.ts +36 -0
  263. package/dist/scene-description.d.ts.map +1 -0
  264. package/dist/scene-description.js +131 -0
  265. package/dist/scene-description.js.map +1 -0
  266. package/dist/scene-schemas.d.ts.map +1 -1
  267. package/dist/scene-schemas.js +2 -0
  268. package/dist/scene-schemas.js.map +1 -1
  269. package/dist/skinned-glb.d.ts +8 -0
  270. package/dist/skinned-glb.d.ts.map +1 -1
  271. package/dist/skinned-glb.js +15 -2
  272. package/dist/skinned-glb.js.map +1 -1
  273. package/dist/spring-chain-babylon.js +1 -1
  274. package/dist/spring-vrm.d.ts +59 -0
  275. package/dist/spring-vrm.d.ts.map +1 -0
  276. package/dist/spring-vrm.js +243 -0
  277. package/dist/spring-vrm.js.map +1 -0
  278. package/dist/svg-icons.d.ts +2 -3
  279. package/dist/svg-icons.d.ts.map +1 -1
  280. package/dist/svg-icons.js +8 -6
  281. package/dist/svg-icons.js.map +1 -1
  282. package/dist/tailor-tool.d.ts +35 -0
  283. package/dist/tailor-tool.d.ts.map +1 -1
  284. package/dist/tailor-tool.js +345 -64
  285. package/dist/tailor-tool.js.map +1 -1
  286. package/dist/terrain-editor.d.ts.map +1 -1
  287. package/dist/terrain-editor.js +10 -0
  288. package/dist/terrain-editor.js.map +1 -1
  289. package/dist/tosi-b3d.d.ts +148 -2
  290. package/dist/tosi-b3d.d.ts.map +1 -1
  291. package/dist/tosi-b3d.js +641 -21
  292. package/dist/tosi-b3d.js.map +1 -1
  293. package/dist/ual-rest.d.ts +7 -0
  294. package/dist/ual-rest.d.ts.map +1 -0
  295. package/dist/ual-rest.js +396 -0
  296. package/dist/ual-rest.js.map +1 -0
  297. package/dist/undo-history.d.ts +19 -0
  298. package/dist/undo-history.d.ts.map +1 -0
  299. package/dist/undo-history.js +77 -0
  300. package/dist/undo-history.js.map +1 -0
  301. package/dist/vector-field.d.ts +2 -0
  302. package/dist/vector-field.d.ts.map +1 -1
  303. package/dist/vector-field.js +15 -0
  304. package/dist/vector-field.js.map +1 -1
  305. package/dist/w3d-theme.d.ts +2 -0
  306. package/dist/w3d-theme.d.ts.map +1 -1
  307. package/dist/w3d-theme.js +11 -0
  308. package/dist/w3d-theme.js.map +1 -1
  309. package/dist/weapon-fit.js +1 -1
  310. package/dist/widget-semantics.d.ts +107 -0
  311. package/dist/widget-semantics.d.ts.map +1 -0
  312. package/dist/widget-semantics.js +296 -0
  313. package/dist/widget-semantics.js.map +1 -0
  314. package/dist/widgets3d.d.ts +84 -17
  315. package/dist/widgets3d.d.ts.map +1 -1
  316. package/dist/widgets3d.js +372 -58
  317. package/dist/widgets3d.js.map +1 -1
  318. package/package.json +5 -3
  319. package/static/attributes.json +82 -2
  320. package/static/attributes.txt +27 -2
@@ -0,0 +1,526 @@
1
+ /*#
2
+ # aria mirror
3
+
4
+ **A panel a screen reader can use.** A panel draws in SVG, flat or on a plane
5
+ in the scene, and a screen reader sees none of it. The mirror is the same
6
+ panel as real HTML controls (buttons, checkboxes, range inputs, selects, text
7
+ fields), visually hidden, built from the panel's control tree (see
8
+ [widget semantics](/widget-semantics/)). Sections are headings with an
9
+ expand button, popups are dialogs. Using a mirrored control sets or presses
10
+ the panel's own widget through its own path, exactly as an agent's tool or a
11
+ hand on it would, so there is one definition of what each control does.
12
+
13
+ **Placed over what it mirrors.** With `place`, each copy is a real target
14
+ laid exactly over its drawn control: unpainted (no background, no text
15
+ colour) but fully opaque and, where the main pointer is a finger, taking
16
+ touches (with a mouse every press goes through to the drawn panel), because iOS VoiceOver finds what
17
+ a finger is on by hit-testing, and skipped transparent, untouchable copies
18
+ for the canvas under them. So a person exploring by touch finds "Continue"
19
+ where Continue is drawn, and a double-tap presses the copy. A copy with
20
+ keyboard focus shows a ring over the drawn control. Without `place` the
21
+ copies are hidden in a corner and reached by swiping or Tab.
22
+
23
+ **Built only when someone uses it.** `<tosi-b3d>` builds nothing for a
24
+ screen reader until focus first lands in the scene (Tab, or VoiceOver moving
25
+ onto the owl or the scene); from then it mirrors its settings panel and any
26
+ modal (a pause: focus moves to Continue), describes the scene and names the
27
+ glass gamepad's controls. Values are read again when a copy takes focus;
28
+ nothing runs on a timer. Its system bar's buttons are real HTML buttons
29
+ already, laid exactly over the drawn bar.
30
+
31
+ ```javascript
32
+ import { ariaMirror } from 'tosijs-3d/aria-mirror'
33
+ const mirror = ariaMirror(hostElement, () => panel.controls(), { label: 'Settings' })
34
+ mirror.update() // after the panel rebuilds; values patch in place, focus stays
35
+ mirror.dispose()
36
+ ```
37
+
38
+ What it cannot do yet: a big editor (a curve, a footprint) is read out by name
39
+ and value only, unless its value is a few numbers, which become number fields.
40
+ In a headset there is no DOM to mirror into.
41
+ */
42
+ /*{ "parent": "widget-semantics", "order": 10 }*/
43
+ /** Visually hidden, still in the accessibility tree and focusable. */
44
+ export const VISUALLY_HIDDEN = {
45
+ position: 'absolute',
46
+ width: '1px',
47
+ height: '1px',
48
+ overflow: 'hidden',
49
+ clipPath: 'inset(50%)',
50
+ whiteSpace: 'nowrap',
51
+ };
52
+ /**
53
+ A placed copy: a real, opaque, touchable box with nothing painted. Not
54
+ `opacity: 0` and not `pointer-events: none`: iOS VoiceOver finds what is under
55
+ a finger by hit-testing, and passed over such copies for the canvas. A range
56
+ input's thumb is a pseudo-element, which an inline style cannot reach: the
57
+ host's stylesheet hides it (`<tosi-b3d>` does).
58
+ */
59
+ export const UNPAINTED = {
60
+ background: 'transparent',
61
+ color: 'transparent',
62
+ caretColor: 'transparent',
63
+ border: '0',
64
+ appearance: 'none',
65
+ webkitAppearance: 'none',
66
+ font: 'inherit',
67
+ };
68
+ /**
69
+ Whether the main pointer is a finger. Only touch exploration needs a copy to
70
+ take touches (it hit-tests); with a mouse the copies let every press through
71
+ to the drawn panel, and a desktop screen reader moves by keyboard.
72
+ */
73
+ const fingerFirst = () => typeof matchMedia === 'function' && matchMedia('(pointer: coarse)').matches;
74
+ /** A number without float noise: 0.6000000238418579 is 0.6. */
75
+ const tidy = (x) => String(Number(x.toPrecision(6)));
76
+ const numeric = (v) => v != null &&
77
+ typeof v === 'object' &&
78
+ !Array.isArray(v) &&
79
+ Object.keys(v).length > 0 &&
80
+ Object.keys(v).length <= 6 &&
81
+ Object.values(v).every((x) => typeof x === 'number');
82
+ /** A value as a person would read it. */
83
+ function spoken(v) {
84
+ if (v == null)
85
+ return '';
86
+ if (typeof v === 'number')
87
+ return String(Math.round(v * 1000) / 1000);
88
+ if (Array.isArray(v)) {
89
+ // A curve's points: the first few, then how many more.
90
+ const head = v
91
+ .slice(0, 8)
92
+ .map(spoken)
93
+ .filter((s) => s !== '');
94
+ const more = v.length > 8 ? `; and ${v.length - 8} more` : '';
95
+ return `${v.length} points: ${head.join('; ')}${more}`;
96
+ }
97
+ if (typeof v === 'object') {
98
+ if (numeric(v))
99
+ return Object.entries(v)
100
+ .map(([k, n]) => `${k} ${spoken(n)}`)
101
+ .join(', ');
102
+ return '';
103
+ }
104
+ return String(v);
105
+ }
106
+ /** Structure only: what a value patch cannot change. */
107
+ function shape(tree) {
108
+ const parts = [];
109
+ const walk = (ns) => {
110
+ for (const n of ns) {
111
+ parts.push(`${n.role}|${n.path}|${n.disabled ? 1 : 0}|${n.open ?? ''}|${n.options?.join('\u0001') ?? ''}|${numeric(n.value) ? Object.keys(n.value).join(',') : ''}|${n.interactive ? 1 : 0}`);
112
+ if (n.children) {
113
+ parts.push('(');
114
+ walk(n.children);
115
+ parts.push(')');
116
+ }
117
+ }
118
+ };
119
+ walk(tree);
120
+ return parts.join('\n');
121
+ }
122
+ export function ariaMirror(host, read, options = {}) {
123
+ const doc = host.ownerDocument;
124
+ const root = doc.createElement('div');
125
+ root.setAttribute('role', options.role ?? 'region');
126
+ if (options.role === 'dialog')
127
+ root.setAttribute('aria-modal', 'true');
128
+ root.dataset.ariaMirror = '';
129
+ // Placed copies are unpainted; a host styles what an inline style cannot
130
+ // reach (a heading's fold button, a range thumb) by this.
131
+ if (options.place)
132
+ root.dataset.placed = '';
133
+ // Placing: an overlay of the host that only its placed copies make
134
+ // touchable (see UNPAINTED). Else hidden.
135
+ Object.assign(root.style, options.place
136
+ ? {
137
+ position: 'absolute',
138
+ inset: '0',
139
+ pointerEvents: 'none',
140
+ overflow: 'hidden',
141
+ }
142
+ : VISUALLY_HIDDEN);
143
+ host.appendChild(root);
144
+ // Values are read again when a control takes focus: when someone is about
145
+ // to hear them. Nothing runs between.
146
+ root.addEventListener('focusin', () => update());
147
+ /** The current node behind each control, by key: handlers look it up when they fire. */
148
+ let nodes = new Map();
149
+ /** Patch functions, by key, for a value-only update. */
150
+ let patches = new Map();
151
+ let lastShape = '';
152
+ const label = () => typeof options.label === 'function' ? options.label() : options.label ?? '';
153
+ const el = (tag, attrs = {}, text) => {
154
+ const e = doc.createElement(tag);
155
+ for (const [k, v] of Object.entries(attrs))
156
+ e.setAttribute(k, v);
157
+ if (text != null)
158
+ e.textContent = text;
159
+ return e;
160
+ };
161
+ const node = (key) => nodes.get(key);
162
+ /** Text that reads in order but is nowhere on screen: in the corner. */
163
+ const quiet = (e) => {
164
+ if (options.place)
165
+ Object.assign(e.style, VISUALLY_HIDDEN);
166
+ return e;
167
+ };
168
+ const focused = () => {
169
+ const r = root.getRootNode();
170
+ return r.activeElement ?? null;
171
+ };
172
+ /** Each placed control's element, by key, so an update can move it. */
173
+ let placed = new Map();
174
+ function position(e, n) {
175
+ if (options.place == null)
176
+ return;
177
+ const at = n.box ? options.place(n.box) : null;
178
+ if (at == null) {
179
+ Object.assign(e.style, VISUALLY_HIDDEN, {
180
+ left: '',
181
+ top: '',
182
+ pointerEvents: '',
183
+ });
184
+ return;
185
+ }
186
+ Object.assign(e.style, UNPAINTED, {
187
+ pointerEvents: fingerFirst() ? 'auto' : 'none',
188
+ position: 'absolute',
189
+ left: `${at.x}px`,
190
+ top: `${at.y}px`,
191
+ width: `${at.w}px`,
192
+ height: `${at.h}px`,
193
+ margin: '0',
194
+ padding: '0',
195
+ boxSizing: 'border-box',
196
+ overflow: 'hidden',
197
+ clipPath: '',
198
+ whiteSpace: '',
199
+ });
200
+ }
201
+ function render(n, key, into) {
202
+ nodes.set(key, n);
203
+ const put = (e) => {
204
+ into.appendChild(e);
205
+ placed.set(key, e);
206
+ position(e, n);
207
+ };
208
+ const name = n.name || n.role;
209
+ const disabled = (e) => {
210
+ if (n.disabled)
211
+ e.setAttribute('disabled', '');
212
+ };
213
+ const keyed = (e) => {
214
+ e.dataset.key = key;
215
+ return e;
216
+ };
217
+ switch (n.role) {
218
+ case 'section': {
219
+ const h = el('h3');
220
+ const b = keyed(el('button', { type: 'button', 'aria-expanded': String(!!n.open) }, name));
221
+ b.addEventListener('click', () => node(key)?.activate?.());
222
+ h.appendChild(b);
223
+ put(h);
224
+ if (n.open && n.children) {
225
+ const g = el('div', { role: 'group', 'aria-label': name });
226
+ renderAll(n.children, g);
227
+ into.appendChild(g);
228
+ }
229
+ return;
230
+ }
231
+ case 'button': {
232
+ const b = keyed(el('button', { type: 'button' }, name));
233
+ if (n.value === true)
234
+ b.setAttribute('aria-pressed', 'true');
235
+ disabled(b);
236
+ b.addEventListener('click', () => node(key)?.activate?.());
237
+ put(b);
238
+ patches.set(key, (m) => {
239
+ if (m.value === true)
240
+ b.setAttribute('aria-pressed', 'true');
241
+ else
242
+ b.removeAttribute('aria-pressed');
243
+ });
244
+ if (n.options && n.set) {
245
+ const g = el('div', { role: 'group', 'aria-label': `${name} menu` });
246
+ n.options.forEach((o) => {
247
+ const ob = el('button', { type: 'button' }, o);
248
+ ob.addEventListener('click', () => node(key)?.set?.(o));
249
+ g.appendChild(ob);
250
+ });
251
+ into.appendChild(g);
252
+ }
253
+ return;
254
+ }
255
+ case 'toggle': {
256
+ const lab = el('label');
257
+ const c = keyed(el('input', { type: 'checkbox', role: 'switch' }));
258
+ c.checked = !!n.value;
259
+ disabled(c);
260
+ c.addEventListener('change', () => node(key)?.set?.(c.checked));
261
+ lab.append(c, ` ${name}`);
262
+ put(lab);
263
+ patches.set(key, (m) => (c.checked = !!m.value));
264
+ return;
265
+ }
266
+ case 'slider': {
267
+ const r = keyed(el('input', { type: 'range', 'aria-label': name }));
268
+ // A log track is mirrored as positions along it (0..1000), so an
269
+ // arrow moves the handle as far as a hand would; the text says the value.
270
+ const track = n.setFraction != null;
271
+ const position = (m) => track
272
+ ? String(Math.round((m.fraction ?? 0) * 1000))
273
+ : String(m.value ?? '');
274
+ if (track) {
275
+ r.min = '0';
276
+ r.max = '1000';
277
+ r.step = '10';
278
+ }
279
+ else {
280
+ if (n.min !== undefined)
281
+ r.min = tidy(n.min);
282
+ if (n.max !== undefined)
283
+ r.max = tidy(n.max);
284
+ r.step = n.step !== undefined && n.step > 0 ? tidy(n.step) : 'any';
285
+ }
286
+ r.value = position(n);
287
+ const text = (m) => {
288
+ if (m.valueText)
289
+ r.setAttribute('aria-valuetext', m.valueText);
290
+ else
291
+ r.removeAttribute('aria-valuetext');
292
+ };
293
+ text(n);
294
+ disabled(r);
295
+ r.addEventListener('input', () => {
296
+ const cur = node(key);
297
+ if (track)
298
+ cur?.setFraction?.(Number(r.value) / 1000);
299
+ else
300
+ cur?.set?.(Number(r.value));
301
+ // What the widget now shows (its formatted value), read back.
302
+ queueMicrotask(update);
303
+ });
304
+ put(r);
305
+ patches.set(key, (m) => {
306
+ if (focused() !== r)
307
+ r.value = position(m);
308
+ text(m);
309
+ });
310
+ return;
311
+ }
312
+ case 'select':
313
+ case 'tabs': {
314
+ const s = keyed(el('select', { 'aria-label': name }));
315
+ for (const o of n.options ?? [])
316
+ s.appendChild(el('option', {}, o));
317
+ s.value = String(n.value ?? '');
318
+ disabled(s);
319
+ s.addEventListener('change', () => node(key)?.set?.(s.value));
320
+ put(s);
321
+ patches.set(key, (m) => (s.value = String(m.value ?? '')));
322
+ return;
323
+ }
324
+ case 'textbox':
325
+ case 'colour': {
326
+ const t = keyed(el('input', { type: 'text', 'aria-label': name }));
327
+ t.value = String(n.value ?? '');
328
+ disabled(t);
329
+ if (!n.set)
330
+ t.readOnly = true;
331
+ t.addEventListener('change', () => node(key)?.set?.(t.value));
332
+ put(t);
333
+ patches.set(key, (m) => {
334
+ if (focused() !== t)
335
+ t.value = String(m.value ?? '');
336
+ });
337
+ return;
338
+ }
339
+ case 'vector':
340
+ case 'editor': {
341
+ const g = el('div', { role: 'group', 'aria-label': name });
342
+ if (numeric(n.value) && n.set) {
343
+ const fields = {};
344
+ for (const [k, v] of Object.entries(n.value)) {
345
+ const f = keyed(el('input', {
346
+ type: 'number',
347
+ step: 'any',
348
+ 'aria-label': `${name} ${k}`,
349
+ }));
350
+ f.dataset.key = `${key}#${k}`;
351
+ f.value = String(v);
352
+ disabled(f);
353
+ f.addEventListener('change', () => {
354
+ const cur = node(key);
355
+ const x = Number(f.value);
356
+ if (cur?.set && numeric(cur.value) && Number.isFinite(x))
357
+ cur.set({ ...cur.value, [k]: x });
358
+ });
359
+ fields[k] = f;
360
+ g.appendChild(f);
361
+ }
362
+ patches.set(key, (m) => {
363
+ if (!numeric(m.value))
364
+ return;
365
+ for (const [k, f] of Object.entries(fields))
366
+ if (focused() !== f)
367
+ f.value = String(m.value[k] ?? '');
368
+ });
369
+ }
370
+ else {
371
+ const p = el('p', {}, `${name}: ${spoken(n.value)}`);
372
+ g.appendChild(p);
373
+ patches.set(key, (m) => (p.textContent = `${name}: ${spoken(m.value)}`));
374
+ // An editor with presets: the one edit a list of options can make.
375
+ if (n.options && n.set) {
376
+ const s = keyed(el('select', { 'aria-label': `${name} preset` }));
377
+ s.dataset.key = `${key}#preset`;
378
+ s.appendChild(el('option', { value: '' }, 'choose a preset'));
379
+ for (const o of n.options)
380
+ s.appendChild(el('option', {}, o));
381
+ disabled(s);
382
+ s.addEventListener('change', () => {
383
+ if (s.value !== '')
384
+ node(key)?.set?.(s.value);
385
+ });
386
+ g.appendChild(s);
387
+ }
388
+ }
389
+ put(g);
390
+ return;
391
+ }
392
+ case 'list':
393
+ case 'toolbar':
394
+ case 'group':
395
+ case 'popup': {
396
+ const role = n.role === 'popup'
397
+ ? 'dialog'
398
+ : n.role === 'toolbar'
399
+ ? 'toolbar'
400
+ : 'group';
401
+ // A toolbar with no name of its own is the panel's tools.
402
+ const label = n.name || (n.role === 'toolbar' ? 'tools' : '');
403
+ const g = el('div', { role, ...(label ? { 'aria-label': label } : {}) });
404
+ renderAll(n.children ?? [], g);
405
+ into.appendChild(g);
406
+ return;
407
+ }
408
+ case 'option': {
409
+ const b = keyed(el('button', { type: 'button' }, name));
410
+ disabled(b);
411
+ b.addEventListener('click', () => node(key)?.activate?.());
412
+ put(b);
413
+ return;
414
+ }
415
+ case 'progress': {
416
+ const p = el('div', { role: 'progressbar', 'aria-label': name });
417
+ const set = (v) => typeof v === 'number'
418
+ ? p.setAttribute('aria-valuenow', String(v))
419
+ : p.removeAttribute('aria-valuenow');
420
+ set(n.value);
421
+ put(p);
422
+ patches.set(key, (m) => set(m.value));
423
+ return;
424
+ }
425
+ case 'label': {
426
+ if (n.name)
427
+ into.appendChild(quiet(el('p', {}, n.name)));
428
+ return;
429
+ }
430
+ case 'text': {
431
+ const p = quiet(el('p', {}, spoken(n.value)));
432
+ into.appendChild(p);
433
+ patches.set(key, (m) => (p.textContent = spoken(m.value)));
434
+ return;
435
+ }
436
+ default:
437
+ // `unknown`: a widget with no semantics() has nothing to say.
438
+ return;
439
+ }
440
+ }
441
+ function renderAll(ns, into) {
442
+ const seen = new Map();
443
+ for (const n of ns) {
444
+ const k = `${n.role}:${n.path}`;
445
+ const count = (seen.get(k) ?? 0) + 1;
446
+ seen.set(k, count);
447
+ render(n, count > 1 ? `${k}#${count}` : k, into);
448
+ }
449
+ }
450
+ /** Walk a fresh tree with the same keying as `renderAll`, for a patch. */
451
+ function patchAll(ns) {
452
+ const seen = new Map();
453
+ for (const n of ns) {
454
+ const k = `${n.role}:${n.path}`;
455
+ const count = (seen.get(k) ?? 0) + 1;
456
+ seen.set(k, count);
457
+ const key = count > 1 ? `${k}#${count}` : k;
458
+ nodes.set(key, n);
459
+ patches.get(key)?.(n);
460
+ const e = placed.get(key);
461
+ if (e != null)
462
+ position(e, n);
463
+ if (n.children)
464
+ patchAll(n.children);
465
+ }
466
+ }
467
+ function clear() {
468
+ root.replaceChildren();
469
+ nodes = new Map();
470
+ patches = new Map();
471
+ placed = new Map();
472
+ lastShape = '';
473
+ }
474
+ function update() {
475
+ let tree;
476
+ try {
477
+ tree = read();
478
+ }
479
+ catch {
480
+ tree = null;
481
+ }
482
+ if (tree == null)
483
+ return clear();
484
+ const name = label();
485
+ if (name)
486
+ root.setAttribute('aria-label', name);
487
+ else
488
+ root.removeAttribute('aria-label');
489
+ const s = shape(tree);
490
+ if (s === lastShape)
491
+ return patchAll(tree);
492
+ // Rebuild, and put focus back on the control that had it.
493
+ const had = focused();
494
+ const inside = had != null && root.contains(had);
495
+ const hadKey = inside ? had.dataset.key : null;
496
+ const before = [...root.querySelectorAll('[data-key]')];
497
+ const hadIndex = inside ? before.indexOf(had) : -1;
498
+ root.replaceChildren();
499
+ nodes = new Map();
500
+ patches = new Map();
501
+ placed = new Map();
502
+ renderAll(tree, root);
503
+ lastShape = s;
504
+ if (!inside)
505
+ return;
506
+ /*
507
+ Focus goes back to the same control, or, when that control is gone (Pause
508
+ became Resume), to the one now in its place: a reader dropped to the top
509
+ of the page has to find their way back from nothing.
510
+ */
511
+ const after = [...root.querySelectorAll('[data-key]')];
512
+ const same = after.find((e) => e.dataset.key === hadKey);
513
+ const near = after[Math.min(Math.max(0, hadIndex), after.length - 1)];
514
+ (same ?? near)?.focus();
515
+ }
516
+ return {
517
+ root,
518
+ update,
519
+ clear,
520
+ dispose() {
521
+ clear();
522
+ root.remove();
523
+ },
524
+ };
525
+ }
526
+ //# sourceMappingURL=aria-mirror.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aria-mirror.js","sourceRoot":"","sources":["../src/aria-mirror.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ export declare function getAssetBase(): string;
29
29
  * he had. Three wrong diagnoses before someone looked at the actual bytes.
30
30
  *
31
31
  * So pass a version whenever you depend on content that has been republished:
32
- * `assetUrl('quaternius/UAL1_core.glb', 2)`. It changes the URL, which is the
32
+ * `assetUrl('quaternius/UAL1_core.glb', 3)`. It changes the URL, which is the
33
33
  * only thing an immutable cache respects.
34
34
  */
35
35
  export declare function assetUrl(path: string, version?: string | number): string;
package/dist/asset-url.js CHANGED
@@ -52,7 +52,7 @@ export function getAssetBase() {
52
52
  * he had. Three wrong diagnoses before someone looked at the actual bytes.
53
53
  *
54
54
  * So pass a version whenever you depend on content that has been republished:
55
- * `assetUrl('quaternius/UAL1_core.glb', 2)`. It changes the URL, which is the
55
+ * `assetUrl('quaternius/UAL1_core.glb', 3)`. It changes the URL, which is the
56
56
  * only thing an immutable cache respects.
57
57
  */
58
58
  export function assetUrl(path, version) {