niuma-ui 2.0.4 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/dist/components/_shared/index.d.ts +2 -2
  3. package/dist/components/_shared/src/overlay-utils.d.ts +44 -1
  4. package/dist/components/_shared/src/overlay-utils.js +87 -2
  5. package/dist/components/_shared/src/reka.js +2 -2
  6. package/dist/components/alert/index.d.ts +1 -0
  7. package/dist/components/alert/src/RsAlert.css +120 -65
  8. package/dist/components/alert/src/RsAlert.d.ts +24 -5
  9. package/dist/components/alert/src/RsAlert.impl.js +108 -36
  10. package/dist/components/alert/src/RsAlert.js +1 -1
  11. package/dist/components/alert/src/alert-utils.d.ts +37 -0
  12. package/dist/components/alert/src/alert-utils.js +71 -0
  13. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +1 -1
  14. package/dist/components/button/src/RsButton.impl.js +1 -1
  15. package/dist/components/card/src/RsCard.d.ts +1 -1
  16. package/dist/components/code-block/index.d.ts +1 -0
  17. package/dist/components/code-block/src/RsCodeBlock.css +93 -52
  18. package/dist/components/code-block/src/RsCodeBlock.d.ts +36 -9
  19. package/dist/components/code-block/src/RsCodeBlock.impl.js +203 -84
  20. package/dist/components/code-block/src/RsCodeBlock.js +1 -1
  21. package/dist/components/code-block/src/code-block-highlight.d.ts +4 -0
  22. package/dist/components/code-block/src/code-block-highlight.js +34 -0
  23. package/dist/components/code-block/src/code-block-utils.d.ts +23 -0
  24. package/dist/components/code-block/src/code-block-utils.js +71 -0
  25. package/dist/components/code-editor/index.d.ts +1 -1
  26. package/dist/components/code-editor/src/RsCodeEditor.css +118 -92
  27. package/dist/components/code-editor/src/RsCodeEditor.d.ts +14 -3
  28. package/dist/components/code-editor/src/RsCodeEditor.impl.js +261 -94
  29. package/dist/components/code-editor/src/RsCodeEditor.js +1 -1
  30. package/dist/components/code-editor/src/code-editor-utils.d.ts +15 -0
  31. package/dist/components/code-editor/src/code-editor-utils.js +36 -1
  32. package/dist/components/code-editor/src/code-mirror-completion.d.ts +1 -1
  33. package/dist/components/code-editor/src/code-mirror-completion.js +8 -5
  34. package/dist/components/code-editor/src/code-mirror-diagnostics.d.ts +2 -3
  35. package/dist/components/code-editor/src/code-mirror-diagnostics.js +3 -4
  36. package/dist/components/code-editor/src/code-mirror-ghost.d.ts +1 -1
  37. package/dist/components/code-editor/src/code-mirror-ghost.js +12 -3
  38. package/dist/components/code-editor/src/code-mirror-inline-edit.js +8 -3
  39. package/dist/components/code-editor/src/code-mirror-intel.d.ts +2 -2
  40. package/dist/components/code-editor/src/code-mirror-intel.js +50 -39
  41. package/dist/components/code-editor/src/code-mirror-lang.js +4 -0
  42. package/dist/components/code-editor/src/code-mirror-session.d.ts +13 -0
  43. package/dist/components/code-editor/src/code-mirror-session.js +30 -0
  44. package/dist/components/context-menu/index.d.ts +1 -1
  45. package/dist/components/context-menu/src/RsContextMenu.css +115 -89
  46. package/dist/components/context-menu/src/RsContextMenu.d.ts +32 -11
  47. package/dist/components/context-menu/src/RsContextMenu.impl.js +795 -48
  48. package/dist/components/context-menu/src/RsContextMenuItems.d.ts +25 -1
  49. package/dist/components/context-menu/src/RsContextMenuItems.impl.js +110 -61
  50. package/dist/components/context-menu/src/context-menu-utils.d.ts +89 -3
  51. package/dist/components/context-menu/src/context-menu-utils.js +168 -3
  52. package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
  53. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
  54. package/dist/components/descriptions/index.d.ts +1 -1
  55. package/dist/components/descriptions/src/RsDescriptions.css +38 -11
  56. package/dist/components/descriptions/src/RsDescriptions.d.ts +20 -4
  57. package/dist/components/descriptions/src/RsDescriptions.impl.js +89 -19
  58. package/dist/components/descriptions/src/RsDescriptionsItem.impl.js +13 -6
  59. package/dist/components/descriptions/src/descriptions-utils.d.ts +19 -0
  60. package/dist/components/descriptions/src/descriptions-utils.js +39 -1
  61. package/dist/components/dialog/index.d.ts +1 -1
  62. package/dist/components/dialog/src/RsConfirmDialog.css +47 -21
  63. package/dist/components/dialog/src/RsConfirmDialog.d.ts +19 -7
  64. package/dist/components/dialog/src/RsConfirmDialog.impl.js +349 -119
  65. package/dist/components/dialog/src/RsConfirmDialog.js +2 -1
  66. package/dist/components/dialog/src/RsDialog.css +102 -109
  67. package/dist/components/dialog/src/RsDialog.d.ts +34 -24
  68. package/dist/components/dialog/src/RsDialog.impl.js +410 -177
  69. package/dist/components/dialog/src/RsDialog.js +2 -1
  70. package/dist/components/dialog/src/dialog-utils.d.ts +40 -1
  71. package/dist/components/dialog/src/dialog-utils.js +152 -1
  72. package/dist/components/dialog/src/dialog-window.js +29 -8
  73. package/dist/components/drawer/index.d.ts +1 -1
  74. package/dist/components/drawer/src/RsDrawer.css +61 -29
  75. package/dist/components/drawer/src/RsDrawer.d.ts +37 -21
  76. package/dist/components/drawer/src/RsDrawer.impl.js +441 -223
  77. package/dist/components/drawer/src/drawer-utils.d.ts +35 -0
  78. package/dist/components/drawer/src/drawer-utils.js +131 -1
  79. package/dist/components/dropdown/index.d.ts +1 -1
  80. package/dist/components/dropdown/src/RsDropdown.css +140 -61
  81. package/dist/components/dropdown/src/RsDropdown.d.ts +39 -6
  82. package/dist/components/dropdown/src/RsDropdown.impl.js +693 -63
  83. package/dist/components/dropdown/src/RsDropdownItemView.impl.js +17 -7
  84. package/dist/components/dropdown/src/RsDropdownItems.d.ts +32 -3
  85. package/dist/components/dropdown/src/RsDropdownItems.impl.js +171 -59
  86. package/dist/components/dropdown/src/dropdown-utils.d.ts +50 -0
  87. package/dist/components/dropdown/src/dropdown-utils.js +103 -3
  88. package/dist/components/empty/index.d.ts +1 -0
  89. package/dist/components/empty/src/RsEmpty.css +105 -23
  90. package/dist/components/empty/src/RsEmpty.d.ts +27 -4
  91. package/dist/components/empty/src/RsEmpty.impl.js +154 -11
  92. package/dist/components/empty/src/RsEmpty.js +2 -1
  93. package/dist/components/empty/src/empty-utils.d.ts +28 -0
  94. package/dist/components/empty/src/empty-utils.js +55 -0
  95. package/dist/components/form/src/RsForm.d.ts +1 -1
  96. package/dist/components/input-number/src/RsInputNumber.d.ts +1 -1
  97. package/dist/components/label/src/RsLabel.d.ts +1 -1
  98. package/dist/components/loading/index.d.ts +1 -0
  99. package/dist/components/loading/src/RsLoading.css +13 -97
  100. package/dist/components/loading/src/RsLoading.d.ts +52 -2
  101. package/dist/components/loading/src/RsLoading.impl.js +216 -33
  102. package/dist/components/loading/src/RsLoading.js +2 -1
  103. package/dist/components/loading/src/loading-status.css +210 -0
  104. package/dist/components/loading/src/loading-status.d.ts +34 -0
  105. package/dist/components/loading/src/loading-status.impl.js +84 -0
  106. package/dist/components/loading/src/loading-status.js +8 -0
  107. package/dist/components/loading/src/loading-utils.d.ts +51 -4
  108. package/dist/components/loading/src/loading-utils.js +122 -0
  109. package/dist/components/loading-bar/index.d.ts +1 -0
  110. package/dist/components/loading-bar/src/RsLoadingBar.css +72 -8
  111. package/dist/components/loading-bar/src/RsLoadingBar.d.ts +55 -11
  112. package/dist/components/loading-bar/src/RsLoadingBar.impl.js +298 -57
  113. package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
  114. package/dist/components/loading-bar/src/loading-bar-utils.d.ts +69 -0
  115. package/dist/components/loading-bar/src/loading-bar-utils.js +97 -0
  116. package/dist/components/log/src/RsLog.css +52 -144
  117. package/dist/components/log/src/RsLog.d.ts +12 -11
  118. package/dist/components/log/src/RsLog.impl.js +181 -148
  119. package/dist/components/log/src/RsLog.js +1 -1
  120. package/dist/components/log/src/RsLogRow.css +152 -0
  121. package/dist/components/log/src/RsLogRow.d.ts +35 -0
  122. package/dist/components/log/src/RsLogRow.impl.js +91 -0
  123. package/dist/components/log/src/RsLogRow.js +8 -0
  124. package/dist/components/log/src/log-utils.d.ts +8 -0
  125. package/dist/components/log/src/log-utils.js +71 -10
  126. package/dist/components/markdown/index.d.ts +1 -1
  127. package/dist/components/markdown/src/RsMarkdown.css +75 -32
  128. package/dist/components/markdown/src/RsMarkdown.d.ts +6 -2
  129. package/dist/components/markdown/src/RsMarkdown.impl.js +185 -17
  130. package/dist/components/markdown/src/markdown-utils.d.ts +26 -0
  131. package/dist/components/markdown/src/markdown-utils.js +114 -12
  132. package/dist/components/mentions/src/RsMentions.d.ts +2 -2
  133. package/dist/components/menu/index.d.ts +1 -1
  134. package/dist/components/menu/src/RsMenu.css +70 -29
  135. package/dist/components/menu/src/RsMenu.d.ts +58 -4
  136. package/dist/components/menu/src/RsMenu.impl.js +93 -46
  137. package/dist/components/menu/src/RsMenuItems.d.ts +22 -5
  138. package/dist/components/menu/src/RsMenuItems.impl.js +506 -154
  139. package/dist/components/menu/src/menu-utils.d.ts +56 -0
  140. package/dist/components/menu/src/menu-utils.js +139 -6
  141. package/dist/components/monaco-editor/index.d.ts +1 -1
  142. package/dist/components/monaco-editor/src/RsMonacoEditor.css +28 -16
  143. package/dist/components/monaco-editor/src/RsMonacoEditor.d.ts +39 -41
  144. package/dist/components/monaco-editor/src/RsMonacoEditor.impl.js +212 -133
  145. package/dist/components/monaco-editor/src/RsMonacoEditor.js +1 -1
  146. package/dist/components/monaco-editor/src/monaco-editor-utils.d.ts +126 -0
  147. package/dist/components/monaco-editor/src/monaco-editor-utils.js +302 -0
  148. package/dist/components/pagination/index.d.ts +2 -2
  149. package/dist/components/pagination/src/RsPagination.css +93 -46
  150. package/dist/components/pagination/src/RsPagination.d.ts +68 -8
  151. package/dist/components/pagination/src/RsPagination.impl.js +229 -86
  152. package/dist/components/pagination/src/RsPagination.js +1 -1
  153. package/dist/components/pagination/src/pagination-utils.d.ts +59 -0
  154. package/dist/components/pagination/src/pagination-utils.js +105 -1
  155. package/dist/components/popover/index.d.ts +1 -0
  156. package/dist/components/popover/src/RsPopover.css +124 -14
  157. package/dist/components/popover/src/RsPopover.d.ts +38 -7
  158. package/dist/components/popover/src/RsPopover.impl.js +546 -35
  159. package/dist/components/popover/src/RsPopover.js +2 -1
  160. package/dist/components/popover/src/popover-utils.d.ts +24 -2
  161. package/dist/components/popover/src/popover-utils.js +55 -0
  162. package/dist/components/sidebar/index.d.ts +1 -0
  163. package/dist/components/sidebar/src/RsSidebar.css +91 -33
  164. package/dist/components/sidebar/src/RsSidebar.d.ts +17 -9
  165. package/dist/components/sidebar/src/RsSidebar.impl.js +124 -22
  166. package/dist/components/sidebar/src/RsSidebar.js +1 -1
  167. package/dist/components/sidebar/src/RsSidebarGroup.css +23 -6
  168. package/dist/components/sidebar/src/RsSidebarGroup.d.ts +6 -2
  169. package/dist/components/sidebar/src/RsSidebarGroup.impl.js +17 -4
  170. package/dist/components/sidebar/src/RsSidebarGroup.js +1 -1
  171. package/dist/components/sidebar/src/RsSidebarItem.css +50 -20
  172. package/dist/components/sidebar/src/RsSidebarItem.d.ts +21 -3
  173. package/dist/components/sidebar/src/RsSidebarItem.impl.js +71 -20
  174. package/dist/components/sidebar/src/RsSidebarItem.js +1 -1
  175. package/dist/components/sidebar/src/sidebar-utils.d.ts +47 -0
  176. package/dist/components/sidebar/src/sidebar-utils.js +72 -0
  177. package/dist/components/split-pane/index.d.ts +2 -2
  178. package/dist/components/split-pane/src/RsSplitPane.css +41 -30
  179. package/dist/components/split-pane/src/RsSplitPane.d.ts +6 -2
  180. package/dist/components/split-pane/src/RsSplitPane.impl.js +153 -45
  181. package/dist/components/split-pane/src/split-pane-utils.d.ts +23 -0
  182. package/dist/components/split-pane/src/split-pane-utils.js +18 -1
  183. package/dist/components/stat-card/index.d.ts +1 -0
  184. package/dist/components/stat-card/src/RsStatCard.css +129 -25
  185. package/dist/components/stat-card/src/RsStatCard.d.ts +40 -4
  186. package/dist/components/stat-card/src/RsStatCard.impl.js +106 -12
  187. package/dist/components/stat-card/src/RsStatCard.js +1 -1
  188. package/dist/components/stat-card/src/stat-card-utils.d.ts +39 -0
  189. package/dist/components/stat-card/src/stat-card-utils.js +113 -0
  190. package/dist/components/steps/index.d.ts +1 -1
  191. package/dist/components/steps/src/RsSteps.css +158 -37
  192. package/dist/components/steps/src/RsSteps.d.ts +69 -5
  193. package/dist/components/steps/src/RsSteps.impl.js +168 -28
  194. package/dist/components/steps/src/RsSteps.js +1 -1
  195. package/dist/components/steps/src/steps-utils.d.ts +51 -1
  196. package/dist/components/steps/src/steps-utils.js +67 -1
  197. package/dist/components/table/src/RsTable.impl.js +4 -2
  198. package/dist/components/table/src/composables/useRsTableContextMenu.d.ts +16 -0
  199. package/dist/components/table/src/composables/useRsTableContextMenu.js +1 -1
  200. package/dist/components/table/src/composables/useRsTableEngine.js +6 -2
  201. package/dist/components/table/src/composables/useRsTableScrollLayout.js +2 -0
  202. package/dist/components/table/src/composables/useRsTableShell.d.ts +16 -0
  203. package/dist/components/table/src/rs-table-props.d.ts +1 -1
  204. package/dist/components/table/src/rs-table-props.js +0 -1
  205. package/dist/components/table/src/table-body/RsTableBody.impl.js +1 -0
  206. package/dist/components/table/src/table-body/RsTableCellEditor.impl.js +10 -2
  207. package/dist/components/table/src/table-body/RsTableColGroup.impl.js +1 -0
  208. package/dist/components/table/src/table-footer/RsTableSummaryRow.impl.js +1 -0
  209. package/dist/components/table/src/table-header/RsTableHeader.impl.js +1 -0
  210. package/dist/components/table/src/utils/table-utils.d.ts +10 -6
  211. package/dist/components/table/src/utils/table-utils.js +27 -25
  212. package/dist/components/table/style/rs-table.css +34 -20
  213. package/dist/components/tabs/index.d.ts +2 -2
  214. package/dist/components/tabs/src/RsTabs.css +225 -101
  215. package/dist/components/tabs/src/RsTabs.d.ts +37 -8
  216. package/dist/components/tabs/src/RsTabs.impl.js +400 -270
  217. package/dist/components/tabs/src/tabs-utils.d.ts +41 -2
  218. package/dist/components/tabs/src/tabs-utils.js +55 -1
  219. package/dist/components/terminal/index.d.ts +1 -1
  220. package/dist/components/terminal/src/RsTerminal.css +60 -37
  221. package/dist/components/terminal/src/RsTerminal.d.ts +36 -4
  222. package/dist/components/terminal/src/RsTerminal.impl.js +288 -68
  223. package/dist/components/terminal/src/RsTerminal.js +1 -1
  224. package/dist/components/terminal/src/terminal-utils.d.ts +42 -4
  225. package/dist/components/terminal/src/terminal-utils.js +113 -10
  226. package/dist/components/textarea/src/RsTextarea.d.ts +1 -1
  227. package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
  228. package/dist/components/toaster/src/RsToaster.css +156 -203
  229. package/dist/components/toaster/src/RsToaster.d.ts +32 -2
  230. package/dist/components/toaster/src/RsToaster.impl.js +309 -34
  231. package/dist/components/toaster/src/toast-store.d.ts +95 -0
  232. package/dist/components/toaster/src/toast-store.js +177 -0
  233. package/dist/components/toaster/src/toast-utils.d.ts +60 -0
  234. package/dist/components/toaster/src/toast-utils.js +86 -0
  235. package/dist/components/toolbar/index.d.ts +1 -1
  236. package/dist/components/toolbar/src/RsToolbar.css +206 -32
  237. package/dist/components/toolbar/src/RsToolbar.d.ts +41 -16
  238. package/dist/components/toolbar/src/RsToolbar.impl.js +146 -18
  239. package/dist/components/toolbar/src/RsToolbar.js +2 -1
  240. package/dist/components/toolbar/src/toolbar-utils.d.ts +20 -0
  241. package/dist/components/toolbar/src/toolbar-utils.js +105 -0
  242. package/dist/components/tooltip/index.d.ts +1 -0
  243. package/dist/components/tooltip/src/RsTooltip.css +104 -26
  244. package/dist/components/tooltip/src/RsTooltip.d.ts +38 -16
  245. package/dist/components/tooltip/src/RsTooltip.impl.js +420 -51
  246. package/dist/components/tooltip/src/RsTooltip.js +2 -1
  247. package/dist/components/tooltip/src/RsTooltipProvider.d.ts +4 -4
  248. package/dist/components/tooltip/src/RsTooltipProvider.impl.js +51 -14
  249. package/dist/components/tooltip/src/tooltip-utils.d.ts +30 -0
  250. package/dist/components/tooltip/src/tooltip-utils.js +23 -0
  251. package/dist/components/tree/index.d.ts +2 -2
  252. package/dist/components/tree/src/RsTree.css +84 -75
  253. package/dist/components/tree/src/RsTree.d.ts +20 -20
  254. package/dist/components/tree/src/RsTree.impl.js +292 -66
  255. package/dist/components/tree/src/RsTree.js +1 -1
  256. package/dist/components/tree/src/tree-utils.d.ts +22 -0
  257. package/dist/components/tree/src/tree-utils.js +18 -4
  258. package/dist/components/tree-select/src/RsTreeSelect.d.ts +1 -1
  259. package/dist/components/virtual-list/index.d.ts +1 -1
  260. package/dist/components/virtual-list/src/RsVirtualList.css +64 -9
  261. package/dist/components/virtual-list/src/RsVirtualList.d.ts +31 -5
  262. package/dist/components/virtual-list/src/RsVirtualList.impl.js +425 -76
  263. package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
  264. package/dist/components/virtual-list/src/virtual-list-utils.d.ts +64 -1
  265. package/dist/components/virtual-list/src/virtual-list-utils.js +215 -1
  266. package/dist/composables/useRsLoadingBar.d.ts +2 -5
  267. package/dist/composables/useRsLoadingBar.js +21 -5
  268. package/dist/composables/useRsTabsNav.d.ts +3 -1
  269. package/dist/composables/useRsTabsNav.js +96 -28
  270. package/dist/composables/useRsToast.d.ts +11 -13
  271. package/dist/composables/useRsToast.js +66 -17
  272. package/dist/index.d.ts +30 -21
  273. package/dist/index.js +14 -0
  274. package/dist/locale/apply.js +6 -1
  275. package/dist/locale/messages.js +128 -2
  276. package/dist/styles.css +460 -797
  277. package/dist/theme/brand.example.css +2 -1
  278. package/dist/vite-plugins/niuma-ui-host.js +1 -1
  279. package/package.json +2 -3
@@ -1,7 +1,8 @@
1
1
  import './RsDialog.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
3
  import RsDialog_vue_vue_type_script_setup_true_lang_default from "./RsDialog.impl.js";
3
4
 
4
5
  //#region src/components/dialog/src/RsDialog.vue
5
- var RsDialog_default = RsDialog_vue_vue_type_script_setup_true_lang_default;
6
+ var RsDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-36d0d285"]]);
6
7
  //#endregion
7
8
  export { RsDialog_default as default };
@@ -1,4 +1,4 @@
1
- import type { Component } from 'vue';
1
+ import { type Component } from 'vue';
2
2
  import type { RsLocale } from '../../../locale/types';
3
3
  import type { RsThemeMode } from '../../../theme/types';
4
4
  import type { RsFeedbackTone } from '../../_shared/src/overlay-utils';
@@ -35,6 +35,12 @@ export type RsConfirmCloseReason = 'confirm' | 'cancel' | 'escape' | 'programmat
35
35
  * 未提供或返回 void/true 时允许关闭。
36
36
  */
37
37
  export type RsConfirmBeforeClose = (reason: RsConfirmCloseReason) => boolean | void | Promise<boolean | void>;
38
+ /** 模板 ref。close 走 beforeClose;focus 把焦点送进确认框。 */
39
+ export interface RsConfirmDialogExpose {
40
+ close: (reason?: RsConfirmCloseReason) => Promise<boolean>;
41
+ focus: () => void;
42
+ }
43
+ export type RsConfirmDialogInstance = RsConfirmDialogExpose;
38
44
  export interface RsConfirmOptions {
39
45
  title?: string;
40
46
  /** 次要说明(标题与正文之间,对应业务侧常见 subtitle) */
@@ -93,3 +99,36 @@ export declare function resolveDialogOverlayStyle(options?: {
93
99
  overlayOpacity?: number;
94
100
  overlayBlur?: number | string;
95
101
  }): Record<string, string> | undefined;
102
+ /** 模板 ref 类型。close 走 beforeClose;focus 把焦点送进对话框。 */
103
+ export interface RsDialogExpose {
104
+ close: (reason?: RsDialogCloseReason) => Promise<boolean>;
105
+ openDialog: () => void;
106
+ focus: () => void;
107
+ }
108
+ export type RsDialogInstance = RsDialogExpose;
109
+ /** 对话框内可 Tab 到的控件。不按 client rect 过滤:jsdom 没有布局。 */
110
+ export declare function listDialogTabbables(root: ParentNode | null | undefined): HTMLElement[];
111
+ export declare function dialogTargetOwnsTab(target: EventTarget | null): boolean;
112
+ /** Tab 在对话框边界上的下一焦点。stay 表示交给浏览器。 */
113
+ export declare function resolveDialogTabTarget(root: HTMLElement, active: Element | null, shift: boolean): HTMLElement | 'stay';
114
+ /** 层栈变化时递增,让每个实例重新判断自己是不是最上层。 */
115
+ export declare const dialogLayerTick: import("vue").Ref<number, number>;
116
+ export declare function pushDialogLayer(id: string): void;
117
+ export declare function removeDialogLayer(id: string): void;
118
+ export declare function isTopDialogLayer(id: string): boolean;
119
+ /**
120
+ * 模态层锁 body 滚动,并补上滚动条宽度,避免页面横跳。
121
+ * 引用计数:嵌套对话框只在最后一层关闭时恢复。重复释放无操作。
122
+ */
123
+ export declare function acquireDialogScrollLock(): () => void;
124
+ /**
125
+ * 把对话框外壳的兄弟(以及祖先的兄弟)标成 inert,背后内容不可点、不可 Tab。
126
+ * 不 inert body 本身,否则 Teleport 进去的对话框也会被冻住。
127
+ * 已经 inert 的节点不动,释放时也不会被我们解开。
128
+ */
129
+ export declare function inertDialogSiblings(layer: HTMLElement): () => void;
130
+ /** 只有最上层模态对话框持有 inert。别人释放不会清掉当前层。 */
131
+ export declare function claimDialogInert(ownerId: string, layer: HTMLElement): void;
132
+ export declare function releaseDialogInert(ownerId: string): void;
133
+ /** 测试收尾:清层栈、滚动锁和 inert,避免上一例失败把 body 留在 hidden。 */
134
+ export declare function resetDialogGuardsForTests(): void;
@@ -1,4 +1,5 @@
1
1
  import { dialogViewportSize } from "./dialog-viewport.js";
2
+ import { ref } from "vue";
2
3
  //#region src/components/dialog/src/dialog-utils.ts
3
4
  function isRsDialogWidthPreset(width) {
4
5
  return width === "sm" || width === "md" || width === "lg";
@@ -54,5 +55,155 @@ function resolveDialogOverlayStyle(options) {
54
55
  if (options.overlayBlur != null && options.overlayBlur !== "") style["--rs-dialog-overlay-blur"] = typeof options.overlayBlur === "number" ? `${options.overlayBlur}px` : String(options.overlayBlur);
55
56
  return Object.keys(style).length ? style : void 0;
56
57
  }
58
+ var DIALOG_TAB_SELECTOR = [
59
+ "a[href]",
60
+ "button:not([disabled])",
61
+ "input:not([disabled]):not([type=\"hidden\"])",
62
+ "select:not([disabled])",
63
+ "textarea:not([disabled])",
64
+ "[tabindex]:not([tabindex=\"-1\"])"
65
+ ].join(", ");
66
+ /** 编辑器自己消费 Tab。对话框陷阱在这些节点上放手。 */
67
+ var DIALOG_TAB_OWNER = ".monaco-editor, .cm-editor, .cm-content, .xterm, [data-rs-dialog-tab-owner]";
68
+ var INERT_SKIP = "script, style, link, meta, title";
69
+ /** 对话框内可 Tab 到的控件。不按 client rect 过滤:jsdom 没有布局。 */
70
+ function listDialogTabbables(root) {
71
+ if (!root || typeof root.querySelectorAll !== "function") return [];
72
+ const nodes = root.querySelectorAll(DIALOG_TAB_SELECTOR);
73
+ const seen = /* @__PURE__ */ new Set();
74
+ const out = [];
75
+ for (const el of nodes) {
76
+ if (seen.has(el)) continue;
77
+ if (el.tabIndex < 0) continue;
78
+ if (el.closest("[hidden], [inert]")) continue;
79
+ if (el.getAttribute("aria-disabled") === "true") continue;
80
+ seen.add(el);
81
+ out.push(el);
82
+ }
83
+ return out;
84
+ }
85
+ function dialogTargetOwnsTab(target) {
86
+ return target instanceof Element && target.closest(DIALOG_TAB_OWNER) != null;
87
+ }
88
+ /** Tab 在对话框边界上的下一焦点。stay 表示交给浏览器。 */
89
+ function resolveDialogTabTarget(root, active, shift) {
90
+ const items = listDialogTabbables(root);
91
+ const inside = active != null && root.contains(active);
92
+ if (!items.length) return inside ? "stay" : root;
93
+ const first = items[0];
94
+ const last = items[items.length - 1];
95
+ if (!inside) return shift ? last : first;
96
+ if (shift && (active === first || active === root)) return last;
97
+ if (!shift && active === last) return first;
98
+ return "stay";
99
+ }
100
+ var dialogLayerIds = [];
101
+ /** 层栈变化时递增,让每个实例重新判断自己是不是最上层。 */
102
+ var dialogLayerTick = ref(0);
103
+ function pushDialogLayer(id) {
104
+ const index = dialogLayerIds.indexOf(id);
105
+ if (index >= 0) dialogLayerIds.splice(index, 1);
106
+ dialogLayerIds.push(id);
107
+ dialogLayerTick.value += 1;
108
+ }
109
+ function removeDialogLayer(id) {
110
+ const index = dialogLayerIds.indexOf(id);
111
+ if (index < 0) return;
112
+ dialogLayerIds.splice(index, 1);
113
+ dialogLayerTick.value += 1;
114
+ }
115
+ function isTopDialogLayer(id) {
116
+ return dialogLayerIds.at(-1) === id;
117
+ }
118
+ var scrollLockCount = 0;
119
+ var scrollLockSnapshot = null;
120
+ /**
121
+ * 模态层锁 body 滚动,并补上滚动条宽度,避免页面横跳。
122
+ * 引用计数:嵌套对话框只在最后一层关闭时恢复。重复释放无操作。
123
+ */
124
+ function acquireDialogScrollLock() {
125
+ if (typeof document === "undefined") return () => {};
126
+ if (scrollLockCount === 0) {
127
+ const body = document.body;
128
+ scrollLockSnapshot = {
129
+ overflow: body.style.overflow,
130
+ paddingInlineEnd: body.style.paddingInlineEnd
131
+ };
132
+ const gap = window.innerWidth - document.documentElement.clientWidth;
133
+ body.style.overflow = "hidden";
134
+ if (gap > 0) {
135
+ const current = Number.parseFloat(getComputedStyle(body).paddingInlineEnd) || 0;
136
+ body.style.paddingInlineEnd = `${current + gap}px`;
137
+ }
138
+ }
139
+ scrollLockCount += 1;
140
+ let released = false;
141
+ return () => {
142
+ if (released) return;
143
+ released = true;
144
+ scrollLockCount = Math.max(0, scrollLockCount - 1);
145
+ if (scrollLockCount !== 0 || !scrollLockSnapshot) return;
146
+ document.body.style.overflow = scrollLockSnapshot.overflow;
147
+ document.body.style.paddingInlineEnd = scrollLockSnapshot.paddingInlineEnd;
148
+ scrollLockSnapshot = null;
149
+ };
150
+ }
151
+ function markInert(el, value) {
152
+ if (value) {
153
+ el.setAttribute("inert", "");
154
+ if ("inert" in el) el.inert = true;
155
+ return;
156
+ }
157
+ if ("inert" in el) el.inert = false;
158
+ el.removeAttribute("inert");
159
+ }
160
+ function isInert(el) {
161
+ if ("inert" in el && el.inert) return true;
162
+ return el.hasAttribute("inert");
163
+ }
164
+ function markInertSiblings(parent, current, touched) {
165
+ for (const node of Array.from(parent.children)) {
166
+ if (node === current || !(node instanceof HTMLElement)) continue;
167
+ if (node.matches(INERT_SKIP) || isInert(node)) continue;
168
+ markInert(node, true);
169
+ touched.push(node);
170
+ }
171
+ }
172
+ /**
173
+ * 把对话框外壳的兄弟(以及祖先的兄弟)标成 inert,背后内容不可点、不可 Tab。
174
+ * 不 inert body 本身,否则 Teleport 进去的对话框也会被冻住。
175
+ * 已经 inert 的节点不动,释放时也不会被我们解开。
176
+ */
177
+ function inertDialogSiblings(layer) {
178
+ if (typeof document === "undefined" || !layer.parentElement) return () => {};
179
+ const touched = [];
180
+ let current = layer;
181
+ while (current && current !== document.body) {
182
+ const parent = current.parentElement;
183
+ if (!parent) break;
184
+ markInertSiblings(parent, current, touched);
185
+ current = parent;
186
+ }
187
+ let released = false;
188
+ return () => {
189
+ if (released) return;
190
+ released = true;
191
+ for (const el of touched) markInert(el, false);
192
+ };
193
+ }
194
+ var inertRelease = null;
195
+ var inertOwner = null;
196
+ /** 只有最上层模态对话框持有 inert。别人释放不会清掉当前层。 */
197
+ function claimDialogInert(ownerId, layer) {
198
+ inertRelease?.();
199
+ inertRelease = inertDialogSiblings(layer);
200
+ inertOwner = ownerId;
201
+ }
202
+ function releaseDialogInert(ownerId) {
203
+ if (inertOwner !== ownerId) return;
204
+ inertRelease?.();
205
+ inertRelease = null;
206
+ inertOwner = null;
207
+ }
57
208
  //#endregion
58
- export { isRsDialogWidthPreset, resolveDialogOverlayStyle, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsConfirmBeforeClose, runRsDialogBeforeClose };
209
+ export { acquireDialogScrollLock, claimDialogInert, dialogLayerTick, dialogTargetOwnsTab, inertDialogSiblings, isRsDialogWidthPreset, isTopDialogLayer, listDialogTabbables, pushDialogLayer, releaseDialogInert, removeDialogLayer, resolveDialogOverlayStyle, resolveDialogTabTarget, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsConfirmBeforeClose, runRsDialogBeforeClose };
@@ -35,6 +35,9 @@ function useRsDialogWindow(options) {
35
35
  /** 交互中的目标面板;有值时 pointermove 只改 DOM,pointerup 再写回 bounds */
36
36
  let panelEl = null;
37
37
  let liveBounds = null;
38
+ let pointerBound = false;
39
+ let savedUserSelect = "";
40
+ let savedCursor = "";
38
41
  let dragState = null;
39
42
  let resizeState = null;
40
43
  function writePanelBox(next) {
@@ -49,7 +52,7 @@ function useRsDialogWindow(options) {
49
52
  function setPanelEl(el) {
50
53
  panelEl = el;
51
54
  }
52
- /** 优先用已绑定节点;否则从事件目标向上找面板(Reka DialogContent ref 不一定有 $el) */
55
+ /** 优先用已绑定节点;否则从事件目标向上找面板 */
53
56
  function ensurePanelEl(from) {
54
57
  if (panelEl?.isConnected) return panelEl;
55
58
  const found = (from instanceof Element ? from : null)?.closest(".rs-dialog__content");
@@ -208,20 +211,38 @@ function useRsDialogWindow(options) {
208
211
  }
209
212
  dragState = null;
210
213
  resizeState = null;
214
+ if (!pointerBound) return;
215
+ pointerBound = false;
211
216
  window.removeEventListener("pointermove", onPointerMove);
212
217
  window.removeEventListener("pointerup", stopInteractions);
213
- document.body.style.userSelect = "";
214
- document.body.style.cursor = "";
218
+ window.removeEventListener("pointercancel", stopInteractions);
219
+ document.body.style.userSelect = savedUserSelect;
220
+ document.body.style.cursor = savedCursor;
215
221
  }
216
- function startInteraction(cursor) {
222
+ function capturePointer(event) {
223
+ const el = panelEl;
224
+ if (!el || typeof el.setPointerCapture !== "function") return;
225
+ try {
226
+ if (typeof el.hasPointerCapture === "function" && el.hasPointerCapture(event.pointerId)) return;
227
+ el.setPointerCapture(event.pointerId);
228
+ } catch {}
229
+ }
230
+ function startInteraction(cursor, event) {
217
231
  boundsTransitionEnabled.value = false;
218
232
  clearBoundsTransitionTimer();
219
233
  refreshCachedInsets();
220
234
  liveBounds = { ...bounds.value };
221
- window.addEventListener("pointermove", onPointerMove);
222
- window.addEventListener("pointerup", stopInteractions);
235
+ if (!pointerBound) {
236
+ savedUserSelect = document.body.style.userSelect;
237
+ savedCursor = document.body.style.cursor;
238
+ window.addEventListener("pointermove", onPointerMove);
239
+ window.addEventListener("pointerup", stopInteractions);
240
+ window.addEventListener("pointercancel", stopInteractions);
241
+ pointerBound = true;
242
+ }
223
243
  document.body.style.userSelect = "none";
224
244
  document.body.style.cursor = cursor;
245
+ capturePointer(event);
225
246
  }
226
247
  function onHeaderPointerDown(event) {
227
248
  if (!options.draggable.value || isFullscreen.value) return;
@@ -233,7 +254,7 @@ function useRsDialogWindow(options) {
233
254
  startY: event.clientY,
234
255
  origin: { ...bounds.value }
235
256
  };
236
- startInteraction("move");
257
+ startInteraction("move", event);
237
258
  }
238
259
  const resizeCursor = {
239
260
  n: "ns-resize",
@@ -255,7 +276,7 @@ function useRsDialogWindow(options) {
255
276
  startY: event.clientY,
256
277
  origin: { ...bounds.value }
257
278
  };
258
- startInteraction(resizeCursor[handle]);
279
+ startInteraction(resizeCursor[handle], event);
259
280
  }
260
281
  onBeforeUnmount(() => {
261
282
  stopInteractions();
@@ -1,3 +1,3 @@
1
1
  export { default as RsDrawer } from './src/RsDrawer.js';
2
- export type { RsDrawerBeforeClose, RsDrawerCloseReason, RsDrawerDimension, RsDrawerSide, RsDrawerSize, } from './src/drawer-utils';
2
+ export type { RsDrawerBeforeClose, RsDrawerCloseReason, RsDrawerDimension, RsDrawerExpose, RsDrawerInstance, RsDrawerSide, RsDrawerSize, } from './src/drawer-utils';
3
3
  export { clampRsDrawerSize, resolveDrawerOverlayStyle, resolveRsDrawerDimensionCss, resolveRsDrawerSizeCss, resolveRsDrawerSizePx, RS_DRAWER_MAX_VIEWPORT_RATIO, RS_DRAWER_MIN_SIZE_PX, runRsDrawerBeforeClose, } from './src/drawer-utils';
@@ -2,7 +2,7 @@
2
2
  .rs-drawer__overlay {
3
3
  position: fixed;
4
4
  inset: 0;
5
- z-index: var(--rs-z-modal);
5
+ z-index: var(--rs-drawer-z, var(--rs-z-modal));
6
6
  background: var(--rs-drawer-overlay-bg, var(--rs-dialog-overlay-bg, rgb(0 0 0 / 0.24)));
7
7
  backdrop-filter: blur(var(--rs-drawer-overlay-blur, var(--rs-dialog-overlay-blur, 0px))) saturate(120%);
8
8
  -webkit-backdrop-filter: blur(var(--rs-drawer-overlay-blur, var(--rs-dialog-overlay-blur, 0px)))
@@ -12,14 +12,19 @@
12
12
  animation: rs-drawer-overlay-in var(--rs-drawer-motion-duration-in, 240ms) ease;
13
13
  }
14
14
  .rs-drawer__overlay[data-state='closed'] {
15
- animation: rs-drawer-overlay-out var(--rs-drawer-motion-duration-out, 180ms) ease;
15
+ /* forwards:结束后停在透明,避免卸掉前 Opacity 弹回 1 */
16
+ animation: rs-drawer-overlay-out var(--rs-drawer-motion-duration-out, 180ms) ease forwards;
16
17
  }
17
18
  .rs-drawer__overlay--contained {
18
19
  position: absolute;
19
20
  }
21
+ .rs-drawer__overlay--dormant {
22
+ visibility: hidden;
23
+ pointer-events: none;
24
+ }
20
25
  .rs-drawer__content {
21
26
  position: fixed;
22
- z-index: calc(var(--rs-z-modal) + 1);
27
+ z-index: calc(var(--rs-drawer-z, var(--rs-z-modal)) + 1);
23
28
  display: flex;
24
29
  flex-direction: column;
25
30
  overflow: hidden;
@@ -30,25 +35,38 @@
30
35
  color: var(--rs-text);
31
36
  box-shadow: var(--rs-shadow-lg);
32
37
  outline: none;
38
+ }
39
+ .rs-drawer__content--animate {
33
40
  will-change: transform;
34
41
  }
42
+ .rs-drawer__content:focus {
43
+ outline: none;
44
+ }
45
+ .rs-drawer__content:focus-visible {
46
+ outline: var(--rs-focus-ring-width) solid var(--rs-focus-ring);
47
+ outline-offset: -2px;
48
+ }
49
+ .rs-drawer__content--dormant {
50
+ visibility: hidden;
51
+ pointer-events: none;
52
+ }
35
53
  .rs-drawer__resize {
36
54
  position: absolute;
37
55
  z-index: 3;
38
56
  padding: 0;
39
57
  border: 0;
40
58
  background: transparent;
41
- appearance: none;
59
+ touch-action: none;
42
60
  }
43
61
  .rs-drawer__resize:focus-visible {
44
- outline: 2px solid var(--rs-primary);
62
+ outline: var(--rs-focus-ring-width) solid var(--rs-focus-ring);
45
63
  outline-offset: -2px;
46
64
  }
47
65
  .rs-drawer__content--right > .rs-drawer__resize,
48
66
  .rs-drawer__content--left > .rs-drawer__resize {
49
67
  top: 0;
50
68
  bottom: 0;
51
- width: 6px;
69
+ width: 10px;
52
70
  cursor: ew-resize;
53
71
  }
54
72
  .rs-drawer__content--right > .rs-drawer__resize {
@@ -60,7 +78,7 @@
60
78
  .rs-drawer__content--top > .rs-drawer__resize,
61
79
  .rs-drawer__content--bottom > .rs-drawer__resize {
62
80
  inset-inline: 0;
63
- height: 6px;
81
+ height: 10px;
64
82
  cursor: ns-resize;
65
83
  }
66
84
  .rs-drawer__content--top > .rs-drawer__resize {
@@ -112,12 +130,14 @@
112
130
  right: 0;
113
131
  border-right: 0;
114
132
  border-radius: var(--rs-radius) 0 0 var(--rs-radius);
133
+ padding-right: env(safe-area-inset-right, 0px);
115
134
  }
116
135
  .rs-drawer__content--left {
117
136
  left: 0;
118
137
  right: auto;
119
138
  border-left: 0;
120
139
  border-radius: 0 var(--rs-radius) var(--rs-radius) 0;
140
+ padding-left: env(safe-area-inset-left, 0px);
121
141
  }
122
142
  .rs-drawer__content--top,
123
143
  .rs-drawer__content--bottom {
@@ -131,11 +151,13 @@
131
151
  top: 0;
132
152
  border-top: 0;
133
153
  border-radius: 0 0 var(--rs-radius) var(--rs-radius);
154
+ padding-top: env(safe-area-inset-top, 0px);
134
155
  }
135
156
  .rs-drawer__content--bottom {
136
157
  bottom: 0;
137
158
  border-bottom: 0;
138
159
  border-radius: var(--rs-radius) var(--rs-radius) 0 0;
160
+ padding-bottom: env(safe-area-inset-bottom, 0px);
139
161
  }
140
162
  .rs-drawer__content--sm:is(.rs-drawer__content--left, .rs-drawer__content--right) {
141
163
  --rs-drawer-panel-size: 20rem;
@@ -170,35 +192,33 @@
170
192
  ) {
171
193
  height: 100%;
172
194
  }
173
-
174
- /* 滑入 / 滑出(与 Reka data-state 对齐;缓动接近主流 sheet) */
175
195
  .rs-drawer__content--right[data-state='open'] {
176
196
  animation: rs-drawer-slide-right-in var(--rs-drawer-motion-duration-in, 240ms)
177
197
  cubic-bezier(0.32, 0.72, 0, 1);
178
198
  }
179
199
  .rs-drawer__content--right[data-state='closed'] {
180
- animation: rs-drawer-slide-right-out var(--rs-drawer-motion-duration-out, 180ms) ease;
200
+ animation: rs-drawer-slide-right-out var(--rs-drawer-motion-duration-out, 180ms) ease forwards;
181
201
  }
182
202
  .rs-drawer__content--left[data-state='open'] {
183
203
  animation: rs-drawer-slide-left-in var(--rs-drawer-motion-duration-in, 240ms)
184
204
  cubic-bezier(0.32, 0.72, 0, 1);
185
205
  }
186
206
  .rs-drawer__content--left[data-state='closed'] {
187
- animation: rs-drawer-slide-left-out var(--rs-drawer-motion-duration-out, 180ms) ease;
207
+ animation: rs-drawer-slide-left-out var(--rs-drawer-motion-duration-out, 180ms) ease forwards;
188
208
  }
189
209
  .rs-drawer__content--top[data-state='open'] {
190
210
  animation: rs-drawer-slide-top-in var(--rs-drawer-motion-duration-in, 240ms)
191
211
  cubic-bezier(0.32, 0.72, 0, 1);
192
212
  }
193
213
  .rs-drawer__content--top[data-state='closed'] {
194
- animation: rs-drawer-slide-top-out var(--rs-drawer-motion-duration-out, 180ms) ease;
214
+ animation: rs-drawer-slide-top-out var(--rs-drawer-motion-duration-out, 180ms) ease forwards;
195
215
  }
196
216
  .rs-drawer__content--bottom[data-state='open'] {
197
217
  animation: rs-drawer-slide-bottom-in var(--rs-drawer-motion-duration-in, 240ms)
198
218
  cubic-bezier(0.32, 0.72, 0, 1);
199
219
  }
200
220
  .rs-drawer__content--bottom[data-state='closed'] {
201
- animation: rs-drawer-slide-bottom-out var(--rs-drawer-motion-duration-out, 180ms) ease;
221
+ animation: rs-drawer-slide-bottom-out var(--rs-drawer-motion-duration-out, 180ms) ease forwards;
202
222
  }
203
223
  @keyframes rs-drawer-overlay-in {
204
224
  from {
@@ -289,10 +309,15 @@ to {
289
309
  box-sizing: border-box;
290
310
  height: var(--rs-drawer-header-height);
291
311
  min-height: var(--rs-drawer-header-min-height);
292
- padding: var(--rs-drawer-header-padding-y) var(--rs-drawer-header-padding-x);
312
+ padding-block: var(--rs-drawer-header-padding-y);
313
+ padding-inline: var(--rs-drawer-header-padding-x);
293
314
  background: var(--rs-drawer-header-bg);
294
315
  border-bottom: 1px solid var(--rs-drawer-separator, var(--rs-border-subtle));
295
316
  }
317
+ .rs-drawer__header > :first-child {
318
+ min-width: 0;
319
+ flex: 1;
320
+ }
296
321
  .rs-drawer__heading {
297
322
  min-width: 0;
298
323
  flex: 1;
@@ -301,6 +326,19 @@ to {
301
326
  flex-direction: column;
302
327
  justify-content: center;
303
328
  }
329
+ .rs-drawer__tools {
330
+ display: flex;
331
+ align-items: center;
332
+ gap: var(--rs-space-xs);
333
+ flex-shrink: 0;
334
+ margin-inline-start: auto;
335
+ }
336
+ .rs-drawer__extra {
337
+ display: flex;
338
+ align-items: center;
339
+ gap: var(--rs-space-xs);
340
+ flex-shrink: 0;
341
+ }
304
342
  .rs-drawer__footer {
305
343
  display: flex;
306
344
  align-items: center;
@@ -310,7 +348,8 @@ to {
310
348
  box-sizing: border-box;
311
349
  height: var(--rs-drawer-footer-height);
312
350
  min-height: var(--rs-drawer-footer-min-height);
313
- padding: var(--rs-drawer-footer-padding-y) var(--rs-drawer-footer-padding-x);
351
+ padding-block: var(--rs-drawer-footer-padding-y);
352
+ padding-inline: var(--rs-drawer-footer-padding-x);
314
353
  background: var(--rs-drawer-footer-bg);
315
354
  border-top: 1px solid
316
355
  var(--rs-drawer-footer-border, var(--rs-drawer-separator, var(--rs-border-subtle)));
@@ -318,11 +357,13 @@ to {
318
357
  .rs-drawer__body {
319
358
  flex: 1;
320
359
  min-height: 0;
321
- overflow: hidden;
360
+ overflow: auto;
361
+ overscroll-behavior: contain;
322
362
  display: flex;
323
363
  flex-direction: column;
324
364
  box-sizing: border-box;
325
- padding: var(--rs-drawer-body-padding-y) var(--rs-drawer-body-padding-x);
365
+ padding-block: var(--rs-drawer-body-padding-y);
366
+ padding-inline: var(--rs-drawer-body-padding-x);
326
367
  background: var(--rs-drawer-body-bg);
327
368
  }
328
369
  .rs-drawer__title {
@@ -339,21 +380,12 @@ to {
339
380
  white-space: nowrap;
340
381
  }
341
382
  .rs-drawer__description {
342
- margin: var(--rs-space-xs) 0 0;
383
+ margin-block: var(--rs-space-xs) 0;
384
+ margin-inline: 0;
343
385
  color: var(--rs-drawer-description-fg, var(--rs-muted));
344
386
  font-size: var(--rs-font-size-sm);
345
387
  }
346
- .rs-drawer__description--sr-only {
347
- position: absolute;
348
- width: 1px;
349
- height: 1px;
350
- padding: 0;
351
- margin: -1px;
352
- overflow: hidden;
353
- clip: rect(0, 0, 0, 0);
354
- white-space: nowrap;
355
- border: 0;
356
- }
388
+ .rs-drawer__description--sr-only,
357
389
  .rs-drawer__title--sr-only {
358
390
  position: absolute;
359
391
  width: 1px;
@@ -1,4 +1,4 @@
1
- import { type RsDrawerBeforeClose, type RsDrawerCloseReason, type RsDrawerDimension, type RsDrawerSide, type RsDrawerSize } from './drawer-utils';
1
+ import { type RsDrawerBeforeClose, type RsDrawerDimension, type RsDrawerExpose, type RsDrawerSide, type RsDrawerSize } from './drawer-utils';
2
2
  type __VLS_Props = {
3
3
  /** 标题文案;也可用 `#header` 插槽 */
4
4
  title?: string;
@@ -35,64 +35,80 @@ type __VLS_Props = {
35
35
  overlayBlur?: number | string;
36
36
  showClose?: boolean;
37
37
  /**
38
- * 点击抽屉外是否关闭(含无遮罩时的 interact-outside)。
38
+ * 点击抽屉外是否关闭(含无遮罩时的外部指针)。
39
39
  * 与 modal 独立:非模态也可保持打开。
40
40
  */
41
41
  closeOnOverlayClick?: boolean;
42
- /** 按 Esc 是否关闭;默认 true */
42
+ /** 按 Esc 是否关闭;默认 true。上层浮层已 preventDefault 时不抢。 */
43
43
  closeOnEsc?: boolean;
44
44
  /**
45
- * DialogPortal 挂载目标
45
+ * 挂载目标
46
46
  * - string / HTMLElement:Teleport 到指定节点(容器需 position:relative)
47
47
  * - false:禁用 Teleport,就地渲染
48
- * - undefined:走 Reka 默认(通常为 body)
48
+ * - undefined:挂到 body
49
49
  */
50
50
  teleportTo?: string | HTMLElement | false;
51
51
  /** 关闭前钩子;返回 false 可阻止关闭(支持 async) */
52
52
  beforeClose?: RsDrawerBeforeClose;
53
+ /**
54
+ * 关闭动画结束后卸掉面板。默认 true,与原先关闭即卸载一致。
55
+ * false 时保留子树,便于表单状态留在抽屉里。
56
+ */
57
+ destroyOnClose?: boolean;
58
+ /** 首次打开前就挂载子树。关闭后是否留下仍看 destroyOnClose。 */
59
+ forceRender?: boolean;
60
+ /**
61
+ * 是否锁 body 滚动。未传时:模态且挂到 body 才锁。
62
+ * 挂进局部容器默认不锁整页。
63
+ */
64
+ lockScroll?: boolean;
65
+ /** 覆盖层叠。未传时与其它抽屉同用 --rs-z-modal,后打开的盖在上面。 */
66
+ zIndex?: number;
67
+ /** 没有可见标题时的可访问名称 */
68
+ ariaLabel?: string;
69
+ id?: string;
53
70
  };
54
71
  type __VLS_ModelProps = {
55
72
  'open'?: boolean;
56
73
  };
57
74
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
58
- declare var __VLS_34: {}, __VLS_67: {}, __VLS_69: {};
75
+ declare var __VLS_7: {}, __VLS_9: {}, __VLS_18: {}, __VLS_20: {};
59
76
  type __VLS_Slots = {} & {
60
- header?: (props: typeof __VLS_34) => any;
77
+ header?: (props: typeof __VLS_7) => any;
61
78
  } & {
62
- default?: (props: typeof __VLS_67) => any;
79
+ extra?: (props: typeof __VLS_9) => any;
63
80
  } & {
64
- footer?: (props: typeof __VLS_69) => any;
81
+ default?: (props: typeof __VLS_18) => any;
82
+ } & {
83
+ footer?: (props: typeof __VLS_20) => any;
65
84
  };
66
- declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
67
- /** 请求关闭(走 beforeClose) */
68
- close: (reason?: RsDrawerCloseReason) => Promise<boolean>;
69
- /** 打开抽屉 */
70
- openDrawer: () => void;
71
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
85
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsDrawerExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
72
86
  resize: (size: number) => any;
73
- "update:open": (value: boolean) => any;
74
87
  openChange: (open: boolean) => any;
88
+ "update:open": (value: boolean) => any;
75
89
  afterOpen: () => any;
76
- afterClose: (reason: import("../../dialog").RsDialogCloseReason) => any;
90
+ afterClose: (reason: import("../../dialog/index.js").RsDialogCloseReason) => any;
77
91
  "update:width": (value: number) => any;
78
92
  "update:height": (value: number) => any;
79
93
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
80
94
  onResize?: ((size: number) => any) | undefined;
81
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
82
95
  onOpenChange?: ((open: boolean) => any) | undefined;
96
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
83
97
  onAfterOpen?: (() => any) | undefined;
84
- onAfterClose?: ((reason: import("../../dialog").RsDialogCloseReason) => any) | undefined;
98
+ onAfterClose?: ((reason: import("../../dialog/index.js").RsDialogCloseReason) => any) | undefined;
85
99
  "onUpdate:width"?: ((value: number) => any) | undefined;
86
100
  "onUpdate:height"?: ((value: number) => any) | undefined;
87
101
  }>, {
88
102
  title: string;
89
103
  size: RsDrawerSize;
90
104
  side: RsDrawerSide;
105
+ showClose: boolean;
106
+ closeOnEsc: boolean;
91
107
  resizable: boolean;
92
108
  showOverlay: boolean;
93
- showClose: boolean;
94
109
  closeOnOverlayClick: boolean;
95
- closeOnEsc: boolean;
110
+ destroyOnClose: boolean;
111
+ forceRender: boolean;
96
112
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
97
113
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
98
114
  declare const _default: typeof __VLS_export;