@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,233 @@
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, nothing, svg } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ import { encode } from 'uqr';
11
+ /** Whether a module is one of the three finder squares, or their separators. */
12
+ const isFinder = (x, y, size) => {
13
+ const near = (a, b) => a < 8 && b < 8;
14
+ return near(x, y) || near(size - 1 - x, y) || near(x, size - 1 - y);
15
+ };
16
+ /**
17
+ * The dark modules of a matrix, as one path.
18
+ *
19
+ * One `<path>` rather than a rect per module. A modest code is 33 by 33, so a
20
+ * rect apiece is a thousand elements the browser lays out and the accessibility
21
+ * tree walks, and every one of them is a one-unit square.
22
+ *
23
+ * **`square` joins runs and the other styles cannot.** A row of eight square
24
+ * modules is one `h8`, which is what keeps the node count down; a row of eight
25
+ * *rounded* ones is eight shapes, because the corners are what is being drawn
26
+ * and a joined run has no corners in the middle of it. So the cost of the other
27
+ * styles is real and is paid only by the codes that ask for them.
28
+ *
29
+ * `only` splits the drawing in two without walking the matrix twice: the finder
30
+ * squares are structural, at three known corners, so a caller can ask for them
31
+ * alone and get a second path to paint differently.
32
+ */
33
+ const pathFor = (matrix, style, only = 'all') => {
34
+ const size = matrix.length;
35
+ const wanted = (x, y) => {
36
+ if (!matrix[y]?.[x]) {
37
+ return false;
38
+ }
39
+ if (only === 'all') {
40
+ return true;
41
+ }
42
+ return only === 'finders' ? isFinder(x, y, size) : !isFinder(x, y, size);
43
+ };
44
+ const parts = [];
45
+ if (style === 'square') {
46
+ for (let y = 0; y < size; y += 1) {
47
+ let run = 0;
48
+ for (let x = 0; x <= size; x += 1) {
49
+ if (wanted(x, y)) {
50
+ run += 1;
51
+ continue;
52
+ }
53
+ if (run > 0) {
54
+ parts.push(`M${x - run} ${y}h${run}v1h-${run}z`);
55
+ run = 0;
56
+ }
57
+ }
58
+ }
59
+ return parts.join('');
60
+ }
61
+ /* A circle for `dots` and a squircle for `rounded`, both drawn as arcs on a
62
+ one-unit square. The radius is a little under half so neighbouring dots do
63
+ not touch, which is what makes a dotted code read as dots rather than as a
64
+ square one with soft edges. */
65
+ const r = style === 'dots' ? 0.45 : 0.28;
66
+ for (let y = 0; y < size; y += 1) {
67
+ for (let x = 0; x < size; x += 1) {
68
+ if (!wanted(x, y)) {
69
+ continue;
70
+ }
71
+ if (style === 'dots') {
72
+ parts.push(`M${x + 0.5 - r} ${y + 0.5}a${r} ${r} 0 1 0 ${r * 2} 0a${r} ${r} 0 1 0 ${-r * 2} 0z`);
73
+ }
74
+ else {
75
+ parts.push(`M${x + r} ${y}h${1 - r * 2}a${r} ${r} 0 0 1 ${r} ${r}` +
76
+ `v${1 - r * 2}a${r} ${r} 0 0 1 ${-r} ${r}` +
77
+ `h${-(1 - r * 2)}a${r} ${r} 0 0 1 ${-r} ${-r}` +
78
+ `v${-(1 - r * 2)}a${r} ${r} 0 0 1 ${r} ${-r}z`);
79
+ }
80
+ }
81
+ }
82
+ return parts.join('');
83
+ };
84
+ /**
85
+ * @summary Encodes a short piece of text as a scannable square.
86
+ *
87
+ * @description
88
+ * **The picture is one `<path>`, not a grid of squares.** A code of any useful
89
+ * length is a thousand modules, and drawing each as its own rect is a thousand
90
+ * nodes for one image. Runs of adjacent dark modules are joined, so a row of
91
+ * eight is one horizontal move rather than eight squares.
92
+ *
93
+ * **It is an image and says so.** `role="img"` with a name, because what a
94
+ * reader with a screen reader needs is what the code is *for*, and no amount of
95
+ * describing the pattern gives them that. Where nothing is passed the value
96
+ * itself is the name, which is right far more often than it looks: most codes
97
+ * hold a URL, and a URL read aloud is the destination.
98
+ *
99
+ * **The quiet zone is part of the code.** Four modules of margin are required
100
+ * by the specification, not a design choice, and a scanner will refuse a code
101
+ * that is cropped to its edge. It is drawn inside the `viewBox` so it survives
102
+ * any size the component is given, including one set in CSS.
103
+ *
104
+ * `correction` is what buys the middle slot. A code at `H` can lose thirty
105
+ * percent of itself and still read, which is what makes covering the center
106
+ * with a mark safe; at `L` the same mark makes the code unscannable. That is
107
+ * why the slot exists on the same element as the property, and why the default
108
+ * moves when the slot is filled.
109
+ *
110
+ * @since 0.1.0
111
+ * @status stable
112
+ * @category media
113
+ * @aliases QR, Barcode, Scan code
114
+ * @documentation https://helix.fusion.dev/components/qr-code
115
+ *
116
+ * @slot logo - A mark for the center, which only reads at a high correction.
117
+ *
118
+ * @csspart code - The square itself.
119
+ * @csspart finders - The three corner squares, which can take their own color.
120
+ * @csspart logo - The box holding the center mark.
121
+ * @csspart modules - Everything but the three corner squares.
122
+ */
123
+ let HelixHeadlessQrCode = class HelixHeadlessQrCode extends HelixElement {
124
+ constructor() {
125
+ super(...arguments);
126
+ /**
127
+ * What the code encodes, which is usually a URL.
128
+ */
129
+ this.value = '';
130
+ /**
131
+ * What the image is called.
132
+ *
133
+ * Falling back to the value is deliberate: a code almost always holds a URL,
134
+ * and a URL is a better name than "QR code" for a reader who cannot see it.
135
+ */
136
+ this.label = '';
137
+ /**
138
+ * How the modules are drawn.
139
+ *
140
+ * `square` is the default and the only one that joins runs of adjacent
141
+ * modules into a single subpath, which is what keeps a thousand modules to a
142
+ * handful of nodes. `rounded` and `dots` draw each module on its own, because
143
+ * the corners are the thing being drawn and a joined run has none in the
144
+ * middle. That cost is paid only by a code that asks for them.
145
+ *
146
+ * A scanner reads contrast between cells, not their shape, so all three
147
+ * scan. `dots` sits a little under half a module so neighbours do not touch,
148
+ * which is what makes it read as dots rather than as a softened square code.
149
+ */
150
+ this.shape = 'square';
151
+ /** Whether anything is slotted into the middle. */
152
+ this.logo = false;
153
+ }
154
+ /** The level actually used, which the slot can raise. */
155
+ get level() {
156
+ return this.correction ?? (this.logo ? 'H' : 'M');
157
+ }
158
+ renderCode() {
159
+ if (this.value === '') {
160
+ return nothing;
161
+ }
162
+ /* Regenerated on every render rather than cached. It is a pure function of
163
+ two properties, Lit only renders when one of them moved, and a cache here
164
+ would be a second place for them to disagree. */
165
+ const result = encode(this.value, { border: 0, ecc: this.level });
166
+ const size = result.size;
167
+ /* The quiet zone, in the `viewBox` rather than in a wrapper's padding. Four
168
+ modules is what the specification requires and what a scanner looks for,
169
+ so it has to scale with the code and not with whatever box the component
170
+ was given. */
171
+ const quiet = 4;
172
+ const box = size + quiet * 2;
173
+ /* The three corner squares as their own path, so they can take their own
174
+ color. Their positions are structural rather than guessed: seven by
175
+ seven at each of three corners, plus the separator ring, which is what
176
+ `isFinder` describes. Drawn square whatever the body's style is, because
177
+ they are what a scanner locks onto first and rounding them costs
178
+ reliability for decoration. */
179
+ const finders = pathFor(result.data, 'square', 'finders');
180
+ return svg `<svg
181
+ part="code"
182
+ viewBox="0 0 ${box} ${box}"
183
+ xmlns="http://www.w3.org/2000/svg"
184
+ role="img"
185
+ aria-label=${this.label || this.value}
186
+ shape-rendering="crispEdges"
187
+ >
188
+ <path
189
+ part="modules"
190
+ d=${pathFor(result.data, this.shape, 'body')}
191
+ transform="translate(${quiet} ${quiet})"
192
+ fill="currentColor"
193
+ />
194
+ <path
195
+ part="finders"
196
+ d=${finders}
197
+ transform="translate(${quiet} ${quiet})"
198
+ fill="currentColor"
199
+ />
200
+ </svg>`;
201
+ }
202
+ render() {
203
+ return html `${this.renderCode()}
204
+ <span ?hidden=${!this.logo} part="logo">
205
+ <slot
206
+ name="logo"
207
+ @slotchange=${(event) => {
208
+ const next = event.target.assignedNodes().length > 0;
209
+ if (next !== this.logo) {
210
+ this.logo = next;
211
+ this.requestUpdate();
212
+ }
213
+ }}
214
+ ></slot>
215
+ </span>`;
216
+ }
217
+ };
218
+ __decorate([
219
+ property()
220
+ ], HelixHeadlessQrCode.prototype, "value", void 0);
221
+ __decorate([
222
+ property()
223
+ ], HelixHeadlessQrCode.prototype, "label", void 0);
224
+ __decorate([
225
+ property()
226
+ ], HelixHeadlessQrCode.prototype, "shape", void 0);
227
+ __decorate([
228
+ property({ attribute: 'correction' })
229
+ ], HelixHeadlessQrCode.prototype, "correction", void 0);
230
+ HelixHeadlessQrCode = __decorate([
231
+ customElement('helix-headless-qr-code')
232
+ ], HelixHeadlessQrCode);
233
+ export { HelixHeadlessQrCode };
@@ -0,0 +1 @@
1
+ export * from './root/quote-root.js';
@@ -0,0 +1 @@
1
+ export * from './root/quote-root.js';
@@ -0,0 +1,36 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type TemplateResult } from 'lit';
3
+ /**
4
+ * @summary A short quotation, set inline with the text around it.
5
+ *
6
+ * @description
7
+ * Renders a real `<q>`, which is what supplies the quotation marks: the browser
8
+ * inserts the right ones for the document's language, and nests them correctly
9
+ * when one quotation sits inside another. Typing the marks into the content
10
+ * instead gets both of those wrong in every language but one.
11
+ *
12
+ * A passage set off from the prose rather than run inside it is a blockquote,
13
+ * which is a different element for a different job.
14
+ *
15
+ * @since 0.1.0
16
+ * @status stable
17
+ * @category typography
18
+ * @aliases Q, InlineQuote
19
+ * @documentation https://helix.fusion.dev/components/quote
20
+ *
21
+ * @slot - The quoted text.
22
+ *
23
+ * @csspart quote - The quotation.
24
+ */
25
+ export declare class HelixHeadlessQuote extends HelixElement {
26
+ /**
27
+ * URL identifying where the quotation came from.
28
+ */
29
+ cite: string;
30
+ protected render(): TemplateResult;
31
+ }
32
+ declare global {
33
+ interface HTMLElementTagNameMap {
34
+ 'helix-headless-quote': HelixHeadlessQuote;
35
+ }
36
+ }
@@ -0,0 +1,50 @@
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, nothing } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ /**
11
+ * @summary A short quotation, set inline with the text around it.
12
+ *
13
+ * @description
14
+ * Renders a real `<q>`, which is what supplies the quotation marks: the browser
15
+ * inserts the right ones for the document's language, and nests them correctly
16
+ * when one quotation sits inside another. Typing the marks into the content
17
+ * instead gets both of those wrong in every language but one.
18
+ *
19
+ * A passage set off from the prose rather than run inside it is a blockquote,
20
+ * which is a different element for a different job.
21
+ *
22
+ * @since 0.1.0
23
+ * @status stable
24
+ * @category typography
25
+ * @aliases Q, InlineQuote
26
+ * @documentation https://helix.fusion.dev/components/quote
27
+ *
28
+ * @slot - The quoted text.
29
+ *
30
+ * @csspart quote - The quotation.
31
+ */
32
+ let HelixHeadlessQuote = class HelixHeadlessQuote extends HelixElement {
33
+ constructor() {
34
+ super(...arguments);
35
+ /**
36
+ * URL identifying where the quotation came from.
37
+ */
38
+ this.cite = '';
39
+ }
40
+ render() {
41
+ return html `<q part="quote" cite=${this.cite || nothing}><slot></slot></q>`;
42
+ }
43
+ };
44
+ __decorate([
45
+ property()
46
+ ], HelixHeadlessQuote.prototype, "cite", void 0);
47
+ HelixHeadlessQuote = __decorate([
48
+ customElement('helix-headless-quote')
49
+ ], HelixHeadlessQuote);
50
+ export { HelixHeadlessQuote };
@@ -0,0 +1,84 @@
1
+ import { DisabledCascadeController, HelixFormElement, KeyboardNavigationController } from '@fusion.dev/helix-core';
2
+ import { type PropertyValues, type TemplateResult } from 'lit';
3
+ import { HelixHeadlessRadio } from '../root/radio-root.js';
4
+ declare const HelixHeadlessRadioGroup_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
5
+ /**
6
+ * @summary A set of choices where exactly one is the answer.
7
+ *
8
+ * @description
9
+ * **The group is the control, and the radios are its options.** This is the
10
+ * asymmetry with checkboxes and it comes from what a form submits: a set of
11
+ * checkboxes is several answers and each box submits its own, while a set of
12
+ * radios is one answer, so the group owns the `name`, the `value` and the
13
+ * validity, and a lone radio outside a group is not a control at all.
14
+ *
15
+ * Which is also why `MixinField` lands here and not on `Radio`: the label, the
16
+ * hint and the message are about the question, and the question is the set.
17
+ *
18
+ * Selection travels up and state travels down. An item announces that it was
19
+ * chosen, the group decides whether that stands, and the group writes
20
+ * `selected` onto every item. Nothing sets itself, so there is one answer to
21
+ * "which one is on" rather than one per item.
22
+ *
23
+ * `value` and `defaultValue` are separate for the reason `checked` and
24
+ * `defaultChecked` are: `value` is the answer now, `defaultValue` is what the
25
+ * markup asked for, which is where a reset returns and is gone the moment
26
+ * anything is chosen.
27
+ *
28
+ * @since 0.1.0
29
+ * @status experimental
30
+ * @aliases RadioButtons, Choice group
31
+ * @documentation https://helix.fusion.dev/components/radio-group
32
+ *
33
+ * @slot - The radios.
34
+ * @slot hint - Richer than a string.
35
+ * @slot label - Richer than a string, where the question is more than one.
36
+ *
37
+ * @event {Event} change - Announced once the value has moved.
38
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired when the answer changes, and cancelable.
39
+ * @event {Event} input - Announced once the value has moved.
40
+ *
41
+ * @csspart feedback - What is wrong with it.
42
+ * @csspart hint - Help under the set.
43
+ * @csspart items - The choices, which is what `orientation` lays out.
44
+ * @csspart label - The question, over the set.
45
+ */
46
+ export declare class HelixHeadlessRadioGroup extends HelixHeadlessRadioGroup_base {
47
+ /**
48
+ * Which way the choices run. A column reads one line per answer.
49
+ *
50
+ * **Optional rather than defaulted, which is not a style preference.** A
51
+ * reflecting property with a default writes its attribute onto every host the
52
+ * moment the element upgrades, including the ones a consumer rendered and did
53
+ * not touch, and React reads that as a hydration mismatch. The absent
54
+ * attribute *is* the column, which the stylesheet reads as the base rule, so
55
+ * only `horizontal` has to be named.
56
+ */
57
+ orientation?: 'horizontal' | 'vertical';
58
+ protected readonly keys: KeyboardNavigationController;
59
+ protected readonly cascade: DisabledCascadeController;
60
+ /** The radios, in light-DOM order. Client only: the server has no tree. */
61
+ get items(): HelixHeadlessRadio[];
62
+ /**
63
+ * Announces before it applies, so a listener can refuse the change.
64
+ *
65
+ * The item has not moved by the time this runs, unlike a native input, so
66
+ * refusing is simply not writing the value: there is nothing to put back.
67
+ */
68
+ private readonly handleSelection;
69
+ /** Writes the answer onto the items, and nothing onto the host. */
70
+ private place;
71
+ /** Reports the answer and the verdict on it. */
72
+ private sync;
73
+ connectedCallback(): void;
74
+ disconnectedCallback(): void;
75
+ protected willUpdate(changed: PropertyValues): void;
76
+ protected updated(changed: PropertyValues): void;
77
+ protected render(): TemplateResult;
78
+ }
79
+ declare global {
80
+ interface HTMLElementTagNameMap {
81
+ 'helix-headless-radio-group': HelixHeadlessRadioGroup;
82
+ }
83
+ }
84
+ export {};
@@ -0,0 +1,170 @@
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, DisabledCascadeController, HelixFormElement, hostAria, KeyboardNavigationController, MixinControllerValue, MixinField, } from '@fusion.dev/helix-core';
8
+ import { html } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ import { HelixHeadlessRadio } from '../root/radio-root.js';
11
+ /**
12
+ * @summary A set of choices where exactly one is the answer.
13
+ *
14
+ * @description
15
+ * **The group is the control, and the radios are its options.** This is the
16
+ * asymmetry with checkboxes and it comes from what a form submits: a set of
17
+ * checkboxes is several answers and each box submits its own, while a set of
18
+ * radios is one answer, so the group owns the `name`, the `value` and the
19
+ * validity, and a lone radio outside a group is not a control at all.
20
+ *
21
+ * Which is also why `MixinField` lands here and not on `Radio`: the label, the
22
+ * hint and the message are about the question, and the question is the set.
23
+ *
24
+ * Selection travels up and state travels down. An item announces that it was
25
+ * chosen, the group decides whether that stands, and the group writes
26
+ * `selected` onto every item. Nothing sets itself, so there is one answer to
27
+ * "which one is on" rather than one per item.
28
+ *
29
+ * `value` and `defaultValue` are separate for the reason `checked` and
30
+ * `defaultChecked` are: `value` is the answer now, `defaultValue` is what the
31
+ * markup asked for, which is where a reset returns and is gone the moment
32
+ * anything is chosen.
33
+ *
34
+ * @since 0.1.0
35
+ * @status experimental
36
+ * @aliases RadioButtons, Choice group
37
+ * @documentation https://helix.fusion.dev/components/radio-group
38
+ *
39
+ * @slot - The radios.
40
+ * @slot hint - Richer than a string.
41
+ * @slot label - Richer than a string, where the question is more than one.
42
+ *
43
+ * @event {Event} change - Announced once the value has moved.
44
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired when the answer changes, and cancelable.
45
+ * @event {Event} input - Announced once the value has moved.
46
+ *
47
+ * @csspart feedback - What is wrong with it.
48
+ * @csspart hint - Help under the set.
49
+ * @csspart items - The choices, which is what `orientation` lays out.
50
+ * @csspart label - The question, over the set.
51
+ */
52
+ let HelixHeadlessRadioGroup = class HelixHeadlessRadioGroup extends MixinControllerValue(MixinField(HelixFormElement)) {
53
+ constructor() {
54
+ super(...arguments);
55
+ /* Moving and choosing are one act, which is the radio group pattern and is
56
+ what this controller exists to stop being written per component. */
57
+ /* Registered rather than held. A controller adds itself to the host, so there
58
+ is no reference to keep: nothing here talks to it after construction, which
59
+ is why it is `protected` and not `private`. A private field nothing reads
60
+ is an unused one, and the honest reading is that the subclass tier is where
61
+ a consumer would reach for it. */
62
+ this.keys = new KeyboardNavigationController(this, { items: () => this.items });
63
+ /* Stated once, and the group never thinks about it again. See the
64
+ controller: the cascade was four hand calls from four different
65
+ methods, so which paths reached it differed by component and a fifth
66
+ group would have got none at all. */
67
+ this.cascade = new DisabledCascadeController(this, {
68
+ items: () => this.items,
69
+ });
70
+ /**
71
+ * Announces before it applies, so a listener can refuse the change.
72
+ *
73
+ * The item has not moved by the time this runs, unlike a native input, so
74
+ * refusing is simply not writing the value: there is nothing to put back.
75
+ */
76
+ this.handleSelection = (event) => {
77
+ event.stopPropagation();
78
+ const next = event.detail.value;
79
+ if (next === this.value) {
80
+ return;
81
+ }
82
+ this.requestValue(next);
83
+ };
84
+ }
85
+ /** The radios, in light-DOM order. Client only: the server has no tree. */
86
+ get items() {
87
+ return [...this.children].filter((child) => child instanceof HelixHeadlessRadio);
88
+ }
89
+ /** Writes the answer onto the items, and nothing onto the host. */
90
+ place() {
91
+ const items = this.items;
92
+ for (const item of items) {
93
+ item.selected = item.value === this.value;
94
+ }
95
+ /* Nothing chosen yet, so the first item is the tab stop. A group where
96
+ every item is `tabindex="-1"` is a group the keyboard cannot enter.
97
+ *
98
+ * Taken back the moment there is an answer, which it was not: the attribute
99
+ * was written on the first item and never removed, so an answered group
100
+ * carried two tab stops, the entry one and the selected item's own. Tabbing
101
+ * through a form stopped twice on one question, and the first stop was on an
102
+ * item that is not the answer.
103
+ *
104
+ * `entered` rather than a bare toggle, because this also runs when the
105
+ * group is answered and the attribute has to go whether or not this call is
106
+ * the one that put it there. */
107
+ const entered = this.value === '' && items.length > 0 ? items[0] : undefined;
108
+ for (const item of items) {
109
+ if (item === entered) {
110
+ item.setAttribute('tabindex', '0');
111
+ }
112
+ else {
113
+ item.removeAttribute('tabindex');
114
+ }
115
+ }
116
+ }
117
+ /** Reports the answer and the verdict on it. */
118
+ sync() {
119
+ this.internals.setFormValue(this.value === '' ? null : this.value);
120
+ this.reportRequired(this.value === '', 'Choose one to continue.', 'items');
121
+ }
122
+ connectedCallback() {
123
+ super.connectedCallback();
124
+ this.addEventListener('helix-select', this.handleSelection);
125
+ }
126
+ disconnectedCallback() {
127
+ super.disconnectedCallback();
128
+ this.removeEventListener('helix-select', this.handleSelection);
129
+ }
130
+ willUpdate(changed) {
131
+ super.willUpdate(changed);
132
+ // Through internals, so nothing lands on the host as an attribute a React
133
+ // consumer's server markup never had.
134
+ /* The string half, which is what a server can write. `linkHost` adds the
135
+ element references on the client, and those win where a consumer slotted
136
+ a label richer than a string. */
137
+ hostAria(this.internals, { label: this.label, role: 'radiogroup' });
138
+ /* Announced as required, which it never was.
139
+ *
140
+ * `required` reflects, sets validity and paints the asterisk the field sheet
141
+ * draws, and told the accessibility tree nothing: a reader met a group with
142
+ * a mark beside its label they could not see and no announcement of why the
143
+ * form would refuse it. The stylesheet drawing that asterisk depends on the
144
+ * control saying so. */
145
+ this.internals.ariaRequired = this.required ? 'true' : null;
146
+ }
147
+ updated(changed) {
148
+ super.updated(changed);
149
+ this.place();
150
+ this.sync();
151
+ this.linkHost();
152
+ }
153
+ render() {
154
+ /* The choices sit in an element of their own, because `orientation` lays
155
+ out whatever is in the flex container and on the host that would be the
156
+ label and the hint as well. */
157
+ return html `${this.renderGroupLabel()}
158
+ <div part="items">
159
+ <slot @slotchange=${() => this.place()}></slot>
160
+ </div>
161
+ ${this.renderHint()}${this.renderFeedback()}`;
162
+ }
163
+ };
164
+ __decorate([
165
+ property({ reflect: true })
166
+ ], HelixHeadlessRadioGroup.prototype, "orientation", void 0);
167
+ HelixHeadlessRadioGroup = __decorate([
168
+ customElement('helix-headless-radio-group')
169
+ ], HelixHeadlessRadioGroup);
170
+ export { HelixHeadlessRadioGroup };
@@ -0,0 +1,2 @@
1
+ export * from './group/radio-group.js';
2
+ export * from './root/radio-root.js';
@@ -0,0 +1,2 @@
1
+ export * from './group/radio-group.js';
2
+ export * from './root/radio-root.js';