@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,127 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { nothing, type PropertyValues, type TemplateResult } from 'lit';
3
+ import '../../option/index.js';
4
+ import '../../select/index.js';
5
+ /**
6
+ * @summary Chooses how many items a page holds.
7
+ *
8
+ * @description
9
+ * Its own element beside `Pagination` rather than a slot inside it, for the
10
+ * reason `Pagination.Summary` is: a footer's direction and order are the
11
+ * consumer's, and a control that can only sit at one end of one row has taken
12
+ * that decision for them.
13
+ *
14
+ * **`Select`, not a native `<select>`.** It was native first, on the argument
15
+ * that the platform's own menu is a wheel on a phone and the widget a
16
+ * screen-reader user already knows. What that argument leaves out is that the
17
+ * library then has two dropdowns that are identical closed and different open,
18
+ * and a reader meets both in the same footer as a table's filters. Consistency
19
+ * is the whole product here, and it wins.
20
+ *
21
+ * What it takes back with it: the caret is `Select`'s again rather than a color
22
+ * literal baked into a data URI, because a background image cannot read
23
+ * `currentColor`, and the label is a real `<label for>` against the trigger's
24
+ * own id, which `Select` already renders and already tests.
25
+ *
26
+ * **The label sits on the row, not above it.** Every other field in the library
27
+ * stacks its label because it stands in a column of fields; this one stands in a
28
+ * footer beside a run of page numbers, and a two-line control there makes the
29
+ * whole row two lines tall. `Select`'s host is a column, and an outer-tree rule
30
+ * beats a `:host` rule, so turning it into a row needs no property on `Select`
31
+ * and nothing written into the consumer's markup.
32
+ *
33
+ * **An empty `sizes` renders nothing.** A chooser with nothing to choose from
34
+ * is a control a reader can operate and cannot use, which is worse than an
35
+ * absence. Falling back to the built-in list was the other answer and it is a
36
+ * component overruling a consumer who said "none". Same rule as `Pagination`
37
+ * over a single page, and reported the same way, through
38
+ * `ElementInternals.states` rather than an attribute the server never wrote.
39
+ *
40
+ * `value` is the controlled property and `default-value` seeds one this owns,
41
+ * the same contract every other stateful element here carries. Changing it
42
+ * announces `helix-before-change`; what a consumer does with that is re-query and move
43
+ * back to page one, which is theirs to decide because only they know whether
44
+ * the reader's position should survive it.
45
+ *
46
+ * @since 0.1.0
47
+ * @status experimental
48
+ * @aliases Page size, Rows per page
49
+ * @documentation https://helix.fusion.dev/components/pagination
50
+ *
51
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired before the size changes, and cancelable. The only way to refuse one.
52
+ *
53
+ * @csspart control - The select.
54
+ * @csspart label - The words beside the number, forwarded from the select.
55
+ * @csspart trigger - The closed control, forwarded from the select.
56
+ * @csspart value - The chosen size inside the trigger, forwarded from the select.
57
+ */
58
+ export declare class HelixHeadlessPaginationSize extends HelixElement {
59
+ /**
60
+ * The sizes offered, comma separated.
61
+ *
62
+ * A string rather than an array, so the whole control is expressible in
63
+ * markup and survives a server render. Anything that is not a positive number
64
+ * is dropped rather than rendered as an option that cannot mean anything.
65
+ */
66
+ sizes: string;
67
+ /**
68
+ * The size in force.
69
+ *
70
+ * Reading gives the real one; writing declares it the consumer's, and
71
+ * `default-value` seeds one this element owns. Same accessor pair as
72
+ * `Pagination.page` and the calendar's `month`.
73
+ *
74
+ *
75
+ */
76
+ get value(): number;
77
+ set value(next: number);
78
+ /**
79
+ * Size to start on, where nothing declared one.
80
+ */
81
+ defaultValue: number;
82
+ /**
83
+ * The words beside the control.
84
+ */
85
+ label: string;
86
+ /**
87
+ * Locale for the numbers.
88
+ *
89
+ * Absent uses the runtime's own.
90
+ */
91
+ locale: string;
92
+ /** The size, whoever set it, and `undefined` until somebody has. */
93
+ private valueState;
94
+ /** Held across every component asking for the same locale. */
95
+ private get numbers();
96
+ /** The sizes, parsed once, with anything that is not a size dropped. */
97
+ private get options();
98
+ /** The one in force, which is the first offered where nothing named one. */
99
+ private get current();
100
+ private readonly handleChange;
101
+ protected willUpdate(changed: PropertyValues): void;
102
+ /**
103
+ * The control itself, which is the whole of this part, behind a seam the styled tier can move.
104
+ *
105
+ * A method rather than a fragment inline, so a tier above can render its own,
106
+ * wrap this one, pass it a property the base does not know about, or leave it
107
+ * out, without reimplementing the whole template to do any of them.
108
+ *
109
+ * **The tags are interpolated, so each tier renders its own.** They were
110
+ * written out as `<helix-select>` on the argument that each tier imports its
111
+ * own element under that name, which works and costs more than it looks: the
112
+ * name means two different things depending on what a consumer imported, this
113
+ * tier composes an element it does not ship, and the composition cannot be
114
+ * tested here at all, since there is no `helix-select` on this tier to test it
115
+ * against. `tier` resolves the name instead, and the styled subclass changes
116
+ * it in one line rather than reimplementing this method. A tier that renders
117
+ * its own elements is a tier that stands alone, which is the claim the package
118
+ * makes.
119
+ */
120
+ protected renderSelect(): TemplateResult;
121
+ protected render(): TemplateResult | typeof nothing;
122
+ }
123
+ declare global {
124
+ interface HTMLElementTagNameMap {
125
+ 'helix-headless-pagination-size': HelixHeadlessPaginationSize;
126
+ }
127
+ }
@@ -0,0 +1,232 @@
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, formatNumbers, HelixBeforeChangeEvent, HelixElement, requestChange, } from '@fusion.dev/helix-core';
8
+ import { nothing } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ import { html } from 'lit/static-html.js';
11
+ /* Side-effect imports, because this renders a select and an option in its own
12
+ shadow root and a custom element registers on import. The paths are relative,
13
+ so this registers the base pair and the styled file's identical imports
14
+ register the styled pair; `tier` picks which names the template asks for. */
15
+ import '../../option/index.js';
16
+ import '../../select/index.js';
17
+ /**
18
+ * @summary Chooses how many items a page holds.
19
+ *
20
+ * @description
21
+ * Its own element beside `Pagination` rather than a slot inside it, for the
22
+ * reason `Pagination.Summary` is: a footer's direction and order are the
23
+ * consumer's, and a control that can only sit at one end of one row has taken
24
+ * that decision for them.
25
+ *
26
+ * **`Select`, not a native `<select>`.** It was native first, on the argument
27
+ * that the platform's own menu is a wheel on a phone and the widget a
28
+ * screen-reader user already knows. What that argument leaves out is that the
29
+ * library then has two dropdowns that are identical closed and different open,
30
+ * and a reader meets both in the same footer as a table's filters. Consistency
31
+ * is the whole product here, and it wins.
32
+ *
33
+ * What it takes back with it: the caret is `Select`'s again rather than a color
34
+ * literal baked into a data URI, because a background image cannot read
35
+ * `currentColor`, and the label is a real `<label for>` against the trigger's
36
+ * own id, which `Select` already renders and already tests.
37
+ *
38
+ * **The label sits on the row, not above it.** Every other field in the library
39
+ * stacks its label because it stands in a column of fields; this one stands in a
40
+ * footer beside a run of page numbers, and a two-line control there makes the
41
+ * whole row two lines tall. `Select`'s host is a column, and an outer-tree rule
42
+ * beats a `:host` rule, so turning it into a row needs no property on `Select`
43
+ * and nothing written into the consumer's markup.
44
+ *
45
+ * **An empty `sizes` renders nothing.** A chooser with nothing to choose from
46
+ * is a control a reader can operate and cannot use, which is worse than an
47
+ * absence. Falling back to the built-in list was the other answer and it is a
48
+ * component overruling a consumer who said "none". Same rule as `Pagination`
49
+ * over a single page, and reported the same way, through
50
+ * `ElementInternals.states` rather than an attribute the server never wrote.
51
+ *
52
+ * `value` is the controlled property and `default-value` seeds one this owns,
53
+ * the same contract every other stateful element here carries. Changing it
54
+ * announces `helix-before-change`; what a consumer does with that is re-query and move
55
+ * back to page one, which is theirs to decide because only they know whether
56
+ * the reader's position should survive it.
57
+ *
58
+ * @since 0.1.0
59
+ * @status experimental
60
+ * @aliases Page size, Rows per page
61
+ * @documentation https://helix.fusion.dev/components/pagination
62
+ *
63
+ * @event {HelixBeforeChangeEvent} helix-before-change - Fired before the size changes, and cancelable. The only way to refuse one.
64
+ *
65
+ * @csspart control - The select.
66
+ * @csspart label - The words beside the number, forwarded from the select.
67
+ * @csspart trigger - The closed control, forwarded from the select.
68
+ * @csspart value - The chosen size inside the trigger, forwarded from the select.
69
+ */
70
+ let HelixHeadlessPaginationSize = class HelixHeadlessPaginationSize extends HelixElement {
71
+ constructor() {
72
+ super(...arguments);
73
+ /**
74
+ * The sizes offered, comma separated.
75
+ *
76
+ * A string rather than an array, so the whole control is expressible in
77
+ * markup and survives a server render. Anything that is not a positive number
78
+ * is dropped rather than rendered as an option that cannot mean anything.
79
+ */
80
+ this.sizes = '10,25,50,100';
81
+ /**
82
+ * Size to start on, where nothing declared one.
83
+ */
84
+ this.defaultValue = 0;
85
+ /**
86
+ * The words beside the control.
87
+ */
88
+ this.label = 'Per page';
89
+ /**
90
+ * Locale for the numbers.
91
+ *
92
+ * Absent uses the runtime's own.
93
+ */
94
+ this.locale = '';
95
+ /** The size, whoever set it, and `undefined` until somebody has. */
96
+ this.valueState = undefined;
97
+ this.handleChange = (event) => {
98
+ /* Stopped, then re-announced under this element's own name. `Select`'s
99
+ `helix-before-change` bubbles and is composed, so left alone it would cross this
100
+ shadow boundary and be retargeted to look like this element's: a consumer
101
+ would get two events per change, one of them carrying `Select`'s idea of
102
+ what a name and a value are. */
103
+ event.stopPropagation();
104
+ const next = Number.parseInt(event.detail?.value ?? '', 10);
105
+ if (!Number.isFinite(next) || next === this.current) {
106
+ return;
107
+ }
108
+ requestChange({
109
+ apply: (size) => {
110
+ const previous = this.value;
111
+ this.valueState = size;
112
+ this.requestUpdate('value', previous);
113
+ },
114
+ event: (size) => new HelixBeforeChangeEvent({ value: String(size) }),
115
+ host: this,
116
+ next,
117
+ });
118
+ /* Put back where the consumer refused it or owns it, because the control has
119
+ already moved: a select changes itself and then tells you, which is the
120
+ one case `requestChange` cannot announce ahead of. Lit skips a
121
+ property binding whose value has not changed, so a refusal leaves the
122
+ select holding the reader's choice and nothing else would put it back.
123
+ Deferred, so the read happens after the render a successful change asked
124
+ for rather than racing it. */
125
+ this.updateComplete.then(() => {
126
+ const control = this.renderRoot?.querySelector('[part="control"]');
127
+ if (control && control.value !== String(this.current)) {
128
+ control.value = String(this.current);
129
+ }
130
+ });
131
+ };
132
+ }
133
+ /**
134
+ * The size in force.
135
+ *
136
+ * Reading gives the real one; writing declares it the consumer's, and
137
+ * `default-value` seeds one this element owns. Same accessor pair as
138
+ * `Pagination.page` and the calendar's `month`.
139
+ *
140
+ *
141
+ */
142
+ get value() {
143
+ return this.valueState ?? this.defaultValue;
144
+ }
145
+ set value(next) {
146
+ const previous = this.value;
147
+ this.valueState = next;
148
+ this.requestUpdate('value', previous);
149
+ }
150
+ /** Held across every component asking for the same locale. */
151
+ get numbers() {
152
+ return formatNumbers(this.locale);
153
+ }
154
+ /** The sizes, parsed once, with anything that is not a size dropped. */
155
+ get options() {
156
+ return this.sizes
157
+ .split(',')
158
+ .map((one) => Number.parseInt(one.trim(), 10))
159
+ .filter((one) => Number.isFinite(one) && one > 0);
160
+ }
161
+ /** The one in force, which is the first offered where nothing named one. */
162
+ get current() {
163
+ const options = this.options;
164
+ return options.includes(this.value) ? this.value : (options[0] ?? 0);
165
+ }
166
+ willUpdate(changed) {
167
+ super.willUpdate(changed);
168
+ /* Through `toggleState`, like `Pagination`'s: an engine without
169
+ `CustomStateSet` gets an empty select rather than no element, which is the
170
+ behavior this had before. */
171
+ this.toggleState('empty', this.options.length === 0);
172
+ }
173
+ /**
174
+ * The control itself, which is the whole of this part, behind a seam the styled tier can move.
175
+ *
176
+ * A method rather than a fragment inline, so a tier above can render its own,
177
+ * wrap this one, pass it a property the base does not know about, or leave it
178
+ * out, without reimplementing the whole template to do any of them.
179
+ *
180
+ * **The tags are interpolated, so each tier renders its own.** They were
181
+ * written out as `<helix-select>` on the argument that each tier imports its
182
+ * own element under that name, which works and costs more than it looks: the
183
+ * name means two different things depending on what a consumer imported, this
184
+ * tier composes an element it does not ship, and the composition cannot be
185
+ * tested here at all, since there is no `helix-select` on this tier to test it
186
+ * against. `tier` resolves the name instead, and the styled subclass changes
187
+ * it in one line rather than reimplementing this method. A tier that renders
188
+ * its own elements is a tier that stands alone, which is the claim the package
189
+ * makes.
190
+ */
191
+ renderSelect() {
192
+ const select = this.tag('select');
193
+ const option = this.tag('option');
194
+ return html `<${select}
195
+ part="control"
196
+ exportparts="label, trigger, value"
197
+ label=${this.label}
198
+ .value=${String(this.current)}
199
+ @helix-before-change=${this.handleChange}
200
+ >
201
+ ${this.options.map((size) => html `<${option} value=${String(size)}>${this.numbers(size)}</${option}>`)}
202
+ </${select}>`;
203
+ }
204
+ render() {
205
+ if (this.options.length === 0) {
206
+ return nothing;
207
+ }
208
+ /* `Select` renders the label and gives the trigger the id it points at, so
209
+ the association is the platform's and is already covered by that
210
+ component's own specs. Nothing here reconstructs it. */
211
+ return html `${this.renderSelect()}`;
212
+ }
213
+ };
214
+ __decorate([
215
+ property()
216
+ ], HelixHeadlessPaginationSize.prototype, "sizes", void 0);
217
+ __decorate([
218
+ property({ type: Number })
219
+ ], HelixHeadlessPaginationSize.prototype, "value", null);
220
+ __decorate([
221
+ property({ attribute: 'default-value', type: Number })
222
+ ], HelixHeadlessPaginationSize.prototype, "defaultValue", void 0);
223
+ __decorate([
224
+ property()
225
+ ], HelixHeadlessPaginationSize.prototype, "label", void 0);
226
+ __decorate([
227
+ property()
228
+ ], HelixHeadlessPaginationSize.prototype, "locale", void 0);
229
+ HelixHeadlessPaginationSize = __decorate([
230
+ customElement('helix-headless-pagination-size')
231
+ ], HelixHeadlessPaginationSize);
232
+ export { HelixHeadlessPaginationSize };
@@ -0,0 +1,90 @@
1
+ import { HelixElement } from '@fusion.dev/helix-core';
2
+ import { type TemplateResult } from 'lit';
3
+ /**
4
+ * @summary Reads out which items of how many are on show.
5
+ *
6
+ * @description
7
+ * Its own element rather than a part of `Pagination`, so a consumer decides
8
+ * where it goes. Inside the run it could only ever be at one end of one row;
9
+ * beside it, it goes above, below, in a table's caption, or on the other side of
10
+ * the page, and the direction and order of the whole footer are the consumer's.
11
+ *
12
+ * **It repeats `page`, `page-size` and `total`, and the cost of that is skew
13
+ * rather than verbosity.** Those three come from the consumer's own query, so
14
+ * writing them on two elements is one variable used twice; what it risks is the
15
+ * two disagreeing, and a count reading `76-100 of 248` beside a run showing page
16
+ * 7 is the same failure this element's own clamping exists to prevent, arriving
17
+ * from the outside instead.
18
+ *
19
+ * **Nothing removes it at this level, and that was measured rather than
20
+ * assumed.** A coordinating root can only reach children the consumer laid out
21
+ * by writing attributes onto them, which a framework reports as a hydration
22
+ * error, or through context, which is dead on a server: `@lit/context`
23
+ * subscribes from `connectedCallback`, and Lit SSR does not call it, so every
24
+ * value is `undefined` in exactly the render this element exists to be part of.
25
+ * Confirmed against Lit SSR directly. The fork is real: children in the light
26
+ * DOM mean the consumer owns the layout and no root can feed them; children in a
27
+ * shadow root mean a root feeds them by ordinary binding and owns the layout.
28
+ *
29
+ * **It resolves one level up, at a composite, and the state is why.** `page`,
30
+ * `page-size` and `total` are facts about a *result*, not about a pagination, so
31
+ * the element that should hold them once is the one that holds the result: a
32
+ * data table composing a pagination inside itself, rather than a pagination root
33
+ * invented to hold three pagination elements together. That root would have been
34
+ * plumbing; a table's paging state is the thing itself. And because a composite
35
+ * renders its parts into its own shadow root, it lands on the side of the fork
36
+ * where binding works and the server renders, at no cost to anyone.
37
+ *
38
+ * Renders nothing without a `total` and a `page-size`. A wrong count is worse
39
+ * than none: it is the one number in a footer a reader cannot check against
40
+ * anything else on screen.
41
+ *
42
+ * @since 0.1.0
43
+ * @status experimental
44
+ * @aliases Result count, Range
45
+ * @documentation https://helix.fusion.dev/components/pagination
46
+ */
47
+ export declare class HelixHeadlessPaginationSummary extends HelixElement {
48
+ /**
49
+ * The page on show, one-based.
50
+ */
51
+ page: number;
52
+ /**
53
+ * How many items are on a page.
54
+ */
55
+ pageSize: number;
56
+ /**
57
+ * How many items there are across every page.
58
+ */
59
+ total: number;
60
+ /**
61
+ * The reading, with `{from}`, `{to}` and `{total}` filled in.
62
+ *
63
+ * A template rather than a prefix and a suffix, because word order is not
64
+ * universal: `format="{total} 件中 {from}-{to} 件"` is one attribute here and
65
+ * three concatenations anywhere else.
66
+ *
67
+ * **`format`, not `label`, and the difference is worth the rename.** `label`
68
+ * across this library means the accessible name of a thing that has one:
69
+ * `Pagination.label` names the landmark and `Pagination.Size.label` is the
70
+ * words beside the control. This is neither. It is the whole visible content
71
+ * of the element, so calling it `label` put one word on three jobs inside one
72
+ * family. The root's templates are `pageLabel`, `statusLabel` and `gapLabel`,
73
+ * which each label something; this labels nothing, it *is* the thing.
74
+ */
75
+ format: string;
76
+ /**
77
+ * Locale for the numbers.
78
+ *
79
+ * Absent uses the runtime's own.
80
+ */
81
+ locale: string;
82
+ /** Held across every component asking for the same locale. */
83
+ private get numbers();
84
+ protected render(): TemplateResult;
85
+ }
86
+ declare global {
87
+ interface HTMLElementTagNameMap {
88
+ 'helix-headless-pagination-summary': HelixHeadlessPaginationSummary;
89
+ }
90
+ }
@@ -0,0 +1,145 @@
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, formatNumbers, HelixElement } from '@fusion.dev/helix-core';
8
+ import { html } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ /**
11
+ * @summary Reads out which items of how many are on show.
12
+ *
13
+ * @description
14
+ * Its own element rather than a part of `Pagination`, so a consumer decides
15
+ * where it goes. Inside the run it could only ever be at one end of one row;
16
+ * beside it, it goes above, below, in a table's caption, or on the other side of
17
+ * the page, and the direction and order of the whole footer are the consumer's.
18
+ *
19
+ * **It repeats `page`, `page-size` and `total`, and the cost of that is skew
20
+ * rather than verbosity.** Those three come from the consumer's own query, so
21
+ * writing them on two elements is one variable used twice; what it risks is the
22
+ * two disagreeing, and a count reading `76-100 of 248` beside a run showing page
23
+ * 7 is the same failure this element's own clamping exists to prevent, arriving
24
+ * from the outside instead.
25
+ *
26
+ * **Nothing removes it at this level, and that was measured rather than
27
+ * assumed.** A coordinating root can only reach children the consumer laid out
28
+ * by writing attributes onto them, which a framework reports as a hydration
29
+ * error, or through context, which is dead on a server: `@lit/context`
30
+ * subscribes from `connectedCallback`, and Lit SSR does not call it, so every
31
+ * value is `undefined` in exactly the render this element exists to be part of.
32
+ * Confirmed against Lit SSR directly. The fork is real: children in the light
33
+ * DOM mean the consumer owns the layout and no root can feed them; children in a
34
+ * shadow root mean a root feeds them by ordinary binding and owns the layout.
35
+ *
36
+ * **It resolves one level up, at a composite, and the state is why.** `page`,
37
+ * `page-size` and `total` are facts about a *result*, not about a pagination, so
38
+ * the element that should hold them once is the one that holds the result: a
39
+ * data table composing a pagination inside itself, rather than a pagination root
40
+ * invented to hold three pagination elements together. That root would have been
41
+ * plumbing; a table's paging state is the thing itself. And because a composite
42
+ * renders its parts into its own shadow root, it lands on the side of the fork
43
+ * where binding works and the server renders, at no cost to anyone.
44
+ *
45
+ * Renders nothing without a `total` and a `page-size`. A wrong count is worse
46
+ * than none: it is the one number in a footer a reader cannot check against
47
+ * anything else on screen.
48
+ *
49
+ * @since 0.1.0
50
+ * @status experimental
51
+ * @aliases Result count, Range
52
+ * @documentation https://helix.fusion.dev/components/pagination
53
+ */
54
+ let HelixHeadlessPaginationSummary = class HelixHeadlessPaginationSummary extends HelixElement {
55
+ constructor() {
56
+ super(...arguments);
57
+ /**
58
+ * The page on show, one-based.
59
+ */
60
+ this.page = 1;
61
+ /**
62
+ * How many items are on a page.
63
+ */
64
+ this.pageSize = 0;
65
+ /**
66
+ * How many items there are across every page.
67
+ */
68
+ this.total = 0;
69
+ /**
70
+ * The reading, with `{from}`, `{to}` and `{total}` filled in.
71
+ *
72
+ * A template rather than a prefix and a suffix, because word order is not
73
+ * universal: `format="{total} 件中 {from}-{to} 件"` is one attribute here and
74
+ * three concatenations anywhere else.
75
+ *
76
+ * **`format`, not `label`, and the difference is worth the rename.** `label`
77
+ * across this library means the accessible name of a thing that has one:
78
+ * `Pagination.label` names the landmark and `Pagination.Size.label` is the
79
+ * words beside the control. This is neither. It is the whole visible content
80
+ * of the element, so calling it `label` put one word on three jobs inside one
81
+ * family. The root's templates are `pageLabel`, `statusLabel` and `gapLabel`,
82
+ * which each label something; this labels nothing, it *is* the thing.
83
+ */
84
+ this.format = '{from}-{to} of {total}';
85
+ /**
86
+ * Locale for the numbers.
87
+ *
88
+ * Absent uses the runtime's own.
89
+ */
90
+ this.locale = '';
91
+ }
92
+ /** Held across every component asking for the same locale. */
93
+ get numbers() {
94
+ return formatNumbers(this.locale);
95
+ }
96
+ render() {
97
+ /* An empty template rather than `nothing`, so the element generates a box
98
+ with no text in it: a footer laid out as a grid keeps its column, and a
99
+ count that appears when the total loads does not move the controls beside
100
+ it. */
101
+ if (this.total <= 0 || this.pageSize <= 0) {
102
+ return html ``;
103
+ }
104
+ const size = Math.max(1, Math.floor(this.pageSize));
105
+ /* **The page is clamped to the range, not just the window inside it.**
106
+ Only the end was, so a `page` past the last one produced a start past the
107
+ total and an end pinned to it: at page 99 of a 10-page result this read
108
+ "2,451-248 of 248", a range running backwards. That is the worst kind of
109
+ wrong here, because a count is the one number in a footer a reader cannot
110
+ check against anything else on screen.
111
+
112
+ A page past the end is not far-fetched either: it is a bookmarked query
113
+ after the result shrank, and the run beside this clamps it silently, so
114
+ the two would disagree with only this one visibly broken. */
115
+ const pages = Math.max(1, Math.ceil(this.total / size));
116
+ const page = Math.min(pages, Math.max(1, Math.floor(this.page) || 1));
117
+ const from = (page - 1) * size + 1;
118
+ /* And the end is clamped to the total, because the last page is rarely
119
+ full: 248 items at 25 a page end at 248, not at 250. */
120
+ const to = Math.min(this.total, from + size - 1);
121
+ return html `${this.format
122
+ .replaceAll('{from}', this.numbers(from))
123
+ .replaceAll('{to}', this.numbers(to))
124
+ .replaceAll('{total}', this.numbers(this.total))}`;
125
+ }
126
+ };
127
+ __decorate([
128
+ property({ type: Number })
129
+ ], HelixHeadlessPaginationSummary.prototype, "page", void 0);
130
+ __decorate([
131
+ property({ attribute: 'page-size', type: Number })
132
+ ], HelixHeadlessPaginationSummary.prototype, "pageSize", void 0);
133
+ __decorate([
134
+ property({ type: Number })
135
+ ], HelixHeadlessPaginationSummary.prototype, "total", void 0);
136
+ __decorate([
137
+ property()
138
+ ], HelixHeadlessPaginationSummary.prototype, "format", void 0);
139
+ __decorate([
140
+ property()
141
+ ], HelixHeadlessPaginationSummary.prototype, "locale", void 0);
142
+ HelixHeadlessPaginationSummary = __decorate([
143
+ customElement('helix-headless-pagination-summary')
144
+ ], HelixHeadlessPaginationSummary);
145
+ export { HelixHeadlessPaginationSummary };
@@ -0,0 +1 @@
1
+ export * from './root/pin-input-root.js';
@@ -0,0 +1 @@
1
+ export * from './root/pin-input-root.js';