@fusion.dev/helix-headless 0.0.0-dev

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 (424) hide show
  1. package/LICENSE +21 -0
  2. package/custom-elements.json +75202 -0
  3. package/dist/accordion/index.d.ts +2 -0
  4. package/dist/accordion/index.js +2 -0
  5. package/dist/accordion/item/accordion-item.d.ts +141 -0
  6. package/dist/accordion/item/accordion-item.js +214 -0
  7. package/dist/accordion/root/accordion-root.d.ts +57 -0
  8. package/dist/accordion/root/accordion-root.js +96 -0
  9. package/dist/announcement/index.d.ts +1 -0
  10. package/dist/announcement/index.js +1 -0
  11. package/dist/announcement/root/announcement-root.d.ts +106 -0
  12. package/dist/announcement/root/announcement-root.js +144 -0
  13. package/dist/app-header/index.d.ts +1 -0
  14. package/dist/app-header/index.js +1 -0
  15. package/dist/app-header/root/app-header-root.d.ts +113 -0
  16. package/dist/app-header/root/app-header-root.js +147 -0
  17. package/dist/avatar/group/avatar-group.d.ts +116 -0
  18. package/dist/avatar/group/avatar-group.js +136 -0
  19. package/dist/avatar/index.d.ts +2 -0
  20. package/dist/avatar/index.js +2 -0
  21. package/dist/avatar/root/avatar-root.d.ts +71 -0
  22. package/dist/avatar/root/avatar-root.js +147 -0
  23. package/dist/badge/index.d.ts +1 -0
  24. package/dist/badge/index.js +1 -0
  25. package/dist/badge/root/badge-root.d.ts +61 -0
  26. package/dist/badge/root/badge-root.js +121 -0
  27. package/dist/bar-chart/index.d.ts +1 -0
  28. package/dist/bar-chart/index.js +1 -0
  29. package/dist/bar-chart/root/bar-chart-root.d.ts +266 -0
  30. package/dist/bar-chart/root/bar-chart-root.js +515 -0
  31. package/dist/blockquote/index.d.ts +1 -0
  32. package/dist/blockquote/index.js +1 -0
  33. package/dist/blockquote/root/blockquote-root.d.ts +51 -0
  34. package/dist/blockquote/root/blockquote-root.js +84 -0
  35. package/dist/breadcrumbs/breadcrumb/breadcrumb.d.ts +104 -0
  36. package/dist/breadcrumbs/breadcrumb/breadcrumb.js +137 -0
  37. package/dist/breadcrumbs/index.d.ts +2 -0
  38. package/dist/breadcrumbs/index.js +2 -0
  39. package/dist/breadcrumbs/root/breadcrumbs-root.d.ts +77 -0
  40. package/dist/breadcrumbs/root/breadcrumbs-root.js +94 -0
  41. package/dist/button/index.d.ts +1 -0
  42. package/dist/button/index.js +1 -0
  43. package/dist/button/root/button-root.d.ts +251 -0
  44. package/dist/button/root/button-root.js +401 -0
  45. package/dist/button-group/index.d.ts +1 -0
  46. package/dist/button-group/index.js +1 -0
  47. package/dist/button-group/root/button-group-root.d.ts +62 -0
  48. package/dist/button-group/root/button-group-root.js +62 -0
  49. package/dist/callout/index.d.ts +1 -0
  50. package/dist/callout/index.js +1 -0
  51. package/dist/callout/root/callout-root.d.ts +72 -0
  52. package/dist/callout/root/callout-root.js +90 -0
  53. package/dist/card/index.d.ts +1 -0
  54. package/dist/card/index.js +1 -0
  55. package/dist/card/root/card-root.d.ts +54 -0
  56. package/dist/card/root/card-root.js +71 -0
  57. package/dist/carousel/index.d.ts +1 -0
  58. package/dist/carousel/index.js +1 -0
  59. package/dist/carousel/root/carousel-root.d.ts +399 -0
  60. package/dist/carousel/root/carousel-root.js +723 -0
  61. package/dist/chat/composer/chat-composer.d.ts +160 -0
  62. package/dist/chat/composer/chat-composer.js +273 -0
  63. package/dist/chat/index.d.ts +3 -0
  64. package/dist/chat/index.js +3 -0
  65. package/dist/chat/message/chat-message.d.ts +170 -0
  66. package/dist/chat/message/chat-message.js +271 -0
  67. package/dist/chat/root/chat-root.d.ts +216 -0
  68. package/dist/chat/root/chat-root.js +389 -0
  69. package/dist/checkbox/index.d.ts +1 -0
  70. package/dist/checkbox/index.js +1 -0
  71. package/dist/checkbox/root/checkbox-root.d.ts +108 -0
  72. package/dist/checkbox/root/checkbox-root.js +207 -0
  73. package/dist/checkbox-group/index.d.ts +1 -0
  74. package/dist/checkbox-group/index.js +1 -0
  75. package/dist/checkbox-group/root/checkbox-group-root.d.ts +155 -0
  76. package/dist/checkbox-group/root/checkbox-group-root.js +293 -0
  77. package/dist/code/index.d.ts +1 -0
  78. package/dist/code/index.js +1 -0
  79. package/dist/code/root/code-root.d.ts +36 -0
  80. package/dist/code/root/code-root.js +43 -0
  81. package/dist/code-block/index.d.ts +1 -0
  82. package/dist/code-block/index.js +1 -0
  83. package/dist/code-block/root/code-block-root.d.ts +112 -0
  84. package/dist/code-block/root/code-block-root.js +155 -0
  85. package/dist/color-input/index.d.ts +1 -0
  86. package/dist/color-input/index.js +1 -0
  87. package/dist/color-input/root/color-input-root.d.ts +227 -0
  88. package/dist/color-input/root/color-input-root.js +456 -0
  89. package/dist/color-picker/color.d.ts +74 -0
  90. package/dist/color-picker/color.js +238 -0
  91. package/dist/color-picker/index.d.ts +2 -0
  92. package/dist/color-picker/index.js +2 -0
  93. package/dist/color-picker/root/color-picker-root.d.ts +303 -0
  94. package/dist/color-picker/root/color-picker-root.js +576 -0
  95. package/dist/combobox/index.d.ts +1 -0
  96. package/dist/combobox/index.js +1 -0
  97. package/dist/combobox/root/combobox-root.d.ts +396 -0
  98. package/dist/combobox/root/combobox-root.js +808 -0
  99. package/dist/command/index.d.ts +1 -0
  100. package/dist/command/index.js +1 -0
  101. package/dist/command/root/command-root.d.ts +166 -0
  102. package/dist/command/root/command-root.js +353 -0
  103. package/dist/copy-button/index.d.ts +1 -0
  104. package/dist/copy-button/index.js +1 -0
  105. package/dist/copy-button/root/copy-button-root.d.ts +154 -0
  106. package/dist/copy-button/root/copy-button-root.js +225 -0
  107. package/dist/data-table/index.d.ts +2 -0
  108. package/dist/data-table/index.js +2 -0
  109. package/dist/data-table/root/data-table-root.d.ts +392 -0
  110. package/dist/data-table/root/data-table-root.js +729 -0
  111. package/dist/data-table/root/order.d.ts +116 -0
  112. package/dist/data-table/root/order.js +175 -0
  113. package/dist/date-input/index.d.ts +1 -0
  114. package/dist/date-input/index.js +1 -0
  115. package/dist/date-input/root/date-input-root.d.ts +361 -0
  116. package/dist/date-input/root/date-input-root.js +791 -0
  117. package/dist/date-picker/index.d.ts +1 -0
  118. package/dist/date-picker/index.js +1 -0
  119. package/dist/date-picker/root/date-picker-root.d.ts +361 -0
  120. package/dist/date-picker/root/date-picker-root.js +837 -0
  121. package/dist/dialog/index.d.ts +1 -0
  122. package/dist/dialog/index.js +1 -0
  123. package/dist/dialog/root/dialog-root.d.ts +185 -0
  124. package/dist/dialog/root/dialog-root.js +319 -0
  125. package/dist/divider/index.d.ts +1 -0
  126. package/dist/divider/index.js +1 -0
  127. package/dist/divider/root/divider-root.d.ts +68 -0
  128. package/dist/divider/root/divider-root.js +116 -0
  129. package/dist/donut-chart/index.d.ts +1 -0
  130. package/dist/donut-chart/index.js +1 -0
  131. package/dist/donut-chart/root/donut-chart-root.d.ts +209 -0
  132. package/dist/donut-chart/root/donut-chart-root.js +395 -0
  133. package/dist/drawer/index.d.ts +1 -0
  134. package/dist/drawer/index.js +1 -0
  135. package/dist/drawer/root/drawer-root.d.ts +144 -0
  136. package/dist/drawer/root/drawer-root.js +222 -0
  137. package/dist/drilldown/index.d.ts +2 -0
  138. package/dist/drilldown/index.js +2 -0
  139. package/dist/drilldown/item/drilldown-item.d.ts +87 -0
  140. package/dist/drilldown/item/drilldown-item.js +152 -0
  141. package/dist/drilldown/root/drilldown-root.d.ts +115 -0
  142. package/dist/drilldown/root/drilldown-root.js +263 -0
  143. package/dist/element-events.generated.d.ts +1 -0
  144. package/dist/element-events.generated.js +125 -0
  145. package/dist/empty/index.d.ts +1 -0
  146. package/dist/empty/index.js +1 -0
  147. package/dist/empty/root/empty-root.d.ts +47 -0
  148. package/dist/empty/root/empty-root.js +68 -0
  149. package/dist/file-input/index.d.ts +1 -0
  150. package/dist/file-input/index.js +1 -0
  151. package/dist/file-input/root/file-input-root.d.ts +196 -0
  152. package/dist/file-input/root/file-input-root.js +488 -0
  153. package/dist/format-date/index.d.ts +1 -0
  154. package/dist/format-date/index.js +1 -0
  155. package/dist/format-date/root/format-date-root.d.ts +151 -0
  156. package/dist/format-date/root/format-date-root.js +266 -0
  157. package/dist/heatmap/index.d.ts +2 -0
  158. package/dist/heatmap/index.js +2 -0
  159. package/dist/heatmap/root/buckets.d.ts +62 -0
  160. package/dist/heatmap/root/buckets.js +85 -0
  161. package/dist/heatmap/root/heatmap-root.d.ts +330 -0
  162. package/dist/heatmap/root/heatmap-root.js +526 -0
  163. package/dist/icon/index.d.ts +1 -0
  164. package/dist/icon/index.js +1 -0
  165. package/dist/icon/root/icon-root.d.ts +53 -0
  166. package/dist/icon/root/icon-root.js +93 -0
  167. package/dist/icon-button/index.d.ts +1 -0
  168. package/dist/icon-button/index.js +1 -0
  169. package/dist/icon-button/root/icon-button-root.d.ts +40 -0
  170. package/dist/icon-button/root/icon-button-root.js +46 -0
  171. package/dist/image/index.d.ts +1 -0
  172. package/dist/image/index.js +1 -0
  173. package/dist/image/root/image-root.d.ts +213 -0
  174. package/dist/image/root/image-root.js +335 -0
  175. package/dist/index.d.ts +99 -0
  176. package/dist/index.js +99 -0
  177. package/dist/input/index.d.ts +1 -0
  178. package/dist/input/index.js +1 -0
  179. package/dist/input/root/input-root.d.ts +281 -0
  180. package/dist/input/root/input-root.js +472 -0
  181. package/dist/kbd/index.d.ts +1 -0
  182. package/dist/kbd/index.js +1 -0
  183. package/dist/kbd/root/kbd-root.d.ts +98 -0
  184. package/dist/kbd/root/kbd-root.js +230 -0
  185. package/dist/legend/index.d.ts +1 -0
  186. package/dist/legend/index.js +1 -0
  187. package/dist/legend/root/legend-root.d.ts +83 -0
  188. package/dist/legend/root/legend-root.js +125 -0
  189. package/dist/line-chart/index.d.ts +1 -0
  190. package/dist/line-chart/index.js +1 -0
  191. package/dist/line-chart/root/line-chart-root.d.ts +238 -0
  192. package/dist/line-chart/root/line-chart-root.js +365 -0
  193. package/dist/list/index.d.ts +2 -0
  194. package/dist/list/index.js +2 -0
  195. package/dist/list/item/list-item.d.ts +95 -0
  196. package/dist/list/item/list-item.js +148 -0
  197. package/dist/list/root/list-root.d.ts +72 -0
  198. package/dist/list/root/list-root.js +61 -0
  199. package/dist/listbox/index.d.ts +1 -0
  200. package/dist/listbox/index.js +1 -0
  201. package/dist/listbox/root/listbox-root.d.ts +357 -0
  202. package/dist/listbox/root/listbox-root.js +890 -0
  203. package/dist/loader/index.d.ts +1 -0
  204. package/dist/loader/index.js +1 -0
  205. package/dist/loader/root/loader-root.d.ts +52 -0
  206. package/dist/loader/root/loader-root.js +74 -0
  207. package/dist/megamenu/index.d.ts +1 -0
  208. package/dist/megamenu/index.js +1 -0
  209. package/dist/megamenu/root/megamenu-root.d.ts +254 -0
  210. package/dist/megamenu/root/megamenu-root.js +526 -0
  211. package/dist/menu/index.d.ts +2 -0
  212. package/dist/menu/index.js +2 -0
  213. package/dist/menu/item/menu-item.d.ts +231 -0
  214. package/dist/menu/item/menu-item.js +405 -0
  215. package/dist/menu/root/menu-root.d.ts +158 -0
  216. package/dist/menu/root/menu-root.js +422 -0
  217. package/dist/meter/index.d.ts +1 -0
  218. package/dist/meter/index.js +1 -0
  219. package/dist/meter/root/meter-root.d.ts +234 -0
  220. package/dist/meter/root/meter-root.js +316 -0
  221. package/dist/navigation/index.d.ts +1 -0
  222. package/dist/navigation/index.js +1 -0
  223. package/dist/navigation/root/navigation-root.d.ts +55 -0
  224. package/dist/navigation/root/navigation-root.js +130 -0
  225. package/dist/notifications/index.d.ts +2 -0
  226. package/dist/notifications/index.js +2 -0
  227. package/dist/notifications/notification/notification.d.ts +181 -0
  228. package/dist/notifications/notification/notification.js +305 -0
  229. package/dist/notifications/root/notifications-root.d.ts +168 -0
  230. package/dist/notifications/root/notifications-root.js +291 -0
  231. package/dist/number-input/index.d.ts +1 -0
  232. package/dist/number-input/index.js +1 -0
  233. package/dist/number-input/root/number-input-root.d.ts +282 -0
  234. package/dist/number-input/root/number-input-root.js +592 -0
  235. package/dist/option/group/option-group.d.ts +38 -0
  236. package/dist/option/group/option-group.js +58 -0
  237. package/dist/option/index.d.ts +2 -0
  238. package/dist/option/index.js +2 -0
  239. package/dist/option/root/option-root.d.ts +194 -0
  240. package/dist/option/root/option-root.js +247 -0
  241. package/dist/outline/index.d.ts +1 -0
  242. package/dist/outline/index.js +1 -0
  243. package/dist/outline/root/outline-root.d.ts +237 -0
  244. package/dist/outline/root/outline-root.js +519 -0
  245. package/dist/pagination/index.d.ts +3 -0
  246. package/dist/pagination/index.js +3 -0
  247. package/dist/pagination/root/pagination-root.d.ts +390 -0
  248. package/dist/pagination/root/pagination-root.js +695 -0
  249. package/dist/pagination/size/pagination-size.d.ts +127 -0
  250. package/dist/pagination/size/pagination-size.js +232 -0
  251. package/dist/pagination/summary/pagination-summary.d.ts +90 -0
  252. package/dist/pagination/summary/pagination-summary.js +145 -0
  253. package/dist/pin-input/index.d.ts +1 -0
  254. package/dist/pin-input/index.js +1 -0
  255. package/dist/pin-input/root/pin-input-root.d.ts +292 -0
  256. package/dist/pin-input/root/pin-input-root.js +553 -0
  257. package/dist/popover/index.d.ts +1 -0
  258. package/dist/popover/index.js +1 -0
  259. package/dist/popover/root/popover-root.d.ts +108 -0
  260. package/dist/popover/root/popover-root.js +231 -0
  261. package/dist/progress/index.d.ts +1 -0
  262. package/dist/progress/index.js +1 -0
  263. package/dist/progress/root/progress-root.d.ts +125 -0
  264. package/dist/progress/root/progress-root.js +212 -0
  265. package/dist/qr-code/index.d.ts +1 -0
  266. package/dist/qr-code/index.js +1 -0
  267. package/dist/qr-code/root/qr-code-root.d.ts +93 -0
  268. package/dist/qr-code/root/qr-code-root.js +233 -0
  269. package/dist/quote/index.d.ts +1 -0
  270. package/dist/quote/index.js +1 -0
  271. package/dist/quote/root/quote-root.d.ts +36 -0
  272. package/dist/quote/root/quote-root.js +50 -0
  273. package/dist/radio/group/radio-group.d.ts +84 -0
  274. package/dist/radio/group/radio-group.js +170 -0
  275. package/dist/radio/index.d.ts +2 -0
  276. package/dist/radio/index.js +2 -0
  277. package/dist/radio/root/radio-root.d.ts +102 -0
  278. package/dist/radio/root/radio-root.js +151 -0
  279. package/dist/rating/index.d.ts +1 -0
  280. package/dist/rating/index.js +1 -0
  281. package/dist/rating/root/rating-root.d.ts +242 -0
  282. package/dist/rating/root/rating-root.js +484 -0
  283. package/dist/scroll-area/index.d.ts +1 -0
  284. package/dist/scroll-area/index.js +1 -0
  285. package/dist/scroll-area/root/scroll-area-root.d.ts +96 -0
  286. package/dist/scroll-area/root/scroll-area-root.js +215 -0
  287. package/dist/select/index.d.ts +1 -0
  288. package/dist/select/index.js +1 -0
  289. package/dist/select/root/select-root.d.ts +170 -0
  290. package/dist/select/root/select-root.js +419 -0
  291. package/dist/skeleton/index.d.ts +1 -0
  292. package/dist/skeleton/index.js +1 -0
  293. package/dist/skeleton/root/skeleton-root.d.ts +31 -0
  294. package/dist/skeleton/root/skeleton-root.js +42 -0
  295. package/dist/slider/index.d.ts +1 -0
  296. package/dist/slider/index.js +1 -0
  297. package/dist/slider/root/slider-root.d.ts +235 -0
  298. package/dist/slider/root/slider-root.js +488 -0
  299. package/dist/sparkline/index.d.ts +1 -0
  300. package/dist/sparkline/index.js +1 -0
  301. package/dist/sparkline/root/sparkline-root.d.ts +147 -0
  302. package/dist/sparkline/root/sparkline-root.js +278 -0
  303. package/dist/speed-dial/index.d.ts +2 -0
  304. package/dist/speed-dial/index.js +2 -0
  305. package/dist/speed-dial/item/speed-dial-item.d.ts +71 -0
  306. package/dist/speed-dial/item/speed-dial-item.js +113 -0
  307. package/dist/speed-dial/root/speed-dial-root.d.ts +122 -0
  308. package/dist/speed-dial/root/speed-dial-root.js +251 -0
  309. package/dist/splitter/index.d.ts +1 -0
  310. package/dist/splitter/index.js +1 -0
  311. package/dist/splitter/root/splitter-root.d.ts +491 -0
  312. package/dist/splitter/root/splitter-root.js +1030 -0
  313. package/dist/stat/group/stat-group.d.ts +30 -0
  314. package/dist/stat/group/stat-group.js +47 -0
  315. package/dist/stat/index.d.ts +2 -0
  316. package/dist/stat/index.js +2 -0
  317. package/dist/stat/root/stat-root.d.ts +62 -0
  318. package/dist/stat/root/stat-root.js +51 -0
  319. package/dist/steps/index.d.ts +2 -0
  320. package/dist/steps/index.js +2 -0
  321. package/dist/steps/root/steps-root.d.ts +110 -0
  322. package/dist/steps/root/steps-root.js +130 -0
  323. package/dist/steps/step/step.d.ts +139 -0
  324. package/dist/steps/step/step.js +215 -0
  325. package/dist/switch/index.d.ts +1 -0
  326. package/dist/switch/index.js +1 -0
  327. package/dist/switch/root/switch-root.d.ts +74 -0
  328. package/dist/switch/root/switch-root.js +153 -0
  329. package/dist/table/cell/table-cell.d.ts +34 -0
  330. package/dist/table/cell/table-cell.js +52 -0
  331. package/dist/table/column/table-column.d.ts +165 -0
  332. package/dist/table/column/table-column.js +222 -0
  333. package/dist/table/index.d.ts +4 -0
  334. package/dist/table/index.js +4 -0
  335. package/dist/table/root/table-root.d.ts +98 -0
  336. package/dist/table/root/table-root.js +161 -0
  337. package/dist/table/row/table-row.d.ts +27 -0
  338. package/dist/table/row/table-row.js +42 -0
  339. package/dist/tabs/index.d.ts +3 -0
  340. package/dist/tabs/index.js +3 -0
  341. package/dist/tabs/panel/tab-panel.d.ts +67 -0
  342. package/dist/tabs/panel/tab-panel.js +98 -0
  343. package/dist/tabs/root/tabs-root.d.ts +123 -0
  344. package/dist/tabs/root/tabs-root.js +217 -0
  345. package/dist/tabs/tab/tab.d.ts +64 -0
  346. package/dist/tabs/tab/tab.js +116 -0
  347. package/dist/tag/index.d.ts +1 -0
  348. package/dist/tag/index.js +1 -0
  349. package/dist/tag/root/tag-root.d.ts +41 -0
  350. package/dist/tag/root/tag-root.js +67 -0
  351. package/dist/textarea/index.d.ts +1 -0
  352. package/dist/textarea/index.js +1 -0
  353. package/dist/textarea/root/textarea-root.d.ts +215 -0
  354. package/dist/textarea/root/textarea-root.js +380 -0
  355. package/dist/time-input/index.d.ts +1 -0
  356. package/dist/time-input/index.js +1 -0
  357. package/dist/time-input/root/time-input-root.d.ts +322 -0
  358. package/dist/time-input/root/time-input-root.js +661 -0
  359. package/dist/time-picker/index.d.ts +1 -0
  360. package/dist/time-picker/index.js +1 -0
  361. package/dist/time-picker/root/time-picker-root.d.ts +380 -0
  362. package/dist/time-picker/root/time-picker-root.js +669 -0
  363. package/dist/timeline/index.d.ts +2 -0
  364. package/dist/timeline/index.js +2 -0
  365. package/dist/timeline/item/timeline-item.d.ts +81 -0
  366. package/dist/timeline/item/timeline-item.js +128 -0
  367. package/dist/timeline/root/timeline-root.d.ts +52 -0
  368. package/dist/timeline/root/timeline-root.js +72 -0
  369. package/dist/toast/index.d.ts +2 -0
  370. package/dist/toast/index.js +2 -0
  371. package/dist/toast/item/toast-item.d.ts +183 -0
  372. package/dist/toast/item/toast-item.js +345 -0
  373. package/dist/toast/root/toast-root.d.ts +72 -0
  374. package/dist/toast/root/toast-root.js +87 -0
  375. package/dist/toggle/group/toggle-group.d.ts +140 -0
  376. package/dist/toggle/group/toggle-group.js +278 -0
  377. package/dist/toggle/index.d.ts +2 -0
  378. package/dist/toggle/index.js +2 -0
  379. package/dist/toggle/root/toggle-root.d.ts +99 -0
  380. package/dist/toggle/root/toggle-root.js +146 -0
  381. package/dist/toolbar/index.d.ts +1 -0
  382. package/dist/toolbar/index.js +1 -0
  383. package/dist/toolbar/root/toolbar-root.d.ts +105 -0
  384. package/dist/toolbar/root/toolbar-root.js +260 -0
  385. package/dist/tooltip/index.d.ts +1 -0
  386. package/dist/tooltip/index.js +1 -0
  387. package/dist/tooltip/root/tooltip-root.d.ts +388 -0
  388. package/dist/tooltip/root/tooltip-root.js +707 -0
  389. package/dist/tour/index.d.ts +2 -0
  390. package/dist/tour/index.js +2 -0
  391. package/dist/tour/root/tour-root.d.ts +161 -0
  392. package/dist/tour/root/tour-root.js +351 -0
  393. package/dist/tour/stop/tour-stop.d.ts +131 -0
  394. package/dist/tour/stop/tour-stop.js +249 -0
  395. package/dist/tree/index.d.ts +2 -0
  396. package/dist/tree/index.js +2 -0
  397. package/dist/tree/item/tree-item.d.ts +208 -0
  398. package/dist/tree/item/tree-item.js +381 -0
  399. package/dist/tree/root/tree-root.d.ts +88 -0
  400. package/dist/tree/root/tree-root.js +287 -0
  401. package/dist/trend/index.d.ts +1 -0
  402. package/dist/trend/index.js +1 -0
  403. package/dist/trend/root/trend-root.d.ts +67 -0
  404. package/dist/trend/root/trend-root.js +106 -0
  405. package/dist/video/index.d.ts +1 -0
  406. package/dist/video/index.js +1 -0
  407. package/dist/video/root/video-root.d.ts +711 -0
  408. package/dist/video/root/video-root.js +1821 -0
  409. package/dist/video-playlist/index.d.ts +3 -0
  410. package/dist/video-playlist/index.js +3 -0
  411. package/dist/video-playlist/item/video-playlist-item.d.ts +101 -0
  412. package/dist/video-playlist/item/video-playlist-item.js +162 -0
  413. package/dist/video-playlist/menu/video-playlist-menu.d.ts +121 -0
  414. package/dist/video-playlist/menu/video-playlist-menu.js +237 -0
  415. package/dist/video-playlist/root/video-playlist-root.d.ts +108 -0
  416. package/dist/video-playlist/root/video-playlist-root.js +218 -0
  417. package/dist/virtual-list/index.d.ts +1 -0
  418. package/dist/virtual-list/index.js +1 -0
  419. package/dist/virtual-list/root/virtual-list-root.d.ts +121 -0
  420. package/dist/virtual-list/root/virtual-list-root.js +221 -0
  421. package/jsx.d.ts +49767 -0
  422. package/package.json +77 -0
  423. package/svelte.d.ts +129 -0
  424. package/vue.d.ts +9242 -0
@@ -0,0 +1,484 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { valueAsNumber as asNumber, customElement, numberAsValue as fromNumber, HelixFormElement, KeyboardNavigationController, MixinControllerValue, MixinField, } from '@fusion.dev/helix-core';
8
+ import { html, nothing } from 'lit';
9
+ import { property, state } from 'lit/decorators.js';
10
+ /**
11
+ * @summary A score out of a few marks, given or shown.
12
+ *
13
+ * @description
14
+ * **Half marks decide the shape, so they are decided first.** Supporting them
15
+ * means the value is not an integer and the targets are not the marks: five
16
+ * stars at a half step is ten places to press, and a mark that is filled to the
17
+ * middle. Everything else follows from that, which is why `step` is here rather
18
+ * than added later, when the pointer handling would have to be rewritten around
19
+ * it.
20
+ *
21
+ * **A partial mark is the whole mark, clipped.** Not a second glyph filled to
22
+ * the middle: that needs a matching pair drawn for every mark anybody uses, and
23
+ * the moment a consumer wants a heart or a circle they need to draw one too. The
24
+ * fill is the same marks over the same marks, cut off partway, so any mark works
25
+ * and any fraction does.
26
+ *
27
+ * **Read-only is not this control greyed out, it is a different thing.** The
28
+ * commoner use is showing a score nobody is being asked for, a product's
29
+ * average, and that is not a control at all: it takes no focus, answers no keys,
30
+ * has no options to choose between, and reads as one thing rather than as five.
31
+ * So `readonly` is `role="img"` with the score in its name, where the control is
32
+ * a radio group. A disabled control is still a control and still says so; this
33
+ * is not one.
34
+ *
35
+ * **Moving is choosing here**, which is the radio group's reading and the
36
+ * opposite of `Menu`'s: arriving at four stars *is* rating it four, because
37
+ * nothing else follows and there is nothing to confirm. That is what
38
+ * `KeyboardNavigationController` takes `selects` for, and why this can use it
39
+ * where a menu cannot.
40
+ *
41
+ * **The mark is a stylesheet's, not a slot's.** A slot projects its content
42
+ * once, and there are two layers of marks here: slotting a star would put it in
43
+ * the track or the fill and leave the other empty. So the mark is a shape the
44
+ * styled tier masks with, which is also what lets a partial one be a clip of the
45
+ * whole rather than a second drawing of it.
46
+ *
47
+ * The properties below are written by this component and read by whoever draws
48
+ * it. A consumer sets none of them: they carry a number this element computed
49
+ * and CSS cannot, which is what lets a stylesheet on this tier draw the thing
50
+ * without measuring anything itself.
51
+ *
52
+ * @since 0.1.0
53
+ * @status experimental
54
+ * @category forms
55
+ * @aliases Stars, Score, Review score
56
+ * @documentation https://helix.fusion.dev/components/rating
57
+ *
58
+ * @event {Event} change - Announced with it, the choice being the commit.
59
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired before the score changes, and cancelable.
60
+ * @event {Event} input - Announced once the value has moved.
61
+ *
62
+ * @csspart feedback - What is wrong with it.
63
+ * @csspart fill - The filled marks, clipped to the score.
64
+ * @csspart hint - Help under the marks, while nothing is wrong.
65
+ * @csspart label - The question, over the marks.
66
+ * @csspart mark - One mark, in either layer.
67
+ * @csspart marks - The row of marks.
68
+ * @csspart option - One place a reader can press, which is one step.
69
+ * @csspart track - The unfilled marks.
70
+ * @csspart value - The score written out, under `show-value`.
71
+ *
72
+ * @cssproperty --rating-full - How many marks are wholly filled.
73
+ * @cssproperty --rating-part - How much of the next mark is filled, 0 to 1.
74
+ * @cssproperty --rating-step - The width of one step, as a fraction of a mark.
75
+ * @cssproperty --rating-steps - How many steps one mark is divided into.
76
+ */
77
+ let HelixHeadlessRating = class HelixHeadlessRating extends MixinControllerValue(MixinField(HelixFormElement)) {
78
+ constructor() {
79
+ super(...arguments);
80
+ /*
81
+ * Discrete, which is the default and is said here only because it was wrong.
82
+ *
83
+ * `Input`, `Slider`, `NumberInput`, `Textarea` and `PinInput` all announce
84
+ * input, and every one of them is edited continuously: a value passes through
85
+ * every keystroke or pixel on its way to the one meant. A rating does not. A
86
+ * press picks a score, an arrow picks the next one, and the drag deliberately
87
+ * asks for nothing until it is let go, so there is exactly one value and it
88
+ * is the chosen one. That is `helix-before-change`, the same as the radio group this
89
+ * announces itself as.
90
+ */
91
+ this.announcesInput = false;
92
+ /**
93
+ * How many marks there are.
94
+ */
95
+ this.max = 5;
96
+ /**
97
+ * The lowest score a reader can give, which is what clearing returns to.
98
+ *
99
+ * Zero rather than one, because "no rating" and "the worst rating" are
100
+ * different answers and a control that cannot express the first has to
101
+ * pretend the second. A survey that requires an answer says so with
102
+ * `required`, not by making one unreachable.
103
+ */
104
+ this.min = 0;
105
+ /**
106
+ * The smallest part of a mark that can be chosen.
107
+ *
108
+ * `0.5` is the half star, and it is the reason the value is a number rather
109
+ * than an index: with halves, five marks are ten answers.
110
+ */
111
+ this.step = 1;
112
+ /**
113
+ * Whether this shows a score rather than asks for one.
114
+ *
115
+ * A readout is not a control that has been switched off. It takes no focus,
116
+ * answers no keys, and reads as one thing: see the note on the class.
117
+ */
118
+ this.readOnly = false;
119
+ /**
120
+ * How the score is read out, where "3.5 out of 5" is not what it should say.
121
+ *
122
+ * A rating out of five is one of the few places a screen reader gets a worse
123
+ * answer from the value than from a sentence: "3.5" alone is a number without
124
+ * a subject. This names the readout, where a control is named by its `label`
125
+ * and each of its options by the score that option is.
126
+ */
127
+ this.valueText = '';
128
+ /**
129
+ * Whether the score is written out beside the marks.
130
+ *
131
+ * Marks say roughly, and a number says exactly. Four and a bit stars is not a
132
+ * reading anyone can repeat, which is why a product's average is nearly always
133
+ * printed next to them. `Meter` spells its reading the same way and under the
134
+ * same attribute.
135
+ *
136
+ * It follows the pointer, because it labels what the marks are showing rather
137
+ * than what the form holds: a label that disagreed with the marks under the
138
+ * reader's own cursor would be worse than no label.
139
+ */
140
+ this.showValue = false;
141
+ /**
142
+ * The shape a consumer slotted, if they slotted one.
143
+ *
144
+ * Read rather than projected. A `<slot>` shows its content once and a rating
145
+ * needs the shape as many times as there are marks, twice over because there
146
+ * are two layers, so the slot here is a way of being handed the shape rather
147
+ * than a place the shape is drawn. What is handed over gets cloned into every
148
+ * position.
149
+ *
150
+ * **One shape, not one per position.** A rating is a quantity of identical
151
+ * marks and the fill is a clip across all of them, so a row whose third mark
152
+ * is a different drawing from its first is not a rating: it is a set of
153
+ * choices, which is `Radio.Group` and already carries a value and a name on
154
+ * each of its own options. Anything past the first slotted element is
155
+ * ignored.
156
+ */
157
+ this.markSource = undefined;
158
+ /**
159
+ * What the pointer is over, which is shown instead of the score while it is.
160
+ */
161
+ this.previewing = undefined;
162
+ /* The radio group's reading, and `selects` is what makes it one: arriving at
163
+ a mark rates it. `Menu` passes false to the same option for the opposite
164
+ reason, which is the whole of the difference between a set of choices and a
165
+ set of commands. */
166
+ this.keys = new KeyboardNavigationController(this, {
167
+ items: () => this.options,
168
+ selects: () => true,
169
+ wrap: false,
170
+ });
171
+ /** The pointer drawing a score, while one is. */
172
+ this.dragging = undefined;
173
+ /**
174
+ * One clone per place a mark goes, kept so a render does not remake them.
175
+ *
176
+ * A drag renders on every pointer move, and handing Lit a fresh node each
177
+ * time would swap every mark in the row on every frame of a gesture whose
178
+ * whole point is that only the fill moves.
179
+ */
180
+ this.clones = new Map();
181
+ this.handleMarkSlot = (event) => {
182
+ this.clones.clear();
183
+ this.markSource = event.target.assignedElements({ flatten: true })[0];
184
+ };
185
+ /**
186
+ * Dragging across the marks draws a score, and letting go chooses it.
187
+ *
188
+ * One press and a slide is how a rating is given on a phone, and on a desktop
189
+ * it is how somebody who overshoots corrects without lifting. Pointer capture
190
+ * is what makes it one gesture: without it the events go to whichever target
191
+ * the pointer crossed into, and a drag that leaves the row stops reporting.
192
+ *
193
+ * Nothing is chosen until release, so a drag that ends back where it started,
194
+ * or off the element entirely, has asked for nothing.
195
+ */
196
+ this.handleDragStart = (event) => {
197
+ if (this.isDisabled || this.readOnly || event.button !== 0) {
198
+ return;
199
+ }
200
+ const score = this.scoreAt(event.clientX);
201
+ if (score === undefined) {
202
+ return;
203
+ }
204
+ try {
205
+ ;
206
+ event.currentTarget.setPointerCapture(event.pointerId);
207
+ }
208
+ catch {
209
+ /* A synthesised pointer has no capture to take, and the drag works
210
+ without it right up until the pointer leaves the row. Worth having the
211
+ gesture testable rather than making the specs drive a real device. */
212
+ }
213
+ this.dragging = event.pointerId;
214
+ this.previewing = Number.parseFloat(score);
215
+ };
216
+ this.handleDragMove = (event) => {
217
+ if (this.dragging !== event.pointerId) {
218
+ return;
219
+ }
220
+ const score = this.scoreAt(event.clientX);
221
+ if (score !== undefined) {
222
+ this.previewing = Number.parseFloat(score);
223
+ }
224
+ };
225
+ this.handleDragEnd = (event) => {
226
+ if (this.dragging !== event.pointerId) {
227
+ return;
228
+ }
229
+ this.dragging = undefined;
230
+ this.previewing = undefined;
231
+ const score = this.scoreAt(event.clientX);
232
+ if (score !== undefined) {
233
+ this.requestValue(score);
234
+ }
235
+ };
236
+ /* A canceled pointer is the system taking the gesture away, which is not the
237
+ reader choosing. Put the marks back to the value they already held. */
238
+ this.handleDragCancel = (event) => {
239
+ if (this.dragging !== event.pointerId) {
240
+ return;
241
+ }
242
+ this.dragging = undefined;
243
+ this.previewing = undefined;
244
+ };
245
+ this.handleOptionClick = (event) => {
246
+ const option = event.currentTarget;
247
+ this.requestValue(option.dataset.score ?? '');
248
+ };
249
+ this.handleOptionEnter = (event) => {
250
+ if (this.isDisabled) {
251
+ return;
252
+ }
253
+ const option = event.currentTarget;
254
+ this.previewing = Number.parseFloat(option.dataset.score ?? '');
255
+ };
256
+ this.handleLeave = () => {
257
+ this.previewing = undefined;
258
+ };
259
+ }
260
+ /** The score, as a number, clamped to what the marks can show. */
261
+ get score() {
262
+ const parsed = Number.parseFloat(this.value);
263
+ if (!Number.isFinite(parsed)) {
264
+ return 0;
265
+ }
266
+ return Math.min(Math.max(parsed, 0), this.max);
267
+ }
268
+ /** Every score a reader can choose, which is `max / step` of them. */
269
+ get steps() {
270
+ const count = Math.max(1, Math.round(this.max / this.step));
271
+ return Array.from({ length: count }, (_, index) => Number(((index + 1) * this.step).toFixed(2)));
272
+ }
273
+ /**
274
+ * The options, as the shared controller wants them.
275
+ *
276
+ * Adapters rather than elements, because these are buttons this element drew
277
+ * rather than a consumer's custom elements: the interface asks for five
278
+ * things and a `<button>` in a shadow root can answer all five without being
279
+ * dressed up as a component to do it.
280
+ */
281
+ get options() {
282
+ const found = [...(this.renderRoot?.querySelectorAll('[part="option"]') ?? [])];
283
+ return found.map((element) => ({
284
+ contains: (node) => element.contains(node),
285
+ disabled: this.isDisabled || this.readOnly,
286
+ focusItem: () => element.focus(),
287
+ select: () => {
288
+ this.requestValue(element.dataset.score ?? '');
289
+ },
290
+ selected: element.getAttribute('aria-checked') === 'true',
291
+ }));
292
+ }
293
+ /** The shape for one place, or nothing when the stylesheet is drawing it. */
294
+ markFor(layer, index) {
295
+ if (!this.markSource) {
296
+ return undefined;
297
+ }
298
+ const key = `${layer}:${index}`;
299
+ const held = this.clones.get(key);
300
+ if (held) {
301
+ return held;
302
+ }
303
+ const clone = this.markSource.cloneNode(true);
304
+ this.clones.set(key, clone);
305
+ return clone;
306
+ }
307
+ /**
308
+ * The step under a point on the row, or the nearest one to it.
309
+ *
310
+ * Asked of the boxes rather than worked out from `max` and `step`, because
311
+ * where a step sits is the stylesheet's arithmetic and this would be a second
312
+ * copy of it that could disagree. The browser has already laid the targets
313
+ * out; this reads them back.
314
+ *
315
+ * Nearest rather than only a hit, so a drag that runs off the end of the row
316
+ * pins to the last mark instead of stopping at whatever it last touched, and
317
+ * a pointer in the half-gap outside the first mark still answers.
318
+ */
319
+ scoreAt(clientX) {
320
+ let nearest;
321
+ let best = Number.POSITIVE_INFINITY;
322
+ for (const option of this.renderRoot?.querySelectorAll('[part="option"]') ?? []) {
323
+ const box = option.getBoundingClientRect();
324
+ if (clientX >= box.left && clientX < box.right) {
325
+ return option.dataset.score;
326
+ }
327
+ const away = clientX < box.left ? box.left - clientX : clientX - box.right;
328
+ if (away < best) {
329
+ best = away;
330
+ nearest = option.dataset.score;
331
+ }
332
+ }
333
+ return nearest;
334
+ }
335
+ /**
336
+ * Reports the value, and whether the form may go without one.
337
+ *
338
+ * **`required` was on the API page and did nothing.** The mixin brings it,
339
+ * so it printed on the reference page and read as supported, and nothing here
340
+ * ever called `setValidity`: a form holding an unrated required rating
341
+ * submitted, measured, with `:valid` true and the entry present but empty.
342
+ * This is the case `min` argues for in its own note, that "no rating" and
343
+ * "the worst rating" are different answers and a survey that requires one
344
+ * says so with `required`.
345
+ *
346
+ * **Empty is `value === ''` rather than a score of zero**, because zero is a
347
+ * rating a reader can deliberately give when `min` allows it, and refusing to
348
+ * submit it would be the control disagreeing with the property that permits
349
+ * it. What `required` asks is whether they answered at all.
350
+ *
351
+ * `Slider` is deliberately not given the same treatment: a native
352
+ * `<input type="range" required>` is always valid, because a range always
353
+ * holds a number, and matching the platform there is the point.
354
+ */
355
+ sync() {
356
+ this.internals.setFormValue(this.value);
357
+ this.reportRequired(this.value === '', 'Choose a rating to continue.', 'marks');
358
+ }
359
+ connectedCallback() {
360
+ super.connectedCallback();
361
+ this.addEventListener('pointerleave', this.handleLeave);
362
+ }
363
+ disconnectedCallback() {
364
+ super.disconnectedCallback();
365
+ this.removeEventListener('pointerleave', this.handleLeave);
366
+ }
367
+ updated(changed) {
368
+ super.updated?.(changed);
369
+ // Every update, not only the ones that name `value`: see the note on
370
+ // `ColorInput.updated`, and the fifteen controls that already did this.
371
+ this.sync();
372
+ }
373
+ firstUpdated(changed) {
374
+ super.firstUpdated?.(changed);
375
+ this.sync();
376
+ }
377
+ render() {
378
+ const showing = this.previewing ?? this.score;
379
+ const said = this.valueText || `${this.score} out of ${this.max}`;
380
+ const count = Math.max(0, Math.round(this.max));
381
+ const first = this.steps[0];
382
+ const mark = (layer, index) => html `<span part="mark">${this.markFor(layer, index)}</span>`;
383
+ /* Both layers hold every mark, because the fill is a clip of the whole row
384
+ rather than a count of the filled ones.
385
+
386
+ Written out twice rather than through one helper taking the part name:
387
+ `check:selectors` reads the literals to know what this renders, and a
388
+ `part=${name}` binding is invisible to it. It called the stylesheet's
389
+ `[part="track"]` and `[part="fill"]` dead. */
390
+ const marksIn = (layer) => Array.from({ length: count }, (_, index) => mark(layer, index));
391
+ return html `<div
392
+ part="marks"
393
+ role=${this.readOnly ? 'img' : 'radiogroup'}
394
+ aria-label=${this.readOnly ? said : this.label || nothing}
395
+ data-slotted=${this.markSource ? '' : nothing}
396
+ style=${`--rating-full: ${Math.floor(showing)}; --rating-part: ${showing - Math.floor(showing)}; --rating-steps: ${this.steps.length}`}
397
+ @pointercancel=${this.handleDragCancel}
398
+ @pointerdown=${this.handleDragStart}
399
+ @pointermove=${this.handleDragMove}
400
+ @pointerup=${this.handleDragEnd}
401
+ >
402
+ <!-- Hidden because this is where the shape arrives, not where it is drawn:
403
+ what a reader sees is the clones, one per position. -->
404
+ <slot
405
+ name="mark"
406
+ hidden
407
+ @slotchange=${this.handleMarkSlot}
408
+ ></slot>
409
+ <span
410
+ part="track"
411
+ aria-hidden="true"
412
+ >${marksIn('track')}</span
413
+ >
414
+ <span
415
+ part="fill"
416
+ aria-hidden="true"
417
+ >${marksIn('fill')}</span
418
+ >
419
+ ${this.readOnly
420
+ ? nothing
421
+ : this.steps.map((score, index) => html `<button
422
+ part="option"
423
+ role="radio"
424
+ type="button"
425
+ aria-checked=${this.score === score ? 'true' : 'false'}
426
+ aria-label=${`${score} out of ${this.max}`}
427
+ data-score=${String(score)}
428
+ style=${`--rating-step: ${index + 1}`}
429
+ ?disabled=${this.isDisabled}
430
+ tabindex=${this.score === score || (this.score === 0 && score === first) ? '0' : '-1'}
431
+ @click=${this.handleOptionClick}
432
+ @pointerenter=${this.handleOptionEnter}
433
+ ></button>`)}
434
+ </div>
435
+ ${this.showValue
436
+ ? html `<span
437
+ part="value"
438
+ aria-hidden="true"
439
+ >${showing}</span
440
+ >`
441
+ : nothing}`;
442
+ }
443
+ /**
444
+ * The value as a number, or `NaN` while the control is empty.
445
+ *
446
+ * `NaN` and not zero, which is the trap the platform already avoids: `Number('')`
447
+ * is zero, so an empty control would report a number it does not hold and a
448
+ * form would submit it.
449
+ */
450
+ get valueAsNumber() {
451
+ return asNumber(this.value);
452
+ }
453
+ set valueAsNumber(count) {
454
+ this.value = fromNumber(count);
455
+ }
456
+ };
457
+ __decorate([
458
+ property({ type: Number })
459
+ ], HelixHeadlessRating.prototype, "max", void 0);
460
+ __decorate([
461
+ property({ type: Number })
462
+ ], HelixHeadlessRating.prototype, "min", void 0);
463
+ __decorate([
464
+ property({ type: Number })
465
+ ], HelixHeadlessRating.prototype, "step", void 0);
466
+ __decorate([
467
+ property({ attribute: 'readonly', reflect: true, type: Boolean })
468
+ ], HelixHeadlessRating.prototype, "readOnly", void 0);
469
+ __decorate([
470
+ property({ attribute: 'value-text' })
471
+ ], HelixHeadlessRating.prototype, "valueText", void 0);
472
+ __decorate([
473
+ property({ attribute: 'show-value', reflect: true, type: Boolean })
474
+ ], HelixHeadlessRating.prototype, "showValue", void 0);
475
+ __decorate([
476
+ state()
477
+ ], HelixHeadlessRating.prototype, "markSource", void 0);
478
+ __decorate([
479
+ state()
480
+ ], HelixHeadlessRating.prototype, "previewing", void 0);
481
+ HelixHeadlessRating = __decorate([
482
+ customElement('helix-headless-rating')
483
+ ], HelixHeadlessRating);
484
+ export { HelixHeadlessRating };
@@ -0,0 +1 @@
1
+ export * from './root/scroll-area-root.js';
@@ -0,0 +1 @@
1
+ export * from './root/scroll-area-root.js';
@@ -0,0 +1,96 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type PropertyValues, type TemplateResult } from 'lit';
3
+ /** Which edges have something past them, as a set of tokens. */
4
+ declare const EDGES: readonly ['block-start', 'block-end', 'inline-start', 'inline-end'];
5
+ /**
6
+ * @summary A scrolling box that says there is more.
7
+ *
8
+ * @description
9
+ * **The whole component is one fact a stylesheet cannot work out for itself:
10
+ * which edges have content past them.** A fade at the bottom of a list is easy
11
+ * to draw and impossible to decide, because CSS has no reading of scroll
12
+ * position. So this measures and says, in `data-more`, and the styled tier
13
+ * draws whatever it likes on the edges named.
14
+ *
15
+ * **Tokens rather than four attributes**, so a stylesheet asks
16
+ * `[data-more~="block-end"]` the way it would ask about a class. Four booleans
17
+ * say the same thing in four selectors and read worse at every use.
18
+ *
19
+ * **A scrolling region takes the keyboard when it scrolls, and not before.**
20
+ * A box a reader can only reach with a pointer is a box some readers cannot
21
+ * read at all, which is what `tabindex` answers here. Only while it overflows:
22
+ * a tab stop on a box with nothing to scroll is a stop that does nothing, and a
23
+ * form full of them is worse than the problem.
24
+ *
25
+ * `role="region"` only with a `label`, because an unnamed region is an
26
+ * announcement with no content: a screen reader says "region" and the reader
27
+ * has learned nothing they did not already know.
28
+ *
29
+ * @since 0.1.0
30
+ * @status stable
31
+ * @category layout
32
+ * @aliases Scroller, Overflow, Scroll container
33
+ * @documentation https://helix.fusion.dev/components/scroll-area
34
+ *
35
+ * @slot - What scrolls.
36
+ *
37
+ * @csspart edges - Where the sideways edge cues are drawn.
38
+ * @csspart viewport - The scrolling box.
39
+ */
40
+ export declare class HelixHeadlessScrollArea extends HelixElement {
41
+ /**
42
+ * Names the region, for a reader arriving at it out of context.
43
+ *
44
+ * Without one there is no region: see the note on the class.
45
+ */
46
+ label: string;
47
+ /**
48
+ * Which edges have content past them, measured rather than guessed.
49
+ */
50
+ private more;
51
+ /**
52
+ * Whether there is anything to scroll at all, which decides the tab stop.
53
+ */
54
+ private scrolls;
55
+ private watcher;
56
+ /**
57
+ * The box that actually scrolls, for anything that needs to move it.
58
+ *
59
+ * **Public because the alternative is silence.** Bringing a row into view
60
+ * means telling a scroll utility which box to scroll, and the scrolling box
61
+ * here is inside a shadow root: a consumer holding a reference to this
62
+ * element holds the host, which does not scroll, and `scrollBy` on it is a
63
+ * no-op that reports nothing. That is exactly how `scrollItemIntoView`'s
64
+ * `offsetParent` default fails, and the sandbox sidebar spent an afternoon
65
+ * scrolled to zero because of it.
66
+ *
67
+ * The element rather than a method of our own, because the utilities that
68
+ * want it already take one, and `Tree`, `Combobox` and anything windowing a
69
+ * long list all want the same thing from it.
70
+ */
71
+ get scroller(): HTMLElement | null;
72
+ /**
73
+ * Reads the four edges off the box.
74
+ *
75
+ * A pixel of slack on each, because a scroller at its end is routinely a
76
+ * fraction short of it: browsers round scroll positions differently under
77
+ * zoom and on a display that is not at one to one, and a fade that never
78
+ * quite goes out at the bottom of a fully scrolled list is the bug that
79
+ * costs.
80
+ */
81
+ private measure;
82
+ connectedCallback(): void;
83
+ disconnectedCallback(): void;
84
+ protected firstUpdated(changed: PropertyValues): void;
85
+ /** Registers the box and everything slotted into it, which is what resizes. */
86
+ private watchContent;
87
+ protected updated(changed: PropertyValues): void;
88
+ private readonly handleSlotChange;
89
+ protected render(): TemplateResult;
90
+ }
91
+ declare global {
92
+ interface HTMLElementTagNameMap {
93
+ 'helix-headless-scroll-area': HelixHeadlessScrollArea;
94
+ }
95
+ }
96
+ export { EDGES };