tosijs-3d 0.12.2 → 0.12.3

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 (235) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/changelog/v0.12.3.md +47 -0
  3. package/dist/agent-driver.d.ts +75 -0
  4. package/dist/agent-driver.d.ts.map +1 -0
  5. package/dist/agent-driver.js +163 -0
  6. package/dist/agent-driver.js.map +1 -0
  7. package/dist/angle-field.d.ts.map +1 -1
  8. package/dist/angle-field.js +24 -0
  9. package/dist/angle-field.js.map +1 -1
  10. package/dist/aria-mirror.d.ts +36 -0
  11. package/dist/aria-mirror.d.ts.map +1 -0
  12. package/dist/aria-mirror.js +526 -0
  13. package/dist/aria-mirror.js.map +1 -0
  14. package/dist/b3d-agent.d.ts +118 -0
  15. package/dist/b3d-agent.d.ts.map +1 -0
  16. package/dist/b3d-agent.js +774 -0
  17. package/dist/b3d-agent.js.map +1 -0
  18. package/dist/b3d-aircraft.d.ts +1 -0
  19. package/dist/b3d-aircraft.d.ts.map +1 -1
  20. package/dist/b3d-aircraft.js +2 -1
  21. package/dist/b3d-aircraft.js.map +1 -1
  22. package/dist/b3d-biped.d.ts +2 -0
  23. package/dist/b3d-biped.d.ts.map +1 -1
  24. package/dist/b3d-biped.js +29 -1
  25. package/dist/b3d-biped.js.map +1 -1
  26. package/dist/b3d-car.d.ts +1 -0
  27. package/dist/b3d-car.d.ts.map +1 -1
  28. package/dist/b3d-car.js +2 -1
  29. package/dist/b3d-car.js.map +1 -1
  30. package/dist/b3d-cloud-deck.d.ts.map +1 -1
  31. package/dist/b3d-cloud-deck.js +4 -2
  32. package/dist/b3d-cloud-deck.js.map +1 -1
  33. package/dist/b3d-controllable.d.ts +15 -1
  34. package/dist/b3d-controllable.d.ts.map +1 -1
  35. package/dist/b3d-controllable.js +40 -3
  36. package/dist/b3d-controllable.js.map +1 -1
  37. package/dist/b3d-input-focus.d.ts +5 -0
  38. package/dist/b3d-input-focus.d.ts.map +1 -1
  39. package/dist/b3d-input-focus.js +13 -0
  40. package/dist/b3d-input-focus.js.map +1 -1
  41. package/dist/b3d-launcher.d.ts +22 -0
  42. package/dist/b3d-launcher.d.ts.map +1 -1
  43. package/dist/b3d-launcher.js +147 -33
  44. package/dist/b3d-launcher.js.map +1 -1
  45. package/dist/b3d-library.d.ts.map +1 -1
  46. package/dist/b3d-library.js +5 -3
  47. package/dist/b3d-library.js.map +1 -1
  48. package/dist/b3d-panel.d.ts.map +1 -1
  49. package/dist/b3d-panel.js +6 -0
  50. package/dist/b3d-panel.js.map +1 -1
  51. package/dist/b3d-tank.d.ts +1 -0
  52. package/dist/b3d-tank.d.ts.map +1 -1
  53. package/dist/b3d-tank.js +2 -1
  54. package/dist/b3d-tank.js.map +1 -1
  55. package/dist/bar-menu.d.ts +15 -0
  56. package/dist/bar-menu.d.ts.map +1 -1
  57. package/dist/bar-menu.js +22 -10
  58. package/dist/bar-menu.js.map +1 -1
  59. package/dist/bone-heat.d.ts +1 -0
  60. package/dist/bone-heat.d.ts.map +1 -1
  61. package/dist/bone-heat.js +205 -3
  62. package/dist/bone-heat.js.map +1 -1
  63. package/dist/character-builder.d.ts.map +1 -1
  64. package/dist/character-builder.js +316 -48
  65. package/dist/character-builder.js.map +1 -1
  66. package/dist/character-core.d.ts.map +1 -1
  67. package/dist/character-core.js +5 -0
  68. package/dist/character-core.js.map +1 -1
  69. package/dist/character-file.d.ts.map +1 -1
  70. package/dist/character-file.js +13 -4
  71. package/dist/character-file.js.map +1 -1
  72. package/dist/character-settings.d.ts +1 -1
  73. package/dist/character-settings.d.ts.map +1 -1
  74. package/dist/character-settings.js +16 -1
  75. package/dist/character-settings.js.map +1 -1
  76. package/dist/character.d.ts +11 -0
  77. package/dist/character.d.ts.map +1 -1
  78. package/dist/character.js +63 -21
  79. package/dist/character.js.map +1 -1
  80. package/dist/city-drive.d.ts.map +1 -1
  81. package/dist/city-drive.js +22 -3
  82. package/dist/city-drive.js.map +1 -1
  83. package/dist/cloth-bake.d.ts.map +1 -1
  84. package/dist/cloth-bake.js.map +1 -1
  85. package/dist/cloth-drape.d.ts +33 -0
  86. package/dist/cloth-drape.d.ts.map +1 -0
  87. package/dist/cloth-drape.js +561 -0
  88. package/dist/cloth-drape.js.map +1 -0
  89. package/dist/color-field.d.ts.map +1 -1
  90. package/dist/color-field.js +11 -0
  91. package/dist/color-field.js.map +1 -1
  92. package/dist/color-picker.d.ts.map +1 -1
  93. package/dist/color-picker.js +6 -0
  94. package/dist/color-picker.js.map +1 -1
  95. package/dist/curve-field.d.ts.map +1 -1
  96. package/dist/curve-field.js +28 -6
  97. package/dist/curve-field.js.map +1 -1
  98. package/dist/curve-program.d.ts.map +1 -1
  99. package/dist/curve-program.js +12 -0
  100. package/dist/curve-program.js.map +1 -1
  101. package/dist/extremes-sweep.d.ts.map +1 -1
  102. package/dist/extremes-sweep.js +4 -2
  103. package/dist/extremes-sweep.js.map +1 -1
  104. package/dist/footprint-field.d.ts.map +1 -1
  105. package/dist/footprint-field.js +20 -0
  106. package/dist/footprint-field.js.map +1 -1
  107. package/dist/frame-panel.d.ts.map +1 -1
  108. package/dist/frame-panel.js +25 -12
  109. package/dist/frame-panel.js.map +1 -1
  110. package/dist/garment-cut.d.ts +15 -0
  111. package/dist/garment-cut.d.ts.map +1 -1
  112. package/dist/garment-cut.js +84 -1
  113. package/dist/garment-cut.js.map +1 -1
  114. package/dist/glass-gamepad.d.ts +4 -0
  115. package/dist/glass-gamepad.d.ts.map +1 -1
  116. package/dist/glass-gamepad.js +74 -0
  117. package/dist/glass-gamepad.js.map +1 -1
  118. package/dist/glb-rig.d.ts +48 -0
  119. package/dist/glb-rig.d.ts.map +1 -0
  120. package/dist/glb-rig.js +412 -0
  121. package/dist/glb-rig.js.map +1 -0
  122. package/dist/hair-place.d.ts.map +1 -1
  123. package/dist/hair-place.js.map +1 -1
  124. package/dist/human-rig.d.ts +50 -3
  125. package/dist/human-rig.d.ts.map +1 -1
  126. package/dist/human-rig.js +196 -3
  127. package/dist/human-rig.js.map +1 -1
  128. package/dist/icon-data.d.ts +2 -0
  129. package/dist/icon-data.d.ts.map +1 -1
  130. package/dist/icon-data.js +6 -4
  131. package/dist/icon-data.js.map +1 -1
  132. package/dist/icon-grid.d.ts.map +1 -1
  133. package/dist/icon-grid.js +13 -0
  134. package/dist/icon-grid.js.map +1 -1
  135. package/dist/index.d.ts +18 -6
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +15 -4
  138. package/dist/index.js.map +1 -1
  139. package/dist/inspect-view.d.ts +21 -0
  140. package/dist/inspect-view.d.ts.map +1 -1
  141. package/dist/inspect-view.js +22 -1
  142. package/dist/inspect-view.js.map +1 -1
  143. package/dist/keyboard.d.ts +11 -0
  144. package/dist/keyboard.d.ts.map +1 -1
  145. package/dist/keyboard.js +27 -1
  146. package/dist/keyboard.js.map +1 -1
  147. package/dist/land-and-sky.js +1 -0
  148. package/dist/land-and-sky.js.map +1 -1
  149. package/dist/light-editor.d.ts.map +1 -1
  150. package/dist/light-editor.js +12 -0
  151. package/dist/light-editor.js.map +1 -1
  152. package/dist/light-pool.d.ts +7 -0
  153. package/dist/light-pool.d.ts.map +1 -1
  154. package/dist/light-pool.js +11 -0
  155. package/dist/light-pool.js.map +1 -1
  156. package/dist/material-picker.d.ts.map +1 -1
  157. package/dist/material-picker.js +10 -0
  158. package/dist/material-picker.js.map +1 -1
  159. package/dist/picker.d.ts.map +1 -1
  160. package/dist/picker.js +14 -0
  161. package/dist/picker.js.map +1 -1
  162. package/dist/playground.d.ts.map +1 -1
  163. package/dist/playground.js +32 -12
  164. package/dist/playground.js.map +1 -1
  165. package/dist/remesh.d.ts +36 -0
  166. package/dist/remesh.d.ts.map +1 -0
  167. package/dist/remesh.js +556 -0
  168. package/dist/remesh.js.map +1 -0
  169. package/dist/retarget.d.ts +5 -0
  170. package/dist/retarget.d.ts.map +1 -1
  171. package/dist/retarget.js +17 -10
  172. package/dist/retarget.js.map +1 -1
  173. package/dist/rig-build.d.ts +5 -0
  174. package/dist/rig-build.d.ts.map +1 -1
  175. package/dist/rig-build.js +5 -1
  176. package/dist/rig-build.js.map +1 -1
  177. package/dist/rig-fit.d.ts.map +1 -1
  178. package/dist/rig-fit.js +62 -8
  179. package/dist/rig-fit.js.map +1 -1
  180. package/dist/rig-tool.d.ts +7 -1
  181. package/dist/rig-tool.d.ts.map +1 -1
  182. package/dist/rig-tool.js +332 -63
  183. package/dist/rig-tool.js.map +1 -1
  184. package/dist/rigged-body-glb.d.ts +34 -0
  185. package/dist/rigged-body-glb.d.ts.map +1 -0
  186. package/dist/rigged-body-glb.js +872 -0
  187. package/dist/rigged-body-glb.js.map +1 -0
  188. package/dist/rigged-body.d.ts.map +1 -1
  189. package/dist/rigged-body.js +31 -1
  190. package/dist/rigged-body.js.map +1 -1
  191. package/dist/scene-description.d.ts +36 -0
  192. package/dist/scene-description.d.ts.map +1 -0
  193. package/dist/scene-description.js +131 -0
  194. package/dist/scene-description.js.map +1 -0
  195. package/dist/scene-schemas.d.ts.map +1 -1
  196. package/dist/scene-schemas.js +2 -0
  197. package/dist/scene-schemas.js.map +1 -1
  198. package/dist/skinned-glb.d.ts +8 -0
  199. package/dist/skinned-glb.d.ts.map +1 -1
  200. package/dist/skinned-glb.js +15 -2
  201. package/dist/skinned-glb.js.map +1 -1
  202. package/dist/spring-vrm.d.ts +59 -0
  203. package/dist/spring-vrm.d.ts.map +1 -0
  204. package/dist/spring-vrm.js +243 -0
  205. package/dist/spring-vrm.js.map +1 -0
  206. package/dist/tailor-tool.d.ts +8 -0
  207. package/dist/tailor-tool.d.ts.map +1 -1
  208. package/dist/tailor-tool.js +93 -16
  209. package/dist/tailor-tool.js.map +1 -1
  210. package/dist/terrain-editor.d.ts.map +1 -1
  211. package/dist/terrain-editor.js +10 -0
  212. package/dist/terrain-editor.js.map +1 -1
  213. package/dist/tosi-b3d.d.ts +128 -1
  214. package/dist/tosi-b3d.d.ts.map +1 -1
  215. package/dist/tosi-b3d.js +571 -7
  216. package/dist/tosi-b3d.js.map +1 -1
  217. package/dist/ual-rest.d.ts +7 -0
  218. package/dist/ual-rest.d.ts.map +1 -0
  219. package/dist/ual-rest.js +396 -0
  220. package/dist/ual-rest.js.map +1 -0
  221. package/dist/vector-field.d.ts +2 -0
  222. package/dist/vector-field.d.ts.map +1 -1
  223. package/dist/vector-field.js +15 -0
  224. package/dist/vector-field.js.map +1 -1
  225. package/dist/widget-semantics.d.ts +107 -0
  226. package/dist/widget-semantics.d.ts.map +1 -0
  227. package/dist/widget-semantics.js +296 -0
  228. package/dist/widget-semantics.js.map +1 -0
  229. package/dist/widgets3d.d.ts +37 -1
  230. package/dist/widgets3d.d.ts.map +1 -1
  231. package/dist/widgets3d.js +274 -23
  232. package/dist/widgets3d.js.map +1 -1
  233. package/package.json +4 -2
  234. package/static/attributes.json +16 -1
  235. package/static/attributes.txt +7 -1
@@ -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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"}