@tai42/studio-sdk 16.0.0 → 16.0.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 (317) hide show
  1. package/dist/components/explorer-body.d.ts +49 -0
  2. package/dist/components/explorer-body.d.ts.map +1 -0
  3. package/dist/components/explorer-body.js +67 -0
  4. package/dist/components/explorer-body.js.map +1 -0
  5. package/dist/components/explorer-page-size.d.ts +4 -0
  6. package/dist/components/explorer-page-size.d.ts.map +1 -0
  7. package/dist/components/explorer-page-size.js +36 -0
  8. package/dist/components/explorer-page-size.js.map +1 -0
  9. package/dist/components/explorer-tag-filter.d.ts +17 -0
  10. package/dist/components/explorer-tag-filter.d.ts.map +1 -0
  11. package/dist/components/explorer-tag-filter.js +29 -0
  12. package/dist/components/explorer-tag-filter.js.map +1 -0
  13. package/dist/components/explorer-tags.d.ts +22 -0
  14. package/dist/components/explorer-tags.d.ts.map +1 -0
  15. package/dist/components/explorer-tags.js +51 -0
  16. package/dist/components/explorer-tags.js.map +1 -0
  17. package/dist/components/explorer-view.d.ts +3 -17
  18. package/dist/components/explorer-view.d.ts.map +1 -1
  19. package/dist/components/explorer-view.js +53 -170
  20. package/dist/components/explorer-view.js.map +1 -1
  21. package/dist/components/extension-combo-builder.d.ts +0 -5
  22. package/dist/components/extension-combo-builder.d.ts.map +1 -1
  23. package/dist/components/extension-combo-builder.js +4 -42
  24. package/dist/components/extension-combo-builder.js.map +1 -1
  25. package/dist/components/extension-combo-parts.d.ts +44 -0
  26. package/dist/components/extension-combo-parts.d.ts.map +1 -0
  27. package/dist/components/extension-combo-parts.js +57 -0
  28. package/dist/components/extension-combo-parts.js.map +1 -0
  29. package/dist/components/fleet-report.d.ts.map +1 -1
  30. package/dist/components/fleet-report.js +51 -37
  31. package/dist/components/fleet-report.js.map +1 -1
  32. package/dist/components/icons/chrome-marks.d.ts +50 -0
  33. package/dist/components/icons/chrome-marks.d.ts.map +1 -0
  34. package/dist/components/icons/chrome-marks.js +51 -0
  35. package/dist/components/icons/chrome-marks.js.map +1 -0
  36. package/dist/components/icons/icon-frame.d.ts +29 -0
  37. package/dist/components/icons/icon-frame.d.ts.map +1 -0
  38. package/dist/components/icons/icon-frame.js +19 -0
  39. package/dist/components/icons/icon-frame.js.map +1 -0
  40. package/dist/components/icons/index.d.ts +40 -0
  41. package/dist/components/icons/index.d.ts.map +1 -0
  42. package/dist/components/icons/index.js +6 -0
  43. package/dist/components/icons/index.js.map +1 -0
  44. package/dist/components/icons/nav-map.d.ts +14 -0
  45. package/dist/components/icons/nav-map.d.ts.map +1 -0
  46. package/dist/components/icons/nav-map.js +28 -0
  47. package/dist/components/icons/nav-map.js.map +1 -0
  48. package/dist/components/icons/nav-marks.d.ts +44 -0
  49. package/dist/components/icons/nav-marks.d.ts.map +1 -0
  50. package/dist/components/icons/nav-marks.js +45 -0
  51. package/dist/components/icons/nav-marks.js.map +1 -0
  52. package/dist/components/icons/status-marks.d.ts +21 -0
  53. package/dist/components/icons/status-marks.d.ts.map +1 -0
  54. package/dist/components/icons/status-marks.js +22 -0
  55. package/dist/components/icons/status-marks.js.map +1 -0
  56. package/dist/components/icons/theme-marks.d.ts +9 -0
  57. package/dist/components/icons/theme-marks.d.ts.map +1 -0
  58. package/dist/components/icons/theme-marks.js +10 -0
  59. package/dist/components/icons/theme-marks.js.map +1 -0
  60. package/dist/components/json-diff.d.ts.map +1 -1
  61. package/dist/components/json-diff.js +1 -3
  62. package/dist/components/json-diff.js.map +1 -1
  63. package/dist/components/json-tree-context.d.ts +13 -0
  64. package/dist/components/json-tree-context.d.ts.map +1 -0
  65. package/dist/components/json-tree-context.js +15 -0
  66. package/dist/components/json-tree-context.js.map +1 -0
  67. package/dist/components/json-tree-model.d.ts +56 -0
  68. package/dist/components/json-tree-model.d.ts.map +1 -0
  69. package/dist/components/json-tree-model.js +125 -0
  70. package/dist/components/json-tree-model.js.map +1 -0
  71. package/dist/components/json-tree-nodes.d.ts +30 -0
  72. package/dist/components/json-tree-nodes.d.ts.map +1 -0
  73. package/dist/components/json-tree-nodes.js +118 -0
  74. package/dist/components/json-tree-nodes.js.map +1 -0
  75. package/dist/components/json-tree.d.ts.map +1 -1
  76. package/dist/components/json-tree.js +7 -295
  77. package/dist/components/json-tree.js.map +1 -1
  78. package/dist/components/json-value-format.d.ts +20 -0
  79. package/dist/components/json-value-format.d.ts.map +1 -0
  80. package/dist/components/json-value-format.js +63 -0
  81. package/dist/components/json-value-format.js.map +1 -0
  82. package/dist/components/markdown-blocks.d.ts +38 -0
  83. package/dist/components/markdown-blocks.d.ts.map +1 -0
  84. package/dist/components/markdown-blocks.js +168 -0
  85. package/dist/components/markdown-blocks.js.map +1 -0
  86. package/dist/components/markdown-inline.d.ts +24 -0
  87. package/dist/components/markdown-inline.d.ts.map +1 -0
  88. package/dist/components/markdown-inline.js +257 -0
  89. package/dist/components/markdown-inline.js.map +1 -0
  90. package/dist/components/markdown.d.ts +3 -52
  91. package/dist/components/markdown.d.ts.map +1 -1
  92. package/dist/components/markdown.js +4 -376
  93. package/dist/components/markdown.js.map +1 -1
  94. package/dist/components/observer-registry.d.ts +38 -0
  95. package/dist/components/observer-registry.d.ts.map +1 -0
  96. package/dist/components/observer-registry.js +131 -0
  97. package/dist/components/observer-registry.js.map +1 -0
  98. package/dist/components/overflow-measure.d.ts +38 -0
  99. package/dist/components/overflow-measure.d.ts.map +1 -0
  100. package/dist/components/overflow-measure.js +54 -0
  101. package/dist/components/overflow-measure.js.map +1 -0
  102. package/dist/components/prose-regions.d.ts +81 -0
  103. package/dist/components/prose-regions.d.ts.map +1 -0
  104. package/dist/components/prose-regions.js +128 -0
  105. package/dist/components/prose-regions.js.map +1 -0
  106. package/dist/components/scroll-region.d.ts.map +1 -1
  107. package/dist/components/scroll-region.js +3 -298
  108. package/dist/components/scroll-region.js.map +1 -1
  109. package/dist/components/tab-stop-parse.d.ts +53 -0
  110. package/dist/components/tab-stop-parse.d.ts.map +1 -0
  111. package/dist/components/tab-stop-parse.js +202 -0
  112. package/dist/components/tab-stop-parse.js.map +1 -0
  113. package/dist/components/templated-text-field.d.ts.map +1 -1
  114. package/dist/components/templated-text-field.js +10 -148
  115. package/dist/components/templated-text-field.js.map +1 -1
  116. package/dist/components/templated-text-kwargs-editor.d.ts +24 -0
  117. package/dist/components/templated-text-kwargs-editor.d.ts.map +1 -0
  118. package/dist/components/templated-text-kwargs-editor.js +48 -0
  119. package/dist/components/templated-text-kwargs-editor.js.map +1 -0
  120. package/dist/components/templated-text-kwargs.d.ts +37 -0
  121. package/dist/components/templated-text-kwargs.d.ts.map +1 -0
  122. package/dist/components/templated-text-kwargs.js +66 -0
  123. package/dist/components/templated-text-kwargs.js.map +1 -0
  124. package/dist/components/templated-text-source.d.ts +33 -0
  125. package/dist/components/templated-text-source.d.ts.map +1 -0
  126. package/dist/components/templated-text-source.js +53 -0
  127. package/dist/components/templated-text-source.js.map +1 -0
  128. package/dist/components/tool-picker-parts.d.ts +39 -0
  129. package/dist/components/tool-picker-parts.d.ts.map +1 -0
  130. package/dist/components/tool-picker-parts.js +87 -0
  131. package/dist/components/tool-picker-parts.js.map +1 -0
  132. package/dist/components/tool-picker.d.ts +1 -2
  133. package/dist/components/tool-picker.d.ts.map +1 -1
  134. package/dist/components/tool-picker.js +4 -66
  135. package/dist/components/tool-picker.js.map +1 -1
  136. package/dist/components/version-history-panel.d.ts.map +1 -1
  137. package/dist/components/version-history-panel.js +7 -34
  138. package/dist/components/version-history-panel.js.map +1 -1
  139. package/dist/components/version-history-rows.d.ts +48 -0
  140. package/dist/components/version-history-rows.d.ts.map +1 -0
  141. package/dist/components/version-history-rows.js +51 -0
  142. package/dist/components/version-history-rows.js.map +1 -0
  143. package/dist/guards.d.ts +6 -0
  144. package/dist/guards.d.ts.map +1 -0
  145. package/dist/guards.js +8 -0
  146. package/dist/guards.js.map +1 -0
  147. package/dist/hooks/interactions-connection.d.ts +43 -0
  148. package/dist/hooks/interactions-connection.d.ts.map +1 -0
  149. package/dist/hooks/interactions-connection.js +171 -0
  150. package/dist/hooks/interactions-connection.js.map +1 -0
  151. package/dist/hooks/interactions-stream.d.ts +80 -0
  152. package/dist/hooks/interactions-stream.d.ts.map +1 -0
  153. package/dist/hooks/interactions-stream.js +233 -0
  154. package/dist/hooks/interactions-stream.js.map +1 -0
  155. package/dist/hooks/useApi.d.ts +2192 -2192
  156. package/dist/hooks/useApi.d.ts.map +1 -1
  157. package/dist/hooks/useSse.d.ts +3 -6
  158. package/dist/hooks/useSse.d.ts.map +1 -1
  159. package/dist/hooks/useSse.js +38 -451
  160. package/dist/hooks/useSse.js.map +1 -1
  161. package/dist/navigation/app-link.d.ts +25 -0
  162. package/dist/navigation/app-link.d.ts.map +1 -0
  163. package/dist/navigation/app-link.js +33 -0
  164. package/dist/navigation/app-link.js.map +1 -0
  165. package/dist/navigation/context.d.ts +3 -20
  166. package/dist/navigation/context.d.ts.map +1 -1
  167. package/dist/navigation/context.js +7 -267
  168. package/dist/navigation/context.js.map +1 -1
  169. package/dist/navigation/entry-state.d.ts +23 -0
  170. package/dist/navigation/entry-state.d.ts.map +1 -0
  171. package/dist/navigation/entry-state.js +39 -0
  172. package/dist/navigation/entry-state.js.map +1 -0
  173. package/dist/navigation/guard-registry.d.ts +30 -0
  174. package/dist/navigation/guard-registry.d.ts.map +1 -0
  175. package/dist/navigation/guard-registry.js +46 -0
  176. package/dist/navigation/guard-registry.js.map +1 -0
  177. package/dist/navigation/guarded-navigation.d.ts +24 -0
  178. package/dist/navigation/guarded-navigation.d.ts.map +1 -0
  179. package/dist/navigation/guarded-navigation.js +102 -0
  180. package/dist/navigation/guarded-navigation.js.map +1 -0
  181. package/dist/navigation/index.d.ts +3 -2
  182. package/dist/navigation/index.d.ts.map +1 -1
  183. package/dist/navigation/index.js +2 -1
  184. package/dist/navigation/index.js.map +1 -1
  185. package/dist/navigation/types.d.ts +8 -11
  186. package/dist/navigation/types.d.ts.map +1 -1
  187. package/dist/navigation/use-back-forward-guard.d.ts +5 -0
  188. package/dist/navigation/use-back-forward-guard.d.ts.map +1 -0
  189. package/dist/navigation/use-back-forward-guard.js +82 -0
  190. package/dist/navigation/use-back-forward-guard.js.map +1 -0
  191. package/dist/plugin/registry.d.ts +6 -15
  192. package/dist/plugin/registry.d.ts.map +1 -1
  193. package/dist/plugin/registry.js +83 -75
  194. package/dist/plugin/registry.js.map +1 -1
  195. package/dist/schema-form/SecretRefField.d.ts +2 -3
  196. package/dist/schema-form/SecretRefField.d.ts.map +1 -1
  197. package/dist/schema-form/SecretRefField.js +23 -12
  198. package/dist/schema-form/SecretRefField.js.map +1 -1
  199. package/dist/schema-form/classify.d.ts +1 -122
  200. package/dist/schema-form/classify.d.ts.map +1 -1
  201. package/dist/schema-form/classify.js +174 -237
  202. package/dist/schema-form/classify.js.map +1 -1
  203. package/dist/schema-form/default-value.d.ts.map +1 -1
  204. package/dist/schema-form/default-value.js +42 -19
  205. package/dist/schema-form/default-value.js.map +1 -1
  206. package/dist/schema-form/enum-field.d.ts +1 -1
  207. package/dist/schema-form/enum-field.d.ts.map +1 -1
  208. package/dist/schema-form/field-model.d.ts +121 -0
  209. package/dist/schema-form/field-model.d.ts.map +1 -0
  210. package/dist/schema-form/field-model.js +2 -0
  211. package/dist/schema-form/field-model.js.map +1 -0
  212. package/dist/schema-form/field-node.d.ts.map +1 -1
  213. package/dist/schema-form/field-node.js +25 -14
  214. package/dist/schema-form/field-node.js.map +1 -1
  215. package/dist/schema-form/media-field.d.ts +1 -1
  216. package/dist/schema-form/media-field.d.ts.map +1 -1
  217. package/dist/schema-form/media-field.js +47 -28
  218. package/dist/schema-form/media-field.js.map +1 -1
  219. package/dist/schema-form/string-annotations.d.ts +20 -0
  220. package/dist/schema-form/string-annotations.d.ts.map +1 -0
  221. package/dist/schema-form/string-annotations.js +105 -0
  222. package/dist/schema-form/string-annotations.js.map +1 -0
  223. package/dist/schema-form/string-field.d.ts +1 -1
  224. package/dist/schema-form/string-field.d.ts.map +1 -1
  225. package/dist/schema-form/union-field.d.ts +1 -1
  226. package/dist/schema-form/union-field.d.ts.map +1 -1
  227. package/dist/schema-form/union-field.js.map +1 -1
  228. package/dist/schema-form/union.d.ts +1 -1
  229. package/dist/schema-form/union.d.ts.map +1 -1
  230. package/dist/schema-form/validate.d.ts.map +1 -1
  231. package/dist/schema-form/validate.js +126 -105
  232. package/dist/schema-form/validate.js.map +1 -1
  233. package/dist/state-binding/AdapterMapping.d.ts.map +1 -1
  234. package/dist/state-binding/AdapterMapping.js +0 -0
  235. package/dist/state-binding/AdapterMapping.js.map +1 -1
  236. package/dist/state-binding/StateAttachRow.d.ts.map +1 -1
  237. package/dist/state-binding/StateAttachRow.js +52 -36
  238. package/dist/state-binding/StateAttachRow.js.map +1 -1
  239. package/dist/state-binding/adapter-mapping-row.d.ts +17 -0
  240. package/dist/state-binding/adapter-mapping-row.d.ts.map +1 -0
  241. package/dist/state-binding/adapter-mapping-row.js +87 -0
  242. package/dist/state-binding/adapter-mapping-row.js.map +1 -0
  243. package/dist/structured-output/StructuredOutput.d.ts.map +1 -1
  244. package/dist/structured-output/StructuredOutput.js +1 -3
  245. package/dist/structured-output/StructuredOutput.js.map +1 -1
  246. package/package.json +2 -2
  247. package/src/components/explorer-body.tsx +239 -0
  248. package/src/components/explorer-page-size.ts +39 -0
  249. package/src/components/explorer-tag-filter.tsx +80 -0
  250. package/src/components/explorer-tags.ts +64 -0
  251. package/src/components/explorer-view.tsx +114 -366
  252. package/src/components/extension-combo-builder.tsx +35 -152
  253. package/src/components/extension-combo-parts.tsx +237 -0
  254. package/src/components/fleet-report.tsx +97 -54
  255. package/src/components/icons/chrome-marks.tsx +195 -0
  256. package/src/components/icons/icon-frame.tsx +50 -0
  257. package/src/components/icons/index.ts +84 -0
  258. package/src/components/icons/nav-map.ts +55 -0
  259. package/src/components/icons/nav-marks.tsx +205 -0
  260. package/src/components/icons/status-marks.tsx +46 -0
  261. package/src/components/icons/theme-marks.tsx +33 -0
  262. package/src/components/json-diff.tsx +1 -4
  263. package/src/components/json-tree-context.ts +26 -0
  264. package/src/components/json-tree-model.ts +139 -0
  265. package/src/components/json-tree-nodes.tsx +224 -0
  266. package/src/components/json-tree.tsx +15 -434
  267. package/src/components/json-value-format.ts +64 -0
  268. package/src/components/markdown-blocks.ts +198 -0
  269. package/src/components/markdown-inline.tsx +365 -0
  270. package/src/components/markdown.tsx +5 -471
  271. package/src/components/observer-registry.ts +139 -0
  272. package/src/components/overflow-measure.ts +69 -0
  273. package/src/components/prose-regions.ts +153 -0
  274. package/src/components/scroll-region.tsx +20 -360
  275. package/src/components/tab-stop-parse.ts +217 -0
  276. package/src/components/templated-text-field.tsx +38 -330
  277. package/src/components/templated-text-kwargs-editor.tsx +147 -0
  278. package/src/components/templated-text-kwargs.ts +92 -0
  279. package/src/components/templated-text-source.tsx +226 -0
  280. package/src/components/tool-picker-parts.tsx +184 -0
  281. package/src/components/tool-picker.tsx +22 -114
  282. package/src/components/version-history-panel.tsx +38 -142
  283. package/src/components/version-history-rows.tsx +220 -0
  284. package/src/guards.ts +7 -0
  285. package/src/hooks/interactions-connection.ts +227 -0
  286. package/src/hooks/interactions-stream.ts +274 -0
  287. package/src/hooks/useSse.ts +50 -477
  288. package/src/navigation/app-link.tsx +70 -0
  289. package/src/navigation/context.tsx +11 -330
  290. package/src/navigation/entry-state.ts +42 -0
  291. package/src/navigation/guard-registry.ts +65 -0
  292. package/src/navigation/guarded-navigation.ts +147 -0
  293. package/src/navigation/index.ts +2 -2
  294. package/src/navigation/types.ts +8 -11
  295. package/src/navigation/use-back-forward-guard.ts +90 -0
  296. package/src/plugin/registry.ts +111 -90
  297. package/src/schema-form/SecretRefField.tsx +121 -71
  298. package/src/schema-form/classify.ts +244 -395
  299. package/src/schema-form/default-value.ts +48 -17
  300. package/src/schema-form/enum-field.tsx +1 -1
  301. package/src/schema-form/field-model.ts +133 -0
  302. package/src/schema-form/field-node.tsx +94 -38
  303. package/src/schema-form/media-field.tsx +134 -65
  304. package/src/schema-form/string-annotations.ts +111 -0
  305. package/src/schema-form/string-field.tsx +1 -1
  306. package/src/schema-form/union-field.tsx +2 -1
  307. package/src/schema-form/union.ts +1 -1
  308. package/src/schema-form/validate.ts +184 -103
  309. package/src/state-binding/AdapterMapping.tsx +0 -0
  310. package/src/state-binding/StateAttachRow.tsx +222 -147
  311. package/src/state-binding/adapter-mapping-row.tsx +232 -0
  312. package/src/structured-output/StructuredOutput.tsx +1 -4
  313. package/dist/components/icons.d.ts +0 -160
  314. package/dist/components/icons.d.ts.map +0 -1
  315. package/dist/components/icons.js +0 -160
  316. package/dist/components/icons.js.map +0 -1
  317. package/src/components/icons.tsx +0 -586
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The overflow measurement and the region-attribute contract: whether a box
3
+ * scrolls right now, and the conditional `tabindex`/`role`/`aria-label` a
4
+ * scrolling box wears. The leaf the React surface and the prose walk both build
5
+ * on; it imports neither of them, which is what breaks the write/measure cycle.
6
+ */
7
+ export const SCROLL_REGION_CLASS = 'tai-scroll-region';
8
+ export function overflows(element) {
9
+ return element.scrollWidth > element.clientWidth;
10
+ }
11
+ /**
12
+ * Whether the element should carry the region attributes right now.
13
+ *
14
+ * A region that stops overflowing keeps its tab stop for as long as it holds
15
+ * focus: taking `tabindex` off the focused element drops the reader onto the
16
+ * document body, and a window resize is not their doing. Only an element that
17
+ * already has the stop can be the active element, so this can hold a stop open
18
+ * but never invent one.
19
+ */
20
+ export function needsRegion(element) {
21
+ return overflows(element) || element.ownerDocument.activeElement === element;
22
+ }
23
+ /** Strips the region attributes from a surface that is not a region now. */
24
+ export function clearScrollRegionAttributes(wrapper) {
25
+ wrapper.removeAttribute('tabindex');
26
+ wrapper.removeAttribute('role');
27
+ wrapper.removeAttribute('aria-label');
28
+ }
29
+ /** Applies the same conditional attribute set `ScrollRegion` renders. */
30
+ export function applyScrollRegionAttributes(wrapper, label, scrolling) {
31
+ if (!scrolling) {
32
+ clearScrollRegionAttributes(wrapper);
33
+ return;
34
+ }
35
+ wrapper.setAttribute('tabindex', '0');
36
+ wrapper.setAttribute('role', 'region');
37
+ wrapper.setAttribute('aria-label', label);
38
+ }
39
+ /**
40
+ * Re-applies the region attributes to `tracked`, reading ALL of them before
41
+ * writing any.
42
+ *
43
+ * `needsRegion` reads `scrollWidth`, which forces layout if anything has been
44
+ * written since the last one — so measuring and writing surface by surface makes
45
+ * the browser re-lay-out the prose once per surface, every time. Two phases cost
46
+ * one layout for the whole batch however many surfaces it holds.
47
+ */
48
+ export function refreshRegions(tracked) {
49
+ const scrolling = tracked.map((entry) => needsRegion(entry.surface));
50
+ for (const [index, entry] of tracked.entries()) {
51
+ applyScrollRegionAttributes(entry.surface, entry.label, scrolling[index] === true);
52
+ }
53
+ }
54
+ //# sourceMappingURL=overflow-measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overflow-measure.js","sourceRoot":"","sources":["../../src/components/overflow-measure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,UAAU,SAAS,CAAC,OAAoB;IAC5C,OAAO,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AACnD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,KAAK,OAAO,CAAC;AAC/E,CAAC;AAQD,4EAA4E;AAC5E,MAAM,UAAU,2BAA2B,CAAC,OAAoB;IAC9D,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,2BAA2B,CACzC,OAAoB,EACpB,KAAa,EACb,SAAkB;IAElB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,2BAA2B,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,OAAkC;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,2BAA2B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * The prose DOM walk: finding every scrollable `<table>` and `<pre>` inside
3
+ * injected markup, naming each by the heading that precedes it, and disambiguating
4
+ * names a section shares. React never renders these surfaces, so they are located
5
+ * and wrapped imperatively.
6
+ */
7
+ import { type TrackedSurface } from './overflow-measure';
8
+ /**
9
+ * The names for a prose surface that has no heading above it.
10
+ *
11
+ * They say what the surface IS and nothing about which document it came from,
12
+ * because this walk cannot know: it instruments whatever markup the caller
13
+ * injected. A default that named one document put that document's name on every
14
+ * caller's regions, and a region a reader hears the wrong name for is worse than
15
+ * a plain one.
16
+ */
17
+ export declare const DEFAULT_PROSE_LABELS: {
18
+ readonly table: "Table";
19
+ readonly pre: "Code block";
20
+ };
21
+ /**
22
+ * The most surfaces one rendered document is given regions for.
23
+ *
24
+ * The prose is publisher-authored and unbounded in length, and every region is
25
+ * an entry in the landmark list a screen-reader user navigates the page by: a
26
+ * README with more surfaces than this turns that list into the very thing the
27
+ * regions exist to spare a reader. Past the cap a table still gets its scrolling
28
+ * wrapper — the wrapper is what keeps it inside the column — but no name and no
29
+ * tab stop, so the landmark list stays a list a person can read.
30
+ */
31
+ export declare const MAX_PROSE_REGIONS = 200;
32
+ /**
33
+ * The wrapper a prose table sits inside, creating it on first pass. Idempotent:
34
+ * a table already inside a `.tai-scroll-region` keeps the wrapper it has.
35
+ */
36
+ export declare function ensureScrollWrapper(table: HTMLTableElement): HTMLElement;
37
+ /** A scrollable prose surface, with the heading text that names it. */
38
+ interface LabelledProseSurface {
39
+ readonly element: HTMLElement;
40
+ readonly heading: string | undefined;
41
+ }
42
+ /**
43
+ * Every scrollable prose surface under `root` — each `<table>` and each `<pre>`
44
+ * — paired with the text of the nearest heading PRECEDING it, or `undefined`
45
+ * when no heading does.
46
+ *
47
+ * One query returns the headings and the surfaces interleaved in document order,
48
+ * so a single walk over that list names all of them: the heading a surface
49
+ * belongs to is the last one seen before reaching it. Naming each surface by
50
+ * searching backwards from it instead would re-read the same prose once per
51
+ * surface, at a cost that grows with the product of the two.
52
+ *
53
+ * Blank headings never enter the list, so a decorative empty heading names
54
+ * nothing and the section above it is used instead. A heading INSIDE a surface
55
+ * (a `<pre>` or a table cell holding one) comes AFTER that surface in document
56
+ * order and so can never name it, though it does name later surfaces — exactly
57
+ * as being the last heading before them implies.
58
+ *
59
+ * Read in full before the pass wraps anything, and safely so: a name depends
60
+ * only on what PRECEDES its surface, and `ensureScrollWrapper` puts the wrapper
61
+ * in the table's own place, moving nothing else and leaving every heading where
62
+ * it was — so a name stays true whether its table is wrapped yet or not.
63
+ */
64
+ export declare function labelledProseSurfaces(root: Element): LabelledProseSurface[];
65
+ /** A prose surface's scrolling box and the name it would take on its own. */
66
+ interface ProseSurfaceBox {
67
+ readonly surface: HTMLElement;
68
+ readonly name: string;
69
+ }
70
+ /**
71
+ * The same surfaces, each given a name no other one in the list carries.
72
+ *
73
+ * A name is only as useful as it is distinguishing, and one heading names every
74
+ * surface under it: two wide tables in one section, or two code blocks under no
75
+ * heading at all, would otherwise be two landmarks a reader hears identically
76
+ * and cannot choose between. A name more than one surface claims is therefore
77
+ * numbered, in document order, and a name only one surface claims is left alone.
78
+ */
79
+ export declare function uniquelyNamed(boxes: readonly ProseSurfaceBox[]): TrackedSurface[];
80
+ export {};
81
+ //# sourceMappingURL=prose-regions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prose-regions.d.ts","sourceRoot":"","sources":["../../src/components/prose-regions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB;;;CAAiD,CAAC;AAWnF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAQxE;AAQD,uEAAuE;AACvE,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAsBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,EAAE,CAgB3E;AAED,6EAA6E;AAC7E,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,cAAc,EAAE,CAWjF"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * The prose DOM walk: finding every scrollable `<table>` and `<pre>` inside
3
+ * injected markup, naming each by the heading that precedes it, and disambiguating
4
+ * names a section shares. React never renders these surfaces, so they are located
5
+ * and wrapped imperatively.
6
+ */
7
+ import { SCROLL_REGION_CLASS } from './overflow-measure';
8
+ /**
9
+ * The names for a prose surface that has no heading above it.
10
+ *
11
+ * They say what the surface IS and nothing about which document it came from,
12
+ * because this walk cannot know: it instruments whatever markup the caller
13
+ * injected. A default that named one document put that document's name on every
14
+ * caller's regions, and a region a reader hears the wrong name for is worse than
15
+ * a plain one.
16
+ */
17
+ export const DEFAULT_PROSE_LABELS = { table: 'Table', pre: 'Code block' };
18
+ const HEADING_SELECTOR = 'h1, h2, h3, h4, h5, h6';
19
+ /**
20
+ * Headings AND the surfaces they name, in one selector: a single query returns
21
+ * both interleaved in document order, which is what lets one walk name every
22
+ * surface (see `labelledProseSurfaces`).
23
+ */
24
+ const PROSE_SURFACE_SELECTOR = `${HEADING_SELECTOR}, table, pre`;
25
+ /**
26
+ * The most surfaces one rendered document is given regions for.
27
+ *
28
+ * The prose is publisher-authored and unbounded in length, and every region is
29
+ * an entry in the landmark list a screen-reader user navigates the page by: a
30
+ * README with more surfaces than this turns that list into the very thing the
31
+ * regions exist to spare a reader. Past the cap a table still gets its scrolling
32
+ * wrapper — the wrapper is what keeps it inside the column — but no name and no
33
+ * tab stop, so the landmark list stays a list a person can read.
34
+ */
35
+ export const MAX_PROSE_REGIONS = 200;
36
+ /**
37
+ * The wrapper a prose table sits inside, creating it on first pass. Idempotent:
38
+ * a table already inside a `.tai-scroll-region` keeps the wrapper it has.
39
+ */
40
+ export function ensureScrollWrapper(table) {
41
+ const parent = table.parentElement;
42
+ if (parent?.classList.contains(SCROLL_REGION_CLASS) === true)
43
+ return parent;
44
+ const wrapper = table.ownerDocument.createElement('div');
45
+ wrapper.className = SCROLL_REGION_CLASS;
46
+ table.replaceWith(wrapper);
47
+ wrapper.append(table);
48
+ return wrapper;
49
+ }
50
+ /**
51
+ * The text of the last heading in `headings` that does not ENCLOSE `surface`.
52
+ *
53
+ * A heading wrapping the surface does precede it in document order, but it is
54
+ * not a section the surface sits UNDER, so it is stepped over in favour of the
55
+ * heading before it — which is the answer an outward walk from the surface
56
+ * reaches. In well-formed prose no heading contains a table or a code block, so
57
+ * this returns the last heading on the first look.
58
+ */
59
+ function namingHeadingText(headings, surface) {
60
+ for (let index = headings.length - 1; index >= 0; index -= 1) {
61
+ const heading = headings[index];
62
+ if (heading !== undefined && !heading.element.contains(surface))
63
+ return heading.text;
64
+ }
65
+ return undefined;
66
+ }
67
+ /**
68
+ * Every scrollable prose surface under `root` — each `<table>` and each `<pre>`
69
+ * — paired with the text of the nearest heading PRECEDING it, or `undefined`
70
+ * when no heading does.
71
+ *
72
+ * One query returns the headings and the surfaces interleaved in document order,
73
+ * so a single walk over that list names all of them: the heading a surface
74
+ * belongs to is the last one seen before reaching it. Naming each surface by
75
+ * searching backwards from it instead would re-read the same prose once per
76
+ * surface, at a cost that grows with the product of the two.
77
+ *
78
+ * Blank headings never enter the list, so a decorative empty heading names
79
+ * nothing and the section above it is used instead. A heading INSIDE a surface
80
+ * (a `<pre>` or a table cell holding one) comes AFTER that surface in document
81
+ * order and so can never name it, though it does name later surfaces — exactly
82
+ * as being the last heading before them implies.
83
+ *
84
+ * Read in full before the pass wraps anything, and safely so: a name depends
85
+ * only on what PRECEDES its surface, and `ensureScrollWrapper` puts the wrapper
86
+ * in the table's own place, moving nothing else and leaving every heading where
87
+ * it was — so a name stays true whether its table is wrapped yet or not.
88
+ */
89
+ export function labelledProseSurfaces(root) {
90
+ const headings = [];
91
+ const surfaces = [];
92
+ for (const node of root.querySelectorAll(PROSE_SURFACE_SELECTOR)) {
93
+ if (node.matches(HEADING_SELECTOR)) {
94
+ // textContent is nullable under strict DOM typings; the local eslint
95
+ // profile assumes non-null, so the necessary guard trips its rule.
96
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
97
+ const text = (node.textContent ?? '').trim();
98
+ if (text !== '')
99
+ headings.push({ element: node, text });
100
+ continue;
101
+ }
102
+ surfaces.push({ element: node, heading: namingHeadingText(headings, node) });
103
+ }
104
+ return surfaces;
105
+ }
106
+ /**
107
+ * The same surfaces, each given a name no other one in the list carries.
108
+ *
109
+ * A name is only as useful as it is distinguishing, and one heading names every
110
+ * surface under it: two wide tables in one section, or two code blocks under no
111
+ * heading at all, would otherwise be two landmarks a reader hears identically
112
+ * and cannot choose between. A name more than one surface claims is therefore
113
+ * numbered, in document order, and a name only one surface claims is left alone.
114
+ */
115
+ export function uniquelyNamed(boxes) {
116
+ const claims = new Map();
117
+ for (const { name } of boxes)
118
+ claims.set(name, (claims.get(name) ?? 0) + 1);
119
+ const taken = new Map();
120
+ return boxes.map(({ surface, name }) => {
121
+ if (claims.get(name) === 1)
122
+ return { surface, label: name };
123
+ const ordinal = (taken.get(name) ?? 0) + 1;
124
+ taken.set(name, ordinal);
125
+ return { surface, label: `${name} (${String(ordinal)})` };
126
+ });
127
+ }
128
+ //# sourceMappingURL=prose-regions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prose-regions.js","sourceRoot":"","sources":["../../src/components/prose-regions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-region.d.ts","sourceRoot":"","sources":["../../src/components/scroll-region.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CACpC;AAeD,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAoND,oFAAoF;AACpF,MAAM,WAAW,wBAAwB;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS,EACjC,KAAK,EAAE,MAAM,GACZ,wBAAwB,CA4D1B;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,iBAAiB,+BAenB;AAgKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAC,WAAW,CAAC,CA0H1F"}
1
+ {"version":3,"file":"scroll-region.d.ts","sourceRoot":"","sources":["../../src/components/scroll-region.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAsBxE,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CACpC;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAuBD,oFAAoF;AACpF,MAAM,WAAW,wBAAwB;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS,EACjC,KAAK,EAAE,MAAM,GACZ,wBAAwB,CA4D1B;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,iBAAiB,+BAenB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAC,WAAW,CAAC,CA0H1F"}
@@ -24,52 +24,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
24
24
  * would never notice one being swapped for another.
25
25
  */
26
26
  import { useCallback, useState } from 'react';
27
- /**
28
- * The names for a prose surface that has no heading above it.
29
- *
30
- * They say what the surface IS and nothing about which document it came from,
31
- * because this hook cannot know: it instruments whatever markup the caller
32
- * injected. A default that named one document put that document's name on every
33
- * caller's regions, and a region a reader hears the wrong name for is worse than
34
- * a plain one. A caller that CAN say which document it is showing passes its own
35
- * `labels`; a surface with a heading above it takes that heading instead, which
36
- * is the usual case.
37
- */
38
- const DEFAULT_PROSE_LABELS = { table: 'Table', pre: 'Code block' };
39
- const HEADING_SELECTOR = 'h1, h2, h3, h4, h5, h6';
40
- /**
41
- * Headings AND the surfaces they name, in one selector: a single query returns
42
- * both interleaved in document order, which is what lets one walk name every
43
- * surface (see `labelledProseSurfaces`).
44
- */
45
- const PROSE_SURFACE_SELECTOR = `${HEADING_SELECTOR}, table, pre`;
46
- const SCROLL_REGION_CLASS = 'tai-scroll-region';
47
- /**
48
- * The most surfaces one rendered document is given regions for.
49
- *
50
- * The prose is publisher-authored and unbounded in length, and every region is
51
- * an entry in the landmark list a screen-reader user navigates the page by: a
52
- * README with more surfaces than this turns that list into the very thing the
53
- * regions exist to spare a reader. Past the cap a table still gets its scrolling
54
- * wrapper — the wrapper is what keeps it inside the column — but no name and no
55
- * tab stop, so the landmark list stays a list a person can read.
56
- */
57
- const MAX_PROSE_REGIONS = 200;
58
- function overflows(element) {
59
- return element.scrollWidth > element.clientWidth;
60
- }
61
- /**
62
- * Whether the element should carry the region attributes right now.
63
- *
64
- * A region that stops overflowing keeps its tab stop for as long as it holds
65
- * focus: taking `tabindex` off the focused element drops the reader onto the
66
- * document body, and a window resize is not their doing. Only an element that
67
- * already has the stop can be the active element, so this can hold a stop open
68
- * but never invent one.
69
- */
70
- function needsRegion(element) {
71
- return overflows(element) || element.ownerDocument.activeElement === element;
72
- }
27
+ import { needsRegion, refreshRegions, clearScrollRegionAttributes, SCROLL_REGION_CLASS, } from './overflow-measure';
28
+ import { holdResizeTarget, releaseResizeTarget, holdContentTarget, releaseContentTarget, } from './observer-registry';
29
+ import { DEFAULT_PROSE_LABELS, MAX_PROSE_REGIONS, labelledProseSurfaces, ensureScrollWrapper, uniquelyNamed, } from './prose-regions';
73
30
  /**
74
31
  * Attaches `element` to a consumer ref of either form, and returns the detach
75
32
  * for it. A callback ref that answers with its own cleanup gets that cleanup
@@ -92,135 +49,6 @@ function attachRef(ref, element) {
92
49
  ref(null);
93
50
  };
94
51
  }
95
- /**
96
- * The handlers waiting on each observed element. A SET, not a single handler:
97
- * one element can be both a box and another box's child — a `<pre>` inside a
98
- * `ScrollRegion` is exactly that — and both owners must still hear its resize.
99
- */
100
- const resizeHandlers = new WeakMap();
101
- let sharedResize;
102
- function sharedResizeObserver() {
103
- sharedResize ??= new ResizeObserver((entries) => {
104
- // A box and its children are observed separately, so one frame can deliver
105
- // several entries owned by the same handler; measuring once is enough.
106
- const fired = new Set();
107
- for (const entry of entries) {
108
- for (const handler of resizeHandlers.get(entry.target) ?? [])
109
- fired.add(handler);
110
- }
111
- for (const handler of fired)
112
- handler();
113
- });
114
- return sharedResize;
115
- }
116
- /**
117
- * Registers `handler` for `target`'s resizes, observing the element only the
118
- * first time anyone asks for it: re-observing an element already under a
119
- * `ResizeObserver` re-arms its initial notification, which spends a forced
120
- * layout on a measurement nobody asked for.
121
- */
122
- function holdResizeTarget(target, handler) {
123
- const handlers = resizeHandlers.get(target);
124
- if (handlers !== undefined) {
125
- handlers.add(handler);
126
- return;
127
- }
128
- // Registered before the element is observed, so the initial notification the
129
- // observation arms reaches the handler that asked for it.
130
- resizeHandlers.set(target, new Set([handler]));
131
- sharedResizeObserver().observe(target);
132
- }
133
- /** Stops observing `target` for `handler`, and entirely once nobody wants it. */
134
- function releaseResizeTarget(target, handler) {
135
- const handlers = resizeHandlers.get(target);
136
- if (handlers === undefined)
137
- return;
138
- handlers.delete(handler);
139
- if (handlers.size > 0)
140
- return;
141
- resizeHandlers.delete(target);
142
- sharedResizeObserver().unobserve(target);
143
- }
144
- /** What a box wants to hear about: its content replaced, appended or edited. */
145
- const CONTENT_OBSERVER_INIT = {
146
- childList: true,
147
- subtree: true,
148
- characterData: true,
149
- };
150
- /**
151
- * The handlers waiting on each observed box, and the boxes the shared observer
152
- * currently holds. Keyed by `Node` because a `characterData` record names the
153
- * TEXT node that changed, and the walk to the box that owns it goes through
154
- * whatever nodes lie between.
155
- */
156
- const contentHandlers = new WeakMap();
157
- const contentTargets = new Set();
158
- let sharedContent;
159
- /** Registrations the shared observer still holds for released boxes. */
160
- let staleContentTargets = 0;
161
- function deliverContentRecords(records) {
162
- const fired = new Set();
163
- for (const record of records) {
164
- // A `childList` record names the changed parent and a `characterData` record
165
- // the text node itself, either of them at any depth under a box. Every box
166
- // on the ancestor chain therefore owns the change, exactly as a separate
167
- // observer on each of them would have seen it — a `<pre>` inside a
168
- // `ScrollRegion` measures both.
169
- for (let node = record.target; node !== null; node = node.parentNode) {
170
- for (const handler of contentHandlers.get(node) ?? [])
171
- fired.add(handler);
172
- }
173
- }
174
- for (const handler of fired)
175
- handler();
176
- }
177
- function sharedContentObserver() {
178
- sharedContent ??= new MutationObserver(deliverContentRecords);
179
- return sharedContent;
180
- }
181
- function holdContentTarget(target, handler) {
182
- let handlers = contentHandlers.get(target);
183
- if (handlers === undefined) {
184
- handlers = new Set();
185
- contentHandlers.set(target, handlers);
186
- contentTargets.add(target);
187
- sharedContentObserver().observe(target, CONTENT_OBSERVER_INIT);
188
- }
189
- handlers.add(handler);
190
- }
191
- /**
192
- * Stops watching `target`'s content for `handler`.
193
- *
194
- * `MutationObserver` has no `unobserve`: the only way to drop one registration
195
- * is to disconnect the observer and re-observe everything else, which would cost
196
- * one registration per surviving box every time a box unmounts. A released box
197
- * is therefore dropped from the handler map at once — its records find no
198
- * handler and are ignored — and the observer is rebuilt only once the dead
199
- * registrations outnumber the live ones, which keeps the total registration work
200
- * proportional to the number of mounts. Records already queued survive the
201
- * rebuild: they are taken off the observer and delivered by hand.
202
- */
203
- function releaseContentTarget(target, handler) {
204
- const handlers = contentHandlers.get(target);
205
- if (handlers === undefined)
206
- return;
207
- handlers.delete(handler);
208
- if (handlers.size > 0)
209
- return;
210
- contentHandlers.delete(target);
211
- contentTargets.delete(target);
212
- staleContentTargets += 1;
213
- if (staleContentTargets <= contentTargets.size)
214
- return;
215
- const observer = sharedContentObserver();
216
- const queued = observer.takeRecords();
217
- observer.disconnect();
218
- staleContentTargets = 0;
219
- for (const live of contentTargets)
220
- observer.observe(live, CONTENT_OBSERVER_INIT);
221
- if (queued.length > 0)
222
- deliverContentRecords(queued);
223
- }
224
52
  /**
225
53
  * The conditional region attributes for a scrolling box, alongside the ref that
226
54
  * names it. The ref must go on the scrolling box ITSELF — a `<pre>`, a JSON
@@ -299,129 +127,6 @@ export function ScrollRegion({ label, children, className, style, 'data-testid':
299
127
  const region = useOverflowRegion(ref, label);
300
128
  return (_jsx("div", { className: className === undefined ? SCROLL_REGION_CLASS : `${SCROLL_REGION_CLASS} ${className}`, style: style, "data-testid": testId, ...region, children: children }));
301
129
  }
302
- /**
303
- * The wrapper a prose table sits inside, creating it on first pass. Idempotent:
304
- * a table already inside a `.tai-scroll-region` keeps the wrapper it has.
305
- */
306
- function ensureScrollWrapper(table) {
307
- const parent = table.parentElement;
308
- if (parent?.classList.contains(SCROLL_REGION_CLASS) === true)
309
- return parent;
310
- const wrapper = table.ownerDocument.createElement('div');
311
- wrapper.className = SCROLL_REGION_CLASS;
312
- table.replaceWith(wrapper);
313
- wrapper.append(table);
314
- return wrapper;
315
- }
316
- /**
317
- * The text of the last heading in `headings` that does not ENCLOSE `surface`.
318
- *
319
- * A heading wrapping the surface does precede it in document order, but it is
320
- * not a section the surface sits UNDER, so it is stepped over in favour of the
321
- * heading before it — which is the answer an outward walk from the surface
322
- * reaches. In well-formed prose no heading contains a table or a code block, so
323
- * this returns the last heading on the first look.
324
- */
325
- function namingHeadingText(headings, surface) {
326
- for (let index = headings.length - 1; index >= 0; index -= 1) {
327
- const heading = headings[index];
328
- if (heading !== undefined && !heading.element.contains(surface))
329
- return heading.text;
330
- }
331
- return undefined;
332
- }
333
- /**
334
- * Every scrollable prose surface under `root` — each `<table>` and each `<pre>`
335
- * — paired with the text of the nearest heading PRECEDING it, or `undefined`
336
- * when no heading does.
337
- *
338
- * One query returns the headings and the surfaces interleaved in document order,
339
- * so a single walk over that list names all of them: the heading a surface
340
- * belongs to is the last one seen before reaching it. Naming each surface by
341
- * searching backwards from it instead would re-read the same prose once per
342
- * surface, at a cost that grows with the product of the two.
343
- *
344
- * Blank headings never enter the list, so a decorative empty heading names
345
- * nothing and the section above it is used instead. A heading INSIDE a surface
346
- * (a `<pre>` or a table cell holding one) comes AFTER that surface in document
347
- * order and so can never name it, though it does name later surfaces — exactly
348
- * as being the last heading before them implies.
349
- *
350
- * Read in full before the pass wraps anything, and safely so: a name depends
351
- * only on what PRECEDES its surface, and `ensureScrollWrapper` puts the wrapper
352
- * in the table's own place, moving nothing else and leaving every heading where
353
- * it was — so a name stays true whether its table is wrapped yet or not.
354
- */
355
- function labelledProseSurfaces(root) {
356
- const headings = [];
357
- const surfaces = [];
358
- for (const node of root.querySelectorAll(PROSE_SURFACE_SELECTOR)) {
359
- if (node.matches(HEADING_SELECTOR)) {
360
- // textContent is nullable under strict DOM typings; the local eslint
361
- // profile assumes non-null, so the necessary guard trips its rule.
362
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
363
- const text = (node.textContent ?? '').trim();
364
- if (text !== '')
365
- headings.push({ element: node, text });
366
- continue;
367
- }
368
- surfaces.push({ element: node, heading: namingHeadingText(headings, node) });
369
- }
370
- return surfaces;
371
- }
372
- /**
373
- * The same surfaces, each given a name no other one in the list carries.
374
- *
375
- * A name is only as useful as it is distinguishing, and one heading names every
376
- * surface under it: two wide tables in one section, or two code blocks under no
377
- * heading at all, would otherwise be two landmarks a reader hears identically
378
- * and cannot choose between. A name more than one surface claims is therefore
379
- * numbered, in document order, and a name only one surface claims is left alone.
380
- */
381
- function uniquelyNamed(boxes) {
382
- const claims = new Map();
383
- for (const { name } of boxes)
384
- claims.set(name, (claims.get(name) ?? 0) + 1);
385
- const taken = new Map();
386
- return boxes.map(({ surface, name }) => {
387
- if (claims.get(name) === 1)
388
- return { surface, label: name };
389
- const ordinal = (taken.get(name) ?? 0) + 1;
390
- taken.set(name, ordinal);
391
- return { surface, label: `${name} (${String(ordinal)})` };
392
- });
393
- }
394
- /** Strips the region attributes from a surface that is not a region now. */
395
- function clearScrollRegionAttributes(wrapper) {
396
- wrapper.removeAttribute('tabindex');
397
- wrapper.removeAttribute('role');
398
- wrapper.removeAttribute('aria-label');
399
- }
400
- /** Applies the same conditional attribute set `ScrollRegion` renders. */
401
- function applyScrollRegionAttributes(wrapper, label, scrolling) {
402
- if (!scrolling) {
403
- clearScrollRegionAttributes(wrapper);
404
- return;
405
- }
406
- wrapper.setAttribute('tabindex', '0');
407
- wrapper.setAttribute('role', 'region');
408
- wrapper.setAttribute('aria-label', label);
409
- }
410
- /**
411
- * Re-applies the region attributes to `tracked`, reading ALL of them before
412
- * writing any.
413
- *
414
- * `needsRegion` reads `scrollWidth`, which forces layout if anything has been
415
- * written since the last one — so measuring and writing surface by surface makes
416
- * the browser re-lay-out the prose once per surface, every time. Two phases cost
417
- * one layout for the whole batch however many surfaces it holds.
418
- */
419
- function refreshRegions(tracked) {
420
- const scrolling = tracked.map((entry) => needsRegion(entry.surface));
421
- for (const [index, entry] of tracked.entries()) {
422
- applyScrollRegionAttributes(entry.surface, entry.label, scrolling[index] === true);
423
- }
424
- }
425
130
  /**
426
131
  * Instruments the scrollable surfaces under the element the returned ref is
427
132
  * attached to — every `<table>` and every `<pre>` — as scroll regions. React
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-region.js","sourceRoot":"","sources":["../../src/components/scroll-region.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scroll-region.js","sourceRoot":"","sources":["../../src/components/scroll-region.tsx"],"names":[],"mappings":"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"}