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.
- package/CHANGELOG.md +58 -0
- package/dist/components/_shared/index.d.ts +2 -2
- package/dist/components/_shared/src/overlay-utils.d.ts +44 -1
- package/dist/components/_shared/src/overlay-utils.js +87 -2
- package/dist/components/_shared/src/reka.js +2 -2
- package/dist/components/alert/index.d.ts +1 -0
- package/dist/components/alert/src/RsAlert.css +120 -65
- package/dist/components/alert/src/RsAlert.d.ts +24 -5
- package/dist/components/alert/src/RsAlert.impl.js +108 -36
- package/dist/components/alert/src/RsAlert.js +1 -1
- package/dist/components/alert/src/alert-utils.d.ts +37 -0
- package/dist/components/alert/src/alert-utils.js +71 -0
- package/dist/components/auto-complete/src/RsAutoComplete.d.ts +1 -1
- package/dist/components/button/src/RsButton.impl.js +1 -1
- package/dist/components/card/src/RsCard.d.ts +1 -1
- package/dist/components/code-block/index.d.ts +1 -0
- package/dist/components/code-block/src/RsCodeBlock.css +93 -52
- package/dist/components/code-block/src/RsCodeBlock.d.ts +36 -9
- package/dist/components/code-block/src/RsCodeBlock.impl.js +203 -84
- package/dist/components/code-block/src/RsCodeBlock.js +1 -1
- package/dist/components/code-block/src/code-block-highlight.d.ts +4 -0
- package/dist/components/code-block/src/code-block-highlight.js +34 -0
- package/dist/components/code-block/src/code-block-utils.d.ts +23 -0
- package/dist/components/code-block/src/code-block-utils.js +71 -0
- package/dist/components/code-editor/index.d.ts +1 -1
- package/dist/components/code-editor/src/RsCodeEditor.css +118 -92
- package/dist/components/code-editor/src/RsCodeEditor.d.ts +14 -3
- package/dist/components/code-editor/src/RsCodeEditor.impl.js +261 -94
- package/dist/components/code-editor/src/RsCodeEditor.js +1 -1
- package/dist/components/code-editor/src/code-editor-utils.d.ts +15 -0
- package/dist/components/code-editor/src/code-editor-utils.js +36 -1
- package/dist/components/code-editor/src/code-mirror-completion.d.ts +1 -1
- package/dist/components/code-editor/src/code-mirror-completion.js +8 -5
- package/dist/components/code-editor/src/code-mirror-diagnostics.d.ts +2 -3
- package/dist/components/code-editor/src/code-mirror-diagnostics.js +3 -4
- package/dist/components/code-editor/src/code-mirror-ghost.d.ts +1 -1
- package/dist/components/code-editor/src/code-mirror-ghost.js +12 -3
- package/dist/components/code-editor/src/code-mirror-inline-edit.js +8 -3
- package/dist/components/code-editor/src/code-mirror-intel.d.ts +2 -2
- package/dist/components/code-editor/src/code-mirror-intel.js +50 -39
- package/dist/components/code-editor/src/code-mirror-lang.js +4 -0
- package/dist/components/code-editor/src/code-mirror-session.d.ts +13 -0
- package/dist/components/code-editor/src/code-mirror-session.js +30 -0
- package/dist/components/context-menu/index.d.ts +1 -1
- package/dist/components/context-menu/src/RsContextMenu.css +115 -89
- package/dist/components/context-menu/src/RsContextMenu.d.ts +32 -11
- package/dist/components/context-menu/src/RsContextMenu.impl.js +795 -48
- package/dist/components/context-menu/src/RsContextMenuItems.d.ts +25 -1
- package/dist/components/context-menu/src/RsContextMenuItems.impl.js +110 -61
- package/dist/components/context-menu/src/context-menu-utils.d.ts +89 -3
- package/dist/components/context-menu/src/context-menu-utils.js +168 -3
- package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
- package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
- package/dist/components/descriptions/index.d.ts +1 -1
- package/dist/components/descriptions/src/RsDescriptions.css +38 -11
- package/dist/components/descriptions/src/RsDescriptions.d.ts +20 -4
- package/dist/components/descriptions/src/RsDescriptions.impl.js +89 -19
- package/dist/components/descriptions/src/RsDescriptionsItem.impl.js +13 -6
- package/dist/components/descriptions/src/descriptions-utils.d.ts +19 -0
- package/dist/components/descriptions/src/descriptions-utils.js +39 -1
- package/dist/components/dialog/index.d.ts +1 -1
- package/dist/components/dialog/src/RsConfirmDialog.css +47 -21
- package/dist/components/dialog/src/RsConfirmDialog.d.ts +19 -7
- package/dist/components/dialog/src/RsConfirmDialog.impl.js +349 -119
- package/dist/components/dialog/src/RsConfirmDialog.js +2 -1
- package/dist/components/dialog/src/RsDialog.css +102 -109
- package/dist/components/dialog/src/RsDialog.d.ts +34 -24
- package/dist/components/dialog/src/RsDialog.impl.js +410 -177
- package/dist/components/dialog/src/RsDialog.js +2 -1
- package/dist/components/dialog/src/dialog-utils.d.ts +40 -1
- package/dist/components/dialog/src/dialog-utils.js +152 -1
- package/dist/components/dialog/src/dialog-window.js +29 -8
- package/dist/components/drawer/index.d.ts +1 -1
- package/dist/components/drawer/src/RsDrawer.css +61 -29
- package/dist/components/drawer/src/RsDrawer.d.ts +37 -21
- package/dist/components/drawer/src/RsDrawer.impl.js +441 -223
- package/dist/components/drawer/src/drawer-utils.d.ts +35 -0
- package/dist/components/drawer/src/drawer-utils.js +131 -1
- package/dist/components/dropdown/index.d.ts +1 -1
- package/dist/components/dropdown/src/RsDropdown.css +140 -61
- package/dist/components/dropdown/src/RsDropdown.d.ts +39 -6
- package/dist/components/dropdown/src/RsDropdown.impl.js +693 -63
- package/dist/components/dropdown/src/RsDropdownItemView.impl.js +17 -7
- package/dist/components/dropdown/src/RsDropdownItems.d.ts +32 -3
- package/dist/components/dropdown/src/RsDropdownItems.impl.js +171 -59
- package/dist/components/dropdown/src/dropdown-utils.d.ts +50 -0
- package/dist/components/dropdown/src/dropdown-utils.js +103 -3
- package/dist/components/empty/index.d.ts +1 -0
- package/dist/components/empty/src/RsEmpty.css +105 -23
- package/dist/components/empty/src/RsEmpty.d.ts +27 -4
- package/dist/components/empty/src/RsEmpty.impl.js +154 -11
- package/dist/components/empty/src/RsEmpty.js +2 -1
- package/dist/components/empty/src/empty-utils.d.ts +28 -0
- package/dist/components/empty/src/empty-utils.js +55 -0
- package/dist/components/form/src/RsForm.d.ts +1 -1
- package/dist/components/input-number/src/RsInputNumber.d.ts +1 -1
- package/dist/components/label/src/RsLabel.d.ts +1 -1
- package/dist/components/loading/index.d.ts +1 -0
- package/dist/components/loading/src/RsLoading.css +13 -97
- package/dist/components/loading/src/RsLoading.d.ts +52 -2
- package/dist/components/loading/src/RsLoading.impl.js +216 -33
- package/dist/components/loading/src/RsLoading.js +2 -1
- package/dist/components/loading/src/loading-status.css +210 -0
- package/dist/components/loading/src/loading-status.d.ts +34 -0
- package/dist/components/loading/src/loading-status.impl.js +84 -0
- package/dist/components/loading/src/loading-status.js +8 -0
- package/dist/components/loading/src/loading-utils.d.ts +51 -4
- package/dist/components/loading/src/loading-utils.js +122 -0
- package/dist/components/loading-bar/index.d.ts +1 -0
- package/dist/components/loading-bar/src/RsLoadingBar.css +72 -8
- package/dist/components/loading-bar/src/RsLoadingBar.d.ts +55 -11
- package/dist/components/loading-bar/src/RsLoadingBar.impl.js +298 -57
- package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
- package/dist/components/loading-bar/src/loading-bar-utils.d.ts +69 -0
- package/dist/components/loading-bar/src/loading-bar-utils.js +97 -0
- package/dist/components/log/src/RsLog.css +52 -144
- package/dist/components/log/src/RsLog.d.ts +12 -11
- package/dist/components/log/src/RsLog.impl.js +181 -148
- package/dist/components/log/src/RsLog.js +1 -1
- package/dist/components/log/src/RsLogRow.css +152 -0
- package/dist/components/log/src/RsLogRow.d.ts +35 -0
- package/dist/components/log/src/RsLogRow.impl.js +91 -0
- package/dist/components/log/src/RsLogRow.js +8 -0
- package/dist/components/log/src/log-utils.d.ts +8 -0
- package/dist/components/log/src/log-utils.js +71 -10
- package/dist/components/markdown/index.d.ts +1 -1
- package/dist/components/markdown/src/RsMarkdown.css +75 -32
- package/dist/components/markdown/src/RsMarkdown.d.ts +6 -2
- package/dist/components/markdown/src/RsMarkdown.impl.js +185 -17
- package/dist/components/markdown/src/markdown-utils.d.ts +26 -0
- package/dist/components/markdown/src/markdown-utils.js +114 -12
- package/dist/components/mentions/src/RsMentions.d.ts +2 -2
- package/dist/components/menu/index.d.ts +1 -1
- package/dist/components/menu/src/RsMenu.css +70 -29
- package/dist/components/menu/src/RsMenu.d.ts +58 -4
- package/dist/components/menu/src/RsMenu.impl.js +93 -46
- package/dist/components/menu/src/RsMenuItems.d.ts +22 -5
- package/dist/components/menu/src/RsMenuItems.impl.js +506 -154
- package/dist/components/menu/src/menu-utils.d.ts +56 -0
- package/dist/components/menu/src/menu-utils.js +139 -6
- package/dist/components/monaco-editor/index.d.ts +1 -1
- package/dist/components/monaco-editor/src/RsMonacoEditor.css +28 -16
- package/dist/components/monaco-editor/src/RsMonacoEditor.d.ts +39 -41
- package/dist/components/monaco-editor/src/RsMonacoEditor.impl.js +212 -133
- package/dist/components/monaco-editor/src/RsMonacoEditor.js +1 -1
- package/dist/components/monaco-editor/src/monaco-editor-utils.d.ts +126 -0
- package/dist/components/monaco-editor/src/monaco-editor-utils.js +302 -0
- package/dist/components/pagination/index.d.ts +2 -2
- package/dist/components/pagination/src/RsPagination.css +93 -46
- package/dist/components/pagination/src/RsPagination.d.ts +68 -8
- package/dist/components/pagination/src/RsPagination.impl.js +229 -86
- package/dist/components/pagination/src/RsPagination.js +1 -1
- package/dist/components/pagination/src/pagination-utils.d.ts +59 -0
- package/dist/components/pagination/src/pagination-utils.js +105 -1
- package/dist/components/popover/index.d.ts +1 -0
- package/dist/components/popover/src/RsPopover.css +124 -14
- package/dist/components/popover/src/RsPopover.d.ts +38 -7
- package/dist/components/popover/src/RsPopover.impl.js +546 -35
- package/dist/components/popover/src/RsPopover.js +2 -1
- package/dist/components/popover/src/popover-utils.d.ts +24 -2
- package/dist/components/popover/src/popover-utils.js +55 -0
- package/dist/components/sidebar/index.d.ts +1 -0
- package/dist/components/sidebar/src/RsSidebar.css +91 -33
- package/dist/components/sidebar/src/RsSidebar.d.ts +17 -9
- package/dist/components/sidebar/src/RsSidebar.impl.js +124 -22
- package/dist/components/sidebar/src/RsSidebar.js +1 -1
- package/dist/components/sidebar/src/RsSidebarGroup.css +23 -6
- package/dist/components/sidebar/src/RsSidebarGroup.d.ts +6 -2
- package/dist/components/sidebar/src/RsSidebarGroup.impl.js +17 -4
- package/dist/components/sidebar/src/RsSidebarGroup.js +1 -1
- package/dist/components/sidebar/src/RsSidebarItem.css +50 -20
- package/dist/components/sidebar/src/RsSidebarItem.d.ts +21 -3
- package/dist/components/sidebar/src/RsSidebarItem.impl.js +71 -20
- package/dist/components/sidebar/src/RsSidebarItem.js +1 -1
- package/dist/components/sidebar/src/sidebar-utils.d.ts +47 -0
- package/dist/components/sidebar/src/sidebar-utils.js +72 -0
- package/dist/components/split-pane/index.d.ts +2 -2
- package/dist/components/split-pane/src/RsSplitPane.css +41 -30
- package/dist/components/split-pane/src/RsSplitPane.d.ts +6 -2
- package/dist/components/split-pane/src/RsSplitPane.impl.js +153 -45
- package/dist/components/split-pane/src/split-pane-utils.d.ts +23 -0
- package/dist/components/split-pane/src/split-pane-utils.js +18 -1
- package/dist/components/stat-card/index.d.ts +1 -0
- package/dist/components/stat-card/src/RsStatCard.css +129 -25
- package/dist/components/stat-card/src/RsStatCard.d.ts +40 -4
- package/dist/components/stat-card/src/RsStatCard.impl.js +106 -12
- package/dist/components/stat-card/src/RsStatCard.js +1 -1
- package/dist/components/stat-card/src/stat-card-utils.d.ts +39 -0
- package/dist/components/stat-card/src/stat-card-utils.js +113 -0
- package/dist/components/steps/index.d.ts +1 -1
- package/dist/components/steps/src/RsSteps.css +158 -37
- package/dist/components/steps/src/RsSteps.d.ts +69 -5
- package/dist/components/steps/src/RsSteps.impl.js +168 -28
- package/dist/components/steps/src/RsSteps.js +1 -1
- package/dist/components/steps/src/steps-utils.d.ts +51 -1
- package/dist/components/steps/src/steps-utils.js +67 -1
- package/dist/components/table/src/RsTable.impl.js +4 -2
- package/dist/components/table/src/composables/useRsTableContextMenu.d.ts +16 -0
- package/dist/components/table/src/composables/useRsTableContextMenu.js +1 -1
- package/dist/components/table/src/composables/useRsTableEngine.js +6 -2
- package/dist/components/table/src/composables/useRsTableScrollLayout.js +2 -0
- package/dist/components/table/src/composables/useRsTableShell.d.ts +16 -0
- package/dist/components/table/src/rs-table-props.d.ts +1 -1
- package/dist/components/table/src/rs-table-props.js +0 -1
- package/dist/components/table/src/table-body/RsTableBody.impl.js +1 -0
- package/dist/components/table/src/table-body/RsTableCellEditor.impl.js +10 -2
- package/dist/components/table/src/table-body/RsTableColGroup.impl.js +1 -0
- package/dist/components/table/src/table-footer/RsTableSummaryRow.impl.js +1 -0
- package/dist/components/table/src/table-header/RsTableHeader.impl.js +1 -0
- package/dist/components/table/src/utils/table-utils.d.ts +10 -6
- package/dist/components/table/src/utils/table-utils.js +27 -25
- package/dist/components/table/style/rs-table.css +34 -20
- package/dist/components/tabs/index.d.ts +2 -2
- package/dist/components/tabs/src/RsTabs.css +225 -101
- package/dist/components/tabs/src/RsTabs.d.ts +37 -8
- package/dist/components/tabs/src/RsTabs.impl.js +400 -270
- package/dist/components/tabs/src/tabs-utils.d.ts +41 -2
- package/dist/components/tabs/src/tabs-utils.js +55 -1
- package/dist/components/terminal/index.d.ts +1 -1
- package/dist/components/terminal/src/RsTerminal.css +60 -37
- package/dist/components/terminal/src/RsTerminal.d.ts +36 -4
- package/dist/components/terminal/src/RsTerminal.impl.js +288 -68
- package/dist/components/terminal/src/RsTerminal.js +1 -1
- package/dist/components/terminal/src/terminal-utils.d.ts +42 -4
- package/dist/components/terminal/src/terminal-utils.js +113 -10
- package/dist/components/textarea/src/RsTextarea.d.ts +1 -1
- package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
- package/dist/components/toaster/src/RsToaster.css +156 -203
- package/dist/components/toaster/src/RsToaster.d.ts +32 -2
- package/dist/components/toaster/src/RsToaster.impl.js +309 -34
- package/dist/components/toaster/src/toast-store.d.ts +95 -0
- package/dist/components/toaster/src/toast-store.js +177 -0
- package/dist/components/toaster/src/toast-utils.d.ts +60 -0
- package/dist/components/toaster/src/toast-utils.js +86 -0
- package/dist/components/toolbar/index.d.ts +1 -1
- package/dist/components/toolbar/src/RsToolbar.css +206 -32
- package/dist/components/toolbar/src/RsToolbar.d.ts +41 -16
- package/dist/components/toolbar/src/RsToolbar.impl.js +146 -18
- package/dist/components/toolbar/src/RsToolbar.js +2 -1
- package/dist/components/toolbar/src/toolbar-utils.d.ts +20 -0
- package/dist/components/toolbar/src/toolbar-utils.js +105 -0
- package/dist/components/tooltip/index.d.ts +1 -0
- package/dist/components/tooltip/src/RsTooltip.css +104 -26
- package/dist/components/tooltip/src/RsTooltip.d.ts +38 -16
- package/dist/components/tooltip/src/RsTooltip.impl.js +420 -51
- package/dist/components/tooltip/src/RsTooltip.js +2 -1
- package/dist/components/tooltip/src/RsTooltipProvider.d.ts +4 -4
- package/dist/components/tooltip/src/RsTooltipProvider.impl.js +51 -14
- package/dist/components/tooltip/src/tooltip-utils.d.ts +30 -0
- package/dist/components/tooltip/src/tooltip-utils.js +23 -0
- package/dist/components/tree/index.d.ts +2 -2
- package/dist/components/tree/src/RsTree.css +84 -75
- package/dist/components/tree/src/RsTree.d.ts +20 -20
- package/dist/components/tree/src/RsTree.impl.js +292 -66
- package/dist/components/tree/src/RsTree.js +1 -1
- package/dist/components/tree/src/tree-utils.d.ts +22 -0
- package/dist/components/tree/src/tree-utils.js +18 -4
- package/dist/components/tree-select/src/RsTreeSelect.d.ts +1 -1
- package/dist/components/virtual-list/index.d.ts +1 -1
- package/dist/components/virtual-list/src/RsVirtualList.css +64 -9
- package/dist/components/virtual-list/src/RsVirtualList.d.ts +31 -5
- package/dist/components/virtual-list/src/RsVirtualList.impl.js +425 -76
- package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
- package/dist/components/virtual-list/src/virtual-list-utils.d.ts +64 -1
- package/dist/components/virtual-list/src/virtual-list-utils.js +215 -1
- package/dist/composables/useRsLoadingBar.d.ts +2 -5
- package/dist/composables/useRsLoadingBar.js +21 -5
- package/dist/composables/useRsTabsNav.d.ts +3 -1
- package/dist/composables/useRsTabsNav.js +96 -28
- package/dist/composables/useRsToast.d.ts +11 -13
- package/dist/composables/useRsToast.js +66 -17
- package/dist/index.d.ts +30 -21
- package/dist/index.js +14 -0
- package/dist/locale/apply.js +6 -1
- package/dist/locale/messages.js +128 -2
- package/dist/styles.css +460 -797
- package/dist/theme/brand.example.css +2 -1
- package/dist/vite-plugins/niuma-ui-host.js +1 -1
- 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
|
|
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
|
-
/**
|
|
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
|
-
|
|
214
|
-
document.body.style.
|
|
218
|
+
window.removeEventListener("pointercancel", stopInteractions);
|
|
219
|
+
document.body.style.userSelect = savedUserSelect;
|
|
220
|
+
document.body.style.cursor = savedCursor;
|
|
215
221
|
}
|
|
216
|
-
function
|
|
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
|
-
|
|
222
|
-
|
|
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
|
-
|
|
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
|
-
|
|
59
|
+
touch-action: none;
|
|
42
60
|
}
|
|
43
61
|
.rs-drawer__resize:focus-visible {
|
|
44
|
-
outline:
|
|
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:
|
|
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:
|
|
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)
|
|
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)
|
|
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:
|
|
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)
|
|
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
|
|
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
|
|
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
|
-
*
|
|
38
|
+
* 点击抽屉外是否关闭(含无遮罩时的外部指针)。
|
|
39
39
|
* 与 modal 独立:非模态也可保持打开。
|
|
40
40
|
*/
|
|
41
41
|
closeOnOverlayClick?: boolean;
|
|
42
|
-
/** 按 Esc 是否关闭;默认 true */
|
|
42
|
+
/** 按 Esc 是否关闭;默认 true。上层浮层已 preventDefault 时不抢。 */
|
|
43
43
|
closeOnEsc?: boolean;
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* 挂载目标
|
|
46
46
|
* - string / HTMLElement:Teleport 到指定节点(容器需 position:relative)
|
|
47
47
|
* - false:禁用 Teleport,就地渲染
|
|
48
|
-
* - undefined
|
|
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
|
|
75
|
+
declare var __VLS_7: {}, __VLS_9: {}, __VLS_18: {}, __VLS_20: {};
|
|
59
76
|
type __VLS_Slots = {} & {
|
|
60
|
-
header?: (props: typeof
|
|
77
|
+
header?: (props: typeof __VLS_7) => any;
|
|
61
78
|
} & {
|
|
62
|
-
|
|
79
|
+
extra?: (props: typeof __VLS_9) => any;
|
|
63
80
|
} & {
|
|
64
|
-
|
|
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
|
-
|
|
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;
|