@fusion.dev/helix-headless 0.147.0 → 0.149.0

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 (296) hide show
  1. package/custom-elements.json +11222 -2332
  2. package/dist/accordion/item/accordion-item.d.ts +5 -2
  3. package/dist/accordion/item/accordion-item.js +11 -7
  4. package/dist/accordion/root/accordion-root.js +4 -6
  5. package/dist/announcement/root/announcement-root.d.ts +61 -5
  6. package/dist/announcement/root/announcement-root.js +126 -20
  7. package/dist/area-chart/root/area-chart-root.d.ts +11 -0
  8. package/dist/area-chart/root/area-chart-root.js +21 -9
  9. package/dist/avatar/group/avatar-group.d.ts +10 -2
  10. package/dist/avatar/group/avatar-group.js +10 -5
  11. package/dist/badge/count.d.ts +19 -0
  12. package/dist/badge/count.js +20 -0
  13. package/dist/badge/root/badge-root.d.ts +6 -2
  14. package/dist/badge/root/badge-root.js +8 -22
  15. package/dist/bar-chart/root/bar-chart-root.d.ts +13 -1
  16. package/dist/bar-chart/root/bar-chart-root.js +17 -4
  17. package/dist/blockquote/root/blockquote-root.d.ts +66 -8
  18. package/dist/blockquote/root/blockquote-root.js +85 -8
  19. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +2 -2
  20. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +8 -1
  21. package/dist/breadcrumbs/root/breadcrumbs-root.js +5 -2
  22. package/dist/button/root/button-root.d.ts +10 -1
  23. package/dist/button/root/button-root.js +3 -2
  24. package/dist/button-group/arrows.d.ts +14 -0
  25. package/dist/button-group/arrows.js +10 -0
  26. package/dist/button-group/root/button-group-root.d.ts +144 -3
  27. package/dist/button-group/root/button-group-root.js +142 -2
  28. package/dist/callout/root/callout-root.d.ts +16 -2
  29. package/dist/callout/root/callout-root.js +16 -4
  30. package/dist/canvas/describe.d.ts +10 -0
  31. package/dist/canvas/describe.js +9 -0
  32. package/dist/canvas/edge-pan.d.ts +61 -0
  33. package/dist/canvas/edge-pan.js +63 -0
  34. package/dist/canvas/neighbor.d.ts +17 -0
  35. package/dist/canvas/neighbor.js +1 -0
  36. package/dist/canvas/node/canvas-node.d.ts +12 -2
  37. package/dist/canvas/node/canvas-node.js +8 -3
  38. package/dist/canvas/root/canvas-document.d.ts +10 -0
  39. package/dist/canvas/root/canvas-document.js +1 -0
  40. package/dist/canvas/root/canvas-root.d.ts +168 -9
  41. package/dist/canvas/root/canvas-root.js +239 -69
  42. package/dist/canvas/snap.d.ts +42 -0
  43. package/dist/canvas/snap.js +32 -0
  44. package/dist/carousel/root/carousel-root.d.ts +9 -3
  45. package/dist/carousel/root/carousel-root.js +17 -10
  46. package/dist/chat/composer/chat-composer.d.ts +5 -0
  47. package/dist/chat/composer/chat-composer.js +4 -1
  48. package/dist/chat/message/chat-message.d.ts +9 -5
  49. package/dist/chat/message/chat-message.js +8 -4
  50. package/dist/chat/naming.js +2 -2
  51. package/dist/chat/root/chat-root.d.ts +40 -4
  52. package/dist/chat/root/chat-root.js +38 -14
  53. package/dist/checkbox/root/checkbox-root.d.ts +11 -0
  54. package/dist/checkbox/root/checkbox-root.js +8 -2
  55. package/dist/checkbox-group/root/checkbox-group-root.d.ts +24 -0
  56. package/dist/checkbox-group/root/checkbox-group-root.js +28 -12
  57. package/dist/checkbox-group/select-all.d.ts +11 -0
  58. package/dist/checkbox-group/select-all.js +5 -0
  59. package/dist/code-block/root/code-block-root.d.ts +20 -8
  60. package/dist/code-block/root/code-block-root.js +16 -5
  61. package/dist/color-input/root/color-input-root.d.ts +13 -0
  62. package/dist/color-input/root/color-input-root.js +18 -5
  63. package/dist/color-picker/root/color-picker-root.d.ts +19 -3
  64. package/dist/color-picker/root/color-picker-root.js +52 -24
  65. package/dist/color-picker/wheel.d.ts +11 -0
  66. package/dist/color-picker/wheel.js +9 -0
  67. package/dist/combobox/root/combobox-root.d.ts +106 -18
  68. package/dist/combobox/root/combobox-root.js +101 -26
  69. package/dist/command/root/command-root.d.ts +19 -9
  70. package/dist/command/root/command-root.js +9 -4
  71. package/dist/copy-button/root/copy-button-root.d.ts +5 -0
  72. package/dist/copy-button/root/copy-button-root.js +7 -2
  73. package/dist/data-table/root/data-table-root.d.ts +171 -29
  74. package/dist/data-table/root/data-table-root.js +284 -161
  75. package/dist/date-input/root/date-input-root.d.ts +32 -9
  76. package/dist/date-input/root/date-input-root.js +66 -44
  77. package/dist/date-picker/root/date-picker-root.d.ts +38 -15
  78. package/dist/date-picker/root/date-picker-root.js +52 -33
  79. package/dist/description-list/item/description-list-item.d.ts +4 -0
  80. package/dist/description-list/item/description-list-item.js +7 -1
  81. package/dist/dialog/root/dialog-root.d.ts +12 -1
  82. package/dist/dialog/root/dialog-root.js +11 -4
  83. package/dist/divider/root/divider-root.d.ts +45 -16
  84. package/dist/divider/root/divider-root.js +28 -4
  85. package/dist/donut-chart/root/donut-chart-root.d.ts +5 -0
  86. package/dist/donut-chart/root/donut-chart-root.js +8 -5
  87. package/dist/drawer/root/drawer-root.d.ts +12 -1
  88. package/dist/drawer/root/drawer-root.js +9 -2
  89. package/dist/drilldown/item/drilldown-item.js +3 -4
  90. package/dist/drilldown/root/drilldown-root.d.ts +5 -0
  91. package/dist/drilldown/root/drilldown-root.js +4 -1
  92. package/dist/element-events.generated.js +26 -3
  93. package/dist/empty/root/empty-root.d.ts +17 -3
  94. package/dist/empty/root/empty-root.js +29 -5
  95. package/dist/file-input/root/file-input-root.d.ts +18 -3
  96. package/dist/file-input/root/file-input-root.js +34 -18
  97. package/dist/file-input/status.js +2 -1
  98. package/dist/filter-input/chip/filter-chip.d.ts +13 -0
  99. package/dist/filter-input/chip/filter-chip.js +7 -3
  100. package/dist/filter-input/menu/filter-menu.d.ts +5 -0
  101. package/dist/filter-input/menu/filter-menu.js +3 -1
  102. package/dist/filter-input/root/filter-input-root.d.ts +20 -3
  103. package/dist/filter-input/root/filter-input-root.js +8 -4
  104. package/dist/format-date/fields.d.ts +20 -0
  105. package/dist/format-date/fields.js +14 -0
  106. package/dist/format-date/options.d.ts +2 -1
  107. package/dist/format-date/options.js +9 -38
  108. package/dist/format-date/root/format-date-root.d.ts +55 -5
  109. package/dist/format-date/root/format-date-root.js +29 -34
  110. package/dist/graph/root/graph-model.d.ts +11 -0
  111. package/dist/graph/root/graph-model.js +4 -0
  112. package/dist/graph/root/graph-root.d.ts +101 -14
  113. package/dist/graph/root/graph-root.js +140 -46
  114. package/dist/heatmap/root/heatmap-root.d.ts +37 -4
  115. package/dist/heatmap/root/heatmap-root.js +51 -16
  116. package/dist/icon-button/root/icon-button-root.d.ts +5 -0
  117. package/dist/icon-button/root/icon-button-root.js +1 -0
  118. package/dist/image/root/image-root.d.ts +11 -0
  119. package/dist/input/root/input-root.d.ts +5 -0
  120. package/dist/input/root/input-root.js +4 -1
  121. package/dist/kbd/root/kbd-root.js +1 -2
  122. package/dist/legend/root/legend-root.js +4 -17
  123. package/dist/lightbox/root/lightbox-root.d.ts +14 -4
  124. package/dist/lightbox/root/lightbox-root.js +25 -7
  125. package/dist/line-chart/root/line-chart-root.d.ts +5 -0
  126. package/dist/line-chart/root/line-chart-root.js +4 -2
  127. package/dist/list/item/list-item.d.ts +32 -0
  128. package/dist/list/item/list-item.js +34 -7
  129. package/dist/list/root/list-root.d.ts +87 -0
  130. package/dist/list/root/list-root.js +119 -23
  131. package/dist/listbox/reorder/index.d.ts +1 -0
  132. package/dist/listbox/reorder/index.js +4 -0
  133. package/dist/listbox/reorder/listbox-reorder.d.ts +83 -0
  134. package/dist/listbox/reorder/listbox-reorder.js +151 -0
  135. package/dist/listbox/root/listbox-root.d.ts +185 -33
  136. package/dist/listbox/root/listbox-root.js +166 -136
  137. package/dist/loader/root/loader-root.d.ts +5 -0
  138. package/dist/loader/root/loader-root.js +3 -1
  139. package/dist/map/area/map-area.d.ts +5 -0
  140. package/dist/map/area/map-area.js +3 -1
  141. package/dist/map/buildings/map-buildings.d.ts +5 -0
  142. package/dist/map/buildings/map-buildings.js +3 -1
  143. package/dist/map/contours/map-contours.d.ts +5 -0
  144. package/dist/map/contours/map-contours.js +3 -1
  145. package/dist/map/landcover/map-landcover.d.ts +5 -0
  146. package/dist/map/landcover/map-landcover.js +3 -1
  147. package/dist/map/marker/map-marker.d.ts +18 -2
  148. package/dist/map/marker/map-marker.js +13 -5
  149. package/dist/map/points/map-points.d.ts +5 -0
  150. package/dist/map/points/map-points.js +6 -4
  151. package/dist/map/position/map-position.d.ts +5 -0
  152. package/dist/map/position/map-position.js +3 -1
  153. package/dist/map/raster/map-raster.d.ts +5 -0
  154. package/dist/map/raster/map-raster.js +3 -1
  155. package/dist/map/root/map-root.d.ts +73 -16
  156. package/dist/map/root/map-root.js +122 -44
  157. package/dist/map/route/map-route.d.ts +5 -0
  158. package/dist/map/route/map-route.js +3 -1
  159. package/dist/map/terrain/map-terrain.d.ts +5 -0
  160. package/dist/map/terrain/map-terrain.js +3 -1
  161. package/dist/megamenu/root/megamenu-root.js +4 -11
  162. package/dist/menu/root/menu-root.d.ts +7 -2
  163. package/dist/menu/root/menu-root.js +3 -1
  164. package/dist/meter/root/meter-root.d.ts +16 -3
  165. package/dist/meter/root/meter-root.js +12 -5
  166. package/dist/navigation/root/navigation-root.d.ts +5 -0
  167. package/dist/navigation/root/navigation-root.js +7 -8
  168. package/dist/notifications/group/notification-group.d.ts +8 -1
  169. package/dist/notifications/group/notification-group.js +12 -6
  170. package/dist/notifications/notification/notification.d.ts +17 -1
  171. package/dist/notifications/notification/notification.js +6 -2
  172. package/dist/notifications/root/notifications-root.d.ts +49 -5
  173. package/dist/notifications/root/notifications-root.js +36 -8
  174. package/dist/number-input/root/number-input-root.d.ts +21 -8
  175. package/dist/number-input/root/number-input-root.js +26 -11
  176. package/dist/object-inspector/root/object-inspector-root.d.ts +56 -13
  177. package/dist/object-inspector/root/object-inspector-root.js +41 -30
  178. package/dist/outline/root/outline-root.d.ts +5 -0
  179. package/dist/outline/root/outline-root.js +3 -1
  180. package/dist/pagination/root/pagination-root.d.ts +7 -1
  181. package/dist/pagination/root/pagination-root.js +16 -7
  182. package/dist/pagination/size/pagination-size.d.ts +8 -3
  183. package/dist/pagination/size/pagination-size.js +5 -3
  184. package/dist/pagination/summary/pagination-summary.d.ts +8 -6
  185. package/dist/pagination/summary/pagination-summary.js +4 -9
  186. package/dist/pin-input/code.d.ts +23 -0
  187. package/dist/pin-input/code.js +21 -0
  188. package/dist/pin-input/root/pin-input-root.d.ts +9 -3
  189. package/dist/pin-input/root/pin-input-root.js +13 -23
  190. package/dist/popover/root/popover-root.d.ts +12 -2
  191. package/dist/popover/root/popover-root.js +10 -4
  192. package/dist/progress/root/progress-root.d.ts +7 -2
  193. package/dist/progress/root/progress-root.js +5 -2
  194. package/dist/qr-code/name.d.ts +3 -2
  195. package/dist/qr-code/name.js +2 -2
  196. package/dist/qr-code/root/qr-code-root.d.ts +26 -5
  197. package/dist/qr-code/root/qr-code-root.js +27 -6
  198. package/dist/radio/group/radio-group.d.ts +11 -0
  199. package/dist/radio/group/radio-group.js +8 -2
  200. package/dist/rating/root/rating-root.d.ts +12 -1
  201. package/dist/rating/root/rating-root.js +10 -3
  202. package/dist/scatter-chart/measures.d.ts +22 -0
  203. package/dist/scatter-chart/measures.js +11 -0
  204. package/dist/scatter-chart/root/scatter-chart-root.d.ts +22 -8
  205. package/dist/scatter-chart/root/scatter-chart-root.js +25 -23
  206. package/dist/select/root/select-root.d.ts +67 -8
  207. package/dist/select/root/select-root.js +45 -11
  208. package/dist/skip-link/root/skip-link-root.d.ts +5 -0
  209. package/dist/skip-link/root/skip-link-root.js +3 -1
  210. package/dist/slider/root/slider-root.d.ts +7 -2
  211. package/dist/slider/root/slider-root.js +11 -5
  212. package/dist/sparkline/readings.d.ts +15 -5
  213. package/dist/sparkline/readings.js +3 -3
  214. package/dist/sparkline/root/sparkline-root.d.ts +9 -4
  215. package/dist/sparkline/root/sparkline-root.js +9 -3
  216. package/dist/speed-dial/group/speed-dial-group.d.ts +48 -0
  217. package/dist/speed-dial/group/speed-dial-group.js +43 -0
  218. package/dist/speed-dial/index.d.ts +1 -0
  219. package/dist/speed-dial/index.js +1 -0
  220. package/dist/speed-dial/item/speed-dial-item.d.ts +26 -1
  221. package/dist/speed-dial/item/speed-dial-item.js +41 -3
  222. package/dist/speed-dial/long-press.d.ts +50 -0
  223. package/dist/speed-dial/long-press.js +48 -0
  224. package/dist/speed-dial/root/speed-dial-root.d.ts +85 -1
  225. package/dist/speed-dial/root/speed-dial-root.js +117 -5
  226. package/dist/splitter/root/splitter-root.d.ts +12 -3
  227. package/dist/splitter/root/splitter-root.js +22 -4
  228. package/dist/steps/root/steps-root.d.ts +9 -2
  229. package/dist/steps/root/steps-root.js +6 -3
  230. package/dist/steps/step/step.d.ts +12 -0
  231. package/dist/steps/step/step.js +11 -2
  232. package/dist/switch/root/switch-root.d.ts +11 -0
  233. package/dist/switch/root/switch-root.js +8 -2
  234. package/dist/table/cell/table-cell.d.ts +8 -1
  235. package/dist/table/cell/table-cell.js +6 -2
  236. package/dist/table/column/table-column.d.ts +11 -4
  237. package/dist/table/column/table-column.js +15 -10
  238. package/dist/table/grid-controller.d.ts +122 -0
  239. package/dist/table/grid-controller.js +299 -0
  240. package/dist/table/root/table-root.d.ts +154 -8
  241. package/dist/table/root/table-root.js +197 -38
  242. package/dist/table/row/table-row.d.ts +55 -1
  243. package/dist/table/row/table-row.js +60 -7
  244. package/dist/tabs/root/tabs-root.d.ts +5 -0
  245. package/dist/tabs/root/tabs-root.js +3 -1
  246. package/dist/tag/group/tag-group.d.ts +5 -0
  247. package/dist/tag/group/tag-group.js +8 -15
  248. package/dist/tag/root/tag-root.d.ts +14 -1
  249. package/dist/tag/root/tag-root.js +11 -8
  250. package/dist/textarea/root/textarea-root.d.ts +5 -0
  251. package/dist/textarea/root/textarea-root.js +3 -1
  252. package/dist/time-input/root/time-input-root.d.ts +14 -7
  253. package/dist/time-input/root/time-input-root.js +43 -32
  254. package/dist/time-picker/root/time-picker-root.d.ts +16 -7
  255. package/dist/time-picker/root/time-picker-root.js +28 -12
  256. package/dist/toast/item/toast-item.d.ts +13 -3
  257. package/dist/toast/item/toast-item.js +2 -0
  258. package/dist/toast/root/toast-root.d.ts +22 -2
  259. package/dist/toast/root/toast-root.js +24 -17
  260. package/dist/toggle/group/toggle-group.js +3 -5
  261. package/dist/toolbar/root/toolbar-root.d.ts +36 -0
  262. package/dist/toolbar/root/toolbar-root.js +43 -9
  263. package/dist/tooltip/root/tooltip-root.d.ts +27 -17
  264. package/dist/tooltip/root/tooltip-root.js +1 -2
  265. package/dist/tour/root/tour-root.d.ts +8 -2
  266. package/dist/tour/root/tour-root.js +4 -2
  267. package/dist/tour/stop/tour-stop.d.ts +5 -0
  268. package/dist/tour/stop/tour-stop.js +6 -1
  269. package/dist/tree/grip.d.ts +5 -0
  270. package/dist/tree/grip.js +1 -0
  271. package/dist/tree/item/tree-item.d.ts +24 -0
  272. package/dist/tree/item/tree-item.js +27 -5
  273. package/dist/tree/root/tree-root.d.ts +66 -1
  274. package/dist/tree/root/tree-root.js +77 -5
  275. package/dist/trend/root/trend-root.d.ts +20 -4
  276. package/dist/trend/root/trend-root.js +20 -5
  277. package/dist/video/root/video-root.d.ts +23 -3
  278. package/dist/video/root/video-root.js +56 -15
  279. package/dist/video-playlist/menu/video-playlist-menu.d.ts +5 -0
  280. package/dist/video-playlist/menu/video-playlist-menu.js +3 -1
  281. package/dist/video-playlist/root/video-playlist-root.d.ts +5 -0
  282. package/dist/video-playlist/root/video-playlist-root.js +3 -1
  283. package/dist/virtual-list/root/virtual-list-root.d.ts +19 -3
  284. package/dist/virtual-list/root/virtual-list-root.js +10 -19
  285. package/lint.json +1 -1
  286. package/package.json +7 -6
  287. package/types/jsx.d.ts +6005 -2114
  288. package/types/svelte.d.ts +1 -0
  289. package/types/vue.d.ts +1594 -676
  290. package/types/words.d.ts +3280 -0
  291. package/dist/kbd/keys.d.ts +0 -29
  292. package/dist/kbd/keys.js +0 -52
  293. package/dist/toast/hotkey.d.ts +0 -22
  294. package/dist/toast/hotkey.js +0 -23
  295. package/dist/tooltip/focus-target.d.ts +0 -6
  296. package/dist/tooltip/focus-target.js +0 -9
@@ -1,4 +1,4 @@
1
- import { type GraphSignalDetail, HelixElement, type ViewportGestureLabels, type ViewportPanDetail, type ViewportZoomDetail } from '@fusion.dev/helix-core';
1
+ import { type GraphSignalDetail, HelixElement, type ViewportPanDetail, type ViewportZoomDetail } from '@fusion.dev/helix-core';
2
2
  import { nothing, type PropertyValues, type TemplateResult } from 'lit';
3
3
  import { type GraphLink, type GraphNode } from './graph-model.js';
4
4
  declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.dev/helix-core").ViewportElement) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerActiveInterface) & typeof HelixElement;
@@ -41,17 +41,24 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
41
41
  * @slot - The renderer's box, which the drawing is made in.
42
42
  * @slot filter-icon - The icon in the search field. Defaults to a magnifying glass.
43
43
  * @slot footer - Content below the graph.
44
+ * @slot fullscreen-icon - Replaces the glyph inside the fullscreen button.
44
45
  * @slot header - Content above the graph.
46
+ * @slot pan-down-icon - Replaces the glyph inside the pan down button.
47
+ * @slot pan-end-icon - Replaces the glyph inside the button that pans toward the end of a line of text.
48
+ * @slot pan-start-icon - Replaces the glyph inside the button that pans toward the start of a line of text.
49
+ * @slot pan-up-icon - Replaces the glyph inside the pan up button.
50
+ * @slot zoom-in-icon - Replaces the glyph inside the zoom-in button.
51
+ * @slot zoom-out-icon - Replaces the glyph inside the zoom-out button.
45
52
  *
46
53
  * @event {HelixActivateEvent} helix-activate - A note was selected, in the list or in the drawing. The detail's `value` is its `id`.
47
54
  * @event {HelixBeforeActivateEvent} helix-before-activate - A note is about to be selected. Cancelable: cancel it to keep the selection in your own state.
48
55
  * @event {HelixGraphFilterEvent} helix-graph-filter - A group in the legend was pressed, to show or hide its notes. The detail's `hidden` is every group that would be hidden. Cancelable: cancel it to keep the groups as they were, or to set `hiddenGroups` yourself.
49
56
  * @event {HelixGraphLayoutEvent} helix-graph-layout - A layout settled, with where it put each note, sent by `laidOut()`. Keep the positions and pass them back as each note's `x` and `y`, and `z` where a renderer draws in three dimensions.
50
- * @event {HelixGraphPanEvent} helix-graph-pan - A pan button or arrow key was pressed. `connectGraph` moves the drawing.
57
+ * @event {HelixGraphPanEvent} helix-graph-pan - A pan button or arrow key was pressed. `connectGraph` moves the drawing, then calls `moved()`.
51
58
  * @event {HelixGraphPartChangeEvent} helix-graph-part-change - The notes, the links, the selection, the depth or the gestures changed. Used by `connectGraph`; pages do not need to listen for it.
52
59
  * @event {HelixGraphReadyEvent} helix-graph-ready - The graph has been drawn whole, laid out and settled. Sent each time `drawn()` says it is drawn after it was not.
53
60
  * @event {HelixGraphSignalEvent} helix-graph-signal - Something passed between two notes, sent by `signal()`. Used by `connectGraph`; pages do not need to listen for it.
54
- * @event {HelixGraphZoomEvent} helix-graph-zoom - A zoom button or key was pressed. `connectGraph` zooms the drawing.
61
+ * @event {HelixGraphZoomEvent} helix-graph-zoom - A zoom button or key was pressed. `connectGraph` zooms the drawing, then calls `moved()`.
55
62
  *
56
63
  * @csspart after - The room the notes after those drawn would take, so the list scrolls its whole length.
57
64
  * @csspart before - The room the notes before those drawn would take.
@@ -70,7 +77,7 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
70
77
  * @csspart legend-item-hidden - A group in the legend whose notes are hidden.
71
78
  * @csspart legend-swatch - The mark in a group's color, before its name.
72
79
  * @csspart list - The list of notes, which draws only the rows in view.
73
- * @csspart live - What screen readers hear when a search changes how many notes there are.
80
+ * @csspart live - What screen readers hear: how many notes there are when a search or the legend changes it, and which way the drawing went after a key or a control moved it.
74
81
  * @csspart note - One note in the list.
75
82
  * @csspart note-cursor - The note the keyboard is on in the list.
76
83
  * @csspart note-linked - A note linked to or from the selected one.
@@ -91,20 +98,48 @@ declare const HelixHeadlessGraph_base: (new (...args: any[]) => import("@fusion.
91
98
  * @csspart zoom-in - The zoom in button.
92
99
  * @csspart zoom-out - The zoom out button.
93
100
  *
101
+ * @cssstate empty - The list holds no notes: the graph has none, or a search or the groups hid them all.
94
102
  * @cssstate fullscreen - The graph fills the screen.
95
103
  * @cssstate idle - The user has been still long enough for the header and footer to fade.
104
+ * @cssstate local - The drawing shows the selected note's local graph, with `depth`.
105
+ * @cssstate panel-open - A graph with `no-panel` has the search and the list open over the drawing.
96
106
  * @cssstate ready - The graph has been drawn whole, after `helix-graph-ready`.
107
+ * @cssstate searching - The search field holds words, and the list holds only the notes they find.
108
+ * @cssstate selected - A note is selected, in the list or in the drawing.
97
109
  * @cssstate sharing - The page keeps the plain wheel and one finger, with `gestures="cooperative"` or while a graph with `gestures="activate"` waits to be pressed.
98
110
  * @cssstate using - A graph with `gestures="activate"` has been pressed and has the gestures.
99
111
  */
100
112
  export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
101
- /** What the list says of a note's count, with `{count}`. */
113
+ /**
114
+ * The key this family's words are registered under, its styled tag:
115
+ * `registerWords('de', { 'helix-graph': { searchLabel: 'Notiz suchen' } })`.
116
+ */
117
+ static words: string;
118
+ /**
119
+ * The hint shown when the graph, waiting to be pressed with
120
+ * `gestures="activate"`, is scrolled or swiped over.
121
+ */
122
+ activateHintLabel: string;
123
+ /**
124
+ * The name of the group of controls, read by screen readers, which names
125
+ * what the controls drive rather than the mechanism.
126
+ */
127
+ controlsLabel: string;
128
+ /**
129
+ * What the list says of how many notes it holds. `{count}` is the count,
130
+ * written in the locale, and each language writes the forms it has.
131
+ */
102
132
  countLabel: string;
103
133
  /**
104
134
  * How many links from the selected note to show, for its local graph. Unset
105
135
  * shows every note. The list holds what the drawing shows.
106
136
  */
107
137
  depth?: number;
138
+ /**
139
+ * The graph's name where `label` is empty and the host has no
140
+ * `aria-label`.
141
+ */
142
+ fallbackLabel: string;
108
143
  /** The groups turned off in the legend, by name, whose notes neither the drawing nor the list shows. A property, never an attribute. */
109
144
  hiddenGroups: readonly string[];
110
145
  /**
@@ -127,6 +162,14 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
127
162
  links: readonly GraphLink[];
128
163
  /** How a note that links to the selected one is described, with `{note}`. */
129
164
  linksToLabel: string;
165
+ /** What screen readers hear once the drawing has moved down, after `moved()`. */
166
+ movedDownLabel: string;
167
+ /** What screen readers hear once the drawing has moved left, after `moved()`. */
168
+ movedLeftLabel: string;
169
+ /** What screen readers hear once the drawing has moved right, after `moved()`. */
170
+ movedRightLabel: string;
171
+ /** What screen readers hear once the drawing has moved up, after `moved()`. */
172
+ movedUpLabel: string;
130
173
  /** The notes. A property, never an attribute. */
131
174
  nodes: readonly GraphNode[];
132
175
  /**
@@ -141,6 +184,19 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
141
184
  searchLabel: string;
142
185
  /** How the selected note is described in the list. */
143
186
  selectedLabel: string;
187
+ /** The hint shown when one finger swipes over the graph with `gestures="cooperative"`. */
188
+ twoFingerHintLabel: string;
189
+ /** The line shown while the graph, with `gestures="activate"`, has the gestures. */
190
+ usingLabel: string;
191
+ /**
192
+ * The hint shown when the wheel scrolls past the graph with
193
+ * `gestures="cooperative"`. `{key}` is ⌘ on a Mac and Ctrl elsewhere.
194
+ */
195
+ wheelHintLabel: string;
196
+ /** What screen readers hear once the drawing has zoomed in, after `moved()`. */
197
+ zoomedInLabel: string;
198
+ /** What screen readers hear once the drawing has zoomed out, after `moved()`. */
199
+ zoomedOutLabel: string;
144
200
  /** What the search field holds. */
145
201
  private query;
146
202
  /** The row the keyboard is on, as an index into the list. */
@@ -163,8 +219,15 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
163
219
  private groups;
164
220
  /** Whether the graph has been drawn whole, which `drawn()` says. */
165
221
  private whole;
166
- /** How many notes there were when the count was last said. */
222
+ /** What the live region says now. */
167
223
  private said;
224
+ /**
225
+ * Which way a reader last asked the drawing to go, by a key or a control,
226
+ * until `moved()` says it went: a side, `in` or `out`.
227
+ */
228
+ private asked;
229
+ /** Whether the next change of the list's rows is one a reader asked for by the legend, whose count is then said. */
230
+ private countAsked;
168
231
  private readonly virtualize;
169
232
  /**
170
233
  * @internal The notes the drawing shows, which `connectGraph` reads: those
@@ -205,16 +268,34 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
205
268
  signal(from: string, to: string, options?: {
206
269
  tone?: GraphSignalDetail['tone'];
207
270
  }): void;
271
+ /**
272
+ * Says the drawing moved the way a reader asked, by a key or a control:
273
+ * the live region says "Moved right" or "Zoomed in" in the frame's words.
274
+ * Called by `connectGraph` once the renderer has moved; a page answering
275
+ * `helix-graph-pan` and `helix-graph-zoom` itself calls it once its view
276
+ * has moved.
277
+ *
278
+ * **Said once the drawing has moved, and only then.** The frame asks and
279
+ * the renderer moves, so a frame with nothing to answer it says nothing: a
280
+ * move said that never happened is worse than silence.
281
+ */
282
+ moved(): void;
283
+ /**
284
+ * Puts words in the live region. **The same words twice differ by a space
285
+ * no reader hears**, since a region whose text does not change is not read
286
+ * again, and a second "Moved left" is news as much as the first.
287
+ */
288
+ private say;
289
+ protected firstUpdated(changed: PropertyValues): void;
208
290
  protected willUpdate(changed: PropertyValues): void;
209
291
  protected updated(changed: PropertyValues): void;
292
+ /** The pan request, and the side it goes to, which `moved()` then says. */
210
293
  protected panEvent(detail: ViewportPanDetail): Event;
294
+ /** The zoom request, and which way it goes, which `moved()` then says. */
211
295
  protected zoomEvent(detail: ViewportZoomDetail): Event;
212
296
  protected get restingControls(): string;
213
- protected get restingControlsLabel(): string;
214
297
  /** Which gestures the renderer takes, which `connectGraph` hears from here. */
215
298
  protected gesturesChanged(): void;
216
- /** What the graph says about its gestures where the page does not say it. */
217
- protected get restingGestureLabels(): ViewportGestureLabels;
218
299
  /** How many notes the list holds, in the page's numbers. */
219
300
  private countText;
220
301
  /** How a row stands to the selected note, in words, or nothing where it does not. */
@@ -255,14 +336,20 @@ export declare class HelixHeadlessGraph extends HelixHeadlessGraph_base {
255
336
  * drawing: a reader moving through the list was moving the graph under it.
256
337
  */
257
338
  private readonly handleListKeydown;
258
- /** What has been typed toward a note's name, and when the last letter came. */
259
- private typed;
339
+ /** What has been typed toward a note's name. */
340
+ private readonly typed;
260
341
  /**
261
- * Moves to the next note whose name starts with what was typed, as a
262
- * listbox does. Letters within half a second of each other run together,
263
- * and a repeated letter steps through the names that start with it.
342
+ * Moves to the next note whose name starts with what was typed, through
343
+ * core's `Typeahead`, as a listbox does: letters within half a second run
344
+ * together, and a repeated letter steps through the names that start with it.
264
345
  */
265
346
  private typeahead;
347
+ /**
348
+ * How many rows Page Down and Page Up move: the rows that fit in the list's
349
+ * box, or in the window where the list does not scroll, less one, so the
350
+ * row at one edge lands at the other.
351
+ */
352
+ private pageRows;
266
353
  /**
267
354
  * The search field's keys, which belong to the field and never pan the
268
355
  * graph. Escape empties a search that has words in it, and passes through
@@ -4,18 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { customElement, fillTemplate, formatNumbers, HelixElement, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, MixinControllerActive, MixinViewport, scrollItemIntoView, VirtualizeController, } from '@fusion.dev/helix-core';
7
+ import { auditName, customElement, formatWords, HelixElement, HelixGraphFilterEvent, HelixGraphLayoutEvent, HelixGraphPanEvent, HelixGraphPartChangeEvent, HelixGraphReadyEvent, HelixGraphSignalEvent, HelixGraphZoomEvent, MixinControllerActive, MixinViewport, scrollItemIntoView, scrollRoom, Typeahead, VirtualizeController, words, wordsLocale, } from '@fusion.dev/helix-core';
8
8
  import { list, magnifyingGlass } from '@fusion.dev/helix-icons';
9
9
  import { html, nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
11
11
  import { repeat } from 'lit/directives/repeat.js';
12
12
  import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
13
- import { adjacencyOf, entriesOf, groupsOf, nameOf, sortedOf, within, withoutGroups, } from './graph-model.js';
14
- const PAGE = 10;
13
+ import { adjacencyOf, cursorAfter, entriesOf, groupsOf, nameOf, sortedOf, within, withoutGroups, } from './graph-model.js';
15
14
  let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinControllerActive(HelixElement)) {
16
15
  constructor() {
17
16
  super(...arguments);
18
- this.countLabel = '{count} notes';
17
+ this.activateHintLabel = 'Press the graph to use it';
18
+ this.controlsLabel = 'Graph controls';
19
+ this.countLabel = '{count, plural, one {# note} other {# notes}}';
20
+ this.fallbackLabel = 'Graph';
19
21
  this.hiddenGroups = [];
20
22
  this.label = '';
21
23
  this.legend = false;
@@ -24,11 +26,20 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
24
26
  this.linkedFromLabel = 'Linked from {note}';
25
27
  this.links = [];
26
28
  this.linksToLabel = 'Links to {note}';
29
+ this.movedDownLabel = 'Moved down';
30
+ this.movedLeftLabel = 'Moved left';
31
+ this.movedRightLabel = 'Moved right';
32
+ this.movedUpLabel = 'Moved up';
27
33
  this.nodes = [];
28
34
  this.noPanel = false;
29
35
  this.notesLabel = 'Notes';
30
36
  this.searchLabel = 'Find a note';
31
37
  this.selectedLabel = 'Selected';
38
+ this.twoFingerHintLabel = 'Use two fingers to move the graph';
39
+ this.usingLabel = 'Using the graph. Press Escape to scroll the page again.';
40
+ this.wheelHintLabel = 'Use {key} and scroll to zoom the graph';
41
+ this.zoomedInLabel = 'Zoomed in';
42
+ this.zoomedOutLabel = 'Zoomed out';
32
43
  this.query = '';
33
44
  this.cursor = 0;
34
45
  this.panelOpen = false;
@@ -38,6 +49,7 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
38
49
  this.groups = [];
39
50
  this.whole = false;
40
51
  this.said = '';
52
+ this.countAsked = false;
41
53
  this.virtualize = new VirtualizeController(this, {
42
54
  container: () => this.partNamed('list'),
43
55
  count: () => this.entries.length,
@@ -53,8 +65,8 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
53
65
  ArrowUp: this.cursor - 1,
54
66
  End: this.entries.length - 1,
55
67
  Home: 0,
56
- PageDown: this.cursor + PAGE,
57
- PageUp: this.cursor - PAGE,
68
+ PageDown: this.cursor + this.pageRows(),
69
+ PageUp: this.cursor - this.pageRows(),
58
70
  };
59
71
  if (event.key in moves) {
60
72
  event.preventDefault();
@@ -74,7 +86,7 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
74
86
  this.typeahead(event.key);
75
87
  }
76
88
  };
77
- this.typed = { at: 0, text: '' };
89
+ this.typed = new Typeahead();
78
90
  this.handleSearchKeydown = (event) => {
79
91
  if (event.key === 'ArrowDown') {
80
92
  event.preventDefault();
@@ -100,6 +112,7 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
100
112
  this.query = event.target.value;
101
113
  };
102
114
  }
115
+ static { this.words = 'helix-graph'; }
103
116
  get shown() {
104
117
  return this.kept;
105
118
  }
@@ -122,15 +135,40 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
122
135
  signal(from, to, options = {}) {
123
136
  this.dispatchEvent(new HelixGraphSignalEvent({ from, to, tone: options.tone }));
124
137
  }
138
+ moved() {
139
+ const asked = this.asked;
140
+ this.asked = undefined;
141
+ const words = {
142
+ down: this.movedDownLabel,
143
+ in: this.zoomedInLabel,
144
+ left: this.movedLeftLabel,
145
+ out: this.zoomedOutLabel,
146
+ right: this.movedRightLabel,
147
+ up: this.movedUpLabel,
148
+ };
149
+ if (asked !== undefined) {
150
+ this.say(words[asked] ?? '');
151
+ }
152
+ }
153
+ say(words) {
154
+ this.said = words !== '' && words === this.said ? `${words}\u00a0` : words;
155
+ }
156
+ firstUpdated(changed) {
157
+ super.firstUpdated(changed);
158
+ auditName(this, () => null, 'Give it a `label` that says what the notes are, such as "Research notes".', () => this.label !== '');
159
+ }
125
160
  willUpdate(changed) {
126
161
  super.willUpdate(changed);
127
162
  this.toggleState('fullscreen', this.filled);
128
163
  this.toggleState('idle', this.resting);
164
+ this.toggleState('panel-open', this.noPanel && this.panelOpen);
165
+ this.toggleState('searching', this.query.trim() !== '');
166
+ this.toggleState('selected', this.active !== '');
129
167
  if (changed.has('links')) {
130
168
  this.adjacency = adjacencyOf(this.links);
131
169
  }
132
170
  if (changed.has('nodes')) {
133
- this.sorted = sortedOf(this.nodes, this.closest?.('[lang]')?.getAttribute('lang') ?? '');
171
+ this.sorted = sortedOf(this.nodes, wordsLocale(this));
134
172
  }
135
173
  if (changed.has('nodes')) {
136
174
  this.groups = groupsOf(this.nodes);
@@ -141,13 +179,29 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
141
179
  ? within(this.adjacency, this.active, Math.max(0, this.depth))
142
180
  : undefined;
143
181
  this.kept = withoutGroups(this.nodes, local, this.hiddenGroups);
182
+ this.toggleState('local', local !== undefined);
144
183
  }
145
184
  if (['nodes', 'links', 'active', 'depth', 'hiddenGroups', 'query'].some((name) => changed.has(name))) {
185
+ const was = this.entries[this.cursor]?.node.id;
146
186
  this.entries = entriesOf(this.sorted, this.adjacency, this.active, this.query, this.kept);
147
- this.cursor = 0;
187
+ this.toggleState('empty', this.entries.length === 0);
148
188
  const list = this.partNamed('list');
149
- if (list) {
150
- list.scrollTop = 0;
189
+ if (['active', 'depth', 'hiddenGroups', 'query'].some((name) => changed.has(name)) ||
190
+ !this.hasUpdated) {
191
+ this.cursor = 0;
192
+ if (list) {
193
+ list.scrollTop = 0;
194
+ }
195
+ }
196
+ else {
197
+ this.cursor = cursorAfter(this.entries, was, this.cursor);
198
+ if (list && this.shadowRoot?.activeElement === list) {
199
+ void this.updateComplete.then(() => this.revealCursor());
200
+ }
201
+ }
202
+ if ((changed.has('query') && changed.get('query') !== undefined) || this.countAsked) {
203
+ this.countAsked = false;
204
+ this.say(this.countText());
151
205
  }
152
206
  }
153
207
  }
@@ -160,36 +214,23 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
160
214
  else if (changed.has('active') || changed.has('depth') || changed.has('hiddenGroups')) {
161
215
  this.dispatchEvent(new HelixGraphPartChangeEvent({ kind: 'focus' }));
162
216
  }
163
- if (changed.has('query') && changed.get('query') !== undefined) {
164
- this.said = this.countText();
165
- }
166
217
  }
167
218
  panEvent(detail) {
219
+ this.asked = this.sideOf(detail.to);
168
220
  return new HelixGraphPanEvent(detail);
169
221
  }
170
222
  zoomEvent(detail) {
223
+ this.asked = detail.by > 0 ? 'in' : detail.by < 0 ? 'out' : undefined;
171
224
  return new HelixGraphZoomEvent(detail);
172
225
  }
173
226
  get restingControls() {
174
227
  return 'zoom fullscreen';
175
228
  }
176
- get restingControlsLabel() {
177
- return 'Graph controls';
178
- }
179
229
  gesturesChanged() {
180
230
  this.dispatchEvent(new HelixGraphPartChangeEvent({ kind: 'gestures' }));
181
231
  }
182
- get restingGestureLabels() {
183
- return {
184
- activate: 'Press the graph to use it',
185
- twoFinger: 'Use two fingers to move the graph',
186
- using: 'Using the graph. Press Escape to scroll the page again.',
187
- wheel: 'Use {key} and scroll to zoom the graph',
188
- };
189
- }
190
232
  countText() {
191
- const lang = this.closest?.('[lang]')?.getAttribute('lang') ?? '';
192
- return fillTemplate(this.countLabel, { count: formatNumbers(lang)(this.entries.length) });
233
+ return formatWords(this, 'countLabel', { count: this.entries.length });
193
234
  }
194
235
  relationText(entry) {
195
236
  const selected = this.nodes.find((node) => node.id === this.active);
@@ -198,11 +239,11 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
198
239
  case 'selected':
199
240
  return this.selectedLabel;
200
241
  case 'to':
201
- return fillTemplate(this.linkedFromLabel, { note });
242
+ return formatWords(this, 'linkedFromLabel', { note });
202
243
  case 'from':
203
- return fillTemplate(this.linksToLabel, { note });
244
+ return formatWords(this, 'linksToLabel', { note });
204
245
  case 'both':
205
- return fillTemplate(this.linkedBothLabel, { note });
246
+ return formatWords(this, 'linkedBothLabel', { note });
206
247
  default:
207
248
  return '';
208
249
  }
@@ -213,6 +254,7 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
213
254
  : [...this.hiddenGroups, name];
214
255
  if (this.dispatchEvent(new HelixGraphFilterEvent({ hidden }))) {
215
256
  this.hiddenGroups = hidden;
257
+ this.countAsked = true;
216
258
  }
217
259
  }
218
260
  renderLegend() {
@@ -272,23 +314,16 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
272
314
  return this.entries.length > 0 && (cursor < first || cursor >= last) ? cursor : undefined;
273
315
  }
274
316
  typeahead(letter) {
275
- const now = Date.now();
276
- const text = now - this.typed.at < 500 ? this.typed.text + letter : letter;
277
- this.typed = { at: now, text };
278
- const wanted = text.toLocaleLowerCase();
279
- const repeated = [...wanted].every((one) => one === wanted[0]);
280
- const prefix = repeated ? (wanted[0] ?? '') : wanted;
281
- const entries = this.entries;
282
- const start = repeated ? this.cursor + 1 : this.cursor;
283
- for (let step = 0; step < entries.length; step += 1) {
284
- const at = (start + step) % entries.length;
285
- const entry = entries[at];
286
- if (entry && nameOf(entry.node).toLocaleLowerCase().startsWith(prefix)) {
287
- this.moveTo(at);
288
- return;
289
- }
317
+ const at = this.typed.match(letter, this.entries.map((entry) => nameOf(entry.node)), this.cursor);
318
+ if (at >= 0) {
319
+ this.moveTo(at);
290
320
  }
291
321
  }
322
+ pageRows() {
323
+ const room = scrollRoom(this.partNamed('list'));
324
+ const tall = this.virtualize.sizeOf(this.cursor) || 32;
325
+ return Math.max(1, Math.floor(room / tall) - 1);
326
+ }
292
327
  togglePanel(open = !this.panelOpen) {
293
328
  const inside = this.panelOpen && this.partNamed('panel')?.contains(this.shadowRoot?.activeElement ?? null);
294
329
  this.panelOpen = open;
@@ -373,7 +408,7 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
373
408
  return html `<div
374
409
  part="region"
375
410
  role="group"
376
- aria-label=${this.label || this.getAttribute?.('aria-label') || 'Graph'}
411
+ aria-label=${this.label || this.getAttribute?.('aria-label') || this.fallbackLabel}
377
412
  tabindex="0"
378
413
  @focusin=${this.idle.stir}
379
414
  @keydown=${this.handleKeydown}
@@ -436,11 +471,24 @@ let HelixHeadlessGraph = class HelixHeadlessGraph extends MixinViewport(MixinCon
436
471
  }
437
472
  };
438
473
  __decorate([
474
+ words,
475
+ property({ attribute: 'activate-hint-label' })
476
+ ], HelixHeadlessGraph.prototype, "activateHintLabel", void 0);
477
+ __decorate([
478
+ words,
479
+ property({ attribute: 'controls-label' })
480
+ ], HelixHeadlessGraph.prototype, "controlsLabel", void 0);
481
+ __decorate([
482
+ words,
439
483
  property({ attribute: 'count-label' })
440
484
  ], HelixHeadlessGraph.prototype, "countLabel", void 0);
441
485
  __decorate([
442
486
  property({ type: Number })
443
487
  ], HelixHeadlessGraph.prototype, "depth", void 0);
488
+ __decorate([
489
+ words,
490
+ property({ attribute: 'fallback-label' })
491
+ ], HelixHeadlessGraph.prototype, "fallbackLabel", void 0);
444
492
  __decorate([
445
493
  property({ attribute: false })
446
494
  ], HelixHeadlessGraph.prototype, "hiddenGroups", void 0);
@@ -451,20 +499,40 @@ __decorate([
451
499
  property({ type: Boolean })
452
500
  ], HelixHeadlessGraph.prototype, "legend", void 0);
453
501
  __decorate([
502
+ words,
454
503
  property({ attribute: 'legend-label' })
455
504
  ], HelixHeadlessGraph.prototype, "legendLabel", void 0);
456
505
  __decorate([
506
+ words,
457
507
  property({ attribute: 'linked-both-label' })
458
508
  ], HelixHeadlessGraph.prototype, "linkedBothLabel", void 0);
459
509
  __decorate([
510
+ words,
460
511
  property({ attribute: 'linked-from-label' })
461
512
  ], HelixHeadlessGraph.prototype, "linkedFromLabel", void 0);
462
513
  __decorate([
463
514
  property({ attribute: false })
464
515
  ], HelixHeadlessGraph.prototype, "links", void 0);
465
516
  __decorate([
517
+ words,
466
518
  property({ attribute: 'links-to-label' })
467
519
  ], HelixHeadlessGraph.prototype, "linksToLabel", void 0);
520
+ __decorate([
521
+ words,
522
+ property({ attribute: 'moved-down-label' })
523
+ ], HelixHeadlessGraph.prototype, "movedDownLabel", void 0);
524
+ __decorate([
525
+ words,
526
+ property({ attribute: 'moved-left-label' })
527
+ ], HelixHeadlessGraph.prototype, "movedLeftLabel", void 0);
528
+ __decorate([
529
+ words,
530
+ property({ attribute: 'moved-right-label' })
531
+ ], HelixHeadlessGraph.prototype, "movedRightLabel", void 0);
532
+ __decorate([
533
+ words,
534
+ property({ attribute: 'moved-up-label' })
535
+ ], HelixHeadlessGraph.prototype, "movedUpLabel", void 0);
468
536
  __decorate([
469
537
  property({ attribute: false })
470
538
  ], HelixHeadlessGraph.prototype, "nodes", void 0);
@@ -472,14 +540,37 @@ __decorate([
472
540
  property({ attribute: 'no-panel', reflect: true, type: Boolean })
473
541
  ], HelixHeadlessGraph.prototype, "noPanel", void 0);
474
542
  __decorate([
543
+ words,
475
544
  property({ attribute: 'notes-label' })
476
545
  ], HelixHeadlessGraph.prototype, "notesLabel", void 0);
477
546
  __decorate([
547
+ words,
478
548
  property({ attribute: 'search-label' })
479
549
  ], HelixHeadlessGraph.prototype, "searchLabel", void 0);
480
550
  __decorate([
551
+ words,
481
552
  property({ attribute: 'selected-label' })
482
553
  ], HelixHeadlessGraph.prototype, "selectedLabel", void 0);
554
+ __decorate([
555
+ words,
556
+ property({ attribute: 'two-finger-hint-label' })
557
+ ], HelixHeadlessGraph.prototype, "twoFingerHintLabel", void 0);
558
+ __decorate([
559
+ words,
560
+ property({ attribute: 'using-label' })
561
+ ], HelixHeadlessGraph.prototype, "usingLabel", void 0);
562
+ __decorate([
563
+ words,
564
+ property({ attribute: 'wheel-hint-label' })
565
+ ], HelixHeadlessGraph.prototype, "wheelHintLabel", void 0);
566
+ __decorate([
567
+ words,
568
+ property({ attribute: 'zoomed-in-label' })
569
+ ], HelixHeadlessGraph.prototype, "zoomedInLabel", void 0);
570
+ __decorate([
571
+ words,
572
+ property({ attribute: 'zoomed-out-label' })
573
+ ], HelixHeadlessGraph.prototype, "zoomedOutLabel", void 0);
483
574
  __decorate([
484
575
  state()
485
576
  ], HelixHeadlessGraph.prototype, "query", void 0);
@@ -489,6 +580,9 @@ __decorate([
489
580
  __decorate([
490
581
  state()
491
582
  ], HelixHeadlessGraph.prototype, "panelOpen", void 0);
583
+ __decorate([
584
+ state()
585
+ ], HelixHeadlessGraph.prototype, "said", void 0);
492
586
  HelixHeadlessGraph = __decorate([
493
587
  customElement('helix-headless-graph')
494
588
  ], HelixHeadlessGraph);
@@ -110,7 +110,13 @@ declare const HelixHeadlessHeatmap_base: typeof HelixElement & (new (...args: an
110
110
  */
111
111
  export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
112
112
  /**
113
- * The word the `overview` puts before the busiest reading.
113
+ * The key this family's words are registered under, its styled tag:
114
+ * `registerWords('de', { 'helix-heatmap': { emptyText: 'Keine Werte' } })`.
115
+ */
116
+ static words: string;
117
+ /**
118
+ * The name the `overview` gives the busiest reading, `{busiestLabel}` in
119
+ * `overview-label`.
114
120
  */
115
121
  busiestLabel: string;
116
122
  /**
@@ -145,6 +151,13 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
145
151
  * container that cannot get narrow.
146
152
  */
147
153
  minCell: number;
154
+ /**
155
+ * The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
156
+ * `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
157
+ * and its reading as the table writes it, and `{total}` the total of the
158
+ * readings drawn, written in the locale.
159
+ */
160
+ overviewLabel: string;
148
161
  /**
149
162
  * How many rows the strip has.
150
163
  *
@@ -156,8 +169,16 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
156
169
  */
157
170
  rows: number;
158
171
  /**
159
- * What the `selection` part says after the selection changes, with `{count}` for
160
- * how many cells are selected.
172
+ * What the readout adds for a selected cell, under `selection-mode`, after
173
+ * where the cell stands: "Day 1: 0 (1 of 14, selected)". Empty adds
174
+ * nothing.
175
+ */
176
+ selectedLabel: string;
177
+ /**
178
+ * What the `selection` part says after the selection changes. `{count}` is
179
+ * how many cells are selected, written in the locale, and a language that
180
+ * needs plural forms writes them: `{count, plural, one {# wybrany} few
181
+ * {# wybrane} many {# wybranych} other {# wybranego}}`.
161
182
  */
162
183
  selectionLabel: string;
163
184
  /**
@@ -166,6 +187,11 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
166
187
  * Absent selects nothing, and a press or Space does what it did.
167
188
  */
168
189
  selectionMode?: 'multiple' | 'single';
190
+ /**
191
+ * The strip's name where the chart has none: no `aria-label`, `label`, or
192
+ * table caption.
193
+ */
194
+ stripLabel: string;
169
195
  /**
170
196
  * Lower bounds for the tone buckets, in the order the tones are given.
171
197
  *
@@ -189,7 +215,8 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
189
215
  */
190
216
  tones: string;
191
217
  /**
192
- * The word the `overview` puts before the total of the readings drawn.
218
+ * The name the `overview` gives the total of the readings drawn,
219
+ * `{totalLabel}` in `overview-label`.
193
220
  */
194
221
  totalLabel: string;
195
222
  /**
@@ -409,6 +436,12 @@ export declare class HelixHeadlessHeatmap extends HelixHeadlessHeatmap_base {
409
436
  * pitch is `cell + gap` and both are measured.
410
437
  */
411
438
  protected renderTooltip(): TemplateResult | typeof nothing;
439
+ /**
440
+ * The readout's cursor: the pointer, with the selected word after where a
441
+ * selected cell stands, so a reader moving through the strip hears which
442
+ * cells are in the selection and not only how many.
443
+ */
444
+ private reading;
412
445
  /**
413
446
  * Which drawn cell the pointer is over, or -1.
414
447
  *