@fusion.dev/helix-headless 0.143.0 → 0.145.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 (314) hide show
  1. package/custom-elements.json +16990 -1383
  2. package/dist/accordion/item/accordion-item.d.ts +48 -12
  3. package/dist/accordion/item/accordion-item.js +26 -5
  4. package/dist/accordion/root/accordion-root.d.ts +6 -0
  5. package/dist/accordion/root/accordion-root.js +7 -1
  6. package/dist/announcement/root/announcement-root.d.ts +21 -1
  7. package/dist/announcement/root/announcement-root.js +36 -1
  8. package/dist/app-header/root/app-header-root.d.ts +7 -0
  9. package/dist/app-header/root/app-header-root.js +5 -1
  10. package/dist/app-header/sectioning.d.ts +7 -0
  11. package/dist/app-header/sectioning.js +26 -0
  12. package/dist/area-chart/root/area-chart-root.d.ts +12 -4
  13. package/dist/area-chart/root/area-chart-root.js +24 -7
  14. package/dist/avatar/root/avatar-root.d.ts +14 -0
  15. package/dist/avatar/root/avatar-root.js +23 -9
  16. package/dist/badge/root/badge-root.d.ts +11 -7
  17. package/dist/badge/root/badge-root.js +1 -1
  18. package/dist/bar-chart/root/bar-chart-root.d.ts +12 -3
  19. package/dist/bar-chart/root/bar-chart-root.js +17 -10
  20. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +32 -1
  21. package/dist/breadcrumbs/root/breadcrumbs-root.js +25 -2
  22. package/dist/button/root/button-root.d.ts +47 -1
  23. package/dist/button/root/button-root.js +38 -4
  24. package/dist/callout/root/callout-root.d.ts +18 -1
  25. package/dist/callout/root/callout-root.js +15 -4
  26. package/dist/canvas/root/canvas-root.d.ts +38 -3
  27. package/dist/canvas/root/canvas-root.js +121 -40
  28. package/dist/card/root/card-root.d.ts +30 -1
  29. package/dist/card/root/card-root.js +38 -5
  30. package/dist/carousel/root/carousel-root.d.ts +90 -0
  31. package/dist/carousel/root/carousel-root.js +134 -12
  32. package/dist/chat/composer/chat-composer.d.ts +38 -6
  33. package/dist/chat/composer/chat-composer.js +42 -9
  34. package/dist/chat/message/chat-message.d.ts +32 -1
  35. package/dist/chat/message/chat-message.js +25 -9
  36. package/dist/chat/naming.d.ts +22 -0
  37. package/dist/chat/naming.js +12 -0
  38. package/dist/chat/relative-clock.d.ts +39 -0
  39. package/dist/chat/relative-clock.js +31 -0
  40. package/dist/chat/root/chat-root.d.ts +36 -0
  41. package/dist/chat/root/chat-root.js +24 -1
  42. package/dist/checkbox/root/checkbox-root.js +2 -0
  43. package/dist/checkbox-group/root/checkbox-group-root.d.ts +53 -3
  44. package/dist/checkbox-group/root/checkbox-group-root.js +71 -22
  45. package/dist/code-block/lines.d.ts +13 -0
  46. package/dist/code-block/lines.js +2 -0
  47. package/dist/code-block/root/code-block-root.d.ts +38 -1
  48. package/dist/code-block/root/code-block-root.js +28 -7
  49. package/dist/color-input/root/color-input-root.d.ts +34 -1
  50. package/dist/color-input/root/color-input-root.js +23 -4
  51. package/dist/color-picker/channels.d.ts +26 -0
  52. package/dist/color-picker/channels.js +84 -0
  53. package/dist/color-picker/root/color-picker-root.d.ts +81 -5
  54. package/dist/color-picker/root/color-picker-root.js +103 -10
  55. package/dist/combobox/root/combobox-root.d.ts +38 -3
  56. package/dist/combobox/root/combobox-root.js +64 -2
  57. package/dist/command/root/command-root.d.ts +30 -4
  58. package/dist/command/root/command-root.js +33 -3
  59. package/dist/copy-button/from.d.ts +22 -0
  60. package/dist/copy-button/from.js +28 -0
  61. package/dist/copy-button/root/copy-button-root.d.ts +47 -1
  62. package/dist/copy-button/root/copy-button-root.js +44 -8
  63. package/dist/data-table/root/data-table-root.d.ts +150 -2
  64. package/dist/data-table/root/data-table-root.js +303 -29
  65. package/dist/data-table/tree.d.ts +40 -0
  66. package/dist/data-table/tree.js +55 -0
  67. package/dist/date-input/root/date-input-root.d.ts +73 -4
  68. package/dist/date-input/root/date-input-root.js +93 -43
  69. package/dist/date-picker/root/date-picker-root.d.ts +145 -1
  70. package/dist/date-picker/root/date-picker-root.js +239 -48
  71. package/dist/description-list/item/description-list-item.d.ts +17 -2
  72. package/dist/description-list/item/description-list-item.js +15 -2
  73. package/dist/description-list/root/description-list-root.d.ts +27 -1
  74. package/dist/description-list/root/description-list-root.js +26 -1
  75. package/dist/dialog/description.d.ts +9 -0
  76. package/dist/dialog/description.js +14 -0
  77. package/dist/dialog/root/dialog-root.d.ts +64 -1
  78. package/dist/dialog/root/dialog-root.js +49 -23
  79. package/dist/donut-chart/root/donut-chart-root.d.ts +25 -4
  80. package/dist/donut-chart/root/donut-chart-root.js +21 -6
  81. package/dist/drawer/root/drawer-root.d.ts +63 -2
  82. package/dist/drawer/root/drawer-root.js +95 -19
  83. package/dist/drawer/swipe-start.d.ts +9 -0
  84. package/dist/drawer/swipe-start.js +12 -0
  85. package/dist/drilldown/item/drilldown-item.d.ts +11 -6
  86. package/dist/drilldown/item/drilldown-item.js +8 -5
  87. package/dist/drilldown/root/drilldown-root.d.ts +11 -0
  88. package/dist/drilldown/root/drilldown-root.js +8 -3
  89. package/dist/element-events.generated.js +61 -13
  90. package/dist/empty/root/empty-root.d.ts +1 -1
  91. package/dist/file-input/root/file-input-root.d.ts +47 -0
  92. package/dist/file-input/root/file-input-root.js +60 -22
  93. package/dist/file-input/screen.d.ts +35 -0
  94. package/dist/file-input/screen.js +49 -0
  95. package/dist/filter-input/menu/filter-menu.d.ts +3 -0
  96. package/dist/filter-input/menu/filter-menu.js +8 -4
  97. package/dist/filter-input/root/filter-input-root.d.ts +38 -4
  98. package/dist/filter-input/root/filter-input-root.js +67 -3
  99. package/dist/filter-input/suggest.d.ts +17 -0
  100. package/dist/filter-input/suggest.js +23 -0
  101. package/dist/format-date/options.d.ts +33 -0
  102. package/dist/format-date/options.js +42 -0
  103. package/dist/format-date/root/format-date-root.d.ts +51 -0
  104. package/dist/format-date/root/format-date-root.js +58 -38
  105. package/dist/heatmap/root/heatmap-root.d.ts +23 -6
  106. package/dist/heatmap/root/heatmap-root.js +24 -13
  107. package/dist/icon/index.d.ts +2 -0
  108. package/dist/icon/index.js +2 -0
  109. package/dist/icon/registry.d.ts +37 -0
  110. package/dist/icon/registry.js +83 -0
  111. package/dist/icon/root/icon-root.d.ts +30 -4
  112. package/dist/icon/root/icon-root.js +41 -6
  113. package/dist/icon/root/index.d.ts +2 -0
  114. package/dist/icon/root/index.js +2 -0
  115. package/dist/icon/set.d.ts +1 -0
  116. package/dist/icon/set.js +3 -0
  117. package/dist/image/root/image-root.d.ts +14 -0
  118. package/dist/image/root/image-root.js +23 -2
  119. package/dist/input/root/input-root.d.ts +11 -0
  120. package/dist/input/root/input-root.js +16 -1
  121. package/dist/kbd/root/kbd-root.d.ts +20 -13
  122. package/dist/kbd/root/kbd-root.js +35 -37
  123. package/dist/kbd/shortcut.d.ts +18 -0
  124. package/dist/kbd/shortcut.js +35 -0
  125. package/dist/legend/hidden-series.d.ts +8 -0
  126. package/dist/legend/hidden-series.js +13 -0
  127. package/dist/legend/root/legend-root.d.ts +56 -0
  128. package/dist/legend/root/legend-root.js +54 -5
  129. package/dist/lightbox/item/lightbox-item.d.ts +15 -0
  130. package/dist/lightbox/item/lightbox-item.js +10 -1
  131. package/dist/lightbox/root/lightbox-root.d.ts +61 -1
  132. package/dist/lightbox/root/lightbox-root.js +94 -4
  133. package/dist/line-chart/root/line-chart-root.d.ts +11 -3
  134. package/dist/line-chart/root/line-chart-root.js +19 -5
  135. package/dist/list/item/list-item.d.ts +68 -1
  136. package/dist/list/item/list-item.js +66 -4
  137. package/dist/list/numbering.d.ts +14 -0
  138. package/dist/list/numbering.js +8 -0
  139. package/dist/list/root/list-root.d.ts +106 -9
  140. package/dist/list/root/list-root.js +189 -4
  141. package/dist/list/selection.d.ts +19 -0
  142. package/dist/list/selection.js +21 -0
  143. package/dist/listbox/root/listbox-root.d.ts +74 -3
  144. package/dist/listbox/root/listbox-root.js +86 -9
  145. package/dist/loader/busy.d.ts +17 -0
  146. package/dist/loader/busy.js +24 -0
  147. package/dist/loader/root/loader-root.d.ts +37 -0
  148. package/dist/loader/root/loader-root.js +52 -3
  149. package/dist/map/root/map-root.d.ts +6 -2
  150. package/dist/map/root/map-root.js +5 -2
  151. package/dist/megamenu/root/megamenu-root.d.ts +21 -0
  152. package/dist/megamenu/root/megamenu-root.js +16 -2
  153. package/dist/menu/index.d.ts +1 -0
  154. package/dist/menu/index.js +1 -0
  155. package/dist/menu/item/menu-item.d.ts +38 -11
  156. package/dist/menu/item/menu-item.js +33 -1
  157. package/dist/menu/root/menu-root.d.ts +25 -1
  158. package/dist/menu/root/menu-root.js +63 -6
  159. package/dist/menu/section/menu-section.d.ts +55 -0
  160. package/dist/menu/section/menu-section.js +60 -0
  161. package/dist/meter/root/meter-root.d.ts +7 -0
  162. package/dist/meter/root/meter-root.js +6 -3
  163. package/dist/navigation/root/navigation-root.d.ts +16 -1
  164. package/dist/navigation/root/navigation-root.js +27 -1
  165. package/dist/notifications/feed-keys.d.ts +10 -0
  166. package/dist/notifications/feed-keys.js +14 -0
  167. package/dist/notifications/notification/notification.d.ts +17 -0
  168. package/dist/notifications/notification/notification.js +21 -2
  169. package/dist/notifications/root/notifications-root.d.ts +60 -0
  170. package/dist/notifications/root/notifications-root.js +76 -1
  171. package/dist/number-input/root/number-input-root.d.ts +47 -0
  172. package/dist/number-input/root/number-input-root.js +58 -22
  173. package/dist/object-inspector/root/object-inspector-root.d.ts +98 -16
  174. package/dist/object-inspector/root/object-inspector-root.js +180 -80
  175. package/dist/object-inspector/rows.d.ts +57 -0
  176. package/dist/object-inspector/rows.js +86 -0
  177. package/dist/option/root/option-root.d.ts +54 -5
  178. package/dist/option/root/option-root.js +34 -5
  179. package/dist/outline/levels.d.ts +31 -0
  180. package/dist/outline/levels.js +23 -0
  181. package/dist/outline/root/outline-root.d.ts +68 -3
  182. package/dist/outline/root/outline-root.js +73 -8
  183. package/dist/pagination/size/pagination-size.d.ts +11 -2
  184. package/dist/pagination/size/pagination-size.js +19 -4
  185. package/dist/pin-input/format.d.ts +7 -0
  186. package/dist/pin-input/format.js +16 -0
  187. package/dist/pin-input/root/pin-input-root.d.ts +21 -0
  188. package/dist/pin-input/root/pin-input-root.js +29 -2
  189. package/dist/popover/root/popover-root.d.ts +62 -4
  190. package/dist/popover/root/popover-root.js +53 -5
  191. package/dist/progress/root/progress-root.d.ts +7 -0
  192. package/dist/progress/root/progress-root.js +9 -3
  193. package/dist/qr-code/export.d.ts +31 -0
  194. package/dist/qr-code/export.js +10 -0
  195. package/dist/qr-code/root/qr-code-root.d.ts +26 -0
  196. package/dist/qr-code/root/qr-code-root.js +49 -2
  197. package/dist/radio/group/radio-group.d.ts +17 -0
  198. package/dist/radio/group/radio-group.js +14 -1
  199. package/dist/rating/root/rating-root.d.ts +25 -0
  200. package/dist/rating/root/rating-root.js +46 -4
  201. package/dist/scatter-chart/root/scatter-chart-root.d.ts +17 -3
  202. package/dist/scatter-chart/root/scatter-chart-root.js +25 -7
  203. package/dist/scroll-area/root/scroll-area-root.d.ts +113 -0
  204. package/dist/scroll-area/root/scroll-area-root.js +218 -3
  205. package/dist/scroll-area/scrollbar.d.ts +65 -0
  206. package/dist/scroll-area/scrollbar.js +24 -0
  207. package/dist/select/root/select-root.d.ts +24 -0
  208. package/dist/select/root/select-root.js +21 -7
  209. package/dist/skeleton/root/skeleton-root.d.ts +25 -0
  210. package/dist/skeleton/root/skeleton-root.js +17 -2
  211. package/dist/slider/root/slider-root.d.ts +39 -0
  212. package/dist/slider/root/slider-root.js +45 -9
  213. package/dist/splitter/root/splitter-root.d.ts +13 -0
  214. package/dist/splitter/root/splitter-root.js +20 -2
  215. package/dist/splitter/snap.d.ts +9 -0
  216. package/dist/splitter/snap.js +12 -0
  217. package/dist/stat/root/stat-root.d.ts +2 -0
  218. package/dist/stat/root/stat-root.js +1 -1
  219. package/dist/steps/reach.d.ts +15 -0
  220. package/dist/steps/reach.js +12 -0
  221. package/dist/steps/root/steps-root.d.ts +30 -0
  222. package/dist/steps/root/steps-root.js +53 -0
  223. package/dist/steps/step/step.d.ts +39 -2
  224. package/dist/steps/step/step.js +29 -7
  225. package/dist/switch/root/switch-root.d.ts +12 -2
  226. package/dist/switch/root/switch-root.js +6 -1
  227. package/dist/table/column/table-column.d.ts +11 -0
  228. package/dist/table/column/table-column.js +6 -1
  229. package/dist/table/root/table-root.d.ts +101 -0
  230. package/dist/table/root/table-root.js +166 -5
  231. package/dist/table/row/table-row.d.ts +47 -1
  232. package/dist/table/row/table-row.js +39 -2
  233. package/dist/tabs/panel/tab-panel.d.ts +9 -5
  234. package/dist/tabs/panel/tab-panel.js +3 -4
  235. package/dist/tabs/root/tabs-root.d.ts +25 -1
  236. package/dist/tabs/root/tabs-root.js +21 -3
  237. package/dist/tabs/tab/tab.d.ts +36 -4
  238. package/dist/tabs/tab/tab.js +46 -3
  239. package/dist/tag/group/tag-group.d.ts +107 -0
  240. package/dist/tag/group/tag-group.js +157 -0
  241. package/dist/tag/index.d.ts +1 -0
  242. package/dist/tag/index.js +1 -0
  243. package/dist/tag/root/tag-root.d.ts +60 -0
  244. package/dist/tag/root/tag-root.js +74 -18
  245. package/dist/tag/selection.d.ts +10 -0
  246. package/dist/tag/selection.js +12 -0
  247. package/dist/textarea/grow.d.ts +22 -0
  248. package/dist/textarea/grow.js +20 -0
  249. package/dist/textarea/root/textarea-root.d.ts +9 -0
  250. package/dist/textarea/root/textarea-root.js +9 -1
  251. package/dist/time-input/root/time-input-root.d.ts +44 -5
  252. package/dist/time-input/root/time-input-root.js +69 -39
  253. package/dist/time-picker/root/time-picker-root.d.ts +54 -8
  254. package/dist/time-picker/root/time-picker-root.js +121 -91
  255. package/dist/timeline/group/timeline-group.d.ts +46 -0
  256. package/dist/timeline/group/timeline-group.js +37 -0
  257. package/dist/timeline/index.d.ts +1 -0
  258. package/dist/timeline/index.js +1 -0
  259. package/dist/timeline/root/timeline-root.d.ts +10 -3
  260. package/dist/toast/hotkey.d.ts +22 -0
  261. package/dist/toast/hotkey.js +23 -0
  262. package/dist/toast/item/toast-item.d.ts +26 -18
  263. package/dist/toast/item/toast-item.js +55 -48
  264. package/dist/toast/root/toast-root.d.ts +42 -8
  265. package/dist/toast/root/toast-root.js +64 -4
  266. package/dist/toggle/group/toggle-group.d.ts +57 -15
  267. package/dist/toggle/group/toggle-group.js +69 -9
  268. package/dist/toggle/root/toggle-root.d.ts +12 -1
  269. package/dist/toggle/root/toggle-root.js +11 -3
  270. package/dist/toolbar/root/toolbar-root.d.ts +13 -0
  271. package/dist/toolbar/root/toolbar-root.js +15 -5
  272. package/dist/tooltip/focus-target.d.ts +6 -0
  273. package/dist/tooltip/focus-target.js +9 -0
  274. package/dist/tooltip/root/tooltip-root.d.ts +42 -17
  275. package/dist/tooltip/root/tooltip-root.js +50 -9
  276. package/dist/tour/naming.d.ts +30 -0
  277. package/dist/tour/naming.js +10 -0
  278. package/dist/tour/root/tour-root.d.ts +35 -0
  279. package/dist/tour/root/tour-root.js +56 -5
  280. package/dist/tour/stop/tour-stop.d.ts +53 -8
  281. package/dist/tour/stop/tour-stop.js +45 -15
  282. package/dist/tour/wait.d.ts +11 -0
  283. package/dist/tour/wait.js +19 -0
  284. package/dist/tree/item/tree-item.d.ts +54 -1
  285. package/dist/tree/item/tree-item.js +89 -20
  286. package/dist/tree/root/tree-root.d.ts +37 -0
  287. package/dist/tree/root/tree-root.js +51 -6
  288. package/dist/tree/selection.d.ts +24 -0
  289. package/dist/tree/selection.js +26 -0
  290. package/dist/trend/root/trend-root.d.ts +13 -0
  291. package/dist/trend/root/trend-root.js +14 -9
  292. package/dist/video/media-events.d.ts +49 -0
  293. package/dist/video/media-events.js +39 -0
  294. package/dist/video/root/video-root.d.ts +99 -13
  295. package/dist/video/root/video-root.js +84 -47
  296. package/dist/video-playlist/menu/video-playlist-menu.d.ts +3 -0
  297. package/dist/video-playlist/menu/video-playlist-menu.js +2 -1
  298. package/dist/video-playlist/order.d.ts +41 -0
  299. package/dist/video-playlist/order.js +34 -0
  300. package/dist/video-playlist/root/video-playlist-root.d.ts +70 -2
  301. package/dist/video-playlist/root/video-playlist-root.js +60 -16
  302. package/dist/virtual-list/controls.d.ts +4 -0
  303. package/dist/virtual-list/controls.js +30 -0
  304. package/dist/virtual-list/fill.d.ts +30 -0
  305. package/dist/virtual-list/fill.js +39 -0
  306. package/dist/virtual-list/keys.d.ts +15 -0
  307. package/dist/virtual-list/keys.js +24 -0
  308. package/dist/virtual-list/root/virtual-list-root.d.ts +155 -23
  309. package/dist/virtual-list/root/virtual-list-root.js +175 -34
  310. package/lint.json +1 -1
  311. package/package.json +5 -5
  312. package/types/jsx.d.ts +8871 -1286
  313. package/types/svelte.d.ts +3 -0
  314. package/types/vue.d.ts +1918 -269
@@ -22,11 +22,14 @@ let HelixHeadlessCommand = class HelixHeadlessCommand extends MixinControllerOpe
22
22
  constructor() {
23
23
  super(...arguments);
24
24
  this.emptyText = 'No commands';
25
+ this.filterDelay = 0;
25
26
  this.hotkey = 'mod+k';
26
27
  this.label = 'Commands';
27
28
  this.loading = false;
28
29
  this.loadingText = 'Loading';
29
30
  this.placeholder = 'Search commands';
31
+ this.resultLabel = '{count} command';
32
+ this.resultsLabel = '{count} commands';
30
33
  this.footed = false;
31
34
  this.handleHotkey = (event) => {
32
35
  if (this.hotkey === '') {
@@ -73,9 +76,19 @@ let HelixHeadlessCommand = class HelixHeadlessCommand extends MixinControllerOpe
73
76
  }
74
77
  };
75
78
  this.swallowOptionSelect = (event) => {
76
- if (event.target !== this) {
77
- event.stopImmediatePropagation();
79
+ if (event.target === this) {
80
+ return;
81
+ }
82
+ event.stopImmediatePropagation();
83
+ const { href, value } = event.detail;
84
+ if (href === undefined) {
85
+ return;
86
+ }
87
+ if (!this.dispatchEvent(new HelixSelectEvent({ href, value }))) {
88
+ event.preventDefault();
89
+ return;
78
90
  }
91
+ this.requestOpen(false);
79
92
  };
80
93
  }
81
94
  get listbox() {
@@ -125,7 +138,8 @@ let HelixHeadlessCommand = class HelixHeadlessCommand extends MixinControllerOpe
125
138
  }
126
139
  renderDialog() {
127
140
  return html `<${this.tag('dialog')}
128
- exportparts="dialog"
141
+ exportparts="body: dialog-body, dialog, dismiss: dialog-dismiss, dismiss-mark: dialog-dismiss-mark,
142
+ footer: dialog-footer, header: dialog-header"
129
143
  label=${this.label}
130
144
  .open=${this.open}
131
145
  @helix-before-close=${() => {
@@ -142,8 +156,11 @@ let HelixHeadlessCommand = class HelixHeadlessCommand extends MixinControllerOpe
142
156
  search-field: listbox-search-field"
143
157
  aria-label=${this.label}
144
158
  empty-text=${this.emptyText}
159
+ filter-delay=${this.filterDelay}
145
160
  filter-label=${this.placeholder}
146
161
  loading-text=${this.loadingText}
162
+ result-label=${this.resultLabel}
163
+ results-label=${this.resultsLabel}
147
164
  ?loading=${this.loading}
148
165
  filterable
149
166
  @helix-before-change=${this.handleChange}
@@ -151,6 +168,10 @@ let HelixHeadlessCommand = class HelixHeadlessCommand extends MixinControllerOpe
151
168
  @input=${this.stopInner}
152
169
  >
153
170
  <slot></slot>
171
+ <!-- Handed on with the text as the fallback, for the reason Combobox
172
+ gives: the list's own fallback never shows behind a passed slot. -->
173
+ <slot name="empty" slot="empty">${this.emptyText}</slot>
174
+ <slot name="loading" slot="loading">${this.loadingText}</slot>
154
175
  </${this.tag('listbox')}>
155
176
  <div ?hidden=${!this.footed} part="footer" slot="footer">
156
177
  <slot
@@ -169,6 +190,9 @@ let HelixHeadlessCommand = class HelixHeadlessCommand extends MixinControllerOpe
169
190
  __decorate([
170
191
  property({ attribute: 'empty-text' })
171
192
  ], HelixHeadlessCommand.prototype, "emptyText", void 0);
193
+ __decorate([
194
+ property({ attribute: 'filter-delay', type: Number })
195
+ ], HelixHeadlessCommand.prototype, "filterDelay", void 0);
172
196
  __decorate([
173
197
  property()
174
198
  ], HelixHeadlessCommand.prototype, "hotkey", void 0);
@@ -184,6 +208,12 @@ __decorate([
184
208
  __decorate([
185
209
  property()
186
210
  ], HelixHeadlessCommand.prototype, "placeholder", void 0);
211
+ __decorate([
212
+ property({ attribute: 'result-label' })
213
+ ], HelixHeadlessCommand.prototype, "resultLabel", void 0);
214
+ __decorate([
215
+ property({ attribute: 'results-label' })
216
+ ], HelixHeadlessCommand.prototype, "resultsLabel", void 0);
187
217
  __decorate([
188
218
  state()
189
219
  ], HelixHeadlessCommand.prototype, "footed", void 0);
@@ -0,0 +1,22 @@
1
+ /** What a `from` reference names: an element by its id, and what to read from it. */
2
+ export interface FromReference {
3
+ /** An attribute to read, written `id[attribute]`. */
4
+ readonly attribute?: string;
5
+ /** The id of the element. */
6
+ readonly id: string;
7
+ /** A property to read, written `id.property`. */
8
+ readonly property?: string;
9
+ }
10
+ /**
11
+ * Reads a `from` reference: `id` for the element's text, `id[attribute]` for
12
+ * an attribute, and `id.property` for a property. Web Awesome's Copy Button
13
+ * takes the same three shapes.
14
+ *
15
+ * `null` for a reference with no id, or with anything after the brackets.
16
+ */
17
+ export declare const parseFrom: (reference: string) => FromReference | null;
18
+ /**
19
+ * The text a `from` reference names, looked up in the tree `scope` is in, or
20
+ * `null` where the element or its attribute is not there.
21
+ */
22
+ export declare const readFrom: (reference: string, scope: Element) => string | null;
@@ -0,0 +1,28 @@
1
+ import { elementById } from '@fusion.dev/helix-core';
2
+ export const parseFrom = (reference) => {
3
+ const written = reference.trim();
4
+ const bracket = /^([^[\].\s]+)\[([^\]\s]+)\]$/u.exec(written);
5
+ if (bracket) {
6
+ return { attribute: bracket[2], id: bracket[1] };
7
+ }
8
+ const dot = /^([^[\].\s]+)\.([^[\].\s]+)$/u.exec(written);
9
+ if (dot) {
10
+ return { id: dot[1], property: dot[2] };
11
+ }
12
+ return /^[^[\].\s]+$/u.test(written) ? { id: written } : null;
13
+ };
14
+ export const readFrom = (reference, scope) => {
15
+ const parsed = parseFrom(reference);
16
+ const element = parsed ? elementById(scope, parsed.id) : null;
17
+ if (!(parsed && element)) {
18
+ return null;
19
+ }
20
+ if (parsed.attribute !== undefined) {
21
+ return element.getAttribute(parsed.attribute);
22
+ }
23
+ if (parsed.property !== undefined) {
24
+ const read = element[parsed.property];
25
+ return read === undefined || read === null ? null : String(read);
26
+ }
27
+ return element.textContent;
28
+ };
@@ -12,7 +12,13 @@ import '../../tooltip/index.js';
12
12
  * The confirmation and the event wait for the write to finish. The browser can
13
13
  * refuse a clipboard write, for example on an insecure origin, in a document
14
14
  * that is not focused, or after a gesture that does not qualify. A refused
15
- * write leaves the button unchanged.
15
+ * write, or nothing to copy, names the button with `error-label` for the same
16
+ * moment a copy shows `copied-label`, draws a cross, and sends
17
+ * `helix-copy-error`.
18
+ *
19
+ * `from` copies from another element on the page: its text, an attribute
20
+ * written `id[attribute]`, or a property written `id.property`, read at the
21
+ * press. It takes the place of `value`.
16
22
  *
17
23
  * It replaces Button's render and its press, so it never submits a form or
18
24
  * sends a command: `type`, `command`, `commandfor` and the `form*` overrides
@@ -28,10 +34,13 @@ import '../../tooltip/index.js';
28
34
  *
29
35
  * @slot - The icon shown before a copy. Defaults to a clipboard.
30
36
  * @slot copied - The icon shown after a successful copy. Defaults to a check mark.
37
+ * @slot failed - The icon shown after a copy that put nothing on the clipboard. Defaults to a cross.
31
38
  *
32
39
  * @event {HelixCopyEvent} helix-copy - Fired after the clipboard write succeeds.
40
+ * @event {HelixCopyErrorEvent} helix-copy-error - Fired when a press put nothing on the clipboard: the browser did not allow the write, or there was nothing to copy.
33
41
  *
34
42
  * @csspart button - The inner button.
43
+ * @csspart live - The live region that says `pending-label` when the button becomes pending under focus. It is rendered from the first time the button is pending.
35
44
  * @csspart mark - The clipboard icon, and the confirmation icon that replaces it.
36
45
  * @csspart tooltip - The tooltip bubble, forwarded from the tooltip inside the button.
37
46
  * @csspart tooltip-arrow - The tooltip's arrow, which points at the button.
@@ -52,6 +61,18 @@ export declare class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
52
61
  * dash-casing it, and `copiedlabel` is not what anyone would type.
53
62
  */
54
63
  copiedLabel: string;
64
+ /**
65
+ * The button's name and tooltip text after a press that put nothing on the
66
+ * clipboard.
67
+ */
68
+ errorLabel: string;
69
+ /**
70
+ * The element to copy from, by its id: `key` for its text, `key[value]` for
71
+ * an attribute, and `key.value` for a property. Read at the press, and used
72
+ * in place of `value`. An element that is not there copies nothing, which is
73
+ * a failed copy.
74
+ */
75
+ from: string;
55
76
  /**
56
77
  * The button's name and tooltip text before a copy.
57
78
  *
@@ -67,6 +88,26 @@ export declare class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
67
88
  * whatever its `type`. Declared here so its own page says what it holds.
68
89
  */
69
90
  value: string;
91
+ /** @internal A copy button sends no command. */
92
+ command: string;
93
+ /** @internal A copy button sends no command. */
94
+ commandFor: string;
95
+ /** @internal A copy button discloses nothing. */
96
+ expanded?: boolean;
97
+ /** @internal A copy button submits no form. */
98
+ formAction: string;
99
+ /** @internal A copy button submits no form. */
100
+ formEnctype: string;
101
+ /** @internal A copy button submits no form. */
102
+ formMethod: string;
103
+ /** @internal A copy button submits no form. */
104
+ formNoValidate: boolean;
105
+ /** @internal A copy button submits no form. */
106
+ formTarget: string;
107
+ /** @internal A copy button opens nothing. */
108
+ popup?: 'dialog' | 'grid' | 'listbox' | 'menu' | 'tree';
109
+ /** @internal A copy button never submits or resets, whatever its `type`. */
110
+ type: 'button' | 'submit' | 'reset';
70
111
  /**
71
112
  * The words for the state it is in, used twice on purpose.
72
113
  *
@@ -107,6 +148,9 @@ export declare class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
107
148
  */
108
149
  private readonly clipboard;
109
150
  private get copied();
151
+ private get failed();
152
+ /** What a press copies: the text `from` names, or `value`. */
153
+ private get text();
110
154
  private readonly handleCopy;
111
155
  /**
112
156
  * Both faces, drawn rather than demanded.
@@ -139,6 +183,8 @@ export declare class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
139
183
  * the focused element mid-press.
140
184
  */
141
185
  protected renderCopiedIcon(): TemplateResult;
186
+ /** The mark for a press that put nothing on the clipboard, behind a seam of its own. */
187
+ protected renderFailedIcon(): TemplateResult;
142
188
  /**
143
189
  * The bubble the control sits inside, behind a seam.
144
190
  *
@@ -5,31 +5,45 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  var HelixHeadlessCopyButton_1;
8
- import { CopyController, customElement } from '@fusion.dev/helix-core';
9
- import { check, copy } from '@fusion.dev/helix-icons';
8
+ import { CopyController, customElement, HelixCopyErrorEvent } from '@fusion.dev/helix-core';
9
+ import { check, copy, x } from '@fusion.dev/helix-icons';
10
10
  import { nothing } from 'lit';
11
11
  import { property } from 'lit/decorators.js';
12
12
  import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
13
13
  import { html } from 'lit/static-html.js';
14
14
  import { HelixHeadlessIconButton } from '../../icon-button/root/icon-button-root.js';
15
+ import { readFrom } from '../from.js';
15
16
  import '../../tooltip/index.js';
16
17
  const CONFIRM = 1600;
17
18
  let HelixHeadlessCopyButton = HelixHeadlessCopyButton_1 = class HelixHeadlessCopyButton extends HelixHeadlessIconButton {
18
19
  constructor() {
19
20
  super(...arguments);
20
21
  this.copiedLabel = 'Copied';
22
+ this.errorLabel = 'Could not copy';
23
+ this.from = '';
21
24
  this.label = 'Copy';
22
25
  this.value = '';
23
26
  this.namedBy = null;
24
27
  this.clipboard = new CopyController(this, { after: CONFIRM });
25
- this.handleCopy = async () => {
28
+ this.handleCopy = async (event) => {
29
+ if (this.pending) {
30
+ event.preventDefault();
31
+ event.stopImmediatePropagation();
32
+ return;
33
+ }
26
34
  if (this.isDisabled) {
27
35
  return;
28
36
  }
29
- await this.clipboard.copy(this.value);
37
+ const wrote = await this.clipboard.copy(this.text);
38
+ if (!wrote && this.isConnected) {
39
+ this.dispatchEvent(new HelixCopyErrorEvent());
40
+ }
30
41
  };
31
42
  }
32
43
  get says() {
44
+ if (this.failed) {
45
+ return this.errorLabel;
46
+ }
33
47
  return this.copied ? this.copiedLabel : this.namedBy || this.label;
34
48
  }
35
49
  get forwardsLabel() {
@@ -41,32 +55,48 @@ let HelixHeadlessCopyButton = HelixHeadlessCopyButton_1 = class HelixHeadlessCop
41
55
  get copied() {
42
56
  return this.clipboard.copied;
43
57
  }
58
+ get failed() {
59
+ return this.clipboard.failed;
60
+ }
61
+ get text() {
62
+ return this.from === '' ? this.value : (readFrom(this.from, this) ?? '');
63
+ }
44
64
  static icon(glyph) {
45
65
  return html `<svg part="mark" fill="currentColor" viewBox=${glyph.viewBox} aria-hidden="true">
46
66
  ${unsafeSVG(glyph.content)}
47
67
  </svg>`;
48
68
  }
49
69
  render() {
50
- return this.renderTooltip(html `<button
70
+ return html `${this.renderTooltip(html `<button
51
71
  part="button"
52
72
  type="button"
73
+ aria-busy=${this.pending ? 'true' : nothing}
74
+ aria-disabled=${this.pending ? 'true' : nothing}
53
75
  aria-label=${this.says}
54
76
  data-copied=${this.copied ? '' : nothing}
77
+ data-failed=${this.failed ? '' : nothing}
55
78
  tabindex=${this.focusable ? nothing : '-1'}
56
79
  ?disabled=${this.isDisabled}
57
80
  @click=${this.handleCopy}
58
81
  >
59
- ${this.renderCopiedIcon()} ${this.renderCopyIcon()}
60
- </button>`);
82
+ ${this.renderCopiedIcon()} ${this.renderFailedIcon()} ${this.renderCopyIcon()}
83
+ </button>`)}${this.renderLive()}`;
61
84
  }
62
85
  renderCopyIcon() {
63
- return html `<slot ?hidden=${this.copied}>${HelixHeadlessCopyButton_1.icon(copy)}</slot>`;
86
+ return html `<slot ?hidden=${this.copied || this.failed}
87
+ >${HelixHeadlessCopyButton_1.icon(copy)}</slot
88
+ >`;
64
89
  }
65
90
  renderCopiedIcon() {
66
91
  return html `<slot name="copied" ?hidden=${!this.copied}
67
92
  >${HelixHeadlessCopyButton_1.icon(check)}</slot
68
93
  >`;
69
94
  }
95
+ renderFailedIcon() {
96
+ return html `<slot name="failed" ?hidden=${!this.failed}
97
+ >${HelixHeadlessCopyButton_1.icon(x)}</slot
98
+ >`;
99
+ }
70
100
  renderTooltip(control) {
71
101
  return html `<${this.tag('tooltip')} content=${this.says} persist
72
102
  exportparts="arrow: tooltip-arrow, arrow-bottom: tooltip-arrow-bottom,
@@ -80,6 +110,12 @@ let HelixHeadlessCopyButton = HelixHeadlessCopyButton_1 = class HelixHeadlessCop
80
110
  __decorate([
81
111
  property({ attribute: 'copied-label' })
82
112
  ], HelixHeadlessCopyButton.prototype, "copiedLabel", void 0);
113
+ __decorate([
114
+ property({ attribute: 'error-label' })
115
+ ], HelixHeadlessCopyButton.prototype, "errorLabel", void 0);
116
+ __decorate([
117
+ property()
118
+ ], HelixHeadlessCopyButton.prototype, "from", void 0);
83
119
  __decorate([
84
120
  property()
85
121
  ], HelixHeadlessCopyButton.prototype, "label", void 0);
@@ -39,6 +39,8 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
39
39
  * selection, and `default-selected` holds what the markup declared.
40
40
  * - The checkbox in the heading selects every row in the result, across pages,
41
41
  * and shows a dash while only some are chosen.
42
+ * - Shift with a press on a checkbox selects every row between it and the row
43
+ * last chosen.
42
44
  *
43
45
  * To act on a single row, such as opening it, put a link or a button in a cell.
44
46
  *
@@ -52,6 +54,27 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
52
54
  * cell. Tab moves between the controls of one cell.
53
55
  * - Enter or Space on a sortable heading sorts by it, and Space on a row of a
54
56
  * `selectable` table selects it.
57
+ * - In a `selectable` table, Shift with Up or Down selects the rows it moves
58
+ * across, Shift with Space selects every row from the one last chosen, and
59
+ * Control or Command with A selects every row.
60
+ * - Typing letters moves to the next row whose row header starts with them.
61
+ *
62
+ * Each row is named by its row header, the column marked `row-header`, or the
63
+ * first column with a `field` where none is. A screen reader says it as a reader
64
+ * moves between rows.
65
+ *
66
+ * **Rows that hold rows.** `child-field` names the field that holds a row's
67
+ * child rows, and the grid becomes a tree grid. The row header column draws a
68
+ * mark that a press opens and closes a row by, and `expanded` holds the keys of the open
69
+ * rows, which `row-key` names. Right on a closed row's header opens it, Left on
70
+ * an open one closes it, and Left on a child moves to its parent. A sort orders
71
+ * the rows under each parent, and a search shows the rows that lead to each
72
+ * match, open.
73
+ *
74
+ * `load-more` adds a row after the last one with a button that sends
75
+ * `helix-load-more`. A `windowed` table also sends it by itself once a reader
76
+ * scrolls within one screen of the end, once for each number of rows. Add the
77
+ * next rows to `rows`, and set `loading` while they are on their way.
55
78
  *
56
79
  * The controls inside the cells leave the tab order, so Tab moves past the
57
80
  * whole grid. A windowed table keeps the row holding focus drawn while the
@@ -83,8 +106,10 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
83
106
  * @slot toolbar - Content above the grid, such as a search field or actions.
84
107
  *
85
108
  * @event {HelixActivateEvent} helix-activate - Fired after the page changes, with the new page as a string in `detail.value`.
109
+ * @event {HelixExpandEvent} helix-expand - Fired after a row opens or closes, with every open row's key, separated by commas, which `expanded` also holds.
86
110
  * @event {HelixFilterEvent} helix-filter - The search query is about to change. Cancelable: cancel it to keep the current query.
87
111
  * @event {HelixFilteredEvent} helix-filtered - Fired after the search query changes, with the new query.
112
+ * @event {HelixLoadMoreEvent} helix-load-more - Fired when a reader asks for more rows, by the `load-more` row's button or by scrolling a `windowed` table near its end.
88
113
  * @event {HelixNavigateEvent} helix-navigate - Another page was requested. Cancelable: cancel it to stay on the current page.
89
114
  * @event {HelixReorderEvent} helix-reorder - The columns are about to move. The event carries every field in the new order. Cancelable: cancel it to keep the current order.
90
115
  * @event {HelixReorderedEvent} helix-reordered - Fired after the columns move, with every field in the new order.
@@ -96,6 +121,7 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
96
121
  * @csspart after - The space that stands in for the rows below the window. Only while `windowed`.
97
122
  * @csspart before - The space that stands in for the rows above the window. Only while `windowed`.
98
123
  * @csspart cell - One cell.
124
+ * @csspart cell-header - Added to `cell` for a cell of the row header column.
99
125
  * @csspart cell-selected - Added to `cell` in a selected row.
100
126
  * @csspart checkbox - A row's checkbox, or the checkbox in the heading that selects every row.
101
127
  * @csspart checkbox-box - The box drawn for the checkbox's input.
@@ -113,6 +139,9 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
113
139
  * @csspart head - The row that holds the column headings. It is `display: contents`, so it takes no space.
114
140
  * @csspart live - A copy of the empty and loading messages, which screen readers announce when they change. Visually hidden in the styled tier.
115
141
  * @csspart loading - Shown while the rows are loading.
142
+ * @csspart more - The row after the last one that holds the button for more rows, while `load-more` is set.
143
+ * @csspart more-button - The button that asks for more rows.
144
+ * @csspart more-cell - The cell of the `more` row, which spans every column.
116
145
  * @csspart pagination - The built-in pagination, when it is shown.
117
146
  * @csspart pagination-first - The pagination's button that goes to the first page, shown with `ends`.
118
147
  * @csspart pagination-gap - The pagination's marker for pages that are not shown.
@@ -131,9 +160,13 @@ declare const HelixHeadlessDataTable_base: (new (...args: any[]) => import("@fus
131
160
  * @csspart select-all - The heading that holds the checkbox that selects every row.
132
161
  * @csspart select-selected - Added to `select` in a selected row.
133
162
  * @csspart table - The grid.
163
+ * @csspart toggle - The mark in a row header that a press opens and closes its row by, in a tree grid.
164
+ * @csspart toggle-mark - The caret in `toggle`. It points along the line while the row is closed and down while it is open.
165
+ * @csspart toggle-open - Added to `toggle` while its row is open.
134
166
  * @csspart toolbar - The region above the grid.
135
167
  *
136
168
  * @cssproperty --data-table-cell-align - The alignment of the cell's column: `start`, `center`, or `end`. Unset when the column sets none. The component writes it on each cell it draws, and the stylesheet reads it. `Table` sets `--table-cell-align` for the same purpose.
169
+ * @cssproperty --data-table-level - How deep a row is in a tree grid, from 1. The component writes it on each row header cell, and the stylesheet indents by it.
137
170
  * @cssproperty --data-table-template - The column track list, worked out from the columns. The component writes it inline on the element that reads it, so setting it has no effect. Set a column's `width` to change it.
138
171
  */
139
172
  export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base {
@@ -150,6 +183,19 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
150
183
  static shadowRootOptions: ShadowRootInit;
151
184
  /** The word for an ascending sort, in `sorted-label`. */
152
185
  ascendingLabel: string;
186
+ /**
187
+ * The field that holds a row's child rows, as an array. Set it, and `row-key`,
188
+ * and the grid becomes a tree grid.
189
+ *
190
+ * Reflected, because the styled tier indents a tree grid's row headers by
191
+ * it. No default, so a table that sets none writes nothing onto its host.
192
+ */
193
+ childField?: string;
194
+ /**
195
+ * The keys of the rows open at the start, separated by commas. Used until
196
+ * `expanded` is set.
197
+ */
198
+ defaultExpanded: string;
153
199
  /**
154
200
  * The starting search query, used until `filter` is set.
155
201
  */
@@ -187,6 +233,12 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
187
233
  * been measured.
188
234
  */
189
235
  estimate: number;
236
+ /**
237
+ * The keys of the open rows in a tree grid, separated by commas, the shape of
238
+ * `selected`. A reader's press writes it and then sends `helix-expand`.
239
+ */
240
+ get expanded(): string;
241
+ set expanded(next: string);
190
242
  /**
191
243
  * The search query. A row is shown when the query matches any of its columns.
192
244
  *
@@ -205,6 +257,16 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
205
257
  * The grid's name, read by screen readers.
206
258
  */
207
259
  label: string;
260
+ /**
261
+ * Draws a row after the last one with a button that asks for more rows.
262
+ *
263
+ * The button sends `helix-load-more`, and a `windowed` table sends it by
264
+ * itself once a reader scrolls within one screen of the end. Turn it off
265
+ * when there are no more rows to load.
266
+ */
267
+ loadMore: boolean;
268
+ /** The words on the button in the `more` row. */
269
+ loadMoreLabel: string;
208
270
  /**
209
271
  * Where filtering, sorting, and paging happen. `client` does them in the
210
272
  * table, and `server` leaves them to your code.
@@ -394,6 +456,7 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
394
456
  private paginatedState;
395
457
  private orderState;
396
458
  private selectedState;
459
+ private expandedState;
397
460
  /**
398
461
  * The row holding the grid's tab stop: `-1` for the headings, otherwise a
399
462
  * row of the page counted from 0. Unset until a reader moves, when the stop
@@ -411,6 +474,19 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
411
474
  private focusWanted;
412
475
  /** The page as last drawn, for the keys to count rows against between renders. */
413
476
  private drawnPage;
477
+ /** Whether the last render drew the `more` row, which follows the page's rows. */
478
+ private moreDrawn;
479
+ /** The letters typed at the grid, which move to the row whose header they start. */
480
+ private readonly typeahead;
481
+ /**
482
+ * The key of the row a range selection runs from: the row last chosen or let
483
+ * go one at a time.
484
+ */
485
+ private anchorKey;
486
+ /** Whether Shift was held on the last press, for a checkbox that asks to range. */
487
+ private shiftPressed;
488
+ /** The number of rows when `helix-load-more` last went out on its own. */
489
+ private askedAt;
414
490
  /** The grid's size as the last render counted it, for the internals. */
415
491
  private counts;
416
492
  /** The order while a grip is being dragged, before anybody has been asked. */
@@ -456,6 +532,21 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
456
532
  * result to save a sort is the wrong trade.
457
533
  */
458
534
  private held;
535
+ /** The tree last laid out, kept against what laid it out. */
536
+ private grown;
537
+ /**
538
+ * The rows of a tree grid, laid out flat with each open row's children under
539
+ * it. `server` mode lays out the rows it was handed and neither filters nor
540
+ * sorts them.
541
+ */
542
+ private tree;
543
+ /** The keys of the open rows. */
544
+ private get opened();
545
+ /**
546
+ * The result in order: the tree laid out flat in a tree grid, and the
547
+ * arranged rows otherwise.
548
+ */
549
+ private flat;
459
550
  private arrange;
460
551
  /**
461
552
  * The part of a page the reader can see, which is every row when not
@@ -635,9 +726,34 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
635
726
  * is all it holds.
636
727
  */
637
728
  private get everyKey();
638
- /** Ticks or clears one row, which the checkbox asked for and was refused. */
729
+ /**
730
+ * Ticks or clears one row, which the checkbox asked for and was refused. With
731
+ * Shift held it selects every row from the one last chosen.
732
+ */
639
733
  private readonly toggleRow;
640
- /** Asks for one row to be chosen or let go. */
734
+ /** The keys of the rows on the page, in the order they are drawn. */
735
+ private get pageKeys();
736
+ /**
737
+ * Selects every row on the page from the one a range runs from to row `to`,
738
+ * keeping what was already selected. With no row to run from, the range is
739
+ * the row the reader is on, `from`, and it becomes the one to run from.
740
+ */
741
+ private selectRange;
742
+ /** The words a typed search matches each row by: its row header's value. */
743
+ private get rowWords();
744
+ /**
745
+ * The column whose cells head their rows: the one marked `row-header`, or
746
+ * the first with a `field`.
747
+ */
748
+ private get headerColumn();
749
+ /** Sends `helix-load-more`, for the button in the `more` row or a scroll near the end. */
750
+ private askForMore;
751
+ /**
752
+ * Asks for more rows on its own once a reader scrolls a `windowed` table to
753
+ * within one screen of the end, once for each number of rows it holds.
754
+ */
755
+ private askNearEnd;
756
+ /** Asks for one row to be chosen or let go, and makes it where a range runs from. */
641
757
  private chooseRow;
642
758
  /** Selects every row, or clears them all where every one already was. */
643
759
  private readonly toggleAll;
@@ -758,6 +874,20 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
758
874
  * same value to the same three.
759
875
  */
760
876
  private renderCell;
877
+ /**
878
+ * The mark a pointer opens or closes a row of a tree grid by.
879
+ *
880
+ * **Hidden from assistive technology, and no button.** The row says whether
881
+ * it is open with `aria-expanded`, and Right and Left open and close it. A
882
+ * button in the row header put its own name, "Expand src", into the name of
883
+ * the header that names the row.
884
+ */
885
+ private renderToggle;
886
+ /**
887
+ * Opens or closes a row of a tree grid, and says so with `helix-expand`.
888
+ * Nothing moves where it is that way already.
889
+ */
890
+ private toggleOpen;
761
891
  /**
762
892
  * A checkbox, named for what it chooses, whose change the table takes.
763
893
  *
@@ -801,6 +931,13 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
801
931
  private readonly handleScroll;
802
932
  /** The heading of the checkbox column, which selects the whole result. */
803
933
  private renderSelectAll;
934
+ /**
935
+ * The row after the last one, holding the button that asks for more rows.
936
+ *
937
+ * A row of the grid, one cell spanning every column, so the arrows reach it
938
+ * after the last row and Enter or Space on it asks.
939
+ */
940
+ private renderMore;
804
941
  protected render(): TemplateResult;
805
942
  /**
806
943
  * Listens on the host, not on the slot the columns are assigned to.
@@ -819,6 +956,11 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
819
956
  */
820
957
  connectedCallback(): void;
821
958
  disconnectedCallback(): void;
959
+ /**
960
+ * Notes whether Shift is held, before the press reaches a checkbox, whose
961
+ * request carries only the state it asks for.
962
+ */
963
+ private readonly notePress;
822
964
  /**
823
965
  * A click on a sortable heading, anywhere but its grip or its edge.
824
966
  *
@@ -875,6 +1017,12 @@ export declare class HelixHeadlessDataTable extends HelixHeadlessDataTable_base
875
1017
  * alone.
876
1018
  */
877
1019
  private readonly handleGridKey;
1020
+ /**
1021
+ * Left and Right on a row header of a tree grid: forward opens a closed row,
1022
+ * back closes an open one, and back on a child moves to its parent. Says
1023
+ * whether it took the key, and the arrows move between cells where it did not.
1024
+ */
1025
+ private treeKey;
878
1026
  /** Enter, Space and F2 on a cell. */
879
1027
  private activate;
880
1028
  /** The keys the grid takes while focus is on a control inside a cell. */