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,43 +1,79 @@
1
- import { DropdownMenuContent, DropdownMenuItem, DropdownMenuPortal, DropdownMenuRoot, DropdownMenuTrigger, TabsContent, TabsList, TabsRoot, TabsTrigger } from "../../_shared/src/reka.js";
1
+ import { useRsConfigOptional } from "../../../composables/useRsConfig.js";
2
+ import { resolveDirMode } from "../../../locale/apply.js";
2
3
  import { useRsI18n } from "../../../composables/useRsI18n.js";
3
4
  import RsIcon_default from "../../icon/src/RsIcon.js";
4
- import { buildTabContextMenuItems, getNextTabAfterBatchClose, getNextTabAfterClose, isTabClosable, isTabFixed, isTabRenamable, resolveTabsToClose } from "./tabs-utils.js";
5
+ import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
6
+ import RsDropdown_default from "../../dropdown/src/RsDropdown.js";
7
+ import { buildTabContextMenuItems, getAdjacentTabValue, getEdgeTabValue, getNextTabAfterBatchClose, getNextTabAfterClose, isTabClosable, isTabFixed, isTabRenamable, isVerticalTabsPosition, resolveTabKeyboardMove, resolveTabsSize, resolveTabsToClose, shouldRenderTabPanel, tabPanelId, tabTriggerId } from "./tabs-utils.js";
5
8
  import { useRsTabsNav } from "../../../composables/useRsTabsNav.js";
6
9
  import RsContextMenu_default from "../../context-menu/src/RsContextMenu.js";
7
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useModel, useSlots, vModelText, withCtx, withDirectives, withKeys, withModifiers } from "vue";
10
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, onUnmounted, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useId, useModel, useSlots, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
8
11
  //#region src/components/tabs/src/RsTabs.vue?vue&type=script&setup=true&lang.ts
9
- var _hoisted_1 = ["data-tab-value"];
10
- var _hoisted_2 = { class: "rs-tabs__label" };
11
- var _hoisted_3 = {
12
+ var _hoisted_1 = ["id"];
13
+ var _hoisted_2 = ["data-tab-value"];
14
+ var _hoisted_3 = { class: "rs-tabs__label" };
15
+ var _hoisted_4 = {
12
16
  key: 1,
13
17
  class: "rs-tabs__badge"
14
18
  };
15
- var _hoisted_4 = ["aria-label"];
16
- var _hoisted_5 = [
19
+ var _hoisted_5 = ["aria-label"];
20
+ var _hoisted_6 = ["aria-label", "aria-orientation"];
21
+ var _hoisted_7 = [
22
+ "id",
23
+ "aria-selected",
24
+ "aria-controls",
25
+ "tabindex",
26
+ "disabled",
27
+ "data-state",
28
+ "data-tab-value",
29
+ "data-fixed",
30
+ "draggable",
31
+ "onClick",
32
+ "onDragstart",
33
+ "onDragover",
34
+ "onDragleave",
35
+ "onDrop",
36
+ "onAuxclick"
37
+ ];
38
+ var _hoisted_8 = {
39
+ key: 0,
40
+ class: "rs-tabs__drag",
41
+ "aria-hidden": "true"
42
+ };
43
+ var _hoisted_9 = [
17
44
  "aria-label",
18
45
  "placeholder",
19
46
  "onKeydown",
20
47
  "onBlur"
21
48
  ];
22
- var _hoisted_6 = ["title", "onDblclick"];
23
- var _hoisted_7 = {
24
- key: 4,
49
+ var _hoisted_10 = ["title", "onDblclick"];
50
+ var _hoisted_11 = {
51
+ key: 5,
25
52
  class: "rs-tabs__badge"
26
53
  };
27
- var _hoisted_8 = [
54
+ var _hoisted_12 = [
28
55
  "aria-label",
29
56
  "disabled",
30
57
  "onClick"
31
58
  ];
32
- var _hoisted_9 = { class: "rs-tabs__more-label" };
33
- var _hoisted_10 = ["aria-label"];
34
- var _hoisted_11 = ["aria-label"];
35
- var _hoisted_12 = { class: "rs-tabs__panel-inner" };
59
+ var _hoisted_13 = ["aria-label"];
60
+ var _hoisted_14 = { class: "rs-tabs__more-label" };
61
+ var _hoisted_15 = ["aria-label"];
62
+ var _hoisted_16 = ["aria-label"];
63
+ var _hoisted_17 = [
64
+ "id",
65
+ "hidden",
66
+ "data-state",
67
+ "aria-labelledby",
68
+ "tabindex"
69
+ ];
70
+ var _hoisted_18 = { class: "rs-tabs__panel-inner" };
36
71
  var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
72
+ name: "RsTabs",
37
73
  __name: "RsTabs",
38
74
  props: /*@__PURE__*/ mergeModels({
39
75
  items: {},
40
- size: { default: "md" },
76
+ size: {},
41
77
  variant: { default: "line" },
42
78
  panelless: {
43
79
  type: Boolean,
@@ -49,6 +85,8 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
49
85
  },
50
86
  contentGap: { default: "none" },
51
87
  justify: { default: "start" },
88
+ tabPosition: { default: "top" },
89
+ activation: { default: "automatic" },
52
90
  closable: {
53
91
  type: Boolean,
54
92
  default: false
@@ -66,6 +104,10 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
66
104
  type: Boolean,
67
105
  default: false
68
106
  },
107
+ showDragHandle: {
108
+ type: Boolean,
109
+ default: true
110
+ },
69
111
  overflow: {
70
112
  type: [String, Boolean],
71
113
  default: false
@@ -74,12 +116,23 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
74
116
  type: Boolean,
75
117
  default: false
76
118
  },
77
- beforeLeave: {}
119
+ beforeLeave: {},
120
+ lazy: {
121
+ type: Boolean,
122
+ default: false
123
+ },
124
+ destroyInactive: {
125
+ type: Boolean,
126
+ default: true
127
+ },
128
+ id: {},
129
+ ariaLabel: {}
78
130
  }, {
79
131
  "modelValue": { required: true },
80
132
  "modelModifiers": {}
81
133
  }),
82
134
  emits: /*@__PURE__*/ mergeModels([
135
+ "change",
83
136
  "close",
84
137
  "closeBatch",
85
138
  "add",
@@ -87,24 +140,40 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
87
140
  "reorder",
88
141
  "contextMenu"
89
142
  ], ["update:modelValue"]),
90
- setup(__props, { emit: __emit }) {
143
+ setup(__props, { expose: __expose, emit: __emit }) {
91
144
  const model = useModel(__props, "modelValue");
92
145
  const props = __props;
93
146
  const emit = __emit;
94
147
  const slots = useSlots();
95
- const { t } = useRsI18n();
148
+ const { t, locale } = useRsI18n();
149
+ const config = useRsConfigOptional();
150
+ const autoId = useId();
96
151
  const itemsRef = computed(() => props.items);
97
152
  const overflowMode = computed(() => props.overflow);
153
+ const positionRef = computed(() => props.tabPosition);
98
154
  const hasExtra = computed(() => Boolean(slots.extra));
99
155
  const canAdd = computed(() => {
100
156
  if (!props.addable) return false;
101
157
  if (props.maxCount == null) return true;
102
158
  return props.items.length < props.maxCount;
103
159
  });
160
+ const resolvedSize = useResolvedRsComponentSize(() => props.size);
161
+ const tabSize = computed(() => resolveTabsSize(resolvedSize.value));
162
+ const writingDir = computed(() => resolveDirMode(config?.dir.value ?? "auto", locale.value));
163
+ const vertical = computed(() => isVerticalTabsPosition(props.tabPosition));
164
+ const rootId = computed(() => props.id || `rs-tabs${autoId.replace(/[^a-zA-Z0-9_-]/g, "")}`);
165
+ const navLabel = computed(() => props.ariaLabel || t("tabs.label"));
166
+ const tabIconPx = computed(() => {
167
+ if (tabSize.value === "sm") return 12;
168
+ if (tabSize.value === "lg") return 16;
169
+ return 14;
170
+ });
171
+ const chromeIconPx = computed(() => tabSize.value === "lg" ? 14 : 12);
104
172
  const navRef = ref(null);
105
173
  const measureRef = ref(null);
106
174
  const overflowWrapRef = ref(null);
107
175
  const extraRef = ref(null);
176
+ const triggerEls = /* @__PURE__ */ new Map();
108
177
  const { navViewportRef, useDropdownOverflow, useScrollOverflow, visibleTabItems, hiddenItems, overflowMenuItems, activeInHidden, showOverflowMenu, canScrollPrev, canScrollNext, scrollNav, onNavScroll, scheduleLayout } = useRsTabsNav({
109
178
  items: itemsRef,
110
179
  activeValue: model,
@@ -114,14 +183,35 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
114
183
  measureRef,
115
184
  overflowRef: overflowWrapRef,
116
185
  extraRef,
117
- addButtonWidth: 36
186
+ addButtonWidth: 36,
187
+ position: positionRef
118
188
  });
119
189
  const renamingValue = ref(null);
120
190
  const renameDraft = ref("");
121
191
  const dragValue = ref(null);
122
192
  const dragOverValue = ref(null);
193
+ const focusedValue = ref(model.value);
194
+ const visited = ref(new Set(model.value ? [model.value] : []));
123
195
  let renameInputEl = null;
124
196
  let leaveLock = false;
197
+ watch(model, (value) => {
198
+ focusedValue.value = value;
199
+ if (!value || visited.value.has(value)) return;
200
+ const next = new Set(visited.value);
201
+ next.add(value);
202
+ visited.value = next;
203
+ });
204
+ watch(() => props.items.map((item) => item.value).join("\0"), () => {
205
+ const values = new Set(props.items.map((item) => item.value));
206
+ visited.value = new Set([...visited.value].filter((value) => values.has(value)));
207
+ });
208
+ function setTriggerRef(value, el) {
209
+ if (el instanceof HTMLButtonElement) {
210
+ triggerEls.set(value, el);
211
+ return;
212
+ }
213
+ triggerEls.delete(value);
214
+ }
125
215
  function setRenameInputRef(el, item) {
126
216
  if (!(el instanceof HTMLInputElement) || renamingValue.value !== item.value) return;
127
217
  renameInputEl = el;
@@ -133,7 +223,7 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
133
223
  const tabBarItems = computed(() => useDropdownOverflow.value ? visibleTabItems.value : props.items);
134
224
  const moreLabel = computed(() => {
135
225
  if (activeInHidden.value) return props.items.find((item) => item.value === model.value)?.label ?? t("tabs.more");
136
- if (hiddenItems.value.length > 0) return `${t("tabs.more")} (${hiddenItems.value.length})`;
226
+ if (hiddenItems.value.length > 0) return t("tabs.moreCount", { count: hiddenItems.value.length });
137
227
  return t("tabs.more");
138
228
  });
139
229
  const contextMenuLabels = computed(() => ({
@@ -143,40 +233,57 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
143
233
  closeRight: t("tabs.closeRight"),
144
234
  closeAll: t("tabs.closeAll")
145
235
  }));
236
+ const contextMenuMap = computed(() => {
237
+ if (!props.contextMenu) return /* @__PURE__ */ new Map();
238
+ const map = /* @__PURE__ */ new Map();
239
+ for (const item of props.items) map.set(item.value, buildTabContextMenuItems(props.items, item, props.closable, contextMenuLabels.value));
240
+ return map;
241
+ });
146
242
  function closeAriaLabel(item) {
147
- return t("tabs.close", "Close {label}").replace("{label}", item.label);
243
+ return t("tabs.close", { label: item.label });
148
244
  }
149
245
  function contextItemsFor(item) {
150
- return buildTabContextMenuItems(props.items, item, props.closable, contextMenuLabels.value);
246
+ return contextMenuMap.value.get(item.value) ?? [];
151
247
  }
152
248
  function labelTitle(item) {
153
249
  return item.label.length > 12 ? item.label : void 0;
154
250
  }
251
+ function panelVisible(value) {
252
+ return shouldRenderTabPanel(value, model.value, visited.value, props.lazy, props.destroyInactive);
253
+ }
254
+ function setActive(value) {
255
+ if (model.value === value) return;
256
+ model.value = value;
257
+ focusedValue.value = value;
258
+ emit("change", value);
259
+ }
155
260
  async function onSelectTab(next) {
156
261
  const value = String(next);
157
- if (value === model.value || leaveLock) return;
262
+ if (value === model.value || leaveLock) return value === model.value;
263
+ if (props.items.find((item) => item.value === value)?.disabled) return false;
158
264
  if (props.beforeLeave) {
159
265
  leaveLock = true;
160
266
  try {
161
- if (await props.beforeLeave(value, model.value) === false) return;
267
+ if (await props.beforeLeave(value, model.value) === false) return false;
162
268
  } finally {
163
269
  leaveLock = false;
164
270
  }
165
271
  }
166
- model.value = value;
272
+ setActive(value);
273
+ return true;
167
274
  }
168
275
  function applyCloseValues(values, action, anchor) {
169
276
  if (!values.length) return;
170
277
  if (action === "close" && values.length === 1) {
171
278
  const closed = values[0];
172
279
  const next = getNextTabAfterClose(props.items, closed, model.value);
173
- if (next && model.value === closed) model.value = next;
280
+ if (next && model.value === closed) setActive(next);
174
281
  emit("close", closed);
175
282
  return;
176
283
  }
177
284
  const next = getNextTabAfterBatchClose(props.items.filter((item) => !values.includes(item.value)), model.value, anchor);
178
- if (next !== void 0 && next !== model.value) model.value = next;
179
- else if (next === void 0) model.value = "";
285
+ if (next !== void 0 && next !== model.value) setActive(next);
286
+ else if (next === void 0 && model.value !== "") setActive("");
180
287
  emit("closeBatch", values, action, anchor);
181
288
  }
182
289
  function onCloseTab(item) {
@@ -209,17 +316,6 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
209
316
  event.preventDefault();
210
317
  onCloseTab(item);
211
318
  }
212
- /** 纵向滚轮转为横向滚动(scroll 溢出模式) */
213
- function onNavWheel(event) {
214
- if (!useScrollOverflow.value) return;
215
- const viewport = navViewportRef.value;
216
- if (!viewport) return;
217
- if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) return;
218
- if (viewport.scrollWidth <= viewport.clientWidth) return;
219
- event.preventDefault();
220
- viewport.scrollLeft += event.deltaY;
221
- onNavScroll();
222
- }
223
319
  async function startRename(item) {
224
320
  if (!isTabRenamable(item, props.renamable) || item.disabled) return;
225
321
  renamingValue.value = item.value;
@@ -274,251 +370,285 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
274
370
  dragValue.value = null;
275
371
  dragOverValue.value = null;
276
372
  }
373
+ async function moveFocus(value) {
374
+ focusedValue.value = value;
375
+ await nextTick();
376
+ triggerEls.get(value)?.focus();
377
+ if (props.activation === "automatic") onSelectTab(value);
378
+ }
379
+ function onTabListKeydown(event) {
380
+ if (renamingValue.value) return;
381
+ const move = resolveTabKeyboardMove(event.key, props.tabPosition, writingDir.value === "rtl");
382
+ if (move === "start" || move === "end") {
383
+ const next = getEdgeTabValue(tabBarItems.value, move);
384
+ if (!next) return;
385
+ event.preventDefault();
386
+ moveFocus(next);
387
+ return;
388
+ }
389
+ if (typeof move === "number") {
390
+ const next = getAdjacentTabValue(tabBarItems.value, focusedValue.value || model.value, move);
391
+ if (!next) return;
392
+ event.preventDefault();
393
+ moveFocus(next);
394
+ return;
395
+ }
396
+ if (event.key === "Enter" || event.key === " ") {
397
+ if (!focusedValue.value) return;
398
+ event.preventDefault();
399
+ onSelectTab(focusedValue.value);
400
+ }
401
+ }
402
+ function focus(value) {
403
+ const target = value ?? model.value;
404
+ if (!target) return;
405
+ focusedValue.value = target;
406
+ triggerEls.get(target)?.focus();
407
+ }
408
+ async function selectTab(value) {
409
+ return onSelectTab(value);
410
+ }
411
+ onUnmounted(() => {
412
+ triggerEls.clear();
413
+ renameInputEl = null;
414
+ leaveLock = false;
415
+ });
416
+ __expose({
417
+ focus,
418
+ selectTab
419
+ });
277
420
  return (_ctx, _cache) => {
278
- return openBlock(), createBlock(unref(TabsRoot), {
279
- "model-value": model.value,
421
+ return openBlock(), createElementBlock("div", {
422
+ id: __props.id,
280
423
  class: normalizeClass(["rs-tabs", [
281
424
  `rs-tabs--${__props.variant}`,
282
- `rs-tabs--${__props.size}`,
425
+ `rs-tabs--${tabSize.value}`,
283
426
  `rs-tabs--justify-${__props.justify}`,
284
427
  `rs-tabs--content-gap-${__props.contentGap}`,
428
+ `rs-tabs--position-${__props.tabPosition}`,
285
429
  {
286
430
  "rs-tabs--panelless": __props.panelless,
287
431
  "rs-tabs--borderless": __props.borderless,
288
432
  "rs-tabs--scrollable": unref(useScrollOverflow),
289
433
  "rs-tabs--dropdown-overflow": unref(useDropdownOverflow),
290
434
  "rs-tabs--has-extra": hasExtra.value,
291
- "rs-tabs--draggable": __props.draggable
435
+ "rs-tabs--draggable": __props.draggable,
436
+ "rs-tabs--vertical": vertical.value
292
437
  }
293
- ]]),
294
- "aria-label": unref(t)("tabs.label"),
295
- "onUpdate:modelValue": onSelectTab
296
- }, {
297
- default: withCtx(() => [createElementVNode("div", { class: normalizeClass(__props.panelless ? "rs-tabs__shell" : "rs-tabs__body") }, [
298
- unref(useDropdownOverflow) ? (openBlock(), createElementBlock("div", {
299
- key: 0,
300
- ref_key: "measureRef",
301
- ref: measureRef,
302
- class: "rs-tabs__measure",
303
- "aria-hidden": "true"
304
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
305
- return openBlock(), createElementBlock("button", {
306
- key: `measure-${item.value}`,
307
- type: "button",
308
- class: normalizeClass(["rs-tabs__trigger rs-tabs__measure-trigger", `rs-tabs__trigger--${__props.size}`]),
309
- "data-tab-value": item.value,
310
- tabindex: "-1"
311
- }, [
312
- item.icon ? (openBlock(), createBlock(RsIcon_default, {
313
- key: 0,
314
- name: item.icon,
315
- size: 14,
316
- class: "rs-tabs__icon"
317
- }, null, 8, ["name"])) : createCommentVNode("", true),
318
- createElementVNode("span", _hoisted_2, toDisplayString(item.label), 1),
319
- item.badge != null && item.badge !== "" ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(item.badge), 1)) : createCommentVNode("", true)
320
- ], 10, _hoisted_1);
321
- }), 128))], 512)) : createCommentVNode("", true),
322
- createElementVNode("div", {
323
- ref_key: "navRef",
324
- ref: navRef,
325
- class: "rs-tabs__nav"
438
+ ]])
439
+ }, [createElementVNode("div", { class: normalizeClass(__props.panelless ? "rs-tabs__shell" : "rs-tabs__body") }, [
440
+ unref(useDropdownOverflow) ? (openBlock(), createElementBlock("div", {
441
+ key: 0,
442
+ ref_key: "measureRef",
443
+ ref: measureRef,
444
+ class: "rs-tabs__measure",
445
+ "aria-hidden": "true"
446
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
447
+ return openBlock(), createElementBlock("button", {
448
+ key: `measure-${item.value}`,
449
+ type: "button",
450
+ class: normalizeClass(["rs-tabs__trigger rs-tabs__measure-trigger", `rs-tabs__trigger--${tabSize.value}`]),
451
+ "data-tab-value": item.value,
452
+ tabindex: "-1"
326
453
  }, [
327
- unref(useScrollOverflow) && unref(canScrollPrev) ? (openBlock(), createElementBlock("button", {
454
+ item.icon ? (openBlock(), createBlock(RsIcon_default, {
328
455
  key: 0,
329
- type: "button",
330
- class: "rs-tabs__scroll-btn rs-tabs__scroll-btn--prev",
331
- "aria-label": unref(t)("tabs.scrollPrev"),
332
- onClick: _cache[0] || (_cache[0] = ($event) => unref(scrollNav)(-1))
333
- }, [createVNode(RsIcon_default, {
334
- name: "chevron-left",
335
- size: 14
336
- })], 8, _hoisted_4)) : createCommentVNode("", true),
337
- createElementVNode("div", mergeProps({
338
- ref_key: "navViewportRef",
339
- ref: navViewportRef,
340
- class: "rs-tabs__nav-viewport",
341
- onScrollPassive: _cache[9] || (_cache[9] = (...args) => unref(onNavScroll) && unref(onNavScroll)(...args))
342
- }, unref(useScrollOverflow) ? { onWheel: onNavWheel } : {}), [createVNode(unref(TabsList), { class: "rs-tabs__list" }, {
343
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(tabBarItems.value, (item) => {
344
- return openBlock(), createBlock(RsContextMenu_default, {
345
- key: item.value,
346
- items: contextItemsFor(item),
347
- disabled: !__props.contextMenu,
348
- onSelect: (key) => onContextSelect(key, item)
349
- }, {
350
- default: withCtx(() => [createVNode(unref(TabsTrigger), {
351
- value: item.value,
352
- disabled: item.disabled,
353
- class: normalizeClass(["rs-tabs__trigger", {
354
- "rs-tabs__trigger--dragging": dragValue.value === item.value,
355
- "rs-tabs__trigger--drag-over": dragOverValue.value === item.value,
356
- "rs-tabs__trigger--fixed": unref(isTabFixed)(item),
357
- "rs-tabs__trigger--movable": canDragItem(item)
358
- }]),
359
- "data-tab-value": item.value,
360
- "data-fixed": unref(isTabFixed)(item) ? "true" : void 0,
361
- draggable: canDragItem(item) || void 0,
362
- onDragstart: ($event) => onDragStart(item, $event),
363
- onDragover: ($event) => onDragOver(item, $event),
364
- onDragleave: ($event) => onDragLeave(item),
365
- onDrop: ($event) => onDrop(item, $event),
366
- onDragend: onDragEnd,
367
- onAuxclick: ($event) => onTabAuxClick(item, $event)
368
- }, {
369
- default: withCtx(() => [
370
- unref(isTabFixed)(item) ? (openBlock(), createBlock(RsIcon_default, {
371
- key: 0,
372
- name: "pin",
373
- size: 12,
374
- class: "rs-tabs__pin"
375
- })) : createCommentVNode("", true),
376
- item.icon ? (openBlock(), createBlock(RsIcon_default, {
377
- key: 1,
378
- name: item.icon,
379
- size: 14,
380
- class: "rs-tabs__icon"
381
- }, null, 8, ["name"])) : createCommentVNode("", true),
382
- renamingValue.value === item.value ? withDirectives((openBlock(), createElementBlock("input", {
383
- key: 2,
384
- ref_for: true,
385
- ref: (el) => setRenameInputRef(el, item),
386
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => renameDraft.value = $event),
387
- class: "rs-tabs__rename-input",
388
- "aria-label": unref(t)("tabs.rename"),
389
- placeholder: unref(t)("tabs.renamePlaceholder"),
390
- draggable: "false",
391
- onKeydown: [withKeys(withModifiers(($event) => commitRename(item), ["prevent"]), ["enter"]), withKeys(withModifiers(cancelRename, ["prevent"]), ["escape"])],
392
- onBlur: ($event) => commitRename(item),
393
- onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
394
- onClick: _cache[3] || (_cache[3] = withModifiers(() => {}, ["stop"])),
395
- onDblclick: _cache[4] || (_cache[4] = withModifiers(() => {}, ["stop"])),
396
- onDragstart: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop", "prevent"]))
397
- }, null, 40, _hoisted_5)), [[vModelText, renameDraft.value]]) : (openBlock(), createElementBlock("span", {
398
- key: 3,
399
- class: "rs-tabs__label",
400
- title: labelTitle(item),
401
- onDblclick: withModifiers(($event) => startRename(item), ["stop"])
402
- }, toDisplayString(item.label), 41, _hoisted_6)),
403
- item.badge != null && item.badge !== "" ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(item.badge), 1)) : createCommentVNode("", true),
404
- unref(isTabClosable)(item, __props.closable) ? (openBlock(), createElementBlock("button", {
405
- key: 5,
406
- type: "button",
407
- class: "rs-tabs__close",
408
- "aria-label": closeAriaLabel(item),
409
- disabled: item.disabled,
410
- draggable: "false",
411
- onMousedown: _cache[6] || (_cache[6] = withModifiers(() => {}, ["stop", "prevent"])),
412
- onClick: withModifiers(($event) => onCloseTab(item), ["stop"]),
413
- onAuxclick: _cache[7] || (_cache[7] = withModifiers(() => {}, ["stop", "prevent"])),
414
- onDragstart: _cache[8] || (_cache[8] = withModifiers(() => {}, ["stop", "prevent"]))
415
- }, [createVNode(RsIcon_default, {
416
- name: "x",
417
- size: 12
418
- })], 40, _hoisted_8)) : createCommentVNode("", true)
419
- ]),
420
- _: 2
421
- }, 1032, [
422
- "value",
423
- "disabled",
424
- "class",
425
- "data-tab-value",
426
- "data-fixed",
427
- "draggable",
428
- "onDragstart",
429
- "onDragover",
430
- "onDragleave",
431
- "onDrop",
432
- "onAuxclick"
433
- ])]),
434
- _: 2
435
- }, 1032, [
436
- "items",
437
- "disabled",
438
- "onSelect"
439
- ]);
440
- }), 128))]),
441
- _: 1
442
- })], 16),
443
- unref(showOverflowMenu) ? (openBlock(), createElementBlock("div", {
444
- key: 1,
445
- ref_key: "overflowWrapRef",
446
- ref: overflowWrapRef,
447
- class: "rs-tabs__overflow-wrap"
448
- }, [createVNode(unref(DropdownMenuRoot), null, {
449
- default: withCtx(() => [createVNode(unref(DropdownMenuTrigger), { class: normalizeClass(["rs-tabs__more", { "rs-tabs__more--active": unref(activeInHidden) }]) }, {
450
- default: withCtx(() => [createElementVNode("span", _hoisted_9, toDisplayString(moreLabel.value), 1), createVNode(RsIcon_default, {
451
- name: "chevron-down",
452
- size: 14,
453
- class: "rs-tabs__more-icon"
454
- })]),
455
- _: 1
456
- }, 8, ["class"]), createVNode(unref(DropdownMenuPortal), null, {
457
- default: withCtx(() => [createVNode(unref(DropdownMenuContent), {
458
- class: "rs-tabs__more-menu",
459
- "side-offset": 4,
460
- align: "end"
461
- }, {
462
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(overflowMenuItems), (item) => {
463
- return openBlock(), createBlock(unref(DropdownMenuItem), {
464
- key: item.value,
465
- class: normalizeClass(["rs-tabs__more-item", { "rs-tabs__more-item--active": model.value === item.value }]),
466
- onSelect: ($event) => onOverflowSelect(item.value)
467
- }, {
468
- default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
469
- _: 2
470
- }, 1032, ["class", "onSelect"]);
471
- }), 128))]),
472
- _: 1
473
- })]),
474
- _: 1
475
- })]),
476
- _: 1
477
- })], 512)) : createCommentVNode("", true),
478
- canAdd.value ? (openBlock(), createElementBlock("button", {
479
- key: 2,
480
- type: "button",
481
- class: "rs-tabs__add",
482
- "aria-label": unref(t)("tabs.add"),
483
- onClick: onAddTab
484
- }, [createVNode(RsIcon_default, {
485
- name: "plus",
486
- size: 14
487
- })], 8, _hoisted_10)) : createCommentVNode("", true),
488
- unref(useScrollOverflow) && unref(canScrollNext) ? (openBlock(), createElementBlock("button", {
489
- key: 3,
490
- type: "button",
491
- class: "rs-tabs__scroll-btn rs-tabs__scroll-btn--next",
492
- "aria-label": unref(t)("tabs.scrollNext"),
493
- onClick: _cache[10] || (_cache[10] = ($event) => unref(scrollNav)(1))
494
- }, [createVNode(RsIcon_default, {
495
- name: "chevron-right",
496
- size: 14
497
- })], 8, _hoisted_11)) : createCommentVNode("", true),
498
- hasExtra.value ? (openBlock(), createElementBlock("div", {
499
- key: 4,
500
- ref_key: "extraRef",
501
- ref: extraRef,
502
- class: "rs-tabs__extra"
503
- }, [renderSlot(_ctx.$slots, "extra")], 512)) : createCommentVNode("", true)
504
- ], 512),
505
- !__props.panelless ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(__props.items, (item) => {
506
- return openBlock(), createBlock(unref(TabsContent), {
507
- key: `panel-${item.value}`,
508
- value: item.value,
509
- class: "rs-tabs__panel"
456
+ name: item.icon,
457
+ size: tabIconPx.value,
458
+ class: "rs-tabs__icon"
459
+ }, null, 8, ["name", "size"])) : createCommentVNode("", true),
460
+ createElementVNode("span", _hoisted_3, toDisplayString(item.label), 1),
461
+ item.badge != null && item.badge !== "" ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(item.badge), 1)) : createCommentVNode("", true)
462
+ ], 10, _hoisted_2);
463
+ }), 128))], 512)) : createCommentVNode("", true),
464
+ createElementVNode("div", {
465
+ ref_key: "navRef",
466
+ ref: navRef,
467
+ class: "rs-tabs__nav"
468
+ }, [
469
+ unref(useScrollOverflow) && unref(canScrollPrev) ? (openBlock(), createElementBlock("button", {
470
+ key: 0,
471
+ type: "button",
472
+ class: "rs-tabs__scroll-btn rs-tabs__scroll-btn--prev",
473
+ "aria-label": unref(t)("tabs.scrollPrev"),
474
+ tabindex: "-1",
475
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(scrollNav)(-1))
476
+ }, [createVNode(RsIcon_default, {
477
+ name: "chevron-left",
478
+ size: tabIconPx.value
479
+ }, null, 8, ["size"])], 8, _hoisted_5)) : createCommentVNode("", true),
480
+ createElementVNode("div", {
481
+ ref_key: "navViewportRef",
482
+ ref: navViewportRef,
483
+ class: "rs-tabs__nav-viewport",
484
+ onScrollPassive: _cache[9] || (_cache[9] = (...args) => unref(onNavScroll) && unref(onNavScroll)(...args))
485
+ }, [createElementVNode("div", {
486
+ class: "rs-tabs__list",
487
+ role: "tablist",
488
+ "aria-label": navLabel.value,
489
+ "aria-orientation": vertical.value ? "vertical" : "horizontal",
490
+ onKeydown: onTabListKeydown
491
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(tabBarItems.value, (item) => {
492
+ return openBlock(), createBlock(RsContextMenu_default, {
493
+ key: item.value,
494
+ items: contextItemsFor(item),
495
+ disabled: !__props.contextMenu,
496
+ onSelect: (key) => onContextSelect(key, item)
510
497
  }, {
511
- default: withCtx(() => [createElementVNode("div", _hoisted_12, [renderSlot(_ctx.$slots, item.value)])]),
498
+ default: withCtx(() => [createElementVNode("button", {
499
+ id: unref(tabTriggerId)(rootId.value, item.value),
500
+ ref_for: true,
501
+ ref: (el) => setTriggerRef(item.value, el),
502
+ type: "button",
503
+ role: "tab",
504
+ class: normalizeClass(["rs-tabs__trigger", {
505
+ "rs-tabs__trigger--dragging": dragValue.value === item.value,
506
+ "rs-tabs__trigger--drag-over": dragOverValue.value === item.value,
507
+ "rs-tabs__trigger--fixed": unref(isTabFixed)(item),
508
+ "rs-tabs__trigger--movable": canDragItem(item)
509
+ }]),
510
+ "aria-selected": model.value === item.value,
511
+ "aria-controls": __props.panelless ? void 0 : unref(tabPanelId)(rootId.value, item.value),
512
+ tabindex: (focusedValue.value || model.value) === item.value ? 0 : -1,
513
+ disabled: item.disabled,
514
+ "data-state": model.value === item.value ? "active" : "inactive",
515
+ "data-tab-value": item.value,
516
+ "data-fixed": unref(isTabFixed)(item) ? "true" : void 0,
517
+ draggable: canDragItem(item) || void 0,
518
+ onClick: ($event) => onSelectTab(item.value),
519
+ onDragstart: ($event) => onDragStart(item, $event),
520
+ onDragover: ($event) => onDragOver(item, $event),
521
+ onDragleave: ($event) => onDragLeave(item),
522
+ onDrop: ($event) => onDrop(item, $event),
523
+ onDragend: onDragEnd,
524
+ onAuxclick: ($event) => onTabAuxClick(item, $event)
525
+ }, [renderSlot(_ctx.$slots, "tab", {
526
+ item,
527
+ active: model.value === item.value,
528
+ disabled: Boolean(item.disabled)
529
+ }, () => [
530
+ canDragItem(item) && __props.showDragHandle ? (openBlock(), createElementBlock("span", _hoisted_8)) : createCommentVNode("", true),
531
+ unref(isTabFixed)(item) ? (openBlock(), createBlock(RsIcon_default, {
532
+ key: 1,
533
+ name: "pin",
534
+ size: chromeIconPx.value,
535
+ class: "rs-tabs__pin"
536
+ }, null, 8, ["size"])) : createCommentVNode("", true),
537
+ item.icon ? (openBlock(), createBlock(RsIcon_default, {
538
+ key: 2,
539
+ name: item.icon,
540
+ size: tabIconPx.value,
541
+ class: "rs-tabs__icon"
542
+ }, null, 8, ["name", "size"])) : createCommentVNode("", true),
543
+ renamingValue.value === item.value ? withDirectives((openBlock(), createElementBlock("input", {
544
+ key: 3,
545
+ ref_for: true,
546
+ ref: (el) => setRenameInputRef(el, item),
547
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => renameDraft.value = $event),
548
+ class: "rs-tabs__rename-input",
549
+ "aria-label": unref(t)("tabs.rename"),
550
+ placeholder: unref(t)("tabs.renamePlaceholder"),
551
+ draggable: "false",
552
+ onKeydown: [withKeys(withModifiers(($event) => commitRename(item), ["prevent"]), ["enter"]), withKeys(withModifiers(cancelRename, ["prevent"]), ["escape"])],
553
+ onBlur: ($event) => commitRename(item),
554
+ onMousedown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
555
+ onClick: _cache[3] || (_cache[3] = withModifiers(() => {}, ["stop"])),
556
+ onDblclick: _cache[4] || (_cache[4] = withModifiers(() => {}, ["stop"])),
557
+ onDragstart: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop", "prevent"]))
558
+ }, null, 40, _hoisted_9)), [[vModelText, renameDraft.value]]) : (openBlock(), createElementBlock("span", {
559
+ key: 4,
560
+ class: "rs-tabs__label",
561
+ title: labelTitle(item),
562
+ onDblclick: withModifiers(($event) => startRename(item), ["stop"])
563
+ }, toDisplayString(item.label), 41, _hoisted_10)),
564
+ item.badge != null && item.badge !== "" ? (openBlock(), createElementBlock("span", _hoisted_11, toDisplayString(item.badge), 1)) : createCommentVNode("", true),
565
+ unref(isTabClosable)(item, __props.closable) ? (openBlock(), createElementBlock("button", {
566
+ key: 6,
567
+ type: "button",
568
+ class: "rs-tabs__close",
569
+ "aria-label": closeAriaLabel(item),
570
+ disabled: item.disabled,
571
+ tabindex: "-1",
572
+ draggable: "false",
573
+ onMousedown: _cache[6] || (_cache[6] = withModifiers(() => {}, ["stop", "prevent"])),
574
+ onClick: withModifiers(($event) => onCloseTab(item), ["stop"]),
575
+ onAuxclick: _cache[7] || (_cache[7] = withModifiers(() => {}, ["stop", "prevent"])),
576
+ onDragstart: _cache[8] || (_cache[8] = withModifiers(() => {}, ["stop", "prevent"]))
577
+ }, [createVNode(RsIcon_default, {
578
+ name: "x",
579
+ size: chromeIconPx.value
580
+ }, null, 8, ["size"])], 40, _hoisted_12)) : createCommentVNode("", true)
581
+ ])], 42, _hoisted_7)]),
512
582
  _: 2
513
- }, 1032, ["value"]);
514
- }), 128)) : createCommentVNode("", true)
515
- ], 2)]),
516
- _: 3
517
- }, 8, [
518
- "model-value",
519
- "class",
520
- "aria-label"
521
- ]);
583
+ }, 1032, [
584
+ "items",
585
+ "disabled",
586
+ "onSelect"
587
+ ]);
588
+ }), 128))], 40, _hoisted_6)], 544),
589
+ unref(showOverflowMenu) ? (openBlock(), createElementBlock("div", {
590
+ key: 1,
591
+ ref_key: "overflowWrapRef",
592
+ ref: overflowWrapRef,
593
+ class: "rs-tabs__overflow-wrap"
594
+ }, [createVNode(RsDropdown_default, {
595
+ items: unref(overflowMenuItems),
596
+ "show-selected": false,
597
+ "content-width": "fit",
598
+ onSelect: onOverflowSelect
599
+ }, {
600
+ trigger: withCtx(() => [createElementVNode("button", {
601
+ type: "button",
602
+ class: normalizeClass(["rs-tabs__more", { "rs-tabs__more--active": unref(activeInHidden) }]),
603
+ "aria-label": moreLabel.value
604
+ }, [createElementVNode("span", _hoisted_14, toDisplayString(moreLabel.value), 1), createVNode(RsIcon_default, {
605
+ name: "chevron-down",
606
+ size: tabIconPx.value,
607
+ class: "rs-tabs__more-icon"
608
+ }, null, 8, ["size"])], 10, _hoisted_13)]),
609
+ _: 1
610
+ }, 8, ["items"])], 512)) : createCommentVNode("", true),
611
+ canAdd.value ? (openBlock(), createElementBlock("button", {
612
+ key: 2,
613
+ type: "button",
614
+ class: "rs-tabs__add",
615
+ "aria-label": unref(t)("tabs.add"),
616
+ onClick: onAddTab
617
+ }, [createVNode(RsIcon_default, {
618
+ name: "plus",
619
+ size: tabIconPx.value
620
+ }, null, 8, ["size"])], 8, _hoisted_15)) : createCommentVNode("", true),
621
+ unref(useScrollOverflow) && unref(canScrollNext) ? (openBlock(), createElementBlock("button", {
622
+ key: 3,
623
+ type: "button",
624
+ class: "rs-tabs__scroll-btn rs-tabs__scroll-btn--next",
625
+ "aria-label": unref(t)("tabs.scrollNext"),
626
+ tabindex: "-1",
627
+ onClick: _cache[10] || (_cache[10] = ($event) => unref(scrollNav)(1))
628
+ }, [createVNode(RsIcon_default, {
629
+ name: "chevron-right",
630
+ size: tabIconPx.value
631
+ }, null, 8, ["size"])], 8, _hoisted_16)) : createCommentVNode("", true),
632
+ hasExtra.value ? (openBlock(), createElementBlock("div", {
633
+ key: 4,
634
+ ref_key: "extraRef",
635
+ ref: extraRef,
636
+ class: "rs-tabs__extra"
637
+ }, [renderSlot(_ctx.$slots, "extra")], 512)) : createCommentVNode("", true)
638
+ ], 512),
639
+ !__props.panelless ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(__props.items, (item) => {
640
+ return openBlock(), createElementBlock(Fragment, { key: `panel-${item.value}` }, [panelVisible(item.value) ? (openBlock(), createElementBlock("div", {
641
+ key: 0,
642
+ id: unref(tabPanelId)(rootId.value, item.value),
643
+ role: "tabpanel",
644
+ class: "rs-tabs__panel",
645
+ hidden: item.value !== model.value,
646
+ "data-state": item.value === model.value ? "active" : "inactive",
647
+ "aria-labelledby": unref(tabTriggerId)(rootId.value, item.value),
648
+ tabindex: item.value === model.value ? 0 : void 0
649
+ }, [createElementVNode("div", _hoisted_18, [renderSlot(_ctx.$slots, item.value)])], 8, _hoisted_17)) : createCommentVNode("", true)], 64);
650
+ }), 128)) : createCommentVNode("", true)
651
+ ], 2)], 10, _hoisted_1);
522
652
  };
523
653
  }
524
654
  });