niuma-ui 2.1.7 → 2.1.8
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 +9 -0
- package/dist/components/dialog/index.d.ts +1 -1
- package/dist/components/dialog/src/RsConfirmDialog.css +45 -26
- package/dist/components/dialog/src/RsConfirmDialog.d.ts +20 -3
- package/dist/components/dialog/src/RsConfirmDialog.impl.js +97 -17
- package/dist/components/dialog/src/RsConfirmDialog.js +1 -1
- package/dist/components/dialog/src/RsDialog.css +71 -64
- package/dist/components/dialog/src/RsDialog.impl.js +3 -1
- package/dist/components/dialog/src/RsDialog.js +1 -1
- package/dist/components/dialog/src/dialog-utils.d.ts +27 -2
- package/dist/components/dialog/src/dialog-utils.js +82 -4
- package/dist/composables/createRsDialog.js +1 -0
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,15 @@
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [2.1.8] - 2026-10-10
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- `RsDialog` / `RsConfirmDialog`:外壳从 `display: contents` 改为真正的定位盒子,层叠用 `--rs-z-modal`。`display: contents` 不生成盒子,`position: fixed` 的遮罩和面板会留在编辑区、分割栏的 `isolation` 里,后绘的侧栏会盖住对话框。壳层不接收点击,遮罩和面板自己接收。不传 `teleportTo` 时仍挂到 `body`,盖住整个窗口。props、事件、插槽不变。
|
|
14
|
+
|
|
15
|
+
### 变更
|
|
16
|
+
|
|
17
|
+
- `RsConfirmDialog`:`teleportTo` 仍只决定节点挂到哪里,不改变是否盖住窗口。新增 `contain`,默认 `viewport`:`role` 为 `alertdialog`,`aria-modal` 为 `true`,焦点困在框内,锁 `body` 滚动。`contain="container"` 且 `teleportTo` 指向页面节点时,只挡住该页:`role` 为 `dialog`,`aria-modal` 为 `false`,Tab 可以到页签栏,只锁该容器的滚动;节点若是 `static`,打开期间临时设为 `relative`,关闭后还原。没有页面挂载点(省略、`body`、`html`)时退回 `viewport`,开发环境警告。页面在 KeepAlive 里被藏起时卸掉浮层、滚动锁和 `inert`,不发 `cancel`,切回来再挂上。命令式 `rsConfirm` 可传 `contain`。公开类型 `RsConfirmContain`。
|
|
9
18
|
|
|
10
19
|
## [2.1.7] - 2026-10-08
|
|
11
20
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { default as RsDialog } from './src/RsDialog.js';
|
|
2
2
|
export { default as RsConfirmDialog } from './src/RsConfirmDialog.js';
|
|
3
|
-
export type { RsConfirmBeforeClose, RsConfirmCloseReason, RsConfirmDialogExpose, RsConfirmDialogInstance, RsConfirmOptions, RsDialogBeforeClose, RsDialogCloseReason, RsDialogExpose, RsDialogInstance, RsDialogLayout, RsDialogWidth, RsDialogWidthPreset, } from './src/dialog-utils';
|
|
3
|
+
export type { RsConfirmBeforeClose, RsConfirmCloseReason, RsConfirmContain, RsConfirmDialogExpose, RsConfirmDialogInstance, RsConfirmOptions, RsDialogBeforeClose, RsDialogCloseReason, RsDialogExpose, RsDialogInstance, RsDialogLayout, RsDialogWidth, RsDialogWidthPreset, } from './src/dialog-utils';
|
|
4
4
|
export { isRsDialogWidthPreset, resolveDialogOverlayStyle, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsConfirmBeforeClose, runRsDialogBeforeClose, } from './src/dialog-utils';
|
|
@@ -1,22 +1,40 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-confirm-dialog[data-v-
|
|
3
|
-
display:
|
|
2
|
+
.rs-confirm-dialog[data-v-1d841d98] {
|
|
3
|
+
/* 必须生成盒子并占住根层叠上下文。display:contents 会让 fixed 子节点留在
|
|
4
|
+
祖先 isolation(编辑区 / 分割栏)里,后绘的 AI 面板会盖住确认框。 */
|
|
5
|
+
position: fixed;
|
|
6
|
+
inset: 0;
|
|
7
|
+
z-index: var(--rs-z-modal);
|
|
8
|
+
pointer-events: none;
|
|
9
|
+
}
|
|
10
|
+
.rs-confirm-dialog--container[data-v-1d841d98] {
|
|
11
|
+
position: absolute;
|
|
12
|
+
}
|
|
13
|
+
.rs-confirm-dialog--container .rs-confirm-dialog__backdrop[data-v-1d841d98],
|
|
14
|
+
.rs-confirm-dialog--container .rs-confirm-dialog__content[data-v-1d841d98] {
|
|
15
|
+
position: absolute;
|
|
16
|
+
}
|
|
17
|
+
.rs-confirm-dialog--container .rs-confirm-dialog__content[data-v-1d841d98] {
|
|
18
|
+
top: 50%;
|
|
19
|
+
max-height: calc(100% - 2rem);
|
|
20
|
+
width: calc(100% - 2 * var(--rs-dialog-inset-x, 1rem));
|
|
4
21
|
}
|
|
5
|
-
.rs-confirm-dialog__anchor[data-v-
|
|
22
|
+
.rs-confirm-dialog__anchor[data-v-1d841d98] {
|
|
6
23
|
display: none;
|
|
7
24
|
}
|
|
8
|
-
.rs-confirm-dialog__backdrop[data-v-
|
|
25
|
+
.rs-confirm-dialog__backdrop[data-v-1d841d98] {
|
|
9
26
|
position: fixed;
|
|
10
27
|
inset: 0;
|
|
11
28
|
z-index: var(--rs-z-modal);
|
|
29
|
+
pointer-events: auto;
|
|
12
30
|
background: transparent;
|
|
13
31
|
}
|
|
14
|
-
.rs-confirm-dialog__overlay[data-v-
|
|
32
|
+
.rs-confirm-dialog__overlay[data-v-1d841d98] {
|
|
15
33
|
background: var(--rs-dialog-overlay-bg);
|
|
16
34
|
backdrop-filter: blur(var(--rs-dialog-overlay-blur)) saturate(120%);
|
|
17
35
|
-webkit-backdrop-filter: blur(var(--rs-dialog-overlay-blur)) saturate(120%);
|
|
18
36
|
}
|
|
19
|
-
.rs-confirm-dialog__content[data-v-
|
|
37
|
+
.rs-confirm-dialog__content[data-v-1d841d98] {
|
|
20
38
|
position: fixed;
|
|
21
39
|
left: 50%;
|
|
22
40
|
top: calc(
|
|
@@ -24,6 +42,7 @@
|
|
|
24
42
|
(100vh - var(--rs-dialog-inset-top, 1rem) - var(--rs-dialog-inset-bottom, 1rem)) / 2
|
|
25
43
|
);
|
|
26
44
|
z-index: calc(var(--rs-z-modal) + 1);
|
|
45
|
+
pointer-events: auto;
|
|
27
46
|
display: flex;
|
|
28
47
|
gap: var(--rs-space-lg);
|
|
29
48
|
width: calc(100vw - 2 * var(--rs-dialog-inset-x, 1rem));
|
|
@@ -39,26 +58,26 @@
|
|
|
39
58
|
box-shadow: var(--rs-dialog-shadow);
|
|
40
59
|
outline: none;
|
|
41
60
|
}
|
|
42
|
-
.rs-confirm-dialog__content[data-v-
|
|
61
|
+
.rs-confirm-dialog__content[data-v-1d841d98]:focus-visible {
|
|
43
62
|
box-shadow:
|
|
44
63
|
var(--rs-dialog-shadow),
|
|
45
64
|
0 0 0 var(--rs-focus-ring-width) var(--rs-focus-ring);
|
|
46
65
|
}
|
|
47
|
-
.rs-confirm-dialog__content--sm[data-v-
|
|
66
|
+
.rs-confirm-dialog__content--sm[data-v-1d841d98] {
|
|
48
67
|
max-width: 24rem;
|
|
49
68
|
}
|
|
50
|
-
.rs-confirm-dialog__content--md[data-v-
|
|
69
|
+
.rs-confirm-dialog__content--md[data-v-1d841d98] {
|
|
51
70
|
max-width: 32rem;
|
|
52
71
|
}
|
|
53
|
-
.rs-confirm-dialog__content--lg[data-v-
|
|
72
|
+
.rs-confirm-dialog__content--lg[data-v-1d841d98] {
|
|
54
73
|
max-width: 42rem;
|
|
55
74
|
}
|
|
56
|
-
[data-rs-theme='light'] .rs-confirm-dialog__content[data-v-
|
|
75
|
+
[data-rs-theme='light'] .rs-confirm-dialog__content[data-v-1d841d98] {
|
|
57
76
|
background: color-mix(in srgb, var(--rs-dialog-bg) 94%, transparent);
|
|
58
77
|
backdrop-filter: blur(24px) saturate(180%);
|
|
59
78
|
-webkit-backdrop-filter: blur(24px) saturate(180%);
|
|
60
79
|
}
|
|
61
|
-
.rs-confirm-dialog__icon[data-v-
|
|
80
|
+
.rs-confirm-dialog__icon[data-v-1d841d98] {
|
|
62
81
|
display: inline-flex;
|
|
63
82
|
align-items: center;
|
|
64
83
|
justify-content: center;
|
|
@@ -68,47 +87,47 @@
|
|
|
68
87
|
border-radius: var(--rs-radius);
|
|
69
88
|
font-weight: var(--rs-font-weight-bold);
|
|
70
89
|
}
|
|
71
|
-
.rs-confirm-dialog__icon-glyph[data-v-
|
|
90
|
+
.rs-confirm-dialog__icon-glyph[data-v-1d841d98] {
|
|
72
91
|
width: 1.25rem;
|
|
73
92
|
height: 1.25rem;
|
|
74
93
|
display: block;
|
|
75
94
|
}
|
|
76
|
-
.rs-confirm-dialog__icon--danger[data-v-
|
|
95
|
+
.rs-confirm-dialog__icon--danger[data-v-1d841d98] {
|
|
77
96
|
background: var(--rs-danger-container);
|
|
78
97
|
color: var(--rs-on-danger-container);
|
|
79
98
|
}
|
|
80
|
-
.rs-confirm-dialog__icon--warning[data-v-
|
|
99
|
+
.rs-confirm-dialog__icon--warning[data-v-1d841d98] {
|
|
81
100
|
background: var(--rs-warning-container);
|
|
82
101
|
color: var(--rs-on-warning-container);
|
|
83
102
|
}
|
|
84
|
-
.rs-confirm-dialog__icon--success[data-v-
|
|
103
|
+
.rs-confirm-dialog__icon--success[data-v-1d841d98] {
|
|
85
104
|
background: var(--rs-success-container);
|
|
86
105
|
color: var(--rs-on-success-container);
|
|
87
106
|
}
|
|
88
|
-
.rs-confirm-dialog__icon--info[data-v-
|
|
89
|
-
.rs-confirm-dialog__icon--default[data-v-
|
|
107
|
+
.rs-confirm-dialog__icon--info[data-v-1d841d98],
|
|
108
|
+
.rs-confirm-dialog__icon--default[data-v-1d841d98] {
|
|
90
109
|
background: var(--rs-info-container);
|
|
91
110
|
color: var(--rs-on-info-container);
|
|
92
111
|
}
|
|
93
|
-
.rs-confirm-dialog__main[data-v-
|
|
112
|
+
.rs-confirm-dialog__main[data-v-1d841d98] {
|
|
94
113
|
min-width: 0;
|
|
95
114
|
flex: 1;
|
|
96
115
|
}
|
|
97
|
-
.rs-confirm-dialog__title[data-v-
|
|
116
|
+
.rs-confirm-dialog__title[data-v-1d841d98] {
|
|
98
117
|
margin: 0;
|
|
99
118
|
font-size: var(--rs-font-size-base);
|
|
100
119
|
font-weight: var(--rs-font-weight-semibold);
|
|
101
120
|
letter-spacing: -0.01em;
|
|
102
121
|
color: var(--rs-dialog-title-fg);
|
|
103
122
|
}
|
|
104
|
-
.rs-confirm-dialog__subtitle[data-v-
|
|
123
|
+
.rs-confirm-dialog__subtitle[data-v-1d841d98] {
|
|
105
124
|
margin: var(--rs-space-xs) 0 0;
|
|
106
125
|
color: var(--rs-dialog-description-fg);
|
|
107
126
|
font-size: var(--rs-font-size-sm);
|
|
108
127
|
line-height: var(--rs-line-height-normal);
|
|
109
128
|
opacity: 0.85;
|
|
110
129
|
}
|
|
111
|
-
.rs-confirm-dialog__description[data-v-
|
|
130
|
+
.rs-confirm-dialog__description[data-v-1d841d98] {
|
|
112
131
|
margin: var(--rs-space-sm) 0 0;
|
|
113
132
|
color: var(--rs-dialog-description-fg);
|
|
114
133
|
font-size: var(--rs-font-size-sm);
|
|
@@ -116,11 +135,11 @@
|
|
|
116
135
|
white-space: pre-wrap;
|
|
117
136
|
overflow-wrap: anywhere;
|
|
118
137
|
}
|
|
119
|
-
.rs-confirm-dialog__extra[data-v-
|
|
138
|
+
.rs-confirm-dialog__extra[data-v-1d841d98] {
|
|
120
139
|
margin-top: var(--rs-space-md);
|
|
121
140
|
min-width: 0;
|
|
122
141
|
}
|
|
123
|
-
.rs-confirm-dialog__footer[data-v-
|
|
142
|
+
.rs-confirm-dialog__footer[data-v-1d841d98] {
|
|
124
143
|
display: flex;
|
|
125
144
|
justify-content: flex-end;
|
|
126
145
|
flex-wrap: wrap;
|
|
@@ -132,12 +151,12 @@
|
|
|
132
151
|
border-block-start: 1px solid color-mix(in srgb, var(--rs-dialog-separator) 72%, transparent);
|
|
133
152
|
}
|
|
134
153
|
@media (prefers-reduced-motion: reduce) {
|
|
135
|
-
[data-rs-theme='light'] .rs-confirm-dialog__content[data-v-
|
|
154
|
+
[data-rs-theme='light'] .rs-confirm-dialog__content[data-v-1d841d98] {
|
|
136
155
|
backdrop-filter: none;
|
|
137
156
|
-webkit-backdrop-filter: none;
|
|
138
157
|
background: var(--rs-dialog-bg);
|
|
139
158
|
}
|
|
140
|
-
.rs-confirm-dialog__overlay[data-v-
|
|
159
|
+
.rs-confirm-dialog__overlay[data-v-1d841d98] {
|
|
141
160
|
backdrop-filter: none;
|
|
142
161
|
-webkit-backdrop-filter: none;
|
|
143
162
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Component } from 'vue';
|
|
2
|
-
import { type RsConfirmBeforeClose, type RsConfirmCloseReason, type RsDialogWidth } from './dialog-utils';
|
|
2
|
+
import { type RsConfirmContain, type RsConfirmBeforeClose, type RsConfirmCloseReason, type RsDialogWidth } from './dialog-utils';
|
|
3
3
|
import type { RsFeedbackTone } from '../../_shared/src/overlay-utils';
|
|
4
4
|
type __VLS_Props = {
|
|
5
5
|
title?: string;
|
|
@@ -30,11 +30,27 @@ type __VLS_Props = {
|
|
|
30
30
|
overlayOpacity?: number;
|
|
31
31
|
/** 遮罩模糊;number 为 px。默认主题为 0 */
|
|
32
32
|
overlayBlur?: number | string;
|
|
33
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* 挂载目标。只决定节点挂到哪里,不改变是否盖住窗口。
|
|
35
|
+
* - undefined:挂到 body。
|
|
36
|
+
* - string / HTMLElement:挂到该节点。
|
|
37
|
+
* - false:禁用 Teleport,就地渲染。
|
|
38
|
+
*
|
|
39
|
+
* 页面在 KeepAlive 里被藏起时卸掉浮层并放开 inert,切回来再挂上。
|
|
40
|
+
*/
|
|
34
41
|
teleportTo?: string | HTMLElement | false;
|
|
42
|
+
/**
|
|
43
|
+
* 呈现范围。
|
|
44
|
+
* - viewport(默认):position:fixed,盖住窗口。aria-modal 为 true,焦点困在框内,锁 body 滚动。
|
|
45
|
+
* - container:只盖住 teleportTo 指向的页面。该节点不能是 body / html。
|
|
46
|
+
* 打开时若 position 为 static,临时设为 relative,关闭后还原。
|
|
47
|
+
* role 为 dialog,aria-modal 为 false,Tab 可以离开到页签栏,只锁该容器的滚动。
|
|
48
|
+
* 没有页面挂载点时退回 viewport,开发环境会警告。
|
|
49
|
+
*/
|
|
50
|
+
contain?: RsConfirmContain;
|
|
35
51
|
/** Esc 关闭。确认中无效。只作用于最上层。 */
|
|
36
52
|
closeOnEsc?: boolean;
|
|
37
|
-
/**
|
|
53
|
+
/** viewport 锁 body 滚动;container 只锁挂载容器。默认 true。 */
|
|
38
54
|
lockScroll?: boolean;
|
|
39
55
|
/** 覆盖 --rs-z-modal。遮罩用该值,面板 +1。 */
|
|
40
56
|
zIndex?: number;
|
|
@@ -73,6 +89,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
73
89
|
confirmVariant: "primary" | "danger";
|
|
74
90
|
autoCloseOnConfirm: boolean;
|
|
75
91
|
lockScroll: boolean;
|
|
92
|
+
contain: RsConfirmContain;
|
|
76
93
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
77
94
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
78
95
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRsI18n } from "../../../composables/useRsI18n.js";
|
|
2
2
|
import RsButton_default from "../../button/src/RsButton.js";
|
|
3
|
-
import { acquireDialogScrollLock, claimDialogInert, dialogLayerTick, dialogTargetOwnsTab, isRsDialogWidthPreset, isTopDialogLayer, listDialogTabbables, pushDialogLayer, releaseDialogInert, removeDialogLayer, resolveDialogOverlayStyle, resolveDialogTabTarget, resolveRsDialogCssWidth, runRsConfirmBeforeClose } from "./dialog-utils.js";
|
|
4
|
-
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useModel, watch, withCtx } from "vue";
|
|
3
|
+
import { acquireContainerScrollLock, acquireDialogScrollLock, claimDialogInert, dialogLayerTick, dialogTargetOwnsTab, isRsDialogWidthPreset, isTopDialogLayer, listDialogTabbables, pinDialogContainer, pushDialogLayer, releaseDialogInert, removeDialogLayer, resolveDialogOverlayStyle, resolveDialogTabTarget, resolveRsConfirmContain, resolveRsDialogCssWidth, runRsConfirmBeforeClose } from "./dialog-utils.js";
|
|
4
|
+
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onActivated, onBeforeUnmount, onDeactivated, openBlock, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useModel, watch, withCtx } from "vue";
|
|
5
5
|
//#region src/components/dialog/src/RsConfirmDialog.vue?vue&type=script&setup=true&lang.ts
|
|
6
6
|
var _hoisted_1 = [
|
|
7
7
|
"data-rs-theme",
|
|
@@ -10,6 +10,8 @@ var _hoisted_1 = [
|
|
|
10
10
|
];
|
|
11
11
|
var _hoisted_2 = [
|
|
12
12
|
"id",
|
|
13
|
+
"role",
|
|
14
|
+
"aria-modal",
|
|
13
15
|
"aria-labelledby",
|
|
14
16
|
"aria-label",
|
|
15
17
|
"aria-describedby"
|
|
@@ -60,6 +62,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
60
62
|
overlayOpacity: {},
|
|
61
63
|
overlayBlur: {},
|
|
62
64
|
teleportTo: { type: [String, Boolean] },
|
|
65
|
+
contain: { default: "viewport" },
|
|
63
66
|
closeOnEsc: {
|
|
64
67
|
type: Boolean,
|
|
65
68
|
default: true
|
|
@@ -102,6 +105,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
102
105
|
let closeFromInside = null;
|
|
103
106
|
let keyBound = false;
|
|
104
107
|
let releaseScroll = null;
|
|
108
|
+
let releasePosition = null;
|
|
105
109
|
let returnTo = null;
|
|
106
110
|
let inertGeneration = 0;
|
|
107
111
|
const contentClass = computed(() => {
|
|
@@ -111,6 +115,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
111
115
|
if (props.zIndex == null || !Number.isFinite(props.zIndex)) return void 0;
|
|
112
116
|
return { zIndex: String(Math.round(props.zIndex) + offset) };
|
|
113
117
|
}
|
|
118
|
+
const shellStyle = computed(() => zIndexStyle(0));
|
|
114
119
|
const overlayStyle = computed(() => {
|
|
115
120
|
const visual = props.showOverlay ? resolveDialogOverlayStyle({
|
|
116
121
|
overlayOpacity: props.overlayOpacity,
|
|
@@ -147,6 +152,11 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
147
152
|
if (target === false || target == null) return "body";
|
|
148
153
|
return target;
|
|
149
154
|
});
|
|
155
|
+
/** contain="container" 且挂载点是页面节点。否则仍盖住窗口。 */
|
|
156
|
+
const contained = computed(() => resolveRsConfirmContain(props.contain, props.teleportTo) === "container");
|
|
157
|
+
/** KeepAlive 切走时为 false。必须在 open 的 immediate watch 之前声明。 */
|
|
158
|
+
const pageActive = ref(true);
|
|
159
|
+
let presentedSuspended = false;
|
|
150
160
|
function syncChrome() {
|
|
151
161
|
const el = anchorRef.value;
|
|
152
162
|
if (!el) {
|
|
@@ -163,26 +173,47 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
163
173
|
panelDir.value = dir === "ltr" || dir === "rtl" ? dir : void 0;
|
|
164
174
|
panelLang.value = langed?.getAttribute("lang") || void 0;
|
|
165
175
|
}
|
|
166
|
-
function
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
176
|
+
function releaseContainHost() {
|
|
177
|
+
releasePosition?.();
|
|
178
|
+
releasePosition = null;
|
|
179
|
+
}
|
|
180
|
+
function syncContainHost() {
|
|
181
|
+
if (!contained.value || !open.value || !pageActive.value) {
|
|
182
|
+
releaseContainHost();
|
|
170
183
|
return;
|
|
171
184
|
}
|
|
172
|
-
|
|
173
|
-
|
|
185
|
+
const host = shellRef.value?.parentElement;
|
|
186
|
+
if (!host || releasePosition) return;
|
|
187
|
+
releasePosition = pinDialogContainer(host);
|
|
188
|
+
}
|
|
189
|
+
function syncScrollLock() {
|
|
190
|
+
if (!(open.value && pageActive.value && props.lockScroll)) {
|
|
191
|
+
releaseScroll?.();
|
|
174
192
|
releaseScroll = null;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (releaseScroll) return;
|
|
196
|
+
if (contained.value) {
|
|
197
|
+
const host = shellRef.value?.parentElement;
|
|
198
|
+
if (!host) return;
|
|
199
|
+
releaseScroll = acquireContainerScrollLock(host);
|
|
200
|
+
return;
|
|
175
201
|
}
|
|
202
|
+
releaseScroll = acquireDialogScrollLock();
|
|
176
203
|
}
|
|
177
204
|
async function syncInert() {
|
|
178
205
|
const generation = ++inertGeneration;
|
|
179
206
|
await nextTick();
|
|
180
207
|
if (disposed || generation !== inertGeneration) return;
|
|
181
|
-
if (!(open.value && isTopDialogLayer(layerId)) || !shellRef.value) {
|
|
208
|
+
if (!(open.value && pageActive.value && isTopDialogLayer(layerId)) || !shellRef.value) {
|
|
182
209
|
releaseDialogInert(layerId);
|
|
210
|
+
releaseContainHost();
|
|
183
211
|
return;
|
|
184
212
|
}
|
|
185
|
-
|
|
213
|
+
syncContainHost();
|
|
214
|
+
syncScrollLock();
|
|
215
|
+
const boundary = contained.value ? shellRef.value.parentElement : null;
|
|
216
|
+
claimDialogInert(layerId, shellRef.value, boundary);
|
|
186
217
|
}
|
|
187
218
|
function bindKey() {
|
|
188
219
|
if (keyBound || typeof document === "undefined") return;
|
|
@@ -263,7 +294,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
263
294
|
requestClose("escape");
|
|
264
295
|
return;
|
|
265
296
|
}
|
|
266
|
-
if (event.key !== "Tab" || dialogTargetOwnsTab(event.target)) return;
|
|
297
|
+
if (event.key !== "Tab" || contained.value || dialogTargetOwnsTab(event.target)) return;
|
|
267
298
|
const root = contentRef.value;
|
|
268
299
|
if (!root) return;
|
|
269
300
|
const target = resolveDialogTabTarget(root, document.activeElement, event.shiftKey);
|
|
@@ -281,6 +312,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
281
312
|
syncScrollLock();
|
|
282
313
|
inertGeneration += 1;
|
|
283
314
|
releaseDialogInert(layerId);
|
|
315
|
+
releaseContainHost();
|
|
284
316
|
if (!wasOpen) return;
|
|
285
317
|
const reason = closeFromInside;
|
|
286
318
|
closeFromInside = null;
|
|
@@ -308,8 +340,46 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
308
340
|
async function onCancelClick() {
|
|
309
341
|
await requestClose("cancel");
|
|
310
342
|
}
|
|
343
|
+
/**
|
|
344
|
+
* KeepAlive 切走页签时卸掉浮层,并放开滚动锁、inert 和 document 监听。
|
|
345
|
+
* open 保持为 true,切回来再挂上,不把这次切换当成取消。
|
|
346
|
+
*/
|
|
347
|
+
function suspendPresentedDialog() {
|
|
348
|
+
if (presentedSuspended || !open.value || disposed) return;
|
|
349
|
+
presentedSuspended = true;
|
|
350
|
+
removeDialogLayer(layerId);
|
|
351
|
+
unbindKey();
|
|
352
|
+
releaseScroll?.();
|
|
353
|
+
releaseScroll = null;
|
|
354
|
+
releaseContainHost();
|
|
355
|
+
inertGeneration += 1;
|
|
356
|
+
releaseDialogInert(layerId);
|
|
357
|
+
}
|
|
358
|
+
function resumePresentedDialog() {
|
|
359
|
+
if (!presentedSuspended || disposed) return;
|
|
360
|
+
presentedSuspended = false;
|
|
361
|
+
if (!open.value || !pageActive.value) return;
|
|
362
|
+
syncChrome();
|
|
363
|
+
pushDialogLayer(layerId);
|
|
364
|
+
bindKey();
|
|
365
|
+
syncScrollLock();
|
|
366
|
+
syncInert();
|
|
367
|
+
queueFocus();
|
|
368
|
+
}
|
|
369
|
+
onActivated(() => {
|
|
370
|
+
pageActive.value = true;
|
|
371
|
+
resumePresentedDialog();
|
|
372
|
+
});
|
|
373
|
+
onDeactivated(() => {
|
|
374
|
+
pageActive.value = false;
|
|
375
|
+
suspendPresentedDialog();
|
|
376
|
+
});
|
|
311
377
|
watch(open, (isOpen, wasOpen) => {
|
|
312
378
|
if (isOpen) {
|
|
379
|
+
if (!pageActive.value) {
|
|
380
|
+
presentedSuspended = true;
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
313
383
|
if (wasOpen !== true) {
|
|
314
384
|
rememberTrigger();
|
|
315
385
|
syncChrome();
|
|
@@ -321,14 +391,22 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
321
391
|
syncInert();
|
|
322
392
|
return;
|
|
323
393
|
}
|
|
394
|
+
presentedSuspended = false;
|
|
324
395
|
if (wasOpen === true && closeFromInside == null) {
|
|
325
396
|
vetoParentClose();
|
|
326
397
|
return;
|
|
327
398
|
}
|
|
328
399
|
finishClose(wasOpen === true);
|
|
329
400
|
}, { immediate: true });
|
|
401
|
+
watch(() => [props.contain, props.teleportTo], () => {
|
|
402
|
+
if (!open.value || !pageActive.value || disposed) return;
|
|
403
|
+
releaseScroll?.();
|
|
404
|
+
releaseScroll = null;
|
|
405
|
+
releaseContainHost();
|
|
406
|
+
syncInert();
|
|
407
|
+
});
|
|
330
408
|
watch(() => [props.lockScroll, dialogLayerTick.value], () => {
|
|
331
|
-
if (!open.value || disposed) return;
|
|
409
|
+
if (!open.value || !pageActive.value || disposed) return;
|
|
332
410
|
syncScrollLock();
|
|
333
411
|
syncInert();
|
|
334
412
|
});
|
|
@@ -340,6 +418,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
340
418
|
unbindKey();
|
|
341
419
|
releaseScroll?.();
|
|
342
420
|
releaseScroll = null;
|
|
421
|
+
releaseContainHost();
|
|
343
422
|
releaseDialogInert(layerId);
|
|
344
423
|
});
|
|
345
424
|
__expose({
|
|
@@ -353,7 +432,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
353
432
|
hidden: "",
|
|
354
433
|
class: "rs-confirm-dialog__anchor",
|
|
355
434
|
"aria-hidden": "true"
|
|
356
|
-
}, null, 512), open.value ? (openBlock(), createBlock(Teleport, {
|
|
435
|
+
}, null, 512), open.value && pageActive.value ? (openBlock(), createBlock(Teleport, {
|
|
357
436
|
key: 0,
|
|
358
437
|
defer: "",
|
|
359
438
|
to: teleportTarget.value,
|
|
@@ -361,7 +440,8 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
361
440
|
}, [createElementVNode("div", {
|
|
362
441
|
ref_key: "shellRef",
|
|
363
442
|
ref: shellRef,
|
|
364
|
-
class: "rs-confirm-dialog",
|
|
443
|
+
class: normalizeClass(["rs-confirm-dialog", { "rs-confirm-dialog--container": contained.value }]),
|
|
444
|
+
style: normalizeStyle(shellStyle.value),
|
|
365
445
|
"data-rs-theme": panelTheme.value,
|
|
366
446
|
dir: panelDir.value,
|
|
367
447
|
lang: panelLang.value
|
|
@@ -376,8 +456,8 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
376
456
|
open: "",
|
|
377
457
|
class: normalizeClass(["rs-confirm-dialog__content", contentClass.value]),
|
|
378
458
|
style: normalizeStyle(contentStyle.value),
|
|
379
|
-
role: "alertdialog",
|
|
380
|
-
"aria-modal": "true",
|
|
459
|
+
role: contained.value ? "dialog" : "alertdialog",
|
|
460
|
+
"aria-modal": contained.value ? "false" : "true",
|
|
381
461
|
"aria-labelledby": labelledBy.value,
|
|
382
462
|
"aria-label": accessibleName.value,
|
|
383
463
|
"aria-describedby": hasDescribedBy.value ? descriptionDomId.value : void 0,
|
|
@@ -429,7 +509,7 @@ var RsConfirmDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
|
|
|
429
509
|
"loading",
|
|
430
510
|
"disabled"
|
|
431
511
|
])])
|
|
432
|
-
])], 14, _hoisted_2)],
|
|
512
|
+
])], 14, _hoisted_2)], 14, _hoisted_1)], 8, ["to", "disabled"])) : createCommentVNode("", true)], 64);
|
|
433
513
|
};
|
|
434
514
|
}
|
|
435
515
|
});
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsConfirmDialog_vue_vue_type_script_setup_true_lang_default from "./RsConfirmDialog.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/dialog/src/RsConfirmDialog.vue
|
|
6
|
-
var RsConfirmDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsConfirmDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsConfirmDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsConfirmDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-1d841d98"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsConfirmDialog_default as default };
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-dialog[data-v-
|
|
3
|
-
display:
|
|
2
|
+
.rs-dialog[data-v-bb93e647] {
|
|
3
|
+
/* 必须生成盒子并占住根层叠上下文。display:contents 会让 fixed 子节点留在
|
|
4
|
+
祖先 isolation(编辑区 / 分割栏)里,后绘的侧栏会盖住对话框。 */
|
|
5
|
+
position: fixed;
|
|
6
|
+
inset: 0;
|
|
7
|
+
z-index: var(--rs-z-modal);
|
|
8
|
+
pointer-events: none;
|
|
4
9
|
}
|
|
5
|
-
.rs-dialog__anchor[data-v-
|
|
10
|
+
.rs-dialog__anchor[data-v-bb93e647] {
|
|
6
11
|
display: none;
|
|
7
12
|
}
|
|
8
|
-
.rs-dialog__backdrop[data-v-
|
|
13
|
+
.rs-dialog__backdrop[data-v-bb93e647] {
|
|
9
14
|
position: fixed;
|
|
10
15
|
inset: 0;
|
|
11
16
|
z-index: var(--rs-z-modal);
|
|
17
|
+
pointer-events: auto;
|
|
12
18
|
background: transparent;
|
|
13
19
|
}
|
|
14
|
-
.rs-dialog__overlay[data-v-
|
|
20
|
+
.rs-dialog__overlay[data-v-bb93e647] {
|
|
15
21
|
background: var(--rs-dialog-overlay-bg);
|
|
16
22
|
backdrop-filter: blur(var(--rs-dialog-overlay-blur)) saturate(120%);
|
|
17
23
|
-webkit-backdrop-filter: blur(var(--rs-dialog-overlay-blur)) saturate(120%);
|
|
18
|
-
animation: rs-dialog-overlay-in-
|
|
24
|
+
animation: rs-dialog-overlay-in-bb93e647 220ms ease;
|
|
19
25
|
}
|
|
20
|
-
.rs-dialog__content[data-v-
|
|
26
|
+
.rs-dialog__content[data-v-bb93e647] {
|
|
21
27
|
position: fixed;
|
|
22
28
|
left: 50%;
|
|
23
29
|
top: calc(
|
|
@@ -25,6 +31,7 @@
|
|
|
25
31
|
(100vh - var(--rs-dialog-inset-top, 1rem) - var(--rs-dialog-inset-bottom, 1rem)) / 2
|
|
26
32
|
);
|
|
27
33
|
z-index: calc(var(--rs-z-modal) + 1);
|
|
34
|
+
pointer-events: auto;
|
|
28
35
|
display: flex;
|
|
29
36
|
max-height: min(
|
|
30
37
|
calc(100vh - var(--rs-dialog-inset-top, 1rem) - var(--rs-dialog-inset-bottom, 1rem) - 2rem),
|
|
@@ -45,40 +52,40 @@
|
|
|
45
52
|
outline: none;
|
|
46
53
|
color: var(--rs-dialog-title-fg);
|
|
47
54
|
}
|
|
48
|
-
.rs-dialog__content[data-v-
|
|
55
|
+
.rs-dialog__content[data-v-bb93e647]:focus-visible {
|
|
49
56
|
box-shadow:
|
|
50
57
|
var(--rs-dialog-shadow),
|
|
51
58
|
0 0 0 var(--rs-focus-ring-width) var(--rs-focus-ring);
|
|
52
59
|
}
|
|
53
|
-
[data-rs-theme='light'] .rs-dialog__content--form[data-v-
|
|
54
|
-
[data-rs-theme='light'] .rs-dialog__content--confirm[data-v-
|
|
60
|
+
[data-rs-theme='light'] .rs-dialog__content--form[data-v-bb93e647],
|
|
61
|
+
[data-rs-theme='light'] .rs-dialog__content--confirm[data-v-bb93e647] {
|
|
55
62
|
background: color-mix(in srgb, var(--rs-dialog-bg) 94%, transparent);
|
|
56
63
|
backdrop-filter: blur(24px) saturate(180%);
|
|
57
64
|
-webkit-backdrop-filter: blur(24px) saturate(180%);
|
|
58
65
|
}
|
|
59
|
-
[data-rs-theme='light'] .rs-dialog__content--window[data-v-
|
|
66
|
+
[data-rs-theme='light'] .rs-dialog__content--window[data-v-bb93e647] {
|
|
60
67
|
background: var(--rs-dialog-bg);
|
|
61
68
|
}
|
|
62
|
-
.rs-dialog__content--form[data-state='open'][data-v-
|
|
63
|
-
.rs-dialog__content--confirm[data-state='open'][data-v-
|
|
64
|
-
animation: rs-dialog-pop-in-
|
|
69
|
+
.rs-dialog__content--form[data-state='open'][data-v-bb93e647],
|
|
70
|
+
.rs-dialog__content--confirm[data-state='open'][data-v-bb93e647] {
|
|
71
|
+
animation: rs-dialog-pop-in-bb93e647 240ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
65
72
|
}
|
|
66
|
-
.rs-dialog__content--window[data-state='open'][data-v-
|
|
67
|
-
animation: rs-dialog-fade-in-
|
|
73
|
+
.rs-dialog__content--window[data-state='open'][data-v-bb93e647] {
|
|
74
|
+
animation: rs-dialog-fade-in-bb93e647 220ms ease;
|
|
68
75
|
}
|
|
69
|
-
.rs-dialog__content--tone-info[data-v-
|
|
76
|
+
.rs-dialog__content--tone-info[data-v-bb93e647] {
|
|
70
77
|
border-color: color-mix(in srgb, var(--rs-info) 46%, var(--rs-dialog-border));
|
|
71
78
|
}
|
|
72
|
-
.rs-dialog__content--tone-success[data-v-
|
|
79
|
+
.rs-dialog__content--tone-success[data-v-bb93e647] {
|
|
73
80
|
border-color: color-mix(in srgb, var(--rs-success) 46%, var(--rs-dialog-border));
|
|
74
81
|
}
|
|
75
|
-
.rs-dialog__content--tone-warning[data-v-
|
|
82
|
+
.rs-dialog__content--tone-warning[data-v-bb93e647] {
|
|
76
83
|
border-color: color-mix(in srgb, var(--rs-warning) 52%, var(--rs-dialog-border));
|
|
77
84
|
}
|
|
78
|
-
.rs-dialog__content--tone-danger[data-v-
|
|
85
|
+
.rs-dialog__content--tone-danger[data-v-bb93e647] {
|
|
79
86
|
border-color: color-mix(in srgb, var(--rs-danger) 52%, var(--rs-dialog-border));
|
|
80
87
|
}
|
|
81
|
-
@keyframes rs-dialog-overlay-in-
|
|
88
|
+
@keyframes rs-dialog-overlay-in-bb93e647 {
|
|
82
89
|
from {
|
|
83
90
|
opacity: 0;
|
|
84
91
|
}
|
|
@@ -86,7 +93,7 @@ to {
|
|
|
86
93
|
opacity: 1;
|
|
87
94
|
}
|
|
88
95
|
}
|
|
89
|
-
@keyframes rs-dialog-pop-in-
|
|
96
|
+
@keyframes rs-dialog-pop-in-bb93e647 {
|
|
90
97
|
from {
|
|
91
98
|
opacity: 0;
|
|
92
99
|
transform: translate(-50%, -46%) scale(0.96);
|
|
@@ -96,7 +103,7 @@ to {
|
|
|
96
103
|
transform: translate(-50%, -50%) scale(1);
|
|
97
104
|
}
|
|
98
105
|
}
|
|
99
|
-
@keyframes rs-dialog-fade-in-
|
|
106
|
+
@keyframes rs-dialog-fade-in-bb93e647 {
|
|
100
107
|
from {
|
|
101
108
|
opacity: 0;
|
|
102
109
|
}
|
|
@@ -104,14 +111,14 @@ to {
|
|
|
104
111
|
opacity: 1;
|
|
105
112
|
}
|
|
106
113
|
}
|
|
107
|
-
.rs-dialog__content--window[data-v-
|
|
114
|
+
.rs-dialog__content--window[data-v-bb93e647] {
|
|
108
115
|
left: 50%;
|
|
109
116
|
top: 50%;
|
|
110
117
|
max-width: none;
|
|
111
118
|
max-height: none;
|
|
112
119
|
transform: none;
|
|
113
120
|
}
|
|
114
|
-
.rs-dialog__content--window.rs-dialog__content--bounds-transition[data-v-
|
|
121
|
+
.rs-dialog__content--window.rs-dialog__content--bounds-transition[data-v-bb93e647] {
|
|
115
122
|
transition:
|
|
116
123
|
left 220ms cubic-bezier(0.32, 0.72, 0, 1),
|
|
117
124
|
top 220ms cubic-bezier(0.32, 0.72, 0, 1),
|
|
@@ -119,25 +126,25 @@ to {
|
|
|
119
126
|
height 220ms cubic-bezier(0.32, 0.72, 0, 1),
|
|
120
127
|
border-radius 220ms cubic-bezier(0.32, 0.72, 0, 1);
|
|
121
128
|
}
|
|
122
|
-
.rs-dialog__content--sm[data-v-
|
|
129
|
+
.rs-dialog__content--sm[data-v-bb93e647] {
|
|
123
130
|
max-width: 24rem;
|
|
124
131
|
}
|
|
125
|
-
.rs-dialog__content--md[data-v-
|
|
132
|
+
.rs-dialog__content--md[data-v-bb93e647] {
|
|
126
133
|
max-width: 32rem;
|
|
127
134
|
}
|
|
128
|
-
.rs-dialog__content--lg[data-v-
|
|
135
|
+
.rs-dialog__content--lg[data-v-bb93e647] {
|
|
129
136
|
max-width: 42rem;
|
|
130
137
|
}
|
|
131
|
-
.rs-dialog__content--window.rs-dialog__content--sm[data-v-
|
|
132
|
-
.rs-dialog__content--window.rs-dialog__content--md[data-v-
|
|
133
|
-
.rs-dialog__content--window.rs-dialog__content--lg[data-v-
|
|
134
|
-
.rs-dialog__content--window.rs-dialog__content--custom-width[data-v-
|
|
138
|
+
.rs-dialog__content--window.rs-dialog__content--sm[data-v-bb93e647],
|
|
139
|
+
.rs-dialog__content--window.rs-dialog__content--md[data-v-bb93e647],
|
|
140
|
+
.rs-dialog__content--window.rs-dialog__content--lg[data-v-bb93e647],
|
|
141
|
+
.rs-dialog__content--window.rs-dialog__content--custom-width[data-v-bb93e647] {
|
|
135
142
|
max-width: none;
|
|
136
143
|
}
|
|
137
|
-
.rs-dialog__content--fullscreen[data-v-
|
|
144
|
+
.rs-dialog__content--fullscreen[data-v-bb93e647] {
|
|
138
145
|
border-radius: var(--rs-radius);
|
|
139
146
|
}
|
|
140
|
-
.rs-dialog__header[data-v-
|
|
147
|
+
.rs-dialog__header[data-v-bb93e647] {
|
|
141
148
|
display: flex;
|
|
142
149
|
align-items: center;
|
|
143
150
|
justify-content: space-between;
|
|
@@ -151,7 +158,7 @@ to {
|
|
|
151
158
|
background: var(--rs-dialog-header-bg);
|
|
152
159
|
border-block-end: 1px solid var(--rs-dialog-separator);
|
|
153
160
|
}
|
|
154
|
-
.rs-dialog__heading[data-v-
|
|
161
|
+
.rs-dialog__heading[data-v-bb93e647] {
|
|
155
162
|
min-width: 0;
|
|
156
163
|
flex: 1;
|
|
157
164
|
display: flex;
|
|
@@ -159,11 +166,11 @@ to {
|
|
|
159
166
|
justify-content: center;
|
|
160
167
|
gap: var(--rs-space-xs);
|
|
161
168
|
}
|
|
162
|
-
.rs-dialog__content--window.rs-dialog__content--draggable .rs-dialog__header[data-v-
|
|
169
|
+
.rs-dialog__content--window.rs-dialog__content--draggable .rs-dialog__header[data-v-bb93e647] {
|
|
163
170
|
cursor: move;
|
|
164
171
|
user-select: none;
|
|
165
172
|
}
|
|
166
|
-
.rs-dialog__title[data-v-
|
|
173
|
+
.rs-dialog__title[data-v-bb93e647] {
|
|
167
174
|
margin: 0;
|
|
168
175
|
display: inline-flex;
|
|
169
176
|
align-items: center;
|
|
@@ -175,14 +182,14 @@ to {
|
|
|
175
182
|
color: var(--rs-dialog-title-fg);
|
|
176
183
|
text-align: start;
|
|
177
184
|
}
|
|
178
|
-
.rs-dialog__description[data-v-
|
|
185
|
+
.rs-dialog__description[data-v-bb93e647] {
|
|
179
186
|
margin: 0;
|
|
180
187
|
font-size: var(--rs-font-size-sm);
|
|
181
188
|
color: var(--rs-dialog-description-fg);
|
|
182
189
|
line-height: var(--rs-line-height-normal);
|
|
183
190
|
text-align: start;
|
|
184
191
|
}
|
|
185
|
-
.rs-dialog__body[data-v-
|
|
192
|
+
.rs-dialog__body[data-v-bb93e647] {
|
|
186
193
|
flex: 1;
|
|
187
194
|
min-height: 0;
|
|
188
195
|
overflow: auto;
|
|
@@ -192,15 +199,15 @@ to {
|
|
|
192
199
|
padding-inline: var(--rs-dialog-body-padding-x);
|
|
193
200
|
background: var(--rs-dialog-body-bg);
|
|
194
201
|
}
|
|
195
|
-
.rs-dialog__content--window .rs-dialog__body[data-v-
|
|
202
|
+
.rs-dialog__content--window .rs-dialog__body[data-v-bb93e647] {
|
|
196
203
|
display: flex;
|
|
197
204
|
flex-direction: column;
|
|
198
205
|
}
|
|
199
|
-
.rs-dialog__body-placeholder[data-v-
|
|
206
|
+
.rs-dialog__body-placeholder[data-v-bb93e647] {
|
|
200
207
|
flex: 1;
|
|
201
208
|
min-height: 0;
|
|
202
209
|
}
|
|
203
|
-
.rs-dialog__footer[data-v-
|
|
210
|
+
.rs-dialog__footer[data-v-bb93e647] {
|
|
204
211
|
display: flex;
|
|
205
212
|
align-items: center;
|
|
206
213
|
justify-content: flex-end;
|
|
@@ -215,77 +222,77 @@ to {
|
|
|
215
222
|
background: var(--rs-dialog-footer-bg);
|
|
216
223
|
border-block-start: 1px solid var(--rs-dialog-footer-border);
|
|
217
224
|
}
|
|
218
|
-
.rs-dialog__actions[data-v-
|
|
225
|
+
.rs-dialog__actions[data-v-bb93e647] {
|
|
219
226
|
display: inline-flex;
|
|
220
227
|
align-items: center;
|
|
221
228
|
gap: var(--rs-space-xs);
|
|
222
229
|
flex-shrink: 0;
|
|
223
230
|
}
|
|
224
|
-
.rs-dialog__resize-handle[data-v-
|
|
231
|
+
.rs-dialog__resize-handle[data-v-bb93e647] {
|
|
225
232
|
position: absolute;
|
|
226
233
|
z-index: 2;
|
|
227
234
|
}
|
|
228
|
-
.rs-dialog__resize-handle--n[data-v-
|
|
229
|
-
.rs-dialog__resize-handle--s[data-v-
|
|
235
|
+
.rs-dialog__resize-handle--n[data-v-bb93e647],
|
|
236
|
+
.rs-dialog__resize-handle--s[data-v-bb93e647] {
|
|
230
237
|
inset-inline: 0.5rem;
|
|
231
238
|
height: 0.5rem;
|
|
232
239
|
cursor: ns-resize;
|
|
233
240
|
}
|
|
234
|
-
.rs-dialog__resize-handle--n[data-v-
|
|
241
|
+
.rs-dialog__resize-handle--n[data-v-bb93e647] {
|
|
235
242
|
top: -0.25rem;
|
|
236
243
|
}
|
|
237
|
-
.rs-dialog__resize-handle--s[data-v-
|
|
244
|
+
.rs-dialog__resize-handle--s[data-v-bb93e647] {
|
|
238
245
|
bottom: -0.25rem;
|
|
239
246
|
}
|
|
240
|
-
.rs-dialog__resize-handle--e[data-v-
|
|
241
|
-
.rs-dialog__resize-handle--w[data-v-
|
|
247
|
+
.rs-dialog__resize-handle--e[data-v-bb93e647],
|
|
248
|
+
.rs-dialog__resize-handle--w[data-v-bb93e647] {
|
|
242
249
|
top: 0.5rem;
|
|
243
250
|
bottom: 0.5rem;
|
|
244
251
|
width: 0.5rem;
|
|
245
252
|
cursor: ew-resize;
|
|
246
253
|
}
|
|
247
|
-
.rs-dialog__resize-handle--e[data-v-
|
|
254
|
+
.rs-dialog__resize-handle--e[data-v-bb93e647] {
|
|
248
255
|
right: -0.25rem;
|
|
249
256
|
}
|
|
250
|
-
.rs-dialog__resize-handle--w[data-v-
|
|
257
|
+
.rs-dialog__resize-handle--w[data-v-bb93e647] {
|
|
251
258
|
left: -0.25rem;
|
|
252
259
|
}
|
|
253
|
-
.rs-dialog__resize-handle--ne[data-v-
|
|
254
|
-
.rs-dialog__resize-handle--nw[data-v-
|
|
255
|
-
.rs-dialog__resize-handle--se[data-v-
|
|
256
|
-
.rs-dialog__resize-handle--sw[data-v-
|
|
260
|
+
.rs-dialog__resize-handle--ne[data-v-bb93e647],
|
|
261
|
+
.rs-dialog__resize-handle--nw[data-v-bb93e647],
|
|
262
|
+
.rs-dialog__resize-handle--se[data-v-bb93e647],
|
|
263
|
+
.rs-dialog__resize-handle--sw[data-v-bb93e647] {
|
|
257
264
|
width: 0.75rem;
|
|
258
265
|
height: 0.75rem;
|
|
259
266
|
}
|
|
260
|
-
.rs-dialog__resize-handle--ne[data-v-
|
|
267
|
+
.rs-dialog__resize-handle--ne[data-v-bb93e647] {
|
|
261
268
|
top: -0.25rem;
|
|
262
269
|
right: -0.25rem;
|
|
263
270
|
cursor: nesw-resize;
|
|
264
271
|
}
|
|
265
|
-
.rs-dialog__resize-handle--nw[data-v-
|
|
272
|
+
.rs-dialog__resize-handle--nw[data-v-bb93e647] {
|
|
266
273
|
top: -0.25rem;
|
|
267
274
|
left: -0.25rem;
|
|
268
275
|
cursor: nwse-resize;
|
|
269
276
|
}
|
|
270
|
-
.rs-dialog__resize-handle--se[data-v-
|
|
277
|
+
.rs-dialog__resize-handle--se[data-v-bb93e647] {
|
|
271
278
|
right: -0.25rem;
|
|
272
279
|
bottom: -0.25rem;
|
|
273
280
|
cursor: nwse-resize;
|
|
274
281
|
}
|
|
275
|
-
.rs-dialog__resize-handle--sw[data-v-
|
|
282
|
+
.rs-dialog__resize-handle--sw[data-v-bb93e647] {
|
|
276
283
|
left: -0.25rem;
|
|
277
284
|
bottom: -0.25rem;
|
|
278
285
|
cursor: nesw-resize;
|
|
279
286
|
}
|
|
280
287
|
@media (prefers-reduced-motion: reduce) {
|
|
281
|
-
[data-rs-theme='light'] .rs-dialog__content--form[data-v-
|
|
282
|
-
[data-rs-theme='light'] .rs-dialog__content--confirm[data-v-
|
|
283
|
-
.rs-dialog__overlay[data-v-
|
|
288
|
+
[data-rs-theme='light'] .rs-dialog__content--form[data-v-bb93e647],
|
|
289
|
+
[data-rs-theme='light'] .rs-dialog__content--confirm[data-v-bb93e647],
|
|
290
|
+
.rs-dialog__overlay[data-v-bb93e647] {
|
|
284
291
|
backdrop-filter: none;
|
|
285
292
|
-webkit-backdrop-filter: none;
|
|
286
293
|
background: var(--rs-dialog-bg);
|
|
287
294
|
}
|
|
288
|
-
.rs-dialog__overlay[data-v-
|
|
295
|
+
.rs-dialog__overlay[data-v-bb93e647] {
|
|
289
296
|
background: var(--rs-dialog-overlay-bg);
|
|
290
297
|
}
|
|
291
298
|
}
|
|
@@ -240,6 +240,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
240
240
|
if (open.value && !disposed) emit("afterOpen");
|
|
241
241
|
}, 230);
|
|
242
242
|
}
|
|
243
|
+
const shellStyle = computed(() => zIndexStyle(0));
|
|
243
244
|
function zIndexStyle(offset) {
|
|
244
245
|
if (props.zIndex == null || !Number.isFinite(props.zIndex)) return void 0;
|
|
245
246
|
return { zIndex: String(Math.round(props.zIndex) + offset) };
|
|
@@ -594,6 +595,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
594
595
|
ref_key: "shellRef",
|
|
595
596
|
ref: shellRef,
|
|
596
597
|
class: "rs-dialog",
|
|
598
|
+
style: normalizeStyle(shellStyle.value),
|
|
597
599
|
"data-rs-theme": panelTheme.value,
|
|
598
600
|
dir: panelDir.value,
|
|
599
601
|
lang: panelLang.value
|
|
@@ -684,7 +686,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
|
|
|
684
686
|
default: withCtx(() => [createTextVNode(toDisplayString(__props.confirmText ?? unref(t)("common.confirm")), 1)]),
|
|
685
687
|
_: 1
|
|
686
688
|
}, 8, ["variant", "loading"])) : createCommentVNode("", true)], 64)) : createCommentVNode("", true)], true)])) : createCommentVNode("", true)
|
|
687
|
-
], 16, _hoisted_2)],
|
|
689
|
+
], 16, _hoisted_2)], 12, _hoisted_1)], 8, ["to", "disabled"])) : createCommentVNode("", true)], 64);
|
|
688
690
|
};
|
|
689
691
|
}
|
|
690
692
|
});
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsDialog_vue_vue_type_script_setup_true_lang_default from "./RsDialog.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/dialog/src/RsDialog.vue
|
|
6
|
-
var RsDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-bb93e647"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsDialog_default as default };
|
|
@@ -41,6 +41,15 @@ export interface RsConfirmDialogExpose {
|
|
|
41
41
|
focus: () => void;
|
|
42
42
|
}
|
|
43
43
|
export type RsConfirmDialogInstance = RsConfirmDialogExpose;
|
|
44
|
+
/** viewport 盖住窗口;container 只盖住 teleportTo 指向的页面。 */
|
|
45
|
+
export type RsConfirmContain = 'viewport' | 'container';
|
|
46
|
+
/** 挂载点是窗口根,不能当作页内容器。 */
|
|
47
|
+
export declare function isRsConfirmWindowTarget(target: string | HTMLElement | false | null | undefined): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* contain="container" 且挂载点不是页面节点时退回 viewport。
|
|
50
|
+
* 不在这里警告,避免计算属性产生副作用。
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveRsConfirmContain(contain: RsConfirmContain | undefined, teleportTo: string | HTMLElement | false | null | undefined): RsConfirmContain;
|
|
44
53
|
export interface RsConfirmOptions {
|
|
45
54
|
title?: string;
|
|
46
55
|
/** 次要说明(标题与正文之间,对应业务侧常见 subtitle) */
|
|
@@ -85,6 +94,11 @@ export interface RsConfirmOptions {
|
|
|
85
94
|
overlayBlur?: number | string;
|
|
86
95
|
/** false 表示禁用 Teleport,就地渲染 */
|
|
87
96
|
teleportTo?: string | HTMLElement | false;
|
|
97
|
+
/**
|
|
98
|
+
* 呈现范围。teleportTo 只决定挂载点。
|
|
99
|
+
* viewport 盖住窗口;container 只盖住 teleportTo 指向的页面节点。
|
|
100
|
+
*/
|
|
101
|
+
contain?: RsConfirmContain;
|
|
88
102
|
/** 命令式挂载时覆盖主题;默认读 document data-rs-theme */
|
|
89
103
|
theme?: RsThemeMode;
|
|
90
104
|
/** 命令式挂载时覆盖语言;默认读 document data-rs-locale */
|
|
@@ -121,14 +135,25 @@ export declare function isTopDialogLayer(id: string): boolean;
|
|
|
121
135
|
* 引用计数:嵌套对话框只在最后一层关闭时恢复。重复释放无操作。
|
|
122
136
|
*/
|
|
123
137
|
export declare function acquireDialogScrollLock(): () => void;
|
|
138
|
+
/**
|
|
139
|
+
* contain="container" 时只锁挂载容器,不锁 body。
|
|
140
|
+
* 同一容器上的嵌套确认框引用计数,最后一层关闭才还原 overflow。
|
|
141
|
+
*/
|
|
142
|
+
export declare function acquireContainerScrollLock(el: HTMLElement): () => void;
|
|
143
|
+
/**
|
|
144
|
+
* 容器是 static 时,绝对定位会爬到外层。打开期间临时改为 relative,关闭后还原。
|
|
145
|
+
* 已经是定位容器时不改 inline style。同一容器引用计数。
|
|
146
|
+
*/
|
|
147
|
+
export declare function pinDialogContainer(el: HTMLElement): () => void;
|
|
124
148
|
/**
|
|
125
149
|
* 把对话框外壳的兄弟(以及祖先的兄弟)标成 inert,背后内容不可点、不可 Tab。
|
|
126
150
|
* 不 inert body 本身,否则 Teleport 进去的对话框也会被冻住。
|
|
127
151
|
* 已经 inert 的节点不动,释放时也不会被我们解开。
|
|
152
|
+
* boundary 给出时,标完该节点内部的兄弟就停,页签栏等外层仍可切换。
|
|
128
153
|
*/
|
|
129
|
-
export declare function inertDialogSiblings(layer: HTMLElement): () => void;
|
|
154
|
+
export declare function inertDialogSiblings(layer: HTMLElement, boundary?: HTMLElement | null): () => void;
|
|
130
155
|
/** 只有最上层模态对话框持有 inert。别人释放不会清掉当前层。 */
|
|
131
|
-
export declare function claimDialogInert(ownerId: string, layer: HTMLElement): void;
|
|
156
|
+
export declare function claimDialogInert(ownerId: string, layer: HTMLElement, boundary?: HTMLElement | null): void;
|
|
132
157
|
export declare function releaseDialogInert(ownerId: string): void;
|
|
133
158
|
/** 测试收尾:清层栈、滚动锁和 inert,避免上一例失败把 body 留在 hidden。 */
|
|
134
159
|
export declare function resetDialogGuardsForTests(): void;
|
|
@@ -40,6 +40,25 @@ async function runRsDialogBeforeClose(beforeClose, reason) {
|
|
|
40
40
|
if (!beforeClose) return true;
|
|
41
41
|
return await beforeClose(reason) !== false;
|
|
42
42
|
}
|
|
43
|
+
/** 挂载点是窗口根,不能当作页内容器。 */
|
|
44
|
+
function isRsConfirmWindowTarget(target) {
|
|
45
|
+
if (target == null || target === false) return true;
|
|
46
|
+
if (typeof target === "string") {
|
|
47
|
+
const sel = target.trim().toLowerCase();
|
|
48
|
+
return sel === "body" || sel === "html";
|
|
49
|
+
}
|
|
50
|
+
if (typeof document === "undefined") return false;
|
|
51
|
+
return target === document.body || target === document.documentElement;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* contain="container" 且挂载点不是页面节点时退回 viewport。
|
|
55
|
+
* 不在这里警告,避免计算属性产生副作用。
|
|
56
|
+
*/
|
|
57
|
+
function resolveRsConfirmContain(contain, teleportTo) {
|
|
58
|
+
if (contain !== "container") return "viewport";
|
|
59
|
+
if (isRsConfirmWindowTarget(teleportTo)) return "viewport";
|
|
60
|
+
return "container";
|
|
61
|
+
}
|
|
43
62
|
/** 运行确认框 beforeClose;未提供或非 false 视为允许关闭 */
|
|
44
63
|
async function runRsConfirmBeforeClose(beforeClose, reason) {
|
|
45
64
|
if (!beforeClose) return true;
|
|
@@ -117,6 +136,8 @@ function isTopDialogLayer(id) {
|
|
|
117
136
|
}
|
|
118
137
|
var scrollLockCount = 0;
|
|
119
138
|
var scrollLockSnapshot = null;
|
|
139
|
+
var containerScrollLocks = /* @__PURE__ */ new Map();
|
|
140
|
+
var containerPositionPins = /* @__PURE__ */ new Map();
|
|
120
141
|
/**
|
|
121
142
|
* 模态层锁 body 滚动,并补上滚动条宽度,避免页面横跳。
|
|
122
143
|
* 引用计数:嵌套对话框只在最后一层关闭时恢复。重复释放无操作。
|
|
@@ -148,6 +169,61 @@ function acquireDialogScrollLock() {
|
|
|
148
169
|
scrollLockSnapshot = null;
|
|
149
170
|
};
|
|
150
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* contain="container" 时只锁挂载容器,不锁 body。
|
|
174
|
+
* 同一容器上的嵌套确认框引用计数,最后一层关闭才还原 overflow。
|
|
175
|
+
*/
|
|
176
|
+
function acquireContainerScrollLock(el) {
|
|
177
|
+
let entry = containerScrollLocks.get(el);
|
|
178
|
+
if (!entry) {
|
|
179
|
+
entry = {
|
|
180
|
+
count: 0,
|
|
181
|
+
overflow: el.style.overflow
|
|
182
|
+
};
|
|
183
|
+
containerScrollLocks.set(el, entry);
|
|
184
|
+
el.style.overflow = "hidden";
|
|
185
|
+
}
|
|
186
|
+
entry.count += 1;
|
|
187
|
+
let released = false;
|
|
188
|
+
return () => {
|
|
189
|
+
if (released) return;
|
|
190
|
+
released = true;
|
|
191
|
+
const current = containerScrollLocks.get(el);
|
|
192
|
+
if (!current) return;
|
|
193
|
+
current.count -= 1;
|
|
194
|
+
if (current.count > 0) return;
|
|
195
|
+
el.style.overflow = current.overflow;
|
|
196
|
+
containerScrollLocks.delete(el);
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 容器是 static 时,绝对定位会爬到外层。打开期间临时改为 relative,关闭后还原。
|
|
201
|
+
* 已经是定位容器时不改 inline style。同一容器引用计数。
|
|
202
|
+
*/
|
|
203
|
+
function pinDialogContainer(el) {
|
|
204
|
+
let entry = containerPositionPins.get(el);
|
|
205
|
+
if (!entry) {
|
|
206
|
+
const computed = typeof getComputedStyle === "function" ? getComputedStyle(el).position : "static";
|
|
207
|
+
entry = {
|
|
208
|
+
count: 0,
|
|
209
|
+
position: el.style.position
|
|
210
|
+
};
|
|
211
|
+
containerPositionPins.set(el, entry);
|
|
212
|
+
if (computed === "static") el.style.position = "relative";
|
|
213
|
+
}
|
|
214
|
+
entry.count += 1;
|
|
215
|
+
let released = false;
|
|
216
|
+
return () => {
|
|
217
|
+
if (released) return;
|
|
218
|
+
released = true;
|
|
219
|
+
const current = containerPositionPins.get(el);
|
|
220
|
+
if (!current) return;
|
|
221
|
+
current.count -= 1;
|
|
222
|
+
if (current.count > 0) return;
|
|
223
|
+
el.style.position = current.position;
|
|
224
|
+
containerPositionPins.delete(el);
|
|
225
|
+
};
|
|
226
|
+
}
|
|
151
227
|
function markInert(el, value) {
|
|
152
228
|
if (value) {
|
|
153
229
|
el.setAttribute("inert", "");
|
|
@@ -173,8 +249,9 @@ function markInertSiblings(parent, current, touched) {
|
|
|
173
249
|
* 把对话框外壳的兄弟(以及祖先的兄弟)标成 inert,背后内容不可点、不可 Tab。
|
|
174
250
|
* 不 inert body 本身,否则 Teleport 进去的对话框也会被冻住。
|
|
175
251
|
* 已经 inert 的节点不动,释放时也不会被我们解开。
|
|
252
|
+
* boundary 给出时,标完该节点内部的兄弟就停,页签栏等外层仍可切换。
|
|
176
253
|
*/
|
|
177
|
-
function inertDialogSiblings(layer) {
|
|
254
|
+
function inertDialogSiblings(layer, boundary) {
|
|
178
255
|
if (typeof document === "undefined" || !layer.parentElement) return () => {};
|
|
179
256
|
const touched = [];
|
|
180
257
|
let current = layer;
|
|
@@ -182,6 +259,7 @@ function inertDialogSiblings(layer) {
|
|
|
182
259
|
const parent = current.parentElement;
|
|
183
260
|
if (!parent) break;
|
|
184
261
|
markInertSiblings(parent, current, touched);
|
|
262
|
+
if (boundary && parent === boundary) break;
|
|
185
263
|
current = parent;
|
|
186
264
|
}
|
|
187
265
|
let released = false;
|
|
@@ -194,9 +272,9 @@ function inertDialogSiblings(layer) {
|
|
|
194
272
|
var inertRelease = null;
|
|
195
273
|
var inertOwner = null;
|
|
196
274
|
/** 只有最上层模态对话框持有 inert。别人释放不会清掉当前层。 */
|
|
197
|
-
function claimDialogInert(ownerId, layer) {
|
|
275
|
+
function claimDialogInert(ownerId, layer, boundary) {
|
|
198
276
|
inertRelease?.();
|
|
199
|
-
inertRelease = inertDialogSiblings(layer);
|
|
277
|
+
inertRelease = inertDialogSiblings(layer, boundary);
|
|
200
278
|
inertOwner = ownerId;
|
|
201
279
|
}
|
|
202
280
|
function releaseDialogInert(ownerId) {
|
|
@@ -206,4 +284,4 @@ function releaseDialogInert(ownerId) {
|
|
|
206
284
|
inertOwner = null;
|
|
207
285
|
}
|
|
208
286
|
//#endregion
|
|
209
|
-
export { acquireDialogScrollLock, claimDialogInert, dialogLayerTick, dialogTargetOwnsTab, inertDialogSiblings, isRsDialogWidthPreset, isTopDialogLayer, listDialogTabbables, pushDialogLayer, releaseDialogInert, removeDialogLayer, resolveDialogOverlayStyle, resolveDialogTabTarget, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsConfirmBeforeClose, runRsDialogBeforeClose };
|
|
287
|
+
export { acquireContainerScrollLock, acquireDialogScrollLock, claimDialogInert, dialogLayerTick, dialogTargetOwnsTab, inertDialogSiblings, isRsConfirmWindowTarget, isRsDialogWidthPreset, isTopDialogLayer, listDialogTabbables, pinDialogContainer, pushDialogLayer, releaseDialogInert, removeDialogLayer, resolveDialogOverlayStyle, resolveDialogTabTarget, resolveRsConfirmContain, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsConfirmBeforeClose, runRsDialogBeforeClose };
|
|
@@ -120,6 +120,7 @@ function rsConfirmCore(options = {}) {
|
|
|
120
120
|
overlayOpacity: options.overlayOpacity,
|
|
121
121
|
overlayBlur: options.overlayBlur,
|
|
122
122
|
teleportTo: options.teleportTo === false ? false : options.teleportTo,
|
|
123
|
+
contain: options.contain,
|
|
123
124
|
onConfirm: () => {
|
|
124
125
|
if (!hasAsyncConfirm) {
|
|
125
126
|
confirmed = true;
|
package/dist/index.d.ts
CHANGED
|
@@ -75,7 +75,7 @@ export { RsContextMenu } from './components/context-menu';
|
|
|
75
75
|
export { RsConfirmDialog } from './components/dialog';
|
|
76
76
|
export { openRsDialog, rsConfirm } from './composables/createRsDialog';
|
|
77
77
|
export type { RsConfirmApi, RsConfirmInput, RsDialogHandle, RsDialogOpenOptions, RsConfirmResult, } from './composables/createRsDialog';
|
|
78
|
-
export type { RsConfirmBeforeClose, RsConfirmCloseReason, RsConfirmDialogExpose, RsConfirmDialogInstance, RsConfirmOptions, RsDialogBeforeClose, RsDialogCloseReason, RsDialogExpose, RsDialogInstance, RsDialogLayout, RsDialogWidth, RsDialogWidthPreset, } from './components/dialog';
|
|
78
|
+
export type { RsConfirmBeforeClose, RsConfirmCloseReason, RsConfirmContain, RsConfirmDialogExpose, RsConfirmDialogInstance, RsConfirmOptions, RsDialogBeforeClose, RsDialogCloseReason, RsDialogExpose, RsDialogInstance, RsDialogLayout, RsDialogWidth, RsDialogWidthPreset, } from './components/dialog';
|
|
79
79
|
export { isRsDialogWidthPreset, resolveDialogOverlayStyle, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsConfirmBeforeClose, runRsDialogBeforeClose, } from './components/dialog';
|
|
80
80
|
export { RsDrawer } from './components/drawer';
|
|
81
81
|
export type { RsDrawerBeforeClose, RsDrawerCloseReason, RsDrawerDimension, RsDrawerExpose, RsDrawerInstance, RsDrawerSide, RsDrawerSize, } from './components/drawer';
|