@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,345 @@
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, MixinDismissible, requestChange, toneMark, } from '@fusion.dev/helix-core';
8
+ import { x } 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
+ /**
13
+ * @summary One message in the toast region.
14
+ *
15
+ * @description
16
+ * An element rather than a slot, because it carries a timeout, a tone, a
17
+ * dismiss control and a lifetime that pauses: behavior, state and API, which
18
+ * is the test for whether a region becomes an element in this library.
19
+ *
20
+ * **The timer is the item's own.** Held by the region, one message arriving
21
+ * would restart another's, so a stack of three would go from three seconds each
22
+ * to nine for the last one. Each message is on its own clock from the moment it
23
+ * is rendered.
24
+ *
25
+ * **A message is the opposite of the page it is over.** Inverted by default,
26
+ * because a thing arriving in a corner has to be told apart from the page in
27
+ * the moment before it is read, and inverting does that without spending a
28
+ * color that means something. It is a flip of `color-scheme` rather than a
29
+ * named inverse surface: every token in the subtree re-resolves, so a `Retry`
30
+ * a consumer slots in comes out right without knowing where it is. `Tooltip`
31
+ * can name the inverse surface directly because it holds no controls; this
32
+ * cannot. Set `data-color-mode` on the region to take the page's mode instead.
33
+ *
34
+ * **No duration means it stays.** That is the safe default rather than the
35
+ * common one: anything carrying an action has to still be there when the reader
36
+ * decides to take it, and a component cannot tell from the outside whether the
37
+ * message it was given is disposable.
38
+ *
39
+ * **The clock stops while it is being read.** Hover pauses it, and so does
40
+ * focus landing anywhere inside, which is the case that matters more: a
41
+ * keyboard reader tabbing towards the action in a toast is exactly the person a
42
+ * timer must not race. Both resume where they left off rather than starting
43
+ * again, so a message half-read does not get a full second life every time a
44
+ * pointer crosses it.
45
+ *
46
+ * **Going away is a request, never an act.** It dispatches a cancelable
47
+ * `helix-dismiss` and does nothing else: the consumer owns the list, so the
48
+ * item removing itself would leave the two disagreeing. Auto-dismiss and the
49
+ * dismiss control raise the same event, so a consumer handles one path and not
50
+ * two.
51
+ *
52
+ * The properties below are written by this component and read by whoever draws
53
+ * it. A consumer sets none of them: they carry a number this element computed
54
+ * and CSS cannot, which is what lets a stylesheet on this tier draw the thing
55
+ * without measuring anything itself.
56
+ *
57
+ * @since 0.1.0
58
+ * @status experimental
59
+ * @documentation https://helix.fusion.dev/components/toast
60
+ *
61
+ * @slot - The message.
62
+ * @slot actions - What to do about it, usually a button or a link.
63
+ * @slot dismiss-icon - Replaces the glyph inside the dismiss control.
64
+ * @slot icon - Replaces the tone mark. Matches `Callout`, which is why the
65
+ * dismiss control's own glyph is `dismiss-icon` rather than this: two slots
66
+ * cannot share a name, assignment goes to whichever comes first in the tree,
67
+ * and the tone mark is the one a consumer reaches for.
68
+ *
69
+ * @event {HelixDismissEvent} helix-dismiss - Fired when it asks to go, whether by the control or by its timer. Cancelable: refusing it takes the decision and nothing moves.
70
+ *
71
+ * @csspart actions - The region holding what to do about it.
72
+ * @csspart content - The message.
73
+ * @csspart dismiss - The control that asks to close.
74
+ * @csspart dismiss-mark - The glyph on the dismiss control, where none is slotted.
75
+ * @csspart icon - The tone mark, where the message has one.
76
+ * @csspart icon-mark - The tone glyph, where none is slotted.
77
+ * @csspart item - The message's own surface.
78
+ * @csspart timer - The bar showing how long is left, where a duration was given.
79
+ *
80
+ * @cssproperty --toast-duration - How long this message stays, in milliseconds, for a progress hint.
81
+ */
82
+ let HelixHeadlessToastItem = class HelixHeadlessToastItem extends MixinDismissible(HelixElement) {
83
+ constructor() {
84
+ super(...arguments);
85
+ /** Whether it is showing, whoever said so, and `undefined` until somebody has. */
86
+ this.openState = undefined;
87
+ /* Arrows, so `this` is the item wherever the listener ends up. Lit does bind
88
+ a template listener to its host, and relying on that puts a load-bearing
89
+ fact about a library in a place nobody reading this file would look. */
90
+ /**
91
+ * How many reasons there are to hold the clock, rather than whether there is
92
+ * one.
93
+ *
94
+ * Hover and focus both stopped the same timer with nothing counting them, so
95
+ * a reader who tabbed into a message and then moved the pointer off it had
96
+ * the clock restarted underneath them while they were still reading it. That
97
+ * is the case the pause exists for, and it was the case that broke it.
98
+ *
99
+ * The two are genuinely independent: a pointer can leave while focus stays,
100
+ * and focus can leave while the pointer stays. Only the last one out starts
101
+ * it again.
102
+ */
103
+ this.holds = 0;
104
+ this.handlePause = () => {
105
+ this.holds += 1;
106
+ this.pause();
107
+ };
108
+ this.handleResume = () => {
109
+ this.holds = Math.max(this.holds - 1, 0);
110
+ if (this.holds === 0) {
111
+ this.resume();
112
+ }
113
+ };
114
+ }
115
+ /**
116
+ * Whether the message is still showing.
117
+ *
118
+ * The same decide-once contract every other stateful thing here carries, and
119
+ * it was the one exception: this waited to be told in every case, so
120
+ * `duration` did nothing at all without consumer script and the dismiss
121
+ * control looked broken to anyone who pressed it. `Dialog` closes itself,
122
+ * `Accordion` closes itself, and there was no reason a message should not.
123
+ *
124
+ * Declared by the markup and it is the consumer's: the item announces and
125
+ * waits. Not declared and it is the item's: it goes when it is asked to, and
126
+ * the consumer still hears `helix-dismiss` and takes it out of their own
127
+ * list. Read once, at the first update.
128
+ *
129
+ * **No `default-open`, unlike the four mixins.** A `default-` seed exists so
130
+ * markup can choose a starting state without claiming ownership, and there is
131
+ * only one starting state that makes sense: a message that has been rendered
132
+ * is showing. An attribute whose only legal value is the default is an
133
+ * attribute nobody can use.
134
+ *
135
+ *
136
+ */
137
+ get open() {
138
+ return this.openState ?? true;
139
+ }
140
+ set open(next) {
141
+ const previous = this.open;
142
+ this.openState = next;
143
+ this.requestUpdate('open', previous);
144
+ }
145
+ /**
146
+ * Asks to be taken away, and reports whether the request stood.
147
+ *
148
+ * Announced before anything happens, so `preventDefault()` is a refusal and
149
+ * the message stays. The event still carries the label, because a consumer
150
+ * removing this from their own state has to know which one went, and that is
151
+ * true whether or not the item hid itself first.
152
+ */
153
+ dismiss() {
154
+ if (!this.open) {
155
+ return true;
156
+ }
157
+ /* The clock stops either way. A timer left running on a message that has
158
+ gone would fire into nothing, and would hold the item alive until it
159
+ did. */
160
+ clearTimeout(this.timer);
161
+ this.timer = undefined;
162
+ return requestChange({
163
+ apply: () => {
164
+ const previous = this.open;
165
+ this.openState = false;
166
+ this.requestUpdate('open', previous);
167
+ },
168
+ /* `helix-dismiss` answers a controlled `open`, which reads oddly and is
169
+ exact. A toast is not an overlay that opens and closes: `next` below is
170
+ `false` and nothing here ever calls `requestOpen(true)`, so it only
171
+ ever asks in one direction, and the verb for that direction is
172
+ `dismiss`. `HelixDismissEvent` already carries it for a tag leaving a
173
+ list and an announcement closing itself, which is the same act from the
174
+ element's side. A consumer controlling `open` therefore answers
175
+ `onhelix-dismiss`, and the generated types ask for exactly that. */
176
+ event: () => this.dismissEvent(),
177
+ host: this,
178
+ next: false,
179
+ });
180
+ }
181
+ /** Stops the clock, leaving whatever is left of it. */
182
+ pause() {
183
+ if (this.timer === undefined || this.startedAt === undefined) {
184
+ return;
185
+ }
186
+ clearTimeout(this.timer);
187
+ this.timer = undefined;
188
+ this.remaining = Math.max((this.remaining ?? 0) - (Date.now() - this.startedAt), 0);
189
+ this.startedAt = undefined;
190
+ /* Said on the host so the indicator can freeze with the clock. A `data-`
191
+ attribute rather than a property, because it is written after upgrade
192
+ from a pointer moving: nothing declares it and no server rendered it,
193
+ which is the same reason `Carousel` names its slides from here. */
194
+ this.toggleAttribute('data-paused', true);
195
+ }
196
+ /** Starts it again from where it stopped. */
197
+ resume() {
198
+ if (this.timer !== undefined || this.remaining === undefined || this.remaining <= 0) {
199
+ return;
200
+ }
201
+ this.startedAt = Date.now();
202
+ this.toggleAttribute('data-paused', false);
203
+ this.timer = setTimeout(() => {
204
+ this.timer = undefined;
205
+ this.dismiss();
206
+ }, this.remaining);
207
+ }
208
+ disconnectedCallback() {
209
+ super.disconnectedCallback();
210
+ // A message removed while its timer is running would otherwise fire into
211
+ // nothing, and hold the item alive until it did.
212
+ clearTimeout(this.timer);
213
+ this.timer = undefined;
214
+ }
215
+ willUpdate(changed) {
216
+ super.willUpdate(changed);
217
+ /* Before anything else reads it, and only the first time. Everything that
218
+ declares the mode has arrived by now: attributes from markup or from a
219
+ server's output, and properties a framework assigned on mount. */
220
+ /* Mirrored for CSS rather than reflected onto `open` itself, which is the
221
+ library's rule about state: a reflected `open` is indistinguishable from
222
+ one the consumer declared, and that attribute is what ownership is read
223
+ from. `data-closed` can never be mistaken for a declaration. */
224
+ /* **`data-closed`, because open is the resting state.** It was `data-open`,
225
+ written whenever the toast was open, and a toast opens by default: a
226
+ consumer server-rendering `<helix-toast-item>` got a `data-open` back that
227
+ React never sent. Inverting keeps a `data-` hook for the headless consumer
228
+ this publishes it for, and moves the write to the side that only happens
229
+ after somebody dismisses the message, which is long past hydration. */
230
+ this.toggleAttribute('data-closed', !this.open);
231
+ /* And `hidden` beside it, because `data-closed` is a hook and not a
232
+ mechanism. A dismissed toast was hidden by `opacity: 0` and
233
+ `visibility: hidden` in the styled sheet and by nothing at all here, so a
234
+ consumer on this tier had a message that never went away: measured, a
235
+ closed base toast printed its text on the page.
236
+ It costs the styled tier nothing, the same as the accordion: `:host` sets
237
+ `display: grid` unconditionally so the author rule beats the UA sheet,
238
+ and the exit still animates its row down from `1fr`. */
239
+ this.toggleAttribute('hidden', !this.open);
240
+ }
241
+ firstUpdated(changed) {
242
+ super.firstUpdated(changed);
243
+ /* Here rather than in `connectedCallback`, which the server never calls, and
244
+ started only once: the clock belongs to this message's life on screen. */
245
+ if (this.duration !== undefined && this.duration > 0) {
246
+ this.remaining = this.duration;
247
+ this.resume();
248
+ }
249
+ }
250
+ /**
251
+ * The mark for the message's tone, behind a seam.
252
+ *
253
+ * Slot fallback, so a consumer replaces it by slotting; and a method, so the
254
+ * tier above replaces it by overriding. Those answer different people: the
255
+ * slot is for the page and the method is for whoever is building the styled
256
+ * layer, and a fallback with only the first is one a tier can restyle and
257
+ * cannot change.
258
+ *
259
+ * The mark is passed in rather than looked up again, since `render` has
260
+ * already resolved the tone and a second lookup is a second place for the
261
+ * fallback to disagree with the tone around it.
262
+ */
263
+ renderIcon(mark) {
264
+ return html `<slot name="icon">
265
+ <svg part="icon-mark"
266
+ fill="currentColor"
267
+ viewBox=${mark.icon.viewBox}
268
+ role="img"
269
+ aria-label=${mark.label}
270
+ >
271
+ ${unsafeSVG(mark.icon.content)}
272
+ </svg>
273
+ </slot>`;
274
+ }
275
+ /**
276
+ * The mark on the dismiss control, behind a seam.
277
+ *
278
+ * Slot fallback, so a consumer replaces it by slotting; and a method, so the
279
+ * tier above replaces it by overriding. Those answer different people: the
280
+ * slot is for the page and the method is for whoever is building the styled
281
+ * layer, and a fallback with only the first is one a tier can restyle and
282
+ * cannot change.
283
+ */
284
+ renderDismissIcon() {
285
+ return html `<slot name="dismiss-icon">
286
+ <svg part="dismiss-mark" viewBox=${x.viewBox} fill="currentColor" aria-hidden="true">
287
+ ${unsafeSVG(x.content)}
288
+ </svg>
289
+ </slot>`;
290
+ }
291
+ render() {
292
+ /* Nothing when no tone was given, which is the common message: "Project
293
+ saved" is not an error, a warning or an announcement, and an icon there
294
+ would be decoration standing where meaning is supposed to be. `Callout`
295
+ falls back to `info` because a callout exists to set a passage apart and
296
+ is always *about* something; a toast is just the next thing that
297
+ happened. */
298
+ const mark = toneMark(this.tone);
299
+ return html `<div
300
+ part="item"
301
+ @mouseenter=${this.handlePause}
302
+ @mouseleave=${this.handleResume}
303
+ @focusin=${this.handlePause}
304
+ @focusout=${this.handleResume}
305
+ >
306
+ ${mark
307
+ ? html `<span part="icon">
308
+ ${this.renderIcon(mark)}
309
+ </span>`
310
+ : nothing}
311
+ <div part="content"><slot></slot></div>
312
+ <div part="actions"><slot name="actions"></slot></div>
313
+ ${this.dismissible
314
+ ? html `<button
315
+ part="dismiss"
316
+ type="button"
317
+ aria-label=${this.dismissLabel}
318
+ @click=${() => this.dismiss()}
319
+ >
320
+ ${this.renderDismissIcon()}
321
+ </button>`
322
+ : nothing}
323
+ ${this.duration
324
+ ? html `<div
325
+ part="timer"
326
+ style=${`--toast-duration: ${this.duration}ms`}
327
+ aria-hidden="true"
328
+ ></div>`
329
+ : nothing}
330
+ </div>`;
331
+ }
332
+ };
333
+ __decorate([
334
+ property({ type: Number })
335
+ ], HelixHeadlessToastItem.prototype, "duration", void 0);
336
+ __decorate([
337
+ property({ reflect: true })
338
+ ], HelixHeadlessToastItem.prototype, "tone", void 0);
339
+ __decorate([
340
+ property({ type: Boolean })
341
+ ], HelixHeadlessToastItem.prototype, "open", null);
342
+ HelixHeadlessToastItem = __decorate([
343
+ customElement('helix-headless-toast-item')
344
+ ], HelixHeadlessToastItem);
345
+ export { HelixHeadlessToastItem };
@@ -0,0 +1,72 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type PropertyValues, type TemplateResult } from 'lit';
3
+ /**
4
+ * @summary The region messages arrive in, and the only thing that announces them.
5
+ *
6
+ * @description
7
+ * **The region is why this is one family rather than two.** A live region has
8
+ * to be in the document *before* a message is put into it: assistive technology
9
+ * subscribes to the region, and a region that arrives already holding its
10
+ * message is frequently not announced at all. So the container is a part of the
11
+ * family and not an arranger of complete things, which is the same reasoning
12
+ * that puts `Radio.Group` inside its own family.
13
+ *
14
+ * **Polite, never assertive.** `role="alert"` interrupts whatever a reader is
15
+ * being told, and almost nothing that arrives in a corner of the screen has
16
+ * earned that. Something that genuinely cannot wait is a `Dialog`, which stops
17
+ * the page for everyone rather than only for the people who cannot see it.
18
+ *
19
+ * **It never creates or destroys anything.** The consumer renders items and
20
+ * removes them; asking to go is a cancelable `helix-dismiss` from the item.
21
+ * That is still exactly true of the region: an item that has gone hides itself
22
+ * and stays in the tree, so a consumer whose state still lists it does not have
23
+ * their framework fighting a node this component took away. What changed is
24
+ * that the item no longer waits to be told before hiding, unless the consumer
25
+ * declared `open` and said the state is theirs.
26
+ * There is no `toast.show()`, because an imperative queue inside a component is
27
+ * a second copy of the application's state that nothing can render from: an app
28
+ * that wants a `toast()` function writes a thin one over the state it already
29
+ * has, and keeps the ability to render the same messages on the server, in a
30
+ * test, or twice.
31
+ *
32
+ * @since 0.1.0
33
+ * @status experimental
34
+ * @category overlays
35
+ * @aliases Toaster, Snackbar, Notifications
36
+ * @documentation https://helix.fusion.dev/components/toast
37
+ *
38
+ * @slot - The messages, as `helix-toast-item` elements.
39
+ *
40
+ * @csspart region - The stack the messages are in.
41
+ */
42
+ export declare class HelixHeadlessToast extends HelixElement {
43
+ /**
44
+ * Accessible name for the region, such as "Notifications".
45
+ */
46
+ label: string;
47
+ /**
48
+ * Which corner or edge the stack sits at.
49
+ *
50
+ * Named here rather than on each message, because where a page puts its
51
+ * toasts is a fact about the page: a stack whose members disagreed about
52
+ * where they were would not be a stack.
53
+ *
54
+ * **Optional, and bottom-end is the absence of it.** It reflected *and*
55
+ * defaulted, which is the pair that writes onto a host: every toast region
56
+ * anybody rendered gained a `placement="bottom-end"` nobody typed, and a
57
+ * React consumer's server markup does not have it. The styled sheet carries
58
+ * the resting arrangement in its own `:host` rule now and the selectors
59
+ * describe only the departures, which is what `orientation` has always done.
60
+ *
61
+ * The SSR spec could never have caught it: it passed a placement explicitly,
62
+ * so the attribute it asserted was one the consumer had written.
63
+ */
64
+ placement?: 'bottom-center' | 'bottom-end' | 'bottom-start' | 'top-center' | 'top-end' | 'top-start';
65
+ protected willUpdate(changed: PropertyValues): void;
66
+ protected render(): TemplateResult;
67
+ }
68
+ declare global {
69
+ interface HTMLElementTagNameMap {
70
+ 'helix-headless-toast': HelixHeadlessToast;
71
+ }
72
+ }
@@ -0,0 +1,87 @@
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, hostAria } from '@fusion.dev/helix-core';
8
+ import { html } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ /**
11
+ * @summary The region messages arrive in, and the only thing that announces them.
12
+ *
13
+ * @description
14
+ * **The region is why this is one family rather than two.** A live region has
15
+ * to be in the document *before* a message is put into it: assistive technology
16
+ * subscribes to the region, and a region that arrives already holding its
17
+ * message is frequently not announced at all. So the container is a part of the
18
+ * family and not an arranger of complete things, which is the same reasoning
19
+ * that puts `Radio.Group` inside its own family.
20
+ *
21
+ * **Polite, never assertive.** `role="alert"` interrupts whatever a reader is
22
+ * being told, and almost nothing that arrives in a corner of the screen has
23
+ * earned that. Something that genuinely cannot wait is a `Dialog`, which stops
24
+ * the page for everyone rather than only for the people who cannot see it.
25
+ *
26
+ * **It never creates or destroys anything.** The consumer renders items and
27
+ * removes them; asking to go is a cancelable `helix-dismiss` from the item.
28
+ * That is still exactly true of the region: an item that has gone hides itself
29
+ * and stays in the tree, so a consumer whose state still lists it does not have
30
+ * their framework fighting a node this component took away. What changed is
31
+ * that the item no longer waits to be told before hiding, unless the consumer
32
+ * declared `open` and said the state is theirs.
33
+ * There is no `toast.show()`, because an imperative queue inside a component is
34
+ * a second copy of the application's state that nothing can render from: an app
35
+ * that wants a `toast()` function writes a thin one over the state it already
36
+ * has, and keeps the ability to render the same messages on the server, in a
37
+ * test, or twice.
38
+ *
39
+ * @since 0.1.0
40
+ * @status experimental
41
+ * @category overlays
42
+ * @aliases Toaster, Snackbar, Notifications
43
+ * @documentation https://helix.fusion.dev/components/toast
44
+ *
45
+ * @slot - The messages, as `helix-toast-item` elements.
46
+ *
47
+ * @csspart region - The stack the messages are in.
48
+ */
49
+ let HelixHeadlessToast = class HelixHeadlessToast extends HelixElement {
50
+ constructor() {
51
+ super(...arguments);
52
+ /**
53
+ * Accessible name for the region, such as "Notifications".
54
+ */
55
+ this.label = 'Notifications';
56
+ }
57
+ willUpdate(changed) {
58
+ super.willUpdate(changed);
59
+ /* On the host through internals, so the region is a landmark to anything
60
+ walking the light DOM as well as to a screen reader, and so nothing is
61
+ written onto the host as an attribute a server's markup never had. */
62
+ hostAria(this.internals, { label: this.label, role: 'status' });
63
+ this.internals.ariaLive = 'polite';
64
+ /* Additions are what a reader needs; a message going away is not news, and
65
+ announcing removals means every dismissal is read out. */
66
+ this.internals.ariaRelevant = 'additions';
67
+ /* `role="status"` carries an implicit `aria-atomic="true"`, which means the
68
+ whole region is re-read whenever any part of it changes. With a stack of
69
+ four, the fifth arrival announces all five. `additions` alone does not
70
+ help: it says which mutations count, not how much is read out when one
71
+ does. Both are needed, and only one was here. */
72
+ this.internals.ariaAtomic = 'false';
73
+ }
74
+ render() {
75
+ return html `<div part="region"><slot></slot></div>`;
76
+ }
77
+ };
78
+ __decorate([
79
+ property()
80
+ ], HelixHeadlessToast.prototype, "label", void 0);
81
+ __decorate([
82
+ property({ reflect: true })
83
+ ], HelixHeadlessToast.prototype, "placement", void 0);
84
+ HelixHeadlessToast = __decorate([
85
+ customElement('helix-headless-toast')
86
+ ], HelixHeadlessToast);
87
+ export { HelixHeadlessToast };
@@ -0,0 +1,140 @@
1
+ import { DisabledCascadeController, HelixFormElement, KeyboardNavigationController } from '@fusion.dev/helix-core';
2
+ import { type PropertyValues, type TemplateResult } from 'lit';
3
+ declare const HelixHeadlessToggleGroup_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
4
+ /**
5
+ * @summary A row of options with the selection marked by a moving indicator.
6
+ *
7
+ * @description
8
+ * The indicator is one element that travels, not a background that appears on
9
+ * whichever item is current. That difference is the whole point: a fill that
10
+ * swaps is two things changing at once and reads as a flicker, while one that
11
+ * moves is a single object the eye follows, and it says where the selection
12
+ * came from as well as where it went.
13
+ *
14
+ * Its whole box is measured from the selected item and written onto
15
+ * the indicator as custom properties, because labels are different lengths and
16
+ * no proportion of the group is the right answer. Measurement is client-side by
17
+ * necessity, so the server renders the indicator hidden and it fades in once it
18
+ * has somewhere to be, which is the harmless direction: it appears rather than
19
+ * jumping from a wrong place.
20
+ *
21
+ * A radio group, and only that. Navigation is links marked with `aria-current`
22
+ * and styled by the `data-navigation-item` recipe: radio semantics would announce a
23
+ * set of destinations as a set of choices. A tab controls a panel.
24
+ *
25
+ * Being a radio group, it is a form control, and it says so through
26
+ * `HelixFormElement`: it reports its value under a `name`, comes back to the
27
+ * markup's choice on reset, and restores the one a reader made when the browser
28
+ * brings a form back.
29
+ *
30
+ * The semantics were already right: the host has carried `role="radiogroup"`
31
+ * and the items `role="radio"` from the start. What none of it did was reach a
32
+ * form. A button in a shadow root submits nothing whatever its role, so the
33
+ * value has to be reported by the host, which is the only thing a form can
34
+ * see.
35
+ *
36
+ * @since 0.1.0
37
+ * @status experimental
38
+ * @aliases SegmentedControl, Segmented, Navigation, Switcher
39
+ * @documentation https://helix.fusion.dev/components/toggle-group
40
+ *
41
+ * @slot - The group's items.
42
+ *
43
+ * @event {Event} change - Announced once the value has moved.
44
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired before the answer moves, and cancelable. The only way to refuse one.
45
+ * @event {HelixSelectEvent} helix-select - Fired when an item is chosen. Dispatched by the item and listened for here. Cancelable: refusing it takes the decision and nothing moves.
46
+ * @event {Event} input - Announced once the value has moved.
47
+ *
48
+ * @csspart divider - The rule after an inline label, separating it from the items.
49
+ * @csspart feedback - What is wrong with it.
50
+ * @csspart hint - Help under the row, while nothing is wrong.
51
+ * @csspart indicator - The moving marker behind the selected item.
52
+ * @csspart label - The question, over the row.
53
+ * @csspart row - The line the track sits on, with whatever flanks it.
54
+ * @csspart track - The bar the items sit in.
55
+ */
56
+ export declare class HelixHeadlessToggleGroup extends HelixHeadlessToggleGroup_base {
57
+ /**
58
+ * Marks the chosen item, which used to happen inside the placing method.
59
+ *
60
+ * They were one method because the geometry needed the active item anyway,
61
+ * and that made a selection change look like a layout concern. `resolveActiveItem`
62
+ * rather than the first item, because a group opening on a disabled segment
63
+ * marked it as chosen.
64
+ */
65
+ private sync;
66
+ private readonly indicator;
67
+ private observer;
68
+ protected readonly keys: KeyboardNavigationController;
69
+ protected readonly cascade: DisabledCascadeController;
70
+ private get items();
71
+ /**
72
+ * Watches the group and every item it currently holds.
73
+ *
74
+ * Called again on `slotchange`, because the set was read once at first paint:
75
+ * an item added later was measured by nothing, so a group whose options
76
+ * arrive with the data had a thumb that stopped following the moment one of
77
+ * them changed width. Observing the same element twice is a no-op, so there
78
+ * is nothing to unwind first.
79
+ */
80
+ private watch;
81
+ private readonly handleSelection;
82
+ connectedCallback(): void;
83
+ disconnectedCallback(): void;
84
+ protected firstUpdated(changed: PropertyValues): void;
85
+ /** The observer the items are registered on, rebuilt with them. */
86
+ private measure;
87
+ protected updated(changed: PropertyValues): void;
88
+ protected willUpdate(changed: PropertyValues): void;
89
+ /**
90
+ * The verdict on the answer, which `required` had been asking for and not
91
+ * getting.
92
+ *
93
+ * `required` arrived with `MixinField` and nothing enforced it: the attribute
94
+ * reflected, the marker rendered beside the label, and a form with an
95
+ * unanswered group submitted anyway. An API that exists and does nothing is
96
+ * worse than one that is missing, because the marker is a promise to the
97
+ * reader that something will stop them.
98
+ *
99
+ * The anchor is the track rather than the host, so the browser's own bubble
100
+ * points at the control rather than at a box with nothing in it.
101
+ */
102
+ private validate;
103
+ /**
104
+ * Where the group's label sits, `start` putting it on the track's line.
105
+ *
106
+ * Absent is above, which is what a field looks like and what almost every
107
+ * group wants. `start` is for a row of controls that are labeled rather than
108
+ * a form of fields: a toolbar reads as one line, and a label stacked over
109
+ * every group in it turns one row into two.
110
+ *
111
+ * **A placement rather than a slot, and that is the whole point of it.** A
112
+ * `start` slot would let a consumer put the word there, and would also let
113
+ * them put it there *instead of* setting `label`, which is the group's
114
+ * accessible name: the set would then be named for nobody using a screen
115
+ * reader while looking correct to everybody else. Worse, setting both draws
116
+ * it twice. One property moves the label the consumer already has to give,
117
+ * and cannot be used to remove it.
118
+ */
119
+ labelPlacement?: 'start';
120
+ /**
121
+ * The row the track sits in, so something can sit beside it.
122
+ *
123
+ * **Bare slots, and a wrapper only around the row itself.** An unassigned
124
+ * slot is `display: contents` in the UA stylesheet and generates no box at
125
+ * all, so a group with nothing slotted lays out exactly as it did before this
126
+ * existed: no grid track, no flex item, no gap. Wrapping each side in a div
127
+ * instead would paint an empty inset band on every group in the library that
128
+ * never asked for one, which is the measurement Card already paid for.
129
+ *
130
+ * The row does always generate a box, and is entitled to: the track is always
131
+ * in it.
132
+ */
133
+ protected render(): TemplateResult;
134
+ }
135
+ declare global {
136
+ interface HTMLElementTagNameMap {
137
+ 'helix-headless-toggle-group': HelixHeadlessToggleGroup;
138
+ }
139
+ }
140
+ export {};