@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,2 @@
1
+ export * from './item/accordion-item.js';
2
+ export * from './root/accordion-root.js';
@@ -0,0 +1,2 @@
1
+ export * from './item/accordion-item.js';
2
+ export * from './root/accordion-root.js';
@@ -0,0 +1,141 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type TemplateResult } from 'lit';
3
+ declare const HelixHeadlessAccordionItem_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerOpenInterface) & typeof HelixElement;
4
+ /**
5
+ * @summary One collapsible section of an accordion.
6
+ *
7
+ * @description
8
+ * Carries its own open state, which is why it is an element rather than a slot.
9
+ * Used alone, outside an accordion, it is a disclosure.
10
+ *
11
+ * Content stays mounted when closed and is hidden by the styled tier's CSS, so
12
+ * it can animate and so the text is present in server-rendered HTML. Closed
13
+ * content is `inert`, keeping it out of the tab order and the accessibility
14
+ * tree without removing it from the box tree.
15
+ *
16
+ * @since 0.1.0
17
+ * @status experimental
18
+ * @aliases Collapsible, Expander, Disclosure
19
+ * @documentation https://helix.fusion.dev/components/accordion
20
+ *
21
+ * @slot - The content revealed when open.
22
+ * @slot summary - The always-visible trigger content.
23
+ *
24
+ * @event {HelixBeforeCloseEvent} helix-before-close - Fired before the section closes, and cancelable.
25
+ * @event {HelixBeforeOpenEvent} helix-before-open - Fired before the item opens or closes. Cancelable: refusing it takes the decision and nothing moves.
26
+ * @event {Event} toggle - Says the state moved, carrying `newState` and `oldState`.
27
+ *
28
+ * @csspart chevron - The open and close indicator.
29
+ * @csspart container - The outer wrapper.
30
+ * @csspart content - The revealed region.
31
+ * @csspart content-inner - The clipping box inside the animated region.
32
+ * @csspart trigger - The clickable summary row.
33
+ */
34
+ export declare class HelixHeadlessAccordionItem extends HelixHeadlessAccordionItem_base {
35
+ /**
36
+ * Where the open indicator sits, or whether there is one.
37
+ *
38
+ * `auto` resolves to `end`, which is where a reader scanning a list of
39
+ * summaries expects it: the label starts at the same x on every row, and the
40
+ * indicator is found once at the edge rather than shifting with the text.
41
+ * `start` is for a tree-like reading, where the indicator leads the label.
42
+ * `none` is for a row that carries its own affordance and would otherwise
43
+ * have two.
44
+ */
45
+ chevronPlacement?: 'auto' | 'start' | 'end' | 'none';
46
+ /** The chevron, or nothing when suppressed. */
47
+ private renderChevron;
48
+ /**
49
+ * A group name, which is how `<details>` says a set is exclusive.
50
+ *
51
+ * **Two ways of saying the same thing, and the platform's one does not need a
52
+ * parent.** An accordion's `mode` makes its own children exclusive, which
53
+ * covers the ordinary case and cannot express a set spread across a page: a
54
+ * `<details name="faq">` anywhere in a document closes every other one that
55
+ * shares the name, and this does the same. Items in the same root with the
56
+ * same name are peers whether or not an accordion contains them.
57
+ *
58
+ * Where both are set the name wins, because it is the narrower statement: a
59
+ * consumer who named a group meant that group rather than whatever happens to
60
+ * be nested where.
61
+ *
62
+ * Optional rather than `''`, because a reflected string defaulting to the
63
+ * empty string writes `name=""` onto every item ever rendered: Lit reflects
64
+ * it, and the resting state of a reflected property is the attribute's
65
+ * absence. Caught by `hydration.dom.spec.ts`.
66
+ */
67
+ name?: string;
68
+ /**
69
+ * The nearest accordion above this item, if there is one.
70
+ *
71
+ * Resolved on demand rather than held, so an item moved between accordions
72
+ * coordinates with the one it is in now. `closest` crosses no shadow
73
+ * boundary, which is correct: an item inside another item's content is in
74
+ * that item's light DOM and finds the same accordion, so the check below is
75
+ * what keeps it independent.
76
+ */
77
+ private get accordion();
78
+ /**
79
+ * The items this one coordinates with: its own siblings, and only those.
80
+ *
81
+ * Direct children only. An accordion nested inside an item's content is a
82
+ * separate set, and opening a section in it must not close anything outside.
83
+ */
84
+ private get peers();
85
+ /**
86
+ * Opens or closes this item, and enforces the accordion's mode.
87
+ *
88
+ * The item that was clicked is the coordinator. It refuses first, then
89
+ * announces, then applies, then closes its peers, in that order: closing a
90
+ * peer before knowing whether this change was even allowed would leave the
91
+ * set collapsed after a listener refused it.
92
+ */
93
+ protected handleToggle: () => void;
94
+ /**
95
+ * Moves focus to this item's trigger.
96
+ *
97
+ * The parent accordion drives arrow-key navigation and cannot reach the
98
+ * trigger itself, because it is inside this item's shadow root. Exposing the
99
+ * intent as a method keeps the parent out of the child's internals.
100
+ */
101
+ focusTrigger(): void;
102
+ /**
103
+ * The item, with `hidden` doing the collapsing.
104
+ *
105
+ * **A closed section has to be closed with no stylesheet at all**, which is
106
+ * the whole claim `headless` makes. `inert` alone was not that: it takes the
107
+ * region out of the accessibility tree and off the tab order and leaves every
108
+ * pixel of it on the screen, so a consumer taking this tier got two sections
109
+ * of text permanently open with a trigger underneath saying
110
+ * `aria-expanded="false"`. Worse than merely unstyled: a sighted reader saw
111
+ * content a screen reader was told is not there.
112
+ *
113
+ * The collapse was living in the styled tier's `grid-template-rows: 0fr`,
114
+ * which is an animation and was doing the hiding as a side effect. So the
115
+ * state was in a stylesheet, and only one of the two tiers had it.
116
+ *
117
+ * **`hidden` costs the styled tier nothing**, which is what makes this the
118
+ * cheap fix rather than a trade. The UA sheet hides `[hidden]` from the UA
119
+ * origin, and `accordion-item.css` already sets `display: grid` on this part
120
+ * unconditionally, so the author rule wins and the 0fr transition runs
121
+ * exactly as before. Measured both tiers after the change.
122
+ *
123
+ * **Not `hidden="until-found"`**, which would be the better accordion and is
124
+ * a different piece of work. It hides through `content-visibility` rather
125
+ * than `display`, so the styled tier's `display: grid` would no longer
126
+ * override it and a collapsed section would animate open to nothing. It also
127
+ * needs a `beforematch` handler to set `open`, or find-in-page reveals text
128
+ * while the trigger still reports collapsed.
129
+ *
130
+ * `inert` stays. `hidden` answers the reader who can see and `inert` answers
131
+ * the one tabbing through, and in the styled tier, where `display` is
132
+ * overridden, `inert` is the only one of the two still in force.
133
+ */
134
+ protected render(): TemplateResult;
135
+ }
136
+ declare global {
137
+ interface HTMLElementTagNameMap {
138
+ 'helix-headless-accordion-item': HelixHeadlessAccordionItem;
139
+ }
140
+ }
141
+ export {};
@@ -0,0 +1,214 @@
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 { closestInstance, customElement, HelixElement, MixinControllerOpen, } from '@fusion.dev/helix-core';
8
+ import { caretDown } from '@fusion.dev/helix-icons';
9
+ import { html, nothing } from 'lit';
10
+ import { property } from 'lit/decorators.js';
11
+ import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
12
+ import { HelixHeadlessAccordion } from '../root/accordion-root.js';
13
+ /** Shadow-DOM id linking the trigger's aria-controls to the content region. */
14
+ const CONTENT_ID = 'content';
15
+ /**
16
+ * Shadow-DOM id of the trigger, used to name the content region.
17
+ *
18
+ * A `role="region"` with no accessible name is not exposed as a landmark by
19
+ * screen readers and is flagged by every automated audit, so the region borrows
20
+ * the trigger's text. Both ids live in the same shadow root, so the reference
21
+ * resolves; an IDREF pointing at the light DOM never would.
22
+ */
23
+ const TRIGGER_ID = 'trigger';
24
+ /**
25
+ * @summary One collapsible section of an accordion.
26
+ *
27
+ * @description
28
+ * Carries its own open state, which is why it is an element rather than a slot.
29
+ * Used alone, outside an accordion, it is a disclosure.
30
+ *
31
+ * Content stays mounted when closed and is hidden by the styled tier's CSS, so
32
+ * it can animate and so the text is present in server-rendered HTML. Closed
33
+ * content is `inert`, keeping it out of the tab order and the accessibility
34
+ * tree without removing it from the box tree.
35
+ *
36
+ * @since 0.1.0
37
+ * @status experimental
38
+ * @aliases Collapsible, Expander, Disclosure
39
+ * @documentation https://helix.fusion.dev/components/accordion
40
+ *
41
+ * @slot - The content revealed when open.
42
+ * @slot summary - The always-visible trigger content.
43
+ *
44
+ * @event {HelixBeforeCloseEvent} helix-before-close - Fired before the section closes, and cancelable.
45
+ * @event {HelixBeforeOpenEvent} helix-before-open - Fired before the item opens or closes. Cancelable: refusing it takes the decision and nothing moves.
46
+ * @event {Event} toggle - Says the state moved, carrying `newState` and `oldState`.
47
+ *
48
+ * @csspart chevron - The open and close indicator.
49
+ * @csspart container - The outer wrapper.
50
+ * @csspart content - The revealed region.
51
+ * @csspart content-inner - The clipping box inside the animated region.
52
+ * @csspart trigger - The clickable summary row.
53
+ */
54
+ let HelixHeadlessAccordionItem = class HelixHeadlessAccordionItem extends MixinControllerOpen(HelixElement) {
55
+ constructor() {
56
+ super(...arguments);
57
+ /**
58
+ * Opens or closes this item, and enforces the accordion's mode.
59
+ *
60
+ * The item that was clicked is the coordinator. It refuses first, then
61
+ * announces, then applies, then closes its peers, in that order: closing a
62
+ * peer before knowing whether this change was even allowed would leave the
63
+ * set collapsed after a listener refused it.
64
+ */
65
+ this.handleToggle = () => {
66
+ const next = !this.open;
67
+ const mode = this.accordion?.mode;
68
+ // `single` keeps one open at all times, so the last one cannot be closed.
69
+ // `single-collapsible` is the same rule without that floor.
70
+ if (!next && mode === 'single') {
71
+ return;
72
+ }
73
+ if (!this.requestOpen(next)) {
74
+ return;
75
+ }
76
+ if (next && (mode !== undefined || (this.name !== undefined && this.name !== ''))) {
77
+ for (const peer of this.peers) {
78
+ if (peer !== this && peer.open) {
79
+ // A peer in controlled mode will only notify: its consumer owns the
80
+ // value and may decline, which can legitimately leave two open.
81
+ peer.requestOpen(false);
82
+ }
83
+ }
84
+ }
85
+ };
86
+ }
87
+ /** The chevron, or nothing when suppressed. */
88
+ renderChevron() {
89
+ if (this.chevronPlacement === 'none') {
90
+ return nothing;
91
+ }
92
+ return html `<svg part="chevron" fill="currentColor" viewBox=${caretDown.viewBox} aria-hidden="true">
93
+ ${unsafeSVG(caretDown.content)}
94
+ </svg>`;
95
+ }
96
+ /**
97
+ * The nearest accordion above this item, if there is one.
98
+ *
99
+ * Resolved on demand rather than held, so an item moved between accordions
100
+ * coordinates with the one it is in now. `closest` crosses no shadow
101
+ * boundary, which is correct: an item inside another item's content is in
102
+ * that item's light DOM and finds the same accordion, so the check below is
103
+ * what keeps it independent.
104
+ */
105
+ get accordion() {
106
+ return closestInstance(this, HelixHeadlessAccordion);
107
+ }
108
+ /**
109
+ * The items this one coordinates with: its own siblings, and only those.
110
+ *
111
+ * Direct children only. An accordion nested inside an item's content is a
112
+ * separate set, and opening a section in it must not close anything outside.
113
+ */
114
+ get peers() {
115
+ if (this.name !== undefined && this.name !== '') {
116
+ /* By name, across the whole root rather than one accordion, which is what
117
+ `<details name>` means. `getRootNode()` so an item inside a shadow tree
118
+ finds its group there rather than reaching into the document, which is
119
+ the same boundary every IDREF in this library respects. */
120
+ const root = this.getRootNode();
121
+ return [
122
+ ...root.querySelectorAll(`${this.localName}[name="${CSS.escape(this.name)}"]`),
123
+ ];
124
+ }
125
+ const accordion = this.accordion;
126
+ if (!accordion || accordion.items.indexOf(this) === -1) {
127
+ return [];
128
+ }
129
+ return accordion.items;
130
+ }
131
+ /**
132
+ * Moves focus to this item's trigger.
133
+ *
134
+ * The parent accordion drives arrow-key navigation and cannot reach the
135
+ * trigger itself, because it is inside this item's shadow root. Exposing the
136
+ * intent as a method keeps the parent out of the child's internals.
137
+ */
138
+ focusTrigger() {
139
+ this.renderRoot.querySelector(`#${TRIGGER_ID}`)?.focus();
140
+ }
141
+ /**
142
+ * The item, with `hidden` doing the collapsing.
143
+ *
144
+ * **A closed section has to be closed with no stylesheet at all**, which is
145
+ * the whole claim `headless` makes. `inert` alone was not that: it takes the
146
+ * region out of the accessibility tree and off the tab order and leaves every
147
+ * pixel of it on the screen, so a consumer taking this tier got two sections
148
+ * of text permanently open with a trigger underneath saying
149
+ * `aria-expanded="false"`. Worse than merely unstyled: a sighted reader saw
150
+ * content a screen reader was told is not there.
151
+ *
152
+ * The collapse was living in the styled tier's `grid-template-rows: 0fr`,
153
+ * which is an animation and was doing the hiding as a side effect. So the
154
+ * state was in a stylesheet, and only one of the two tiers had it.
155
+ *
156
+ * **`hidden` costs the styled tier nothing**, which is what makes this the
157
+ * cheap fix rather than a trade. The UA sheet hides `[hidden]` from the UA
158
+ * origin, and `accordion-item.css` already sets `display: grid` on this part
159
+ * unconditionally, so the author rule wins and the 0fr transition runs
160
+ * exactly as before. Measured both tiers after the change.
161
+ *
162
+ * **Not `hidden="until-found"`**, which would be the better accordion and is
163
+ * a different piece of work. It hides through `content-visibility` rather
164
+ * than `display`, so the styled tier's `display: grid` would no longer
165
+ * override it and a collapsed section would animate open to nothing. It also
166
+ * needs a `beforematch` handler to set `open`, or find-in-page reveals text
167
+ * while the trigger still reports collapsed.
168
+ *
169
+ * `inert` stays. `hidden` answers the reader who can see and `inert` answers
170
+ * the one tabbing through, and in the styled tier, where `display` is
171
+ * overridden, `inert` is the only one of the two still in force.
172
+ */
173
+ render() {
174
+ const open = this.open;
175
+ return html `
176
+ <div part="container">
177
+ <button
178
+ id=${TRIGGER_ID}
179
+ aria-controls=${CONTENT_ID}
180
+ aria-expanded=${open ? 'true' : 'false'}
181
+ part="trigger"
182
+ type="button"
183
+ @click=${this.handleToggle}
184
+ >
185
+ ${this.chevronPlacement === 'start' ? this.renderChevron() : nothing}
186
+ <slot name="summary"></slot>
187
+ ${this.chevronPlacement === 'start' ? nothing : this.renderChevron()}
188
+ </button>
189
+ <div
190
+ id=${CONTENT_ID}
191
+ aria-labelledby=${TRIGGER_ID}
192
+ part="content"
193
+ ?hidden=${!open}
194
+ ?inert=${!open}
195
+ role="region"
196
+ >
197
+ <div part="content-inner">
198
+ <slot></slot>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ `;
203
+ }
204
+ };
205
+ __decorate([
206
+ property({ attribute: 'chevron-placement', reflect: true })
207
+ ], HelixHeadlessAccordionItem.prototype, "chevronPlacement", void 0);
208
+ __decorate([
209
+ property({ reflect: true })
210
+ ], HelixHeadlessAccordionItem.prototype, "name", void 0);
211
+ HelixHeadlessAccordionItem = __decorate([
212
+ customElement('helix-headless-accordion-item')
213
+ ], HelixHeadlessAccordionItem);
214
+ export { HelixHeadlessAccordionItem };
@@ -0,0 +1,57 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type TemplateResult } from 'lit';
3
+ import { HelixHeadlessAccordionItem } from '../item/accordion-item.js';
4
+ /**
5
+ * @summary Groups collapsible sections, one open at a time by default.
6
+ *
7
+ * @description
8
+ * Holds the mode and nothing else. The item that was clicked is what
9
+ * coordinates: it walks up to the nearest accordion, reads the mode off it, and
10
+ * closes its peers itself.
11
+ *
12
+ * Coordination is structural, not a subscription. `helix-before-open` does not bubble
13
+ * and is not composed, because overlays nest and an inner one's lifecycle must
14
+ * never read as the outer one's, so an accordion cannot learn that a child
15
+ * opened by listening for it.
16
+ *
17
+ * Membership resolves on demand, so there is no registry to keep in step: an
18
+ * item added a second after render coordinates on its first click.
19
+ *
20
+ * Items are matched with `instanceof HelixHeadlessAccordionItem`, never by tag
21
+ * name. Matching `helix-accordion-item` would tie this tier to the styled one.
22
+ *
23
+ * Every listener is attached on connect, so none of it runs on the server,
24
+ * where there is no tree to walk and no events to hear.
25
+ *
26
+ * @since 0.1.0
27
+ * @status experimental
28
+ * @category layout
29
+ * @aliases Collapse, Expander group
30
+ * @documentation https://helix.fusion.dev/components/accordion
31
+ *
32
+ * @slot - The accordion's items.
33
+ */
34
+ export declare class HelixHeadlessAccordion extends HelixElement {
35
+ /**
36
+ * How many sections may be open at once.
37
+ *
38
+ * Absent is `multiple`, so nothing closes unexpectedly and the default costs
39
+ * no attribute on the host. `single` keeps exactly one open and refuses to
40
+ * close the last; `single-collapsible` keeps at most one and lets it close.
41
+ *
42
+ * A union rather than a mode plus a `collapsible` boolean, which would make
43
+ * `collapsible` alongside `multiple` expressible and meaningless.
44
+ */
45
+ mode?: 'single' | 'single-collapsible';
46
+ /** Direct items, in light-DOM order. Client only: the server has no tree. */
47
+ get items(): HelixHeadlessAccordionItem[];
48
+ private readonly handleKeydown;
49
+ connectedCallback(): void;
50
+ disconnectedCallback(): void;
51
+ protected render(): TemplateResult;
52
+ }
53
+ declare global {
54
+ interface HTMLElementTagNameMap {
55
+ 'helix-headless-accordion': HelixHeadlessAccordion;
56
+ }
57
+ }
@@ -0,0 +1,96 @@
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 { customElement, HelixElement } from '@fusion.dev/helix-core';
8
+ import { html } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ import { HelixHeadlessAccordionItem } from '../item/accordion-item.js';
11
+ /** Keys that move focus between triggers, per the APG accordion pattern. */
12
+ const NAVIGATION = new Set(['ArrowDown', 'ArrowUp', 'Home', 'End']);
13
+ /**
14
+ * @summary Groups collapsible sections, one open at a time by default.
15
+ *
16
+ * @description
17
+ * Holds the mode and nothing else. The item that was clicked is what
18
+ * coordinates: it walks up to the nearest accordion, reads the mode off it, and
19
+ * closes its peers itself.
20
+ *
21
+ * Coordination is structural, not a subscription. `helix-before-open` does not bubble
22
+ * and is not composed, because overlays nest and an inner one's lifecycle must
23
+ * never read as the outer one's, so an accordion cannot learn that a child
24
+ * opened by listening for it.
25
+ *
26
+ * Membership resolves on demand, so there is no registry to keep in step: an
27
+ * item added a second after render coordinates on its first click.
28
+ *
29
+ * Items are matched with `instanceof HelixHeadlessAccordionItem`, never by tag
30
+ * name. Matching `helix-accordion-item` would tie this tier to the styled one.
31
+ *
32
+ * Every listener is attached on connect, so none of it runs on the server,
33
+ * where there is no tree to walk and no events to hear.
34
+ *
35
+ * @since 0.1.0
36
+ * @status experimental
37
+ * @category layout
38
+ * @aliases Collapse, Expander group
39
+ * @documentation https://helix.fusion.dev/components/accordion
40
+ *
41
+ * @slot - The accordion's items.
42
+ */
43
+ let HelixHeadlessAccordion = class HelixHeadlessAccordion extends HelixElement {
44
+ constructor() {
45
+ super(...arguments);
46
+ this.handleKeydown = (event) => {
47
+ if (!NAVIGATION.has(event.key)) {
48
+ return;
49
+ }
50
+ const items = this.items;
51
+ const current = items.indexOf(event.target);
52
+ if (current === -1) {
53
+ return;
54
+ }
55
+ const last = items.length - 1;
56
+ let next = current;
57
+ if (event.key === 'ArrowDown') {
58
+ next = current === last ? 0 : current + 1;
59
+ }
60
+ else if (event.key === 'ArrowUp') {
61
+ next = current === 0 ? last : current - 1;
62
+ }
63
+ else if (event.key === 'Home') {
64
+ next = 0;
65
+ }
66
+ else {
67
+ next = last;
68
+ }
69
+ // Only once a move is certain, so an unhandled key still scrolls the page.
70
+ event.preventDefault();
71
+ items[next]?.focusTrigger();
72
+ };
73
+ }
74
+ /** Direct items, in light-DOM order. Client only: the server has no tree. */
75
+ get items() {
76
+ return [...this.children].filter((child) => child instanceof HelixHeadlessAccordionItem);
77
+ }
78
+ connectedCallback() {
79
+ super.connectedCallback();
80
+ this.addEventListener('keydown', this.handleKeydown);
81
+ }
82
+ disconnectedCallback() {
83
+ super.disconnectedCallback();
84
+ this.removeEventListener('keydown', this.handleKeydown);
85
+ }
86
+ render() {
87
+ return html `<slot></slot>`;
88
+ }
89
+ };
90
+ __decorate([
91
+ property({ reflect: true })
92
+ ], HelixHeadlessAccordion.prototype, "mode", void 0);
93
+ HelixHeadlessAccordion = __decorate([
94
+ customElement('helix-headless-accordion')
95
+ ], HelixHeadlessAccordion);
96
+ export { HelixHeadlessAccordion };
@@ -0,0 +1 @@
1
+ export * from './root/announcement-root.js';
@@ -0,0 +1 @@
1
+ export * from './root/announcement-root.js';
@@ -0,0 +1,106 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type PropertyValues, type TemplateResult } from 'lit';
3
+ declare const HelixHeadlessAnnouncement_base: (new (...args: any[]) => import("@fusion.dev/helix-core").DismissibleElement) & typeof HelixElement;
4
+ /**
5
+ * @summary A page-level message above the masthead, which can be dismissed.
6
+ *
7
+ * @description
8
+ * Chrome rather than content. An announcement sits above the header and speaks
9
+ * for the whole page: a trial ending, a service degraded, a change of terms. A
10
+ * passage that interrupts a document to set itself apart is a `Callout`, which
11
+ * is read where it sits and cannot be dismissed. Neither is a variant of the
12
+ * other.
13
+ *
14
+ * **Always a polite live region.** `role="alert"` is assertive and interrupts
15
+ * whatever is being read, which is right for something that appears mid-session
16
+ * and wrong for something that was in the served HTML: an assertive
17
+ * announcement would cut across a screen-reader user on every page load, before
18
+ * they had read anything. Politeness costs a moment and is never wrong; the tone
19
+ * does not change that, because an error that was always there is still not an
20
+ * interruption.
21
+ *
22
+ * Dismissing is a request. The announcement does not remove itself, because the
23
+ * consumer owns the markup and taking the node out from under them would put
24
+ * their state and the document out of step. `preventDefault()` on the
25
+ * `helix-dismiss` is a refusal.
26
+ *
27
+ * @since 0.1.0
28
+ * @status stable
29
+ * @category feedback
30
+ * @aliases Banner, Notification bar, Alert bar
31
+ * @documentation https://helix.fusion.dev/components/announcement
32
+ *
33
+ * @slot - The message.
34
+ * @slot actions - What to do about it, usually a link or a button.
35
+ * @slot icon - Replaces the glyph inside the dismiss control.
36
+ *
37
+ * @event {HelixDismissEvent} helix-dismiss - Fired when the reader asks to close it. Cancelable: refusing it takes the decision and nothing moves.
38
+ *
39
+ * @csspart actions - The trailing action region.
40
+ * @csspart content - The message region.
41
+ * @csspart dismiss - The control that asks to close.
42
+ * @csspart dismiss-mark - The glyph on the dismiss control, where none is slotted.
43
+ */
44
+ export declare class HelixHeadlessAnnouncement extends HelixHeadlessAnnouncement_base {
45
+ /**
46
+ * Which color the band wears.
47
+ *
48
+ * **This was `severity` and it was claiming more than it did.** Severity is a
49
+ * judgment about the message, and elsewhere in this library it carries one:
50
+ * `Callout` reads `TONE_MARKS` for an icon and a label, so `tone="danger"`
51
+ * puts a mark beside the text and names it to a screen reader. Here it did
52
+ * none of that. It set a color, the live region stayed polite either way, and
53
+ * nothing about the announcement's semantics moved. A property that only
54
+ * changes the paint should say so.
55
+ *
56
+ * `tone` is the word this library already uses for exactly that, and `Tag`
57
+ * made the identical rename for the identical reason: the word it left was a
58
+ * treatment, `tone` is semantic color. The set matches `Tag`'s so the two
59
+ * agree, with `neutral` as the resting value and `primary` for a band that is
60
+ * about the product rather than about a state.
61
+ *
62
+ * `neutral` is what an unset announcement already looked like, said out loud
63
+ * so a consumer can put a band back to it from markup, and `surface` is the
64
+ * one value that is not a color: it lifts the band onto the surface step
65
+ * instead of the sunken one, for a strip carrying something that is not a
66
+ * state at all.
67
+ */
68
+ tone?: 'danger' | 'info' | 'neutral' | 'primary' | 'success' | 'surface' | 'warning';
69
+ protected willUpdate(changed: PropertyValues): void;
70
+ protected updated(changed: PropertyValues): void;
71
+ /**
72
+ * Says on the `actions` region whether anything is in it.
73
+ *
74
+ * An empty region is not free: it is still a flex item, so it still takes the
75
+ * container's gap. There is no selector that can ask, `slot:empty` being
76
+ * about a slot's fallback rather than its assigned nodes, so the component
77
+ * asks and says so, on the region inside this shadow root rather than on the
78
+ * host: an attribute written onto the host is a change to markup the consumer
79
+ * rendered, which React reports on hydration and does not patch up.
80
+ */
81
+ private markEmpty;
82
+ /**
83
+ * The cross inside the dismiss button, behind a seam.
84
+ *
85
+ * Slot fallback, so a consumer replaces it by slotting; and a method, so the
86
+ * tier above replaces it by overriding. Those answer different people: the
87
+ * slot is for the page and the method is for whoever is building the styled
88
+ * layer, and a fallback with only the first is one a tier can restyle and
89
+ * cannot change.
90
+ *
91
+ * **Named for what it draws, which it was not.** It was `renderIcon`, with a
92
+ * description of "the mark for the announcement's tone", and it draws the `x`
93
+ * glyph inside the dismiss button and has never drawn a tone. The name is
94
+ * `renderIcon` on `Toast` and `Callout` too, and on both of those it takes a
95
+ * severity and draws exactly the tone mark this claimed to: the prose came
96
+ * from a sibling that meant it. An announcement has no tone mark at all.
97
+ */
98
+ protected renderDismissIcon(): TemplateResult;
99
+ protected render(): TemplateResult;
100
+ }
101
+ declare global {
102
+ interface HTMLElementTagNameMap {
103
+ 'helix-headless-announcement': HelixHeadlessAnnouncement;
104
+ }
105
+ }
106
+ export {};