@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,130 @@
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, IndicatorController } from '@fusion.dev/helix-core';
8
+ import { html } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ /**
11
+ * @summary A set of destinations, with a marker on the current one.
12
+ *
13
+ * @description
14
+ * Renders a real `<nav>`, which is the landmark a screen-reader user jumps to.
15
+ * It exists as its own component rather than as a region of `AppHeader` because
16
+ * a header is not inherently navigation, and navigation is not only ever in a
17
+ * header: a footer and a sidebar hold the same thing.
18
+ *
19
+ * **It renders no links.** The consumer brings them, marked with
20
+ * `aria-current="page"` and styled by the `data-navigation-item` recipe, for the same
21
+ * reason nothing else here renders an anchor: a router renders its own, and
22
+ * cannot render it inside this shadow root.
23
+ *
24
+ * What this owns is the marker that travels between them, and that is the whole
25
+ * reason it is a component. A marker that moves needs something that knows
26
+ * where every item is, and reading `aria-current` is how it knows which: the
27
+ * thing that makes the page announce correctly is the same thing that puts the
28
+ * marker in the right place.
29
+ *
30
+ * @since 0.1.0
31
+ * @status experimental
32
+ * @category navigation
33
+ * @aliases Nav, NavList, Tabs
34
+ * @documentation https://helix.fusion.dev/components/navigation
35
+ *
36
+ * @slot - The destinations, as the consumer's own links.
37
+ *
38
+ * @csspart indicator - The marker that travels to the current destination.
39
+ * @csspart nav - The navigation landmark.
40
+ */
41
+ let HelixHeadlessNavigation = class HelixHeadlessNavigation extends HelixElement {
42
+ constructor() {
43
+ super(...arguments);
44
+ /* The mark, and the RTL sign and border correction that came with it. This
45
+ was hand-written and had neither: the distance was measured from the
46
+ physical left and applied from the inline-start edge, so it traveled the
47
+ wrong way in a right-to-left document. */
48
+ this.indicator = new IndicatorController(this, {
49
+ active: () => this.items.find((item) => item.getAttribute('aria-current') === 'page'),
50
+ indicator: () => this.renderRoot?.querySelector('[part="indicator"]'),
51
+ surface: () => this.renderRoot?.querySelector('[part="nav"]'),
52
+ });
53
+ /**
54
+ * Accessible name for the landmark.
55
+ */
56
+ this.label = 'Main';
57
+ }
58
+ /** The destinations the consumer slotted. */
59
+ get items() {
60
+ const slot = this.renderRoot.querySelector('slot');
61
+ return (slot?.assignedElements() ?? []);
62
+ }
63
+ /** Re-measures when the links change, move, or hand over the current page. */
64
+ watch() {
65
+ this.observer?.disconnect();
66
+ this.current?.disconnect();
67
+ /* Nothing is written onto the items any more.
68
+ *
69
+ * `data-navigation-item` used to be put here, because the base layer styled a
70
+ * destination with it and forgetting it was silent and total: the links
71
+ * kept working and came out as bare underlined anchors. Writing it fixed
72
+ * that and bought two problems. It happened after upgrade, so a
73
+ * server-rendered nav arrived unstyled and restyled itself a frame later;
74
+ * and a React consumer who wrote the attribute themselves got
75
+ * `data-navigation-item="true"` from JSX, which this then had to be careful not to
76
+ * overwrite or hydration reported a mismatch.
77
+ *
78
+ * The base layer selects `helix-navigation a` as well now, so the styling is
79
+ * true the moment the markup is parsed, on the server and on the client,
80
+ * and there is nothing to write or to be careful about. */
81
+ this.indicator.place();
82
+ this.observer = new ResizeObserver(() => this.indicator.place());
83
+ this.observer.observe(this);
84
+ for (const item of this.items) {
85
+ this.observer.observe(item);
86
+ }
87
+ // Client-side routing changes `aria-current` in place rather than
88
+ // reloading, so nothing else would tell the marker to move.
89
+ this.current = new MutationObserver(() => this.indicator.place());
90
+ for (const item of this.items) {
91
+ this.current.observe(item, { attributeFilter: ['aria-current'] });
92
+ }
93
+ }
94
+ /* Rebuilt on reconnection, because nothing else does it.
95
+ *
96
+ * `firstUpdated` runs once for the life of the element and
97
+ * `disconnectedCallback` runs every time it moves, so a framework reordering
98
+ * a list left this permanently dead: the observer gone, nothing to rebuild
99
+ * it, and the component still rendering as though it were watching. Guarded
100
+ * on `hasUpdated`, because the first connection happens before the first
101
+ * render and there is nothing to watch yet. `check:observers` holds it. */
102
+ connectedCallback() {
103
+ super.connectedCallback();
104
+ if (this.hasUpdated) {
105
+ this.watch();
106
+ }
107
+ }
108
+ disconnectedCallback() {
109
+ super.disconnectedCallback();
110
+ this.observer?.disconnect();
111
+ this.current?.disconnect();
112
+ }
113
+ firstUpdated(changed) {
114
+ super.firstUpdated(changed);
115
+ this.watch();
116
+ }
117
+ render() {
118
+ return html `<nav part="nav" aria-label=${this.label}>
119
+ <div part="indicator" aria-hidden="true"></div>
120
+ <slot @slotchange=${() => this.watch()}></slot>
121
+ </nav>`;
122
+ }
123
+ };
124
+ __decorate([
125
+ property()
126
+ ], HelixHeadlessNavigation.prototype, "label", void 0);
127
+ HelixHeadlessNavigation = __decorate([
128
+ customElement('helix-headless-navigation')
129
+ ], HelixHeadlessNavigation);
130
+ export { HelixHeadlessNavigation };
@@ -0,0 +1,2 @@
1
+ export { HelixHeadlessNotification } from './notification/notification.js';
2
+ export { HelixHeadlessNotifications } from './root/notifications-root.js';
@@ -0,0 +1,2 @@
1
+ export { HelixHeadlessNotification } from './notification/notification.js';
2
+ export { HelixHeadlessNotifications } from './root/notifications-root.js';
@@ -0,0 +1,181 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
3
+ import '../../format-date/index.js';
4
+ /**
5
+ * @summary One thing that happened, which a reader may not have seen yet.
6
+ *
7
+ * @description
8
+ * A notification is a toast that did not go away. `helix-toast` is deliberately
9
+ * the opposite of this: a live region whose items carry a `duration` and whose
10
+ * root never creates or destroys anything. What makes this its own family is the
11
+ * state each item carries rather than the arrangement it sits in: read and
12
+ * unread, a timestamp that has to stay correct, and an action a reader can take
13
+ * later.
14
+ *
15
+ * **The row is a label, a caption under it, and one trailing column that holds
16
+ * either the time or the controls.** A feed is scanned rather than read, so the
17
+ * thing that happened gets the first line on its own and everything qualifying
18
+ * it goes under. The time and the controls occupy the same place because a
19
+ * reader wants exactly one of them at a time: the time while they are scanning,
20
+ * and what they can do about it once they have stopped on a row.
21
+ *
22
+ * **The timestamp is `helix-format-date`**, which is where the reading, the
23
+ * `<time datetime>` and the shared timer now live. It was implemented here, and
24
+ * a component that formats a date is not a fact about notifications: Chat wanted
25
+ * the same thing and had its own copy of half of it.
26
+ *
27
+ * **Read state is reported, not invented.** Marking something read is usually a
28
+ * round trip, and a component that flips its own state and then hears the
29
+ * request failed has told the reader something untrue. `helix-read` is
30
+ * cancelable, and a `read` set by the consumer makes this element defer entirely.
31
+ *
32
+ * @since 0.1.0
33
+ * @status experimental
34
+ * @category feedback
35
+ * @aliases Notification item, Inbox item
36
+ * @documentation https://helix.fusion.dev/components/notifications
37
+ *
38
+ * @slot - What happened, in the consumer's own markup.
39
+ * @slot actions - What a reader can do about it.
40
+ * @slot caption - A second line qualifying it, quieter than the first. A bare
41
+ * slot rather than a box, so an item without one pays nothing for it; style it
42
+ * through `::slotted()`.
43
+ * @slot media - An avatar or icon identifying who or what it came from.
44
+ *
45
+ * @event {HelixDismissEvent} helix-dismiss - Fired when a reader asks to remove it, and cancelable.
46
+ * @event {HelixReadEvent} helix-read - Fired when the item is marked read or unread, and cancelable.
47
+ *
48
+ * @csspart actions - The trailing slot's box.
49
+ * @csspart body - The label and the caption together.
50
+ * @csspart controls - The actions and the dismiss, which replace the time.
51
+ * @csspart dismiss - The control that removes it.
52
+ * @csspart dismiss-mark - The glyph on that control, where none is slotted.
53
+ * @csspart item - The whole notification.
54
+ * @csspart label - What happened, on the first line.
55
+ * @csspart media - The leading slot's box.
56
+ * @csspart time - When it happened, read the way a person reads one.
57
+ * @csspart trailing - The column holding the time and the controls.
58
+ */
59
+ export declare class HelixHeadlessNotification extends HelixElement {
60
+ /**
61
+ * When it happened, as anything `Date` parses.
62
+ *
63
+ * An ISO string is what an API sends and what `<time datetime>` takes, so it
64
+ * is the shape that needs no translation at either end. Left unset the item
65
+ * shows no timestamp rather than showing the epoch, which is what parsing an
66
+ * empty string would give.
67
+ */
68
+ at: string;
69
+ /**
70
+ * Whether the reader has seen it.
71
+ *
72
+ * Set it and this element defers: a reader's click fires `helix-read` and
73
+ * changes nothing until a new value arrives. `default-read` seeds a state
74
+ * this element then owns.
75
+ *
76
+ * **Not reflected, and it was until 27 Aug 2026.** The reason given was that
77
+ * unread is a visual state and a stylesheet has no other way to know, which
78
+ * is the same reason the four mixins mirror theirs, and the mirror may not be
79
+ * the property's own attribute: `<helix-notification default-read>`
80
+ * came back from a server without `read` and gained it on the first update,
81
+ * which React reports as a hydration mismatch, and a copy of the serialized
82
+ * element re-parses that attribute as a declaration. `:state(read)` is what
83
+ * the stylesheet reads now. Found by `hydration.dom.spec.ts` on the day it
84
+ * learned to mount an element a consumer had configured rather than a bare
85
+ * one.
86
+ *
87
+ *
88
+ */
89
+ get read(): boolean;
90
+ set read(next: boolean);
91
+ /**
92
+ * State to open with, where nothing declared one.
93
+ */
94
+ defaultRead: boolean;
95
+ /**
96
+ * Whether a reader may remove it.
97
+ */
98
+ dismissible: boolean;
99
+ /**
100
+ * Locale for the timestamp.
101
+ *
102
+ * Empty is the runtime's own.
103
+ */
104
+ locale: string;
105
+ /**
106
+ * Accessible name for the dismiss control.
107
+ */
108
+ dismissLabel: string;
109
+ /**
110
+ * @internal Read by the list to identify its children across the light DOM,
111
+ * which is cheaper than `instanceof` and is why this is public rather than
112
+ * protected. Not a consumer's to read or set.
113
+ */
114
+ readonly isNotification = true;
115
+ private readState;
116
+ /**
117
+ * Asks to be marked read, and reports whether the request stood.
118
+ *
119
+ * Public because a consumer's own control is as likely to ask as this
120
+ * element's own markup is, and because a list marking everything read has to
121
+ * go through the same request rather than writing the property behind it.
122
+ */
123
+ markRead(next?: boolean): boolean;
124
+ protected willUpdate(changed: PropertyValues): void;
125
+ protected updated(changed: PropertyValues): void;
126
+ /**
127
+ * Says whether there is anything for the time to make way for.
128
+ *
129
+ * The trailing column holds the time and the controls in one place and shows
130
+ * one of them, so a row with nothing to do about it would hide its timestamp
131
+ * on hover and put nothing there. `dismissible` this element knows on the
132
+ * server; whether a consumer filled the actions slot it can only find out from
133
+ * a DOM, so this runs after the render and the resting answer, no controls, is
134
+ * the one the server writes.
135
+ */
136
+ private markControls;
137
+ /**
138
+ * The control that removes the item, with the mark a consumer can replace.
139
+ *
140
+ * **A method rather than markup inside `render`, and the slot moves with
141
+ * it.** A fallback answers a consumer and a seam answers the tier above, which
142
+ * are different people: the styled tier wants an icon here, and with the slot
143
+ * written inline the only way to change it is to reimplement the whole
144
+ * template. `check:fallbacks` holds that, and moving only the fallback out was
145
+ * not enough, which is the right rule: the slot is the thing a tier redraws.
146
+ *
147
+ * **The mark is drawn rather than typed, which is what lets it align.** It was
148
+ * `&times;`, and a character is placed by its font rather than by its box:
149
+ * measured against the ghost button beside it at 8x, the cross carried 6
150
+ * pixels of ink to the label's 9.5 and sat 1.5 pixels below its center, in two
151
+ * boxes whose own centers agreed to a tenth of a pixel. No stylesheet can
152
+ * correct that, because the offset is inside the glyph. An `<svg>` is centered
153
+ * on its own viewBox, so it lands where the box says and takes the icon step
154
+ * the row is already set in. It is the `x` the Tag's dismiss draws, so two
155
+ * controls that mean "take this away" are one mark.
156
+ */
157
+ protected renderDismiss(): TemplateResult | typeof nothing;
158
+ /**
159
+ * When it happened, delegated whole.
160
+ *
161
+ * The tag is interpolated rather than written, so each tier renders its own:
162
+ * the base tier may not name a styled element, and a styled item inherits this
163
+ * template without having a tag of its own to remind anybody. `check:composed`
164
+ * holds both halves.
165
+ *
166
+ * `exportparts` and no `part` of its own, which is the rule about a part
167
+ * already named for its role: the child publishes `time`, the role here is
168
+ * `time`, and naming both would leave `::part(time)` matching two elements.
169
+ * What a consumer wants to reach is the `<time>`, so that is what the name
170
+ * reaches.
171
+ */
172
+ private renderTime;
173
+ protected render(): TemplateResult;
174
+ private readonly handleActions;
175
+ private readonly handleDismiss;
176
+ }
177
+ declare global {
178
+ interface HTMLElementTagNameMap {
179
+ 'helix-headless-notification': HelixHeadlessNotification;
180
+ }
181
+ }
@@ -0,0 +1,305 @@
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, HelixDismissEvent, HelixElement, HelixReadEvent, hostAria, requestChange, slotFilled, } from '@fusion.dev/helix-core';
8
+ import { x } from '@fusion.dev/helix-icons';
9
+ import { nothing } from 'lit';
10
+ import { property } from 'lit/decorators.js';
11
+ import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
12
+ /* `lit/static-html.js`, because this template interpolates a tag name and the
13
+ plain `html` cannot: it renders the placeholder as the element instead, which
14
+ shifts every attribute after it by one. See `renderTime`. */
15
+ import { html } from 'lit/static-html.js';
16
+ /* Side-effect import, because this template interpolates the family's tag and a
17
+ custom element registers on import. Both tiers import it, each resolving to
18
+ its own; `check:composed` enforces that. */
19
+ import '../../format-date/index.js';
20
+ /**
21
+ * @summary One thing that happened, which a reader may not have seen yet.
22
+ *
23
+ * @description
24
+ * A notification is a toast that did not go away. `helix-toast` is deliberately
25
+ * the opposite of this: a live region whose items carry a `duration` and whose
26
+ * root never creates or destroys anything. What makes this its own family is the
27
+ * state each item carries rather than the arrangement it sits in: read and
28
+ * unread, a timestamp that has to stay correct, and an action a reader can take
29
+ * later.
30
+ *
31
+ * **The row is a label, a caption under it, and one trailing column that holds
32
+ * either the time or the controls.** A feed is scanned rather than read, so the
33
+ * thing that happened gets the first line on its own and everything qualifying
34
+ * it goes under. The time and the controls occupy the same place because a
35
+ * reader wants exactly one of them at a time: the time while they are scanning,
36
+ * and what they can do about it once they have stopped on a row.
37
+ *
38
+ * **The timestamp is `helix-format-date`**, which is where the reading, the
39
+ * `<time datetime>` and the shared timer now live. It was implemented here, and
40
+ * a component that formats a date is not a fact about notifications: Chat wanted
41
+ * the same thing and had its own copy of half of it.
42
+ *
43
+ * **Read state is reported, not invented.** Marking something read is usually a
44
+ * round trip, and a component that flips its own state and then hears the
45
+ * request failed has told the reader something untrue. `helix-read` is
46
+ * cancelable, and a `read` set by the consumer makes this element defer entirely.
47
+ *
48
+ * @since 0.1.0
49
+ * @status experimental
50
+ * @category feedback
51
+ * @aliases Notification item, Inbox item
52
+ * @documentation https://helix.fusion.dev/components/notifications
53
+ *
54
+ * @slot - What happened, in the consumer's own markup.
55
+ * @slot actions - What a reader can do about it.
56
+ * @slot caption - A second line qualifying it, quieter than the first. A bare
57
+ * slot rather than a box, so an item without one pays nothing for it; style it
58
+ * through `::slotted()`.
59
+ * @slot media - An avatar or icon identifying who or what it came from.
60
+ *
61
+ * @event {HelixDismissEvent} helix-dismiss - Fired when a reader asks to remove it, and cancelable.
62
+ * @event {HelixReadEvent} helix-read - Fired when the item is marked read or unread, and cancelable.
63
+ *
64
+ * @csspart actions - The trailing slot's box.
65
+ * @csspart body - The label and the caption together.
66
+ * @csspart controls - The actions and the dismiss, which replace the time.
67
+ * @csspart dismiss - The control that removes it.
68
+ * @csspart dismiss-mark - The glyph on that control, where none is slotted.
69
+ * @csspart item - The whole notification.
70
+ * @csspart label - What happened, on the first line.
71
+ * @csspart media - The leading slot's box.
72
+ * @csspart time - When it happened, read the way a person reads one.
73
+ * @csspart trailing - The column holding the time and the controls.
74
+ */
75
+ let HelixHeadlessNotification = class HelixHeadlessNotification extends HelixElement {
76
+ constructor() {
77
+ super(...arguments);
78
+ /**
79
+ * When it happened, as anything `Date` parses.
80
+ *
81
+ * An ISO string is what an API sends and what `<time datetime>` takes, so it
82
+ * is the shape that needs no translation at either end. Left unset the item
83
+ * shows no timestamp rather than showing the epoch, which is what parsing an
84
+ * empty string would give.
85
+ */
86
+ this.at = '';
87
+ /**
88
+ * State to open with, where nothing declared one.
89
+ */
90
+ this.defaultRead = false;
91
+ /**
92
+ * Whether a reader may remove it.
93
+ */
94
+ this.dismissible = false;
95
+ /**
96
+ * Locale for the timestamp.
97
+ *
98
+ * Empty is the runtime's own.
99
+ */
100
+ this.locale = '';
101
+ /**
102
+ * Accessible name for the dismiss control.
103
+ */
104
+ this.dismissLabel = 'Dismiss';
105
+ /**
106
+ * @internal Read by the list to identify its children across the light DOM,
107
+ * which is cheaper than `instanceof` and is why this is public rather than
108
+ * protected. Not a consumer's to read or set.
109
+ */
110
+ this.isNotification = true;
111
+ this.readState = undefined;
112
+ /* Content arriving from the light DOM changes no property here, so nothing
113
+ would schedule the re-read. Bound to the slot rather than to the host,
114
+ because `slotchange` bubbles and is not composed: it reaches the shadow root
115
+ that owns the slot and stops there. */
116
+ this.handleActions = () => {
117
+ this.markControls();
118
+ };
119
+ this.handleDismiss = (event) => {
120
+ event.stopPropagation();
121
+ if (this.dispatchEvent(new HelixDismissEvent({ label: this.textContent?.trim() ?? '' }))) {
122
+ this.remove();
123
+ }
124
+ };
125
+ }
126
+ /**
127
+ * Whether the reader has seen it.
128
+ *
129
+ * Set it and this element defers: a reader's click fires `helix-read` and
130
+ * changes nothing until a new value arrives. `default-read` seeds a state
131
+ * this element then owns.
132
+ *
133
+ * **Not reflected, and it was until 27 Aug 2026.** The reason given was that
134
+ * unread is a visual state and a stylesheet has no other way to know, which
135
+ * is the same reason the four mixins mirror theirs, and the mirror may not be
136
+ * the property's own attribute: `<helix-notification default-read>`
137
+ * came back from a server without `read` and gained it on the first update,
138
+ * which React reports as a hydration mismatch, and a copy of the serialized
139
+ * element re-parses that attribute as a declaration. `:state(read)` is what
140
+ * the stylesheet reads now. Found by `hydration.dom.spec.ts` on the day it
141
+ * learned to mount an element a consumer had configured rather than a bare
142
+ * one.
143
+ *
144
+ *
145
+ */
146
+ get read() {
147
+ return this.readState ?? this.defaultRead;
148
+ }
149
+ set read(next) {
150
+ const previous = this.read;
151
+ this.readState = next;
152
+ this.requestUpdate('read', previous);
153
+ }
154
+ /**
155
+ * Asks to be marked read, and reports whether the request stood.
156
+ *
157
+ * Public because a consumer's own control is as likely to ask as this
158
+ * element's own markup is, and because a list marking everything read has to
159
+ * go through the same request rather than writing the property behind it.
160
+ */
161
+ markRead(next = true) {
162
+ if (next === this.read) {
163
+ return false;
164
+ }
165
+ return requestChange({
166
+ apply: (read) => {
167
+ const previous = this.read;
168
+ this.readState = read;
169
+ this.requestUpdate('read', previous);
170
+ },
171
+ event: (read) => new HelixReadEvent({ read }),
172
+ host: this,
173
+ next,
174
+ });
175
+ }
176
+ willUpdate(changed) {
177
+ super.willUpdate(changed);
178
+ hostAria(this.internals, { role: 'listitem' });
179
+ /* The mirror the stylesheet selects on, kept off the host's attributes for
180
+ the reason on `read` itself. */
181
+ this.toggleState('read', this.read);
182
+ }
183
+ updated(changed) {
184
+ super.updated(changed);
185
+ this.markControls();
186
+ }
187
+ /**
188
+ * Says whether there is anything for the time to make way for.
189
+ *
190
+ * The trailing column holds the time and the controls in one place and shows
191
+ * one of them, so a row with nothing to do about it would hide its timestamp
192
+ * on hover and put nothing there. `dismissible` this element knows on the
193
+ * server; whether a consumer filled the actions slot it can only find out from
194
+ * a DOM, so this runs after the render and the resting answer, no controls, is
195
+ * the one the server writes.
196
+ */
197
+ markControls() {
198
+ const slot = this.renderRoot?.querySelector('slot[name="actions"]');
199
+ this.toggleState('controls', this.dismissible || slotFilled(slot));
200
+ }
201
+ /**
202
+ * The control that removes the item, with the mark a consumer can replace.
203
+ *
204
+ * **A method rather than markup inside `render`, and the slot moves with
205
+ * it.** A fallback answers a consumer and a seam answers the tier above, which
206
+ * are different people: the styled tier wants an icon here, and with the slot
207
+ * written inline the only way to change it is to reimplement the whole
208
+ * template. `check:fallbacks` holds that, and moving only the fallback out was
209
+ * not enough, which is the right rule: the slot is the thing a tier redraws.
210
+ *
211
+ * **The mark is drawn rather than typed, which is what lets it align.** It was
212
+ * `&times;`, and a character is placed by its font rather than by its box:
213
+ * measured against the ghost button beside it at 8x, the cross carried 6
214
+ * pixels of ink to the label's 9.5 and sat 1.5 pixels below its center, in two
215
+ * boxes whose own centers agreed to a tenth of a pixel. No stylesheet can
216
+ * correct that, because the offset is inside the glyph. An `<svg>` is centered
217
+ * on its own viewBox, so it lands where the box says and takes the icon step
218
+ * the row is already set in. It is the `x` the Tag's dismiss draws, so two
219
+ * controls that mean "take this away" are one mark.
220
+ */
221
+ renderDismiss() {
222
+ if (!this.dismissible) {
223
+ return nothing;
224
+ }
225
+ return html `<button
226
+ part="dismiss"
227
+ type="button"
228
+ aria-label=${this.dismissLabel}
229
+ @click=${this.handleDismiss}
230
+ >
231
+ <slot name="dismiss">
232
+ <svg
233
+ aria-hidden="true"
234
+ data-glyph
235
+ fill="currentColor"
236
+ part="dismiss-mark"
237
+ viewBox=${x.viewBox}
238
+ >
239
+ ${unsafeSVG(x.content)}
240
+ </svg>
241
+ </slot>
242
+ </button>`;
243
+ }
244
+ /**
245
+ * When it happened, delegated whole.
246
+ *
247
+ * The tag is interpolated rather than written, so each tier renders its own:
248
+ * the base tier may not name a styled element, and a styled item inherits this
249
+ * template without having a tag of its own to remind anybody. `check:composed`
250
+ * holds both halves.
251
+ *
252
+ * `exportparts` and no `part` of its own, which is the rule about a part
253
+ * already named for its role: the child publishes `time`, the role here is
254
+ * `time`, and naming both would leave `::part(time)` matching two elements.
255
+ * What a consumer wants to reach is the `<time>`, so that is what the name
256
+ * reaches.
257
+ */
258
+ renderTime() {
259
+ const stamp = this.tag('format-date');
260
+ return html `<${stamp}
261
+ exportparts="time"
262
+ elapsed
263
+ date=${this.at}
264
+ locale=${this.locale}
265
+ ></${stamp}>`;
266
+ }
267
+ render() {
268
+ return html `<div part="item">
269
+ <span part="media"><slot name="media"></slot></span>
270
+ <div part="body">
271
+ <div part="label"><slot></slot></div>
272
+ <slot name="caption"></slot>
273
+ </div>
274
+ <div part="trailing">
275
+ ${this.renderTime()}
276
+ <div part="controls">
277
+ <span part="actions"><slot name="actions" @slotchange=${this.handleActions}></slot></span>
278
+ ${this.renderDismiss()}
279
+ </div>
280
+ </div>
281
+ </div>`;
282
+ }
283
+ };
284
+ __decorate([
285
+ property()
286
+ ], HelixHeadlessNotification.prototype, "at", void 0);
287
+ __decorate([
288
+ property({ type: Boolean })
289
+ ], HelixHeadlessNotification.prototype, "read", null);
290
+ __decorate([
291
+ property({ attribute: 'default-read', type: Boolean })
292
+ ], HelixHeadlessNotification.prototype, "defaultRead", void 0);
293
+ __decorate([
294
+ property({ type: Boolean })
295
+ ], HelixHeadlessNotification.prototype, "dismissible", void 0);
296
+ __decorate([
297
+ property()
298
+ ], HelixHeadlessNotification.prototype, "locale", void 0);
299
+ __decorate([
300
+ property({ attribute: 'dismiss-label' })
301
+ ], HelixHeadlessNotification.prototype, "dismissLabel", void 0);
302
+ HelixHeadlessNotification = __decorate([
303
+ customElement('helix-headless-notification')
304
+ ], HelixHeadlessNotification);
305
+ export { HelixHeadlessNotification };