vue-devui 1.0.0-rc.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +163 -149
  2. package/alert/index.es.js +12 -7
  3. package/alert/index.umd.js +1 -1
  4. package/alert/style.css +1 -1
  5. package/auto-complete/index.es.js +8019 -254
  6. package/auto-complete/index.umd.js +29 -3
  7. package/auto-complete/style.css +1 -1
  8. package/badge/index.es.js +8 -2
  9. package/badge/index.umd.js +1 -1
  10. package/badge/style.css +1 -1
  11. package/button/index.es.js +104 -40
  12. package/button/index.umd.js +15 -15
  13. package/button/style.css +1 -1
  14. package/card/index.es.js +5 -1
  15. package/card/index.umd.js +1 -1
  16. package/card/style.css +1 -1
  17. package/checkbox/index.es.js +7772 -81
  18. package/checkbox/index.umd.js +27 -1
  19. package/checkbox/style.css +1 -1
  20. package/{date-picker → collapse}/index.d.ts +0 -0
  21. package/collapse/index.es.js +213 -0
  22. package/collapse/index.umd.js +1 -0
  23. package/{date-picker → collapse}/package.json +1 -1
  24. package/collapse/style.css +1 -0
  25. package/countdown/index.es.js +56 -13
  26. package/countdown/index.umd.js +1 -1
  27. package/date-picker-pro/index.d.ts +7 -0
  28. package/date-picker-pro/index.es.js +12020 -0
  29. package/date-picker-pro/index.umd.js +27 -0
  30. package/date-picker-pro/package.json +7 -0
  31. package/date-picker-pro/style.css +1 -0
  32. package/drawer/index.es.js +1 -1
  33. package/drawer/index.umd.js +1 -1
  34. package/drawer/style.css +1 -1
  35. package/dropdown/index.es.js +77 -121
  36. package/dropdown/index.umd.js +1 -1
  37. package/dropdown/style.css +1 -1
  38. package/editable-select/index.es.js +324 -104
  39. package/editable-select/index.umd.js +1 -1
  40. package/editable-select/style.css +1 -1
  41. package/form/index.es.js +91 -118
  42. package/form/index.umd.js +14 -14
  43. package/form/style.css +1 -1
  44. package/icon/index.es.js +106 -41
  45. package/icon/index.umd.js +1 -1
  46. package/icon/style.css +1 -1
  47. package/image-preview/style.css +1 -1
  48. package/input/index.es.js +8088 -169
  49. package/input/index.umd.js +27 -1
  50. package/input/style.css +1 -1
  51. package/input-number/index.es.js +8 -9
  52. package/input-number/index.umd.js +1 -1
  53. package/input-number/style.css +1 -1
  54. package/layout/index.es.js +1 -1
  55. package/layout/index.umd.js +1 -1
  56. package/loading/style.css +1 -1
  57. package/mention/index.d.ts +7 -0
  58. package/mention/index.es.js +8310 -0
  59. package/mention/index.umd.js +36 -0
  60. package/mention/package.json +7 -0
  61. package/mention/style.css +1 -0
  62. package/menu/index.d.ts +7 -0
  63. package/menu/index.es.js +934 -0
  64. package/menu/index.umd.js +1 -0
  65. package/menu/package.json +7 -0
  66. package/menu/style.css +1 -0
  67. package/message/index.d.ts +7 -0
  68. package/message/index.es.js +538 -0
  69. package/message/index.umd.js +1 -0
  70. package/message/package.json +7 -0
  71. package/message/style.css +1 -0
  72. package/modal/index.es.js +275 -185
  73. package/modal/index.umd.js +1 -1
  74. package/modal/style.css +1 -1
  75. package/notification/index.es.js +143 -72
  76. package/notification/index.umd.js +1 -1
  77. package/notification/style.css +1 -1
  78. package/nuxt/components/Collapse.js +3 -0
  79. package/nuxt/components/CollapseItem.js +3 -0
  80. package/nuxt/components/DRangeDatePickerPro.js +3 -0
  81. package/nuxt/components/DatePickerPro.js +3 -0
  82. package/nuxt/components/IconGroup.js +3 -0
  83. package/nuxt/components/Mention.js +3 -0
  84. package/nuxt/components/Menu.js +3 -0
  85. package/nuxt/components/MenuItem.js +3 -0
  86. package/nuxt/components/Message.js +3 -0
  87. package/nuxt/components/OptionGroup.js +3 -0
  88. package/nuxt/components/RadioButton.js +3 -0
  89. package/nuxt/components/Step.js +3 -0
  90. package/nuxt/components/Steps.js +3 -0
  91. package/nuxt/components/SubMenu.js +3 -0
  92. package/nuxt/components/TABLE_TOKEN.js +3 -0
  93. package/nuxt/components/TimePicker.js +3 -0
  94. package/nuxt/components/TimeSelect.js +3 -0
  95. package/nuxt/components/animationInjectionKey.js +3 -0
  96. package/nuxt/components/collapseItemProps.js +3 -0
  97. package/nuxt/components/collapseProps.js +3 -0
  98. package/nuxt/components/datePickerProCommonProps.js +3 -0
  99. package/nuxt/components/datePickerProPanelProps.js +3 -0
  100. package/nuxt/components/datePickerProProps.js +3 -0
  101. package/nuxt/components/mentionProps.js +3 -0
  102. package/nuxt/components/messageProps.js +3 -0
  103. package/nuxt/components/roundInjectionKey.js +3 -0
  104. package/nuxt/components/skeletonItemProps.js +3 -0
  105. package/nuxt/components/stepProps.js +3 -0
  106. package/nuxt/components/stepsProps.js +3 -0
  107. package/nuxt/components/tableProps.js +3 -0
  108. package/nuxt/components/timerPickerPanelProps.js +3 -0
  109. package/nuxt/components/treeNodeProps.js +3 -0
  110. package/overlay/index.es.js +76 -139
  111. package/overlay/index.umd.js +1 -1
  112. package/overlay/style.css +1 -1
  113. package/package.json +6 -3
  114. package/pagination/index.es.js +175 -7
  115. package/pagination/index.umd.js +1 -1
  116. package/pagination/style.css +1 -1
  117. package/panel/style.css +1 -1
  118. package/popover/index.es.js +101 -162
  119. package/popover/index.umd.js +17 -17
  120. package/popover/style.css +1 -1
  121. package/progress/style.css +1 -1
  122. package/radio/index.es.js +7854 -58
  123. package/radio/index.umd.js +27 -1
  124. package/radio/style.css +1 -1
  125. package/rate/style.css +1 -1
  126. package/result/index.es.js +92 -41
  127. package/result/index.umd.js +1 -1
  128. package/result/style.css +1 -1
  129. package/search/index.es.js +3729 -1206
  130. package/search/index.umd.js +18 -18
  131. package/search/style.css +1 -1
  132. package/select/index.es.js +4426 -2501
  133. package/select/index.umd.js +17 -17
  134. package/select/style.css +1 -1
  135. package/skeleton/index.es.js +87 -261
  136. package/skeleton/index.umd.js +1 -1
  137. package/skeleton/style.css +1 -1
  138. package/slider/index.es.js +116 -143
  139. package/slider/index.umd.js +1 -1
  140. package/slider/style.css +1 -1
  141. package/splitter/index.es.js +256 -147
  142. package/splitter/index.umd.js +16 -16
  143. package/splitter/style.css +1 -1
  144. package/statistic/index.es.js +34 -16
  145. package/statistic/index.umd.js +1 -1
  146. package/statistic/style.css +1 -1
  147. package/status/style.css +1 -1
  148. package/steps/index.d.ts +7 -0
  149. package/steps/index.es.js +386 -0
  150. package/steps/index.umd.js +1 -0
  151. package/steps/package.json +7 -0
  152. package/steps/style.css +1 -0
  153. package/style.css +1 -1
  154. package/switch/index.es.js +7779 -60
  155. package/switch/index.umd.js +27 -1
  156. package/switch/style.css +1 -1
  157. package/table/index.es.js +4092 -1464
  158. package/table/index.umd.js +17 -17
  159. package/table/style.css +1 -1
  160. package/tabs/index.es.js +224 -77
  161. package/tabs/index.umd.js +1 -1
  162. package/tabs/style.css +1 -1
  163. package/tag/index.es.js +5 -1
  164. package/tag/index.umd.js +1 -1
  165. package/tag/style.css +1 -1
  166. package/textarea/index.es.js +3357 -1064
  167. package/textarea/index.umd.js +19 -19
  168. package/textarea/style.css +1 -1
  169. package/time-picker/index.d.ts +7 -0
  170. package/time-picker/index.es.js +9549 -0
  171. package/time-picker/index.umd.js +27 -0
  172. package/time-picker/package.json +7 -0
  173. package/time-picker/style.css +1 -0
  174. package/time-select/index.d.ts +7 -0
  175. package/time-select/index.es.js +9585 -0
  176. package/time-select/index.umd.js +27 -0
  177. package/time-select/package.json +7 -0
  178. package/time-select/style.css +1 -0
  179. package/timeline/index.es.js +92 -41
  180. package/timeline/index.umd.js +1 -1
  181. package/timeline/style.css +1 -1
  182. package/tooltip/index.es.js +100 -163
  183. package/tooltip/index.umd.js +16 -16
  184. package/tooltip/style.css +1 -1
  185. package/tree/index.es.js +11036 -608
  186. package/tree/index.umd.js +27 -1
  187. package/tree/style.css +1 -1
  188. package/upload/index.es.js +389 -105
  189. package/upload/index.umd.js +1 -1
  190. package/upload/style.css +1 -1
  191. package/vue-devui.es.js +17291 -9726
  192. package/vue-devui.umd.js +24 -23
  193. package/date-picker/index.es.js +0 -1298
  194. package/date-picker/index.umd.js +0 -1
  195. package/date-picker/style.css +0 -1
  196. package/nuxt/components/DatePicker.js +0 -3
  197. package/nuxt/components/StickSlider.js +0 -3
  198. package/nuxt/components/formControlProps.js +0 -3
  199. package/nuxt/components/overlayEmits.js +0 -3
  200. package/nuxt/components/overlayProps.js +0 -3
package/modal/index.es.js CHANGED
@@ -33,7 +33,7 @@ var __publicField = (obj, key, value) => {
33
33
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
34
34
  return value;
35
35
  };
36
- import { defineComponent, toRefs, computed, createVNode, resolveDynamicComponent, mergeProps, Teleport, Transition, renderSlot, isVNode, onMounted, watch, onUnmounted, ref, unref, nextTick, h, render } from "vue";
36
+ import { defineComponent, toRefs, computed, createVNode, resolveDynamicComponent, mergeProps, watch, onUnmounted, Transition, ref, unref, nextTick, onMounted, Teleport, h, render } from "vue";
37
37
  import { offset, autoPlacement, arrow, shift, computePosition } from "@floating-ui/dom";
38
38
  const modalProps = {
39
39
  modelValue: {
@@ -54,11 +54,24 @@ const modalProps = {
54
54
  },
55
55
  beforeClose: {
56
56
  type: Function
57
+ },
58
+ escapable: {
59
+ type: Boolean,
60
+ default: true
61
+ },
62
+ showClose: {
63
+ type: Boolean,
64
+ default: true
65
+ },
66
+ showOverlay: {
67
+ type: Boolean,
68
+ default: true
69
+ },
70
+ appendToBody: {
71
+ type: Boolean,
72
+ default: true
57
73
  }
58
74
  };
59
- function isUrl(value) {
60
- return /^((http|https):)?\/\//.test(value);
61
- }
62
75
  const DEFAULT_PREFIX = "icon";
63
76
  const iconProps = {
64
77
  name: {
@@ -81,6 +94,17 @@ const iconProps = {
81
94
  classPrefix: {
82
95
  type: String,
83
96
  default: DEFAULT_PREFIX
97
+ },
98
+ operable: {
99
+ type: Boolean,
100
+ default: false
101
+ },
102
+ disabled: {
103
+ type: Boolean,
104
+ default: false
105
+ },
106
+ rotate: {
107
+ type: [Number, String]
84
108
  }
85
109
  };
86
110
  const svgIconProps = {
@@ -151,178 +175,190 @@ var svgIcon = defineComponent({
151
175
  };
152
176
  }
153
177
  });
178
+ function isUrl(value) {
179
+ return /^((http|https):)?\/\//.test(value);
180
+ }
181
+ function useIconDom(props, ctx) {
182
+ const {
183
+ component,
184
+ name,
185
+ size,
186
+ color,
187
+ classPrefix,
188
+ rotate
189
+ } = toRefs(props);
190
+ const ns = useNamespace("icon");
191
+ const iconSize = computed(() => {
192
+ return typeof size.value === "number" ? `${size.value}px` : size.value;
193
+ });
194
+ const IconComponent = component.value ? resolveDynamicComponent(component.value) : resolveDynamicComponent(svgIcon);
195
+ const imgIconDom = () => {
196
+ return createVNode("img", mergeProps({
197
+ "src": name.value,
198
+ "alt": name.value.split("/")[name.value.split("/").length - 1],
199
+ "class": [(rotate == null ? void 0 : rotate.value) === "infinite" && ns.m("spin")],
200
+ "style": {
201
+ width: iconSize.value || "",
202
+ transform: `rotate(${rotate == null ? void 0 : rotate.value}deg)`,
203
+ verticalAlign: "middle"
204
+ }
205
+ }, ctx.attrs), null);
206
+ };
207
+ const svgIconDom = () => {
208
+ return createVNode(IconComponent, mergeProps({
209
+ "name": name.value,
210
+ "color": color.value,
211
+ "size": iconSize.value,
212
+ "class": [(rotate == null ? void 0 : rotate.value) === "infinite" && ns.m("spin")],
213
+ "style": {
214
+ transform: `rotate(${rotate == null ? void 0 : rotate.value}deg)`
215
+ }
216
+ }, ctx.attrs), null);
217
+ };
218
+ const fontIconDom = () => {
219
+ const fontIconClass = /^icon-/.test(name.value) ? name.value : `${classPrefix.value}-${name.value}`;
220
+ return createVNode("i", mergeProps({
221
+ "class": [classPrefix.value, fontIconClass, (rotate == null ? void 0 : rotate.value) === "infinite" && ns.m("spin")],
222
+ "style": {
223
+ fontSize: iconSize.value,
224
+ color: color.value,
225
+ transform: `rotate(${rotate == null ? void 0 : rotate.value}deg)`
226
+ }
227
+ }, ctx.attrs), null);
228
+ };
229
+ const iconDom = () => {
230
+ return component.value ? svgIconDom() : isUrl(name.value) ? imgIconDom() : fontIconDom();
231
+ };
232
+ return {
233
+ iconDom
234
+ };
235
+ }
154
236
  var Icon = defineComponent({
155
237
  name: "DIcon",
156
238
  props: iconProps,
157
- setup(props, {
158
- attrs
159
- }) {
239
+ emits: ["click"],
240
+ setup(props, ctx) {
160
241
  const {
161
- component,
162
- name,
163
- size,
164
- color,
165
- classPrefix
242
+ disabled,
243
+ operable
166
244
  } = toRefs(props);
167
- const IconComponent = component.value ? resolveDynamicComponent(component.value) : resolveDynamicComponent(svgIcon);
168
- const iconSize = computed(() => {
169
- return typeof size.value === "number" ? `${size.value}px` : size.value;
170
- });
171
- const svgIconDom = () => {
172
- return createVNode(IconComponent, mergeProps({
173
- "name": name.value,
174
- "color": color.value,
175
- "size": iconSize.value
176
- }, attrs), null);
177
- };
178
- const imgIconDom = () => {
179
- return createVNode("img", mergeProps({
180
- "src": name.value,
181
- "alt": name.value.split("/")[name.value.split("/").length - 1],
182
- "style": {
183
- width: iconSize.value || ""
184
- }
185
- }, attrs), null);
186
- };
187
- const fontIconDom = () => {
188
- const fontIconClass = /^icon-/.test(name.value) ? name.value : `${classPrefix.value}-${name.value}`;
189
- return createVNode("i", mergeProps({
190
- "class": [classPrefix.value, fontIconClass],
191
- "style": {
192
- fontSize: iconSize.value,
193
- color: color.value
194
- }
195
- }, attrs), null);
245
+ const {
246
+ iconDom
247
+ } = useIconDom(props, ctx);
248
+ const ns = useNamespace("icon");
249
+ const wrapClassed = computed(() => ({
250
+ [ns.e("container")]: true,
251
+ [ns.m("disabled")]: disabled.value,
252
+ [ns.m("operable")]: operable.value
253
+ }));
254
+ const onClick = (e) => {
255
+ if (disabled.value) {
256
+ return;
257
+ }
258
+ ctx.emit("click", e);
196
259
  };
197
260
  return () => {
198
- return component.value ? svgIconDom() : isUrl(name.value) ? imgIconDom() : fontIconDom();
261
+ var _a, _b, _c, _d;
262
+ return createVNode("div", {
263
+ "class": wrapClassed.value,
264
+ "onClick": onClick
265
+ }, [(_b = (_a = ctx.slots).prefix) == null ? void 0 : _b.call(_a), iconDom(), (_d = (_c = ctx.slots).suffix) == null ? void 0 : _d.call(_c)]);
199
266
  };
200
267
  }
201
268
  });
202
- var baseOverlay = "";
203
- function _isSlot(s) {
204
- return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
205
- }
206
- const CommonOverlay = defineComponent({
207
- setup(props, ctx) {
208
- const ns = useNamespace("overlay");
269
+ var iconGroup = "";
270
+ defineComponent({
271
+ name: "DIconGroup",
272
+ setup(_, ctx) {
273
+ const ns = useNamespace("icon-group");
209
274
  return () => {
210
- let _slot;
211
- return createVNode(Teleport, {
212
- "to": "#d-overlay-anchor"
213
- }, {
214
- default: () => [createVNode(Transition, {
215
- "name": ns.e("fade")
216
- }, _isSlot(_slot = renderSlot(ctx.slots, "default")) ? _slot : {
217
- default: () => [_slot]
218
- })]
219
- });
275
+ var _a, _b;
276
+ return createVNode("div", {
277
+ "class": ns.b()
278
+ }, [(_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a)]);
220
279
  };
221
280
  }
222
281
  });
223
- const overlayProps = {
224
- visible: {
225
- type: Boolean
226
- },
227
- backgroundBlock: {
282
+ const fixedOverlayProps = {
283
+ modelValue: {
228
284
  type: Boolean,
229
285
  default: false
230
286
  },
231
- backgroundClass: {
232
- type: String,
233
- default: ""
234
- },
235
- backgroundStyle: {
236
- type: [String, Object]
237
- },
238
- onBackdropClick: {
239
- type: Function
240
- },
241
- backdropClose: {
287
+ lockScroll: {
242
288
  type: Boolean,
243
289
  default: true
244
290
  },
245
- hasBackdrop: {
291
+ closeOnClickOverlay: {
246
292
  type: Boolean,
247
293
  default: true
248
294
  }
249
295
  };
250
- const fixedOverlayProps = __spreadProps(__spreadValues({}, overlayProps), {
251
- overlayStyle: {
252
- type: [String, Object],
253
- default: void 0
296
+ function lockScroll() {
297
+ if (document.documentElement.scrollHeight > document.documentElement.clientHeight) {
298
+ const scrollTop = document.documentElement.scrollTop;
299
+ const style = document.documentElement.getAttribute("style");
300
+ document.documentElement.style.position = "fixed";
301
+ document.documentElement.style.top = `-${scrollTop}px`;
302
+ document.documentElement.style.width = document.documentElement.style.width || "100%";
303
+ document.documentElement.style.overflowY = "scroll";
304
+ return () => {
305
+ if (style) {
306
+ document.documentElement.setAttribute("style", style);
307
+ } else {
308
+ document.documentElement.removeAttribute("style");
309
+ }
310
+ document.documentElement.scrollTop = scrollTop;
311
+ };
254
312
  }
255
- });
256
- const overlayEmits = ["update:visible", "backdropClick"];
257
- function useOverlayLogic(props, ctx) {
258
- const ns = useNamespace("overlay");
259
- const backgroundClass = computed(() => {
260
- return [ns.e("background"), props.backgroundClass, !props.hasBackdrop ? ns.em("background", "disabled") : ns.em("background", "color")];
261
- });
262
- const overlayClass = computed(() => {
263
- return ns.b();
264
- });
265
- const handleBackdropClick = (event) => {
266
- var _a;
313
+ return;
314
+ }
315
+ function useFixedOverlay(props, ctx) {
316
+ let lockScrollCb;
317
+ const onClick = (event) => {
267
318
  event.preventDefault();
268
- (_a = props.onBackdropClick) == null ? void 0 : _a.call(props);
269
- if (props.backdropClose) {
270
- ctx.emit("update:visible", false);
319
+ ctx.emit("click", event);
320
+ if (props.closeOnClickOverlay) {
321
+ ctx.emit("update:modelValue", false);
271
322
  }
272
323
  };
273
- const handleOverlayBubbleCancel = (event) => event.cancelBubble = true;
274
- onMounted(() => {
275
- const body = document.body;
276
- const originOverflow = body.style.overflow;
277
- const originPosition = body.style.position;
278
- watch([() => props.visible, () => props.backgroundBlock], ([visible, backgroundBlock]) => {
279
- if (backgroundBlock) {
280
- const top = body.getBoundingClientRect().y;
281
- if (visible) {
282
- body.style.overflowY = "scroll";
283
- body.style.position = visible ? "fixed" : "";
284
- body.style.top = `${top}px`;
285
- } else {
286
- body.style.overflowY = originOverflow;
287
- body.style.position = originPosition;
288
- body.style.top = "";
289
- window.scrollTo(0, -top);
290
- }
291
- }
292
- });
293
- onUnmounted(() => {
294
- document.body.style.overflow = originOverflow;
295
- });
296
- });
297
- return {
298
- backgroundClass,
299
- overlayClass,
300
- handleBackdropClick,
301
- handleOverlayBubbleCancel
324
+ const removeBodyAdditions = () => {
325
+ lockScrollCb == null ? void 0 : lockScrollCb();
302
326
  };
327
+ watch(() => props.modelValue, (val) => {
328
+ if (val) {
329
+ props.lockScroll && (lockScrollCb = lockScroll());
330
+ } else {
331
+ removeBodyAdditions();
332
+ }
333
+ });
334
+ onUnmounted(removeBodyAdditions);
335
+ return { onClick };
303
336
  }
304
337
  var fixedOverlay = "";
305
338
  const FixedOverlay = defineComponent({
306
339
  name: "DFixedOverlay",
340
+ inheritAttrs: false,
307
341
  props: fixedOverlayProps,
308
- emits: overlayEmits,
342
+ emits: ["update:modelValue", "click"],
309
343
  setup(props, ctx) {
310
344
  const {
311
- backgroundClass,
312
- overlayClass,
313
- handleBackdropClick,
314
- handleOverlayBubbleCancel
315
- } = useOverlayLogic(props, ctx);
316
- return () => createVNode(CommonOverlay, null, {
317
- default: () => [props.visible && createVNode("div", {
318
- "class": backgroundClass.value,
319
- "style": props.backgroundStyle,
320
- "onClick": handleBackdropClick
321
- }, [createVNode("div", {
322
- "class": overlayClass.value,
323
- "style": props.overlayStyle,
324
- "onClick": handleOverlayBubbleCancel
325
- }, [renderSlot(ctx.slots, "default")])])]
345
+ modelValue
346
+ } = toRefs(props);
347
+ const ns = useNamespace("fixed-overlay");
348
+ const {
349
+ onClick
350
+ } = useFixedOverlay(props, ctx);
351
+ return () => createVNode(Transition, {
352
+ "name": ns.m("fade")
353
+ }, {
354
+ default: () => {
355
+ var _a, _b;
356
+ return [modelValue.value && createVNode("div", mergeProps({
357
+ "class": ns.b()
358
+ }, ctx.attrs, {
359
+ "onClick": onClick
360
+ }), [(_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a)])];
361
+ }
326
362
  });
327
363
  }
328
364
  });
@@ -496,12 +532,58 @@ function useModal(props, emit) {
496
532
  function close() {
497
533
  emit("update:modelValue", false);
498
534
  }
499
- function handleVisibleChange(val) {
500
- if (!val) {
501
- props.beforeClose ? props.beforeClose(close) : close();
535
+ function execClose() {
536
+ props.beforeClose ? props.beforeClose(close) : close();
537
+ }
538
+ function onOverlayClick() {
539
+ props.closeOnClickOverlay && execClose();
540
+ }
541
+ function onCloseBtnClick() {
542
+ execClose();
543
+ }
544
+ function onKeydown(event) {
545
+ if (event["keyCode"] === 27) {
546
+ execClose();
502
547
  }
503
548
  }
504
- return { handleVisibleChange };
549
+ onMounted(() => {
550
+ if (props.escapable) {
551
+ window.addEventListener("keydown", onKeydown);
552
+ }
553
+ });
554
+ onUnmounted(() => {
555
+ if (props.escapable) {
556
+ window.addEventListener("keydown", onKeydown);
557
+ }
558
+ });
559
+ return { onCloseBtnClick, onOverlayClick };
560
+ }
561
+ function useModalRender(props) {
562
+ const showContainer = ref(false);
563
+ const showModal = ref(false);
564
+ let lockScrollCb;
565
+ const removeBodyAdditions = () => {
566
+ lockScrollCb == null ? void 0 : lockScrollCb();
567
+ };
568
+ watch(() => props.modelValue, (val) => {
569
+ if (val) {
570
+ props.lockScroll && (lockScrollCb = lockScroll());
571
+ showContainer.value = true;
572
+ nextTick(() => {
573
+ showModal.value = true;
574
+ });
575
+ } else {
576
+ removeBodyAdditions();
577
+ showModal.value = false;
578
+ setTimeout(() => {
579
+ showContainer.value = false;
580
+ }, 100);
581
+ }
582
+ }, {
583
+ immediate: true
584
+ });
585
+ onUnmounted(removeBodyAdditions);
586
+ return { showContainer, showModal };
505
587
  }
506
588
  var Header = defineComponent({
507
589
  name: "DModalHeader",
@@ -540,55 +622,63 @@ var Modal = defineComponent({
540
622
  setup(props, {
541
623
  slots,
542
624
  attrs,
543
- emit,
544
- expose
625
+ emit
545
626
  }) {
546
627
  const ns = useNamespace("modal");
547
628
  const {
548
629
  modelValue,
549
- lockScroll,
550
- closeOnClickOverlay,
551
- title
630
+ title,
631
+ showClose,
632
+ showOverlay,
633
+ appendToBody
552
634
  } = toRefs(props);
553
635
  const {
554
- handleVisibleChange
636
+ onCloseBtnClick,
637
+ onOverlayClick
555
638
  } = useModal(props, emit);
556
- expose({
557
- handleVisibleChange
639
+ const {
640
+ showContainer,
641
+ showModal
642
+ } = useModalRender(props);
643
+ return () => createVNode(Teleport, {
644
+ "to": "body",
645
+ "disabled": !appendToBody.value
646
+ }, {
647
+ default: () => [showOverlay.value && createVNode(FixedOverlay, {
648
+ "modelValue": modelValue.value,
649
+ "onUpdate:modelValue": ($event) => modelValue.value = $event,
650
+ "lock-scroll": false,
651
+ "style": {
652
+ zIndex: "calc(var(--devui-z-index-modal, 1050) - 1)"
653
+ }
654
+ }, null), showContainer.value && createVNode("div", {
655
+ "class": ns.e("container"),
656
+ "onClick": onOverlayClick
657
+ }, [createVNode(Transition, {
658
+ "name": ns.m("wipe")
659
+ }, {
660
+ default: () => {
661
+ var _a;
662
+ return [showModal.value && createVNode("div", mergeProps({
663
+ "class": ns.b()
664
+ }, attrs, {
665
+ "onClick": (e) => e.stopPropagation()
666
+ }), [showClose.value && createVNode(Icon, {
667
+ "name": "close",
668
+ "class": "btn-close",
669
+ "size": "var(--devui-font-size-md,12px)",
670
+ "onClick": onCloseBtnClick
671
+ }, null), slots.header ? slots.header() : title.value && createVNode(Header, null, {
672
+ default: () => [title.value]
673
+ }), createVNode(Body, null, {
674
+ default: () => {
675
+ var _a2;
676
+ return [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)];
677
+ }
678
+ }), (_a = slots.footer) == null ? void 0 : _a.call(slots)])];
679
+ }
680
+ })])]
558
681
  });
559
- return () => {
560
- const fixedOverlayProps2 = {
561
- visible: modelValue.value,
562
- "onUpdate:visible": handleVisibleChange,
563
- "background-class": ns.e("mask"),
564
- "background-block": lockScroll.value,
565
- "backdrop-close": closeOnClickOverlay.value
566
- };
567
- return createVNode(FixedOverlay, fixedOverlayProps2, {
568
- default: () => [createVNode(Transition, {
569
- "name": ns.m("wipe")
570
- }, {
571
- default: () => {
572
- var _a;
573
- return [createVNode("div", mergeProps({
574
- "class": ns.b()
575
- }, attrs), [createVNode(Icon, {
576
- "name": "close",
577
- "class": "btn-close",
578
- "size": "var(--devui-font-size-md,12px)",
579
- "onClick": () => handleVisibleChange(false)
580
- }, null), slots.header ? slots.header() : title.value && createVNode(Header, null, {
581
- default: () => [title.value]
582
- }), createVNode(Body, null, {
583
- default: () => {
584
- var _a2;
585
- return [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)];
586
- }
587
- }), (_a = slots.footer) == null ? void 0 : _a.call(slots)])];
588
- }
589
- })]
590
- });
591
- };
592
682
  }
593
683
  });
594
684
  var Footer = defineComponent({
@@ -1 +1 @@
1
- var le=Object.defineProperty,re=Object.defineProperties;var ae=Object.getOwnPropertyDescriptors;var V=Object.getOwnPropertySymbols;var $=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var D=(i,e,u)=>e in i?le(i,e,{enumerable:!0,configurable:!0,writable:!0,value:u}):i[e]=u,N=(i,e)=>{for(var u in e||(e={}))$.call(e,u)&&D(i,u,e[u]);if(V)for(var u of V(e))j.call(e,u)&&D(i,u,e[u]);return i},S=(i,e)=>re(i,ae(e));var z=(i,e)=>{var u={};for(var h in i)$.call(i,h)&&e.indexOf(h)<0&&(u[h]=i[h]);if(i!=null&&V)for(var h of V(i))e.indexOf(h)<0&&j.call(i,h)&&(u[h]=i[h]);return u};var L=(i,e,u)=>(D(i,typeof e!="symbol"?e+"":e,u),u);(function(i,e){typeof exports=="object"&&typeof module!="undefined"?e(exports,require("vue"),require("@floating-ui/dom")):typeof define=="function"&&define.amd?define(["exports","vue","@floating-ui/dom"],e):(i=typeof globalThis!="undefined"?globalThis:i||self,e(i.index={},i.Vue,i.dom))})(this,function(i,e,u){"use strict";const h={modelValue:{type:Boolean,default:!1},title:{type:String,default:""},lockScroll:{type:Boolean,default:!0},closeOnClickOverlay:{type:Boolean,default:!0},beforeClose:{type:Function}};function R(t){return/^((http|https):)?\/\//.test(t)}const F={name:{type:String,default:"",required:!0},size:{type:[Number,String],default:"inherit"},color:{type:String,default:"inherit"},component:{type:Object,default:null},classPrefix:{type:String,default:"icon"}},T={name:{type:String,default:"",required:!0},color:{type:String,default:"inherit"},size:{type:[Number,String],default:"inherit"}};function C(t,o,n){let l=t;return o&&(l+=`__${o}`),n&&(l+=`--${n}`),l}function b(t,o=!1){const n=o?`.devui-${t}`:`devui-${t}`;return{b:()=>C(n),e:a=>a?C(n,a):"",m:a=>a?C(n,"",a):"",em:(a,s)=>a&&s?C(n,a,s):""}}var de="",_=e.defineComponent({name:"DSvgIcon",props:T,setup(t){const{name:o,color:n,size:l}=e.toRefs(t),r=b("svg-icon"),c=e.computed(()=>`#icon-${o.value}`),d=e.computed(()=>typeof l.value=="number"?`${l.value}px`:l.value),a={width:d.value,height:d.value};return()=>e.createVNode("svg",{class:r.b(),style:a},[e.createVNode("use",{"xlink:href":c.value,fill:n.value},null)])}}),U=e.defineComponent({name:"DIcon",props:F,setup(t,{attrs:o}){const{component:n,name:l,size:r,color:c,classPrefix:d}=e.toRefs(t),a=n.value?e.resolveDynamicComponent(n.value):e.resolveDynamicComponent(_),s=e.computed(()=>typeof r.value=="number"?`${r.value}px`:r.value),y=()=>e.createVNode(a,e.mergeProps({name:l.value,color:c.value,size:s.value},o),null),f=()=>e.createVNode("img",e.mergeProps({src:l.value,alt:l.value.split("/")[l.value.split("/").length-1],style:{width:s.value||""}},o),null),p=()=>{const m=/^icon-/.test(l.value)?l.value:`${d.value}-${l.value}`;return e.createVNode("i",e.mergeProps({class:[d.value,m],style:{fontSize:s.value,color:c.value}},o),null)};return()=>n.value?y():R(l.value)?f():p()}}),se="";function q(t){return typeof t=="function"||Object.prototype.toString.call(t)==="[object Object]"&&!e.isVNode(t)}const X=e.defineComponent({setup(t,o){const n=b("overlay");return()=>{let l;return e.createVNode(e.Teleport,{to:"#d-overlay-anchor"},{default:()=>[e.createVNode(e.Transition,{name:n.e("fade")},q(l=e.renderSlot(o.slots,"default"))?l:{default:()=>[l]})]})}}}),Y=S(N({},{visible:{type:Boolean},backgroundBlock:{type:Boolean,default:!1},backgroundClass:{type:String,default:""},backgroundStyle:{type:[String,Object]},onBackdropClick:{type:Function},backdropClose:{type:Boolean,default:!0},hasBackdrop:{type:Boolean,default:!0}}),{overlayStyle:{type:[String,Object],default:void 0}}),H=["update:visible","backdropClick"];function K(t,o){const n=b("overlay"),l=e.computed(()=>[n.e("background"),t.backgroundClass,t.hasBackdrop?n.em("background","color"):n.em("background","disabled")]),r=e.computed(()=>n.b()),c=a=>{var s;a.preventDefault(),(s=t.onBackdropClick)==null||s.call(t),t.backdropClose&&o.emit("update:visible",!1)},d=a=>a.cancelBubble=!0;return e.onMounted(()=>{const a=document.body,s=a.style.overflow,y=a.style.position;e.watch([()=>t.visible,()=>t.backgroundBlock],([f,p])=>{if(p){const m=a.getBoundingClientRect().y;f?(a.style.overflowY="scroll",a.style.position=f?"fixed":"",a.style.top=`${m}px`):(a.style.overflowY=s,a.style.position=y,a.style.top="",window.scrollTo(0,-m))}}),e.onUnmounted(()=>{document.body.style.overflow=s})}),{backgroundClass:l,overlayClass:r,handleBackdropClick:c,handleOverlayBubbleCancel:d}}var ue="";const G=e.defineComponent({name:"DFixedOverlay",props:Y,emits:H,setup(t,o){const{backgroundClass:n,overlayClass:l,handleBackdropClick:r,handleOverlayBubbleCancel:c}=K(t,o);return()=>e.createVNode(X,null,{default:()=>[t.visible&&e.createVNode("div",{class:n.value,style:t.backgroundStyle,onClick:r},[e.createVNode("div",{class:l.value,style:t.overlayStyle,onClick:c},[e.renderSlot(o.slots,"default")])])]})}}),J={modelValue:{type:Boolean,default:!1},origin:{type:Object,require:!0},position:{type:Array,default:["bottom"]},offset:{type:[Number,Object],default:8},shiftOffset:{type:Number},align:{type:String,default:null},showArrow:{type:Boolean,default:!1},isArrowCenter:{type:Boolean,default:!0}};function Q(t){const o=/(auto|scroll|hidden)/;for(let n=t;n=n.parentElement;n.parentElement!==document.body){const l=window.getComputedStyle(n);if(o.test(l.overflow+l.overflowX+l.overflowY))return n}return window}function W(t,o,n,l){let{x:r,y:c}=o;if(!t){const{width:d,height:a}=l;r&&n.includes("start")&&(r=12),r&&n.includes("end")&&(r=Math.round(d-24)),c&&n.includes("start")&&(c=10),c&&n.includes("end")&&(c=a-14)}return{x:r,y:c}}function Z(t,o){const n=e.ref(),l=e.ref();let r=null;const c=(a,s,y,f)=>{const{x:p,y:m}=W(t.isArrowCenter,y,s,f.getBoundingClientRect()),v={top:"bottom",right:"left",bottom:"top",left:"right"}[s.split("-")[0]];Object.assign(a.style,{left:p?`${p}px`:"",top:m?`${m}px`:"",right:"",bottom:"",[v]:"-4px"})},d=async()=>{const a=t.origin,s=e.unref(n.value),y=e.unref(l.value),f=[u.offset(t.offset),u.autoPlacement({alignment:t.align,allowedPlacements:t.position})];t.showArrow&&f.push(u.arrow({element:y})),t.shiftOffset!==void 0&&f.push(u.shift());const{x:p,y:m,placement:v,middlewareData:w}=await u.computePosition(a,s,{strategy:"fixed",middleware:f});let g=p,P=m;if(t.shiftOffset!==void 0){const{x:A,y:I}=w.shift;A<0&&(g-=t.shiftOffset),A>0&&(g+=t.shiftOffset),I<0&&(P-=t.shiftOffset),I>0&&(P+=t.shiftOffset)}o("positionChange",v),Object.assign(s.style,{top:`${P}px`,left:`${g}px`}),t.showArrow&&c(y,v,w.arrow,s)};return e.watch(()=>t.modelValue,()=>{t.modelValue&&t.origin?(r=Q(t.origin),e.nextTick(d),r==null||r.addEventListener("scroll",d),r!==window&&window.addEventListener("scroll",d),window.addEventListener("resize",d)):(r==null||r.removeEventListener("scroll",d),r!==window&&window.removeEventListener("scroll",d),window.removeEventListener("resize",d))}),e.onUnmounted(()=>{r==null||r.removeEventListener("scroll",d),r!==window&&window.removeEventListener("scroll",d),window.removeEventListener("resize",d)}),{arrowRef:l,overlayRef:n,updatePosition:d}}var fe="";e.defineComponent({name:"DFlexibleOverlay",inheritAttrs:!1,props:J,emits:["update:modelValue","positionChange"],setup(t,{slots:o,attrs:n,emit:l,expose:r}){const c=b("flexible-overlay"),{arrowRef:d,overlayRef:a,updatePosition:s}=Z(t,l);return r({updatePosition:s}),()=>{var y;return t.modelValue&&e.createVNode("div",e.mergeProps({ref:a,class:c.b()},n),[(y=o.default)==null?void 0:y.call(o),t.showArrow&&e.createVNode("div",{ref:d,class:c.e("arrow")},null)])}}});const ee=typeof window!="undefined";function te(t,o){function n(){o("update:modelValue",!1)}function l(r){r||(t.beforeClose?t.beforeClose(n):n())}return{handleVisibleChange:l}}var x=e.defineComponent({name:"DModalHeader",setup(t,{slots:o}){const n=b("modal");return()=>{var l;return e.createVNode("div",{class:n.e("header")},[(l=o.default)==null?void 0:l.call(o)])}}}),B=e.defineComponent({name:"DModalBody",setup(t,{slots:o}){const n=b("modal");return()=>{var l;return e.createVNode("div",{class:n.e("body")},[(l=o.default)==null?void 0:l.call(o)])}}}),me="",k=e.defineComponent({name:"DModal",inheritAttrs:!1,props:h,emits:["update:modelValue"],setup(t,{slots:o,attrs:n,emit:l,expose:r}){const c=b("modal"),{modelValue:d,lockScroll:a,closeOnClickOverlay:s,title:y}=e.toRefs(t),{handleVisibleChange:f}=te(t,l);return r({handleVisibleChange:f}),()=>{const p={visible:d.value,"onUpdate:visible":f,"background-class":c.e("mask"),"background-block":a.value,"backdrop-close":s.value};return e.createVNode(G,p,{default:()=>[e.createVNode(e.Transition,{name:c.m("wipe")},{default:()=>{var m;return[e.createVNode("div",e.mergeProps({class:c.b()},n),[e.createVNode(U,{name:"close",class:"btn-close",size:"var(--devui-font-size-md,12px)",onClick:()=>f(!1)},null),o.header?o.header():y.value&&e.createVNode(x,null,{default:()=>[y.value]}),e.createVNode(B,null,{default:()=>{var v;return[(v=o.default)==null?void 0:v.call(o)]}}),(m=o.footer)==null?void 0:m.call(o)])]}})]})}}}),M=e.defineComponent({name:"DModalFooter",setup(t,{slots:o}){const n=b("modal");return()=>{var l;return e.createVNode("div",{class:n.e("footer")},[(l=o.default)==null?void 0:l.call(o)])}}});class oe{constructor(o){this.anchorContainer=o}renderModal(o,n,l){const r=e.h(this.component(),n,l);return e.render(r,o),r}renderNull(o){setTimeout(()=>{e.render(null,o)},500)}}let O;class E extends oe{component(){return k}open(o={}){const n=document.createElement("div");this.anchorContainer.appendChild(n);const f=o,{header:l,content:r,footer:c}=f,d=z(f,["header","content","footer"]),a=(p,m)=>this.renderModal(n,S(N({},p),{modelValue:!0,"onUpdate:modelValue":m}),{header:l,default:r,footer:c}),s=()=>{var m,v,w;const p=g=>{g||s()};a(d,g=>{g?a(d,p):(this.renderModal(n,S(N({},d),{modelValue:!1})),this.renderNull(n))}),(w=(v=(m=O==null?void 0:O.component)==null?void 0:m.exposed)==null?void 0:v.handleVisibleChange)==null||w.call(v,!1)},y=p=>{p||s()};return this.renderModal(n,{modelValue:!1}),O=a(d,y),{hide:s}}}L(E,"token","MODAL_SERVICE_TOKEN");var ne={title:"Modal \u5F39\u7A97",category:"\u53CD\u9988",status:"100%",install(t){if(t.component(k.name,k),t.component(x.name,x),t.component(B.name,B),t.component(M.name,M),!ee)return;let o=document.getElementById("d-modal-anchors-container");o||(o=document.createElement("div"),o.setAttribute("id","d-modal-anchors-container"),document.body.appendChild(o)),t.provide(E.token,new E(o))}};i.Modal=k,i.default=ne,i.modalProps=h,Object.defineProperty(i,"__esModule",{value:!0}),i[Symbol.toStringTag]="Module"});
1
+ var le=Object.defineProperty,ae=Object.defineProperties;var re=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var $=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;var D=(d,e,u)=>e in d?le(d,e,{enumerable:!0,configurable:!0,writable:!0,value:u}):d[e]=u,S=(d,e)=>{for(var u in e||(e={}))$.call(e,u)&&D(d,u,e[u]);if(E)for(var u of E(e))z.call(e,u)&&D(d,u,e[u]);return d},A=(d,e)=>ae(d,re(e));var R=(d,e)=>{var u={};for(var w in d)$.call(d,w)&&e.indexOf(w)<0&&(u[w]=d[w]);if(d!=null&&E)for(var w of E(d))e.indexOf(w)<0&&z.call(d,w)&&(u[w]=d[w]);return u};var L=(d,e,u)=>(D(d,typeof e!="symbol"?e+"":e,u),u);(function(d,e){typeof exports=="object"&&typeof module!="undefined"?e(exports,require("vue"),require("@floating-ui/dom")):typeof define=="function"&&define.amd?define(["exports","vue","@floating-ui/dom"],e):(d=typeof globalThis!="undefined"?globalThis:d||self,e(d.index={},d.Vue,d.dom))})(this,function(d,e,u){"use strict";const w={modelValue:{type:Boolean,default:!1},title:{type:String,default:""},lockScroll:{type:Boolean,default:!0},closeOnClickOverlay:{type:Boolean,default:!0},beforeClose:{type:Function},escapable:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},showOverlay:{type:Boolean,default:!0},appendToBody:{type:Boolean,default:!0}},F={name:{type:String,default:"",required:!0},size:{type:[Number,String],default:"inherit"},color:{type:String,default:"inherit"},component:{type:Object,default:null},classPrefix:{type:String,default:"icon"},operable:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},rotate:{type:[Number,String]}},U={name:{type:String,default:"",required:!0},color:{type:String,default:"inherit"},size:{type:[Number,String],default:"inherit"}};function b(n,t,o){let l=n;return t&&(l+=`__${t}`),o&&(l+=`--${o}`),l}function C(n,t=!1){const o=t?`.devui-${n}`:`devui-${n}`;return{b:()=>b(o),e:r=>r?b(o,r):"",m:r=>r?b(o,"",r):"",em:(r,c)=>r&&c?b(o,r,c):""}}var se="",_=e.defineComponent({name:"DSvgIcon",props:U,setup(n){const{name:t,color:o,size:l}=e.toRefs(n),a=C("svg-icon"),s=e.computed(()=>`#icon-${t.value}`),i=e.computed(()=>typeof l.value=="number"?`${l.value}px`:l.value),r={width:i.value,height:i.value};return()=>e.createVNode("svg",{class:a.b(),style:r},[e.createVNode("use",{"xlink:href":s.value,fill:o.value},null)])}});function j(n){return/^((http|https):)?\/\//.test(n)}function H(n,t){const{component:o,name:l,size:a,color:s,classPrefix:i,rotate:r}=e.toRefs(n),c=C("icon"),f=e.computed(()=>typeof a.value=="number"?`${a.value}px`:a.value),p=o.value?e.resolveDynamicComponent(o.value):e.resolveDynamicComponent(_),m=()=>e.createVNode("img",e.mergeProps({src:l.value,alt:l.value.split("/")[l.value.split("/").length-1],class:[(r==null?void 0:r.value)==="infinite"&&c.m("spin")],style:{width:f.value||"",transform:`rotate(${r==null?void 0:r.value}deg)`,verticalAlign:"middle"}},t.attrs),null),h=()=>e.createVNode(p,e.mergeProps({name:l.value,color:s.value,size:f.value,class:[(r==null?void 0:r.value)==="infinite"&&c.m("spin")],style:{transform:`rotate(${r==null?void 0:r.value}deg)`}},t.attrs),null),v=()=>{const y=/^icon-/.test(l.value)?l.value:`${i.value}-${l.value}`;return e.createVNode("i",e.mergeProps({class:[i.value,y,(r==null?void 0:r.value)==="infinite"&&c.m("spin")],style:{fontSize:f.value,color:s.value,transform:`rotate(${r==null?void 0:r.value}deg)`}},t.attrs),null)};return{iconDom:()=>o.value?h():j(l.value)?m():v()}}var q=e.defineComponent({name:"DIcon",props:F,emits:["click"],setup(n,t){const{disabled:o,operable:l}=e.toRefs(n),{iconDom:a}=H(n,t),s=C("icon"),i=e.computed(()=>({[s.e("container")]:!0,[s.m("disabled")]:o.value,[s.m("operable")]:l.value})),r=c=>{o.value||t.emit("click",c)};return()=>{var c,f,p,m;return e.createVNode("div",{class:i.value,onClick:r},[(f=(c=t.slots).prefix)==null?void 0:f.call(c),a(),(m=(p=t.slots).suffix)==null?void 0:m.call(p)])}}}),de="";e.defineComponent({name:"DIconGroup",setup(n,t){const o=C("icon-group");return()=>{var l,a;return e.createVNode("div",{class:o.b()},[(a=(l=t.slots).default)==null?void 0:a.call(l)])}}});const X={modelValue:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},closeOnClickOverlay:{type:Boolean,default:!0}};function P(){if(document.documentElement.scrollHeight>document.documentElement.clientHeight){const n=document.documentElement.scrollTop,t=document.documentElement.getAttribute("style");return document.documentElement.style.position="fixed",document.documentElement.style.top=`-${n}px`,document.documentElement.style.width=document.documentElement.style.width||"100%",document.documentElement.style.overflowY="scroll",()=>{t?document.documentElement.setAttribute("style",t):document.documentElement.removeAttribute("style"),document.documentElement.scrollTop=n}}}function Y(n,t){let o;const l=s=>{s.preventDefault(),t.emit("click",s),n.closeOnClickOverlay&&t.emit("update:modelValue",!1)},a=()=>{o==null||o()};return e.watch(()=>n.modelValue,s=>{s?n.lockScroll&&(o=P()):a()}),e.onUnmounted(a),{onClick:l}}var ce="";const G=e.defineComponent({name:"DFixedOverlay",inheritAttrs:!1,props:X,emits:["update:modelValue","click"],setup(n,t){const{modelValue:o}=e.toRefs(n),l=C("fixed-overlay"),{onClick:a}=Y(n,t);return()=>e.createVNode(e.Transition,{name:l.m("fade")},{default:()=>{var s,i;return[o.value&&e.createVNode("div",e.mergeProps({class:l.b()},t.attrs,{onClick:a}),[(i=(s=t.slots).default)==null?void 0:i.call(s)])]}})}}),K={modelValue:{type:Boolean,default:!1},origin:{type:Object,require:!0},position:{type:Array,default:["bottom"]},offset:{type:[Number,Object],default:8},shiftOffset:{type:Number},align:{type:String,default:null},showArrow:{type:Boolean,default:!1},isArrowCenter:{type:Boolean,default:!0}};function J(n){const t=/(auto|scroll|hidden)/;for(let o=n;o=o.parentElement;o.parentElement!==document.body){const l=window.getComputedStyle(o);if(t.test(l.overflow+l.overflowX+l.overflowY))return o}return window}function Q(n,t,o,l){let{x:a,y:s}=t;if(!n){const{width:i,height:r}=l;a&&o.includes("start")&&(a=12),a&&o.includes("end")&&(a=Math.round(i-24)),s&&o.includes("start")&&(s=10),s&&o.includes("end")&&(s=r-14)}return{x:a,y:s}}function W(n,t){const o=e.ref(),l=e.ref();let a=null;const s=(r,c,f,p)=>{const{x:m,y:h}=Q(n.isArrowCenter,f,c,p.getBoundingClientRect()),v={top:"bottom",right:"left",bottom:"top",left:"right"}[c.split("-")[0]];Object.assign(r.style,{left:m?`${m}px`:"",top:h?`${h}px`:"",right:"",bottom:"",[v]:"-4px"})},i=async()=>{const r=n.origin,c=e.unref(o.value),f=e.unref(l.value),p=[u.offset(n.offset),u.autoPlacement({alignment:n.align,allowedPlacements:n.position})];n.showArrow&&p.push(u.arrow({element:f})),n.shiftOffset!==void 0&&p.push(u.shift());const{x:m,y:h,placement:v,middlewareData:g}=await u.computePosition(r,c,{strategy:"fixed",middleware:p});let y=m,B=h;if(n.shiftOffset!==void 0){const{x:T,y:I}=g.shift;T<0&&(y-=n.shiftOffset),T>0&&(y+=n.shiftOffset),I<0&&(B-=n.shiftOffset),I>0&&(B+=n.shiftOffset)}t("positionChange",v),Object.assign(c.style,{top:`${B}px`,left:`${y}px`}),n.showArrow&&s(f,v,g.arrow,c)};return e.watch(()=>n.modelValue,()=>{n.modelValue&&n.origin?(a=J(n.origin),e.nextTick(i),a==null||a.addEventListener("scroll",i),a!==window&&window.addEventListener("scroll",i),window.addEventListener("resize",i)):(a==null||a.removeEventListener("scroll",i),a!==window&&window.removeEventListener("scroll",i),window.removeEventListener("resize",i))}),e.onUnmounted(()=>{a==null||a.removeEventListener("scroll",i),a!==window&&window.removeEventListener("scroll",i),window.removeEventListener("resize",i)}),{arrowRef:l,overlayRef:o,updatePosition:i}}var ue="";e.defineComponent({name:"DFlexibleOverlay",inheritAttrs:!1,props:K,emits:["update:modelValue","positionChange"],setup(n,{slots:t,attrs:o,emit:l,expose:a}){const s=C("flexible-overlay"),{arrowRef:i,overlayRef:r,updatePosition:c}=W(n,l);return a({updatePosition:c}),()=>{var f;return n.modelValue&&e.createVNode("div",e.mergeProps({ref:r,class:s.b()},o),[(f=t.default)==null?void 0:f.call(t),n.showArrow&&e.createVNode("div",{ref:i,class:s.e("arrow")},null)])}}});const Z=typeof window!="undefined";function ee(n,t){function o(){t("update:modelValue",!1)}function l(){n.beforeClose?n.beforeClose(o):o()}function a(){n.closeOnClickOverlay&&l()}function s(){l()}function i(r){r.keyCode===27&&l()}return e.onMounted(()=>{n.escapable&&window.addEventListener("keydown",i)}),e.onUnmounted(()=>{n.escapable&&window.addEventListener("keydown",i)}),{onCloseBtnClick:s,onOverlayClick:a}}function te(n){const t=e.ref(!1),o=e.ref(!1);let l;const a=()=>{l==null||l()};return e.watch(()=>n.modelValue,s=>{s?(n.lockScroll&&(l=P()),t.value=!0,e.nextTick(()=>{o.value=!0})):(a(),o.value=!1,setTimeout(()=>{t.value=!1},100))},{immediate:!0}),e.onUnmounted(a),{showContainer:t,showModal:o}}var N=e.defineComponent({name:"DModalHeader",setup(n,{slots:t}){const o=C("modal");return()=>{var l;return e.createVNode("div",{class:o.e("header")},[(l=t.default)==null?void 0:l.call(t)])}}}),k=e.defineComponent({name:"DModalBody",setup(n,{slots:t}){const o=C("modal");return()=>{var l;return e.createVNode("div",{class:o.e("body")},[(l=t.default)==null?void 0:l.call(t)])}}}),fe="",V=e.defineComponent({name:"DModal",inheritAttrs:!1,props:w,emits:["update:modelValue"],setup(n,{slots:t,attrs:o,emit:l}){const a=C("modal"),{modelValue:s,title:i,showClose:r,showOverlay:c,appendToBody:f}=e.toRefs(n),{onCloseBtnClick:p,onOverlayClick:m}=ee(n,l),{showContainer:h,showModal:v}=te(n);return()=>e.createVNode(e.Teleport,{to:"body",disabled:!f.value},{default:()=>[c.value&&e.createVNode(G,{modelValue:s.value,"onUpdate:modelValue":g=>s.value=g,"lock-scroll":!1,style:{zIndex:"calc(var(--devui-z-index-modal, 1050) - 1)"}},null),h.value&&e.createVNode("div",{class:a.e("container"),onClick:m},[e.createVNode(e.Transition,{name:a.m("wipe")},{default:()=>{var g;return[v.value&&e.createVNode("div",e.mergeProps({class:a.b()},o,{onClick:y=>y.stopPropagation()}),[r.value&&e.createVNode(q,{name:"close",class:"btn-close",size:"var(--devui-font-size-md,12px)",onClick:p},null),t.header?t.header():i.value&&e.createVNode(N,null,{default:()=>[i.value]}),e.createVNode(k,null,{default:()=>{var y;return[(y=t.default)==null?void 0:y.call(t)]}}),(g=t.footer)==null?void 0:g.call(t)])]}})])]})}}),M=e.defineComponent({name:"DModalFooter",setup(n,{slots:t}){const o=C("modal");return()=>{var l;return e.createVNode("div",{class:o.e("footer")},[(l=t.default)==null?void 0:l.call(t)])}}});class ne{constructor(t){this.anchorContainer=t}renderModal(t,o,l){const a=e.h(this.component(),o,l);return e.render(a,t),a}renderNull(t){setTimeout(()=>{e.render(null,t)},500)}}let O;class x extends ne{component(){return V}open(t={}){const o=document.createElement("div");this.anchorContainer.appendChild(o);const p=t,{header:l,content:a,footer:s}=p,i=R(p,["header","content","footer"]),r=(m,h)=>this.renderModal(o,A(S({},m),{modelValue:!0,"onUpdate:modelValue":h}),{header:l,default:a,footer:s}),c=()=>{var h,v,g;const m=y=>{y||c()};r(i,y=>{y?r(i,m):(this.renderModal(o,A(S({},i),{modelValue:!1})),this.renderNull(o))}),(g=(v=(h=O==null?void 0:O.component)==null?void 0:h.exposed)==null?void 0:v.handleVisibleChange)==null||g.call(v,!1)},f=m=>{m||c()};return this.renderModal(o,{modelValue:!1}),O=r(i,f),{hide:c}}}L(x,"token","MODAL_SERVICE_TOKEN");var oe={title:"Modal \u5F39\u7A97",category:"\u53CD\u9988",status:"100%",install(n){if(n.component(V.name,V),n.component(N.name,N),n.component(k.name,k),n.component(M.name,M),!Z)return;let t=document.getElementById("d-modal-anchors-container");t||(t=document.createElement("div"),t.setAttribute("id","d-modal-anchors-container"),document.body.appendChild(t)),n.provide(x.token,new x(t))}};d.Modal=V,d.default=oe,d.modalProps=w,Object.defineProperty(d,"__esModule",{value:!0}),d[Symbol.toStringTag]="Module"});
package/modal/style.css CHANGED
@@ -1 +1 @@
1
- .devui-svg-icon{vertical-align:middle}@keyframes d-overlay-fade{0%{opacity:0}to{opacity:1}}.devui-overlay__fade-enter{opacity:0}.devui-overlay__fade-enter-active{animation-name:d-overlay-fade;animation-duration:.3s}.devui-overlay__fade-leave{opacity:1}.devui-overlay__fade-leave-active{animation-name:d-overlay-fade;animation-duration:.3s;animation-direction:reverse}.devui-overlay__background{position:fixed;top:0;left:0;height:100vh;width:100vw;display:flex}.devui-overlay__background--color{background:rgba(0,0,0,.4)}.devui-overlay__background .devui-overlay{position:relative;z-index:1000;pointer-events:auto}.devui-overlay__background--disabled{pointer-events:none}.devui-flexible-overlay{position:fixed;border-radius:var(--devui-border-radius, 2px);background-color:var(--devui-connected-overlay-bg, #ffffff);box-shadow:var(--devui-shadow-connected-overlay, 0 2px 8px 0) var(--devui-shadow, rgba(37, 43, 58, .2));z-index:1000}.devui-flexible-overlay__arrow{position:absolute;width:8px;height:8px;transform:rotate(45deg);background-color:inherit}.devui-modal__mask{justify-content:center;align-items:center;background-color:var(--devui-shadow, rgba(37, 43, 58, .2))}.devui-modal{position:relative;width:300px;border-radius:var(--devui-border-radius, 2px);border:none;background-color:var(--devui-fullscreen-overlay-bg, #ffffff);background-clip:padding-box;outline:0;box-shadow:var(--devui-shadow-fullscreen-overlay, 0 8px 40px 0) var(--devui-shadow, rgba(37, 43, 58, .2))}.devui-modal .btn-close{position:absolute;right:16px;top:16px;width:20px;height:20px;line-height:20px;text-align:center;color:#000;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.devui-modal .btn-close:hover{color:var(--devui-icon-fill-active-hover, #526ecc);background-color:var(--devui-list-item-hover-bg, #f2f5fc)}.devui-modal-content{background:var(--devui-fullscreen-overlay-bg, #ffffff);border-radius:var(--devui-border-radius, 2px)}.devui-modal__header{width:100%;height:56px;padding:32px 32px 0;font-size:var(--devui-font-size-card-title, 14px);font-weight:700;box-sizing:border-box;border:none;user-select:none}.devui-modal__header .header-alert-icon{display:inline-block;vertical-align:middle;margin-right:8px;line-height:16px;text-align:center}.devui-modal__body{padding:20px 32px;font-size:var(--devui-font-size, 12px);color:var(--devui-text-weak, #575d6c);box-sizing:border-box}.devui-modal__footer{width:100%;border-top:none;text-align:center;padding:0 32px 24px;box-sizing:border-box}.devui-modal__footer>*{margin:0 4px}@keyframes wipe-in-out{0%{opacity:.2;transform:translateY(-24px)}to{opacity:1;transform:translateY(0)}}.devui-modal--wipe-enter-from{opacity:.2}.devui-modal--wipe-enter-active{animation-name:wipe-in-out;animation-duration:.3s}.devui-modal--wipe-leave-to{opacity:1}.devui-modal--wipe-leave-active{animation-name:wipe-in-out;animation-duration:.3s;animation-direction:reverse}
1
+ .devui-icon__container{display:inline-block;color:var(--devui-icon-fill, #71757f)}.devui-icon__container>*:not(:last-child){vertical-align:middle;margin-right:8px}.devui-icon__container i{vertical-align:middle;transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-icon--disabled{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-icon--disabled i{color:var(--devui-disabled-text, #adb0b8)}.devui-icon--operable:not(.devui-icon--disabled){cursor:pointer;transition:color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-icon--operable:not(.devui-icon--disabled) i{cursor:pointer}.devui-icon--operable:hover:not(.devui-icon--disabled){color:var(--devui-icon-fill-hover, #252b3a)}.devui-icon--operable:hover:not(.devui-icon--disabled).devui-icon__container{background-color:var(--devui-icon-background-hover, var(--devui-list-item-hover-bg, #f2f2f3))}.devui-icon--operable:hover:not(.devui-icon--disabled) i{color:var(--devui-icon-fill-hover, #252b3a)}.devui-icon--operable:active:not(.devui-icon--disabled){color:var(--devui-icon-active-color, var(--devui-icon-fill-active, #252b3a))}.devui-icon--operable:active:not(.devui-icon--disabled).devui-icon__container{background-color:var(--devui-icon-background-active, var(--devui-list-item-active-bg, #f2f5fc))}.devui-icon--operable:active:not(.devui-icon--disabled) i{color:var(--devui-icon-active-color, var(--devui-icon-fill-active, #252b3a))}.devui-icon--operable.devui-icon__container{height:32px;line-height:32px;padding:0 8px;margin-left:-8px;border-radius:var(--devui-border-radius, 4px);transition:all var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}.devui-icon--spin{animation:iconSpin 2.5s linear infinite}.devui-svg-icon{vertical-align:middle}@keyframes iconSpin{0%{transform:rotate(0)}50%{transform:rotate(180deg)}to{transform:rotate(360deg)}}.devui-icon-group{display:inline-flex;align-items:center}.devui-icon-group>.devui-icon__container:not(.devui-icon--operable){padding:8px;margin-left:0}.devui-icon-group>.devui-icon__container:not(.devui-icon--operable):first-child{margin-left:-8px}.devui-icon-group>*:not(:first-child){margin-left:0}.devui-fixed-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--devui-shadow, rgba(37, 43, 58, .2));z-index:1050}.devui-fixed-overlay--fade-enter-active,.devui-fixed-overlay--fade-leave-active{transition:opacity .1s cubic-bezier(0,0,1,1)}.devui-fixed-overlay--fade-enter-from,.devui-fixed-overlay--fade-leave-to{opacity:0}.devui-flexible-overlay{position:fixed;border-radius:var(--devui-border-radius, 4px);background-color:var(--devui-connected-overlay-bg, #ffffff);box-shadow:var(--devui-shadow-length-connected-overlay, 0 4px 8px 0) var(--devui-shadow, rgba(37, 43, 58, .2));z-index:1000}.devui-flexible-overlay__arrow{position:absolute;width:8px;height:8px;transform:rotate(45deg);background-color:inherit}.devui-modal__container{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--devui-z-index-modal, 1050);outline:0;overflow-y:auto;display:flex;flex-direction:column}.devui-modal{position:relative;width:300px;margin:auto;border-radius:var(--devui-border-radius, 4px);border:none;opacity:1;transform:translateY(0);background-color:var(--devui-fullscreen-overlay-bg, #ffffff);background-clip:padding-box;outline:0;box-shadow:var(--devui-shadow-length-fullscreen-overlay, 0 12px 24px 0) var(--devui-shadow, rgba(37, 43, 58, .2))}.devui-modal .btn-close{position:absolute;right:16px;top:16px;width:20px;height:20px;line-height:20px;text-align:center;color:#000;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.devui-modal .btn-close:hover{color:var(--devui-icon-fill-active-hover, #252b3a);background-color:var(--devui-list-item-hover-bg, #f2f2f3)}.devui-modal .btn-close i{position:absolute;right:0;top:0}.devui-modal-content{background:var(--devui-fullscreen-overlay-bg, #ffffff);border-radius:var(--devui-border-radius, 4px)}.devui-modal__header{width:100%;height:56px;padding:32px 32px 0;font-size:var(--devui-font-size-card-title, 16px);font-weight:700;box-sizing:border-box;border:none;user-select:none}.devui-modal__header .header-alert-icon{display:inline-block;vertical-align:middle;margin-right:8px;line-height:16px;text-align:center}.devui-modal__body{padding:20px 32px;font-size:var(--devui-font-size, 14px);color:var(--devui-text-weak, #575d6c);box-sizing:border-box}.devui-modal__footer{width:100%;border-top:none;text-align:center;padding:0 32px 24px;box-sizing:border-box}.devui-modal__footer>*{margin:0 4px}.devui-modal--wipe-enter-active{transition:opacity .1s cubic-bezier(.16,.75,.5,1),transform .1s cubic-bezier(0,0,1,1)}.devui-modal--wipe-leave-active{transition:opacity .1s cubic-bezier(.5,0,.84,.25),transform .1s cubic-bezier(0,0,1,1)}.devui-modal--wipe-enter-from,.devui-modal--wipe-leave-to{opacity:.2;transform:translateY(-24px)}