niuma-ui 2.0.4 → 2.1.0

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 (291) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/NOTICE +0 -1
  3. package/README.md +3 -3
  4. package/README.zh-CN.md +3 -3
  5. package/dist/components/_shared/index.d.ts +2 -2
  6. package/dist/components/_shared/src/overlay-utils.d.ts +44 -1
  7. package/dist/components/_shared/src/overlay-utils.js +87 -2
  8. package/dist/components/alert/index.d.ts +1 -0
  9. package/dist/components/alert/src/RsAlert.css +120 -65
  10. package/dist/components/alert/src/RsAlert.d.ts +24 -5
  11. package/dist/components/alert/src/RsAlert.impl.js +108 -36
  12. package/dist/components/alert/src/RsAlert.js +1 -1
  13. package/dist/components/alert/src/alert-utils.d.ts +37 -0
  14. package/dist/components/alert/src/alert-utils.js +71 -0
  15. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +1 -1
  16. package/dist/components/button/src/RsButton.css +75 -72
  17. package/dist/components/button/src/RsButton.d.ts +1 -4
  18. package/dist/components/button/src/RsButton.impl.js +3 -7
  19. package/dist/components/button/src/RsButton.js +1 -1
  20. package/dist/components/card/src/RsCard.d.ts +1 -1
  21. package/dist/components/code-block/index.d.ts +1 -0
  22. package/dist/components/code-block/src/RsCodeBlock.css +93 -52
  23. package/dist/components/code-block/src/RsCodeBlock.d.ts +36 -9
  24. package/dist/components/code-block/src/RsCodeBlock.impl.js +203 -84
  25. package/dist/components/code-block/src/RsCodeBlock.js +1 -1
  26. package/dist/components/code-block/src/code-block-highlight.d.ts +4 -0
  27. package/dist/components/code-block/src/code-block-highlight.js +34 -0
  28. package/dist/components/code-block/src/code-block-utils.d.ts +23 -0
  29. package/dist/components/code-block/src/code-block-utils.js +71 -0
  30. package/dist/components/code-editor/index.d.ts +1 -1
  31. package/dist/components/code-editor/src/RsCodeEditor.css +118 -92
  32. package/dist/components/code-editor/src/RsCodeEditor.d.ts +14 -3
  33. package/dist/components/code-editor/src/RsCodeEditor.impl.js +261 -94
  34. package/dist/components/code-editor/src/RsCodeEditor.js +1 -1
  35. package/dist/components/code-editor/src/code-editor-utils.d.ts +15 -0
  36. package/dist/components/code-editor/src/code-editor-utils.js +36 -1
  37. package/dist/components/code-editor/src/code-mirror-completion.d.ts +1 -1
  38. package/dist/components/code-editor/src/code-mirror-completion.js +8 -5
  39. package/dist/components/code-editor/src/code-mirror-diagnostics.d.ts +2 -3
  40. package/dist/components/code-editor/src/code-mirror-diagnostics.js +3 -4
  41. package/dist/components/code-editor/src/code-mirror-ghost.d.ts +1 -1
  42. package/dist/components/code-editor/src/code-mirror-ghost.js +12 -3
  43. package/dist/components/code-editor/src/code-mirror-inline-edit.js +8 -3
  44. package/dist/components/code-editor/src/code-mirror-intel.d.ts +2 -2
  45. package/dist/components/code-editor/src/code-mirror-intel.js +50 -39
  46. package/dist/components/code-editor/src/code-mirror-lang.js +4 -0
  47. package/dist/components/code-editor/src/code-mirror-session.d.ts +13 -0
  48. package/dist/components/code-editor/src/code-mirror-session.js +30 -0
  49. package/dist/components/config-provider/src/RsConfigProvider.css +1 -1
  50. package/dist/components/config-provider/src/RsConfigProvider.d.ts +2 -2
  51. package/dist/components/config-provider/src/RsConfigProvider.impl.js +7 -16
  52. package/dist/components/config-provider/src/RsConfigProvider.js +1 -1
  53. package/dist/components/context-menu/index.d.ts +1 -1
  54. package/dist/components/context-menu/src/RsContextMenu.css +115 -89
  55. package/dist/components/context-menu/src/RsContextMenu.d.ts +32 -11
  56. package/dist/components/context-menu/src/RsContextMenu.impl.js +795 -48
  57. package/dist/components/context-menu/src/RsContextMenuItems.d.ts +25 -1
  58. package/dist/components/context-menu/src/RsContextMenuItems.impl.js +110 -61
  59. package/dist/components/context-menu/src/context-menu-utils.d.ts +89 -3
  60. package/dist/components/context-menu/src/context-menu-utils.js +168 -3
  61. package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
  62. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
  63. package/dist/components/descriptions/index.d.ts +1 -1
  64. package/dist/components/descriptions/src/RsDescriptions.css +38 -11
  65. package/dist/components/descriptions/src/RsDescriptions.d.ts +20 -4
  66. package/dist/components/descriptions/src/RsDescriptions.impl.js +89 -19
  67. package/dist/components/descriptions/src/RsDescriptionsItem.impl.js +13 -6
  68. package/dist/components/descriptions/src/descriptions-utils.d.ts +19 -0
  69. package/dist/components/descriptions/src/descriptions-utils.js +39 -1
  70. package/dist/components/dialog/index.d.ts +1 -1
  71. package/dist/components/dialog/src/RsConfirmDialog.css +47 -21
  72. package/dist/components/dialog/src/RsConfirmDialog.d.ts +19 -7
  73. package/dist/components/dialog/src/RsConfirmDialog.impl.js +349 -119
  74. package/dist/components/dialog/src/RsConfirmDialog.js +2 -1
  75. package/dist/components/dialog/src/RsDialog.css +102 -109
  76. package/dist/components/dialog/src/RsDialog.d.ts +34 -24
  77. package/dist/components/dialog/src/RsDialog.impl.js +410 -177
  78. package/dist/components/dialog/src/RsDialog.js +2 -1
  79. package/dist/components/dialog/src/dialog-utils.d.ts +40 -1
  80. package/dist/components/dialog/src/dialog-utils.js +152 -1
  81. package/dist/components/dialog/src/dialog-window.js +29 -8
  82. package/dist/components/drawer/index.d.ts +1 -1
  83. package/dist/components/drawer/src/RsDrawer.css +61 -29
  84. package/dist/components/drawer/src/RsDrawer.d.ts +37 -21
  85. package/dist/components/drawer/src/RsDrawer.impl.js +441 -223
  86. package/dist/components/drawer/src/drawer-utils.d.ts +35 -0
  87. package/dist/components/drawer/src/drawer-utils.js +131 -1
  88. package/dist/components/dropdown/index.d.ts +1 -1
  89. package/dist/components/dropdown/src/RsDropdown.css +140 -61
  90. package/dist/components/dropdown/src/RsDropdown.d.ts +39 -6
  91. package/dist/components/dropdown/src/RsDropdown.impl.js +693 -63
  92. package/dist/components/dropdown/src/RsDropdownItemView.impl.js +17 -7
  93. package/dist/components/dropdown/src/RsDropdownItems.d.ts +32 -3
  94. package/dist/components/dropdown/src/RsDropdownItems.impl.js +171 -59
  95. package/dist/components/dropdown/src/dropdown-utils.d.ts +50 -0
  96. package/dist/components/dropdown/src/dropdown-utils.js +103 -3
  97. package/dist/components/empty/index.d.ts +1 -0
  98. package/dist/components/empty/src/RsEmpty.css +105 -23
  99. package/dist/components/empty/src/RsEmpty.d.ts +27 -4
  100. package/dist/components/empty/src/RsEmpty.impl.js +154 -11
  101. package/dist/components/empty/src/RsEmpty.js +2 -1
  102. package/dist/components/empty/src/empty-utils.d.ts +28 -0
  103. package/dist/components/empty/src/empty-utils.js +55 -0
  104. package/dist/components/form/src/RsForm.d.ts +1 -1
  105. package/dist/components/input-number/src/RsInputNumber.d.ts +1 -1
  106. package/dist/components/label/src/RsLabel.d.ts +1 -1
  107. package/dist/components/loading/index.d.ts +1 -0
  108. package/dist/components/loading/src/RsLoading.css +13 -97
  109. package/dist/components/loading/src/RsLoading.d.ts +52 -2
  110. package/dist/components/loading/src/RsLoading.impl.js +216 -33
  111. package/dist/components/loading/src/RsLoading.js +2 -1
  112. package/dist/components/loading/src/loading-status.css +210 -0
  113. package/dist/components/loading/src/loading-status.d.ts +34 -0
  114. package/dist/components/loading/src/loading-status.impl.js +84 -0
  115. package/dist/components/loading/src/loading-status.js +8 -0
  116. package/dist/components/loading/src/loading-utils.d.ts +51 -4
  117. package/dist/components/loading/src/loading-utils.js +122 -0
  118. package/dist/components/loading-bar/index.d.ts +1 -0
  119. package/dist/components/loading-bar/src/RsLoadingBar.css +72 -8
  120. package/dist/components/loading-bar/src/RsLoadingBar.d.ts +55 -11
  121. package/dist/components/loading-bar/src/RsLoadingBar.impl.js +298 -57
  122. package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
  123. package/dist/components/loading-bar/src/loading-bar-utils.d.ts +69 -0
  124. package/dist/components/loading-bar/src/loading-bar-utils.js +97 -0
  125. package/dist/components/log/src/RsLog.css +52 -144
  126. package/dist/components/log/src/RsLog.d.ts +12 -11
  127. package/dist/components/log/src/RsLog.impl.js +181 -148
  128. package/dist/components/log/src/RsLog.js +1 -1
  129. package/dist/components/log/src/RsLogRow.css +152 -0
  130. package/dist/components/log/src/RsLogRow.d.ts +35 -0
  131. package/dist/components/log/src/RsLogRow.impl.js +91 -0
  132. package/dist/components/log/src/RsLogRow.js +8 -0
  133. package/dist/components/log/src/log-utils.d.ts +8 -0
  134. package/dist/components/log/src/log-utils.js +71 -10
  135. package/dist/components/markdown/index.d.ts +1 -1
  136. package/dist/components/markdown/src/RsMarkdown.css +75 -32
  137. package/dist/components/markdown/src/RsMarkdown.d.ts +6 -2
  138. package/dist/components/markdown/src/RsMarkdown.impl.js +185 -17
  139. package/dist/components/markdown/src/markdown-utils.d.ts +26 -0
  140. package/dist/components/markdown/src/markdown-utils.js +114 -12
  141. package/dist/components/mentions/src/RsMentions.d.ts +2 -2
  142. package/dist/components/menu/index.d.ts +1 -1
  143. package/dist/components/menu/src/RsMenu.css +70 -29
  144. package/dist/components/menu/src/RsMenu.d.ts +58 -4
  145. package/dist/components/menu/src/RsMenu.impl.js +93 -46
  146. package/dist/components/menu/src/RsMenuItems.d.ts +22 -5
  147. package/dist/components/menu/src/RsMenuItems.impl.js +506 -154
  148. package/dist/components/menu/src/menu-utils.d.ts +56 -0
  149. package/dist/components/menu/src/menu-utils.js +139 -6
  150. package/dist/components/monaco-editor/index.d.ts +1 -1
  151. package/dist/components/monaco-editor/src/RsMonacoEditor.css +28 -16
  152. package/dist/components/monaco-editor/src/RsMonacoEditor.d.ts +39 -41
  153. package/dist/components/monaco-editor/src/RsMonacoEditor.impl.js +212 -133
  154. package/dist/components/monaco-editor/src/RsMonacoEditor.js +1 -1
  155. package/dist/components/monaco-editor/src/monaco-editor-utils.d.ts +126 -0
  156. package/dist/components/monaco-editor/src/monaco-editor-utils.js +302 -0
  157. package/dist/components/pagination/index.d.ts +2 -2
  158. package/dist/components/pagination/src/RsPagination.css +93 -46
  159. package/dist/components/pagination/src/RsPagination.d.ts +68 -8
  160. package/dist/components/pagination/src/RsPagination.impl.js +229 -86
  161. package/dist/components/pagination/src/RsPagination.js +1 -1
  162. package/dist/components/pagination/src/pagination-utils.d.ts +59 -0
  163. package/dist/components/pagination/src/pagination-utils.js +105 -1
  164. package/dist/components/popover/index.d.ts +1 -0
  165. package/dist/components/popover/src/RsPopover.css +124 -14
  166. package/dist/components/popover/src/RsPopover.d.ts +38 -7
  167. package/dist/components/popover/src/RsPopover.impl.js +546 -35
  168. package/dist/components/popover/src/RsPopover.js +2 -1
  169. package/dist/components/popover/src/popover-utils.d.ts +24 -2
  170. package/dist/components/popover/src/popover-utils.js +55 -0
  171. package/dist/components/sidebar/index.d.ts +1 -0
  172. package/dist/components/sidebar/src/RsSidebar.css +91 -33
  173. package/dist/components/sidebar/src/RsSidebar.d.ts +17 -9
  174. package/dist/components/sidebar/src/RsSidebar.impl.js +124 -22
  175. package/dist/components/sidebar/src/RsSidebar.js +1 -1
  176. package/dist/components/sidebar/src/RsSidebarGroup.css +23 -6
  177. package/dist/components/sidebar/src/RsSidebarGroup.d.ts +6 -2
  178. package/dist/components/sidebar/src/RsSidebarGroup.impl.js +17 -4
  179. package/dist/components/sidebar/src/RsSidebarGroup.js +1 -1
  180. package/dist/components/sidebar/src/RsSidebarItem.css +50 -20
  181. package/dist/components/sidebar/src/RsSidebarItem.d.ts +21 -3
  182. package/dist/components/sidebar/src/RsSidebarItem.impl.js +71 -20
  183. package/dist/components/sidebar/src/RsSidebarItem.js +1 -1
  184. package/dist/components/sidebar/src/sidebar-utils.d.ts +47 -0
  185. package/dist/components/sidebar/src/sidebar-utils.js +72 -0
  186. package/dist/components/split-pane/index.d.ts +2 -2
  187. package/dist/components/split-pane/src/RsSplitPane.css +41 -30
  188. package/dist/components/split-pane/src/RsSplitPane.d.ts +6 -2
  189. package/dist/components/split-pane/src/RsSplitPane.impl.js +153 -45
  190. package/dist/components/split-pane/src/split-pane-utils.d.ts +23 -0
  191. package/dist/components/split-pane/src/split-pane-utils.js +18 -1
  192. package/dist/components/stat-card/index.d.ts +1 -0
  193. package/dist/components/stat-card/src/RsStatCard.css +129 -25
  194. package/dist/components/stat-card/src/RsStatCard.d.ts +40 -4
  195. package/dist/components/stat-card/src/RsStatCard.impl.js +106 -12
  196. package/dist/components/stat-card/src/RsStatCard.js +1 -1
  197. package/dist/components/stat-card/src/stat-card-utils.d.ts +39 -0
  198. package/dist/components/stat-card/src/stat-card-utils.js +113 -0
  199. package/dist/components/steps/index.d.ts +1 -1
  200. package/dist/components/steps/src/RsSteps.css +158 -37
  201. package/dist/components/steps/src/RsSteps.d.ts +69 -5
  202. package/dist/components/steps/src/RsSteps.impl.js +168 -28
  203. package/dist/components/steps/src/RsSteps.js +1 -1
  204. package/dist/components/steps/src/steps-utils.d.ts +51 -1
  205. package/dist/components/steps/src/steps-utils.js +67 -1
  206. package/dist/components/table/src/RsTable.impl.js +4 -2
  207. package/dist/components/table/src/composables/useRsTableContextMenu.d.ts +16 -0
  208. package/dist/components/table/src/composables/useRsTableContextMenu.js +1 -1
  209. package/dist/components/table/src/composables/useRsTableEngine.js +6 -2
  210. package/dist/components/table/src/composables/useRsTableScrollLayout.js +2 -0
  211. package/dist/components/table/src/composables/useRsTableShell.d.ts +16 -0
  212. package/dist/components/table/src/rs-table-props.d.ts +1 -1
  213. package/dist/components/table/src/rs-table-props.js +0 -1
  214. package/dist/components/table/src/table-body/RsTableBody.impl.js +1 -0
  215. package/dist/components/table/src/table-body/RsTableCell.impl.js +1 -1
  216. package/dist/components/table/src/table-body/RsTableCellEditor.impl.js +10 -2
  217. package/dist/components/table/src/table-body/RsTableColGroup.impl.js +1 -0
  218. package/dist/components/table/src/table-footer/RsTableSummaryRow.impl.js +1 -0
  219. package/dist/components/table/src/table-header/RsTableHeader.impl.js +1 -0
  220. package/dist/components/table/src/utils/table-utils.d.ts +10 -6
  221. package/dist/components/table/src/utils/table-utils.js +27 -25
  222. package/dist/components/table/style/rs-table.css +86 -28
  223. package/dist/components/tabs/index.d.ts +2 -2
  224. package/dist/components/tabs/src/RsTabs.css +225 -101
  225. package/dist/components/tabs/src/RsTabs.d.ts +37 -8
  226. package/dist/components/tabs/src/RsTabs.impl.js +400 -270
  227. package/dist/components/tabs/src/tabs-utils.d.ts +41 -2
  228. package/dist/components/tabs/src/tabs-utils.js +55 -1
  229. package/dist/components/terminal/index.d.ts +1 -1
  230. package/dist/components/terminal/src/RsTerminal.css +60 -37
  231. package/dist/components/terminal/src/RsTerminal.d.ts +36 -4
  232. package/dist/components/terminal/src/RsTerminal.impl.js +288 -68
  233. package/dist/components/terminal/src/RsTerminal.js +1 -1
  234. package/dist/components/terminal/src/terminal-utils.d.ts +42 -4
  235. package/dist/components/terminal/src/terminal-utils.js +113 -10
  236. package/dist/components/textarea/src/RsTextarea.d.ts +1 -1
  237. package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
  238. package/dist/components/toaster/src/RsToaster.css +156 -203
  239. package/dist/components/toaster/src/RsToaster.d.ts +32 -2
  240. package/dist/components/toaster/src/RsToaster.impl.js +309 -34
  241. package/dist/components/toaster/src/toast-store.d.ts +95 -0
  242. package/dist/components/toaster/src/toast-store.js +177 -0
  243. package/dist/components/toaster/src/toast-utils.d.ts +60 -0
  244. package/dist/components/toaster/src/toast-utils.js +86 -0
  245. package/dist/components/toolbar/index.d.ts +1 -1
  246. package/dist/components/toolbar/src/RsToolbar.css +206 -32
  247. package/dist/components/toolbar/src/RsToolbar.d.ts +41 -16
  248. package/dist/components/toolbar/src/RsToolbar.impl.js +146 -18
  249. package/dist/components/toolbar/src/RsToolbar.js +2 -1
  250. package/dist/components/toolbar/src/toolbar-utils.d.ts +20 -0
  251. package/dist/components/toolbar/src/toolbar-utils.js +105 -0
  252. package/dist/components/tooltip/index.d.ts +1 -0
  253. package/dist/components/tooltip/src/RsTooltip.css +104 -26
  254. package/dist/components/tooltip/src/RsTooltip.d.ts +38 -16
  255. package/dist/components/tooltip/src/RsTooltip.impl.js +420 -51
  256. package/dist/components/tooltip/src/RsTooltip.js +2 -1
  257. package/dist/components/tooltip/src/RsTooltipProvider.d.ts +4 -4
  258. package/dist/components/tooltip/src/RsTooltipProvider.impl.js +51 -14
  259. package/dist/components/tooltip/src/tooltip-utils.d.ts +30 -0
  260. package/dist/components/tooltip/src/tooltip-utils.js +23 -0
  261. package/dist/components/tree/index.d.ts +2 -2
  262. package/dist/components/tree/src/RsTree.css +84 -75
  263. package/dist/components/tree/src/RsTree.d.ts +20 -20
  264. package/dist/components/tree/src/RsTree.impl.js +292 -66
  265. package/dist/components/tree/src/RsTree.js +1 -1
  266. package/dist/components/tree/src/tree-utils.d.ts +22 -0
  267. package/dist/components/tree/src/tree-utils.js +18 -4
  268. package/dist/components/tree-select/src/RsTreeSelect.d.ts +1 -1
  269. package/dist/components/virtual-list/index.d.ts +1 -1
  270. package/dist/components/virtual-list/src/RsVirtualList.css +64 -9
  271. package/dist/components/virtual-list/src/RsVirtualList.d.ts +31 -5
  272. package/dist/components/virtual-list/src/RsVirtualList.impl.js +425 -76
  273. package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
  274. package/dist/components/virtual-list/src/virtual-list-utils.d.ts +64 -1
  275. package/dist/components/virtual-list/src/virtual-list-utils.js +215 -1
  276. package/dist/composables/useRsLoadingBar.d.ts +2 -5
  277. package/dist/composables/useRsLoadingBar.js +21 -5
  278. package/dist/composables/useRsTabsNav.d.ts +3 -1
  279. package/dist/composables/useRsTabsNav.js +96 -28
  280. package/dist/composables/useRsToast.d.ts +11 -13
  281. package/dist/composables/useRsToast.js +66 -17
  282. package/dist/index.d.ts +30 -21
  283. package/dist/index.js +14 -0
  284. package/dist/locale/apply.js +6 -1
  285. package/dist/locale/messages.js +128 -2
  286. package/dist/styles.css +465 -808
  287. package/dist/theme/brand.example.css +3 -2
  288. package/dist/vite-plugins/niuma-ui-host.js +1 -1
  289. package/package.json +2 -5
  290. package/dist/components/_shared/src/reka.d.ts +0 -2
  291. package/dist/components/_shared/src/reka.js +0 -2
@@ -1,75 +1,386 @@
1
+ import { useRsConfigOptional } from "../../../composables/useRsConfig.js";
2
+ import { resolveDirMode } from "../../../locale/apply.js";
3
+ import { useRsI18n } from "../../../composables/useRsI18n.js";
1
4
  import { rsRadiusCss, useResolvedRsRadius } from "../../_shared/src/resolve-radius.js";
2
- import { isVirtualListFillHeight, resolveItemSize, resolveVirtualListHeight } from "./virtual-list-utils.js";
3
- import { Fragment, computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onActivated, onMounted, onUnmounted, openBlock, ref, renderList, renderSlot, toDisplayString, watch } from "vue";
5
+ import { buildVirtualMetrics, contentToScroll, detectRtlScrollType, isVirtualListFillHeight, parseVirtualListHeightPx, readHorizontalOffset, readVirtualItemBox, resolveAlignedOffset, resolveItemSize, resolveVirtualListHeight, resolveVirtualListKeyIndex, resolveVisibleRange, scrollToContent, windowOrigin, writeHorizontalOffset } from "./virtual-list-utils.js";
6
+ import { Fragment, computed, createElementBlock, createElementVNode, createTextVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onActivated, onMounted, onUnmounted, openBlock, ref, renderList, renderSlot, toDisplayString, useAttrs, useId, useModel, watch } from "vue";
4
7
  //#region src/components/virtual-list/src/RsVirtualList.vue?vue&type=script&setup=true&lang.ts
8
+ var _hoisted_1 = [
9
+ "id",
10
+ "role",
11
+ "aria-label",
12
+ "aria-activedescendant",
13
+ "tabindex"
14
+ ];
15
+ var _hoisted_2 = {
16
+ key: 0,
17
+ class: "rs-virtual-list__empty",
18
+ role: "status"
19
+ };
20
+ var _hoisted_3 = { class: "rs-virtual-list__items" };
21
+ var _hoisted_4 = [
22
+ "id",
23
+ "role",
24
+ "aria-selected",
25
+ "aria-current",
26
+ "onClick"
27
+ ];
5
28
  var RsVirtualList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
29
+ name: "RsVirtualList",
6
30
  __name: "RsVirtualList",
7
- props: {
31
+ props: /*@__PURE__*/ mergeModels({
8
32
  items: {},
9
33
  itemSize: {
10
- type: [Number, Function],
34
+ type: [
35
+ Number,
36
+ Function,
37
+ String
38
+ ],
11
39
  default: 32
12
40
  },
41
+ estimateSize: { default: 32 },
13
42
  height: { default: 240 },
14
43
  overscan: { default: 4 },
15
- activeIndex: { default: null },
16
44
  layoutActive: { type: Boolean },
17
- radius: {}
18
- },
19
- setup(__props, { expose: __expose }) {
45
+ radius: {},
46
+ orientation: { default: "vertical" },
47
+ itemKey: {},
48
+ keyboard: {
49
+ type: Boolean,
50
+ default: false
51
+ },
52
+ bordered: {
53
+ type: Boolean,
54
+ default: true
55
+ },
56
+ ariaLabel: {},
57
+ id: {}
58
+ }, {
59
+ "activeIndex": { default: null },
60
+ "activeIndexModifiers": {}
61
+ }),
62
+ emits: /*@__PURE__*/ mergeModels(["scroll", "change"], ["update:activeIndex"]),
63
+ setup(__props, { expose: __expose, emit: __emit }) {
20
64
  const props = __props;
65
+ const activeIndex = useModel(__props, "activeIndex");
66
+ const emit = __emit;
67
+ const attrs = useAttrs();
68
+ const { t } = useRsI18n();
69
+ const config = useRsConfigOptional();
70
+ const uid = useId();
21
71
  const resolvedRadius = useResolvedRsRadius(() => props.radius, "sm");
22
72
  const rootRef = ref(null);
23
- const scrollTop = ref(0);
24
- const measuredHeight = ref(0);
73
+ const scrollOffset = ref(0);
74
+ const measured = ref(0);
75
+ const scrolling = ref(false);
76
+ const rtl = ref(false);
77
+ const measureVersion = ref(0);
78
+ const measuredSizes = /* @__PURE__ */ new Map();
79
+ const indexByEl = /* @__PURE__ */ new WeakMap();
80
+ const observed = /* @__PURE__ */ new Set();
81
+ let resizeObserver = null;
82
+ let itemObserver = null;
83
+ let disposed = false;
84
+ let ignoreActiveScroll = false;
85
+ let layoutGen = 0;
86
+ let layoutFrame = 0;
87
+ let activeFrame = 0;
88
+ let scrollIdle = 0;
89
+ let rtlScrollType = detectRtlScrollType();
25
90
  const fillHeight = computed(() => isVirtualListFillHeight(props.height));
91
+ const horizontal = computed(() => props.orientation === "horizontal");
92
+ const rootId = computed(() => props.id || `rs-virtual-list-${uid}`);
93
+ const listRole = computed(() => {
94
+ if (attrs.role) return void 0;
95
+ return props.keyboard ? "listbox" : void 0;
96
+ });
97
+ const resolvedAriaLabel = computed(() => {
98
+ if (props.ariaLabel) return props.ariaLabel;
99
+ if (attrs["aria-label"] || attrs.ariaLabel) return void 0;
100
+ if (props.keyboard) return t("virtualList.label");
101
+ });
102
+ const emptyLabel = computed(() => t("virtualList.empty"));
26
103
  const heightStyle = computed(() => {
27
104
  const resolved = resolveVirtualListHeight(props.height);
28
105
  return resolved ? { height: resolved } : void 0;
29
106
  });
30
- const rootStyle = computed(() => ({
31
- ...heightStyle.value,
32
- "--rs-virtual-list-radius": rsRadiusCss(resolvedRadius.value)
33
- }));
34
- const fixedItemSize = computed(() => resolveItemSize(props.itemSize));
35
- const viewportHeightPx = computed(() => {
36
- if (typeof props.height === "number" && props.height > 0) return props.height;
37
- if (typeof props.height === "string") {
38
- const parsed = Number.parseInt(props.height, 10);
39
- if (Number.isFinite(parsed) && parsed > 0 && !props.height.includes("%")) return parsed;
107
+ const metrics = computed(() => {
108
+ const version = measureVersion.value;
109
+ return buildVirtualMetrics(props.items.length, props.itemSize, version >= 0 ? measuredSizes : null, resolveItemSize(props.estimateSize));
110
+ });
111
+ const viewportPx = computed(() => {
112
+ if (!horizontal.value) {
113
+ const parsed = parseVirtualListHeightPx(props.height);
114
+ if (parsed != null) return parsed;
40
115
  }
41
- if (measuredHeight.value > 0) return measuredHeight.value;
116
+ if (measured.value > 0) return measured.value;
42
117
  const el = rootRef.value;
43
- if (el && el.clientHeight > 0) return el.clientHeight;
118
+ if (el) {
119
+ const live = horizontal.value ? el.clientWidth : el.clientHeight;
120
+ if (live > 0) return live;
121
+ }
44
122
  return 240;
45
123
  });
46
- let resizeObserver = null;
47
- function syncMeasuredHeight() {
124
+ const contentOffset = computed(() => scrollToContent(scrollOffset.value, metrics.value.total, viewportPx.value, metrics.value.extent));
125
+ const range = computed(() => resolveVisibleRange(props.items.length, contentOffset.value, viewportPx.value, props.overscan, metrics.value));
126
+ const origin = computed(() => windowOrigin(scrollOffset.value, contentOffset.value, range.value.offset));
127
+ const shiftX = computed(() => {
128
+ if (!horizontal.value) return 0;
129
+ return rtl.value ? -origin.value : origin.value;
130
+ });
131
+ const shiftY = computed(() => horizontal.value ? 0 : origin.value);
132
+ const rootStyle = computed(() => ({
133
+ ...heightStyle.value,
134
+ "--rs-virtual-list-radius": rsRadiusCss(resolvedRadius.value),
135
+ "--rs-virtual-list-x": `${shiftX.value}px`,
136
+ "--rs-virtual-list-y": `${shiftY.value}px`
137
+ }));
138
+ const spacerStyle = computed(() => {
139
+ const extent = `${metrics.value.extent}px`;
140
+ return horizontal.value ? {
141
+ width: extent,
142
+ height: "100%"
143
+ } : { height: extent };
144
+ });
145
+ const visibleItems = computed(() => {
146
+ const { start, end } = range.value;
147
+ return props.items.slice(start, end).map((item, index) => {
148
+ const itemIndex = start + index;
149
+ return {
150
+ item,
151
+ index: itemIndex,
152
+ key: props.itemKey ? props.itemKey(item, itemIndex) : itemIndex
153
+ };
154
+ });
155
+ });
156
+ const activeDescendant = computed(() => {
157
+ if (!props.keyboard || activeIndex.value == null || activeIndex.value < 0) return void 0;
158
+ return `${rootId.value}-opt-${activeIndex.value}`;
159
+ });
160
+ function itemStyle(index) {
161
+ if (props.itemSize === "auto") {
162
+ const known = measuredSizes.get(index);
163
+ if (known == null) return void 0;
164
+ const size = `${known}px`;
165
+ return horizontal.value ? { width: size } : { height: size };
166
+ }
167
+ const size = `${metrics.value.sizeAt(index)}px`;
168
+ return horizontal.value ? { width: size } : { height: size };
169
+ }
170
+ function optionId(index) {
171
+ if (!props.keyboard || attrs.role) return void 0;
172
+ return `${rootId.value}-opt-${index}`;
173
+ }
174
+ function isRtlHost() {
175
+ if (config) return resolveDirMode(config.dir.value, config.locale.value) === "rtl";
176
+ const parent = rootRef.value?.parentElement;
177
+ if (parent && typeof getComputedStyle === "function") return getComputedStyle(parent).direction === "rtl";
178
+ return false;
179
+ }
180
+ function syncDir() {
181
+ rtl.value = isRtlHost();
182
+ }
183
+ function axisSize(el) {
184
+ return horizontal.value ? el.clientWidth : el.clientHeight;
185
+ }
186
+ function readRawScroll(el) {
187
+ if (!horizontal.value) return el.scrollTop;
188
+ const max = Math.max(0, el.scrollWidth - el.clientWidth);
189
+ return readHorizontalOffset(el.scrollLeft, max, rtl.value, rtlScrollType);
190
+ }
191
+ function writeRawScroll(el, offset) {
192
+ if (!horizontal.value) {
193
+ el.scrollTop = offset;
194
+ return;
195
+ }
196
+ el.scrollLeft = writeHorizontalOffset(offset, Math.max(0, el.scrollWidth - el.clientWidth), rtl.value, rtlScrollType);
197
+ }
198
+ function syncMeasured() {
48
199
  const el = rootRef.value;
49
200
  if (!el) return;
50
- const next = el.clientHeight;
51
- if (next > 0 && next !== measuredHeight.value) measuredHeight.value = next;
201
+ const next = horizontal.value ? el.clientWidth : el.clientHeight;
202
+ if (next > 0 && next !== measured.value) measured.value = next;
52
203
  }
53
204
  function syncLayoutFromDom() {
54
- syncMeasuredHeight();
205
+ syncDir();
206
+ syncMeasured();
55
207
  const el = rootRef.value;
56
- if (el) scrollTop.value = el.scrollTop;
208
+ if (el) scrollOffset.value = readRawScroll(el);
209
+ }
210
+ function frame(callback) {
211
+ if (typeof requestAnimationFrame !== "function") {
212
+ callback();
213
+ return 0;
214
+ }
215
+ return requestAnimationFrame(callback);
57
216
  }
58
217
  function scheduleLayoutSync() {
218
+ if (disposed) return;
219
+ const gen = ++layoutGen;
59
220
  syncLayoutFromDom();
60
221
  nextTick(() => {
222
+ if (disposed || gen !== layoutGen) return;
61
223
  syncLayoutFromDom();
62
- requestAnimationFrame(() => {
63
- syncLayoutFromDom();
224
+ if (layoutFrame && typeof cancelAnimationFrame === "function") cancelAnimationFrame(layoutFrame);
225
+ layoutFrame = frame(() => {
226
+ layoutFrame = 0;
227
+ if (!disposed && gen === layoutGen) syncLayoutFromDom();
64
228
  });
65
229
  });
66
230
  }
231
+ function markScrolling() {
232
+ if (disposed) return;
233
+ if (!scrolling.value) scrolling.value = true;
234
+ if (scrollIdle) clearTimeout(scrollIdle);
235
+ scrollIdle = setTimeout(() => {
236
+ scrollIdle = 0;
237
+ if (!disposed) scrolling.value = false;
238
+ }, 120);
239
+ }
240
+ function onScroll(event) {
241
+ emit("scroll", event);
242
+ const el = event.currentTarget;
243
+ if (!(el instanceof HTMLElement) || disposed) return;
244
+ const next = readRawScroll(el);
245
+ if (next !== scrollOffset.value) scrollOffset.value = next;
246
+ markScrolling();
247
+ }
248
+ function scrollToIndex(index, align = "center") {
249
+ const el = rootRef.value;
250
+ if (!el || index < 0 || index >= props.items.length) return;
251
+ const view = axisSize(el) > 0 ? axisSize(el) : viewportPx.value;
252
+ const content = scrollToContent(readRawScroll(el), metrics.value.total, view, metrics.value.extent);
253
+ const nextContent = resolveAlignedOffset({
254
+ index,
255
+ align,
256
+ count: props.items.length,
257
+ viewport: view,
258
+ contentOffset: content,
259
+ total: metrics.value.total,
260
+ offsetAt: metrics.value.offsetAt,
261
+ sizeAt: metrics.value.sizeAt
262
+ });
263
+ if (nextContent == null) return;
264
+ writeRawScroll(el, contentToScroll(nextContent, metrics.value.total, view, metrics.value.extent));
265
+ scrollOffset.value = readRawScroll(el);
266
+ }
267
+ function scrollToOffset(offset) {
268
+ const el = rootRef.value;
269
+ if (!el || !Number.isFinite(offset)) return;
270
+ const view = axisSize(el) > 0 ? axisSize(el) : viewportPx.value;
271
+ writeRawScroll(el, contentToScroll(Math.max(0, offset), metrics.value.total, view, metrics.value.extent));
272
+ scrollOffset.value = readRawScroll(el);
273
+ }
274
+ function getScrollOffset() {
275
+ const el = rootRef.value;
276
+ const raw = el ? readRawScroll(el) : scrollOffset.value;
277
+ const view = el && axisSize(el) > 0 ? axisSize(el) : viewportPx.value;
278
+ return scrollToContent(raw, metrics.value.total, view, metrics.value.extent);
279
+ }
280
+ function getViewport() {
281
+ return rootRef.value ?? void 0;
282
+ }
283
+ function focus() {
284
+ rootRef.value?.focus();
285
+ }
286
+ function selectIndex(index, item) {
287
+ if (index < 0 || index >= props.items.length) return;
288
+ activeIndex.value = index;
289
+ emit("change", index, item);
290
+ }
291
+ function onItemClick(index, item) {
292
+ selectIndex(index, item);
293
+ }
294
+ function isTypingTarget(target) {
295
+ if (!(target instanceof HTMLElement)) return false;
296
+ return Boolean(target.closest("input, textarea, select, [contenteditable=\"true\"]"));
297
+ }
298
+ function pageSize() {
299
+ const sample = metrics.value.fixed ?? metrics.value.sizeAt(0);
300
+ if (sample <= 0) return 1;
301
+ return Math.max(1, Math.floor(viewportPx.value / sample));
302
+ }
303
+ function onKeydown(event) {
304
+ if (!props.keyboard || isTypingTarget(event.target)) return;
305
+ const next = resolveVirtualListKeyIndex({
306
+ key: event.key,
307
+ index: activeIndex.value,
308
+ count: props.items.length,
309
+ orientation: props.orientation,
310
+ rtl: rtl.value,
311
+ pageSize: pageSize()
312
+ });
313
+ if (next == null) return;
314
+ event.preventDefault();
315
+ if (next === activeIndex.value) return;
316
+ const item = props.items[next];
317
+ if (item === void 0) return;
318
+ ignoreActiveScroll = true;
319
+ selectIndex(next, item);
320
+ scrollToIndex(next, "nearest");
321
+ }
322
+ function ensureItemObserver() {
323
+ if (itemObserver || props.itemSize !== "auto" || typeof ResizeObserver === "undefined") return;
324
+ itemObserver = new ResizeObserver((entries) => {
325
+ if (disposed || props.itemSize !== "auto") return;
326
+ let changed = false;
327
+ for (const entry of entries) {
328
+ const index = indexByEl.get(entry.target);
329
+ if (index == null) continue;
330
+ if (applyMeasure(index, readVirtualItemBox(entry, props.orientation))) changed = true;
331
+ }
332
+ if (changed) measureVersion.value += 1;
333
+ });
334
+ }
335
+ function applyMeasure(index, next) {
336
+ if (next <= 0) return false;
337
+ const estimate = resolveItemSize(props.estimateSize);
338
+ const prev = measuredSizes.get(index);
339
+ const before = prev ?? estimate;
340
+ if (prev != null && Math.abs(prev - next) < .5) return false;
341
+ measuredSizes.set(index, next);
342
+ if (prev == null && Math.abs(next - estimate) < .5) return false;
343
+ const delta = next - before;
344
+ const el = rootRef.value;
345
+ if (el && delta !== 0 && metrics.value.extent === metrics.value.total && index < range.value.start) {
346
+ writeRawScroll(el, readRawScroll(el) + delta);
347
+ scrollOffset.value = readRawScroll(el);
348
+ }
349
+ return true;
350
+ }
351
+ function bindItem(el, index) {
352
+ if (props.itemSize !== "auto" || !(el instanceof Element)) return;
353
+ indexByEl.set(el, index);
354
+ if (observed.has(el)) return;
355
+ ensureItemObserver();
356
+ observed.add(el);
357
+ itemObserver?.observe(el);
358
+ }
359
+ function sweepObserved() {
360
+ for (const el of observed) if (!el.isConnected) {
361
+ itemObserver?.unobserve(el);
362
+ observed.delete(el);
363
+ }
364
+ }
365
+ function disconnectItemObserver() {
366
+ itemObserver?.disconnect();
367
+ itemObserver = null;
368
+ observed.clear();
369
+ }
370
+ function releaseItemObserver() {
371
+ disconnectItemObserver();
372
+ measuredSizes.clear();
373
+ }
67
374
  onMounted(() => {
375
+ rtlScrollType = detectRtlScrollType();
68
376
  scheduleLayoutSync();
69
377
  const el = rootRef.value;
70
378
  if (!el || typeof ResizeObserver === "undefined") return;
71
- resizeObserver = new ResizeObserver(() => syncMeasuredHeight());
379
+ resizeObserver = new ResizeObserver(() => {
380
+ if (!disposed) syncMeasured();
381
+ });
72
382
  resizeObserver.observe(el);
383
+ if (props.itemSize === "auto") ensureItemObserver();
73
384
  });
74
385
  onActivated(() => {
75
386
  scheduleLayoutSync();
@@ -77,65 +388,103 @@ var RsVirtualList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
77
388
  watch(() => props.layoutActive, (active) => {
78
389
  if (active) scheduleLayoutSync();
79
390
  }, { flush: "post" });
391
+ watch(() => props.items.length, (count) => {
392
+ for (const key of measuredSizes.keys()) if (key >= count) measuredSizes.delete(key);
393
+ });
394
+ watch(() => props.itemSize === "auto", (auto) => {
395
+ if (!auto) {
396
+ releaseItemObserver();
397
+ measureVersion.value += 1;
398
+ return;
399
+ }
400
+ ensureItemObserver();
401
+ });
402
+ watch(() => [range.value.start, range.value.end], () => {
403
+ if (props.itemSize !== "auto") return;
404
+ nextTick(() => {
405
+ if (!disposed) sweepObserved();
406
+ });
407
+ });
408
+ watch(() => [activeIndex.value, props.items.length], async ([index, length]) => {
409
+ if (ignoreActiveScroll) {
410
+ ignoreActiveScroll = false;
411
+ return;
412
+ }
413
+ if (disposed || index == null || index < 0 || length === 0) return;
414
+ await nextTick();
415
+ if (disposed || ignoreActiveScroll) {
416
+ ignoreActiveScroll = false;
417
+ return;
418
+ }
419
+ if (activeFrame && typeof cancelAnimationFrame === "function") cancelAnimationFrame(activeFrame);
420
+ activeFrame = frame(() => {
421
+ activeFrame = 0;
422
+ if (!disposed) scrollToIndex(index);
423
+ });
424
+ }, { immediate: true });
80
425
  onUnmounted(() => {
426
+ disposed = true;
427
+ layoutGen += 1;
428
+ if (typeof cancelAnimationFrame === "function") {
429
+ if (layoutFrame) cancelAnimationFrame(layoutFrame);
430
+ if (activeFrame) cancelAnimationFrame(activeFrame);
431
+ }
432
+ layoutFrame = 0;
433
+ activeFrame = 0;
434
+ if (scrollIdle) clearTimeout(scrollIdle);
435
+ scrollIdle = 0;
81
436
  resizeObserver?.disconnect();
82
437
  resizeObserver = null;
438
+ disconnectItemObserver();
439
+ });
440
+ __expose({
441
+ scrollToIndex,
442
+ scrollToOffset,
443
+ getScrollOffset,
444
+ getViewport,
445
+ focus
83
446
  });
84
- const startIndex = computed(() => Math.max(0, Math.floor(scrollTop.value / fixedItemSize.value) - props.overscan));
85
- const visibleCount = computed(() => Math.ceil(viewportHeightPx.value / fixedItemSize.value) + props.overscan * 2);
86
- const visibleItems = computed(() => props.items.slice(startIndex.value, startIndex.value + visibleCount.value).map((item, index) => ({
87
- item,
88
- index: startIndex.value + index
89
- })));
90
- const totalHeight = computed(() => props.items.length * fixedItemSize.value);
91
- const offsetY = computed(() => startIndex.value * fixedItemSize.value);
92
- function scrollToIndex(index, align = "center") {
93
- const el = rootRef.value;
94
- if (!el || index < 0 || index >= props.items.length) return;
95
- const itemTop = index * fixedItemSize.value;
96
- const itemBottom = itemTop + fixedItemSize.value;
97
- const viewTop = el.scrollTop;
98
- const viewBottom = viewTop + el.clientHeight;
99
- if (align === "nearest" && itemTop >= viewTop && itemBottom <= viewBottom) return;
100
- const maxScroll = Math.max(0, totalHeight.value - el.clientHeight);
101
- let next = itemTop - (el.clientHeight - fixedItemSize.value) / 2;
102
- if (align === "start") next = itemTop;
103
- if (align === "end") next = itemBottom - el.clientHeight;
104
- if (align === "nearest") if (itemTop < viewTop) next = itemTop;
105
- else if (itemBottom > viewBottom) next = itemBottom - el.clientHeight;
106
- else return;
107
- el.scrollTop = Math.min(maxScroll, Math.max(0, next));
108
- scrollTop.value = el.scrollTop;
109
- }
110
- watch(() => [props.activeIndex, props.items.length], async ([index, length]) => {
111
- if (index == null || index < 0 || length === 0) return;
112
- await nextTick();
113
- requestAnimationFrame(() => scrollToIndex(index));
114
- }, { immediate: true });
115
- __expose({ scrollToIndex });
116
447
  return (_ctx, _cache) => {
117
448
  return openBlock(), createElementBlock("div", {
449
+ id: rootId.value,
118
450
  ref_key: "rootRef",
119
451
  ref: rootRef,
120
- class: normalizeClass(["rs-virtual-list", { "rs-virtual-list--fill": fillHeight.value }]),
452
+ class: normalizeClass(["rs-virtual-list", {
453
+ "rs-virtual-list--fill": fillHeight.value,
454
+ "rs-virtual-list--horizontal": horizontal.value,
455
+ "rs-virtual-list--borderless": !__props.bordered,
456
+ "rs-virtual-list--keyboard": __props.keyboard,
457
+ "rs-virtual-list--auto": __props.itemSize === "auto",
458
+ "rs-virtual-list--scrolling": scrolling.value
459
+ }]),
121
460
  style: normalizeStyle(rootStyle.value),
122
- onScroll: _cache[0] || (_cache[0] = ($event) => scrollTop.value = $event.target.scrollTop)
123
- }, [createElementVNode("div", {
461
+ role: listRole.value || void 0,
462
+ "aria-label": resolvedAriaLabel.value || void 0,
463
+ "aria-activedescendant": activeDescendant.value,
464
+ tabindex: __props.keyboard ? 0 : void 0,
465
+ onScroll,
466
+ onKeydown
467
+ }, [__props.items.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_2, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(emptyLabel.value), 1)], true)])) : (openBlock(), createElementBlock("div", {
468
+ key: 1,
124
469
  class: "rs-virtual-list__spacer",
125
- style: normalizeStyle({ height: `${totalHeight.value}px` })
126
- }, [createElementVNode("div", {
127
- class: "rs-virtual-list__items",
128
- style: normalizeStyle({ transform: `translateY(${offsetY.value}px)` })
129
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleItems.value, (entry) => {
470
+ style: normalizeStyle(spacerStyle.value)
471
+ }, [createElementVNode("div", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleItems.value, (entry) => {
130
472
  return openBlock(), createElementBlock("div", {
131
- key: entry.index,
132
- class: normalizeClass(["rs-virtual-list__item", { "rs-virtual-list__item--active": __props.activeIndex === entry.index }]),
133
- style: normalizeStyle({ height: `${fixedItemSize.value}px` })
473
+ key: entry.key,
474
+ ref_for: true,
475
+ ref: (el) => bindItem(el, entry.index),
476
+ class: normalizeClass(["rs-virtual-list__item", { "rs-virtual-list__item--active": activeIndex.value === entry.index }]),
477
+ id: optionId(entry.index),
478
+ role: listRole.value === "listbox" ? "option" : void 0,
479
+ "aria-selected": listRole.value === "listbox" ? activeIndex.value === entry.index ? "true" : "false" : void 0,
480
+ "aria-current": listRole.value === "listbox" ? void 0 : activeIndex.value === entry.index ? "true" : void 0,
481
+ style: normalizeStyle(itemStyle(entry.index)),
482
+ onClick: ($event) => onItemClick(entry.index, entry.item)
134
483
  }, [renderSlot(_ctx.$slots, "default", {
135
484
  item: entry.item,
136
485
  index: entry.index
137
- }, () => [createTextVNode(toDisplayString(entry.item), 1)], true)], 6);
138
- }), 128))], 4)], 4)], 38);
486
+ }, () => [createTextVNode(toDisplayString(entry.item), 1)], true)], 14, _hoisted_4);
487
+ }), 128))])], 4))], 46, _hoisted_1);
139
488
  };
140
489
  }
141
490
  });
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsVirtualList_vue_vue_type_script_setup_true_lang_default from "./RsVirtualList.impl.js";
4
4
 
5
5
  //#region src/components/virtual-list/src/RsVirtualList.vue
6
- var RsVirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsVirtualList_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4d459ccc"]]);
6
+ var RsVirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsVirtualList_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-c4f5f6d4"]]);
7
7
  //#endregion
8
8
  export { RsVirtualList_default as default };
@@ -1,7 +1,70 @@
1
- export type RsVirtualListItemSize = number | ((index: number) => number);
1
+ export type RsVirtualListAlign = 'nearest' | 'center' | 'start' | 'end';
2
+ export type RsVirtualListOrientation = 'vertical' | 'horizontal';
3
+ /** 固定像素、按索引返回像素,或 `'auto'`(量内容)。 */
4
+ export type RsVirtualListItemSize = number | ((index: number) => number) | 'auto';
5
+ export type RsVirtualListItemKey<T> = (item: T, index: number) => string | number;
6
+ export interface RsVirtualListExpose {
7
+ scrollToIndex: (index: number, align?: RsVirtualListAlign) => void;
8
+ scrollToOffset: (offset: number) => void;
9
+ getScrollOffset: () => number;
10
+ getViewport: () => HTMLElement | undefined;
11
+ focus: () => void;
12
+ }
13
+ export type RsVirtualListInstance = RsVirtualListExpose;
14
+ /** Chrome / Firefox 可滚动高度上限之下,避免超长列表把滚动条撑爆。 */
15
+ export declare const RS_VIRTUAL_LIST_MAX_EXTENT = 8000000;
16
+ export type RsRtlScrollType = 'default' | 'negative' | 'reverse';
17
+ export interface RsVirtualMetrics {
18
+ /** 定高时为行高;函数 / auto 时为 null。 */
19
+ fixed: number | null;
20
+ total: number;
21
+ extent: number;
22
+ sizeAt: (index: number) => number;
23
+ offsetAt: (index: number) => number;
24
+ }
2
25
  export declare function resolveItemSize(itemSize: RsVirtualListItemSize, index?: number): number;
3
26
  export declare function resolveVirtualListHeight(height?: number | string, fallback?: number): string | undefined;
4
27
  /** height 为 0 / 百分比时由父级撑满,组件内用 ResizeObserver 测量可视高度 */
5
28
  export declare function isVirtualListFillHeight(height?: number | string): boolean;
6
29
  /** 解析虚拟列表数值视口高度;百分比 / 填满模式返回 null,交由测量值处理 */
7
30
  export declare function parseVirtualListHeightPx(height?: number | string): number | null;
31
+ export declare function normalizeOverscan(value: number | undefined, fallback?: number): number;
32
+ export declare function capExtent(total: number, max?: number): number;
33
+ export declare function axisMax(total: number, viewport: number): number;
34
+ /** 内容偏移 → 滚动条偏移。未触顶时二者相同。 */
35
+ export declare function contentToScroll(content: number, total: number, viewport: number, extent: number): number;
36
+ /** 滚动条偏移 → 内容偏移。未触顶时二者相同。 */
37
+ export declare function scrollToContent(scroll: number, total: number, viewport: number, extent: number): number;
38
+ /** 窗口在滚动内容里的平移。scale 为 1 时等于条目偏移。 */
39
+ export declare function windowOrigin(scroll: number, contentOffset: number, itemOffset: number): number;
40
+ export declare function buildVirtualMetrics(count: number, itemSize: RsVirtualListItemSize, measured?: ReadonlyMap<number, number> | null, estimate?: number): RsVirtualMetrics;
41
+ export declare function findIndexAtOffset(count: number, offset: number, metrics: RsVirtualMetrics): number;
42
+ export declare function resolveVisibleRange(count: number, contentOffset: number, viewport: number, overscan: number | undefined, metrics: RsVirtualMetrics): {
43
+ start: number;
44
+ end: number;
45
+ offset: number;
46
+ };
47
+ export declare function resolveAlignedOffset(options: {
48
+ index: number;
49
+ align: RsVirtualListAlign;
50
+ count: number;
51
+ viewport: number;
52
+ contentOffset: number;
53
+ total: number;
54
+ offsetAt: (index: number) => number;
55
+ sizeAt: (index: number) => number;
56
+ }): number | null;
57
+ export declare function readHorizontalOffset(scrollLeft: number, max: number, rtl: boolean, type: RsRtlScrollType): number;
58
+ export declare function writeHorizontalOffset(offset: number, max: number, rtl: boolean, type: RsRtlScrollType): number;
59
+ /** 探测当前引擎的 RTL scrollLeft。探测节点用完即删。无 document 时按 default。 */
60
+ export declare function detectRtlScrollType(): RsRtlScrollType;
61
+ export declare function resetRtlScrollTypeCache(): void;
62
+ export declare function resolveVirtualListKeyIndex(options: {
63
+ key: string;
64
+ index: number | null;
65
+ count: number;
66
+ orientation: RsVirtualListOrientation;
67
+ rtl: boolean;
68
+ pageSize: number;
69
+ }): number | null;
70
+ export declare function readVirtualItemBox(entry: ResizeObserverEntry, orientation: RsVirtualListOrientation): number;