niuma-ui 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +2 -2
  3. package/dist/components/code-block/src/RsCodeBlock.css +26 -26
  4. package/dist/components/code-block/src/RsCodeBlock.impl.js +2 -2
  5. package/dist/components/code-block/src/RsCodeBlock.js +1 -1
  6. package/dist/components/context-menu/src/RsContextMenu.css +19 -19
  7. package/dist/components/date-picker/src/RsDatePicker.d.ts +2 -2
  8. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +2 -2
  9. package/dist/components/dialog/src/RsConfirmDialog.css +25 -25
  10. package/dist/components/dialog/src/RsConfirmDialog.impl.js +4 -4
  11. package/dist/components/dialog/src/RsConfirmDialog.js +1 -1
  12. package/dist/components/dialog/src/RsDialog.css +63 -63
  13. package/dist/components/dialog/src/RsDialog.impl.js +56 -11
  14. package/dist/components/dialog/src/RsDialog.js +1 -1
  15. package/dist/components/dialog/src/dialog-window.d.ts +1 -0
  16. package/dist/components/dialog/src/dialog-window.js +1 -0
  17. package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +2 -2
  18. package/dist/components/icon/src/RsIcon.css +5 -5
  19. package/dist/components/icon/src/RsIcon.d.ts +1 -1
  20. package/dist/components/icon/src/RsIcon.impl.js +1 -1
  21. package/dist/components/icon/src/RsIcon.js +1 -1
  22. package/dist/components/input/src/RsInput.d.ts +2 -2
  23. package/dist/components/mentions/src/RsMentions.d.ts +2 -2
  24. package/dist/components/select/src/RsSelect.d.ts +2 -2
  25. package/dist/components/tabs/src/RsTabs.d.ts +3 -3
  26. package/dist/components/tabs/src/RsTabs.impl.js +1 -1
  27. package/dist/components/textarea/src/RsTextarea.d.ts +2 -2
  28. package/dist/components/time-picker/src/RsTimePicker.d.ts +2 -2
  29. package/dist/components/tree/src/RsTree.css +74 -74
  30. package/dist/components/tree/src/RsTree.js +1 -1
  31. package/dist/components/tree-select/src/RsTreeSelect.d.ts +2 -2
  32. package/dist/icons/host.d.ts +11 -0
  33. package/dist/icons/host.js +30 -0
  34. package/dist/icons/lucide.js +10 -3
  35. package/dist/icons/registry.js +1 -1
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.js +1 -0
  38. package/dist/styles.css +27 -11
  39. package/dist/utils/rs-clipboard.d.ts +1 -1
  40. package/dist/utils/rs-clipboard.js +17 -7
  41. package/dist/vite-plugins/niuma-ui-host.d.ts +2 -1
  42. package/dist/vite-plugins/niuma-ui-host.js +25 -6
  43. package/package.json +1 -1
@@ -1,23 +1,23 @@
1
1
 
2
- .rs-dialog[data-v-36d0d285] {
2
+ .rs-dialog[data-v-b62d3cc1] {
3
3
  display: contents;
4
4
  }
5
- .rs-dialog__anchor[data-v-36d0d285] {
5
+ .rs-dialog__anchor[data-v-b62d3cc1] {
6
6
  display: none;
7
7
  }
8
- .rs-dialog__backdrop[data-v-36d0d285] {
8
+ .rs-dialog__backdrop[data-v-b62d3cc1] {
9
9
  position: fixed;
10
10
  inset: 0;
11
11
  z-index: var(--rs-z-modal);
12
12
  background: transparent;
13
13
  }
14
- .rs-dialog__overlay[data-v-36d0d285] {
14
+ .rs-dialog__overlay[data-v-b62d3cc1] {
15
15
  background: var(--rs-dialog-overlay-bg);
16
16
  backdrop-filter: blur(var(--rs-dialog-overlay-blur)) saturate(120%);
17
17
  -webkit-backdrop-filter: blur(var(--rs-dialog-overlay-blur)) saturate(120%);
18
- animation: rs-dialog-overlay-in-36d0d285 220ms ease;
18
+ animation: rs-dialog-overlay-in-b62d3cc1 220ms ease;
19
19
  }
20
- .rs-dialog__content[data-v-36d0d285] {
20
+ .rs-dialog__content[data-v-b62d3cc1] {
21
21
  position: fixed;
22
22
  left: 50%;
23
23
  top: calc(
@@ -45,40 +45,40 @@
45
45
  outline: none;
46
46
  color: var(--rs-dialog-title-fg);
47
47
  }
48
- .rs-dialog__content[data-v-36d0d285]:focus-visible {
48
+ .rs-dialog__content[data-v-b62d3cc1]:focus-visible {
49
49
  box-shadow:
50
50
  var(--rs-dialog-shadow),
51
51
  0 0 0 var(--rs-focus-ring-width) var(--rs-focus-ring);
52
52
  }
53
- [data-rs-theme='light'] .rs-dialog__content--form[data-v-36d0d285],
54
- [data-rs-theme='light'] .rs-dialog__content--confirm[data-v-36d0d285] {
53
+ [data-rs-theme='light'] .rs-dialog__content--form[data-v-b62d3cc1],
54
+ [data-rs-theme='light'] .rs-dialog__content--confirm[data-v-b62d3cc1] {
55
55
  background: color-mix(in srgb, var(--rs-dialog-bg) 94%, transparent);
56
56
  backdrop-filter: blur(24px) saturate(180%);
57
57
  -webkit-backdrop-filter: blur(24px) saturate(180%);
58
58
  }
59
- [data-rs-theme='light'] .rs-dialog__content--window[data-v-36d0d285] {
59
+ [data-rs-theme='light'] .rs-dialog__content--window[data-v-b62d3cc1] {
60
60
  background: var(--rs-dialog-bg);
61
61
  }
62
- .rs-dialog__content--form[data-state='open'][data-v-36d0d285],
63
- .rs-dialog__content--confirm[data-state='open'][data-v-36d0d285] {
64
- animation: rs-dialog-pop-in-36d0d285 240ms cubic-bezier(0.32, 0.72, 0, 1);
62
+ .rs-dialog__content--form[data-state='open'][data-v-b62d3cc1],
63
+ .rs-dialog__content--confirm[data-state='open'][data-v-b62d3cc1] {
64
+ animation: rs-dialog-pop-in-b62d3cc1 240ms cubic-bezier(0.32, 0.72, 0, 1);
65
65
  }
66
- .rs-dialog__content--window[data-state='open'][data-v-36d0d285] {
67
- animation: rs-dialog-fade-in-36d0d285 220ms ease;
66
+ .rs-dialog__content--window[data-state='open'][data-v-b62d3cc1] {
67
+ animation: rs-dialog-fade-in-b62d3cc1 220ms ease;
68
68
  }
69
- .rs-dialog__content--tone-info[data-v-36d0d285] {
69
+ .rs-dialog__content--tone-info[data-v-b62d3cc1] {
70
70
  border-color: color-mix(in srgb, var(--rs-info) 46%, var(--rs-dialog-border));
71
71
  }
72
- .rs-dialog__content--tone-success[data-v-36d0d285] {
72
+ .rs-dialog__content--tone-success[data-v-b62d3cc1] {
73
73
  border-color: color-mix(in srgb, var(--rs-success) 46%, var(--rs-dialog-border));
74
74
  }
75
- .rs-dialog__content--tone-warning[data-v-36d0d285] {
75
+ .rs-dialog__content--tone-warning[data-v-b62d3cc1] {
76
76
  border-color: color-mix(in srgb, var(--rs-warning) 52%, var(--rs-dialog-border));
77
77
  }
78
- .rs-dialog__content--tone-danger[data-v-36d0d285] {
78
+ .rs-dialog__content--tone-danger[data-v-b62d3cc1] {
79
79
  border-color: color-mix(in srgb, var(--rs-danger) 52%, var(--rs-dialog-border));
80
80
  }
81
- @keyframes rs-dialog-overlay-in-36d0d285 {
81
+ @keyframes rs-dialog-overlay-in-b62d3cc1 {
82
82
  from {
83
83
  opacity: 0;
84
84
  }
@@ -86,7 +86,7 @@ to {
86
86
  opacity: 1;
87
87
  }
88
88
  }
89
- @keyframes rs-dialog-pop-in-36d0d285 {
89
+ @keyframes rs-dialog-pop-in-b62d3cc1 {
90
90
  from {
91
91
  opacity: 0;
92
92
  transform: translate(-50%, -46%) scale(0.96);
@@ -96,7 +96,7 @@ to {
96
96
  transform: translate(-50%, -50%) scale(1);
97
97
  }
98
98
  }
99
- @keyframes rs-dialog-fade-in-36d0d285 {
99
+ @keyframes rs-dialog-fade-in-b62d3cc1 {
100
100
  from {
101
101
  opacity: 0;
102
102
  }
@@ -104,14 +104,14 @@ to {
104
104
  opacity: 1;
105
105
  }
106
106
  }
107
- .rs-dialog__content--window[data-v-36d0d285] {
107
+ .rs-dialog__content--window[data-v-b62d3cc1] {
108
108
  left: 50%;
109
109
  top: 50%;
110
110
  max-width: none;
111
111
  max-height: none;
112
112
  transform: none;
113
113
  }
114
- .rs-dialog__content--window.rs-dialog__content--bounds-transition[data-v-36d0d285] {
114
+ .rs-dialog__content--window.rs-dialog__content--bounds-transition[data-v-b62d3cc1] {
115
115
  transition:
116
116
  left 220ms cubic-bezier(0.32, 0.72, 0, 1),
117
117
  top 220ms cubic-bezier(0.32, 0.72, 0, 1),
@@ -119,25 +119,25 @@ to {
119
119
  height 220ms cubic-bezier(0.32, 0.72, 0, 1),
120
120
  border-radius 220ms cubic-bezier(0.32, 0.72, 0, 1);
121
121
  }
122
- .rs-dialog__content--sm[data-v-36d0d285] {
122
+ .rs-dialog__content--sm[data-v-b62d3cc1] {
123
123
  max-width: 24rem;
124
124
  }
125
- .rs-dialog__content--md[data-v-36d0d285] {
125
+ .rs-dialog__content--md[data-v-b62d3cc1] {
126
126
  max-width: 32rem;
127
127
  }
128
- .rs-dialog__content--lg[data-v-36d0d285] {
128
+ .rs-dialog__content--lg[data-v-b62d3cc1] {
129
129
  max-width: 42rem;
130
130
  }
131
- .rs-dialog__content--window.rs-dialog__content--sm[data-v-36d0d285],
132
- .rs-dialog__content--window.rs-dialog__content--md[data-v-36d0d285],
133
- .rs-dialog__content--window.rs-dialog__content--lg[data-v-36d0d285],
134
- .rs-dialog__content--window.rs-dialog__content--custom-width[data-v-36d0d285] {
131
+ .rs-dialog__content--window.rs-dialog__content--sm[data-v-b62d3cc1],
132
+ .rs-dialog__content--window.rs-dialog__content--md[data-v-b62d3cc1],
133
+ .rs-dialog__content--window.rs-dialog__content--lg[data-v-b62d3cc1],
134
+ .rs-dialog__content--window.rs-dialog__content--custom-width[data-v-b62d3cc1] {
135
135
  max-width: none;
136
136
  }
137
- .rs-dialog__content--fullscreen[data-v-36d0d285] {
137
+ .rs-dialog__content--fullscreen[data-v-b62d3cc1] {
138
138
  border-radius: var(--rs-radius);
139
139
  }
140
- .rs-dialog__header[data-v-36d0d285] {
140
+ .rs-dialog__header[data-v-b62d3cc1] {
141
141
  display: flex;
142
142
  align-items: center;
143
143
  justify-content: space-between;
@@ -151,7 +151,7 @@ to {
151
151
  background: var(--rs-dialog-header-bg);
152
152
  border-block-end: 1px solid var(--rs-dialog-separator);
153
153
  }
154
- .rs-dialog__heading[data-v-36d0d285] {
154
+ .rs-dialog__heading[data-v-b62d3cc1] {
155
155
  min-width: 0;
156
156
  flex: 1;
157
157
  display: flex;
@@ -159,11 +159,11 @@ to {
159
159
  justify-content: center;
160
160
  gap: var(--rs-space-xs);
161
161
  }
162
- .rs-dialog__content--window.rs-dialog__content--draggable .rs-dialog__header[data-v-36d0d285] {
162
+ .rs-dialog__content--window.rs-dialog__content--draggable .rs-dialog__header[data-v-b62d3cc1] {
163
163
  cursor: move;
164
164
  user-select: none;
165
165
  }
166
- .rs-dialog__title[data-v-36d0d285] {
166
+ .rs-dialog__title[data-v-b62d3cc1] {
167
167
  margin: 0;
168
168
  display: inline-flex;
169
169
  align-items: center;
@@ -175,14 +175,14 @@ to {
175
175
  color: var(--rs-dialog-title-fg);
176
176
  text-align: start;
177
177
  }
178
- .rs-dialog__description[data-v-36d0d285] {
178
+ .rs-dialog__description[data-v-b62d3cc1] {
179
179
  margin: 0;
180
180
  font-size: var(--rs-font-size-sm);
181
181
  color: var(--rs-dialog-description-fg);
182
182
  line-height: var(--rs-line-height-normal);
183
183
  text-align: start;
184
184
  }
185
- .rs-dialog__body[data-v-36d0d285] {
185
+ .rs-dialog__body[data-v-b62d3cc1] {
186
186
  flex: 1;
187
187
  min-height: 0;
188
188
  overflow: auto;
@@ -192,15 +192,15 @@ to {
192
192
  padding-inline: var(--rs-dialog-body-padding-x);
193
193
  background: var(--rs-dialog-body-bg);
194
194
  }
195
- .rs-dialog__content--window .rs-dialog__body[data-v-36d0d285] {
195
+ .rs-dialog__content--window .rs-dialog__body[data-v-b62d3cc1] {
196
196
  display: flex;
197
197
  flex-direction: column;
198
198
  }
199
- .rs-dialog__body-placeholder[data-v-36d0d285] {
199
+ .rs-dialog__body-placeholder[data-v-b62d3cc1] {
200
200
  flex: 1;
201
201
  min-height: 0;
202
202
  }
203
- .rs-dialog__footer[data-v-36d0d285] {
203
+ .rs-dialog__footer[data-v-b62d3cc1] {
204
204
  display: flex;
205
205
  align-items: center;
206
206
  justify-content: flex-end;
@@ -215,77 +215,77 @@ to {
215
215
  background: var(--rs-dialog-footer-bg);
216
216
  border-block-start: 1px solid var(--rs-dialog-footer-border);
217
217
  }
218
- .rs-dialog__actions[data-v-36d0d285] {
218
+ .rs-dialog__actions[data-v-b62d3cc1] {
219
219
  display: inline-flex;
220
220
  align-items: center;
221
221
  gap: var(--rs-space-xs);
222
222
  flex-shrink: 0;
223
223
  }
224
- .rs-dialog__resize-handle[data-v-36d0d285] {
224
+ .rs-dialog__resize-handle[data-v-b62d3cc1] {
225
225
  position: absolute;
226
226
  z-index: 2;
227
227
  }
228
- .rs-dialog__resize-handle--n[data-v-36d0d285],
229
- .rs-dialog__resize-handle--s[data-v-36d0d285] {
228
+ .rs-dialog__resize-handle--n[data-v-b62d3cc1],
229
+ .rs-dialog__resize-handle--s[data-v-b62d3cc1] {
230
230
  inset-inline: 0.5rem;
231
231
  height: 0.5rem;
232
232
  cursor: ns-resize;
233
233
  }
234
- .rs-dialog__resize-handle--n[data-v-36d0d285] {
234
+ .rs-dialog__resize-handle--n[data-v-b62d3cc1] {
235
235
  top: -0.25rem;
236
236
  }
237
- .rs-dialog__resize-handle--s[data-v-36d0d285] {
237
+ .rs-dialog__resize-handle--s[data-v-b62d3cc1] {
238
238
  bottom: -0.25rem;
239
239
  }
240
- .rs-dialog__resize-handle--e[data-v-36d0d285],
241
- .rs-dialog__resize-handle--w[data-v-36d0d285] {
240
+ .rs-dialog__resize-handle--e[data-v-b62d3cc1],
241
+ .rs-dialog__resize-handle--w[data-v-b62d3cc1] {
242
242
  top: 0.5rem;
243
243
  bottom: 0.5rem;
244
244
  width: 0.5rem;
245
245
  cursor: ew-resize;
246
246
  }
247
- .rs-dialog__resize-handle--e[data-v-36d0d285] {
247
+ .rs-dialog__resize-handle--e[data-v-b62d3cc1] {
248
248
  right: -0.25rem;
249
249
  }
250
- .rs-dialog__resize-handle--w[data-v-36d0d285] {
250
+ .rs-dialog__resize-handle--w[data-v-b62d3cc1] {
251
251
  left: -0.25rem;
252
252
  }
253
- .rs-dialog__resize-handle--ne[data-v-36d0d285],
254
- .rs-dialog__resize-handle--nw[data-v-36d0d285],
255
- .rs-dialog__resize-handle--se[data-v-36d0d285],
256
- .rs-dialog__resize-handle--sw[data-v-36d0d285] {
253
+ .rs-dialog__resize-handle--ne[data-v-b62d3cc1],
254
+ .rs-dialog__resize-handle--nw[data-v-b62d3cc1],
255
+ .rs-dialog__resize-handle--se[data-v-b62d3cc1],
256
+ .rs-dialog__resize-handle--sw[data-v-b62d3cc1] {
257
257
  width: 0.75rem;
258
258
  height: 0.75rem;
259
259
  }
260
- .rs-dialog__resize-handle--ne[data-v-36d0d285] {
260
+ .rs-dialog__resize-handle--ne[data-v-b62d3cc1] {
261
261
  top: -0.25rem;
262
262
  right: -0.25rem;
263
263
  cursor: nesw-resize;
264
264
  }
265
- .rs-dialog__resize-handle--nw[data-v-36d0d285] {
265
+ .rs-dialog__resize-handle--nw[data-v-b62d3cc1] {
266
266
  top: -0.25rem;
267
267
  left: -0.25rem;
268
268
  cursor: nwse-resize;
269
269
  }
270
- .rs-dialog__resize-handle--se[data-v-36d0d285] {
270
+ .rs-dialog__resize-handle--se[data-v-b62d3cc1] {
271
271
  right: -0.25rem;
272
272
  bottom: -0.25rem;
273
273
  cursor: nwse-resize;
274
274
  }
275
- .rs-dialog__resize-handle--sw[data-v-36d0d285] {
275
+ .rs-dialog__resize-handle--sw[data-v-b62d3cc1] {
276
276
  left: -0.25rem;
277
277
  bottom: -0.25rem;
278
278
  cursor: nesw-resize;
279
279
  }
280
280
  @media (prefers-reduced-motion: reduce) {
281
- [data-rs-theme='light'] .rs-dialog__content--form[data-v-36d0d285],
282
- [data-rs-theme='light'] .rs-dialog__content--confirm[data-v-36d0d285],
283
- .rs-dialog__overlay[data-v-36d0d285] {
281
+ [data-rs-theme='light'] .rs-dialog__content--form[data-v-b62d3cc1],
282
+ [data-rs-theme='light'] .rs-dialog__content--confirm[data-v-b62d3cc1],
283
+ .rs-dialog__overlay[data-v-b62d3cc1] {
284
284
  backdrop-filter: none;
285
285
  -webkit-backdrop-filter: none;
286
286
  background: var(--rs-dialog-bg);
287
287
  }
288
- .rs-dialog__overlay[data-v-36d0d285] {
288
+ .rs-dialog__overlay[data-v-b62d3cc1] {
289
289
  background: var(--rs-dialog-overlay-bg);
290
290
  }
291
291
  }
@@ -3,7 +3,7 @@ import RsButton_default from "../../button/src/RsButton.js";
3
3
  import { dialogViewportSize } from "./dialog-viewport.js";
4
4
  import { acquireDialogScrollLock, claimDialogInert, dialogLayerTick, dialogTargetOwnsTab, isRsDialogWidthPreset, isTopDialogLayer, pushDialogLayer, releaseDialogInert, removeDialogLayer, resolveDialogOverlayStyle, resolveDialogTabTarget, resolveRsDialogCssWidth, resolveRsDialogWidthPx, runRsDialogBeforeClose } from "./dialog-utils.js";
5
5
  import { useRsDialogWindow } from "./dialog-window.js";
6
- import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, toDisplayString, toRef, unref, useAttrs, useId, useModel, useSlots, watch, withCtx, withModifiers } from "vue";
6
+ import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onActivated, onBeforeUnmount, onDeactivated, onMounted, openBlock, ref, renderList, renderSlot, toDisplayString, toRef, unref, useAttrs, useId, useModel, useSlots, watch, withCtx, withModifiers } from "vue";
7
7
  //#region src/components/dialog/src/RsDialog.vue?vue&type=script&setup=true&lang.ts
8
8
  var _hoisted_1 = [
9
9
  "data-rs-theme",
@@ -348,8 +348,16 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
348
348
  const active = typeof document === "undefined" ? null : document.activeElement;
349
349
  if (!root || active === root || !(active instanceof Node) || !root.contains(active)) queueFocus();
350
350
  });
351
+ /** KeepAlive 切走时为 false。必须在 open 的 immediate watch 之前声明。 */
352
+ const pageActive = ref(true);
353
+ let presentedSuspended = false;
351
354
  watch(open, (isOpen, wasOpen) => {
352
355
  if (isOpen) {
356
+ if (!pageActive.value) {
357
+ presentedSuspended = true;
358
+ if (wasOpen === false) emit("openChange", true);
359
+ return;
360
+ }
353
361
  if (wasOpen !== true) {
354
362
  rememberTrigger();
355
363
  syncChrome();
@@ -364,6 +372,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
364
372
  syncInert();
365
373
  return;
366
374
  }
375
+ presentedSuspended = false;
367
376
  clearAfterOpenTimer();
368
377
  removeDialogLayer(layerId);
369
378
  unbindKey();
@@ -383,7 +392,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
383
392
  props.closeOnOverlayClick,
384
393
  dialogLayerTick.value
385
394
  ], () => {
386
- if (!open.value || disposed) return;
395
+ if (!open.value || !pageActive.value || disposed) return;
387
396
  syncScrollLock();
388
397
  syncOutside();
389
398
  syncInert();
@@ -495,7 +504,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
495
504
  emit("confirm");
496
505
  if (props.autoCloseOnConfirm) await requestClose("confirm");
497
506
  }
498
- const { isFullscreen, boundsTransitionEnabled, dialogStyle, resizeHandles, setPanelEl, toggleFullscreen, onHeaderPointerDown, onResizePointerDown } = useRsDialogWindow({
507
+ const { isFullscreen, boundsTransitionEnabled, dialogStyle, resizeHandles, setPanelEl, stopInteractions, toggleFullscreen, onHeaderPointerDown, onResizePointerDown } = useRsDialogWindow({
499
508
  open,
500
509
  widthPreset,
501
510
  initialWidth: initialWidthPx,
@@ -506,11 +515,47 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
506
515
  boundsTransition: toRef(props, "boundsTransition")
507
516
  });
508
517
  /**
509
- * 全屏时跳出业务挂载点,挂到 body,
510
- * 还原后仍回到 props.teleportTo,以保留页签内浮层的生命周期绑定。
518
+ * 全屏或可拖动窗口跳出业务挂载点,挂到 body。
519
+ * 挂载点常有 overflow: hidden,拖出后背景会被裁成透明。
520
+ * 还原全屏后,不可拖的对话框仍回到 props.teleportTo。
521
+ * KeepAlive 切走页签时卸掉 body 上的浮层,并放开滚动锁、inert 和 document 监听。
511
522
  */
523
+ function suspendPresentedDialog() {
524
+ if (presentedSuspended || !open.value || disposed) return;
525
+ presentedSuspended = true;
526
+ stopInteractions();
527
+ clearAfterOpenTimer();
528
+ removeDialogLayer(layerId);
529
+ unbindKey();
530
+ unbindOutside();
531
+ releaseScroll?.();
532
+ releaseScroll = null;
533
+ inertGeneration += 1;
534
+ releaseDialogInert(layerId);
535
+ }
536
+ function resumePresentedDialog() {
537
+ if (!presentedSuspended || disposed) return;
538
+ presentedSuspended = false;
539
+ if (!open.value || !pageActive.value) return;
540
+ syncChrome();
541
+ pushDialogLayer(layerId);
542
+ bindKey();
543
+ syncScrollLock();
544
+ syncOutside();
545
+ syncInert();
546
+ queueFocus();
547
+ }
548
+ onActivated(() => {
549
+ pageActive.value = true;
550
+ resumePresentedDialog();
551
+ });
552
+ onDeactivated(() => {
553
+ pageActive.value = false;
554
+ suspendPresentedDialog();
555
+ });
512
556
  const resolvedTeleportTo = computed(() => {
513
- if (isFullscreen.value && props.teleportTo !== false) return void 0;
557
+ if (props.teleportTo === false) return false;
558
+ if (isFullscreen.value || enableDraggable.value) return void 0;
514
559
  return props.teleportTo;
515
560
  });
516
561
  const teleportDisabled = computed(() => resolvedTeleportTo.value === false);
@@ -520,7 +565,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
520
565
  return target;
521
566
  });
522
567
  watch(resolvedTeleportTo, () => {
523
- if (!open.value || disposed) return;
568
+ if (!open.value || !pageActive.value || disposed) return;
524
569
  syncInert();
525
570
  });
526
571
  watch(contentRef, (el) => {
@@ -540,12 +585,12 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
540
585
  hidden: "",
541
586
  class: "rs-dialog__anchor",
542
587
  "aria-hidden": "true"
543
- }, null, 512), (openBlock(), createBlock(Teleport, {
588
+ }, null, 512), open.value && pageActive.value ? (openBlock(), createBlock(Teleport, {
589
+ key: 0,
544
590
  defer: "",
545
591
  to: teleportTarget.value,
546
592
  disabled: teleportDisabled.value
547
- }, [open.value ? (openBlock(), createElementBlock("div", {
548
- key: 0,
593
+ }, [createElementVNode("div", {
549
594
  ref_key: "shellRef",
550
595
  ref: shellRef,
551
596
  class: "rs-dialog",
@@ -639,7 +684,7 @@ var RsDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
639
684
  default: withCtx(() => [createTextVNode(toDisplayString(__props.confirmText ?? unref(t)("common.confirm")), 1)]),
640
685
  _: 1
641
686
  }, 8, ["variant", "loading"])) : createCommentVNode("", true)], 64)) : createCommentVNode("", true)], true)])) : createCommentVNode("", true)
642
- ], 16, _hoisted_2)], 8, _hoisted_1)) : createCommentVNode("", true)], 8, ["to", "disabled"]))], 64);
687
+ ], 16, _hoisted_2)], 8, _hoisted_1)], 8, ["to", "disabled"])) : createCommentVNode("", true)], 64);
643
688
  };
644
689
  }
645
690
  });
@@ -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-36d0d285"]]);
6
+ var RsDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDialog_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b62d3cc1"]]);
7
7
  //#endregion
8
8
  export { RsDialog_default as default };
@@ -41,6 +41,7 @@ export declare function useRsDialogWindow(options: {
41
41
  }>;
42
42
  resizeHandles: RsDialogResizeHandle[];
43
43
  setPanelEl: (el: HTMLElement | null) => void;
44
+ stopInteractions: () => void;
44
45
  toggleFullscreen: () => void;
45
46
  onHeaderPointerDown: (event: PointerEvent) => void;
46
47
  onResizePointerDown: (handle: RsDialogResizeHandle, event: PointerEvent) => void;
@@ -288,6 +288,7 @@ function useRsDialogWindow(options) {
288
288
  dialogStyle,
289
289
  resizeHandles,
290
290
  setPanelEl,
291
+ stopInteractions,
291
292
  toggleFullscreen,
292
293
  onHeaderPointerDown,
293
294
  onResizePointerDown
@@ -76,17 +76,17 @@ type __VLS_Slots = {} & {
76
76
  trigger?: (props: typeof __VLS_11) => any;
77
77
  };
78
78
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsDynamicTagsExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
79
+ clear: () => any;
79
80
  blur: (event: FocusEvent) => any;
80
81
  focus: (event: FocusEvent) => any;
81
- clear: () => any;
82
82
  "update:modelValue": (value: string[]) => any;
83
83
  create: (value: string) => any;
84
84
  remove: (value: string, index: number) => any;
85
85
  reject: (reason: RsDynamicTagsRejectReason, value: string) => any;
86
86
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
87
+ onClear?: (() => any) | undefined;
87
88
  onBlur?: ((event: FocusEvent) => any) | undefined;
88
89
  onFocus?: ((event: FocusEvent) => any) | undefined;
89
- onClear?: (() => any) | undefined;
90
90
  "onUpdate:modelValue"?: ((value: string[]) => any) | undefined;
91
91
  onCreate?: ((value: string) => any) | undefined;
92
92
  onRemove?: ((value: string, index: number) => any) | undefined;
@@ -1,19 +1,19 @@
1
1
 
2
- .rs-icon[data-v-260b0681] {
2
+ .rs-icon[data-v-8513cc7f] {
3
3
  display: inline-block;
4
4
  flex-shrink: 0;
5
5
  vertical-align: middle;
6
6
  }
7
- .rs-icon--spin[data-v-260b0681] {
8
- animation: rs-icon-spin-260b0681 0.8s linear infinite;
7
+ .rs-icon--spin[data-v-8513cc7f] {
8
+ animation: rs-icon-spin-8513cc7f 0.8s linear infinite;
9
9
  }
10
- @keyframes rs-icon-spin-260b0681 {
10
+ @keyframes rs-icon-spin-8513cc7f {
11
11
  to {
12
12
  transform: rotate(360deg);
13
13
  }
14
14
  }
15
15
  @media (prefers-reduced-motion: reduce) {
16
- .rs-icon--spin[data-v-260b0681] {
16
+ .rs-icon--spin[data-v-8513cc7f] {
17
17
  animation: none;
18
18
  }
19
19
  }
@@ -1,7 +1,7 @@
1
1
  import type { RsComponentSize } from '../../../theme/types';
2
2
  import { type RsIconFlip } from './icon-utils';
3
3
  type __VLS_Props = {
4
- /** Lucide kebab-case 名称(如 `house`、`trash-2`),或内置品牌 mark */
4
+ /** Lucide kebab-case(如 `house`)、内置品牌 mark,或 `registerRsIcon` 登记的名字 */
5
5
  name: string;
6
6
  /** 数字 px、CSS 长度,或与控件同一套 ssm / sm / md / lg */
7
7
  size?: number | string | RsComponentSize;
@@ -1,5 +1,5 @@
1
- import { resolveLucideIcon } from "../../../icons/lucide.js";
2
1
  import { isRsBrandIconName } from "../../../icons/brand.js";
2
+ import { resolveLucideIcon } from "../../../icons/lucide.js";
3
3
  import { buildRsIconStyle, resolveRsIconPixelSize } from "./icon-utils.js";
4
4
  import { computed, createBlock, createCommentVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, resolveDynamicComponent } from "vue";
5
5
  //#region src/components/icon/src/RsIcon.vue?vue&type=script&setup=true&lang.ts
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsIcon_vue_vue_type_script_setup_true_lang_default from "./RsIcon.impl.js";
4
4
 
5
5
  //#region src/components/icon/src/RsIcon.vue
6
- var RsIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsIcon_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-260b0681"]]);
6
+ var RsIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsIcon_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-8513cc7f"]]);
7
7
  //#endregion
8
8
  export { RsIcon_default as default };
@@ -106,9 +106,9 @@ type __VLS_Slots = {} & {
106
106
  error?: (props: typeof __VLS_24) => any;
107
107
  };
108
108
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsInputExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
109
+ clear: () => any;
109
110
  blur: (event: FocusEvent) => any;
110
111
  focus: (event: FocusEvent) => any;
111
- clear: () => any;
112
112
  "update:modelValue": (value: string) => any;
113
113
  validate: (payload: {
114
114
  valid: boolean;
@@ -117,9 +117,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsInp
117
117
  pressEnter: (event: KeyboardEvent) => any;
118
118
  addonAfterClick: (event: MouseEvent) => any;
119
119
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
120
+ onClear?: (() => any) | undefined;
120
121
  onBlur?: ((event: FocusEvent) => any) | undefined;
121
122
  onFocus?: ((event: FocusEvent) => any) | undefined;
122
- onClear?: (() => any) | undefined;
123
123
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
124
124
  onValidate?: ((payload: {
125
125
  valid: boolean;
@@ -50,16 +50,16 @@ type __VLS_Slots = {} & {
50
50
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsMentionsExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
51
51
  search: (query: string) => any;
52
52
  select: (value: string) => any;
53
+ clear: () => any;
53
54
  blur: (event: FocusEvent) => any;
54
55
  focus: (event: FocusEvent) => any;
55
- clear: () => any;
56
56
  "update:modelValue": (value: string) => any;
57
57
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
58
58
  onSearch?: ((query: string) => any) | undefined;
59
59
  onSelect?: ((value: string) => any) | undefined;
60
+ onClear?: (() => any) | undefined;
60
61
  onBlur?: ((event: FocusEvent) => any) | undefined;
61
62
  onFocus?: ((event: FocusEvent) => any) | undefined;
62
- onClear?: (() => any) | undefined;
63
63
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
64
64
  }>, {
65
65
  split: string;
@@ -102,9 +102,9 @@ declare const __VLS_export: <Value extends string | number = string, Multiple ex
102
102
  }) & {
103
103
  onSearch?: ((query: string) => any) | undefined;
104
104
  onSelect?: ((value: RsSelectValue, option?: RsSelectOption | undefined) => any) | undefined;
105
+ onClear?: (() => any) | undefined;
105
106
  onBlur?: ((event: FocusEvent) => any) | undefined;
106
107
  onFocus?: ((event: FocusEvent) => any) | undefined;
107
- onClear?: (() => any) | undefined;
108
108
  "onUpdate:modelValue"?: ((value: RsSelectModelValue) => any) | undefined;
109
109
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
110
110
  onDeselect?: ((value: RsSelectValue, option?: RsSelectOption | undefined) => any) | undefined;
@@ -172,7 +172,7 @@ declare const __VLS_export: <Value extends string | number = string, Multiple ex
172
172
  } & {
173
173
  footer?: (props: {}) => any;
174
174
  };
175
- emit: (((evt: "search", query: string) => void) & ((evt: "select", value: RsSelectValue, option?: RsSelectOption | undefined) => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "focus", event: FocusEvent) => void) & ((evt: "clear") => void) & ((evt: "deselect", value: RsSelectValue, option?: RsSelectOption | undefined) => void) & ((evt: "dropdownVisibleChange", open: boolean) => void) & ((evt: "popupScroll", event: Event) => void)) & (((event: "update:modelValue", value: RsSelectModelValue) => void) & ((event: "update:open", value: boolean) => void) & ((event: "update:searchValue", value: string) => void));
175
+ emit: (((evt: "search", query: string) => void) & ((evt: "select", value: RsSelectValue, option?: RsSelectOption | undefined) => void) & ((evt: "clear") => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "focus", event: FocusEvent) => void) & ((evt: "deselect", value: RsSelectValue, option?: RsSelectOption | undefined) => void) & ((evt: "dropdownVisibleChange", open: boolean) => void) & ((evt: "popupScroll", event: Event) => void)) & (((event: "update:modelValue", value: RsSelectModelValue) => void) & ((event: "update:open", value: boolean) => void) & ((event: "update:searchValue", value: string) => void));
176
176
  }>) => import("vue").VNode & {
177
177
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
178
178
  };
@@ -35,7 +35,7 @@ type __VLS_Props = {
35
35
  renamable?: boolean;
36
36
  /** 按住标签拖动排序(整项可拖) */
37
37
  draggable?: boolean;
38
- /** 可拖时是否画左侧六点 grip。false 仍可整项拖,只是不显示图标。 */
38
+ /** 可拖时是否画左侧六点 grip。默认不画,整项仍可拖。 */
39
39
  showDragHandle?: boolean;
40
40
  /** 标签过多:scroll 横向/纵向滚动 · dropdown 折叠到「更多」 */
41
41
  overflow?: RsTabsOverflow | false;
@@ -77,8 +77,8 @@ type __VLS_Slots = {} & {
77
77
  };
78
78
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsTabsExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
79
79
  change: (value: string) => any;
80
- close: (value: string) => any;
81
80
  add: () => any;
81
+ close: (value: string) => any;
82
82
  "update:modelValue": (value: string) => any;
83
83
  contextMenu: (action: RsTabsCloseAction, value: string) => any;
84
84
  closeBatch: (values: string[], action: RsTabsCloseAction, anchor?: string | undefined) => any;
@@ -86,8 +86,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsTab
86
86
  reorder: (dragValue: string, dropValue: string) => any;
87
87
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
88
88
  onChange?: ((value: string) => any) | undefined;
89
- onClose?: ((value: string) => any) | undefined;
90
89
  onAdd?: (() => any) | undefined;
90
+ onClose?: ((value: string) => any) | undefined;
91
91
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
92
92
  onContextMenu?: ((action: RsTabsCloseAction, value: string) => any) | undefined;
93
93
  onCloseBatch?: ((values: string[], action: RsTabsCloseAction, anchor?: string | undefined) => any) | undefined;
@@ -106,7 +106,7 @@ var RsTabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
106
106
  },
107
107
  showDragHandle: {
108
108
  type: Boolean,
109
- default: true
109
+ default: false
110
110
  },
111
111
  overflow: {
112
112
  type: [String, Boolean],