@gunkin/uiify 0.0.25-alpha → 0.0.26-alpha

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 (336) hide show
  1. package/agents/reference/components/accordion.md +4 -4
  2. package/agents/reference/components/alert-modal.md +10 -10
  3. package/agents/reference/components/alert.md +1 -1
  4. package/agents/reference/components/aspect-ratio.md +1 -1
  5. package/agents/reference/components/avatar.md +2 -2
  6. package/agents/reference/components/breadcrumb.md +9 -10
  7. package/agents/reference/components/candle-chart.md +35 -35
  8. package/agents/reference/components/carousel.md +10 -14
  9. package/agents/reference/components/collapsible.md +3 -3
  10. package/agents/reference/components/color-picker.md +6 -6
  11. package/agents/reference/components/combobox.md +7 -17
  12. package/agents/reference/components/context-menu.md +5 -26
  13. package/agents/reference/components/date-picker.md +2 -1
  14. package/agents/reference/components/drawer.md +17 -31
  15. package/agents/reference/components/dropdown-menu.md +2 -3
  16. package/agents/reference/components/field.md +11 -11
  17. package/agents/reference/components/form-error-summary.md +4 -4
  18. package/agents/reference/components/input-group.md +1 -0
  19. package/agents/reference/components/input.md +1 -0
  20. package/agents/reference/components/line-chart.md +29 -29
  21. package/agents/reference/components/modal.md +13 -15
  22. package/agents/reference/components/number-field.md +1 -1
  23. package/agents/reference/components/otp-input.md +2 -1
  24. package/agents/reference/components/pagination.md +7 -8
  25. package/agents/reference/components/rating.md +1 -1
  26. package/agents/reference/components/segmented-control.md +1 -0
  27. package/agents/reference/components/select.md +1 -0
  28. package/agents/reference/components/slider.md +4 -4
  29. package/agents/reference/components/spinner.md +1 -1
  30. package/agents/reference/components/table.md +1 -1
  31. package/agents/reference/components/tabs.md +6 -6
  32. package/agents/reference/components/tags-input.md +5 -12
  33. package/agents/reference/components/toast.md +8 -15
  34. package/agents/reference/components/toggle.md +4 -3
  35. package/agents/reference/components/virtual-scroll.md +4 -5
  36. package/agents/reference/elements/choice.md +3 -3
  37. package/agents/reference/elements/details.md +2 -2
  38. package/agents/reference/elements/popover.md +3 -3
  39. package/dist/components/accordion/Accordion.d.ts.map +1 -1
  40. package/dist/components/accordion/Accordion.js +20 -46
  41. package/dist/components/accordion/Accordion.js.map +1 -1
  42. package/dist/components/accordion/types.d.ts +6 -15
  43. package/dist/components/accordion/types.d.ts.map +1 -1
  44. package/dist/components/alert/Alert.d.ts.map +1 -1
  45. package/dist/components/alert/Alert.js +5 -14
  46. package/dist/components/alert/Alert.js.map +1 -1
  47. package/dist/components/alert/types.d.ts +3 -7
  48. package/dist/components/alert/types.d.ts.map +1 -1
  49. package/dist/components/alert-modal/AlertModal.d.ts.map +1 -1
  50. package/dist/components/alert-modal/AlertModal.js +28 -137
  51. package/dist/components/alert-modal/AlertModal.js.map +1 -1
  52. package/dist/components/alert-modal/AlertModalParts.d.ts.map +1 -1
  53. package/dist/components/alert-modal/AlertModalParts.js +4 -37
  54. package/dist/components/alert-modal/AlertModalParts.js.map +1 -1
  55. package/dist/components/alert-modal/types.d.ts +15 -33
  56. package/dist/components/alert-modal/types.d.ts.map +1 -1
  57. package/dist/components/aspect-ratio/AspectRatio.d.ts.map +1 -1
  58. package/dist/components/aspect-ratio/AspectRatio.js +4 -12
  59. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
  60. package/dist/components/aspect-ratio/types.d.ts +3 -6
  61. package/dist/components/aspect-ratio/types.d.ts.map +1 -1
  62. package/dist/components/avatar/Avatar.d.ts.map +1 -1
  63. package/dist/components/avatar/Avatar.js +4 -21
  64. package/dist/components/avatar/Avatar.js.map +1 -1
  65. package/dist/components/avatar/types.d.ts +4 -14
  66. package/dist/components/avatar/types.d.ts.map +1 -1
  67. package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -1
  68. package/dist/components/breadcrumb/Breadcrumb.js +43 -123
  69. package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
  70. package/dist/components/breadcrumb/types.d.ts +12 -35
  71. package/dist/components/breadcrumb/types.d.ts.map +1 -1
  72. package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
  73. package/dist/components/candle-chart/CandleChart.js +122 -186
  74. package/dist/components/candle-chart/CandleChart.js.map +1 -1
  75. package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
  76. package/dist/components/candle-chart/client/CandleChartClient.js +8 -15
  77. package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
  78. package/dist/components/candle-chart/types.d.ts +42 -116
  79. package/dist/components/candle-chart/types.d.ts.map +1 -1
  80. package/dist/components/carousel/CarouselMarkup.d.ts.map +1 -1
  81. package/dist/components/carousel/CarouselMarkup.js +55 -142
  82. package/dist/components/carousel/CarouselMarkup.js.map +1 -1
  83. package/dist/components/carousel/types.d.ts +13 -80
  84. package/dist/components/carousel/types.d.ts.map +1 -1
  85. package/dist/components/collapsible/Collapsible.d.ts +1 -5
  86. package/dist/components/collapsible/Collapsible.d.ts.map +1 -1
  87. package/dist/components/collapsible/Collapsible.js +3 -33
  88. package/dist/components/collapsible/Collapsible.js.map +1 -1
  89. package/dist/components/collapsible/types.d.ts +4 -18
  90. package/dist/components/collapsible/types.d.ts.map +1 -1
  91. package/dist/components/color-picker/ColorPicker.d.ts.map +1 -1
  92. package/dist/components/color-picker/ColorPicker.js +28 -123
  93. package/dist/components/color-picker/ColorPicker.js.map +1 -1
  94. package/dist/components/color-picker/types.d.ts +11 -30
  95. package/dist/components/color-picker/types.d.ts.map +1 -1
  96. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  97. package/dist/components/combobox/Combobox.js +30 -23
  98. package/dist/components/combobox/Combobox.js.map +1 -1
  99. package/dist/components/combobox/types.d.ts +9 -29
  100. package/dist/components/combobox/types.d.ts.map +1 -1
  101. package/dist/components/context-menu/ContextMenu.d.ts.map +1 -1
  102. package/dist/components/context-menu/ContextMenu.js +30 -53
  103. package/dist/components/context-menu/ContextMenu.js.map +1 -1
  104. package/dist/components/context-menu/types.d.ts +6 -31
  105. package/dist/components/context-menu/types.d.ts.map +1 -1
  106. package/dist/components/date-picker/DatePicker.d.ts +1 -1
  107. package/dist/components/date-picker/DatePicker.d.ts.map +1 -1
  108. package/dist/components/date-picker/DatePicker.js +2 -1
  109. package/dist/components/date-picker/DatePicker.js.map +1 -1
  110. package/dist/components/date-picker/types.d.ts +4 -1
  111. package/dist/components/date-picker/types.d.ts.map +1 -1
  112. package/dist/components/drawer/Drawer.d.ts.map +1 -1
  113. package/dist/components/drawer/Drawer.js +12 -12
  114. package/dist/components/drawer/Drawer.js.map +1 -1
  115. package/dist/components/drawer/DrawerNative.d.ts.map +1 -1
  116. package/dist/components/drawer/DrawerNative.js +47 -252
  117. package/dist/components/drawer/DrawerNative.js.map +1 -1
  118. package/dist/components/drawer/types.d.ts +25 -30
  119. package/dist/components/drawer/types.d.ts.map +1 -1
  120. package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  121. package/dist/components/dropdown-menu/DropdownMenu.js +30 -27
  122. package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -1
  123. package/dist/components/dropdown-menu/DropdownMenuBar.d.ts.map +1 -1
  124. package/dist/components/dropdown-menu/DropdownMenuBar.js +3 -7
  125. package/dist/components/dropdown-menu/DropdownMenuBar.js.map +1 -1
  126. package/dist/components/dropdown-menu/types.d.ts +2 -5
  127. package/dist/components/dropdown-menu/types.d.ts.map +1 -1
  128. package/dist/components/field/Field.js +7 -7
  129. package/dist/components/field/Field.js.map +1 -1
  130. package/dist/components/field/types.d.ts +11 -11
  131. package/dist/components/field/types.d.ts.map +1 -1
  132. package/dist/components/form-error-summary/FormErrorSummary.d.ts.map +1 -1
  133. package/dist/components/form-error-summary/FormErrorSummary.js +20 -34
  134. package/dist/components/form-error-summary/FormErrorSummary.js.map +1 -1
  135. package/dist/components/form-error-summary/types.d.ts +6 -16
  136. package/dist/components/form-error-summary/types.d.ts.map +1 -1
  137. package/dist/components/hover-card/HoverCard.d.ts.map +1 -1
  138. package/dist/components/hover-card/HoverCard.js +9 -9
  139. package/dist/components/hover-card/HoverCard.js.map +1 -1
  140. package/dist/components/input/Input.d.ts.map +1 -1
  141. package/dist/components/input/Input.js +2 -0
  142. package/dist/components/input/Input.js.map +1 -1
  143. package/dist/components/input/types.d.ts +3 -0
  144. package/dist/components/input/types.d.ts.map +1 -1
  145. package/dist/components/input-group/InputGroup.d.ts.map +1 -1
  146. package/dist/components/input-group/InputGroup.js +2 -1
  147. package/dist/components/input-group/InputGroup.js.map +1 -1
  148. package/dist/components/input-group/types.d.ts +3 -0
  149. package/dist/components/input-group/types.d.ts.map +1 -1
  150. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.d.ts +2 -2
  151. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.d.ts.map +1 -1
  152. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.js +11 -3
  153. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.js.map +1 -1
  154. package/dist/components/internal/choice-family/ChoiceGroup.d.ts.map +1 -1
  155. package/dist/components/internal/choice-family/ChoiceGroup.js +14 -51
  156. package/dist/components/internal/choice-family/ChoiceGroup.js.map +1 -1
  157. package/dist/components/internal/choice-family/types.d.ts +8 -40
  158. package/dist/components/internal/choice-family/types.d.ts.map +1 -1
  159. package/dist/components/internal/control-size/types.d.ts +3 -0
  160. package/dist/components/internal/control-size/types.d.ts.map +1 -0
  161. package/dist/components/internal/control-size/types.js +1 -0
  162. package/dist/components/internal/control-size/types.js.map +1 -0
  163. package/dist/components/internal/live-chart/types.d.ts +3 -1
  164. package/dist/components/internal/live-chart/types.d.ts.map +1 -1
  165. package/dist/components/internal/live-chart/use-live-chart-window.d.ts.map +1 -1
  166. package/dist/components/internal/live-chart/use-live-chart-window.js +21 -5
  167. package/dist/components/internal/live-chart/use-live-chart-window.js.map +1 -1
  168. package/dist/components/internal/menu/menu-parts.d.ts.map +1 -1
  169. package/dist/components/internal/menu/menu-parts.js +3 -3
  170. package/dist/components/internal/menu/menu-parts.js.map +1 -1
  171. package/dist/components/internal/native-check-control/NativeCheckControl.d.ts.map +1 -1
  172. package/dist/components/internal/native-check-control/NativeCheckControl.js +8 -32
  173. package/dist/components/internal/native-check-control/NativeCheckControl.js.map +1 -1
  174. package/dist/components/internal/native-check-control/types.d.ts +4 -18
  175. package/dist/components/internal/native-check-control/types.d.ts.map +1 -1
  176. package/dist/components/line-chart/LineChart.d.ts.map +1 -1
  177. package/dist/components/line-chart/LineChart.js +134 -208
  178. package/dist/components/line-chart/LineChart.js.map +1 -1
  179. package/dist/components/line-chart/client/LineChartClient.d.ts.map +1 -1
  180. package/dist/components/line-chart/client/LineChartClient.js +8 -15
  181. package/dist/components/line-chart/client/LineChartClient.js.map +1 -1
  182. package/dist/components/line-chart/types.d.ts +36 -103
  183. package/dist/components/line-chart/types.d.ts.map +1 -1
  184. package/dist/components/modal/Modal.d.ts.map +1 -1
  185. package/dist/components/modal/Modal.js +34 -115
  186. package/dist/components/modal/Modal.js.map +1 -1
  187. package/dist/components/modal/ModalAnatomy.js +6 -6
  188. package/dist/components/modal/ModalAnatomy.js.map +1 -1
  189. package/dist/components/modal/ModalParts.js +1 -1
  190. package/dist/components/modal/ModalParts.js.map +1 -1
  191. package/dist/components/modal/client/ModalClientContent.d.ts.map +1 -1
  192. package/dist/components/modal/client/ModalClientContent.js +2 -2
  193. package/dist/components/modal/client/ModalClientContent.js.map +1 -1
  194. package/dist/components/modal/types.d.ts +19 -19
  195. package/dist/components/modal/types.d.ts.map +1 -1
  196. package/dist/components/number-field/NumberField.d.ts.map +1 -1
  197. package/dist/components/number-field/NumberField.js +13 -11
  198. package/dist/components/number-field/NumberField.js.map +1 -1
  199. package/dist/components/number-field/types.d.ts +1 -1
  200. package/dist/components/number-field/types.d.ts.map +1 -1
  201. package/dist/components/otp-input/OtpInput.d.ts.map +1 -1
  202. package/dist/components/otp-input/OtpInput.js +9 -9
  203. package/dist/components/otp-input/OtpInput.js.map +1 -1
  204. package/dist/components/otp-input/types.d.ts +4 -1
  205. package/dist/components/otp-input/types.d.ts.map +1 -1
  206. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  207. package/dist/components/pagination/Pagination.js +26 -69
  208. package/dist/components/pagination/Pagination.js.map +1 -1
  209. package/dist/components/pagination/PaginationShell.d.ts.map +1 -1
  210. package/dist/components/pagination/PaginationShell.js +5 -6
  211. package/dist/components/pagination/PaginationShell.js.map +1 -1
  212. package/dist/components/pagination/types.d.ts +9 -32
  213. package/dist/components/pagination/types.d.ts.map +1 -1
  214. package/dist/components/rating/types.d.ts +1 -5
  215. package/dist/components/rating/types.d.ts.map +1 -1
  216. package/dist/components/segmented-control/SegmentedControl.d.ts +1 -1
  217. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
  218. package/dist/components/segmented-control/SegmentedControl.js +4 -2
  219. package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
  220. package/dist/components/segmented-control/client/SegmentedControlClient.d.ts +1 -1
  221. package/dist/components/segmented-control/client/SegmentedControlClient.d.ts.map +1 -1
  222. package/dist/components/segmented-control/client/SegmentedControlClient.js +4 -2
  223. package/dist/components/segmented-control/client/SegmentedControlClient.js.map +1 -1
  224. package/dist/components/segmented-control/types.d.ts +3 -0
  225. package/dist/components/segmented-control/types.d.ts.map +1 -1
  226. package/dist/components/select/Select.d.ts.map +1 -1
  227. package/dist/components/select/Select.js +2 -0
  228. package/dist/components/select/Select.js.map +1 -1
  229. package/dist/components/select/types.d.ts +3 -0
  230. package/dist/components/select/types.d.ts.map +1 -1
  231. package/dist/components/slider/Slider.d.ts.map +1 -1
  232. package/dist/components/slider/Slider.js +12 -7
  233. package/dist/components/slider/Slider.js.map +1 -1
  234. package/dist/components/slider/client/SliderClient.d.ts.map +1 -1
  235. package/dist/components/slider/client/SliderClient.js +53 -100
  236. package/dist/components/slider/client/SliderClient.js.map +1 -1
  237. package/dist/components/slider/types.d.ts +8 -38
  238. package/dist/components/slider/types.d.ts.map +1 -1
  239. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  240. package/dist/components/spinner/Spinner.js +2 -10
  241. package/dist/components/spinner/Spinner.js.map +1 -1
  242. package/dist/components/spinner/types.d.ts +3 -6
  243. package/dist/components/spinner/types.d.ts.map +1 -1
  244. package/dist/components/table/client/TableColumnHeader.d.ts.map +1 -1
  245. package/dist/components/table/client/TableColumnHeader.js +1 -15
  246. package/dist/components/table/client/TableColumnHeader.js.map +1 -1
  247. package/dist/components/table/types.d.ts +2 -6
  248. package/dist/components/table/types.d.ts.map +1 -1
  249. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  250. package/dist/components/tabs/Tabs.js +9 -43
  251. package/dist/components/tabs/Tabs.js.map +1 -1
  252. package/dist/components/tabs/types.d.ts +8 -21
  253. package/dist/components/tabs/types.d.ts.map +1 -1
  254. package/dist/components/tags-input/TagsInput.d.ts.map +1 -1
  255. package/dist/components/tags-input/TagsInput.js +16 -27
  256. package/dist/components/tags-input/TagsInput.js.map +1 -1
  257. package/dist/components/tags-input/types.d.ts +8 -23
  258. package/dist/components/tags-input/types.d.ts.map +1 -1
  259. package/dist/components/toast/Toast.d.ts.map +1 -1
  260. package/dist/components/toast/Toast.js +13 -62
  261. package/dist/components/toast/Toast.js.map +1 -1
  262. package/dist/components/toast/ToastElements.d.ts.map +1 -1
  263. package/dist/components/toast/ToastElements.js +20 -57
  264. package/dist/components/toast/ToastElements.js.map +1 -1
  265. package/dist/components/toast/types.d.ts +9 -36
  266. package/dist/components/toast/types.d.ts.map +1 -1
  267. package/dist/components/toggle/Toggle.d.ts +1 -1
  268. package/dist/components/toggle/Toggle.d.ts.map +1 -1
  269. package/dist/components/toggle/Toggle.js +36 -61
  270. package/dist/components/toggle/Toggle.js.map +1 -1
  271. package/dist/components/toggle/types.d.ts +5 -24
  272. package/dist/components/toggle/types.d.ts.map +1 -1
  273. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  274. package/dist/components/tooltip/Tooltip.js +4 -4
  275. package/dist/components/tooltip/Tooltip.js.map +1 -1
  276. package/dist/components/virtual-scroll/VirtualScroll.d.ts.map +1 -1
  277. package/dist/components/virtual-scroll/VirtualScroll.js +65 -43
  278. package/dist/components/virtual-scroll/VirtualScroll.js.map +1 -1
  279. package/dist/components/virtual-scroll/VirtualScrollRowShell.js +2 -2
  280. package/dist/components/virtual-scroll/VirtualScrollRowShell.js.map +1 -1
  281. package/dist/components/virtual-scroll/types.d.ts +7 -20
  282. package/dist/components/virtual-scroll/types.d.ts.map +1 -1
  283. package/dist/components/virtual-scroll/types.js.map +1 -1
  284. package/dist/components/virtual-scroll/virtual-scroll-scroll-sync.d.ts +3 -0
  285. package/dist/components/virtual-scroll/virtual-scroll-scroll-sync.d.ts.map +1 -1
  286. package/dist/components/virtual-scroll/virtual-scroll-scroll-sync.js +11 -2
  287. package/dist/components/virtual-scroll/virtual-scroll-scroll-sync.js.map +1 -1
  288. package/dist/core/class-names.d.ts +3 -0
  289. package/dist/core/class-names.d.ts.map +1 -0
  290. package/dist/core/class-names.js +7 -0
  291. package/dist/core/class-names.js.map +1 -0
  292. package/dist/core/part-names.d.ts +8 -0
  293. package/dist/core/part-names.d.ts.map +1 -0
  294. package/dist/core/part-names.js +111 -0
  295. package/dist/core/part-names.js.map +1 -0
  296. package/dist/core/polymorphic.d.ts +10 -3
  297. package/dist/core/polymorphic.d.ts.map +1 -1
  298. package/dist/core/render-native-invoker.d.ts +1 -0
  299. package/dist/core/render-native-invoker.d.ts.map +1 -1
  300. package/dist/core/render-native-invoker.js +6 -6
  301. package/dist/core/render-native-invoker.js.map +1 -1
  302. package/dist/core/roving-focus.d.ts +2 -2
  303. package/dist/core/roving-focus.d.ts.map +1 -1
  304. package/dist/core/roving-focus.js +6 -7
  305. package/dist/core/roving-focus.js.map +1 -1
  306. package/dist/core/slot-props.d.ts +9 -7
  307. package/dist/core/slot-props.d.ts.map +1 -1
  308. package/dist/core/slot-props.js +4 -14
  309. package/dist/core/slot-props.js.map +1 -1
  310. package/dist/elements/choice/Choice.d.ts.map +1 -1
  311. package/dist/elements/choice/Choice.js +5 -42
  312. package/dist/elements/choice/Choice.js.map +1 -1
  313. package/dist/elements/choice/types.d.ts +4 -11
  314. package/dist/elements/choice/types.d.ts.map +1 -1
  315. package/dist/elements/details/Details.d.ts.map +1 -1
  316. package/dist/elements/details/Details.js +4 -5
  317. package/dist/elements/details/Details.js.map +1 -1
  318. package/dist/elements/details/types.d.ts +3 -3
  319. package/dist/elements/details/types.d.ts.map +1 -1
  320. package/dist/elements/dialog/Dialog.d.ts.map +1 -1
  321. package/dist/elements/dialog/Dialog.js +1 -1
  322. package/dist/elements/dialog/Dialog.js.map +1 -1
  323. package/dist/elements/invoker/Invoker.js +3 -3
  324. package/dist/elements/invoker/Invoker.js.map +1 -1
  325. package/dist/elements/popover/Popover.d.ts.map +1 -1
  326. package/dist/elements/popover/Popover.js +3 -3
  327. package/dist/elements/popover/Popover.js.map +1 -1
  328. package/dist/elements/popover/types.d.ts +6 -4
  329. package/dist/elements/popover/types.d.ts.map +1 -1
  330. package/dist/styles/index.css +1 -1
  331. package/dist/styles/tailwind.css +2 -2
  332. package/dist/styles/tokens.css +1 -1
  333. package/package.json +1 -1
  334. package/skills/uiify/references/elements/aspect-ratio.md +1 -1
  335. package/skills/uiify/references/elements/field.md +1 -1
  336. package/skills/uiify/references/elements/toggle.md +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/virtual-scroll/VirtualScroll.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FragmentInstance,\n type ReactElement,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useResizeObserver } from \"@gunkin/uiify/hooks\";\nimport { useMergedRefs } from \"../../hooks/use-merged-refs.js\";\nimport {\n mergeRepeatedSlotProps,\n omitProps,\n resolveRepeatedSlotProps,\n} from \"../../core/slot-props.js\";\nimport { resolveVirtualScrollAnchorAdjustment } from \"./virtual-scroll-anchor.js\";\nimport { readScrollOffset, writeScrollOffset } from \"./virtual-scroll-axis.js\";\nimport {\n createVirtualScrollIosScroll,\n detectTouchScrollEnvironment,\n} from \"./virtual-scroll-ios.js\";\nimport {\n computeScrollAdjustmentForRowResize,\n createVirtualScrollMeasurementStore,\n} from \"./virtual-scroll-measurements.js\";\nimport {\n computeDynamicVirtualScrollRange,\n computeVirtualScrollRange,\n rangesEqual,\n toVirtualScrollRangeChange,\n} from \"./virtual-scroll-range.js\";\nimport {\n computeActiveVirtualScrollSlotCount,\n computeVirtualScrollSlotCount,\n VirtualScrollRowShell,\n} from \"./VirtualScrollRowShell.js\";\nimport {\n clampScrollOffset,\n computeScrollOffsetForIndex,\n normalizeScrollBehaviorOptions,\n normalizeScrollToIndexOptions,\n resolveScrollBehavior,\n} from \"./virtual-scroll-scroll.js\";\nimport {\n createVirtualScrollScrollState,\n supportsScrollEndEvent,\n} from \"./virtual-scroll-scroll-state.js\";\nimport { applyVirtualScrollRangeToDom } from \"./virtual-scroll-scroll-sync.js\";\nimport type {\n VirtualScrollHandle,\n VirtualScrollItem,\n VirtualScrollOwnProps,\n VirtualScrollRowSlot,\n VirtualScrollScrollBehaviorOptions,\n VirtualScrollScrollToIndexOptions,\n} from \"./types.js\";\nimport { VirtualScrollRowItem } from \"./VirtualScrollRowItem.js\";\nimport {\n VIRTUAL_SCROLL_OVERSCAN,\n VIRTUAL_SCROLL_ROW_HEIGHT,\n VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n} from \"./types.js\";\n\nfunction buildRowSlots<T extends VirtualScrollItem>(\n items: readonly T[],\n rangeStart: number,\n slotCount: number,\n): readonly VirtualScrollRowSlot<T>[] {\n const activeSlotCount = computeActiveVirtualScrollSlotCount(items.length, rangeStart, slotCount);\n return Array.from({ length: activeSlotCount }, (_, slotIndex) => {\n const index = rangeStart + slotIndex;\n return {\n index,\n item: items[index] ?? null,\n slotIndex,\n };\n });\n}\n\nexport function VirtualScroll<T extends VirtualScrollItem>(\n props: VirtualScrollOwnProps<T>,\n): ReactElement {\n const {\n items,\n ref: consumerRef,\n height: suppliedHeight,\n style: consumerStyle,\n rowHeight = VIRTUAL_SCROLL_ROW_HEIGHT,\n orientation = \"vertical\",\n overscan = VIRTUAL_SCROLL_OVERSCAN,\n className,\n testId,\n renderRow,\n scrollRef,\n estimateRowHeight,\n onRangeChange,\n role = \"list\",\n anchor = \"start\",\n followAppend = false,\n onScrollStateChange,\n isScrollingResetDelay = VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n slotProps,\n ...consumerProps\n } = props;\n\n const height = suppliedHeight ?? 600;\n const dynamicLayout = estimateRowHeight !== undefined;\n const horizontal = orientation === \"horizontal\";\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useMergedRefs(ref, consumerRef);\n const scrollOffsetRef = useRef(0);\n const programmaticScrollRef = useRef(false);\n const itemsRef = useRef(items);\n itemsRef.current = items;\n const lastRangeChangeRef = useRef<string>(\"\");\n const measuredHeightsRef = useRef(new Map<string, number>());\n const anchorSnapshotRef = useRef({\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: 0,\n scrollTop: 0,\n });\n\n const [rangeVersion, setRangeVersion] = useState(0);\n const [measurementVersion, setMeasurementVersion] = useState(0);\n\n const measuredSize = useResizeObserver(ref);\n const viewportSize = (horizontal ? measuredSize?.width : measuredSize?.height) ?? height;\n\n const measurementStoreRef = useRef(\n createVirtualScrollMeasurementStore({\n itemCount: items.length,\n defaultRowHeight: rowHeight,\n ...(estimateRowHeight ? { estimateRowHeight } : {}),\n measuredHeights: measuredHeightsRef.current,\n itemIdAtIndex: (index) => itemsRef.current[index]?.id,\n }),\n );\n\n measurementStoreRef.current.syncItemCount(items.length);\n\n const scrollOptionsRef = useRef({\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n });\n scrollOptionsRef.current = {\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n };\n\n const onRangeChangeRef = useRef(onRangeChange);\n onRangeChangeRef.current = onRangeChange;\n\n const onScrollStateChangeRef = useRef(onScrollStateChange);\n onScrollStateChangeRef.current = onScrollStateChange;\n\n const computeRange = (): ReturnType<typeof computeVirtualScrollRange> => {\n const { dynamicLayout, itemCount, overscan, rowHeight, viewportSize } =\n scrollOptionsRef.current;\n const scrollTop = scrollOffsetRef.current;\n\n if (dynamicLayout) {\n const store = measurementStoreRef.current;\n return computeDynamicVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n overscan,\n findStartIndex: store.findStartIndex,\n findEndIndex: store.findEndIndex,\n getRowOffset: store.getRowOffset,\n });\n }\n\n return computeVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n rowHeight,\n overscan,\n });\n };\n\n const emitRangeChange = (range: ReturnType<typeof computeVirtualScrollRange>): void => {\n const callback = onRangeChangeRef.current;\n if (!callback) return;\n const payload = toVirtualScrollRangeChange(range);\n const signature = `${payload.overscanStart}:${payload.overscanEnd}`;\n if (signature === lastRangeChangeRef.current) return;\n lastRangeChangeRef.current = signature;\n callback(payload);\n };\n\n const syncRangeFromScrollRef = useRef((_offset?: number) => {});\n\n syncRangeFromScrollRef.current = (offset?: number) => {\n const element = ref.current;\n if (!element) return;\n\n const scrollOffset = offset ?? readScrollOffset(element, scrollOptionsRef.current.orientation);\n const previousRange = computeRange();\n scrollOffsetRef.current = scrollOffset;\n\n const nextRange = computeRange();\n if (rangesEqual(previousRange, nextRange)) return;\n\n emitRangeChange(nextRange);\n\n const { dynamicLayout, itemCount, viewportSize, rowHeight, overscan } =\n scrollOptionsRef.current;\n const slotCount = computeActiveVirtualScrollSlotCount(\n itemCount,\n nextRange.start,\n Math.max(\n nextRange.end - nextRange.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n ),\n );\n const store = measurementStoreRef.current;\n\n // Write range CSS vars on the scroll handler so rows move in the same frame as the scroll offset.\n applyVirtualScrollRangeToDom(element, nextRange, {\n dynamicLayout,\n slotCount,\n getRowOffset: store.getRowOffset.bind(store),\n });\n\n // Commit the visible slice synchronously so content matches scroll position on large jumps.\n flushSync(() => {\n setRangeVersion((version) => version + 1);\n });\n };\n\n const iosControllerRef = useRef(\n createVirtualScrollIosScroll({\n enabled: detectTouchScrollEnvironment(),\n resetDelay: isScrollingResetDelay,\n }),\n );\n\n const applyScrollDeltaRef = useRef((_delta: number) => {});\n\n applyScrollDeltaRef.current = (delta: number) => {\n const element = ref.current;\n if (!element || delta === 0) return;\n // Preserve the viewport while rows resize.\n const { orientation } = scrollOptionsRef.current;\n const next = scrollOffsetRef.current + delta;\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, next, \"auto\");\n syncRangeFromScrollRef.current(next);\n };\n\n const applyScrollOffset = (\n offset: number,\n behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"],\n ): void => {\n const element = ref.current;\n if (!element) return;\n\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const clamped = clampScrollOffset(offset, totalSize, viewportSize);\n const current = scrollOffsetRef.current;\n programmaticScrollRef.current = behavior === \"instant\";\n writeScrollOffset(element, orientation, clamped, resolveScrollBehavior(behavior));\n syncRangeFromScrollRef.current(behavior === \"instant\" ? clamped : current);\n };\n\n const applyScrollOffsetRef = useRef(\n (_offset: number, _behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"]) => {},\n );\n\n applyScrollOffsetRef.current = applyScrollOffset;\n\n useImperativeHandle(\n scrollRef,\n (): VirtualScrollHandle => ({\n get element() {\n return ref.current;\n },\n scrollToIndex(index: number, options?: VirtualScrollScrollToIndexOptions): void {\n const normalized = normalizeScrollToIndexOptions(options);\n const store = measurementStoreRef.current;\n const metrics = {\n getRowOffset: store.getRowOffset.bind(store),\n getRowHeight: store.getRowHeight.bind(store),\n getTotalSize: store.getTotalSize.bind(store),\n };\n const offset = computeScrollOffsetForIndex(\n index,\n normalized.align,\n metrics,\n scrollOptionsRef.current.viewportSize,\n scrollOffsetRef.current,\n );\n applyScrollOffsetRef.current(offset, normalized.behavior);\n },\n scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void {\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void {\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout\n ? store.getTotalSize()\n : scrollOptionsRef.current.itemCount * scrollOptionsRef.current.rowHeight;\n const offset = Math.max(0, totalSize - scrollOptionsRef.current.viewportSize);\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n }),\n [dynamicLayout],\n );\n\n const range = useMemo(() => {\n void rangeVersion;\n void measurementVersion;\n return computeRange();\n }, [\n rangeVersion,\n measurementVersion,\n dynamicLayout,\n items.length,\n overscan,\n rowHeight,\n viewportSize,\n ]);\n\n const totalSize = useMemo(() => {\n void measurementVersion;\n if (dynamicLayout) return measurementStoreRef.current.getTotalSize();\n return items.length * rowHeight;\n }, [dynamicLayout, items.length, measurementVersion, rowHeight]);\n\n const slotCount = useMemo(() => {\n if (items.length === 0) return 0;\n return Math.max(\n range.end - range.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n );\n }, [items.length, overscan, range.end, range.start, rowHeight, viewportSize]);\n\n const rowSlots = useMemo(\n () => buildRowSlots(items, range.start, slotCount),\n [items, range.start, slotCount],\n );\n\n const handleRowMeasureRef = useRef((index: number, itemId: string, height: number) => {\n const store = measurementStoreRef.current;\n const previousHeight = store.getRowHeight(index);\n const rowOffset = store.getRowOffset(index);\n if (!store.setMeasuredHeight(itemId, index, height)) return;\n\n const adjustment = computeScrollAdjustmentForRowResize({\n scrollTop: scrollOffsetRef.current,\n rowOffset,\n previousHeight,\n nextHeight: height,\n });\n\n if (adjustment > 0) {\n const ios = iosControllerRef.current;\n if (ios.isTouchScrolling()) {\n ios.queueAdjustment(adjustment);\n } else {\n applyScrollDeltaRef.current(adjustment);\n }\n }\n\n setMeasurementVersion((version) => version + 1);\n });\n\n const rowsFragmentRef = useRef<FragmentInstance>(null);\n\n // One ResizeObserver for the whole pooled row set. React keeps the\n // subscription in sync as slots mount and unmount — pinned by\n // core/fragment-instance.test.tsx. Fixed layout never measures rows, so no\n // observer is created there at all.\n useEffect(() => {\n if (!dynamicLayout) return;\n const fragment = rowsFragmentRef.current;\n if (!fragment || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const target = entry.target;\n if (!(target instanceof HTMLElement)) continue;\n const raw = target.dataset[\"uiifyRowIndex\"];\n if (raw === undefined) continue;\n const index = Number(raw);\n if (!Number.isInteger(index)) continue;\n const itemId = itemsRef.current[index]?.id;\n if (itemId === undefined) continue;\n const size = horizontal ? entry.contentRect.width : entry.contentRect.height;\n handleRowMeasureRef.current(index, itemId, size);\n }\n });\n\n fragment.observeUsing(observer);\n return () => fragment.unobserveUsing(observer);\n }, [dynamicLayout, horizontal]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const scrollState = createVirtualScrollScrollState({\n resetDelay: isScrollingResetDelay,\n supportsScrollEnd: supportsScrollEndEvent(),\n onChange: (isScrolling) => {\n onScrollStateChangeRef.current?.({ isScrolling });\n if (!isScrolling) {\n iosControllerRef.current.flushAdjustments(applyScrollDeltaRef.current);\n }\n },\n });\n\n let onScroll: (() => void) | null = null;\n let onScrollEnd: (() => void) | null = null;\n const ios = iosControllerRef.current;\n const onTouchStart = (): void => ios.onTouchStart();\n const onTouchEnd = (): void => ios.onTouchEnd();\n let verifyFrame = 0;\n let verifyTimer = 0;\n const syncNativeScroll = (): void => {\n if (!programmaticScrollRef.current) {\n syncRangeFromScrollRef.current();\n return;\n }\n // The imperative path already rendered its range. Verify the browser's\n // actual offset after layout, including coalesced external scroll writes.\n if (verifyFrame !== 0) return;\n verifyFrame = requestAnimationFrame(() => {\n verifyTimer = window.setTimeout(() => {\n verifyFrame = 0;\n verifyTimer = 0;\n programmaticScrollRef.current = false;\n syncRangeFromScrollRef.current();\n }, 0);\n });\n };\n\n onScroll = () => {\n syncNativeScroll();\n scrollState.notifyScroll();\n };\n element.addEventListener(\"scroll\", onScroll, { passive: true });\n if (supportsScrollEndEvent()) {\n onScrollEnd = () => {\n syncNativeScroll();\n scrollState.notifyScrollEnd();\n };\n element.addEventListener(\"scrollend\", onScrollEnd, { passive: true });\n }\n element.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n element.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n\n return () => {\n if (verifyFrame !== 0) cancelAnimationFrame(verifyFrame);\n if (verifyTimer !== 0) window.clearTimeout(verifyTimer);\n if (onScroll) element.removeEventListener(\"scroll\", onScroll);\n if (onScrollEnd) element.removeEventListener(\"scrollend\", onScrollEnd);\n element.removeEventListener(\"touchstart\", onTouchStart);\n element.removeEventListener(\"touchend\", onTouchEnd);\n scrollState.dispose();\n };\n }, [isScrollingResetDelay]);\n\n useEffect(() => {\n const element = ref.current;\n const store = measurementStoreRef.current;\n const nextTotalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const previous = anchorSnapshotRef.current;\n const scrollOffset = element ? readScrollOffset(element, orientation) : scrollOffsetRef.current;\n const nextSnapshot = {\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: nextTotalSize,\n scrollTop: scrollOffset,\n };\n\n const adjustment = resolveVirtualScrollAnchorAdjustment({\n anchor,\n followAppend,\n viewportHeight: viewportSize,\n previous,\n next: nextSnapshot,\n });\n\n if (adjustment && element) {\n // Retain the anchored viewport.\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, scrollOffset + adjustment.delta, adjustment.behavior);\n syncRangeFromScrollRef.current(\n adjustment.behavior === \"smooth\" ? scrollOffset : scrollOffset + adjustment.delta,\n );\n }\n\n anchorSnapshotRef.current = nextSnapshot;\n }, [anchor, followAppend, items, dynamicLayout, orientation, rowHeight, viewportSize]);\n\n useEffect(() => {\n emitRangeChange(range);\n }, [range]);\n\n const scrollportStyle = {\n ...(suppliedHeight !== undefined || (!consumerStyle?.blockSize && !consumerStyle?.height)\n ? { blockSize: height }\n : {}),\n ...consumerStyle,\n overflowX: horizontal ? \"auto\" : undefined,\n overflowY: horizontal ? \"hidden\" : \"auto\",\n \"--uiify-virtual-scroll-count\": items.length,\n \"--uiify-virtual-scroll-row-height\": `${rowHeight}px`,\n ...(dynamicLayout ? { \"--uiify-virtual-scroll-total-size\": `${totalSize}px` } : {}),\n } as CSSProperties;\n\n const spacerStyle = dynamicLayout\n ? undefined\n : ({\n \"--uiify-range-start\": range.start,\n } as CSSProperties);\n\n return (\n <div\n {...consumerProps}\n ref={rootRef}\n data-testid={testId ?? consumerProps[\"data-testid\" as keyof typeof consumerProps]}\n data-uiify-virtual-scroll=\"\"\n data-dynamic-layout={dynamicLayout ? \"\" : undefined}\n data-orientation={orientation}\n role={role}\n className={className}\n style={scrollportStyle}\n >\n <div\n {...omitProps(slotProps?.spacer, [\"children\", \"dangerouslySetInnerHTML\", \"data-part\"])}\n data-part=\"spacer\"\n style={{ ...slotProps?.spacer?.style, ...spacerStyle }}\n >\n {rowSlots.map((slot) => {\n const store = measurementStoreRef.current;\n const rowOffset = dynamicLayout ? store.getRowOffset(slot.index) : undefined;\n const measuredRowHeight = dynamicLayout ? store.getRowHeight(slot.index) : undefined;\n\n return (\n <VirtualScrollRowShell\n {...(() => {\n if (!slot.item) return {};\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, slot.item.id);\n return omitProps(mergeRepeatedSlotProps(commonProps, byItemIndex?.[slot.index]), [\n \"children\",\n \"dangerouslySetInnerHTML\",\n \"aria-posinset\",\n \"aria-setsize\",\n \"data-dynamic-row\",\n \"data-part\",\n \"data-row-index\",\n \"role\",\n ]);\n })()}\n key={`slot-${slot.slotIndex}`}\n slotIndex={slot.slotIndex}\n index={slot.index}\n itemCount={items.length}\n listRole={role}\n dynamicLayout={dynamicLayout}\n {...(rowOffset !== undefined ? { rowOffset } : {})}\n {...(measuredRowHeight !== undefined ? { rowHeight: measuredRowHeight } : {})}\n >\n {slot.item ? (\n <VirtualScrollRowItem item={slot.item} index={slot.index} renderRow={renderRow} />\n ) : null}\n </VirtualScrollRowShell>\n );\n })}\n </div>\n </div>\n );\n}\nVirtualScroll.displayName = \"VirtualScroll\";\n"],"mappings":"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","names":["dynamicLayout","overscan","rowHeight","viewportSize","range","slotCount","orientation","totalSize","height"]}
1
+ {"version":3,"sources":["../../../src/components/virtual-scroll/VirtualScroll.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FragmentInstance,\n type ReactElement,\n} from \"react\";\nimport { composeEventHandlers } from \"@gunkin/uiify/core/compose-event-handlers\";\nimport { flushSync } from \"react-dom\";\nimport { useResizeObserver } from \"@gunkin/uiify/hooks\";\nimport { useMergedRefs } from \"../../hooks/use-merged-refs.js\";\nimport { mergeRepeatedSlotProps, resolveRepeatedSlotProps } from \"../../core/slot-props.js\";\nimport { resolveVirtualScrollAnchorAdjustment } from \"./virtual-scroll-anchor.js\";\nimport { readScrollOffset, writeScrollOffset } from \"./virtual-scroll-axis.js\";\nimport {\n createVirtualScrollIosScroll,\n detectTouchScrollEnvironment,\n} from \"./virtual-scroll-ios.js\";\nimport {\n computeScrollAdjustmentForRowResize,\n createVirtualScrollMeasurementStore,\n} from \"./virtual-scroll-measurements.js\";\nimport {\n computeDynamicVirtualScrollRange,\n computeVirtualScrollRange,\n rangesEqual,\n toVirtualScrollRangeChange,\n} from \"./virtual-scroll-range.js\";\nimport {\n computeActiveVirtualScrollSlotCount,\n computeVirtualScrollSlotCount,\n VirtualScrollRowShell,\n} from \"./VirtualScrollRowShell.js\";\nimport {\n clampScrollOffset,\n computeScrollOffsetForIndex,\n normalizeScrollBehaviorOptions,\n normalizeScrollToIndexOptions,\n resolveScrollBehavior,\n} from \"./virtual-scroll-scroll.js\";\nimport {\n createVirtualScrollScrollState,\n supportsScrollEndEvent,\n} from \"./virtual-scroll-scroll-state.js\";\nimport { applyVirtualScrollRangeToDom } from \"./virtual-scroll-scroll-sync.js\";\nimport type {\n VirtualScrollHandle,\n VirtualScrollItem,\n VirtualScrollOwnProps,\n VirtualScrollRowSlot,\n VirtualScrollScrollBehaviorOptions,\n VirtualScrollScrollToIndexOptions,\n} from \"./types.js\";\nimport { VirtualScrollRowItem } from \"./VirtualScrollRowItem.js\";\nimport {\n VIRTUAL_SCROLL_OVERSCAN,\n VIRTUAL_SCROLL_ROW_HEIGHT,\n VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n} from \"./types.js\";\n\nfunction buildRowSlots<T extends VirtualScrollItem>(\n items: readonly T[],\n rangeStart: number,\n slotCount: number,\n): readonly VirtualScrollRowSlot<T>[] {\n const activeSlotCount = computeActiveVirtualScrollSlotCount(items.length, rangeStart, slotCount);\n return Array.from({ length: activeSlotCount }, (_, slotIndex) => {\n const index = rangeStart + slotIndex;\n return {\n index,\n item: items[index] ?? null,\n slotIndex,\n };\n });\n}\n\nexport function VirtualScroll<T extends VirtualScrollItem>(\n props: VirtualScrollOwnProps<T>,\n): ReactElement {\n const {\n items,\n ref: consumerRef,\n height: suppliedHeight,\n style: consumerStyle,\n rowHeight = VIRTUAL_SCROLL_ROW_HEIGHT,\n orientation = \"vertical\",\n overscan = VIRTUAL_SCROLL_OVERSCAN,\n className,\n testId,\n renderRow,\n scrollRef,\n estimateRowHeight,\n onRangeChange,\n anchor = \"start\",\n followAppend = false,\n onScrollStateChange,\n isScrollingResetDelay = VIRTUAL_SCROLL_SCROLL_RESET_DELAY,\n slotProps,\n ...consumerProps\n } = props;\n\n const listRole = consumerProps.role === \"grid\" ? \"grid\" : \"list\";\n const height = suppliedHeight ?? 600;\n const dynamicLayout = estimateRowHeight !== undefined;\n const horizontal = orientation === \"horizontal\";\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useMergedRefs(ref, consumerRef);\n const scrollOffsetRef = useRef(0);\n const programmaticScrollRef = useRef(false);\n const eventHandlersRef = useRef({\n onScroll: () => {},\n onScrollEnd: () => {},\n onTouchStart: () => {},\n onTouchEnd: () => {},\n });\n const itemsRef = useRef(items);\n itemsRef.current = items;\n const lastRangeChangeRef = useRef<string>(\"\");\n const measuredHeightsRef = useRef(new Map<string, number>());\n const anchorSnapshotRef = useRef({\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: 0,\n scrollTop: 0,\n });\n\n const [rangeVersion, setRangeVersion] = useState(0);\n const [measurementVersion, setMeasurementVersion] = useState(0);\n\n const measuredSize = useResizeObserver(ref);\n const viewportSize = (horizontal ? measuredSize?.width : measuredSize?.height) ?? height;\n\n const measurementStoreRef = useRef(\n createVirtualScrollMeasurementStore({\n itemCount: items.length,\n defaultRowHeight: rowHeight,\n ...(estimateRowHeight ? { estimateRowHeight } : {}),\n measuredHeights: measuredHeightsRef.current,\n itemIdAtIndex: (index) => itemsRef.current[index]?.id,\n }),\n );\n\n measurementStoreRef.current.syncItemCount(items.length);\n\n const scrollOptionsRef = useRef({\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n });\n scrollOptionsRef.current = {\n dynamicLayout,\n itemCount: items.length,\n orientation,\n overscan,\n rowHeight,\n viewportSize,\n };\n\n const onRangeChangeRef = useRef(onRangeChange);\n onRangeChangeRef.current = onRangeChange;\n\n const onScrollStateChangeRef = useRef(onScrollStateChange);\n onScrollStateChangeRef.current = onScrollStateChange;\n\n const computeRange = (): ReturnType<typeof computeVirtualScrollRange> => {\n const { dynamicLayout, itemCount, overscan, rowHeight, viewportSize } =\n scrollOptionsRef.current;\n const scrollTop = scrollOffsetRef.current;\n\n if (dynamicLayout) {\n const store = measurementStoreRef.current;\n return computeDynamicVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n overscan,\n findStartIndex: store.findStartIndex,\n findEndIndex: store.findEndIndex,\n getRowOffset: store.getRowOffset,\n });\n }\n\n return computeVirtualScrollRange({\n scrollTop,\n viewportHeight: viewportSize,\n itemCount,\n rowHeight,\n overscan,\n });\n };\n\n const emitRangeChange = (range: ReturnType<typeof computeVirtualScrollRange>): void => {\n const callback = onRangeChangeRef.current;\n if (!callback) return;\n const payload = toVirtualScrollRangeChange(range);\n const signature = `${payload.overscanStart}:${payload.overscanEnd}`;\n if (signature === lastRangeChangeRef.current) return;\n lastRangeChangeRef.current = signature;\n callback(payload);\n };\n\n const syncRangeFromScrollRef = useRef((_offset?: number) => {});\n\n syncRangeFromScrollRef.current = (offset?: number) => {\n const element = ref.current;\n if (!element) return;\n\n const scrollOffset = offset ?? readScrollOffset(element, scrollOptionsRef.current.orientation);\n const previousRange = computeRange();\n scrollOffsetRef.current = scrollOffset;\n\n const nextRange = computeRange();\n if (rangesEqual(previousRange, nextRange)) return;\n\n emitRangeChange(nextRange);\n\n const { dynamicLayout, itemCount, viewportSize, rowHeight, overscan } =\n scrollOptionsRef.current;\n const slotCount = computeActiveVirtualScrollSlotCount(\n itemCount,\n nextRange.start,\n Math.max(\n nextRange.end - nextRange.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n ),\n );\n const store = measurementStoreRef.current;\n\n // Write range CSS vars on the scroll handler so rows move in the same frame as the scroll offset.\n applyVirtualScrollRangeToDom(element, nextRange, {\n dynamicLayout,\n slotCount,\n getRowOffset: store.getRowOffset.bind(store),\n spacerStyle: slotProps?.spacer?.style,\n getRowStyle: (index) => {\n const item = itemsRef.current[index];\n if (!item) return undefined;\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, item.id);\n return mergeRepeatedSlotProps(commonProps, byItemIndex?.[index]).style;\n },\n });\n\n // Commit the visible slice synchronously so content matches scroll position on large jumps.\n flushSync(() => {\n setRangeVersion((version) => version + 1);\n });\n };\n\n const iosControllerRef = useRef(\n createVirtualScrollIosScroll({\n enabled: detectTouchScrollEnvironment(),\n resetDelay: isScrollingResetDelay,\n }),\n );\n\n const applyScrollDeltaRef = useRef((_delta: number) => {});\n\n applyScrollDeltaRef.current = (delta: number) => {\n const element = ref.current;\n if (!element || delta === 0) return;\n // Preserve the viewport while rows resize.\n const { orientation } = scrollOptionsRef.current;\n const next = scrollOffsetRef.current + delta;\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, next, \"auto\");\n syncRangeFromScrollRef.current(next);\n };\n\n const applyScrollOffset = (\n offset: number,\n behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"],\n ): void => {\n const element = ref.current;\n if (!element) return;\n\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const clamped = clampScrollOffset(offset, totalSize, viewportSize);\n const current = scrollOffsetRef.current;\n programmaticScrollRef.current = behavior === \"instant\";\n writeScrollOffset(element, orientation, clamped, resolveScrollBehavior(behavior));\n syncRangeFromScrollRef.current(behavior === \"instant\" ? clamped : current);\n };\n\n const applyScrollOffsetRef = useRef(\n (_offset: number, _behavior: VirtualScrollScrollBehaviorOptions[\"behavior\"]) => {},\n );\n\n applyScrollOffsetRef.current = applyScrollOffset;\n\n useImperativeHandle(\n scrollRef,\n (): VirtualScrollHandle => ({\n get element() {\n return ref.current;\n },\n scrollToIndex(index: number, options?: VirtualScrollScrollToIndexOptions): void {\n const normalized = normalizeScrollToIndexOptions(options);\n const store = measurementStoreRef.current;\n const metrics = {\n getRowOffset: store.getRowOffset.bind(store),\n getRowHeight: store.getRowHeight.bind(store),\n getTotalSize: store.getTotalSize.bind(store),\n };\n const offset = computeScrollOffsetForIndex(\n index,\n normalized.align,\n metrics,\n scrollOptionsRef.current.viewportSize,\n scrollOffsetRef.current,\n );\n applyScrollOffsetRef.current(offset, normalized.behavior);\n },\n scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void {\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void {\n const store = measurementStoreRef.current;\n const totalSize = dynamicLayout\n ? store.getTotalSize()\n : scrollOptionsRef.current.itemCount * scrollOptionsRef.current.rowHeight;\n const offset = Math.max(0, totalSize - scrollOptionsRef.current.viewportSize);\n applyScrollOffsetRef.current(offset, normalizeScrollBehaviorOptions(options));\n },\n }),\n [dynamicLayout],\n );\n\n const range = useMemo(() => {\n void rangeVersion;\n void measurementVersion;\n return computeRange();\n }, [\n rangeVersion,\n measurementVersion,\n dynamicLayout,\n items.length,\n overscan,\n rowHeight,\n viewportSize,\n ]);\n\n const totalSize = useMemo(() => {\n void measurementVersion;\n if (dynamicLayout) return measurementStoreRef.current.getTotalSize();\n return items.length * rowHeight;\n }, [dynamicLayout, items.length, measurementVersion, rowHeight]);\n\n const slotCount = useMemo(() => {\n if (items.length === 0) return 0;\n return Math.max(\n range.end - range.start,\n computeVirtualScrollSlotCount(viewportSize, rowHeight, overscan),\n );\n }, [items.length, overscan, range.end, range.start, rowHeight, viewportSize]);\n\n const rowSlots = useMemo(\n () => buildRowSlots(items, range.start, slotCount),\n [items, range.start, slotCount],\n );\n\n const handleRowMeasureRef = useRef((index: number, itemId: string, height: number) => {\n const store = measurementStoreRef.current;\n const previousHeight = store.getRowHeight(index);\n const rowOffset = store.getRowOffset(index);\n if (!store.setMeasuredHeight(itemId, index, height)) return;\n\n const adjustment = computeScrollAdjustmentForRowResize({\n scrollTop: scrollOffsetRef.current,\n rowOffset,\n previousHeight,\n nextHeight: height,\n });\n\n if (adjustment > 0) {\n const ios = iosControllerRef.current;\n if (ios.isTouchScrolling()) {\n ios.queueAdjustment(adjustment);\n } else {\n applyScrollDeltaRef.current(adjustment);\n }\n }\n\n setMeasurementVersion((version) => version + 1);\n });\n\n const rowsFragmentRef = useRef<FragmentInstance>(null);\n\n // One ResizeObserver for the whole pooled row set. React keeps the\n // subscription in sync as slots mount and unmount — pinned by\n // core/fragment-instance.test.tsx. Fixed layout never measures rows, so no\n // observer is created there at all.\n useEffect(() => {\n if (!dynamicLayout) return;\n const fragment = rowsFragmentRef.current;\n if (!fragment || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const target = entry.target;\n if (!(target instanceof HTMLElement)) continue;\n const raw = target.dataset[\"uiifyRowIndex\"];\n if (raw === undefined) continue;\n const index = Number(raw);\n if (!Number.isInteger(index)) continue;\n const itemId = itemsRef.current[index]?.id;\n if (itemId === undefined) continue;\n const size = horizontal ? entry.contentRect.width : entry.contentRect.height;\n handleRowMeasureRef.current(index, itemId, size);\n }\n });\n\n fragment.observeUsing(observer);\n return () => fragment.unobserveUsing(observer);\n }, [dynamicLayout, horizontal]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const scrollState = createVirtualScrollScrollState({\n resetDelay: isScrollingResetDelay,\n supportsScrollEnd: supportsScrollEndEvent(),\n onChange: (isScrolling) => {\n onScrollStateChangeRef.current?.({ isScrolling });\n if (!isScrolling) {\n iosControllerRef.current.flushAdjustments(applyScrollDeltaRef.current);\n }\n },\n });\n\n const ios = iosControllerRef.current;\n const onTouchStart = (): void => ios.onTouchStart();\n const onTouchEnd = (): void => ios.onTouchEnd();\n let verifyFrame = 0;\n let verifyTimer = 0;\n const syncNativeScroll = (): void => {\n if (!programmaticScrollRef.current) {\n syncRangeFromScrollRef.current();\n return;\n }\n // The imperative path already rendered its range. Verify the browser's\n // actual offset after layout, including coalesced external scroll writes.\n if (verifyFrame !== 0) return;\n verifyFrame = requestAnimationFrame(() => {\n verifyTimer = window.setTimeout(() => {\n verifyFrame = 0;\n verifyTimer = 0;\n programmaticScrollRef.current = false;\n syncRangeFromScrollRef.current();\n }, 0);\n });\n };\n\n const onScroll = () => {\n syncNativeScroll();\n scrollState.notifyScroll();\n };\n const onScrollEnd = (): void => {\n if (!supportsScrollEndEvent()) return;\n syncNativeScroll();\n scrollState.notifyScrollEnd();\n };\n eventHandlersRef.current = { onScroll, onScrollEnd, onTouchStart, onTouchEnd };\n\n return () => {\n if (verifyFrame !== 0) cancelAnimationFrame(verifyFrame);\n if (verifyTimer !== 0) window.clearTimeout(verifyTimer);\n eventHandlersRef.current = {\n onScroll: () => {},\n onScrollEnd: () => {},\n onTouchStart: () => {},\n onTouchEnd: () => {},\n };\n scrollState.dispose();\n };\n }, [isScrollingResetDelay]);\n\n useEffect(() => {\n const element = ref.current;\n const store = measurementStoreRef.current;\n const nextTotalSize = dynamicLayout ? store.getTotalSize() : items.length * rowHeight;\n const previous = anchorSnapshotRef.current;\n const scrollOffset = element ? readScrollOffset(element, orientation) : scrollOffsetRef.current;\n const nextSnapshot = {\n firstItemId: items[0]?.id,\n itemCount: items.length,\n totalSize: nextTotalSize,\n scrollTop: scrollOffset,\n };\n\n const adjustment = resolveVirtualScrollAnchorAdjustment({\n anchor,\n followAppend,\n viewportHeight: viewportSize,\n previous,\n next: nextSnapshot,\n });\n\n if (adjustment && element) {\n // Retain the anchored viewport.\n programmaticScrollRef.current = true;\n writeScrollOffset(element, orientation, scrollOffset + adjustment.delta, adjustment.behavior);\n syncRangeFromScrollRef.current(\n adjustment.behavior === \"smooth\" ? scrollOffset : scrollOffset + adjustment.delta,\n );\n }\n\n anchorSnapshotRef.current = nextSnapshot;\n }, [anchor, followAppend, items, dynamicLayout, orientation, rowHeight, viewportSize]);\n\n useEffect(() => {\n emitRangeChange(range);\n }, [range]);\n\n const scrollportStyle = {\n ...(suppliedHeight !== undefined || (!consumerStyle?.blockSize && !consumerStyle?.height)\n ? { blockSize: height }\n : {}),\n overflowX: horizontal ? \"auto\" : undefined,\n overflowY: horizontal ? \"hidden\" : \"auto\",\n \"--uiify-virtual-scroll-count\": items.length,\n \"--uiify-virtual-scroll-row-height\": `${rowHeight}px`,\n ...(dynamicLayout ? { \"--uiify-virtual-scroll-total-size\": `${totalSize}px` } : {}),\n ...consumerStyle,\n } as CSSProperties;\n\n const spacerStyle = dynamicLayout\n ? undefined\n : ({\n \"--uiify-range-start\": range.start,\n } as CSSProperties);\n\n return (\n <div\n data-testid={testId}\n data-uiify-virtual-scroll=\"\"\n data-dynamic-layout={dynamicLayout ? \"\" : undefined}\n data-orientation={orientation}\n role={listRole}\n {...consumerProps}\n ref={rootRef}\n onScroll={composeEventHandlers(consumerProps.onScroll, () =>\n eventHandlersRef.current.onScroll(),\n )}\n onScrollEnd={composeEventHandlers(consumerProps.onScrollEnd, () =>\n eventHandlersRef.current.onScrollEnd(),\n )}\n onTouchStart={composeEventHandlers(consumerProps.onTouchStart, () =>\n eventHandlersRef.current.onTouchStart(),\n )}\n onTouchEnd={composeEventHandlers(consumerProps.onTouchEnd, () =>\n eventHandlersRef.current.onTouchEnd(),\n )}\n className={className}\n style={scrollportStyle}\n >\n <div\n data-part=\"spacer\"\n {...slotProps?.spacer}\n style={{ ...spacerStyle, ...slotProps?.spacer?.style }}\n >\n {rowSlots.map((slot) => {\n const store = measurementStoreRef.current;\n const rowOffset = dynamicLayout ? store.getRowOffset(slot.index) : undefined;\n const measuredRowHeight = dynamicLayout ? store.getRowHeight(slot.index) : undefined;\n\n return (\n <VirtualScrollRowShell\n {...(() => {\n if (!slot.item) return {};\n const { byItemIndex, ...byItemValueProps } = slotProps?.row ?? {};\n const commonProps = resolveRepeatedSlotProps(byItemValueProps, slot.item.id);\n return mergeRepeatedSlotProps(commonProps, byItemIndex?.[slot.index]);\n })()}\n key={`slot-${slot.slotIndex}`}\n slotIndex={slot.slotIndex}\n index={slot.index}\n itemCount={items.length}\n listRole={listRole}\n dynamicLayout={dynamicLayout}\n {...(rowOffset !== undefined ? { rowOffset } : {})}\n {...(measuredRowHeight !== undefined ? { rowHeight: measuredRowHeight } : {})}\n >\n {slot.item ? (\n <VirtualScrollRowItem item={slot.item} index={slot.index} renderRow={renderRow} />\n ) : null}\n </VirtualScrollRowShell>\n );\n })}\n </div>\n </div>\n );\n}\nVirtualScroll.displayName = \"VirtualScroll\";\n"],"mappings":"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","names":["dynamicLayout","overscan","rowHeight","viewportSize","range","slotCount","orientation","totalSize","height"]}
@@ -29,14 +29,14 @@ function VirtualScrollRowShell({
29
29
  return /* @__PURE__ */ jsx(
30
30
  "div",
31
31
  {
32
- ...consumerProps,
33
32
  "data-part": "row",
34
33
  "data-dynamic-row": dynamicLayout ? "" : void 0,
35
34
  "data-row-index": index,
36
35
  role: listRole === "list" ? "listitem" : "row",
37
36
  "aria-setsize": itemCount,
38
37
  "aria-posinset": index + 1,
39
- style: { ...consumerStyle, ...generatedStyle },
38
+ ...consumerProps,
39
+ style: { ...generatedStyle, ...consumerStyle },
40
40
  children
41
41
  }
42
42
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/virtual-scroll/VirtualScrollRowShell.tsx"],"sourcesContent":["\"use client\";\n\nimport type { CSSProperties, ReactElement } from \"react\";\nimport type { VirtualScrollRowShellProps } from \"./types.js\";\n\nexport function computeVirtualScrollSlotCount(\n viewportHeight: number,\n rowHeight: number,\n overscan: number,\n): number {\n if (rowHeight <= 0) return 0;\n const visible = Math.max(1, Math.ceil(viewportHeight / rowHeight));\n return visible + overscan * 2;\n}\n\n/** Clamp pooled slot count so indices never exceed the list tail. */\nexport function computeActiveVirtualScrollSlotCount(\n itemCount: number,\n rangeStart: number,\n slotCount: number,\n): number {\n if (itemCount <= 0 || slotCount <= 0) return 0;\n return Math.min(slotCount, Math.max(0, itemCount - rangeStart));\n}\n\n/**\n * Row shell — static `--uiify-slot-index` in fixed mode; per-row offset in dynamic mode.\n *\n * Stateless by design: measurement is owned by the single ResizeObserver that\n * VirtualScroll attaches to the row Fragment, so this component holds no hooks.\n * `data-row-index` is how that observer's callback maps an entry back to\n * a list index.\n */\nexport function VirtualScrollRowShell({\n slotIndex,\n index,\n itemCount,\n listRole,\n rowOffset,\n rowHeight,\n dynamicLayout,\n style: consumerStyle,\n children,\n ...consumerProps\n}: VirtualScrollRowShellProps): ReactElement {\n const generatedStyle = {\n \"--uiify-slot-index\": slotIndex,\n ...(dynamicLayout && rowOffset !== undefined ? { \"--uiify-row-offset\": `${rowOffset}px` } : {}),\n ...(dynamicLayout && rowHeight !== undefined ? { \"--uiify-row-height\": `${rowHeight}px` } : {}),\n } as CSSProperties;\n\n return (\n <div\n {...consumerProps}\n data-part=\"row\"\n data-dynamic-row={dynamicLayout ? \"\" : undefined}\n data-row-index={index}\n role={listRole === \"list\" ? \"listitem\" : \"row\"}\n aria-setsize={itemCount}\n aria-posinset={index + 1}\n style={{ ...consumerStyle, ...generatedStyle }}\n >\n {children}\n </div>\n );\n}\nVirtualScrollRowShell.displayName = \"VirtualScrollRowShell\";\n"],"mappings":";AAoDI;AA/CG,SAAS,8BACd,gBACA,WACA,UACQ;AACR,MAAI,aAAa,EAAG,QAAO;AAC3B,QAAM,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,iBAAiB,SAAS,CAAC;AACjE,SAAO,UAAU,WAAW;AAC9B;AAGO,SAAS,oCACd,WACA,YACA,WACQ;AACR,MAAI,aAAa,KAAK,aAAa,EAAG,QAAO;AAC7C,SAAO,KAAK,IAAI,WAAW,KAAK,IAAI,GAAG,YAAY,UAAU,CAAC;AAChE;AAUO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAA6C;AAC3C,QAAM,iBAAiB;AAAA,IACrB,sBAAsB;AAAA,IACtB,GAAI,iBAAiB,cAAc,SAAY,EAAE,sBAAsB,GAAG,SAAS,KAAK,IAAI,CAAC;AAAA,IAC7F,GAAI,iBAAiB,cAAc,SAAY,EAAE,sBAAsB,GAAG,SAAS,KAAK,IAAI,CAAC;AAAA,EAC/F;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,aAAU;AAAA,MACV,oBAAkB,gBAAgB,KAAK;AAAA,MACvC,kBAAgB;AAAA,MAChB,MAAM,aAAa,SAAS,aAAa;AAAA,MACzC,gBAAc;AAAA,MACd,iBAAe,QAAQ;AAAA,MACvB,OAAO,EAAE,GAAG,eAAe,GAAG,eAAe;AAAA,MAE5C;AAAA;AAAA,EACH;AAEJ;AACA,sBAAsB,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/virtual-scroll/VirtualScrollRowShell.tsx"],"sourcesContent":["\"use client\";\n\nimport type { CSSProperties, ReactElement } from \"react\";\nimport type { VirtualScrollRowShellProps } from \"./types.js\";\n\nexport function computeVirtualScrollSlotCount(\n viewportHeight: number,\n rowHeight: number,\n overscan: number,\n): number {\n if (rowHeight <= 0) return 0;\n const visible = Math.max(1, Math.ceil(viewportHeight / rowHeight));\n return visible + overscan * 2;\n}\n\n/** Clamp pooled slot count so indices never exceed the list tail. */\nexport function computeActiveVirtualScrollSlotCount(\n itemCount: number,\n rangeStart: number,\n slotCount: number,\n): number {\n if (itemCount <= 0 || slotCount <= 0) return 0;\n return Math.min(slotCount, Math.max(0, itemCount - rangeStart));\n}\n\n/**\n * Row shell — static `--uiify-slot-index` in fixed mode; per-row offset in dynamic mode.\n *\n * Stateless by design: measurement is owned by the single ResizeObserver that\n * VirtualScroll attaches to the row Fragment, so this component holds no hooks.\n * `data-row-index` is how that observer's callback maps an entry back to\n * a list index.\n */\nexport function VirtualScrollRowShell({\n slotIndex,\n index,\n itemCount,\n listRole,\n rowOffset,\n rowHeight,\n dynamicLayout,\n style: consumerStyle,\n children,\n ...consumerProps\n}: VirtualScrollRowShellProps): ReactElement {\n const generatedStyle = {\n \"--uiify-slot-index\": slotIndex,\n ...(dynamicLayout && rowOffset !== undefined ? { \"--uiify-row-offset\": `${rowOffset}px` } : {}),\n ...(dynamicLayout && rowHeight !== undefined ? { \"--uiify-row-height\": `${rowHeight}px` } : {}),\n } as CSSProperties;\n\n return (\n <div\n data-part=\"row\"\n data-dynamic-row={dynamicLayout ? \"\" : undefined}\n data-row-index={index}\n role={listRole === \"list\" ? \"listitem\" : \"row\"}\n aria-setsize={itemCount}\n aria-posinset={index + 1}\n {...consumerProps}\n style={{ ...generatedStyle, ...consumerStyle }}\n >\n {children}\n </div>\n );\n}\nVirtualScrollRowShell.displayName = \"VirtualScrollRowShell\";\n"],"mappings":";AAoDI;AA/CG,SAAS,8BACd,gBACA,WACA,UACQ;AACR,MAAI,aAAa,EAAG,QAAO;AAC3B,QAAM,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,iBAAiB,SAAS,CAAC;AACjE,SAAO,UAAU,WAAW;AAC9B;AAGO,SAAS,oCACd,WACA,YACA,WACQ;AACR,MAAI,aAAa,KAAK,aAAa,EAAG,QAAO;AAC7C,SAAO,KAAK,IAAI,WAAW,KAAK,IAAI,GAAG,YAAY,UAAU,CAAC;AAChE;AAUO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAA6C;AAC3C,QAAM,iBAAiB;AAAA,IACrB,sBAAsB;AAAA,IACtB,GAAI,iBAAiB,cAAc,SAAY,EAAE,sBAAsB,GAAG,SAAS,KAAK,IAAI,CAAC;AAAA,IAC7F,GAAI,iBAAiB,cAAc,SAAY,EAAE,sBAAsB,GAAG,SAAS,KAAK,IAAI,CAAC;AAAA,EAC/F;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,oBAAkB,gBAAgB,KAAK;AAAA,MACvC,kBAAgB;AAAA,MAChB,MAAM,aAAa,SAAS,aAAa;AAAA,MACzC,gBAAc;AAAA,MACd,iBAAe,QAAQ;AAAA,MACtB,GAAG;AAAA,MACJ,OAAO,EAAE,GAAG,gBAAgB,GAAG,cAAc;AAAA,MAE5C;AAAA;AAAA,EACH;AAEJ;AACA,sBAAsB,cAAc;","names":[]}
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithRef, ComponentPropsWithoutRef, ReactNode, Ref } from "react";
2
- import type { ConsumerDataAttributes, RepeatedSlotProps } from "../../core/slot-props.js";
1
+ import type { ComponentPropsWithoutRef, ReactNode, Ref } from "react";
2
+ import type { ConsumerDataAttributes, RepeatedSlotProps, SlotProps } from "../../core/slot-props.js";
3
3
  /** Fixed row height — default for scroll math when `estimateRowHeight` is omitted. */
4
4
  export declare const VIRTUAL_SCROLL_ROW_HEIGHT = 64;
5
5
  /** Overscan rows above and below the viewport to avoid flicker during fast scroll. */
@@ -11,21 +11,10 @@ export declare const VIRTUAL_SCROLL_ANCHOR_THRESHOLD = 1;
11
11
  export interface VirtualScrollItem {
12
12
  readonly id: string;
13
13
  }
14
- type VirtualScrollRowOwnedProps = {
15
- readonly "aria-posinset"?: never;
16
- readonly "aria-setsize"?: never;
17
- readonly "data-dynamic-row"?: never;
18
- readonly "data-part"?: never;
19
- readonly "data-row-index"?: never;
20
- readonly role?: never;
14
+ export type VirtualScrollRowSlotProps = RepeatedSlotProps<SlotProps<"div">> & {
15
+ readonly byItemIndex?: Readonly<Record<number, SlotProps<"div">>>;
21
16
  };
22
- type VirtualScrollRowNativeProps = Omit<ComponentPropsWithRef<"div">, "children" | "dangerouslySetInnerHTML">;
23
- export type VirtualScrollRowSlotProps = RepeatedSlotProps<VirtualScrollRowNativeProps, VirtualScrollRowOwnedProps> & {
24
- readonly byItemIndex?: Readonly<Record<number, VirtualScrollRowNativeProps & ConsumerDataAttributes & VirtualScrollRowOwnedProps>>;
25
- };
26
- export type VirtualScrollSpacerSlotProps = Omit<ComponentPropsWithRef<"div">, "children" | "dangerouslySetInnerHTML" | "data-part"> & {
27
- readonly "data-part"?: never;
28
- } & ConsumerDataAttributes;
17
+ export type VirtualScrollSpacerSlotProps = SlotProps<"div">;
29
18
  export interface VirtualScrollSlotProps {
30
19
  readonly row?: VirtualScrollRowSlotProps;
31
20
  readonly spacer?: VirtualScrollSpacerSlotProps;
@@ -61,7 +50,7 @@ export interface VirtualScrollHandle {
61
50
  scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void;
62
51
  scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void;
63
52
  }
64
- export interface VirtualScrollOwnProps<T extends VirtualScrollItem> extends Omit<ComponentPropsWithoutRef<"div">, "children" | "role"> {
53
+ export interface VirtualScrollOwnProps<T extends VirtualScrollItem> extends Omit<ComponentPropsWithoutRef<"div">, "children">, ConsumerDataAttributes {
65
54
  readonly ref?: Ref<HTMLDivElement>;
66
55
  readonly items: readonly T[];
67
56
  /** Scrollport height; also the viewport extent used before the first resize measurement. */
@@ -76,14 +65,13 @@ export interface VirtualScrollOwnProps<T extends VirtualScrollItem> extends Omit
76
65
  readonly scrollRef?: Ref<VirtualScrollHandle>;
77
66
  readonly estimateRowHeight?: (index: number) => number;
78
67
  readonly onRangeChange?: (range: VirtualScrollRangeChange) => void;
79
- readonly role?: VirtualScrollListRole;
80
68
  readonly anchor?: VirtualScrollAnchor;
81
69
  readonly followAppend?: boolean | "smooth";
82
70
  readonly onScrollStateChange?: (state: VirtualScrollScrollState) => void;
83
71
  readonly isScrollingResetDelay?: number;
84
72
  readonly slotProps?: VirtualScrollSlotProps;
85
73
  }
86
- export interface VirtualScrollRowShellProps extends Omit<ComponentPropsWithRef<"div">, "aria-posinset" | "aria-setsize" | "children" | "data-dynamic-row" | "data-part" | "data-row-index" | "dangerouslySetInnerHTML" | "role"> {
74
+ export interface VirtualScrollRowShellProps extends SlotProps<"div"> {
87
75
  readonly children: ReactNode;
88
76
  readonly dynamicLayout: boolean;
89
77
  readonly index: number;
@@ -98,5 +86,4 @@ export interface VirtualScrollRowSlot<T extends VirtualScrollItem> {
98
86
  readonly index: number;
99
87
  readonly item: T | null;
100
88
  }
101
- export {};
102
89
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-scroll/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE1F,sFAAsF;AACtF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,uFAAuF;AACvF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,8EAA8E;AAC9E,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,KAAK,2BAA2B,GAAG,IAAI,CACrC,qBAAqB,CAAC,KAAK,CAAC,EAC5B,UAAU,GAAG,yBAAyB,CACvC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,CACvD,2BAA2B,EAC3B,0BAA0B,CAC3B,GAAG;IACF,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAC7B,MAAM,CACJ,MAAM,EACN,2BAA2B,GAAG,sBAAsB,GAAG,0BAA0B,CAClF,CACF,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,qBAAqB,CAAC,KAAK,CAAC,EAC5B,UAAU,GAAG,yBAAyB,GAAG,WAAW,CACrD,GAAG;IACF,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;CAC9B,GAAG,sBAAsB,CAAC;AAE3B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;CAChD;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,KAAK,CAAC;AAElD,8FAA8F;AAC9F,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,YAAY,CAAC;AAEjE,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3E,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,2BAA2B,CAAC;CACjD;AAED,MAAM,WAAW,iCAAkC,SAAQ,kCAAkC;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iCAAiC,GAAG,IAAI,CAAC;IAChF,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kCAAkC,GAAG,IAAI,CAAC;IACnF,WAAW,CAAC,OAAO,CAAC,EAAE,kCAAkC,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,IAAI,CAC9E,wBAAwB,CAAC,KAAK,CAAC,EAC/B,UAAU,GAAG,MAAM,CACpB;IACC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,oGAAoG;IACpG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACzE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC;CAC7C;AAED,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CACtD,qBAAqB,CAAC,KAAK,CAAC,EAC1B,eAAe,GACf,cAAc,GACd,UAAU,GACV,kBAAkB,GAClB,WAAW,GACX,gBAAgB,GAChB,yBAAyB,GACzB,MAAM,CACT;IACC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,iBAAiB;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-scroll/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/virtual-scroll/types.ts"],"sourcesContent":["import type { ComponentPropsWithRef, ComponentPropsWithoutRef, ReactNode, Ref } from \"react\";\nimport type { ConsumerDataAttributes, RepeatedSlotProps } from \"../../core/slot-props.js\";\n\n/** Fixed row height — default for scroll math when `estimateRowHeight` is omitted. */\nexport const VIRTUAL_SCROLL_ROW_HEIGHT = 64;\n\n/** Overscan rows above and below the viewport to avoid flicker during fast scroll. */\nexport const VIRTUAL_SCROLL_OVERSCAN = 5;\n\n/** Default delay before treating scroll as settled when `scrollend` is unavailable. */\nexport const VIRTUAL_SCROLL_SCROLL_RESET_DELAY = 150;\n\n/** Distance from list bottom treated as \"pinned to end\" for anchor/follow. */\nexport const VIRTUAL_SCROLL_ANCHOR_THRESHOLD = 1;\n\nexport interface VirtualScrollItem {\n readonly id: string;\n}\n\ntype VirtualScrollRowOwnedProps = {\n readonly \"aria-posinset\"?: never;\n readonly \"aria-setsize\"?: never;\n readonly \"data-dynamic-row\"?: never;\n readonly \"data-part\"?: never;\n readonly \"data-row-index\"?: never;\n readonly role?: never;\n};\n\ntype VirtualScrollRowNativeProps = Omit<\n ComponentPropsWithRef<\"div\">,\n \"children\" | \"dangerouslySetInnerHTML\"\n>;\n\nexport type VirtualScrollRowSlotProps = RepeatedSlotProps<\n VirtualScrollRowNativeProps,\n VirtualScrollRowOwnedProps\n> & {\n readonly byItemIndex?: Readonly<\n Record<\n number,\n VirtualScrollRowNativeProps & ConsumerDataAttributes & VirtualScrollRowOwnedProps\n >\n >;\n};\n\nexport type VirtualScrollSpacerSlotProps = Omit<\n ComponentPropsWithRef<\"div\">,\n \"children\" | \"dangerouslySetInnerHTML\" | \"data-part\"\n> & {\n readonly \"data-part\"?: never;\n} & ConsumerDataAttributes;\n\nexport interface VirtualScrollSlotProps {\n readonly row?: VirtualScrollRowSlotProps;\n readonly spacer?: VirtualScrollSpacerSlotProps;\n}\n\nexport type VirtualScrollListRole = \"list\" | \"grid\";\n\nexport type VirtualScrollAnchor = \"start\" | \"end\";\n\n/** Scroll axis. Row size props (`rowHeight`, `estimateRowHeight`) measure along this axis. */\nexport type VirtualScrollOrientation = \"vertical\" | \"horizontal\";\n\nexport type VirtualScrollScrollAlign = \"start\" | \"center\" | \"end\" | \"auto\";\n\nexport type VirtualScrollScrollBehavior = \"auto\" | \"instant\" | \"smooth\";\n\nexport interface VirtualScrollScrollBehaviorOptions {\n readonly behavior?: VirtualScrollScrollBehavior;\n}\n\nexport interface VirtualScrollScrollToIndexOptions extends VirtualScrollScrollBehaviorOptions {\n readonly align?: VirtualScrollScrollAlign;\n}\n\nexport interface VirtualScrollRangeChange {\n /** First visible row index (no overscan). */\n readonly startIndex: number;\n /** Last visible row index, inclusive (no overscan). */\n readonly endIndex: number;\n /** First rendered row index including overscan. */\n readonly overscanStart: number;\n /** Last rendered row index, inclusive, including overscan. */\n readonly overscanEnd: number;\n}\n\nexport interface VirtualScrollScrollState {\n readonly isScrolling: boolean;\n}\n\nexport interface VirtualScrollHandle {\n readonly element: HTMLDivElement | null;\n scrollToIndex(index: number, options?: VirtualScrollScrollToIndexOptions): void;\n scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void;\n scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void;\n}\n\nexport interface VirtualScrollOwnProps<T extends VirtualScrollItem> extends Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"children\" | \"role\"\n> {\n readonly ref?: Ref<HTMLDivElement>;\n readonly items: readonly T[];\n /** Scrollport height; also the viewport extent used before the first resize measurement. */\n readonly height?: number;\n /** Fixed item size along the scroll axis — row height when vertical, item width when horizontal. */\n readonly rowHeight?: number;\n readonly orientation?: VirtualScrollOrientation;\n readonly overscan?: number;\n readonly className?: string | undefined;\n readonly testId?: string;\n readonly renderRow: (item: T, index: number) => ReactNode;\n readonly scrollRef?: Ref<VirtualScrollHandle>;\n readonly estimateRowHeight?: (index: number) => number;\n readonly onRangeChange?: (range: VirtualScrollRangeChange) => void;\n readonly role?: VirtualScrollListRole;\n readonly anchor?: VirtualScrollAnchor;\n readonly followAppend?: boolean | \"smooth\";\n readonly onScrollStateChange?: (state: VirtualScrollScrollState) => void;\n readonly isScrollingResetDelay?: number;\n readonly slotProps?: VirtualScrollSlotProps;\n}\n\nexport interface VirtualScrollRowShellProps extends Omit<\n ComponentPropsWithRef<\"div\">,\n | \"aria-posinset\"\n | \"aria-setsize\"\n | \"children\"\n | \"data-dynamic-row\"\n | \"data-part\"\n | \"data-row-index\"\n | \"dangerouslySetInnerHTML\"\n | \"role\"\n> {\n readonly children: ReactNode;\n readonly dynamicLayout: boolean;\n readonly index: number;\n readonly itemCount: number;\n readonly listRole: VirtualScrollListRole;\n readonly rowOffset?: number;\n readonly rowHeight?: number;\n readonly slotIndex: number;\n}\n\nexport interface VirtualScrollRowSlot<T extends VirtualScrollItem> {\n readonly slotIndex: number;\n readonly index: number;\n readonly item: T | null;\n}\n"],"mappings":"AAIO,MAAM,4BAA4B;AAGlC,MAAM,0BAA0B;AAGhC,MAAM,oCAAoC;AAG1C,MAAM,kCAAkC;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/virtual-scroll/types.ts"],"sourcesContent":["import type { ComponentPropsWithoutRef, ReactNode, Ref } from \"react\";\nimport type {\n ConsumerDataAttributes,\n RepeatedSlotProps,\n SlotProps,\n} from \"../../core/slot-props.js\";\n\n/** Fixed row height — default for scroll math when `estimateRowHeight` is omitted. */\nexport const VIRTUAL_SCROLL_ROW_HEIGHT = 64;\n\n/** Overscan rows above and below the viewport to avoid flicker during fast scroll. */\nexport const VIRTUAL_SCROLL_OVERSCAN = 5;\n\n/** Default delay before treating scroll as settled when `scrollend` is unavailable. */\nexport const VIRTUAL_SCROLL_SCROLL_RESET_DELAY = 150;\n\n/** Distance from list bottom treated as \"pinned to end\" for anchor/follow. */\nexport const VIRTUAL_SCROLL_ANCHOR_THRESHOLD = 1;\n\nexport interface VirtualScrollItem {\n readonly id: string;\n}\n\nexport type VirtualScrollRowSlotProps = RepeatedSlotProps<SlotProps<\"div\">> & {\n readonly byItemIndex?: Readonly<Record<number, SlotProps<\"div\">>>;\n};\n\nexport type VirtualScrollSpacerSlotProps = SlotProps<\"div\">;\n\nexport interface VirtualScrollSlotProps {\n readonly row?: VirtualScrollRowSlotProps;\n readonly spacer?: VirtualScrollSpacerSlotProps;\n}\n\nexport type VirtualScrollListRole = \"list\" | \"grid\";\n\nexport type VirtualScrollAnchor = \"start\" | \"end\";\n\n/** Scroll axis. Row size props (`rowHeight`, `estimateRowHeight`) measure along this axis. */\nexport type VirtualScrollOrientation = \"vertical\" | \"horizontal\";\n\nexport type VirtualScrollScrollAlign = \"start\" | \"center\" | \"end\" | \"auto\";\n\nexport type VirtualScrollScrollBehavior = \"auto\" | \"instant\" | \"smooth\";\n\nexport interface VirtualScrollScrollBehaviorOptions {\n readonly behavior?: VirtualScrollScrollBehavior;\n}\n\nexport interface VirtualScrollScrollToIndexOptions extends VirtualScrollScrollBehaviorOptions {\n readonly align?: VirtualScrollScrollAlign;\n}\n\nexport interface VirtualScrollRangeChange {\n /** First visible row index (no overscan). */\n readonly startIndex: number;\n /** Last visible row index, inclusive (no overscan). */\n readonly endIndex: number;\n /** First rendered row index including overscan. */\n readonly overscanStart: number;\n /** Last rendered row index, inclusive, including overscan. */\n readonly overscanEnd: number;\n}\n\nexport interface VirtualScrollScrollState {\n readonly isScrolling: boolean;\n}\n\nexport interface VirtualScrollHandle {\n readonly element: HTMLDivElement | null;\n scrollToIndex(index: number, options?: VirtualScrollScrollToIndexOptions): void;\n scrollToOffset(offset: number, options?: VirtualScrollScrollBehaviorOptions): void;\n scrollToEnd(options?: VirtualScrollScrollBehaviorOptions): void;\n}\n\nexport interface VirtualScrollOwnProps<T extends VirtualScrollItem>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"children\">, ConsumerDataAttributes {\n readonly ref?: Ref<HTMLDivElement>;\n readonly items: readonly T[];\n /** Scrollport height; also the viewport extent used before the first resize measurement. */\n readonly height?: number;\n /** Fixed item size along the scroll axis — row height when vertical, item width when horizontal. */\n readonly rowHeight?: number;\n readonly orientation?: VirtualScrollOrientation;\n readonly overscan?: number;\n readonly className?: string | undefined;\n readonly testId?: string;\n readonly renderRow: (item: T, index: number) => ReactNode;\n readonly scrollRef?: Ref<VirtualScrollHandle>;\n readonly estimateRowHeight?: (index: number) => number;\n readonly onRangeChange?: (range: VirtualScrollRangeChange) => void;\n readonly anchor?: VirtualScrollAnchor;\n readonly followAppend?: boolean | \"smooth\";\n readonly onScrollStateChange?: (state: VirtualScrollScrollState) => void;\n readonly isScrollingResetDelay?: number;\n readonly slotProps?: VirtualScrollSlotProps;\n}\n\nexport interface VirtualScrollRowShellProps extends SlotProps<\"div\"> {\n readonly children: ReactNode;\n readonly dynamicLayout: boolean;\n readonly index: number;\n readonly itemCount: number;\n readonly listRole: VirtualScrollListRole;\n readonly rowOffset?: number;\n readonly rowHeight?: number;\n readonly slotIndex: number;\n}\n\nexport interface VirtualScrollRowSlot<T extends VirtualScrollItem> {\n readonly slotIndex: number;\n readonly index: number;\n readonly item: T | null;\n}\n"],"mappings":"AAQO,MAAM,4BAA4B;AAGlC,MAAM,0BAA0B;AAGhC,MAAM,oCAAoC;AAG1C,MAAM,kCAAkC;","names":[]}
@@ -1,8 +1,11 @@
1
+ import type { CSSProperties } from "react";
1
2
  import type { VirtualScrollRange } from "./virtual-scroll-range.js";
2
3
  /** Imperatively update row positions from scrollTop so the viewport stays filled before React paints. */
3
4
  export declare function applyVirtualScrollRangeToDom(scrollport: HTMLElement, range: VirtualScrollRange, options: {
4
5
  readonly dynamicLayout: boolean;
5
6
  readonly slotCount: number;
6
7
  readonly getRowOffset: (index: number) => number;
8
+ readonly spacerStyle?: CSSProperties | undefined;
9
+ readonly getRowStyle?: (index: number) => CSSProperties | undefined;
7
10
  }): void;
8
11
  //# sourceMappingURL=virtual-scroll-scroll-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-scroll-scroll-sync.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-scroll/virtual-scroll-scroll-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,yGAAyG;AACzG,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE;IACP,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD,GACA,IAAI,CAgBN"}
1
+ {"version":3,"file":"virtual-scroll-scroll-sync.d.ts","sourceRoot":"","sources":["../../../src/components/virtual-scroll/virtual-scroll-scroll-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,yGAAyG;AACzG,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE;IACP,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;CACrE,GACA,IAAI,CAyBN"}
@@ -2,7 +2,10 @@ function applyVirtualScrollRangeToDom(scrollport, range, options) {
2
2
  const spacer = scrollport.querySelector('[data-part="spacer"]');
3
3
  if (!(spacer instanceof HTMLElement)) return;
4
4
  if (!options.dynamicLayout) {
5
- spacer.style.setProperty("--uiify-range-start", String(range.start));
5
+ const style = { "--uiify-range-start": String(range.start), ...options.spacerStyle };
6
+ const value = style["--uiify-range-start"];
7
+ if (value === void 0) spacer.style.removeProperty("--uiify-range-start");
8
+ else spacer.style.setProperty("--uiify-range-start", value);
6
9
  return;
7
10
  }
8
11
  const rows = spacer.querySelectorAll('[data-part="row"]');
@@ -10,7 +13,13 @@ function applyVirtualScrollRangeToDom(scrollport, range, options) {
10
13
  const row = rows[slotIndex];
11
14
  if (!(row instanceof HTMLElement)) continue;
12
15
  const index = range.start + slotIndex;
13
- row.style.setProperty("--uiify-row-offset", `${options.getRowOffset(index)}px`);
16
+ const style = {
17
+ "--uiify-row-offset": `${options.getRowOffset(index)}px`,
18
+ ...options.getRowStyle?.(index)
19
+ };
20
+ const value = style["--uiify-row-offset"];
21
+ if (value === void 0) row.style.removeProperty("--uiify-row-offset");
22
+ else row.style.setProperty("--uiify-row-offset", value);
14
23
  }
15
24
  }
16
25
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/virtual-scroll/virtual-scroll-scroll-sync.ts"],"sourcesContent":["import type { VirtualScrollRange } from \"./virtual-scroll-range.js\";\n\n/** Imperatively update row positions from scrollTop so the viewport stays filled before React paints. */\nexport function applyVirtualScrollRangeToDom(\n scrollport: HTMLElement,\n range: VirtualScrollRange,\n options: {\n readonly dynamicLayout: boolean;\n readonly slotCount: number;\n readonly getRowOffset: (index: number) => number;\n },\n): void {\n const spacer = scrollport.querySelector('[data-part=\"spacer\"]');\n if (!(spacer instanceof HTMLElement)) return;\n\n if (!options.dynamicLayout) {\n spacer.style.setProperty(\"--uiify-range-start\", String(range.start));\n return;\n }\n\n const rows = spacer.querySelectorAll('[data-part=\"row\"]');\n for (let slotIndex = 0; slotIndex < options.slotCount; slotIndex++) {\n const row = rows[slotIndex];\n if (!(row instanceof HTMLElement)) continue;\n const index = range.start + slotIndex;\n row.style.setProperty(\"--uiify-row-offset\", `${options.getRowOffset(index)}px`);\n }\n}\n"],"mappings":"AAGO,SAAS,6BACd,YACA,OACA,SAKM;AACN,QAAM,SAAS,WAAW,cAAc,sBAAsB;AAC9D,MAAI,EAAE,kBAAkB,aAAc;AAEtC,MAAI,CAAC,QAAQ,eAAe;AAC1B,WAAO,MAAM,YAAY,uBAAuB,OAAO,MAAM,KAAK,CAAC;AACnE;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,iBAAiB,mBAAmB;AACxD,WAAS,YAAY,GAAG,YAAY,QAAQ,WAAW,aAAa;AAClE,UAAM,MAAM,KAAK,SAAS;AAC1B,QAAI,EAAE,eAAe,aAAc;AACnC,UAAM,QAAQ,MAAM,QAAQ;AAC5B,QAAI,MAAM,YAAY,sBAAsB,GAAG,QAAQ,aAAa,KAAK,CAAC,IAAI;AAAA,EAChF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/virtual-scroll/virtual-scroll-scroll-sync.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\nimport type { VirtualScrollRange } from \"./virtual-scroll-range.js\";\n\n/** Imperatively update row positions from scrollTop so the viewport stays filled before React paints. */\nexport function applyVirtualScrollRangeToDom(\n scrollport: HTMLElement,\n range: VirtualScrollRange,\n options: {\n readonly dynamicLayout: boolean;\n readonly slotCount: number;\n readonly getRowOffset: (index: number) => number;\n readonly spacerStyle?: CSSProperties | undefined;\n readonly getRowStyle?: (index: number) => CSSProperties | undefined;\n },\n): void {\n const spacer = scrollport.querySelector('[data-part=\"spacer\"]');\n if (!(spacer instanceof HTMLElement)) return;\n\n if (!options.dynamicLayout) {\n const style = { \"--uiify-range-start\": String(range.start), ...options.spacerStyle };\n const value = style[\"--uiify-range-start\"];\n if (value === undefined) spacer.style.removeProperty(\"--uiify-range-start\");\n else spacer.style.setProperty(\"--uiify-range-start\", value);\n return;\n }\n\n const rows = spacer.querySelectorAll('[data-part=\"row\"]');\n for (let slotIndex = 0; slotIndex < options.slotCount; slotIndex++) {\n const row = rows[slotIndex];\n if (!(row instanceof HTMLElement)) continue;\n const index = range.start + slotIndex;\n const style = {\n \"--uiify-row-offset\": `${options.getRowOffset(index)}px`,\n ...options.getRowStyle?.(index),\n };\n const value = style[\"--uiify-row-offset\"];\n if (value === undefined) row.style.removeProperty(\"--uiify-row-offset\");\n else row.style.setProperty(\"--uiify-row-offset\", value);\n }\n}\n"],"mappings":"AAIO,SAAS,6BACd,YACA,OACA,SAOM;AACN,QAAM,SAAS,WAAW,cAAc,sBAAsB;AAC9D,MAAI,EAAE,kBAAkB,aAAc;AAEtC,MAAI,CAAC,QAAQ,eAAe;AAC1B,UAAM,QAAQ,EAAE,uBAAuB,OAAO,MAAM,KAAK,GAAG,GAAG,QAAQ,YAAY;AACnF,UAAM,QAAQ,MAAM,qBAAqB;AACzC,QAAI,UAAU,OAAW,QAAO,MAAM,eAAe,qBAAqB;AAAA,QACrE,QAAO,MAAM,YAAY,uBAAuB,KAAK;AAC1D;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,iBAAiB,mBAAmB;AACxD,WAAS,YAAY,GAAG,YAAY,QAAQ,WAAW,aAAa;AAClE,UAAM,MAAM,KAAK,SAAS;AAC1B,QAAI,EAAE,eAAe,aAAc;AACnC,UAAM,QAAQ,MAAM,QAAQ;AAC5B,UAAM,QAAQ;AAAA,MACZ,sBAAsB,GAAG,QAAQ,aAAa,KAAK,CAAC;AAAA,MACpD,GAAG,QAAQ,cAAc,KAAK;AAAA,IAChC;AACA,UAAM,QAAQ,MAAM,oBAAoB;AACxC,QAAI,UAAU,OAAW,KAAI,MAAM,eAAe,oBAAoB;AAAA,QACjE,KAAI,MAAM,YAAY,sBAAsB,KAAK;AAAA,EACxD;AACF;","names":[]}
@@ -0,0 +1,3 @@
1
+ /** Join library and consumer class names; empty input yields no `class` attribute. */
2
+ export declare function cn(...parts: Array<string | false | null | undefined>): string | undefined;
3
+ //# sourceMappingURL=class-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-names.d.ts","sourceRoot":"","sources":["../../src/core/class-names.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAEzF"}
@@ -0,0 +1,7 @@
1
+ function cn(...parts) {
2
+ return parts.filter(Boolean).join(" ") || void 0;
3
+ }
4
+ export {
5
+ cn
6
+ };
7
+ //# sourceMappingURL=class-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/class-names.ts"],"sourcesContent":["/** Join library and consumer class names; empty input yields no `class` attribute. */\nexport function cn(...parts: Array<string | false | null | undefined>): string | undefined {\n return parts.filter(Boolean).join(\" \") || undefined;\n}\n"],"mappings":"AACO,SAAS,MAAM,OAAqE;AACzF,SAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AAC5C;","names":[]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Every `data-part` value the library renders or styles. `naming.test.ts` fails when a TSX or
3
+ * CSS file uses a name that is not listed here. Import the type with `import type` only, so the
4
+ * array never reaches a bundle. Consumers may still pass any `data-part` of their own.
5
+ */
6
+ export declare const PART_NAMES: readonly ["action", "actions", "addon", "append", "body", "candle", "candle-hit", "candles", "canvas", "cell", "checkbox-item", "close", "column-header", "content", "control", "controls", "crosshair", "crosshair-marker", "crosshair-price", "crosshair-time", "crosshair-value", "data", "decrement", "description", "details", "dot", "dots", "dropzone", "ellipsis", "empty", "error", "expand-trigger", "expanded-row", "fallback", "file-info", "footer", "grabber", "group", "handle", "header", "image", "increment", "indicator", "input", "input-slot", "item", "item-description", "item-icon", "item-indicator", "item-text", "label", "legend", "link", "list", "mark", "media", "metadata", "native-input", "panel", "plot", "point", "point-hit", "points", "price-axis", "radio-group", "radio-item", "rail", "range", "readout", "readout-time", "remove", "root", "row", "row-header", "scroll-viewport", "separator", "shortcut", "slide", "slide-content", "slot", "sort-button", "spacer", "status", "story", "story-body", "story-eyebrow", "story-footer", "story-topline", "sub-content", "sub-trigger", "surface", "symbol", "tag", "tag-remove", "tags", "term", "thumb", "time-axis", "time-viewport", "title", "track", "trigger", "value-axis", "viewport", "visual-thumb"];
7
+ export type PartName = (typeof PART_NAMES)[number];
8
+ //# sourceMappingURL=part-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part-names.d.ts","sourceRoot":"","sources":["../../src/core/part-names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU,4uCA0Gb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,111 @@
1
+ const PART_NAMES = [
2
+ "action",
3
+ "actions",
4
+ "addon",
5
+ "append",
6
+ "body",
7
+ "candle",
8
+ "candle-hit",
9
+ "candles",
10
+ "canvas",
11
+ "cell",
12
+ "checkbox-item",
13
+ "close",
14
+ "column-header",
15
+ "content",
16
+ "control",
17
+ "controls",
18
+ "crosshair",
19
+ "crosshair-marker",
20
+ "crosshair-price",
21
+ "crosshair-time",
22
+ "crosshair-value",
23
+ "data",
24
+ "decrement",
25
+ "description",
26
+ "details",
27
+ "dot",
28
+ "dots",
29
+ "dropzone",
30
+ "ellipsis",
31
+ "empty",
32
+ "error",
33
+ "expand-trigger",
34
+ "expanded-row",
35
+ "fallback",
36
+ "file-info",
37
+ "footer",
38
+ "grabber",
39
+ "group",
40
+ "handle",
41
+ "header",
42
+ "image",
43
+ "increment",
44
+ "indicator",
45
+ "input",
46
+ "input-slot",
47
+ "item",
48
+ "item-description",
49
+ "item-icon",
50
+ "item-indicator",
51
+ "item-text",
52
+ "label",
53
+ "legend",
54
+ "link",
55
+ "list",
56
+ "mark",
57
+ "media",
58
+ "metadata",
59
+ "native-input",
60
+ "panel",
61
+ "plot",
62
+ "point",
63
+ "point-hit",
64
+ "points",
65
+ "price-axis",
66
+ "radio-group",
67
+ "radio-item",
68
+ "rail",
69
+ "range",
70
+ "readout",
71
+ "readout-time",
72
+ "remove",
73
+ "root",
74
+ "row",
75
+ "row-header",
76
+ "scroll-viewport",
77
+ "separator",
78
+ "shortcut",
79
+ "slide",
80
+ "slide-content",
81
+ "slot",
82
+ "sort-button",
83
+ "spacer",
84
+ "status",
85
+ "story",
86
+ "story-body",
87
+ "story-eyebrow",
88
+ "story-footer",
89
+ "story-topline",
90
+ "sub-content",
91
+ "sub-trigger",
92
+ "surface",
93
+ "symbol",
94
+ "tag",
95
+ "tag-remove",
96
+ "tags",
97
+ "term",
98
+ "thumb",
99
+ "time-axis",
100
+ "time-viewport",
101
+ "title",
102
+ "track",
103
+ "trigger",
104
+ "value-axis",
105
+ "viewport",
106
+ "visual-thumb"
107
+ ];
108
+ export {
109
+ PART_NAMES
110
+ };
111
+ //# sourceMappingURL=part-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/part-names.ts"],"sourcesContent":["/**\n * Every `data-part` value the library renders or styles. `naming.test.ts` fails when a TSX or\n * CSS file uses a name that is not listed here. Import the type with `import type` only, so the\n * array never reaches a bundle. Consumers may still pass any `data-part` of their own.\n */\nexport const PART_NAMES = [\n \"action\",\n \"actions\",\n \"addon\",\n \"append\",\n \"body\",\n \"candle\",\n \"candle-hit\",\n \"candles\",\n \"canvas\",\n \"cell\",\n \"checkbox-item\",\n \"close\",\n \"column-header\",\n \"content\",\n \"control\",\n \"controls\",\n \"crosshair\",\n \"crosshair-marker\",\n \"crosshair-price\",\n \"crosshair-time\",\n \"crosshair-value\",\n \"data\",\n \"decrement\",\n \"description\",\n \"details\",\n \"dot\",\n \"dots\",\n \"dropzone\",\n \"ellipsis\",\n \"empty\",\n \"error\",\n \"expand-trigger\",\n \"expanded-row\",\n \"fallback\",\n \"file-info\",\n \"footer\",\n \"grabber\",\n \"group\",\n \"handle\",\n \"header\",\n \"image\",\n \"increment\",\n \"indicator\",\n \"input\",\n \"input-slot\",\n \"item\",\n \"item-description\",\n \"item-icon\",\n \"item-indicator\",\n \"item-text\",\n \"label\",\n \"legend\",\n \"link\",\n \"list\",\n \"mark\",\n \"media\",\n \"metadata\",\n \"native-input\",\n \"panel\",\n \"plot\",\n \"point\",\n \"point-hit\",\n \"points\",\n \"price-axis\",\n \"radio-group\",\n \"radio-item\",\n \"rail\",\n \"range\",\n \"readout\",\n \"readout-time\",\n \"remove\",\n \"root\",\n \"row\",\n \"row-header\",\n \"scroll-viewport\",\n \"separator\",\n \"shortcut\",\n \"slide\",\n \"slide-content\",\n \"slot\",\n \"sort-button\",\n \"spacer\",\n \"status\",\n \"story\",\n \"story-body\",\n \"story-eyebrow\",\n \"story-footer\",\n \"story-topline\",\n \"sub-content\",\n \"sub-trigger\",\n \"surface\",\n \"symbol\",\n \"tag\",\n \"tag-remove\",\n \"tags\",\n \"term\",\n \"thumb\",\n \"time-axis\",\n \"time-viewport\",\n \"title\",\n \"track\",\n \"trigger\",\n \"value-axis\",\n \"viewport\",\n \"visual-thumb\",\n] as const;\n\nexport type PartName = (typeof PART_NAMES)[number];\n"],"mappings":"AAKO,MAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -19,12 +19,19 @@ export type RenderableProps<TAs extends ElementType, OwnProps extends object, TS
19
19
  */
20
20
  export type NativeButtonAs<TAs extends ElementType> = TAs extends keyof JSX.IntrinsicElements ? Extract<TAs, "button"> : TAs;
21
21
  /**
22
- * Props of a part that renders a native invoker button. The library owns `type`
23
- * and the invoker attributes; consumers keep className, style, ref and onClick.
22
+ * Props of a part that renders a native invoker button. The library writes `type="button"`,
23
+ * `command` and `commandfor` by default; consumer props replace them. Popover invoker
24
+ * attributes are not part of a command invoker.
24
25
  */
25
- export type NativeButtonProps<TAs extends ElementType, OwnProps extends object> = OwnProps & Omit<ComponentPropsWithRef<TAs>, keyof OwnProps | "as" | "render" | "type" | "command" | "commandfor" | "popoverTarget" | "popoverTargetAction"> & {
26
+ export type NativeButtonProps<TAs extends ElementType, OwnProps extends object> = OwnProps & Omit<ComponentPropsWithRef<TAs>, keyof OwnProps | "as" | "render" | "popoverTarget" | "popoverTargetAction"> & Omit<NativeInvokerAttributes, keyof OwnProps> & {
26
27
  /** `"button"` (default) or a component that forwards props and ref to a native <button>. */
27
28
  readonly as?: TAs & NativeButtonAs<TAs>;
28
29
  readonly render?: never;
29
30
  };
31
+ /** Invoker attributes that @types/react 19.2 does not declare yet. */
32
+ interface NativeInvokerAttributes {
33
+ readonly command?: string | undefined;
34
+ readonly commandfor?: string | undefined;
35
+ }
36
+ export {};
30
37
  //# sourceMappingURL=polymorphic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"polymorphic.d.ts","sourceRoot":"","sources":["../../src/core/polymorphic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAExF,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,WAAW,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAC/E,GAAG,CAAC,MAAM,QAAQ,CAAC,GACnB,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,CAAC,GAAG,SAAS,WAAW,EAAE,QAAQ,SAAS,MAAM,IAAI,QAAQ,GACvF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG;IACnE,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEJ,MAAM,WAAW,mBAAmB,CAAC,MAAM,EAAE,QAAQ,SAAS,OAAO;IACnE,MAAM,EAAE,CACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;KAAE,EACxD,KAAK,EAAE,MAAM,KACV,YAAY,GAAG,IAAI,CAAC;IACzB,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAED,MAAM,MAAM,eAAe,CACzB,GAAG,SAAS,WAAW,EACvB,QAAQ,SAAS,MAAM,EACvB,MAAM,EACN,QAAQ,SAAS,OAAO,IACtB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEzF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,GAAG,SAAS,WAAW,IAAI,GAAG,SAAS,MAAM,GAAG,CAAC,iBAAiB,GACzF,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,GACtB,GAAG,CAAC;AAER;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,GAAG,SAAS,WAAW,EAAE,QAAQ,SAAS,MAAM,IAAI,QAAQ,GACxF,IAAI,CACF,qBAAqB,CAAC,GAAG,CAAC,EACxB,MAAM,QAAQ,GACd,IAAI,GACJ,QAAQ,GACR,MAAM,GACN,SAAS,GACT,YAAY,GACZ,eAAe,GACf,qBAAqB,CACxB,GAAG;IACF,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC"}
1
+ {"version":3,"file":"polymorphic.d.ts","sourceRoot":"","sources":["../../src/core/polymorphic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAExF,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,WAAW,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAC/E,GAAG,CAAC,MAAM,QAAQ,CAAC,GACnB,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,CAAC,GAAG,SAAS,WAAW,EAAE,QAAQ,SAAS,MAAM,IAAI,QAAQ,GACvF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,MAAM,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG;IACnE,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB,CAAC;AAEJ,MAAM,WAAW,mBAAmB,CAAC,MAAM,EAAE,QAAQ,SAAS,OAAO;IACnE,MAAM,EAAE,CACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;KAAE,EACxD,KAAK,EAAE,MAAM,KACV,YAAY,GAAG,IAAI,CAAC;IACzB,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAED,MAAM,MAAM,eAAe,CACzB,GAAG,SAAS,WAAW,EACvB,QAAQ,SAAS,MAAM,EACvB,MAAM,EACN,QAAQ,SAAS,OAAO,IACtB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEzF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,GAAG,SAAS,WAAW,IAAI,GAAG,SAAS,MAAM,GAAG,CAAC,iBAAiB,GACzF,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,GACtB,GAAG,CAAC;AAER;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,GAAG,SAAS,WAAW,EAAE,QAAQ,SAAS,MAAM,IAAI,QAAQ,GACxF,IAAI,CACF,qBAAqB,CAAC,GAAG,CAAC,EAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,eAAe,GAAG,qBAAqB,CAC3E,GACD,IAAI,CAAC,uBAAuB,EAAE,MAAM,QAAQ,CAAC,GAAG;IAC9C,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEJ,sEAAsE;AACtE,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C"}
@@ -13,6 +13,7 @@ interface NativeInvokerOptions {
13
13
  * command semantics; Popup uses `popoverTarget`/`popoverTargetAction` instead
14
14
  * and keeps its own renderer (see popup/PopupParts.tsx).
15
15
  *
16
+ * The invoker attributes, `type="button"` and markers are defaults: consumer props replace them.
16
17
  */
17
18
  export declare function renderNativeInvoker(as: ElementType | undefined, marker: string, part: string, command: NativeInvokerCommand, target: string, consumerProps: Record<string, unknown>, options?: NativeInvokerOptions): ReactElement;
18
19
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"render-native-invoker.d.ts","sourceRoot":"","sources":["../../src/core/render-native-invoker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,eAAe,CAAC;AAElE,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;CAC1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,OAAO,GAAE,oBAAyB,GACjC,YAAY,CAWd"}
1
+ {"version":3,"file":"render-native-invoker.d.ts","sourceRoot":"","sources":["../../src/core/render-native-invoker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,eAAe,CAAC;AAElE,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;CAC1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,OAAO,GAAE,oBAAyB,GACjC,YAAY,CAWd"}
@@ -1,14 +1,14 @@
1
1
  import { createElement } from "react";
2
2
  function renderNativeInvoker(as, marker, part, command, target, consumerProps, options = {}) {
3
3
  return createElement(as ?? "button", {
4
- ...consumerProps,
5
- ...options.button ? { "data-uiify-button": "" } : {},
6
- [marker]: "",
7
- "data-part": part,
8
- ...options.variant ? { "data-variant": options.variant } : {},
4
+ type: "button",
9
5
  command,
10
6
  commandfor: target,
11
- type: "button"
7
+ "data-part": part,
8
+ [marker]: "",
9
+ ...options.button ? { "data-uiify-button": "" } : {},
10
+ ...options.variant ? { "data-variant": options.variant } : {},
11
+ ...consumerProps
12
12
  });
13
13
  }
14
14
  export {