niuma-ui 2.0.4 → 2.0.9

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 (279) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/dist/components/_shared/index.d.ts +2 -2
  3. package/dist/components/_shared/src/overlay-utils.d.ts +44 -1
  4. package/dist/components/_shared/src/overlay-utils.js +87 -2
  5. package/dist/components/_shared/src/reka.js +2 -2
  6. package/dist/components/alert/index.d.ts +1 -0
  7. package/dist/components/alert/src/RsAlert.css +120 -65
  8. package/dist/components/alert/src/RsAlert.d.ts +24 -5
  9. package/dist/components/alert/src/RsAlert.impl.js +108 -36
  10. package/dist/components/alert/src/RsAlert.js +1 -1
  11. package/dist/components/alert/src/alert-utils.d.ts +37 -0
  12. package/dist/components/alert/src/alert-utils.js +71 -0
  13. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +1 -1
  14. package/dist/components/button/src/RsButton.impl.js +1 -1
  15. package/dist/components/card/src/RsCard.d.ts +1 -1
  16. package/dist/components/code-block/index.d.ts +1 -0
  17. package/dist/components/code-block/src/RsCodeBlock.css +93 -52
  18. package/dist/components/code-block/src/RsCodeBlock.d.ts +36 -9
  19. package/dist/components/code-block/src/RsCodeBlock.impl.js +203 -84
  20. package/dist/components/code-block/src/RsCodeBlock.js +1 -1
  21. package/dist/components/code-block/src/code-block-highlight.d.ts +4 -0
  22. package/dist/components/code-block/src/code-block-highlight.js +34 -0
  23. package/dist/components/code-block/src/code-block-utils.d.ts +23 -0
  24. package/dist/components/code-block/src/code-block-utils.js +71 -0
  25. package/dist/components/code-editor/index.d.ts +1 -1
  26. package/dist/components/code-editor/src/RsCodeEditor.css +118 -92
  27. package/dist/components/code-editor/src/RsCodeEditor.d.ts +14 -3
  28. package/dist/components/code-editor/src/RsCodeEditor.impl.js +261 -94
  29. package/dist/components/code-editor/src/RsCodeEditor.js +1 -1
  30. package/dist/components/code-editor/src/code-editor-utils.d.ts +15 -0
  31. package/dist/components/code-editor/src/code-editor-utils.js +36 -1
  32. package/dist/components/code-editor/src/code-mirror-completion.d.ts +1 -1
  33. package/dist/components/code-editor/src/code-mirror-completion.js +8 -5
  34. package/dist/components/code-editor/src/code-mirror-diagnostics.d.ts +2 -3
  35. package/dist/components/code-editor/src/code-mirror-diagnostics.js +3 -4
  36. package/dist/components/code-editor/src/code-mirror-ghost.d.ts +1 -1
  37. package/dist/components/code-editor/src/code-mirror-ghost.js +12 -3
  38. package/dist/components/code-editor/src/code-mirror-inline-edit.js +8 -3
  39. package/dist/components/code-editor/src/code-mirror-intel.d.ts +2 -2
  40. package/dist/components/code-editor/src/code-mirror-intel.js +50 -39
  41. package/dist/components/code-editor/src/code-mirror-lang.js +4 -0
  42. package/dist/components/code-editor/src/code-mirror-session.d.ts +13 -0
  43. package/dist/components/code-editor/src/code-mirror-session.js +30 -0
  44. package/dist/components/context-menu/index.d.ts +1 -1
  45. package/dist/components/context-menu/src/RsContextMenu.css +115 -89
  46. package/dist/components/context-menu/src/RsContextMenu.d.ts +32 -11
  47. package/dist/components/context-menu/src/RsContextMenu.impl.js +795 -48
  48. package/dist/components/context-menu/src/RsContextMenuItems.d.ts +25 -1
  49. package/dist/components/context-menu/src/RsContextMenuItems.impl.js +110 -61
  50. package/dist/components/context-menu/src/context-menu-utils.d.ts +89 -3
  51. package/dist/components/context-menu/src/context-menu-utils.js +168 -3
  52. package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
  53. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
  54. package/dist/components/descriptions/index.d.ts +1 -1
  55. package/dist/components/descriptions/src/RsDescriptions.css +38 -11
  56. package/dist/components/descriptions/src/RsDescriptions.d.ts +20 -4
  57. package/dist/components/descriptions/src/RsDescriptions.impl.js +89 -19
  58. package/dist/components/descriptions/src/RsDescriptionsItem.impl.js +13 -6
  59. package/dist/components/descriptions/src/descriptions-utils.d.ts +19 -0
  60. package/dist/components/descriptions/src/descriptions-utils.js +39 -1
  61. package/dist/components/dialog/index.d.ts +1 -1
  62. package/dist/components/dialog/src/RsConfirmDialog.css +47 -21
  63. package/dist/components/dialog/src/RsConfirmDialog.d.ts +19 -7
  64. package/dist/components/dialog/src/RsConfirmDialog.impl.js +349 -119
  65. package/dist/components/dialog/src/RsConfirmDialog.js +2 -1
  66. package/dist/components/dialog/src/RsDialog.css +102 -109
  67. package/dist/components/dialog/src/RsDialog.d.ts +34 -24
  68. package/dist/components/dialog/src/RsDialog.impl.js +410 -177
  69. package/dist/components/dialog/src/RsDialog.js +2 -1
  70. package/dist/components/dialog/src/dialog-utils.d.ts +40 -1
  71. package/dist/components/dialog/src/dialog-utils.js +152 -1
  72. package/dist/components/dialog/src/dialog-window.js +29 -8
  73. package/dist/components/drawer/index.d.ts +1 -1
  74. package/dist/components/drawer/src/RsDrawer.css +61 -29
  75. package/dist/components/drawer/src/RsDrawer.d.ts +37 -21
  76. package/dist/components/drawer/src/RsDrawer.impl.js +441 -223
  77. package/dist/components/drawer/src/drawer-utils.d.ts +35 -0
  78. package/dist/components/drawer/src/drawer-utils.js +131 -1
  79. package/dist/components/dropdown/index.d.ts +1 -1
  80. package/dist/components/dropdown/src/RsDropdown.css +140 -61
  81. package/dist/components/dropdown/src/RsDropdown.d.ts +39 -6
  82. package/dist/components/dropdown/src/RsDropdown.impl.js +693 -63
  83. package/dist/components/dropdown/src/RsDropdownItemView.impl.js +17 -7
  84. package/dist/components/dropdown/src/RsDropdownItems.d.ts +32 -3
  85. package/dist/components/dropdown/src/RsDropdownItems.impl.js +171 -59
  86. package/dist/components/dropdown/src/dropdown-utils.d.ts +50 -0
  87. package/dist/components/dropdown/src/dropdown-utils.js +103 -3
  88. package/dist/components/empty/index.d.ts +1 -0
  89. package/dist/components/empty/src/RsEmpty.css +105 -23
  90. package/dist/components/empty/src/RsEmpty.d.ts +27 -4
  91. package/dist/components/empty/src/RsEmpty.impl.js +154 -11
  92. package/dist/components/empty/src/RsEmpty.js +2 -1
  93. package/dist/components/empty/src/empty-utils.d.ts +28 -0
  94. package/dist/components/empty/src/empty-utils.js +55 -0
  95. package/dist/components/form/src/RsForm.d.ts +1 -1
  96. package/dist/components/input-number/src/RsInputNumber.d.ts +1 -1
  97. package/dist/components/label/src/RsLabel.d.ts +1 -1
  98. package/dist/components/loading/index.d.ts +1 -0
  99. package/dist/components/loading/src/RsLoading.css +13 -97
  100. package/dist/components/loading/src/RsLoading.d.ts +52 -2
  101. package/dist/components/loading/src/RsLoading.impl.js +216 -33
  102. package/dist/components/loading/src/RsLoading.js +2 -1
  103. package/dist/components/loading/src/loading-status.css +210 -0
  104. package/dist/components/loading/src/loading-status.d.ts +34 -0
  105. package/dist/components/loading/src/loading-status.impl.js +84 -0
  106. package/dist/components/loading/src/loading-status.js +8 -0
  107. package/dist/components/loading/src/loading-utils.d.ts +51 -4
  108. package/dist/components/loading/src/loading-utils.js +122 -0
  109. package/dist/components/loading-bar/index.d.ts +1 -0
  110. package/dist/components/loading-bar/src/RsLoadingBar.css +72 -8
  111. package/dist/components/loading-bar/src/RsLoadingBar.d.ts +55 -11
  112. package/dist/components/loading-bar/src/RsLoadingBar.impl.js +298 -57
  113. package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
  114. package/dist/components/loading-bar/src/loading-bar-utils.d.ts +69 -0
  115. package/dist/components/loading-bar/src/loading-bar-utils.js +97 -0
  116. package/dist/components/log/src/RsLog.css +52 -144
  117. package/dist/components/log/src/RsLog.d.ts +12 -11
  118. package/dist/components/log/src/RsLog.impl.js +181 -148
  119. package/dist/components/log/src/RsLog.js +1 -1
  120. package/dist/components/log/src/RsLogRow.css +152 -0
  121. package/dist/components/log/src/RsLogRow.d.ts +35 -0
  122. package/dist/components/log/src/RsLogRow.impl.js +91 -0
  123. package/dist/components/log/src/RsLogRow.js +8 -0
  124. package/dist/components/log/src/log-utils.d.ts +8 -0
  125. package/dist/components/log/src/log-utils.js +71 -10
  126. package/dist/components/markdown/index.d.ts +1 -1
  127. package/dist/components/markdown/src/RsMarkdown.css +75 -32
  128. package/dist/components/markdown/src/RsMarkdown.d.ts +6 -2
  129. package/dist/components/markdown/src/RsMarkdown.impl.js +185 -17
  130. package/dist/components/markdown/src/markdown-utils.d.ts +26 -0
  131. package/dist/components/markdown/src/markdown-utils.js +114 -12
  132. package/dist/components/mentions/src/RsMentions.d.ts +2 -2
  133. package/dist/components/menu/index.d.ts +1 -1
  134. package/dist/components/menu/src/RsMenu.css +70 -29
  135. package/dist/components/menu/src/RsMenu.d.ts +58 -4
  136. package/dist/components/menu/src/RsMenu.impl.js +93 -46
  137. package/dist/components/menu/src/RsMenuItems.d.ts +22 -5
  138. package/dist/components/menu/src/RsMenuItems.impl.js +506 -154
  139. package/dist/components/menu/src/menu-utils.d.ts +56 -0
  140. package/dist/components/menu/src/menu-utils.js +139 -6
  141. package/dist/components/monaco-editor/index.d.ts +1 -1
  142. package/dist/components/monaco-editor/src/RsMonacoEditor.css +28 -16
  143. package/dist/components/monaco-editor/src/RsMonacoEditor.d.ts +39 -41
  144. package/dist/components/monaco-editor/src/RsMonacoEditor.impl.js +212 -133
  145. package/dist/components/monaco-editor/src/RsMonacoEditor.js +1 -1
  146. package/dist/components/monaco-editor/src/monaco-editor-utils.d.ts +126 -0
  147. package/dist/components/monaco-editor/src/monaco-editor-utils.js +302 -0
  148. package/dist/components/pagination/index.d.ts +2 -2
  149. package/dist/components/pagination/src/RsPagination.css +93 -46
  150. package/dist/components/pagination/src/RsPagination.d.ts +68 -8
  151. package/dist/components/pagination/src/RsPagination.impl.js +229 -86
  152. package/dist/components/pagination/src/RsPagination.js +1 -1
  153. package/dist/components/pagination/src/pagination-utils.d.ts +59 -0
  154. package/dist/components/pagination/src/pagination-utils.js +105 -1
  155. package/dist/components/popover/index.d.ts +1 -0
  156. package/dist/components/popover/src/RsPopover.css +124 -14
  157. package/dist/components/popover/src/RsPopover.d.ts +38 -7
  158. package/dist/components/popover/src/RsPopover.impl.js +546 -35
  159. package/dist/components/popover/src/RsPopover.js +2 -1
  160. package/dist/components/popover/src/popover-utils.d.ts +24 -2
  161. package/dist/components/popover/src/popover-utils.js +55 -0
  162. package/dist/components/sidebar/index.d.ts +1 -0
  163. package/dist/components/sidebar/src/RsSidebar.css +91 -33
  164. package/dist/components/sidebar/src/RsSidebar.d.ts +17 -9
  165. package/dist/components/sidebar/src/RsSidebar.impl.js +124 -22
  166. package/dist/components/sidebar/src/RsSidebar.js +1 -1
  167. package/dist/components/sidebar/src/RsSidebarGroup.css +23 -6
  168. package/dist/components/sidebar/src/RsSidebarGroup.d.ts +6 -2
  169. package/dist/components/sidebar/src/RsSidebarGroup.impl.js +17 -4
  170. package/dist/components/sidebar/src/RsSidebarGroup.js +1 -1
  171. package/dist/components/sidebar/src/RsSidebarItem.css +50 -20
  172. package/dist/components/sidebar/src/RsSidebarItem.d.ts +21 -3
  173. package/dist/components/sidebar/src/RsSidebarItem.impl.js +71 -20
  174. package/dist/components/sidebar/src/RsSidebarItem.js +1 -1
  175. package/dist/components/sidebar/src/sidebar-utils.d.ts +47 -0
  176. package/dist/components/sidebar/src/sidebar-utils.js +72 -0
  177. package/dist/components/split-pane/index.d.ts +2 -2
  178. package/dist/components/split-pane/src/RsSplitPane.css +41 -30
  179. package/dist/components/split-pane/src/RsSplitPane.d.ts +6 -2
  180. package/dist/components/split-pane/src/RsSplitPane.impl.js +153 -45
  181. package/dist/components/split-pane/src/split-pane-utils.d.ts +23 -0
  182. package/dist/components/split-pane/src/split-pane-utils.js +18 -1
  183. package/dist/components/stat-card/index.d.ts +1 -0
  184. package/dist/components/stat-card/src/RsStatCard.css +129 -25
  185. package/dist/components/stat-card/src/RsStatCard.d.ts +40 -4
  186. package/dist/components/stat-card/src/RsStatCard.impl.js +106 -12
  187. package/dist/components/stat-card/src/RsStatCard.js +1 -1
  188. package/dist/components/stat-card/src/stat-card-utils.d.ts +39 -0
  189. package/dist/components/stat-card/src/stat-card-utils.js +113 -0
  190. package/dist/components/steps/index.d.ts +1 -1
  191. package/dist/components/steps/src/RsSteps.css +158 -37
  192. package/dist/components/steps/src/RsSteps.d.ts +69 -5
  193. package/dist/components/steps/src/RsSteps.impl.js +168 -28
  194. package/dist/components/steps/src/RsSteps.js +1 -1
  195. package/dist/components/steps/src/steps-utils.d.ts +51 -1
  196. package/dist/components/steps/src/steps-utils.js +67 -1
  197. package/dist/components/table/src/RsTable.impl.js +4 -2
  198. package/dist/components/table/src/composables/useRsTableContextMenu.d.ts +16 -0
  199. package/dist/components/table/src/composables/useRsTableContextMenu.js +1 -1
  200. package/dist/components/table/src/composables/useRsTableEngine.js +6 -2
  201. package/dist/components/table/src/composables/useRsTableScrollLayout.js +2 -0
  202. package/dist/components/table/src/composables/useRsTableShell.d.ts +16 -0
  203. package/dist/components/table/src/rs-table-props.d.ts +1 -1
  204. package/dist/components/table/src/rs-table-props.js +0 -1
  205. package/dist/components/table/src/table-body/RsTableBody.impl.js +1 -0
  206. package/dist/components/table/src/table-body/RsTableCellEditor.impl.js +10 -2
  207. package/dist/components/table/src/table-body/RsTableColGroup.impl.js +1 -0
  208. package/dist/components/table/src/table-footer/RsTableSummaryRow.impl.js +1 -0
  209. package/dist/components/table/src/table-header/RsTableHeader.impl.js +1 -0
  210. package/dist/components/table/src/utils/table-utils.d.ts +10 -6
  211. package/dist/components/table/src/utils/table-utils.js +27 -25
  212. package/dist/components/table/style/rs-table.css +34 -20
  213. package/dist/components/tabs/index.d.ts +2 -2
  214. package/dist/components/tabs/src/RsTabs.css +225 -101
  215. package/dist/components/tabs/src/RsTabs.d.ts +37 -8
  216. package/dist/components/tabs/src/RsTabs.impl.js +400 -270
  217. package/dist/components/tabs/src/tabs-utils.d.ts +41 -2
  218. package/dist/components/tabs/src/tabs-utils.js +55 -1
  219. package/dist/components/terminal/index.d.ts +1 -1
  220. package/dist/components/terminal/src/RsTerminal.css +60 -37
  221. package/dist/components/terminal/src/RsTerminal.d.ts +36 -4
  222. package/dist/components/terminal/src/RsTerminal.impl.js +288 -68
  223. package/dist/components/terminal/src/RsTerminal.js +1 -1
  224. package/dist/components/terminal/src/terminal-utils.d.ts +42 -4
  225. package/dist/components/terminal/src/terminal-utils.js +113 -10
  226. package/dist/components/textarea/src/RsTextarea.d.ts +1 -1
  227. package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
  228. package/dist/components/toaster/src/RsToaster.css +156 -203
  229. package/dist/components/toaster/src/RsToaster.d.ts +32 -2
  230. package/dist/components/toaster/src/RsToaster.impl.js +309 -34
  231. package/dist/components/toaster/src/toast-store.d.ts +95 -0
  232. package/dist/components/toaster/src/toast-store.js +177 -0
  233. package/dist/components/toaster/src/toast-utils.d.ts +60 -0
  234. package/dist/components/toaster/src/toast-utils.js +86 -0
  235. package/dist/components/toolbar/index.d.ts +1 -1
  236. package/dist/components/toolbar/src/RsToolbar.css +206 -32
  237. package/dist/components/toolbar/src/RsToolbar.d.ts +41 -16
  238. package/dist/components/toolbar/src/RsToolbar.impl.js +146 -18
  239. package/dist/components/toolbar/src/RsToolbar.js +2 -1
  240. package/dist/components/toolbar/src/toolbar-utils.d.ts +20 -0
  241. package/dist/components/toolbar/src/toolbar-utils.js +105 -0
  242. package/dist/components/tooltip/index.d.ts +1 -0
  243. package/dist/components/tooltip/src/RsTooltip.css +104 -26
  244. package/dist/components/tooltip/src/RsTooltip.d.ts +38 -16
  245. package/dist/components/tooltip/src/RsTooltip.impl.js +420 -51
  246. package/dist/components/tooltip/src/RsTooltip.js +2 -1
  247. package/dist/components/tooltip/src/RsTooltipProvider.d.ts +4 -4
  248. package/dist/components/tooltip/src/RsTooltipProvider.impl.js +51 -14
  249. package/dist/components/tooltip/src/tooltip-utils.d.ts +30 -0
  250. package/dist/components/tooltip/src/tooltip-utils.js +23 -0
  251. package/dist/components/tree/index.d.ts +2 -2
  252. package/dist/components/tree/src/RsTree.css +84 -75
  253. package/dist/components/tree/src/RsTree.d.ts +20 -20
  254. package/dist/components/tree/src/RsTree.impl.js +292 -66
  255. package/dist/components/tree/src/RsTree.js +1 -1
  256. package/dist/components/tree/src/tree-utils.d.ts +22 -0
  257. package/dist/components/tree/src/tree-utils.js +18 -4
  258. package/dist/components/tree-select/src/RsTreeSelect.d.ts +1 -1
  259. package/dist/components/virtual-list/index.d.ts +1 -1
  260. package/dist/components/virtual-list/src/RsVirtualList.css +64 -9
  261. package/dist/components/virtual-list/src/RsVirtualList.d.ts +31 -5
  262. package/dist/components/virtual-list/src/RsVirtualList.impl.js +425 -76
  263. package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
  264. package/dist/components/virtual-list/src/virtual-list-utils.d.ts +64 -1
  265. package/dist/components/virtual-list/src/virtual-list-utils.js +215 -1
  266. package/dist/composables/useRsLoadingBar.d.ts +2 -5
  267. package/dist/composables/useRsLoadingBar.js +21 -5
  268. package/dist/composables/useRsTabsNav.d.ts +3 -1
  269. package/dist/composables/useRsTabsNav.js +96 -28
  270. package/dist/composables/useRsToast.d.ts +11 -13
  271. package/dist/composables/useRsToast.js +66 -17
  272. package/dist/index.d.ts +30 -21
  273. package/dist/index.js +14 -0
  274. package/dist/locale/apply.js +6 -1
  275. package/dist/locale/messages.js +128 -2
  276. package/dist/styles.css +460 -797
  277. package/dist/theme/brand.example.css +2 -1
  278. package/dist/vite-plugins/niuma-ui-host.js +1 -1
  279. package/package.json +2 -3
@@ -1,5 +1,8 @@
1
1
  //#region src/components/virtual-list/src/virtual-list-utils.ts
2
+ /** Chrome / Firefox 可滚动高度上限之下,避免超长列表把滚动条撑爆。 */
3
+ var RS_VIRTUAL_LIST_MAX_EXTENT = 8e6;
2
4
  function resolveItemSize(itemSize, index = 0) {
5
+ if (itemSize === "auto") return 32;
3
6
  const size = typeof itemSize === "function" ? itemSize(index) : itemSize;
4
7
  return Number.isFinite(size) && size > 0 ? size : 32;
5
8
  }
@@ -24,5 +27,216 @@ function parseVirtualListHeightPx(height) {
24
27
  }
25
28
  return null;
26
29
  }
30
+ function normalizeOverscan(value, fallback = 4) {
31
+ if (value == null || !Number.isFinite(value)) return fallback;
32
+ return Math.max(0, Math.floor(value));
33
+ }
34
+ function capExtent(total, max = RS_VIRTUAL_LIST_MAX_EXTENT) {
35
+ if (!Number.isFinite(total) || total <= 0) return 0;
36
+ return Math.min(total, max);
37
+ }
38
+ function axisMax(total, viewport) {
39
+ return Math.max(0, total - Math.max(0, viewport));
40
+ }
41
+ /** 内容偏移 → 滚动条偏移。未触顶时二者相同。 */
42
+ function contentToScroll(content, total, viewport, extent) {
43
+ const contentMax = axisMax(total, viewport);
44
+ const scrollMax = axisMax(extent, viewport);
45
+ if (contentMax === 0 || scrollMax === 0) return 0;
46
+ return Math.min(1, Math.max(0, content / contentMax)) * scrollMax;
47
+ }
48
+ /** 滚动条偏移 → 内容偏移。未触顶时二者相同。 */
49
+ function scrollToContent(scroll, total, viewport, extent) {
50
+ const contentMax = axisMax(total, viewport);
51
+ const scrollMax = axisMax(extent, viewport);
52
+ if (contentMax === 0 || scrollMax === 0) return 0;
53
+ return Math.min(1, Math.max(0, scroll / scrollMax)) * contentMax;
54
+ }
55
+ /** 窗口在滚动内容里的平移。scale 为 1 时等于条目偏移。 */
56
+ function windowOrigin(scroll, contentOffset, itemOffset) {
57
+ return scroll + itemOffset - contentOffset;
58
+ }
59
+ function buildVirtualMetrics(count, itemSize, measured, estimate = 32) {
60
+ const countSafe = Number.isFinite(count) && count > 0 ? Math.floor(count) : 0;
61
+ const estimatePx = resolveItemSize(estimate);
62
+ if (itemSize !== "auto" && typeof itemSize !== "function") {
63
+ const size = resolveItemSize(itemSize);
64
+ const total = countSafe * size;
65
+ return {
66
+ fixed: size,
67
+ total,
68
+ extent: capExtent(total),
69
+ sizeAt: () => size,
70
+ offsetAt: (index) => {
71
+ if (countSafe <= 0) return 0;
72
+ if (index >= countSafe) return total;
73
+ return Math.max(0, index) * size;
74
+ }
75
+ };
76
+ }
77
+ const sizes = new Array(countSafe);
78
+ const offsets = new Array(countSafe);
79
+ let total = 0;
80
+ for (let index = 0; index < countSafe; index += 1) {
81
+ let size = estimatePx;
82
+ if (itemSize === "auto") {
83
+ const known = measured?.get(index);
84
+ if (known != null && known > 0) size = known;
85
+ } else size = resolveItemSize(itemSize, index);
86
+ sizes[index] = size;
87
+ offsets[index] = total;
88
+ total += size;
89
+ }
90
+ return {
91
+ fixed: null,
92
+ total,
93
+ extent: capExtent(total),
94
+ sizeAt: (index) => {
95
+ if (index < 0 || index >= countSafe) return estimatePx;
96
+ return sizes[index] ?? estimatePx;
97
+ },
98
+ offsetAt: (index) => {
99
+ if (countSafe <= 0 || index <= 0) return 0;
100
+ if (index >= countSafe) return total;
101
+ return offsets[index] ?? total;
102
+ }
103
+ };
104
+ }
105
+ function findIndexAtOffset(count, offset, metrics) {
106
+ if (count <= 0) return 0;
107
+ const target = Math.max(0, offset);
108
+ if (metrics.fixed) return Math.min(count - 1, Math.floor(target / metrics.fixed));
109
+ let lo = 0;
110
+ let hi = count - 1;
111
+ let answer = 0;
112
+ while (lo <= hi) {
113
+ const mid = lo + hi >> 1;
114
+ if (metrics.offsetAt(mid) <= target) {
115
+ answer = mid;
116
+ lo = mid + 1;
117
+ } else hi = mid - 1;
118
+ }
119
+ return answer;
120
+ }
121
+ function resolveVisibleRange(count, contentOffset, viewport, overscan, metrics) {
122
+ if (count <= 0) return {
123
+ start: 0,
124
+ end: 0,
125
+ offset: 0
126
+ };
127
+ const over = normalizeOverscan(overscan);
128
+ const scroll = Math.max(0, contentOffset);
129
+ if (metrics.fixed) {
130
+ const start = Math.max(0, Math.floor(scroll / metrics.fixed) - over);
131
+ const visible = Math.ceil(Math.max(0, viewport) / metrics.fixed) + over * 2;
132
+ return {
133
+ start,
134
+ end: Math.min(count, start + visible),
135
+ offset: metrics.offsetAt(start)
136
+ };
137
+ }
138
+ const startIndex = findIndexAtOffset(count, scroll, metrics);
139
+ const endIndex = findIndexAtOffset(count, scroll + Math.max(0, viewport), metrics);
140
+ const start = Math.max(0, startIndex - over);
141
+ return {
142
+ start,
143
+ end: Math.min(count, endIndex + 1 + over),
144
+ offset: metrics.offsetAt(start)
145
+ };
146
+ }
147
+ function resolveAlignedOffset(options) {
148
+ const { index, align, count, viewport, contentOffset, total, offsetAt, sizeAt } = options;
149
+ if (index < 0 || index >= count) return null;
150
+ const itemTop = offsetAt(index);
151
+ const itemSize = sizeAt(index);
152
+ const itemBottom = itemTop + itemSize;
153
+ const viewTop = contentOffset;
154
+ const viewBottom = viewTop + viewport;
155
+ const maxScroll = axisMax(total, viewport);
156
+ if (align === "nearest" && itemTop >= viewTop && itemBottom <= viewBottom) return null;
157
+ let next = itemTop - (viewport - itemSize) / 2;
158
+ if (align === "start") next = itemTop;
159
+ if (align === "end") next = itemBottom - viewport;
160
+ if (align === "nearest") if (itemTop < viewTop) next = itemTop;
161
+ else if (itemBottom > viewBottom) next = itemBottom - viewport;
162
+ else return null;
163
+ return Math.min(maxScroll, Math.max(0, next));
164
+ }
165
+ function readHorizontalOffset(scrollLeft, max, rtl, type) {
166
+ if (!rtl || type === "default") return Math.max(0, scrollLeft);
167
+ if (type === "negative") return Math.abs(scrollLeft);
168
+ return Math.max(0, max - scrollLeft);
169
+ }
170
+ function writeHorizontalOffset(offset, max, rtl, type) {
171
+ const next = Math.min(Math.max(0, max), Math.max(0, offset));
172
+ if (!rtl || type === "default") return next;
173
+ if (type === "negative") return -next;
174
+ return Math.max(0, max - next);
175
+ }
176
+ var cachedRtlScrollType = null;
177
+ /** 探测当前引擎的 RTL scrollLeft。探测节点用完即删。无 document 时按 default。 */
178
+ function detectRtlScrollType() {
179
+ if (cachedRtlScrollType) return cachedRtlScrollType;
180
+ if (typeof document === "undefined" || !document.body) return "default";
181
+ const dummy = document.createElement("div");
182
+ const inner = document.createElement("div");
183
+ dummy.dir = "rtl";
184
+ dummy.style.cssText = "width:4px;height:1px;position:absolute;top:-9999px;overflow:scroll;visibility:hidden";
185
+ inner.style.cssText = "width:8px;height:1px";
186
+ dummy.appendChild(inner);
187
+ document.body.appendChild(dummy);
188
+ try {
189
+ const initial = dummy.scrollLeft;
190
+ dummy.scrollLeft = -1;
191
+ if (dummy.scrollLeft < 0) cachedRtlScrollType = "negative";
192
+ else if (initial > 0) cachedRtlScrollType = "reverse";
193
+ else cachedRtlScrollType = "default";
194
+ } finally {
195
+ dummy.remove();
196
+ }
197
+ return cachedRtlScrollType;
198
+ }
199
+ function resolveVirtualListKeyIndex(options) {
200
+ const { count } = options;
201
+ if (count <= 0) return null;
202
+ let motion = null;
203
+ const key = options.key;
204
+ if (options.orientation === "vertical") {
205
+ if (key === "ArrowDown") motion = 1;
206
+ else if (key === "ArrowUp") motion = -1;
207
+ else if (key === "PageDown") motion = "page-down";
208
+ else if (key === "PageUp") motion = "page-up";
209
+ else if (key === "Home") motion = "home";
210
+ else if (key === "End") motion = "end";
211
+ } else {
212
+ const forward = options.rtl ? "ArrowLeft" : "ArrowRight";
213
+ const backward = options.rtl ? "ArrowRight" : "ArrowLeft";
214
+ if (key === forward) motion = 1;
215
+ else if (key === backward) motion = -1;
216
+ else if (key === "Home") motion = "home";
217
+ else if (key === "End") motion = "end";
218
+ }
219
+ if (motion == null) return null;
220
+ const current = options.index;
221
+ const page = Math.max(1, Math.floor(options.pageSize) || 1);
222
+ if (motion === "home") return 0;
223
+ if (motion === "end") return count - 1;
224
+ if (motion === "page-down") {
225
+ const base = current == null || current < 0 ? -1 : current;
226
+ return Math.min(count - 1, base + page);
227
+ }
228
+ if (motion === "page-up") return Math.max(0, (current == null || current < 0 ? 0 : current) - page);
229
+ if (current == null || current < 0) return motion > 0 ? 0 : count - 1;
230
+ return Math.min(count - 1, Math.max(0, current + motion));
231
+ }
232
+ function readVirtualItemBox(entry, orientation) {
233
+ const box = entry.borderBoxSize?.[0];
234
+ if (box) {
235
+ const value = orientation === "horizontal" ? box.inlineSize : box.blockSize;
236
+ if (value > 0) return value;
237
+ }
238
+ const rect = orientation === "horizontal" ? entry.contentRect.width : entry.contentRect.height;
239
+ return Math.max(0, rect);
240
+ }
27
241
  //#endregion
28
- export { isVirtualListFillHeight, parseVirtualListHeightPx, resolveItemSize, resolveVirtualListHeight };
242
+ export { RS_VIRTUAL_LIST_MAX_EXTENT, axisMax, buildVirtualMetrics, capExtent, contentToScroll, detectRtlScrollType, findIndexAtOffset, isVirtualListFillHeight, normalizeOverscan, parseVirtualListHeightPx, readHorizontalOffset, readVirtualItemBox, resolveAlignedOffset, resolveItemSize, resolveVirtualListHeight, resolveVirtualListKeyIndex, resolveVisibleRange, scrollToContent, windowOrigin, writeHorizontalOffset };
@@ -1,9 +1,6 @@
1
1
  import { type InjectionKey, type ShallowRef } from 'vue';
2
- export type RsLoadingBarApi = {
3
- start: () => void;
4
- finish: () => void;
5
- error: () => void;
6
- };
2
+ import type { RsLoadingBarApi } from '../components/loading-bar/src/loading-bar-utils';
3
+ export type { RsLoadingBarApi } from '../components/loading-bar/src/loading-bar-utils';
7
4
  export declare const RS_LOADING_BAR_KEY: InjectionKey<ShallowRef<RsLoadingBarApi | null>>;
8
5
  /**
9
6
  * useRsLoadingBar 读取最近的 RsLoadingBar 实例 API。
@@ -1,6 +1,15 @@
1
1
  import { inject } from "vue";
2
2
  //#region src/composables/useRsLoadingBar.ts
3
3
  var RS_LOADING_BAR_KEY = Symbol("rs-loading-bar");
4
+ var noop = {
5
+ start() {},
6
+ finish() {},
7
+ error() {},
8
+ set() {},
9
+ inc() {},
10
+ getProgress: () => 0,
11
+ isStarted: () => false
12
+ };
4
13
  /**
5
14
  * useRsLoadingBar 读取最近的 RsLoadingBar 实例 API。
6
15
  * 调用方须位于 RsLoadingBar 默认插槽的后代树中;
@@ -8,11 +17,6 @@ var RS_LOADING_BAR_KEY = Symbol("rs-loading-bar");
8
17
  */
9
18
  function useRsLoadingBar() {
10
19
  const injected = inject(RS_LOADING_BAR_KEY, null);
11
- const noop = {
12
- start() {},
13
- finish() {},
14
- error() {}
15
- };
16
20
  if (!injected) return noop;
17
21
  return {
18
22
  start() {
@@ -23,6 +27,18 @@ function useRsLoadingBar() {
23
27
  },
24
28
  error() {
25
29
  injected.value?.error();
30
+ },
31
+ set(progress) {
32
+ injected.value?.set(progress);
33
+ },
34
+ inc(amount) {
35
+ injected.value?.inc(amount);
36
+ },
37
+ getProgress() {
38
+ return injected.value?.getProgress() ?? 0;
39
+ },
40
+ isStarted() {
41
+ return injected.value?.isStarted() ?? false;
26
42
  }
27
43
  };
28
44
  }
@@ -1,5 +1,5 @@
1
1
  import { type ComputedRef, type Ref } from 'vue';
2
- import { type RsTabItem, type RsTabsOverflow } from '../components/tabs/src/tabs-utils';
2
+ import { type RsTabItem, type RsTabsOverflow, type RsTabsPosition } from '../components/tabs/src/tabs-utils';
3
3
  interface UseRsTabsNavOptions {
4
4
  items: ComputedRef<RsTabItem[]>;
5
5
  activeValue: Ref<string>;
@@ -11,6 +11,7 @@ interface UseRsTabsNavOptions {
11
11
  /** 右侧 #extra 区域,计入下拉溢出预留宽度 */
12
12
  extraRef?: Ref<HTMLElement | null>;
13
13
  addButtonWidth: number;
14
+ position?: ComputedRef<RsTabsPosition>;
14
15
  }
15
16
  export declare function useRsTabsNav(options: UseRsTabsNavOptions): {
16
17
  navViewportRef: Ref<HTMLElement | null, HTMLElement | null>;
@@ -29,5 +30,6 @@ export declare function useRsTabsNav(options: UseRsTabsNavOptions): {
29
30
  scrollNav: (direction: -1 | 1) => void;
30
31
  onNavScroll: () => void;
31
32
  scheduleLayout: () => void;
33
+ axis: ComputedRef<"x" | "y">;
32
34
  };
33
35
  export {};
@@ -1,4 +1,4 @@
1
- import { resolveVisibleTabValues } from "../components/tabs/src/tabs-utils.js";
1
+ import { isVerticalTabsPosition, resolveVisibleTabValues } from "../components/tabs/src/tabs-utils.js";
2
2
  import { computed, nextTick, onMounted, onUnmounted, ref, watch } from "vue";
3
3
  //#region src/composables/useRsTabsNav.ts
4
4
  function useRsTabsNav(options) {
@@ -8,6 +8,10 @@ function useRsTabsNav(options) {
8
8
  const canScrollPrev = ref(false);
9
9
  const canScrollNext = ref(false);
10
10
  let resizeObserver = null;
11
+ let disposed = false;
12
+ let layoutRaf = 0;
13
+ let boundViewport = null;
14
+ const axis = computed(() => isVerticalTabsPosition(options.position?.value ?? "top") ? "y" : "x");
11
15
  const useDropdownOverflow = computed(() => options.overflow.value === "dropdown");
12
16
  const useScrollOverflow = computed(() => options.overflow.value === "scroll");
13
17
  const visibleTabItems = computed(() => options.items.value.filter((item) => visibleValues.value.has(item.value)));
@@ -18,13 +22,16 @@ function useRsTabsNav(options) {
18
22
  })));
19
23
  const activeInHidden = computed(() => hiddenItems.value.some((item) => item.value === options.activeValue.value));
20
24
  const showOverflowMenu = computed(() => useDropdownOverflow.value && hiddenItems.value.length > 0);
25
+ function measureAlongAxis(node) {
26
+ return axis.value === "y" ? node.offsetHeight : node.offsetWidth;
27
+ }
21
28
  function measureTriggerWidths() {
22
29
  const measureRoot = options.measureRef.value;
23
30
  if (measureRoot) {
24
31
  const next = /* @__PURE__ */ new Map();
25
32
  for (const node of measureRoot.querySelectorAll("[data-tab-value]")) {
26
33
  const value = node.dataset.tabValue;
27
- if (value) next.set(value, node.offsetWidth);
34
+ if (value) next.set(value, measureAlongAxis(node));
28
35
  }
29
36
  if (next.size > 0) return next;
30
37
  }
@@ -33,16 +40,21 @@ function useRsTabsNav(options) {
33
40
  if (!viewport) return next;
34
41
  for (const trigger of viewport.querySelectorAll(".rs-tabs__trigger[data-tab-value]")) {
35
42
  const value = trigger.dataset.tabValue;
36
- if (value) next.set(value, trigger.offsetWidth);
43
+ if (value) next.set(value, measureAlongAxis(trigger));
37
44
  }
38
45
  return next;
39
46
  }
40
- function reservedWidth() {
41
- let width = 0;
42
- if (useDropdownOverflow.value && options.items.value.length > 1) width += options.overflowRef.value?.offsetWidth ?? 76;
43
- if (options.canAdd.value) width += options.addButtonWidth;
44
- width += options.extraRef?.value?.offsetWidth ?? 0;
45
- return width;
47
+ function reservedSize() {
48
+ let size = 0;
49
+ if (useDropdownOverflow.value && options.items.value.length > 1) {
50
+ const overflowNode = options.overflowRef.value;
51
+ const overflowFallback = axis.value === "y" ? 36 : 76;
52
+ size += overflowNode ? measureAlongAxis(overflowNode) : overflowFallback;
53
+ }
54
+ if (options.canAdd.value) size += options.addButtonWidth;
55
+ const extra = options.extraRef?.value;
56
+ if (extra) size += measureAlongAxis(extra);
57
+ return size;
46
58
  }
47
59
  function recomputeVisibleTabs() {
48
60
  if (!useDropdownOverflow.value) {
@@ -52,8 +64,8 @@ function useRsTabsNav(options) {
52
64
  const nav = options.navRef.value;
53
65
  if (!nav) return;
54
66
  triggerWidths.value = measureTriggerWidths();
55
- const availableWidth = nav.clientWidth;
56
- visibleValues.value = resolveVisibleTabValues(options.items.value, triggerWidths.value, availableWidth, options.activeValue.value, reservedWidth(), { keepActiveVisible: false });
67
+ const available = axis.value === "y" ? nav.clientHeight : nav.clientWidth;
68
+ visibleValues.value = resolveVisibleTabValues(options.items.value, triggerWidths.value, available, options.activeValue.value, reservedSize(), { keepActiveVisible: false });
57
69
  }
58
70
  function updateScrollButtons() {
59
71
  const viewport = navViewportRef.value;
@@ -62,39 +74,87 @@ function useRsTabsNav(options) {
62
74
  canScrollNext.value = false;
63
75
  return;
64
76
  }
77
+ if (axis.value === "y") {
78
+ canScrollPrev.value = viewport.scrollTop > 1;
79
+ canScrollNext.value = viewport.scrollTop + viewport.clientHeight < viewport.scrollHeight - 1;
80
+ return;
81
+ }
65
82
  canScrollPrev.value = viewport.scrollLeft > 1;
66
83
  canScrollNext.value = viewport.scrollLeft + viewport.clientWidth < viewport.scrollWidth - 1;
67
84
  }
68
85
  function scrollNav(direction) {
69
- navViewportRef.value?.scrollBy({
70
- left: direction * 180,
86
+ const viewport = navViewportRef.value;
87
+ if (!viewport) return;
88
+ const delta = direction * 180;
89
+ if (axis.value === "y") {
90
+ viewport.scrollBy({
91
+ top: delta,
92
+ behavior: "smooth"
93
+ });
94
+ return;
95
+ }
96
+ viewport.scrollBy({
97
+ left: delta,
71
98
  behavior: "smooth"
72
99
  });
73
100
  }
74
101
  function onNavScroll() {
75
102
  updateScrollButtons();
76
103
  }
104
+ function scrollElementIntoView(el, viewport) {
105
+ if (axis.value === "y") {
106
+ const top = el.offsetTop;
107
+ const bottom = top + el.offsetHeight;
108
+ if (top < viewport.scrollTop) viewport.scrollTop = top;
109
+ else if (bottom > viewport.scrollTop + viewport.clientHeight) viewport.scrollTop = bottom - viewport.clientHeight;
110
+ return;
111
+ }
112
+ const left = el.offsetLeft;
113
+ const right = left + el.offsetWidth;
114
+ if (left < viewport.scrollLeft) viewport.scrollLeft = left;
115
+ else if (right > viewport.scrollLeft + viewport.clientWidth) viewport.scrollLeft = right - viewport.clientWidth;
116
+ }
77
117
  async function scrollActiveTabIntoView() {
78
118
  if (!useScrollOverflow.value) return;
79
119
  await nextTick();
120
+ if (disposed) return;
80
121
  const viewport = navViewportRef.value;
81
122
  if (!viewport) return;
82
- viewport.querySelector(`.rs-tabs__trigger[data-state='active']`)?.scrollIntoView({
83
- inline: "nearest",
84
- block: "nearest",
85
- behavior: "smooth"
86
- });
123
+ const active = viewport.querySelector(`.rs-tabs__trigger[data-state='active']`);
124
+ if (active) scrollElementIntoView(active, viewport);
87
125
  updateScrollButtons();
88
126
  }
127
+ function onNavWheel(event) {
128
+ if (disposed || !useScrollOverflow.value || axis.value === "y") return;
129
+ const viewport = navViewportRef.value;
130
+ if (!viewport) return;
131
+ if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) return;
132
+ if (viewport.scrollWidth <= viewport.clientWidth) return;
133
+ event.preventDefault();
134
+ viewport.scrollLeft += event.deltaY;
135
+ onNavScroll();
136
+ }
137
+ function unbindWheel() {
138
+ if (!boundViewport) return;
139
+ boundViewport.removeEventListener("wheel", onNavWheel);
140
+ boundViewport = null;
141
+ }
142
+ function bindWheel() {
143
+ const viewport = navViewportRef.value;
144
+ unbindWheel();
145
+ if (!viewport || !useScrollOverflow.value || axis.value === "y") return;
146
+ viewport.addEventListener("wheel", onNavWheel, { passive: false });
147
+ boundViewport = viewport;
148
+ }
89
149
  function scheduleLayout() {
90
- nextTick(() => {
150
+ if (disposed) return;
151
+ if (layoutRaf) cancelAnimationFrame(layoutRaf);
152
+ layoutRaf = requestAnimationFrame(() => {
153
+ layoutRaf = 0;
154
+ if (disposed) return;
91
155
  recomputeVisibleTabs();
92
156
  updateScrollButtons();
93
- if (!useDropdownOverflow.value) return;
94
- nextTick(() => {
95
- recomputeVisibleTabs();
96
- updateScrollButtons();
97
- });
157
+ bindWheel();
98
158
  });
99
159
  }
100
160
  onMounted(() => {
@@ -105,18 +165,25 @@ function useRsTabsNav(options) {
105
165
  resizeObserver.observe(nav);
106
166
  });
107
167
  onUnmounted(() => {
168
+ disposed = true;
169
+ if (layoutRaf) cancelAnimationFrame(layoutRaf);
170
+ layoutRaf = 0;
171
+ unbindWheel();
108
172
  resizeObserver?.disconnect();
109
173
  resizeObserver = null;
110
174
  });
111
175
  watch(() => [
112
- options.items.value,
176
+ options.items.value.map((item) => item.value).join("\0"),
177
+ options.items.value.map((item) => `${item.label}\0${item.icon ?? ""}\0${item.badge ?? ""}`).join("\n"),
113
178
  options.overflow.value,
114
- options.canAdd.value
115
- ], () => scheduleLayout(), { deep: true });
179
+ options.canAdd.value,
180
+ axis.value
181
+ ].join("\n"), () => scheduleLayout());
116
182
  watch(options.activeValue, () => {
117
183
  scheduleLayout();
118
184
  scrollActiveTabIntoView();
119
185
  });
186
+ watch(navViewportRef, () => bindWheel());
120
187
  return {
121
188
  navViewportRef,
122
189
  useDropdownOverflow,
@@ -130,7 +197,8 @@ function useRsTabsNav(options) {
130
197
  canScrollNext,
131
198
  scrollNav,
132
199
  onNavScroll,
133
- scheduleLayout
200
+ scheduleLayout,
201
+ axis
134
202
  };
135
203
  }
136
204
  //#endregion
@@ -1,15 +1,13 @@
1
- import type { RsToastPosition, RsToastType } from '../components/_shared/src/overlay-utils';
2
- export type { RsToastPosition, RsToastType };
3
- export type RsToastInput = string | {
4
- title: string;
5
- description?: string;
6
- position?: RsToastPosition;
7
- duration?: number;
8
- };
1
+ import { type RsToastInput, type RsToastKind, type RsToastOptions, type RsToastPromiseMessages, type RsToastAction } from '../components/toaster/src/toast-utils';
2
+ export type { RsToastAction, RsToastInput, RsToastKind, RsToastOptions, RsToastPromiseMessages, };
9
3
  export declare function useRsToast(): {
10
- success: (input: RsToastInput) => void;
11
- error: (input: RsToastInput) => void;
12
- info: (input: RsToastInput) => void;
13
- warning: (input: RsToastInput) => void;
14
- dismiss: (id?: number | string) => string | number | undefined;
4
+ success: (input: RsToastInput) => string;
5
+ error: (input: RsToastInput) => string;
6
+ info: (input: RsToastInput) => string;
7
+ warning: (input: RsToastInput) => string;
8
+ message: (input: RsToastInput) => string;
9
+ loading: (input: RsToastInput) => string;
10
+ promise: <T>(task: Promise<T> | (() => Promise<T>), data: RsToastPromiseMessages<T>) => string;
11
+ update: (id: string, input: RsToastInput, type?: RsToastKind) => void;
12
+ dismiss: (id?: string | number) => void;
15
13
  };
@@ -1,29 +1,78 @@
1
- import { toast } from "vue-sonner";
1
+ import { resolveRsMessage } from "../locale/registry.js";
2
+ import { rsConfigKey } from "./useRsConfig.js";
3
+ import { readDocumentLocale } from "../locale/apply.js";
4
+ import { errorToastText, normalizePromiseMessage, normalizeRsToastInput } from "../components/toaster/src/toast-utils.js";
5
+ import { dismissRsToast, pushRsToast, rsToasts } from "../components/toaster/src/toast-store.js";
6
+ import { getCurrentInstance, inject } from "vue";
2
7
  //#region src/composables/useRsToast.ts
3
- function resolveToast(input) {
4
- if (typeof input === "string") return { title: input };
5
- return input;
8
+ function show(type, input, duration) {
9
+ const payload = normalizeRsToastInput(input);
10
+ return pushRsToast({
11
+ ...payload,
12
+ type,
13
+ duration: duration ?? payload.duration
14
+ });
15
+ }
16
+ /** 在 setup 里跟 ConfigProvider;在 setup 外跟 document / 本机语言。回调里不再调用 inject。 */
17
+ function createToastTranslator() {
18
+ const config = getCurrentInstance() ? inject(rsConfigKey, null) : null;
19
+ return (key) => resolveRsMessage(config?.locale.value ?? readDocumentLocale(), key) ?? key;
6
20
  }
7
21
  function useRsToast() {
8
- function show(type, input) {
9
- const payload = resolveToast(input);
10
- const options = {
11
- description: payload.description,
12
- ...payload.position ? { position: payload.position } : {},
13
- ...payload.duration ? { duration: payload.duration } : {},
14
- class: `rs-toast rs-toast--${type}`
15
- };
16
- if (type === "success") toast.success(payload.title, options);
17
- else if (type === "error") toast.error(payload.title, options);
18
- else if (type === "warning") toast.warning(payload.title, options);
19
- else toast.info(payload.title, options);
22
+ const t = createToastTranslator();
23
+ function update(id, input, type) {
24
+ const current = rsToasts.value.find((item) => item.id === id);
25
+ if (!current) return;
26
+ const payload = normalizeRsToastInput(input);
27
+ const typeChanged = type != null && type !== current.type;
28
+ pushRsToast({
29
+ type: type ?? current.type,
30
+ title: payload.title,
31
+ description: payload.description ?? current.description,
32
+ position: payload.position ?? current.position,
33
+ duration: payload.duration ?? (typeChanged && type !== "loading" ? void 0 : current.duration),
34
+ id,
35
+ toasterId: payload.toasterId ?? current.toasterId,
36
+ dismissible: payload.dismissible ?? current.dismissible,
37
+ closeButton: payload.closeButton ?? current.closeButton,
38
+ richColors: payload.richColors ?? current.richColors,
39
+ action: payload.action ?? current.action,
40
+ cancel: payload.cancel ?? current.cancel,
41
+ onDismiss: payload.onDismiss ?? current.onDismiss,
42
+ onAutoClose: payload.onAutoClose ?? current.onAutoClose
43
+ });
44
+ }
45
+ function promise(task, data) {
46
+ const loading = normalizeRsToastInput(data.loading);
47
+ const id = pushRsToast({
48
+ ...loading,
49
+ type: "loading",
50
+ duration: loading.duration ?? Number.POSITIVE_INFINITY,
51
+ id: data.id ?? loading.id,
52
+ toasterId: data.toasterId ?? loading.toasterId
53
+ });
54
+ const run = typeof task === "function" ? task() : task;
55
+ Promise.resolve(run).then((value) => {
56
+ const next = normalizePromiseMessage(data.success, value) ?? { title: t("toaster.done") };
57
+ update(id, next, "success");
58
+ }, (error) => {
59
+ const next = normalizePromiseMessage(data.error, error) ?? { title: errorToastText(error) || t("toaster.failed") };
60
+ update(id, next, "error");
61
+ });
62
+ return id;
20
63
  }
21
64
  return {
22
65
  success: (input) => show("success", input),
23
66
  error: (input) => show("error", input),
24
67
  info: (input) => show("info", input),
25
68
  warning: (input) => show("warning", input),
26
- dismiss: toast.dismiss
69
+ message: (input) => show("default", input),
70
+ loading: (input) => show("loading", input, normalizeRsToastInput(input).duration ?? Number.POSITIVE_INFINITY),
71
+ promise,
72
+ update,
73
+ dismiss: (id) => {
74
+ dismissRsToast(id == null || id === "" ? void 0 : String(id));
75
+ }
27
76
  };
28
77
  }
29
78
  //#endregion