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
@@ -0,0 +1,55 @@
1
+ //#region src/components/popover/src/popover-utils.ts
2
+ /** hover 延迟上限,避免一个超大定时器一直挂着。 */
3
+ var RS_POPOVER_DELAY_MAX = 6e4;
4
+ var POPOVER_TRIGGERS = /* @__PURE__ */ new Set([
5
+ "click",
6
+ "hover",
7
+ "focus"
8
+ ]);
9
+ var FOCUSABLE_SELECTOR = [
10
+ "a[href]",
11
+ "button:not([disabled])",
12
+ "input:not([disabled]):not([type=\"hidden\"])",
13
+ "select:not([disabled])",
14
+ "textarea:not([disabled])",
15
+ "[tabindex]:not([tabindex=\"-1\"])"
16
+ ].join(",");
17
+ function normalizePopoverTriggers(trigger) {
18
+ const next = (Array.isArray(trigger) ? trigger : [trigger ?? "click"]).filter((item) => POPOVER_TRIGGERS.has(item));
19
+ return next.length ? next : ["click"];
20
+ }
21
+ function clampPopoverDelay(value, fallback) {
22
+ if (value == null || !Number.isFinite(value)) return fallback;
23
+ return Math.min(RS_POPOVER_DELAY_MAX, Math.max(0, value));
24
+ }
25
+ /** Tab 在浮层内循环。current < 0 时落到第一项或最后一项。 */
26
+ function nextPopoverFocusIndex(count, current, shift) {
27
+ if (count <= 0) return -1;
28
+ if (current < 0) return shift ? count - 1 : 0;
29
+ return (current + (shift ? -1 : 1) + count) % count;
30
+ }
31
+ function resolvePopoverPortalTarget(getPopupContainer, trigger) {
32
+ if (typeof document === "undefined") return "body";
33
+ if (!getPopupContainer) return "body";
34
+ return getPopupContainer(trigger ?? void 0) ?? "body";
35
+ }
36
+ /** 组件 ref 可能是元素,也可能是带 $el 的实例。无 DOM 时返回空。 */
37
+ function resolvePopoverElement(value) {
38
+ if (typeof HTMLElement !== "undefined" && value instanceof HTMLElement) return value;
39
+ if (value && typeof value === "object" && "$el" in value) {
40
+ const root = value.$el;
41
+ if (typeof HTMLElement !== "undefined" && root instanceof HTMLElement) return root;
42
+ }
43
+ return null;
44
+ }
45
+ function listPopoverFocusable(root) {
46
+ if (!root || typeof root.querySelectorAll !== "function") return [];
47
+ return Array.from(root.querySelectorAll(FOCUSABLE_SELECTOR)).filter((el) => {
48
+ if (el.hasAttribute("disabled")) return false;
49
+ if (el.getAttribute("aria-hidden") === "true") return false;
50
+ if (typeof el.closest === "function" && el.closest("[hidden]")) return false;
51
+ return true;
52
+ });
53
+ }
54
+ //#endregion
55
+ export { RS_POPOVER_DELAY_MAX, clampPopoverDelay, listPopoverFocusable, nextPopoverFocusIndex, normalizePopoverTriggers, resolvePopoverElement, resolvePopoverPortalTarget };
@@ -1,3 +1,4 @@
1
1
  export { default as RsSidebar } from './src/RsSidebar.js';
2
2
  export { default as RsSidebarGroup } from './src/RsSidebarGroup.js';
3
3
  export { default as RsSidebarItem } from './src/RsSidebarItem.js';
4
+ export type { RsSidebarExpose, RsSidebarInstance, RsSidebarOrientation, RsSidebarPlacement, RsSidebarWidth, } from './src/sidebar-utils';
@@ -1,61 +1,119 @@
1
1
 
2
- .rs-sidebar[data-v-784314c9] {
2
+ .rs-sidebar[data-v-0ca72d2d] {
3
3
  display: flex;
4
4
  flex-direction: column;
5
- min-height: 0;
6
- border: 1px solid var(--rs-border-subtle);
7
- background: color-mix(in srgb, var(--rs-surface) 88%, transparent);
8
- color: var(--rs-text);
5
+ min-block-size: 0;
6
+ min-inline-size: 0;
7
+ border: 1px solid var(--rs-sidebar-border);
8
+ background: var(--rs-sidebar-bg);
9
+ color: var(--rs-sidebar-title);
9
10
  }
10
- .rs-sidebar--sm[data-v-784314c9] {
11
- width: 14rem;
11
+ .rs-sidebar[data-v-0ca72d2d]:focus {
12
+ outline: none;
12
13
  }
13
- .rs-sidebar--md[data-v-784314c9] {
14
- width: 17rem;
14
+ .rs-sidebar[data-v-0ca72d2d]:focus-visible {
15
+ box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
15
16
  }
16
- .rs-sidebar--lg[data-v-784314c9] {
17
- width: 21rem;
17
+ .rs-sidebar--sm[data-v-0ca72d2d] {
18
+ inline-size: var(--rs-sidebar-width-sm);
18
19
  }
19
- .rs-sidebar--collapsed[data-v-784314c9] {
20
- width: 4rem;
20
+ .rs-sidebar--md[data-v-0ca72d2d] {
21
+ inline-size: var(--rs-sidebar-width-md);
21
22
  }
22
- .rs-sidebar__header[data-v-784314c9],
23
- .rs-sidebar__footer[data-v-784314c9] {
23
+ .rs-sidebar--lg[data-v-0ca72d2d] {
24
+ inline-size: var(--rs-sidebar-width-lg);
25
+ }
26
+ .rs-sidebar--collapsed[data-v-0ca72d2d] {
27
+ inline-size: var(--rs-sidebar-width-collapsed);
28
+ }
29
+ .rs-sidebar--horizontal[data-v-0ca72d2d],
30
+ .rs-sidebar--horizontal.rs-sidebar--sm[data-v-0ca72d2d],
31
+ .rs-sidebar--horizontal.rs-sidebar--md[data-v-0ca72d2d],
32
+ .rs-sidebar--horizontal.rs-sidebar--lg[data-v-0ca72d2d],
33
+ .rs-sidebar--horizontal.rs-sidebar--collapsed[data-v-0ca72d2d] {
34
+ flex-direction: row;
35
+ align-items: stretch;
36
+ inline-size: 100%;
37
+ min-block-size: var(--rs-control-height-lg);
38
+ }
39
+ .rs-sidebar__header[data-v-0ca72d2d],
40
+ .rs-sidebar__footer[data-v-0ca72d2d] {
24
41
  display: flex;
25
42
  align-items: center;
26
43
  justify-content: space-between;
27
- gap: var(--rs-space-sm);
28
- padding: var(--rs-space-md);
29
- border-bottom: 1px solid var(--rs-border-subtle);
44
+ gap: var(--rs-sidebar-gap);
45
+ padding: var(--rs-sidebar-pad);
46
+ border-block-end: 1px solid var(--rs-sidebar-border);
47
+ }
48
+ .rs-sidebar__footer[data-v-0ca72d2d] {
49
+ border-block-start: 1px solid var(--rs-sidebar-border);
50
+ border-block-end: 0;
30
51
  }
31
- .rs-sidebar__footer[data-v-784314c9] {
32
- border-top: 1px solid var(--rs-border-subtle);
33
- border-bottom: 0;
52
+ .rs-sidebar--horizontal .rs-sidebar__header[data-v-0ca72d2d] {
53
+ border-block-end: 0;
54
+ border-inline-end: 1px solid var(--rs-sidebar-border);
34
55
  }
35
- .rs-sidebar__body[data-v-784314c9] {
56
+ .rs-sidebar--horizontal .rs-sidebar__footer[data-v-0ca72d2d] {
57
+ border-block-start: 0;
58
+ border-inline-start: 1px solid var(--rs-sidebar-border);
59
+ }
60
+ .rs-sidebar__body[data-v-0ca72d2d] {
36
61
  flex: 1;
37
- min-height: 0;
62
+ min-block-size: 0;
63
+ min-inline-size: 0;
38
64
  overflow: auto;
39
- padding: var(--rs-space-sm);
65
+ padding: var(--rs-sidebar-body-pad);
40
66
  }
41
- .rs-sidebar__title-wrap[data-v-784314c9] {
42
- min-width: 0;
67
+ .rs-sidebar--horizontal .rs-sidebar__body[data-v-0ca72d2d] {
68
+ display: flex;
69
+ flex-direction: row;
70
+ align-items: center;
71
+ overflow-x: auto;
72
+ overflow-y: hidden;
43
73
  }
44
- .rs-sidebar__title[data-v-784314c9],
45
- .rs-sidebar__subtitle[data-v-784314c9] {
74
+ .rs-sidebar__title-wrap[data-v-0ca72d2d] {
75
+ min-inline-size: 0;
76
+ }
77
+ .rs-sidebar__title[data-v-0ca72d2d],
78
+ .rs-sidebar__subtitle[data-v-0ca72d2d] {
46
79
  display: block;
47
80
  overflow: hidden;
48
81
  text-overflow: ellipsis;
49
82
  white-space: nowrap;
50
83
  }
51
- .rs-sidebar__subtitle[data-v-784314c9] {
52
- color: var(--rs-muted);
84
+ .rs-sidebar__title[data-v-0ca72d2d] {
85
+ color: var(--rs-sidebar-title);
86
+ font-weight: var(--rs-font-weight-semibold);
87
+ }
88
+ .rs-sidebar__subtitle[data-v-0ca72d2d] {
89
+ color: var(--rs-sidebar-subtitle);
53
90
  font-size: var(--rs-font-size-xs);
54
91
  }
55
- .rs-sidebar__collapse[data-v-784314c9] {
56
- border: 1px solid var(--rs-border);
92
+ .rs-sidebar__collapse[data-v-0ca72d2d] {
93
+ display: inline-flex;
94
+ flex: 0 0 auto;
95
+ align-items: center;
96
+ justify-content: center;
97
+ inline-size: var(--rs-control-height-sm);
98
+ block-size: var(--rs-control-height-sm);
99
+ padding: 0;
100
+ border: 1px solid var(--rs-sidebar-border);
57
101
  border-radius: var(--rs-radius-sm);
58
102
  background: var(--rs-surface);
59
- color: var(--rs-muted);
103
+ color: var(--rs-sidebar-subtitle);
60
104
  cursor: pointer;
105
+ transition:
106
+ background-color var(--rs-transition-fast),
107
+ color var(--rs-transition-fast),
108
+ border-color var(--rs-transition-fast);
109
+ }
110
+ .rs-sidebar__collapse[data-v-0ca72d2d]:hover {
111
+ background: var(--rs-surface-hover);
112
+ color: var(--rs-sidebar-title);
113
+ }
114
+ .rs-sidebar__collapse[data-v-0ca72d2d]:focus {
115
+ outline: none;
116
+ }
117
+ .rs-sidebar__collapse[data-v-0ca72d2d]:focus-visible {
118
+ box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
61
119
  }
@@ -1,35 +1,43 @@
1
- export type RsSidebarOrientation = 'vertical' | 'horizontal';
2
- export type RsSidebarPlacement = 'left' | 'right';
1
+ import { type RsSidebarExpose, type RsSidebarOrientation, type RsSidebarPlacement, type RsSidebarWidth } from './sidebar-utils';
3
2
  type __VLS_Props = {
4
3
  title?: string;
5
4
  subtitle?: string;
6
5
  collapsible?: boolean;
7
- width?: 'sm' | 'md' | 'lg';
6
+ width?: RsSidebarWidth;
8
7
  orientation?: RsSidebarOrientation;
9
8
  placement?: RsSidebarPlacement;
9
+ /**
10
+ * Ctrl/Cmd + 该键切换折叠。未传不监听。
11
+ * 输入框 / 可编辑节点内不触发。
12
+ */
13
+ hotkey?: string;
14
+ id?: string;
15
+ ariaLabel?: string;
10
16
  };
11
17
  type __VLS_ModelProps = {
12
18
  'collapsed'?: boolean;
13
19
  };
14
20
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
15
- declare var __VLS_1: {}, __VLS_3: {
21
+ declare var __VLS_1: {}, __VLS_8: {
16
22
  collapsed: boolean;
17
- }, __VLS_5: {
23
+ }, __VLS_10: {
18
24
  collapsed: boolean;
19
25
  };
20
26
  type __VLS_Slots = {} & {
21
27
  header?: (props: typeof __VLS_1) => any;
22
28
  } & {
23
- default?: (props: typeof __VLS_3) => any;
29
+ default?: (props: typeof __VLS_8) => any;
24
30
  } & {
25
- footer?: (props: typeof __VLS_5) => any;
31
+ footer?: (props: typeof __VLS_10) => any;
26
32
  };
27
- declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
33
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsSidebarExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
34
+ change: (collapsed: boolean) => any;
28
35
  "update:collapsed": (value: boolean) => any;
29
36
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
+ onChange?: ((collapsed: boolean) => any) | undefined;
30
38
  "onUpdate:collapsed"?: ((value: boolean) => any) | undefined;
31
39
  }>, {
32
- width: "sm" | "md" | "lg";
40
+ width: RsSidebarWidth;
33
41
  orientation: RsSidebarOrientation;
34
42
  placement: RsSidebarPlacement;
35
43
  collapsible: boolean;
@@ -1,24 +1,34 @@
1
- import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeModels, normalizeClass, openBlock, renderSlot, toDisplayString, useModel } from "vue";
1
+ import { useRsI18n } from "../../../composables/useRsI18n.js";
2
+ import RsIcon_default from "../../icon/src/RsIcon.js";
3
+ import { RS_SIDEBAR_KEY, isRsSidebarTypingTarget, matchesRsSidebarHotkey, resolveRsSidebarCollapseIcon, resolveRsSidebarOrientation, resolveRsSidebarPlacement, resolveRsSidebarWidth } from "./sidebar-utils.js";
4
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeModels, normalizeClass, onMounted, onUnmounted, openBlock, provide, ref, renderSlot, toDisplayString, unref, useId, useModel, watch } from "vue";
2
5
  //#region src/components/sidebar/src/RsSidebar.vue?vue&type=script&setup=true&lang.ts
3
- var _hoisted_1 = {
6
+ var _hoisted_1 = ["id", "aria-label"];
7
+ var _hoisted_2 = {
4
8
  key: 0,
5
9
  class: "rs-sidebar__header"
6
10
  };
7
- var _hoisted_2 = { class: "rs-sidebar__title-wrap" };
8
- var _hoisted_3 = {
11
+ var _hoisted_3 = { class: "rs-sidebar__title-wrap" };
12
+ var _hoisted_4 = {
9
13
  key: 0,
10
14
  class: "rs-sidebar__title"
11
15
  };
12
- var _hoisted_4 = {
16
+ var _hoisted_5 = {
13
17
  key: 1,
14
18
  class: "rs-sidebar__subtitle"
15
19
  };
16
- var _hoisted_5 = { class: "rs-sidebar__body" };
17
- var _hoisted_6 = {
20
+ var _hoisted_6 = [
21
+ "aria-label",
22
+ "aria-expanded",
23
+ "aria-controls"
24
+ ];
25
+ var _hoisted_7 = ["id", "aria-label"];
26
+ var _hoisted_8 = {
18
27
  key: 1,
19
28
  class: "rs-sidebar__footer"
20
29
  };
21
30
  var RsSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
31
+ name: "RsSidebar",
22
32
  __name: "RsSidebar",
23
33
  props: /*@__PURE__*/ mergeModels({
24
34
  title: {},
@@ -29,7 +39,10 @@ var RsSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
29
39
  },
30
40
  width: { default: "md" },
31
41
  orientation: { default: "vertical" },
32
- placement: { default: "left" }
42
+ placement: { default: "left" },
43
+ hotkey: {},
44
+ id: {},
45
+ ariaLabel: {}
33
46
  }, {
34
47
  "collapsed": {
35
48
  type: Boolean,
@@ -37,25 +50,114 @@ var RsSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
37
50
  },
38
51
  "collapsedModifiers": {}
39
52
  }),
40
- emits: ["update:collapsed"],
41
- setup(__props) {
53
+ emits: /*@__PURE__*/ mergeModels(["change"], ["update:collapsed"]),
54
+ setup(__props, { expose: __expose, emit: __emit }) {
42
55
  const collapsed = useModel(__props, "collapsed");
56
+ const props = __props;
57
+ const emit = __emit;
58
+ const { t } = useRsI18n();
59
+ const rootRef = ref(null);
60
+ const collapseRef = ref(null);
61
+ const bodyId = useId();
62
+ const resolvedWidth = computed(() => resolveRsSidebarWidth(props.width));
63
+ const resolvedOrientation = computed(() => resolveRsSidebarOrientation(props.orientation));
64
+ const resolvedPlacement = computed(() => resolveRsSidebarPlacement(props.placement));
65
+ const asideLabel = computed(() => props.ariaLabel || props.title || t("sidebar.label"));
66
+ const collapseLabel = computed(() => collapsed.value ? t("sidebar.expand") : t("sidebar.collapse"));
67
+ const collapseIcon = computed(() => resolveRsSidebarCollapseIcon(resolvedOrientation.value, resolvedPlacement.value, collapsed.value));
68
+ provide(RS_SIDEBAR_KEY, {
69
+ collapsed: computed(() => collapsed.value),
70
+ orientation: resolvedOrientation,
71
+ placement: resolvedPlacement
72
+ });
73
+ function setCollapsed(next) {
74
+ if (collapsed.value === next) return;
75
+ collapsed.value = next;
76
+ emit("change", next);
77
+ }
78
+ function expand() {
79
+ setCollapsed(false);
80
+ }
81
+ function collapseSidebar() {
82
+ setCollapsed(true);
83
+ }
84
+ function toggle() {
85
+ setCollapsed(!collapsed.value);
86
+ }
87
+ function focus() {
88
+ if (collapseRef.value) {
89
+ collapseRef.value.focus();
90
+ return;
91
+ }
92
+ rootRef.value?.focus();
93
+ }
94
+ function onHotkey(event) {
95
+ if (!props.hotkey) return;
96
+ if (isRsSidebarTypingTarget(event.target)) return;
97
+ if (!matchesRsSidebarHotkey(event, props.hotkey)) return;
98
+ event.preventDefault();
99
+ toggle();
100
+ }
101
+ function attachHotkey() {
102
+ if (typeof document === "undefined" || !props.hotkey) return;
103
+ document.addEventListener("keydown", onHotkey);
104
+ }
105
+ function detachHotkey() {
106
+ if (typeof document === "undefined") return;
107
+ document.removeEventListener("keydown", onHotkey);
108
+ }
109
+ watch(() => props.hotkey, (next, prev) => {
110
+ if (prev) detachHotkey();
111
+ if (next) attachHotkey();
112
+ });
113
+ onMounted(() => {
114
+ if (props.hotkey) attachHotkey();
115
+ });
116
+ onUnmounted(() => {
117
+ detachHotkey();
118
+ });
119
+ __expose({
120
+ expand,
121
+ collapse: collapseSidebar,
122
+ toggle,
123
+ focus
124
+ });
43
125
  return (_ctx, _cache) => {
44
- return openBlock(), createElementBlock("aside", { class: normalizeClass(["rs-sidebar", [
45
- `rs-sidebar--${__props.width}`,
46
- `rs-sidebar--${__props.orientation}`,
47
- `rs-sidebar--${__props.placement}`,
48
- { "rs-sidebar--collapsed": collapsed.value }
49
- ]]) }, [
50
- __props.title || __props.subtitle || __props.collapsible || _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_1, [renderSlot(_ctx.$slots, "header", {}, () => [createElementVNode("div", _hoisted_2, [__props.title ? (openBlock(), createElementBlock("strong", _hoisted_3, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle && !collapsed.value ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.collapsible ? (openBlock(), createElementBlock("button", {
126
+ return openBlock(), createElementBlock("aside", {
127
+ id: __props.id,
128
+ ref_key: "rootRef",
129
+ ref: rootRef,
130
+ class: normalizeClass(["rs-sidebar rs-motion-reduce", [
131
+ `rs-sidebar--${resolvedWidth.value}`,
132
+ `rs-sidebar--${resolvedOrientation.value}`,
133
+ `rs-sidebar--${resolvedPlacement.value}`,
134
+ { "rs-sidebar--collapsed": collapsed.value }
135
+ ]]),
136
+ "aria-label": asideLabel.value,
137
+ tabindex: "-1"
138
+ }, [
139
+ __props.title || __props.subtitle || __props.collapsible || _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_2, [renderSlot(_ctx.$slots, "header", {}, () => [createElementVNode("div", _hoisted_3, [__props.title ? (openBlock(), createElementBlock("strong", _hoisted_4, toDisplayString(__props.title), 1)) : createCommentVNode("", true), __props.subtitle && !collapsed.value ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString(__props.subtitle), 1)) : createCommentVNode("", true)]), __props.collapsible ? (openBlock(), createElementBlock("button", {
51
140
  key: 0,
141
+ ref_key: "collapseRef",
142
+ ref: collapseRef,
52
143
  type: "button",
53
144
  class: "rs-sidebar__collapse",
54
- onClick: _cache[0] || (_cache[0] = ($event) => collapsed.value = !collapsed.value)
55
- }, toDisplayString(collapsed.value ? ">" : "<"), 1)) : createCommentVNode("", true)], true)])) : createCommentVNode("", true),
56
- createElementVNode("div", _hoisted_5, [renderSlot(_ctx.$slots, "default", { collapsed: collapsed.value }, void 0, true)]),
57
- _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_6, [renderSlot(_ctx.$slots, "footer", { collapsed: collapsed.value }, void 0, true)])) : createCommentVNode("", true)
58
- ], 2);
145
+ "aria-label": collapseLabel.value,
146
+ "aria-expanded": !collapsed.value,
147
+ "aria-controls": unref(bodyId),
148
+ onClick: toggle
149
+ }, [createVNode(RsIcon_default, {
150
+ name: collapseIcon.value,
151
+ size: "sm",
152
+ class: "rs-sidebar__collapse-icon"
153
+ }, null, 8, ["name"])], 8, _hoisted_6)) : createCommentVNode("", true)], true)])) : createCommentVNode("", true),
154
+ createElementVNode("nav", {
155
+ id: unref(bodyId),
156
+ class: "rs-sidebar__body",
157
+ "aria-label": unref(t)("sidebar.nav")
158
+ }, [renderSlot(_ctx.$slots, "default", { collapsed: collapsed.value }, void 0, true)], 8, _hoisted_7),
159
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_8, [renderSlot(_ctx.$slots, "footer", { collapsed: collapsed.value }, void 0, true)])) : createCommentVNode("", true)
160
+ ], 10, _hoisted_1);
59
161
  };
60
162
  }
61
163
  });
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsSidebar_vue_vue_type_script_setup_true_lang_default from "./RsSidebar.impl.js";
4
4
 
5
5
  //#region src/components/sidebar/src/RsSidebar.vue
6
- var RsSidebar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsSidebar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-784314c9"]]);
6
+ var RsSidebar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsSidebar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-0ca72d2d"]]);
7
7
  //#endregion
8
8
  export { RsSidebar_default as default };
@@ -1,15 +1,32 @@
1
1
 
2
- .rs-sidebar-group + .rs-sidebar-group[data-v-15de96fa] {
3
- margin-top: var(--rs-space-md);
2
+ .rs-sidebar-group + .rs-sidebar-group[data-v-c2188d24] {
3
+ margin-block-start: var(--rs-sidebar-group-gap);
4
4
  }
5
- .rs-sidebar-group__title[data-v-15de96fa] {
6
- padding: var(--rs-space-xs) var(--rs-space-sm);
7
- color: var(--rs-muted);
5
+ .rs-sidebar-group--horizontal + .rs-sidebar-group--horizontal[data-v-c2188d24] {
6
+ margin-block-start: 0;
7
+ margin-inline-start: var(--rs-sidebar-group-gap);
8
+ }
9
+ .rs-sidebar-group__title[data-v-c2188d24] {
10
+ padding-block: var(--rs-space-xs);
11
+ padding-inline: var(--rs-space-sm);
12
+ color: var(--rs-sidebar-subtitle);
8
13
  font-size: var(--rs-font-size-xs);
9
14
  font-weight: var(--rs-font-weight-semibold);
10
15
  letter-spacing: 0.04em;
11
16
  }
12
- .rs-sidebar-group__body[data-v-15de96fa] {
17
+ .rs-sidebar-group__body[data-v-c2188d24] {
13
18
  display: grid;
14
19
  gap: var(--rs-space-xs);
15
20
  }
21
+ .rs-sidebar-group--horizontal[data-v-c2188d24] {
22
+ display: flex;
23
+ flex-direction: row;
24
+ align-items: center;
25
+ min-inline-size: 0;
26
+ }
27
+ .rs-sidebar-group--horizontal .rs-sidebar-group__body[data-v-c2188d24] {
28
+ display: flex;
29
+ flex-direction: row;
30
+ align-items: center;
31
+ flex-wrap: wrap;
32
+ }
@@ -2,11 +2,15 @@ type __VLS_Props = {
2
2
  title?: string;
3
3
  collapsed?: boolean;
4
4
  };
5
- declare var __VLS_1: {};
5
+ declare var __VLS_1: {
6
+ collapsed: boolean;
7
+ };
6
8
  type __VLS_Slots = {} & {
7
9
  default?: (props: typeof __VLS_1) => any;
8
10
  };
9
- declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
12
+ collapsed: boolean;
13
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
14
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
11
15
  declare const _default: typeof __VLS_export;
12
16
  export default _default;
@@ -1,20 +1,33 @@
1
- import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, renderSlot, toDisplayString } from "vue";
1
+ import { RS_SIDEBAR_KEY, resolveRsSidebarCollapsed } from "./sidebar-utils.js";
2
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, inject, normalizeClass, openBlock, renderSlot, toDisplayString } from "vue";
2
3
  //#region src/components/sidebar/src/RsSidebarGroup.vue?vue&type=script&setup=true&lang.ts
3
- var _hoisted_1 = { class: "rs-sidebar-group" };
4
+ var _hoisted_1 = ["role", "aria-label"];
4
5
  var _hoisted_2 = {
5
6
  key: 0,
6
7
  class: "rs-sidebar-group__title"
7
8
  };
8
9
  var _hoisted_3 = { class: "rs-sidebar-group__body" };
9
10
  var RsSidebarGroup_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
+ name: "RsSidebarGroup",
10
12
  __name: "RsSidebarGroup",
11
13
  props: {
12
14
  title: {},
13
- collapsed: { type: Boolean }
15
+ collapsed: {
16
+ type: Boolean,
17
+ default: void 0
18
+ }
14
19
  },
15
20
  setup(__props) {
21
+ const props = __props;
22
+ const ctx = inject(RS_SIDEBAR_KEY, null);
23
+ const isCollapsed = computed(() => resolveRsSidebarCollapsed(props.collapsed, ctx?.collapsed.value));
24
+ const orientation = computed(() => ctx?.orientation.value ?? "vertical");
16
25
  return (_ctx, _cache) => {
17
- return openBlock(), createElementBlock("section", _hoisted_1, [__props.title && !__props.collapsed ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(__props.title), 1)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])]);
26
+ return openBlock(), createElementBlock("section", {
27
+ class: normalizeClass(["rs-sidebar-group", [`rs-sidebar-group--${orientation.value}`, { "rs-sidebar-group--collapsed": isCollapsed.value }]]),
28
+ role: __props.title ? "group" : void 0,
29
+ "aria-label": __props.title || void 0
30
+ }, [__props.title && !isCollapsed.value ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(__props.title), 1)) : createCommentVNode("", true), createElementVNode("div", _hoisted_3, [renderSlot(_ctx.$slots, "default", { collapsed: isCollapsed.value }, void 0, true)])], 10, _hoisted_1);
18
31
  };
19
32
  }
20
33
  });
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsSidebarGroup_vue_vue_type_script_setup_true_lang_default from "./RsSidebarGroup.impl.js";
4
4
 
5
5
  //#region src/components/sidebar/src/RsSidebarGroup.vue
6
- var RsSidebarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsSidebarGroup_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-15de96fa"]]);
6
+ var RsSidebarGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsSidebarGroup_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-c2188d24"]]);
7
7
  //#endregion
8
8
  export { RsSidebarGroup_default as default };
@@ -1,45 +1,75 @@
1
1
 
2
- .rs-sidebar-item[data-v-0c539439] {
2
+ .rs-sidebar-item[data-v-b40cbb52] {
3
3
  display: flex;
4
4
  align-items: center;
5
- gap: var(--rs-space-sm);
6
- width: 100%;
7
- min-height: var(--rs-control-height-md);
5
+ gap: var(--rs-sidebar-gap);
6
+ inline-size: 100%;
7
+ min-block-size: var(--rs-control-height-md);
8
8
  box-sizing: border-box;
9
- padding: 0 var(--rs-space-sm);
9
+ padding-block: 0;
10
+ padding-inline: var(--rs-space-sm);
10
11
  border: 1px solid transparent;
11
12
  border-radius: var(--rs-radius-sm);
12
13
  background: transparent;
13
- color: var(--rs-muted);
14
+ color: var(--rs-sidebar-item);
14
15
  font: inherit;
16
+ text-decoration: none;
15
17
  cursor: pointer;
16
18
  transition:
17
- background var(--rs-transition-fast),
19
+ background-color var(--rs-transition-fast),
18
20
  border-color var(--rs-transition-fast),
19
21
  color var(--rs-transition-fast);
20
22
  }
21
- .rs-sidebar-item[data-v-0c539439]:hover:not(:disabled) {
22
- background: var(--rs-item-hover);
23
- color: var(--rs-text);
23
+ .rs-sidebar-item--horizontal[data-v-b40cbb52] {
24
+ inline-size: auto;
24
25
  }
25
- .rs-sidebar-item--active[data-v-0c539439] {
26
- background: color-mix(in srgb, var(--rs-primary) 12%, transparent);
27
- color: var(--rs-primary);
26
+ .rs-sidebar-item[data-v-b40cbb52]:hover:not(:disabled):not([aria-disabled='true']) {
27
+ background: var(--rs-sidebar-item-hover-bg);
28
+ color: var(--rs-sidebar-item-hover);
28
29
  }
29
- .rs-sidebar-item--collapsed[data-v-0c539439] {
30
+ .rs-sidebar-item--active[data-v-b40cbb52] {
31
+ background: var(--rs-sidebar-item-active-bg);
32
+ color: var(--rs-sidebar-item-active);
33
+ }
34
+ .rs-sidebar-item--collapsed[data-v-b40cbb52] {
30
35
  justify-content: center;
31
- padding: 0;
36
+ padding-inline: 0;
32
37
  }
33
- .rs-sidebar-item[data-v-0c539439]:disabled {
34
- opacity: 0.38;
38
+ .rs-sidebar-item[data-v-b40cbb52]:disabled,
39
+ .rs-sidebar-item[aria-disabled='true'][data-v-b40cbb52] {
40
+ opacity: var(--rs-sidebar-disabled-opacity);
35
41
  cursor: not-allowed;
36
42
  }
37
- .rs-sidebar-item__icon[data-v-0c539439] {
43
+ .rs-sidebar-item[data-v-b40cbb52]:focus {
44
+ outline: none;
45
+ }
46
+ .rs-sidebar-item[data-v-b40cbb52]:focus-visible {
47
+ box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
48
+ }
49
+ .rs-sidebar-item__icon[data-v-b40cbb52] {
38
50
  flex: 0 0 auto;
39
51
  }
40
- .rs-sidebar-item__label[data-v-0c539439] {
41
- min-width: 0;
52
+ .rs-sidebar-item__label[data-v-b40cbb52] {
53
+ min-inline-size: 0;
42
54
  overflow: hidden;
43
55
  text-overflow: ellipsis;
44
56
  white-space: nowrap;
45
57
  }
58
+ .rs-sidebar-item__badge[data-v-b40cbb52] {
59
+ margin-inline-start: auto;
60
+ min-inline-size: 1.1em;
61
+ padding-block: 0;
62
+ padding-inline: var(--rs-space-xs);
63
+ border-radius: var(--rs-radius-full);
64
+ background: var(--rs-sidebar-badge-bg);
65
+ color: var(--rs-sidebar-badge);
66
+ font-size: var(--rs-font-size-xs);
67
+ line-height: var(--rs-line-height-normal);
68
+ text-align: center;
69
+ }
70
+ .rs-sidebar-item__badge--dot[data-v-b40cbb52] {
71
+ min-inline-size: 0.45rem;
72
+ block-size: 0.45rem;
73
+ padding: 0;
74
+ margin-inline-start: 0;
75
+ }