@will-ui/vue 1.0.1 → 1.0.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 (92) hide show
  1. package/dist/components/btn/Btn.d.ts +4 -7
  2. package/dist/components/btn/Btn.js +1 -0
  3. package/dist/components/btn/Btn.js.map +1 -1
  4. package/dist/components/cascade/Cascade.d.ts +1 -1
  5. package/dist/components/choose/Choose.d.ts +4 -2
  6. package/dist/components/choose2/Choose2.d.ts +1 -1
  7. package/dist/components/confirm/index.d.ts +3 -4
  8. package/dist/components/confirm/index.js.map +1 -1
  9. package/dist/components/copy/Copy.d.ts +8 -8
  10. package/dist/components/copy/Copy.js +3 -2
  11. package/dist/components/copy/Copy.js.map +1 -1
  12. package/dist/components/cornerEars/CornerEars.d.ts +4 -7
  13. package/dist/components/cornerEars/CornerEars.js +1 -0
  14. package/dist/components/cornerEars/CornerEars.js.map +1 -1
  15. package/dist/components/date/DatePanel.d.ts +4 -0
  16. package/dist/components/date/DatePanel.js +2 -2
  17. package/dist/components/date/DatePanel.js.map +1 -1
  18. package/dist/components/date/DatePicker.d.ts +1 -1
  19. package/dist/components/date/DatePicker.js +4 -4
  20. package/dist/components/date/DatePicker.js.map +1 -1
  21. package/dist/components/date/Days.d.ts +2 -4
  22. package/dist/components/date/Days.js +1 -3
  23. package/dist/components/date/Days.js.map +1 -1
  24. package/dist/components/date/Months.d.ts +2 -4
  25. package/dist/components/date/Months.js +1 -3
  26. package/dist/components/date/Months.js.map +1 -1
  27. package/dist/components/date/QuickDate.d.ts +2 -12
  28. package/dist/components/date/QuickDate.js +1 -1
  29. package/dist/components/date/QuickDate.js.map +1 -1
  30. package/dist/components/date/Years.d.ts +3 -6
  31. package/dist/components/date/Years.js +1 -8
  32. package/dist/components/date/Years.js.map +1 -1
  33. package/dist/components/form/_use/formRules.d.ts +1 -1
  34. package/dist/components/form/_use/formRules.js.map +1 -1
  35. package/dist/components/formItem/FormItem.js.map +1 -1
  36. package/dist/components/image/Image.d.ts +5 -7
  37. package/dist/components/image/Image.js +3 -2
  38. package/dist/components/image/Image.js.map +1 -1
  39. package/dist/components/index.js +9 -9
  40. package/dist/components/modal/Modal.d.ts +1 -1
  41. package/dist/components/modal/Modal.js +29 -24
  42. package/dist/components/modal/Modal.js.map +1 -1
  43. package/dist/components/notice/src/_util/index.d.ts +1 -1
  44. package/dist/components/notice/src/_util/index.js.map +1 -1
  45. package/dist/components/number/Number copy.d.ts +1 -1
  46. package/dist/components/number/Number.d.ts +1 -1
  47. package/dist/components/pagination/src/Pagination.d.ts +6 -4
  48. package/dist/components/picture/Picture.d.ts +5 -7
  49. package/dist/components/picture/Picture.js +6 -5
  50. package/dist/components/picture/Picture.js.map +1 -1
  51. package/dist/components/picture/PictureViewport.js +22 -32
  52. package/dist/components/picture/PictureViewport.js.map +1 -1
  53. package/dist/components/progress/Progress.d.ts +1 -1
  54. package/dist/components/scrollbar/Scrollbar.js +61 -78
  55. package/dist/components/scrollbar/Scrollbar.js.map +1 -1
  56. package/dist/components/sheet/Sheet.d.ts +3 -1
  57. package/dist/components/sheet/_cell.js +16 -27
  58. package/dist/components/sheet/_cell.js.map +1 -1
  59. package/dist/components/slider/Slider.d.ts +2 -2
  60. package/dist/components/slider/Slider.js +24 -41
  61. package/dist/components/slider/Slider.js.map +1 -1
  62. package/dist/components/tab/Tab.d.ts +3 -3
  63. package/dist/components/tab/Tab.js +6 -0
  64. package/dist/components/tab/Tab.js.map +1 -1
  65. package/dist/components/textarea/Textarea.d.ts +5 -13
  66. package/dist/components/textarea/Textarea.js +3 -2
  67. package/dist/components/textarea/Textarea.js.map +1 -1
  68. package/dist/components/time/Dial.js.map +1 -1
  69. package/dist/components/time/Dial.vue_vue_type_script_setup_true_lang.js.map +1 -1
  70. package/dist/components/time/TimePicker.d.ts +14 -2
  71. package/dist/components/tree-choose/TreeChoose.d.ts +1 -1
  72. package/dist/components/tree-choose/TreeChoose.js.map +1 -1
  73. package/dist/components/virtual/Virtual.d.ts +5 -5
  74. package/dist/components/virtual/Virtual.js +6 -0
  75. package/dist/components/virtual/Virtual.js.map +1 -1
  76. package/dist/index.d.ts +20 -15
  77. package/dist/index.js +6 -5
  78. package/dist/use/index.d.ts +2 -0
  79. package/dist/use/useChildComponentsCollector.d.ts +5 -0
  80. package/dist/use/useChildComponentsCollector.js.map +1 -1
  81. package/dist/use/usePercentDrag.d.ts +1 -1
  82. package/dist/use/usePercentDrag.js +19 -29
  83. package/dist/use/usePercentDrag.js.map +1 -1
  84. package/dist/use/usePointerDrag.d.ts +50 -0
  85. package/dist/use/usePointerDrag.js +143 -0
  86. package/dist/use/usePointerDrag.js.map +1 -0
  87. package/dist/use/useUII18n.d.ts +10 -0
  88. package/dist/use/useUII18n.js.map +1 -1
  89. package/dist/use/useUpload.js +1 -1
  90. package/dist/use/useUpload.js.map +1 -1
  91. package/package.json +79 -88
  92. package/dist/use/useDrag.d.ts +0 -17
@@ -19,7 +19,7 @@ import ChooseItem_default from "./chooseItem/ChooseItem.js";
19
19
  import Choose_default from "./choose/Choose.js";
20
20
  import Write_default from "./write/Write.js";
21
21
  import Choose2_default from "./choose2/Choose2.js";
22
- import CopyImpl from "./copy/Copy.js";
22
+ import Copy from "./copy/Copy.js";
23
23
  import CornerEars from "./cornerEars/CornerEars.js";
24
24
  import ColorPicker_default from "./colorPicker/ColorPicker.js";
25
25
  import Drawer_default from "./drawer/Drawer.js";
@@ -31,9 +31,9 @@ import Ellipsis_default from "./ellipsis/Ellipsis.js";
31
31
  import Equalizer_default from "./equalizer/Equalizer.js";
32
32
  import Form_default from "./form/Form.js";
33
33
  import FormItem_default from "./formItem/FormItem.js";
34
- import ImageImpl from "./image/Image.js";
34
+ import Image from "./image/Image.js";
35
35
  import SvgIcon, { resolvePlayModeIconName } from "./svgIcon/SvgIcon.js";
36
- import PictureImpl from "./picture/Picture.js";
36
+ import Picture from "./picture/Picture.js";
37
37
  import { LCD_FONT_FALLBACK } from "./lcdFont/config.js";
38
38
  import LcdFont_default from "./lcdFont/LcdFont.js";
39
39
  import Match_default from "./match/Match.js";
@@ -51,7 +51,7 @@ import Slider_default from "./slider/Slider.js";
51
51
  import Switch_default from "./switch/Switch.js";
52
52
  import TimePicker_default from "./time/TimePicker.js";
53
53
  import Tab from "./tab/Tab.js";
54
- import TextareaImpl from "./textarea/Textarea.js";
54
+ import Textarea from "./textarea/Textarea.js";
55
55
  import Tree from "./tree/Tree.js";
56
56
  import TreeChoose_default from "./tree-choose/TreeChoose.js";
57
57
  import Upload_default from "./upload/Upload.js";
@@ -70,7 +70,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
70
70
  Close: () => Close_default,
71
71
  ColorPicker: () => ColorPicker_default,
72
72
  Confirm: () => confirm_default,
73
- Copy: () => CopyImpl,
73
+ Copy: () => Copy,
74
74
  CornerEars: () => CornerEars,
75
75
  DATE_PICKER_FALLBACK: () => DATE_PICKER_FALLBACK,
76
76
  DatePicker: () => DatePicker_default,
@@ -83,7 +83,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
83
83
  FormItem: () => FormItem_default,
84
84
  ICON_FALLBACK: () => ICON_FALLBACK,
85
85
  Icon: () => Icon_default,
86
- Image: () => ImageImpl,
86
+ Image: () => Image,
87
87
  LCD_FONT_FALLBACK: () => LCD_FONT_FALLBACK,
88
88
  Layer: () => Layer_default,
89
89
  LcdFont: () => LcdFont_default,
@@ -95,7 +95,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
95
95
  Notice: () => NoticePlugin,
96
96
  Num: () => Number_default,
97
97
  Pagination: () => Pagination_default,
98
- Picture: () => PictureImpl,
98
+ Picture: () => Picture,
99
99
  Progress: () => Progress_default,
100
100
  Radio: () => Radio_default,
101
101
  Scrollbar: () => Scrollbar_default,
@@ -105,7 +105,7 @@ var components_exports = /* @__PURE__ */ __exportAll({
105
105
  SvgIcon: () => SvgIcon,
106
106
  Switch: () => Switch_default,
107
107
  Tab: () => Tab,
108
- Textarea: () => TextareaImpl,
108
+ Textarea: () => Textarea,
109
109
  TimePicker: () => TimePicker_default,
110
110
  Toggle: () => Toggle_default,
111
111
  Tooltip: () => Tooltip_default,
@@ -119,6 +119,6 @@ var components_exports = /* @__PURE__ */ __exportAll({
119
119
  resolvePlayModeIconName: () => resolvePlayModeIconName
120
120
  });
121
121
  //#endregion
122
- export { AudioPlayer_default as AudioPlayer, Btn, BtnGroup, Cascade_default as Cascade, Checkbox_default as Checkbox, Choose_default as Choose, Choose2_default as Choose2, ChooseItem_default as ChooseItem, CircleProgress_default as CircleProgress, Close_default as Close, ColorPicker_default as ColorPicker, confirm_default as Confirm, CopyImpl as Copy, CornerEars, DATE_PICKER_FALLBACK, DatePicker_default as DatePicker, Drawer_default as Drawer, Ellipsis_default as Ellipsis, Empty_default as Empty, Equalizer_default as Equalizer, Fallback_default as Fallback, Form_default as Form, FormItem_default as FormItem, ICON_FALLBACK, Icon_default as Icon, ImageImpl as Image, LCD_FONT_FALLBACK, Layer_default as Layer, LcdFont_default as LcdFont, List_default as List, Loading_default as Loading, Mask_default as Mask, Match_default as Match, Modal_default as Modal, NoticePlugin as Notice, Number_default as Num, Pagination_default as Pagination, PictureImpl as Picture, Progress_default as Progress, Radio_default as Radio, Scrollbar_default as Scrollbar, Sheet_default as Sheet, SlideDown_default as SlideDown, Slider_default as Slider, SvgIcon, Switch_default as Switch, Tab, TextareaImpl as Textarea, TimePicker_default as TimePicker, Toggle_default as Toggle, Tooltip_default as Tooltip, Tree, TreeChoose_default as TreeChoose, Trigger_default as Trigger, Upload_default as Upload, Virtual, Write_default as Write, components_exports, resolveIconName, resolvePlayModeIconName };
122
+ export { AudioPlayer_default as AudioPlayer, Btn, BtnGroup, Cascade_default as Cascade, Checkbox_default as Checkbox, Choose_default as Choose, Choose2_default as Choose2, ChooseItem_default as ChooseItem, CircleProgress_default as CircleProgress, Close_default as Close, ColorPicker_default as ColorPicker, confirm_default as Confirm, Copy, CornerEars, DATE_PICKER_FALLBACK, DatePicker_default as DatePicker, Drawer_default as Drawer, Ellipsis_default as Ellipsis, Empty_default as Empty, Equalizer_default as Equalizer, Fallback_default as Fallback, Form_default as Form, FormItem_default as FormItem, ICON_FALLBACK, Icon_default as Icon, Image, LCD_FONT_FALLBACK, Layer_default as Layer, LcdFont_default as LcdFont, List_default as List, Loading_default as Loading, Mask_default as Mask, Match_default as Match, Modal_default as Modal, NoticePlugin as Notice, Number_default as Num, Pagination_default as Pagination, Picture, Progress_default as Progress, Radio_default as Radio, Scrollbar_default as Scrollbar, Sheet_default as Sheet, SlideDown_default as SlideDown, Slider_default as Slider, SvgIcon, Switch_default as Switch, Tab, Textarea, TimePicker_default as TimePicker, Toggle_default as Toggle, Tooltip_default as Tooltip, Tree, TreeChoose_default as TreeChoose, Trigger_default as Trigger, Upload_default as Upload, Virtual, Write_default as Write, components_exports, resolveIconName, resolvePlayModeIconName };
123
123
 
124
124
  //# sourceMappingURL=index.js.map
@@ -367,7 +367,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
367
367
  direction: import('..').IconRotateDirection;
368
368
  ariaLabel: string;
369
369
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
370
- Btn: import('..').BtnComponent;
370
+ Btn: import('vue').DefineComponent<import('..').BtnJSXProps>;
371
371
  Loading: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
372
372
  name: {
373
373
  type: StringConstructor;
@@ -9,6 +9,7 @@ import Close_default from "../close/Close.js";
9
9
  import Loading_default from "../loading/Loading.js";
10
10
  import { useUII18n } from "../../use/useUII18n.js";
11
11
  import useScaleFromPoint, { captureScaleFromPoint } from "../../use/useScaleFromPoint.js";
12
+ import usePointerDrag from "../../use/usePointerDrag.js";
12
13
  import { MODAL_FALLBACK } from "./config.js";
13
14
  import { Fragment, Teleport, Transition, computed, createVNode, defineComponent, mergeProps, nextTick, reactive, ref, useTemplateRef, watch } from "vue";
14
15
  //#region components/modal/Modal.tsx
@@ -189,27 +190,34 @@ var Modal_default = /* @__PURE__ */ defineComponent({
189
190
  style: { "z-index": zIndex.value }
190
191
  }, null);
191
192
  }
192
- function onStartDrag(ev) {
193
- let offsetLeft = 0;
194
- let offsetTop = 0;
195
- if (modal.value) {
196
- offsetLeft = modal.value.offsetLeft;
197
- offsetTop = modal.value.offsetTop;
198
- setStyle(modal.value, { position: "absolute" });
199
- setStyle(modal.value, {
200
- left: offsetLeft + "px",
201
- top: offsetTop + "px",
202
- margin: 0
203
- });
204
- }
205
- ev.preventDefault();
206
- ev.stopImmediatePropagation();
207
- const disX = ev.clientX - offsetLeft;
208
- const disY = ev.clientY - offsetTop;
209
- const { inner } = getWindowSize();
210
- document.onmousemove = function(e) {
193
+ const { onMouseDown: onStartDrag } = usePointerDrag({
194
+ events: "mouse",
195
+ bind: "document",
196
+ onStart: (ev, ctx) => {
197
+ let offsetLeft = 0;
198
+ let offsetTop = 0;
199
+ if (modal.value) {
200
+ offsetLeft = modal.value.offsetLeft;
201
+ offsetTop = modal.value.offsetTop;
202
+ setStyle(modal.value, { position: "absolute" });
203
+ setStyle(modal.value, {
204
+ left: offsetLeft + "px",
205
+ top: offsetTop + "px",
206
+ margin: 0
207
+ });
208
+ }
209
+ ev.preventDefault();
210
+ ev.stopImmediatePropagation();
211
+ ctx.data.disX = ev.clientX - offsetLeft;
212
+ ctx.data.disY = ev.clientY - offsetTop;
213
+ ctx.data.inner = getWindowSize().inner;
214
+ },
215
+ onMove: (e, ctx) => {
211
216
  e.preventDefault();
212
217
  e.stopImmediatePropagation();
218
+ const disX = ctx.data.disX;
219
+ const disY = ctx.data.disY;
220
+ const inner = ctx.data.inner;
213
221
  let x = e.clientX;
214
222
  let y = e.clientY;
215
223
  if (x < 0) x = 0;
@@ -218,11 +226,8 @@ var Modal_default = /* @__PURE__ */ defineComponent({
218
226
  else if (y > inner.height) y = inner.height;
219
227
  pos.x = x - disX;
220
228
  pos.y = y - disY;
221
- document.onmouseup = function() {
222
- document.onmousemove = null;
223
- };
224
- };
225
- }
229
+ }
230
+ });
226
231
  return () => createVNode(Fragment, null, [
227
232
  ctx.slots.trigger?.({
228
233
  show: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","names":["Teleport","Transition","ref","computed","reactive","watch","defineComponent","nextTick","useTemplateRef","mergeProps","createVNode","_createVNode","Fragment","_Fragment","_mergeProps","Mask","Close","Btn","Loading","useGlobalZIndex","useComponentConfig","useScaleFromPoint","captureScaleFromPoint","useEscStack","getWindowSize","setStyle","propSizeToCssVars","toCssVarsStyle","useUII18n","MODAL_FALLBACK","inheritAttrs","name","components","props","show","type","Boolean","default","title","String","Object","Array","width","undefined","maxWidth","height","minHeight","maxHeight","okText","cancelText","beforeCancel","Function","hasMask","hasFooter","zIndex","Number","canCloseByClickSelf","to","HTMLElement","document","body","loading","size","cssVars","emits","_b","_el","enter","after-leave","_opts","after-cancel","setup","ctx","cfg","modal","emptyModal","showMask","showContainer","showEmptyModal","showModal","add","get","transformOrigin","measureOrigin","morphCss","fromTrigger","pinTriggerForLeave","unpinTrigger","pos","x","y","t","hasHeader","slots","resolvedOkText","value","resolvedCancelText","modalOptions","attrs","class","style","left","top","position","onClick","e","stopPropagation","v","immediate","force","setTimeout","hideFromInner","renderLoading","transitionName","onStartDrag","ev","offsetLeft","offsetTop","margin","preventDefault","stopImmediatePropagation","disX","clientX","disY","clientY","inner","onmousemove","onmouseup","trigger","hide","emit","el","onAfterLeave","footer"],"sources":["../../../components/modal/Modal.tsx"],"sourcesContent":["import type { PropType } from 'vue'\r\nimport {\r\n Teleport,\r\n Transition,\r\n Fragment,\r\n ref,\r\n computed,\r\n reactive,\r\n watch,\r\n defineComponent,\r\n nextTick,\r\n useTemplateRef,\r\n mergeProps,\r\n} from 'vue'\r\nimport Mask from '../mask/index'\r\nimport Close from '../close/index'\r\nimport Btn from '../btn/index'\r\nimport Loading from '../loading/index'\r\nimport type { LoadingComponentProps } from '../loading/type'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useScaleFromPoint, {\r\n captureScaleFromPoint,\r\n} from '../../use/useScaleFromPoint'\r\nimport useEscStack from '../../use/useEscStack'\r\nimport { getWindowSize, setStyle, propSizeToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { MODAL_FALLBACK } from './config'\r\n\r\nexport type { ModalGlobalConfig } from './config'\r\nexport { MODAL_FALLBACK } from './config'\r\n\r\ninterface IMethods {\r\n hide: () => void\r\n}\r\n\r\nexport default defineComponent({\r\n inheritAttrs: false,\r\n name: 'Modal',\r\n components: { Mask, Close, Btn, Loading },\r\n props: {\r\n show: { type: Boolean, default: false },\r\n title: [String, Object, Array],\r\n width: { type: String, default: undefined },\r\n maxWidth: { type: String, default: undefined },\r\n height: { type: String, default: undefined },\r\n minHeight: { type: String, default: undefined },\r\n maxHeight: { type: String, default: undefined },\r\n okText: { type: String, default: undefined },\r\n cancelText: { type: String, default: undefined },\r\n beforeCancel: Function,\r\n hasMask: { type: Boolean, default: undefined },\r\n hasFooter: { type: Boolean, default: undefined },\r\n zIndex: Number,\r\n canCloseByClickSelf: { type: Boolean, default: undefined },\r\n to: {\r\n type: HTMLElement,\r\n default: () => document.body,\r\n },\r\n type: {\r\n type: String as PropType<'white' | 'black'>,\r\n default: undefined,\r\n },\r\n loading: {\r\n type: Object as PropType<LoadingComponentProps>,\r\n default: () => ({ show: false }),\r\n },\r\n /** 尺度核 → `--w-prop-modal-size`(标题 / header / Close / Btn / Loading) */\r\n size: { type: Number, default: undefined },\r\n /** 实例 CSS 变量 */\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n emits: {\r\n 'update:show': (_b: boolean) => true,\r\n 'before-enter': (_el: HTMLElement) => true,\r\n enter: (_el: HTMLElement) => true,\r\n 'after-enter': (_el: HTMLElement) => true,\r\n 'after-leave': () => true,\r\n 'after-ok': (_opts: IMethods) => true,\r\n 'after-cancel': () => true,\r\n },\r\n setup(props, ctx) {\r\n const cfg = useComponentConfig('Modal', props, MODAL_FALLBACK)\r\n const modal = useTemplateRef<HTMLElement>('modal')\r\n const emptyModal = useTemplateRef<HTMLElement>('emodal')\r\n const showMask = ref(false)\r\n const showContainer = ref(false)\r\n const showEmptyModal = ref(false)\r\n const showModal = ref(false)\r\n const { zIndex, add, get } = useGlobalZIndex()\r\n const {\r\n transformOrigin,\r\n measureOrigin,\r\n morphCss,\r\n fromTrigger,\r\n pinTriggerForLeave,\r\n unpinTrigger,\r\n } = useScaleFromPoint('modal')\r\n const pos = reactive<{ x?: number; y?: number }>({\r\n x: undefined,\r\n y: undefined,\r\n })\r\n const { t } = useUII18n()\r\n\r\n const hasHeader = computed(() => !!(props.title || ctx.slots.title?.()))\r\n\r\n const resolvedOkText = computed(() => cfg.value.okText || t('modal.ok'))\r\n const resolvedCancelText = computed(\r\n () => cfg.value.cancelText || t('modal.cancel'),\r\n )\r\n\r\n const modalOptions = computed(() =>\r\n mergeProps(ctx.attrs, {\r\n class: [\r\n 'w-modal',\r\n `w-modal--${cfg.value.type}`,\r\n fromTrigger.value && 'w-scale-from-trigger',\r\n ],\r\n style: {\r\n ...toCssVarsStyle({\r\n ...propSizeToCssVars('modal', cfg.value.size),\r\n ...props.cssVars,\r\n }),\r\n '--w-modal-width': cfg.value.width,\r\n '--w-modal-max-width': cfg.value.maxWidth,\r\n '--w-modal-height': cfg.value.height,\r\n '--w-modal-min-height': cfg.value.minHeight,\r\n '--w-modal-max-height': cfg.value.maxHeight,\r\n transformOrigin: `${transformOrigin.x}px ${transformOrigin.y}px`,\r\n ...morphCss.value,\r\n left: pos.x === undefined ? '' : `${pos.x}px`,\r\n top: pos.y === undefined ? '' : `${pos.y}px`,\r\n position: pos.x === undefined ? '' : 'absolute',\r\n },\r\n onClick: (e: MouseEvent) => {\r\n e.stopPropagation()\r\n },\r\n }),\r\n )\r\n\r\n watch(\r\n () => props.show,\r\n (v) => {\r\n if (v) {\r\n showContainer.value = v\r\n } else {\r\n showModal.value = v\r\n showMask.value = v\r\n }\r\n },\r\n { immediate: true },\r\n )\r\n\r\n watch(\r\n showContainer,\r\n (v) => {\r\n if (v) {\r\n captureScaleFromPoint(null, { force: true })\r\n add()\r\n }\r\n setTimeout(async () => {\r\n if (!v) return\r\n showMask.value = v\r\n showEmptyModal.value = v\r\n await nextTick()\r\n measureOrigin(emptyModal.value)\r\n showEmptyModal.value = false\r\n await nextTick()\r\n showModal.value = v\r\n })\r\n },\r\n { immediate: true },\r\n )\r\n\r\n async function hideFromInner() {\r\n if (props.beforeCancel) {\r\n await props.beforeCancel()\r\n }\r\n showModal.value = false\r\n showMask.value = false\r\n }\r\n\r\n useEscStack(\r\n showContainer,\r\n () => {\r\n void hideFromInner()\r\n },\r\n () => props.zIndex || get(),\r\n )\r\n\r\n function renderLoading() {\r\n return (\r\n <Loading\r\n {...{\r\n ...props.loading,\r\n show: props.loading?.show,\r\n transitionName: 'w-fade-white',\r\n class: 'w-modal-loading',\r\n style: { 'z-index': zIndex.value },\r\n }}\r\n />\r\n )\r\n }\r\n\r\n function onStartDrag(ev: MouseEvent): void {\r\n let offsetLeft = 0\r\n let offsetTop = 0\r\n if (modal.value) {\r\n offsetLeft = modal.value.offsetLeft\r\n offsetTop = modal.value.offsetTop\r\n setStyle(modal.value, { position: 'absolute' })\r\n setStyle(modal.value, {\r\n left: offsetLeft + 'px',\r\n top: offsetTop + 'px',\r\n margin: 0,\r\n })\r\n }\r\n ev.preventDefault()\r\n ev.stopImmediatePropagation()\r\n const disX = ev.clientX - offsetLeft\r\n const disY = ev.clientY - offsetTop\r\n const { inner } = getWindowSize()\r\n document.onmousemove = function (e: MouseEvent) {\r\n e.preventDefault()\r\n e.stopImmediatePropagation()\r\n let x = e.clientX\r\n let y = e.clientY\r\n if (x < 0) x = 0\r\n else if (x > inner.width) x = inner.width\r\n if (y < 0) y = 0\r\n else if (y > inner.height) y = inner.height\r\n pos.x = x - disX\r\n pos.y = y - disY\r\n document.onmouseup = function () {\r\n document.onmousemove = null\r\n }\r\n }\r\n }\r\n\r\n return () => (\r\n <>\r\n {ctx.slots.trigger?.({\r\n show: () => {\r\n showContainer.value = true\r\n showMask.value = true\r\n },\r\n hide: hideFromInner,\r\n })}\r\n <Mask\r\n show={!!cfg.value.hasMask && showMask.value}\r\n zIndex={(props.zIndex || zIndex.value) - 1}\r\n to={props.to}\r\n class=\"w-mask--modal\"\r\n onUpdate:show={(v: boolean) => {\r\n ctx.emit('update:show', v)\r\n }}\r\n />\r\n {showContainer.value && (\r\n <Teleport to={props.to}>\r\n <div\r\n class=\"w-modal-container\"\r\n style={{ zIndex: props.zIndex || zIndex.value }}\r\n onClick={() => {\r\n if (cfg.value.canCloseByClickSelf) hideFromInner()\r\n }}>\r\n {showEmptyModal.value ? (\r\n <div {...modalOptions.value} ref=\"emodal\"></div>\r\n ) : null}\r\n <Transition\r\n name=\"w-scale\"\r\n onBeforeEnter={(el) => {\r\n ctx.emit('before-enter', el as HTMLElement)\r\n }}\r\n onEnter={(el) => {\r\n ctx.emit('enter', el as HTMLElement)\r\n }}\r\n onAfterEnter={(el) => {\r\n ctx.emit('after-enter', el as HTMLElement)\r\n }}\r\n onBeforeLeave={(el) => {\r\n pinTriggerForLeave(\r\n props.zIndex || zIndex.value,\r\n el as HTMLElement,\r\n )\r\n }}\r\n onAfterLeave={() => {\r\n showContainer.value = false\r\n ctx.emit('after-leave')\r\n ctx.emit('update:show', false)\r\n nextTick(() => unpinTrigger())\r\n }}>\r\n {showModal.value && (\r\n <div {...modalOptions.value} ref=\"modal\">\r\n <Close class=\"w-modal-close\" onClick={hideFromInner} />\r\n {hasHeader.value ? (\r\n <div class=\"w-modal-header\">\r\n {ctx.slots.title?.() || (\r\n <span class=\"w-modal-title\">{props.title}</span>\r\n )}\r\n <span\r\n class=\"w-modal-dragger\"\r\n onMousedown={onStartDrag}></span>\r\n </div>\r\n ) : null}\r\n <div class=\"w-modal-body\">\r\n {ctx.slots.default?.({ hide: hideFromInner })}\r\n </div>\r\n {cfg.value.hasFooter\r\n ? ctx.slots.footer?.({ hide: hideFromInner }) || (\r\n <div class=\"w-modal-footer\">\r\n <div>\r\n {ctx.slots['footer-prepend']?.({\r\n hide: hideFromInner,\r\n })}\r\n </div>\r\n <div>\r\n <Btn\r\n onClick={() => {\r\n hideFromInner()\r\n ctx.emit('after-cancel')\r\n }}>\r\n {resolvedCancelText.value}\r\n </Btn>\r\n <Btn\r\n disabled={props.loading?.show}\r\n type=\"primary\"\r\n onClick={() => {\r\n ctx.emit('after-ok', {\r\n hide: hideFromInner,\r\n })\r\n }}>\r\n {resolvedOkText.value}\r\n </Btn>\r\n </div>\r\n </div>\r\n )\r\n : null}\r\n {renderLoading()}\r\n </div>\r\n )}\r\n </Transition>\r\n </div>\r\n </Teleport>\r\n )}\r\n </>\r\n )\r\n },\r\n})\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","names":["Teleport","Transition","ref","computed","reactive","watch","defineComponent","nextTick","useTemplateRef","mergeProps","createVNode","_createVNode","Fragment","_Fragment","_mergeProps","Mask","Close","Btn","Loading","useGlobalZIndex","useComponentConfig","useScaleFromPoint","captureScaleFromPoint","useEscStack","usePointerDrag","getWindowSize","setStyle","propSizeToCssVars","toCssVarsStyle","useUII18n","MODAL_FALLBACK","inheritAttrs","name","components","props","show","type","Boolean","default","title","String","Object","Array","width","undefined","maxWidth","height","minHeight","maxHeight","okText","cancelText","beforeCancel","Function","hasMask","hasFooter","zIndex","Number","canCloseByClickSelf","to","HTMLElement","document","body","loading","size","cssVars","emits","_b","_el","enter","after-leave","_opts","after-cancel","setup","ctx","cfg","modal","emptyModal","showMask","showContainer","showEmptyModal","showModal","add","get","transformOrigin","measureOrigin","morphCss","fromTrigger","pinTriggerForLeave","unpinTrigger","pos","x","y","t","hasHeader","slots","resolvedOkText","value","resolvedCancelText","modalOptions","attrs","class","style","left","top","position","onClick","e","stopPropagation","v","immediate","force","setTimeout","hideFromInner","renderLoading","transitionName","onMouseDown","onStartDrag","events","bind","onStart","ev","offsetLeft","offsetTop","margin","preventDefault","stopImmediatePropagation","data","disX","clientX","disY","clientY","inner","onMove","trigger","hide","emit","el","onAfterLeave","footer"],"sources":["../../../components/modal/Modal.tsx"],"sourcesContent":["import type { PropType } from 'vue'\r\nimport {\r\n Teleport,\r\n Transition,\r\n Fragment,\r\n ref,\r\n computed,\r\n reactive,\r\n watch,\r\n defineComponent,\r\n nextTick,\r\n useTemplateRef,\r\n mergeProps,\r\n} from 'vue'\r\nimport Mask from '../mask/index'\r\nimport Close from '../close/index'\r\nimport Btn from '../btn/index'\r\nimport Loading from '../loading/index'\r\nimport type { LoadingComponentProps } from '../loading/type'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useScaleFromPoint, {\r\n captureScaleFromPoint,\r\n} from '../../use/useScaleFromPoint'\r\nimport useEscStack from '../../use/useEscStack'\r\nimport usePointerDrag from '../../use/usePointerDrag'\r\nimport { getWindowSize, setStyle, propSizeToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { MODAL_FALLBACK } from './config'\r\n\r\nexport type { ModalGlobalConfig } from './config'\r\nexport { MODAL_FALLBACK } from './config'\r\n\r\ninterface IMethods {\r\n hide: () => void\r\n}\r\n\r\nexport default defineComponent({\r\n inheritAttrs: false,\r\n name: 'Modal',\r\n components: { Mask, Close, Btn, Loading },\r\n props: {\r\n show: { type: Boolean, default: false },\r\n title: [String, Object, Array],\r\n width: { type: String, default: undefined },\r\n maxWidth: { type: String, default: undefined },\r\n height: { type: String, default: undefined },\r\n minHeight: { type: String, default: undefined },\r\n maxHeight: { type: String, default: undefined },\r\n okText: { type: String, default: undefined },\r\n cancelText: { type: String, default: undefined },\r\n beforeCancel: Function,\r\n hasMask: { type: Boolean, default: undefined },\r\n hasFooter: { type: Boolean, default: undefined },\r\n zIndex: Number,\r\n canCloseByClickSelf: { type: Boolean, default: undefined },\r\n to: {\r\n type: HTMLElement,\r\n default: () => document.body,\r\n },\r\n type: {\r\n type: String as PropType<'white' | 'black'>,\r\n default: undefined,\r\n },\r\n loading: {\r\n type: Object as PropType<LoadingComponentProps>,\r\n default: () => ({ show: false }),\r\n },\r\n /** 尺度核 → `--w-prop-modal-size`(标题 / header / Close / Btn / Loading) */\r\n size: { type: Number, default: undefined },\r\n /** 实例 CSS 变量 */\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n emits: {\r\n 'update:show': (_b: boolean) => true,\r\n 'before-enter': (_el: HTMLElement) => true,\r\n enter: (_el: HTMLElement) => true,\r\n 'after-enter': (_el: HTMLElement) => true,\r\n 'after-leave': () => true,\r\n 'after-ok': (_opts: IMethods) => true,\r\n 'after-cancel': () => true,\r\n },\r\n setup(props, ctx) {\r\n const cfg = useComponentConfig('Modal', props, MODAL_FALLBACK)\r\n const modal = useTemplateRef<HTMLElement>('modal')\r\n const emptyModal = useTemplateRef<HTMLElement>('emodal')\r\n const showMask = ref(false)\r\n const showContainer = ref(false)\r\n const showEmptyModal = ref(false)\r\n const showModal = ref(false)\r\n const { zIndex, add, get } = useGlobalZIndex()\r\n const {\r\n transformOrigin,\r\n measureOrigin,\r\n morphCss,\r\n fromTrigger,\r\n pinTriggerForLeave,\r\n unpinTrigger,\r\n } = useScaleFromPoint('modal')\r\n const pos = reactive<{ x?: number; y?: number }>({\r\n x: undefined,\r\n y: undefined,\r\n })\r\n const { t } = useUII18n()\r\n\r\n const hasHeader = computed(() => !!(props.title || ctx.slots.title?.()))\r\n\r\n const resolvedOkText = computed(() => cfg.value.okText || t('modal.ok'))\r\n const resolvedCancelText = computed(\r\n () => cfg.value.cancelText || t('modal.cancel'),\r\n )\r\n\r\n const modalOptions = computed(() =>\r\n mergeProps(ctx.attrs, {\r\n class: [\r\n 'w-modal',\r\n `w-modal--${cfg.value.type}`,\r\n fromTrigger.value && 'w-scale-from-trigger',\r\n ],\r\n style: {\r\n ...toCssVarsStyle({\r\n ...propSizeToCssVars('modal', cfg.value.size),\r\n ...props.cssVars,\r\n }),\r\n '--w-modal-width': cfg.value.width,\r\n '--w-modal-max-width': cfg.value.maxWidth,\r\n '--w-modal-height': cfg.value.height,\r\n '--w-modal-min-height': cfg.value.minHeight,\r\n '--w-modal-max-height': cfg.value.maxHeight,\r\n transformOrigin: `${transformOrigin.x}px ${transformOrigin.y}px`,\r\n ...morphCss.value,\r\n left: pos.x === undefined ? '' : `${pos.x}px`,\r\n top: pos.y === undefined ? '' : `${pos.y}px`,\r\n position: pos.x === undefined ? '' : 'absolute',\r\n },\r\n onClick: (e: MouseEvent) => {\r\n e.stopPropagation()\r\n },\r\n }),\r\n )\r\n\r\n watch(\r\n () => props.show,\r\n (v) => {\r\n if (v) {\r\n showContainer.value = v\r\n } else {\r\n showModal.value = v\r\n showMask.value = v\r\n }\r\n },\r\n { immediate: true },\r\n )\r\n\r\n watch(\r\n showContainer,\r\n (v) => {\r\n if (v) {\r\n captureScaleFromPoint(null, { force: true })\r\n add()\r\n }\r\n setTimeout(async () => {\r\n if (!v) return\r\n showMask.value = v\r\n showEmptyModal.value = v\r\n await nextTick()\r\n measureOrigin(emptyModal.value)\r\n showEmptyModal.value = false\r\n await nextTick()\r\n showModal.value = v\r\n })\r\n },\r\n { immediate: true },\r\n )\r\n\r\n async function hideFromInner() {\r\n if (props.beforeCancel) {\r\n await props.beforeCancel()\r\n }\r\n showModal.value = false\r\n showMask.value = false\r\n }\r\n\r\n useEscStack(\r\n showContainer,\r\n () => {\r\n void hideFromInner()\r\n },\r\n () => props.zIndex || get(),\r\n )\r\n\r\n function renderLoading() {\r\n return (\r\n <Loading\r\n {...{\r\n ...props.loading,\r\n show: props.loading?.show,\r\n transitionName: 'w-fade-white',\r\n class: 'w-modal-loading',\r\n style: { 'z-index': zIndex.value },\r\n }}\r\n />\r\n )\r\n }\r\n\r\n const { onMouseDown: onStartDrag } = usePointerDrag({\r\n events: 'mouse',\r\n bind: 'document',\r\n onStart: (ev, ctx) => {\r\n let offsetLeft = 0\r\n let offsetTop = 0\r\n if (modal.value) {\r\n offsetLeft = modal.value.offsetLeft\r\n offsetTop = modal.value.offsetTop\r\n setStyle(modal.value, { position: 'absolute' })\r\n setStyle(modal.value, {\r\n left: offsetLeft + 'px',\r\n top: offsetTop + 'px',\r\n margin: 0,\r\n })\r\n }\r\n ev.preventDefault()\r\n ev.stopImmediatePropagation()\r\n ctx.data.disX = ev.clientX - offsetLeft\r\n ctx.data.disY = ev.clientY - offsetTop\r\n ctx.data.inner = getWindowSize().inner\r\n },\r\n onMove: (e, ctx) => {\r\n e.preventDefault()\r\n e.stopImmediatePropagation()\r\n const disX = ctx.data.disX as number\r\n const disY = ctx.data.disY as number\r\n const inner = ctx.data.inner as { width: number; height: number }\r\n let x = e.clientX\r\n let y = e.clientY\r\n if (x < 0) x = 0\r\n else if (x > inner.width) x = inner.width\r\n if (y < 0) y = 0\r\n else if (y > inner.height) y = inner.height\r\n pos.x = x - disX\r\n pos.y = y - disY\r\n },\r\n })\r\n\r\n return () => (\r\n <>\r\n {ctx.slots.trigger?.({\r\n show: () => {\r\n showContainer.value = true\r\n showMask.value = true\r\n },\r\n hide: hideFromInner,\r\n })}\r\n <Mask\r\n show={!!cfg.value.hasMask && showMask.value}\r\n zIndex={(props.zIndex || zIndex.value) - 1}\r\n to={props.to}\r\n class=\"w-mask--modal\"\r\n onUpdate:show={(v: boolean) => {\r\n ctx.emit('update:show', v)\r\n }}\r\n />\r\n {showContainer.value && (\r\n <Teleport to={props.to}>\r\n <div\r\n class=\"w-modal-container\"\r\n style={{ zIndex: props.zIndex || zIndex.value }}\r\n onClick={() => {\r\n if (cfg.value.canCloseByClickSelf) hideFromInner()\r\n }}>\r\n {showEmptyModal.value ? (\r\n <div {...modalOptions.value} ref=\"emodal\"></div>\r\n ) : null}\r\n <Transition\r\n name=\"w-scale\"\r\n onBeforeEnter={(el) => {\r\n ctx.emit('before-enter', el as HTMLElement)\r\n }}\r\n onEnter={(el) => {\r\n ctx.emit('enter', el as HTMLElement)\r\n }}\r\n onAfterEnter={(el) => {\r\n ctx.emit('after-enter', el as HTMLElement)\r\n }}\r\n onBeforeLeave={(el) => {\r\n pinTriggerForLeave(\r\n props.zIndex || zIndex.value,\r\n el as HTMLElement,\r\n )\r\n }}\r\n onAfterLeave={() => {\r\n showContainer.value = false\r\n ctx.emit('after-leave')\r\n ctx.emit('update:show', false)\r\n nextTick(() => unpinTrigger())\r\n }}>\r\n {showModal.value && (\r\n <div {...modalOptions.value} ref=\"modal\">\r\n <Close class=\"w-modal-close\" onClick={hideFromInner} />\r\n {hasHeader.value ? (\r\n <div class=\"w-modal-header\">\r\n {ctx.slots.title?.() || (\r\n <span class=\"w-modal-title\">{props.title}</span>\r\n )}\r\n <span\r\n class=\"w-modal-dragger\"\r\n onMousedown={onStartDrag}></span>\r\n </div>\r\n ) : null}\r\n <div class=\"w-modal-body\">\r\n {ctx.slots.default?.({ hide: hideFromInner })}\r\n </div>\r\n {cfg.value.hasFooter\r\n ? ctx.slots.footer?.({ hide: hideFromInner }) || (\r\n <div class=\"w-modal-footer\">\r\n <div>\r\n {ctx.slots['footer-prepend']?.({\r\n hide: hideFromInner,\r\n })}\r\n </div>\r\n <div>\r\n <Btn\r\n onClick={() => {\r\n hideFromInner()\r\n ctx.emit('after-cancel')\r\n }}>\r\n {resolvedCancelText.value}\r\n </Btn>\r\n <Btn\r\n disabled={props.loading?.show}\r\n type=\"primary\"\r\n onClick={() => {\r\n ctx.emit('after-ok', {\r\n hide: hideFromInner,\r\n })\r\n }}>\r\n {resolvedOkText.value}\r\n </Btn>\r\n </div>\r\n </div>\r\n )\r\n : null}\r\n {renderLoading()}\r\n </div>\r\n )}\r\n </Transition>\r\n </div>\r\n </Teleport>\r\n )}\r\n </>\r\n )\r\n },\r\n})\r\n"],"mappings":";;;;;;;;;;;;;;;AAqCA,IAAA,gBAAeM,gCAAgB;CAC7ByB,cAAc;CACdC,MAAM;CACNC,YAAY;EAAElB,MAAAA;EAAMC,OAAAA;EAAOC;EAAKC,SAAAA;CAAQ;CACxCgB,OAAO;EACLC,MAAM;GAAEC,MAAMC;GAASC,SAAS;EAAM;EACtCC,OAAO;GAACC;GAAQC;GAAQC;EAAK;EAC7BC,OAAO;GAAEP,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC1CC,UAAU;GAAET,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC7CE,QAAQ;GAAEV,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC3CG,WAAW;GAAEX,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC9CI,WAAW;GAAEZ,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC9CK,QAAQ;GAAEb,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC3CM,YAAY;GAAEd,MAAMI;GAAQF,SAASM,KAAAA;EAAU;EAC/CO,cAAcC;EACdC,SAAS;GAAEjB,MAAMC;GAASC,SAASM,KAAAA;EAAU;EAC7CU,WAAW;GAAElB,MAAMC;GAASC,SAASM,KAAAA;EAAU;EAC/CW,QAAQC;EACRC,qBAAqB;GAAErB,MAAMC;GAASC,SAASM,KAAAA;EAAU;EACzDc,IAAI;GACFtB,MAAMuB;GACNrB,eAAesB,SAASC;EAC1B;EACAzB,MAAM;GACJA,MAAMI;GACNF,SAASM,KAAAA;EACX;EACAkB,SAAS;GACP1B,MAAMK;GACNH,gBAAgB,EAAEH,MAAM,MAAM;EAChC;;EAEA4B,MAAM;GAAE3B,MAAMoB;GAAQlB,SAASM,KAAAA;EAAU;;EAEzCoB,SAAS;GAAE5B,MAAMK;GAA6BH,SAASM,KAAAA;EAAU;CACnE;CACAqB,OAAO;EACL,gBAAgBC,OAAgB;EAChC,iBAAiBC,QAAqB;EACtCC,QAAQD,QAAqB;EAC7B,gBAAgBA,QAAqB;EACrC,qBAAqB;EACrB,aAAaG,UAAoB;EACjC,sBAAsB;CACxB;CACAE,MAAMtC,OAAOuC,KAAK;EAChB,MAAMC,MAAMtD,mBAAmB,SAASc,OAAOJ,cAAc;EAC7D,MAAM6C,QAAQnE,eAA4B,OAAO;EACjD,MAAMoE,aAAapE,eAA4B,QAAQ;EACvD,MAAMqE,WAAW3E,IAAI,KAAK;EAC1B,MAAM4E,gBAAgB5E,IAAI,KAAK;EAC/B,MAAM6E,iBAAiB7E,IAAI,KAAK;EAChC,MAAM8E,YAAY9E,IAAI,KAAK;EAC3B,MAAM,EAAEqD,QAAQ0B,KAAKC,QAAQ/D,gBAAgB;EAC7C,MAAM,EACJgE,iBACAC,eACAC,UACAC,aACAC,oBACAC,iBACEnE,kBAAkB,OAAO;EAC7B,MAAMoE,MAAMrF,SAAqC;GAC/CsF,GAAG9C,KAAAA;GACH+C,GAAG/C,KAAAA;EACL,CAAC;EACD,MAAM,EAAEgD,MAAM/D,UAAU;EAExB,MAAMgE,YAAY1F,eAAe,CAAC,EAAE+B,MAAMK,SAASkC,IAAIqB,MAAMvD,QAAQ,EAAE;EAEvE,MAAMwD,iBAAiB5F,eAAeuE,IAAIsB,MAAM/C,UAAU2C,EAAE,UAAU,CAAC;EACvE,MAAMK,qBAAqB9F,eACnBuE,IAAIsB,MAAM9C,cAAc0C,EAAE,cAAc,CAChD;EAEA,MAAMM,eAAe/F,eACnBM,WAAWgE,IAAI0B,OAAO;GACpBC,OAAO;IACL;IACA,YAAY1B,IAAIsB,MAAM5D;IACtBkD,YAAYU,SAAS;GAAsB;GAE7CK,OAAO;IACL,GAAGzE,eAAe;KAChB,GAAGD,kBAAkB,SAAS+C,IAAIsB,MAAMjC,IAAI;KAC5C,GAAG7B,MAAM8B;IACX,CAAC;IACD,mBAAmBU,IAAIsB,MAAMrD;IAC7B,uBAAuB+B,IAAIsB,MAAMnD;IACjC,oBAAoB6B,IAAIsB,MAAMlD;IAC9B,wBAAwB4B,IAAIsB,MAAMjD;IAClC,wBAAwB2B,IAAIsB,MAAMhD;IAClCmC,iBAAiB,GAAGA,gBAAgBO,EAAC,KAAMP,gBAAgBQ,EAAC;IAC5D,GAAGN,SAASW;IACZM,MAAMb,IAAIC,MAAM9C,KAAAA,IAAY,KAAK,GAAG6C,IAAIC,EAAC;IACzCa,KAAKd,IAAIE,MAAM/C,KAAAA,IAAY,KAAK,GAAG6C,IAAIE,EAAC;IACxCa,UAAUf,IAAIC,MAAM9C,KAAAA,IAAY,KAAK;GACvC;GACA6D,UAAUC,MAAkB;IAC1BA,EAAEC,gBAAgB;GACpB;EACF,CAAC,CACH;EAEAtG,YACQ6B,MAAMC,OACXyE,MAAM;GACL,IAAIA,GACF9B,cAAckB,QAAQY;QACjB;IACL5B,UAAUgB,QAAQY;IAClB/B,SAASmB,QAAQY;GACnB;EACF,GACA,EAAEC,WAAW,KAAK,CACpB;EAEAxG,MACEyE,gBACC8B,MAAM;GACL,IAAIA,GAAG;IACLtF,sBAAsB,MAAM,EAAEwF,OAAO,KAAK,CAAC;IAC3C7B,IAAI;GACN;GACA8B,WAAW,YAAY;IACrB,IAAI,CAACH,GAAG;IACR/B,SAASmB,QAAQY;IACjB7B,eAAeiB,QAAQY;IACvB,MAAMrG,SAAS;IACf6E,cAAcR,WAAWoB,KAAK;IAC9BjB,eAAeiB,QAAQ;IACvB,MAAMzF,SAAS;IACfyE,UAAUgB,QAAQY;GACpB,CAAC;EACH,GACA,EAAEC,WAAW,KAAK,CACpB;EAEA,eAAeG,gBAAgB;GAC7B,IAAI9E,MAAMiB,cACR,MAAMjB,MAAMiB,aAAa;GAE3B6B,UAAUgB,QAAQ;GAClBnB,SAASmB,QAAQ;EACnB;EAEAzE,YACEuD,qBACM;GACJ,cAAmB;EACrB,SACM5C,MAAMqB,UAAU2B,IAAI,CAC5B;EAEA,SAAS+B,gBAAgB;GACvB,OAAAtG,YAAAO,iBAAA;IAGM,GAAGgB,MAAM4B;IACT3B,MAAMD,MAAM4B,SAAS3B;IACrB+E,gBAAgB;IAChBd,OAAO;IACPC,OAAO,EAAE,WAAW9C,OAAOyC,MAAM;GAAC,GAAA,IAAA;EAI1C;EAEA,MAAM,EAAEmB,aAAaC,gBAAgB5F,eAAe;GAClD6F,QAAQ;GACRC,MAAM;GACNC,UAAUC,IAAI/C,QAAQ;IACpB,IAAIgD,aAAa;IACjB,IAAIC,YAAY;IAChB,IAAI/C,MAAMqB,OAAO;KACfyB,aAAa9C,MAAMqB,MAAMyB;KACzBC,YAAY/C,MAAMqB,MAAM0B;KACxBhG,SAASiD,MAAMqB,OAAO,EAAEQ,UAAU,WAAW,CAAC;KAC9C9E,SAASiD,MAAMqB,OAAO;MACpBM,MAAMmB,aAAa;MACnBlB,KAAKmB,YAAY;MACjBC,QAAQ;KACV,CAAC;IACH;IACAH,GAAGI,eAAe;IAClBJ,GAAGK,yBAAyB;IAC5BpD,IAAIqD,KAAKC,OAAOP,GAAGQ,UAAUP;IAC7BhD,IAAIqD,KAAKG,OAAOT,GAAGU,UAAUR;IAC7BjD,IAAIqD,KAAKK,QAAQ1G,cAAc,CAAC,CAAC0G;GACnC;GACAC,SAAS1B,GAAGjC,QAAQ;IAClBiC,EAAEkB,eAAe;IACjBlB,EAAEmB,yBAAyB;IAC3B,MAAME,OAAOtD,IAAIqD,KAAKC;IACtB,MAAME,OAAOxD,IAAIqD,KAAKG;IACtB,MAAME,QAAQ1D,IAAIqD,KAAKK;IACvB,IAAIzC,IAAIgB,EAAEsB;IACV,IAAIrC,IAAIe,EAAEwB;IACV,IAAIxC,IAAI,GAAGA,IAAI;SACV,IAAIA,IAAIyC,MAAMxF,OAAO+C,IAAIyC,MAAMxF;IACpC,IAAIgD,IAAI,GAAGA,IAAI;SACV,IAAIA,IAAIwC,MAAMrF,QAAQ6C,IAAIwC,MAAMrF;IACrC2C,IAAIC,IAAIA,IAAIqC;IACZtC,IAAIE,IAAIA,IAAIsC;GACd;EACF,CAAC;EAED,aAAOtH,YAAAE,UAAA,MAAA;GAEF4D,IAAIqB,MAAMuC,UAAU;IACnBlG,YAAY;KACV2C,cAAckB,QAAQ;KACtBnB,SAASmB,QAAQ;IACnB;IACAsC,MAAMtB;GACR,CAAC;GAACrG,YAAAI,cAAA;IAAA,QAEM,CAAC,CAAC2D,IAAIsB,MAAM3C,WAAWwB,SAASmB;IAAK,WAClC9D,MAAMqB,UAAUA,OAAOyC,SAAS;IAAC,MACtC9D,MAAMwB;IAAE,SAAA;IAAA,kBAEIkD,MAAe;KAC7BnC,IAAI8D,KAAK,eAAe3B,CAAC;IAC3B;GAAC,GAAA,IAAA;GAEF9B,cAAckB,SAAKrF,YAAAX,UAAA,EAAA,MACJkC,MAAMwB,GAAE,GAAA,EAAApB,eAAA,CAAA3B,YAAA,OAAA;IAAA,SAAA;IAAA,SAGX,EAAE4C,QAAQrB,MAAMqB,UAAUA,OAAOyC,MAAM;IAAC,iBAChC;KACb,IAAItB,IAAIsB,MAAMvC,qBAAqBuD,cAAc;IACnD;GAAC,GAAA,CACAjC,eAAeiB,QAAKrF,YAAA,OAAAG,WACVoF,aAAaF,OAAK,EAAA,OAAA,SAAA,CAAA,GAAA,IAAA,IACzB,MAAIrF,YAAAV,YAAA;IAAA,QAAA;IAAA,kBAGUuI,OAAO;KACrB/D,IAAI8D,KAAK,gBAAgBC,EAAiB;IAC5C;IAAC,YACSA,OAAO;KACf/D,IAAI8D,KAAK,SAASC,EAAiB;IACrC;IAAC,iBACcA,OAAO;KACpB/D,IAAI8D,KAAK,eAAeC,EAAiB;IAC3C;IAAC,kBACeA,OAAO;KACrBjD,mBACErD,MAAMqB,UAAUA,OAAOyC,OACvBwC,EACF;IACF;IAAC,sBACmB;KAClB1D,cAAckB,QAAQ;KACtBvB,IAAI8D,KAAK,aAAa;KACtB9D,IAAI8D,KAAK,eAAe,KAAK;KAC7BhI,eAAeiF,aAAa,CAAC;IAC/B;GAAC,GAAA,EAAAlD,eAAA,CACA0C,UAAUgB,SAAKrF,YAAA,OAAAG,WACLoF,aAAaF,OAAK,EAAA,OAAA,QAAA,CAAA,GAAA;IAAArF,YAAAK,eAAA;KAAA,SAAA;KAAA,WACagG;IAAa,GAAA,IAAA;IAClDnB,UAAUG,QAAKrF,YAAA,OAAA,EAAA,SAAA,iBAAA,GAAA,CAEX8D,IAAIqB,MAAMvD,QAAQ,KAAC5B,YAAA,QAAA,EAAA,SAAA,gBAAA,GAAA,CACWuB,MAAMK,KAAK,CAAA,GACzC5B,YAAA,QAAA;KAAA,SAAA;KAAA,eAGcyG;IAAW,GAAA,IAAA,CAAA,CAAA,IAE1B;IAAIzG,YAAA,OAAA,EAAA,SAAA,eAAA,GAAA,CAEL8D,IAAIqB,MAAMxD,UAAU,EAAEgG,MAAMtB,cAAc,CAAC,CAAC,CAAA;IAE9CtC,IAAIsB,MAAM1C,YACPmB,IAAIqB,MAAM4C,SAAS,EAAEJ,MAAMtB,cAAc,CAAC,KAACrG,YAAA,OAAA,EAAA,SAAA,iBAAA,GAAA,CAAAA,YAAA,OAAA,MAAA,CAGpC8D,IAAIqB,MAAM,iBAAiB,GAAG,EAC7BwC,MAAMtB,cACR,CAAC,CAAC,CAAA,GAAArG,YAAA,OAAA,MAAA,CAAAA,YAAAM,KAAA,EAAA,iBAIe;KACb+F,cAAc;KACdvC,IAAI8D,KAAK,cAAc;IACzB,EAAC,GAAA,EAAAjG,eAAA,CACA2D,mBAAmBD,KAAK,EAAA,CAAA,GAAArF,YAAAM,KAAA;KAAA,YAGfiB,MAAM4B,SAAS3B;KAAI,QAAA;KAAA,iBAEd;MACbsC,IAAI8D,KAAK,YAAY,EACnBD,MAAMtB,cACR,CAAC;KACH;IAAC,GAAA,EAAA1E,eAAA,CACAyD,eAAeC,KAAK,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAK7B;IACHiB,cAAc;GAAC,CAAA,CAEnB,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;EAIR,CAAA;CAGP;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { NoticePlacementType } from '../types';
1
+ import { NoticePlacementType } from '../../types';
2
2
  declare function createNoticeWrapper(placement: NoticePlacementType | string, options?: {
3
3
  offset?: number | string;
4
4
  zIndex?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../components/notice/src/_util/index.ts"],"sourcesContent":["import useGlobalZIndex from '../../../../use/useGlobalZIndex'\r\nimport type { NoticePlacementType } from '../types'\r\n\r\ninterface WrapperType {\r\n [k: string]: HTMLElement\r\n}\r\n\r\nlet WRAPPERS: WrapperType = {}\r\n\r\nfunction normalizeOffset(offset?: number | string) {\r\n if (offset === undefined || offset === null || offset === '') return undefined\r\n return typeof offset === 'number' ? `${offset}px` : String(offset)\r\n}\r\n\r\nfunction applyWrapperStyle(\r\n el: HTMLElement,\r\n options?: {\r\n offset?: number | string\r\n zIndex?: number\r\n wrapperClass?: any\r\n wrapperStyle?: Record<string, string>\r\n },\r\n) {\r\n const { offset, zIndex, wrapperClass, wrapperStyle } = options || {}\r\n\r\n if (wrapperClass) {\r\n const extra = Array.isArray(wrapperClass)\r\n ? wrapperClass.filter(Boolean).join(' ')\r\n : typeof wrapperClass === 'string'\r\n ? wrapperClass\r\n : Object.keys(wrapperClass)\r\n .filter((k) => (wrapperClass as Record<string, boolean>)[k])\r\n .join(' ')\r\n const base = el.getAttribute('data-base-class') || el.className\r\n if (!el.getAttribute('data-base-class')) {\r\n el.setAttribute('data-base-class', el.className)\r\n }\r\n el.className = `${el.getAttribute('data-base-class')} ${extra}`.trim()\r\n }\r\n\r\n if (wrapperStyle) {\r\n Object.assign(el.style, wrapperStyle)\r\n }\r\n\r\n const offsetValue = normalizeOffset(offset)\r\n if (offsetValue) {\r\n el.style.setProperty('--w-notice-offset', offsetValue)\r\n }\r\n\r\n if (typeof zIndex === 'number') {\r\n el.style.zIndex = String(zIndex)\r\n }\r\n}\r\n\r\nfunction createNoticeWrapper(\r\n placement: NoticePlacementType | string,\r\n options?: {\r\n offset?: number | string\r\n zIndex?: number\r\n wrapperClass?: any\r\n wrapperStyle?: Record<string, string>\r\n },\r\n) {\r\n const { zIndex, add } = useGlobalZIndex()\r\n\r\n if (placement in WRAPPERS) {\r\n const el = WRAPPERS[placement]\r\n el.style.zIndex =\r\n options?.zIndex != null ? String(options.zIndex) : String(add())\r\n applyWrapperStyle(el, options)\r\n return el\r\n }\r\n\r\n const el = document.createElement('div')\r\n const id = `notice_container_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`\r\n const klass = `w-notice w-notice--${placement}`\r\n el.id = id\r\n el.className = klass\r\n el.setAttribute('data-base-class', klass)\r\n el.style.zIndex =\r\n options?.zIndex != null ? String(options.zIndex) : String(zIndex.value)\r\n applyWrapperStyle(el, options)\r\n WRAPPERS[placement] = el\r\n document.body.appendChild(el)\r\n return el\r\n}\r\n\r\nfunction removeNoticeWrapper(el: HTMLElement) {\r\n let p = ''\r\n for (const pla in WRAPPERS) {\r\n if (WRAPPERS[pla] === el) {\r\n p = pla\r\n }\r\n }\r\n if (p) {\r\n if (el.parentNode) {\r\n document.body.removeChild(el)\r\n }\r\n delete WRAPPERS[p]\r\n }\r\n}\r\n\r\nfunction clearNoticeWrapper() {\r\n for (const p in WRAPPERS) {\r\n if (WRAPPERS[p]) {\r\n if (WRAPPERS[p].parentNode) {\r\n document.body.removeChild(WRAPPERS[p])\r\n }\r\n delete WRAPPERS[p]\r\n }\r\n }\r\n}\r\n\r\nfunction getWrapperCount(placement?: string) {\r\n if (placement) {\r\n const el = WRAPPERS[placement]\r\n return el ? el.childElementCount : 0\r\n }\r\n return Object.values(WRAPPERS).reduce((n, el) => n + el.childElementCount, 0)\r\n}\r\n\r\nexport {\r\n createNoticeWrapper,\r\n removeNoticeWrapper,\r\n clearNoticeWrapper,\r\n getWrapperCount,\r\n}\r\n"],"mappings":";;AAOA,IAAI,WAAwB,CAAC;AAE7B,SAAS,gBAAgB,QAA0B;CACjD,IAAI,WAAW,KAAA,KAAa,WAAW,QAAQ,WAAW,IAAI,OAAO,KAAA;CACrE,OAAO,OAAO,WAAW,WAAW,GAAG,OAAO,MAAM,OAAO,MAAM;AACnE;AAEA,SAAS,kBACP,IACA,SAMA;CACA,MAAM,EAAE,QAAQ,QAAQ,cAAc,iBAAiB,WAAW,CAAC;CAEnE,IAAI,cAAc;EAChB,MAAM,QAAQ,MAAM,QAAQ,YAAY,IACpC,aAAa,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,IACrC,OAAO,iBAAiB,WACtB,eACA,OAAO,KAAK,YAAY,CAAC,CACtB,QAAQ,MAAO,aAAyC,EAAE,CAAC,CAC3D,KAAK,GAAG;EACJ,GAAG,aAAa,iBAAiB,KAAK,GAAG;EACtD,IAAI,CAAC,GAAG,aAAa,iBAAiB,GACpC,GAAG,aAAa,mBAAmB,GAAG,SAAS;EAEjD,GAAG,YAAY,GAAG,GAAG,aAAa,iBAAiB,EAAE,GAAG,QAAQ,KAAK;CACvE;CAEA,IAAI,cACF,OAAO,OAAO,GAAG,OAAO,YAAY;CAGtC,MAAM,cAAc,gBAAgB,MAAM;CAC1C,IAAI,aACF,GAAG,MAAM,YAAY,qBAAqB,WAAW;CAGvD,IAAI,OAAO,WAAW,UACpB,GAAG,MAAM,SAAS,OAAO,MAAM;AAEnC;AAEA,SAAS,oBACP,WACA,SAMA;CACA,MAAM,EAAE,QAAQ,QAAQ,gBAAgB;CAExC,IAAI,aAAa,UAAU;EACzB,MAAM,KAAK,SAAS;EACpB,GAAG,MAAM,SACP,SAAS,UAAU,OAAO,OAAO,QAAQ,MAAM,IAAI,OAAO,IAAI,CAAC;EACjE,kBAAkB,IAAI,OAAO;EAC7B,OAAO;CACT;CAEA,MAAM,KAAK,SAAS,cAAc,KAAK;CACvC,MAAM,KAAK,oBAAoB,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;CAClF,MAAM,QAAQ,sBAAsB;CACpC,GAAG,KAAK;CACR,GAAG,YAAY;CACf,GAAG,aAAa,mBAAmB,KAAK;CACxC,GAAG,MAAM,SACP,SAAS,UAAU,OAAO,OAAO,QAAQ,MAAM,IAAI,OAAO,OAAO,KAAK;CACxE,kBAAkB,IAAI,OAAO;CAC7B,SAAS,aAAa;CACtB,SAAS,KAAK,YAAY,EAAE;CAC5B,OAAO;AACT;AAiBA,SAAS,qBAAqB;CAC5B,KAAK,MAAM,KAAK,UACd,IAAI,SAAS,IAAI;EACf,IAAI,SAAS,EAAE,CAAC,YACd,SAAS,KAAK,YAAY,SAAS,EAAE;EAEvC,OAAO,SAAS;CAClB;AAEJ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../components/notice/src/_util/index.ts"],"sourcesContent":["import useGlobalZIndex from '../../../../use/useGlobalZIndex'\r\nimport type { NoticePlacementType } from '../../types'\r\n\r\ninterface WrapperType {\r\n [k: string]: HTMLElement\r\n}\r\n\r\nlet WRAPPERS: WrapperType = {}\r\n\r\nfunction normalizeOffset(offset?: number | string) {\r\n if (offset === undefined || offset === null || offset === '') return undefined\r\n return typeof offset === 'number' ? `${offset}px` : String(offset)\r\n}\r\n\r\nfunction applyWrapperStyle(\r\n el: HTMLElement,\r\n options?: {\r\n offset?: number | string\r\n zIndex?: number\r\n wrapperClass?: any\r\n wrapperStyle?: Record<string, string>\r\n },\r\n) {\r\n const { offset, zIndex, wrapperClass, wrapperStyle } = options || {}\r\n\r\n if (wrapperClass) {\r\n const extra = Array.isArray(wrapperClass)\r\n ? wrapperClass.filter(Boolean).join(' ')\r\n : typeof wrapperClass === 'string'\r\n ? wrapperClass\r\n : Object.keys(wrapperClass)\r\n .filter((k) => (wrapperClass as Record<string, boolean>)[k])\r\n .join(' ')\r\n const base = el.getAttribute('data-base-class') || el.className\r\n if (!el.getAttribute('data-base-class')) {\r\n el.setAttribute('data-base-class', el.className)\r\n }\r\n el.className = `${el.getAttribute('data-base-class')} ${extra}`.trim()\r\n }\r\n\r\n if (wrapperStyle) {\r\n Object.assign(el.style, wrapperStyle)\r\n }\r\n\r\n const offsetValue = normalizeOffset(offset)\r\n if (offsetValue) {\r\n el.style.setProperty('--w-notice-offset', offsetValue)\r\n }\r\n\r\n if (typeof zIndex === 'number') {\r\n el.style.zIndex = String(zIndex)\r\n }\r\n}\r\n\r\nfunction createNoticeWrapper(\r\n placement: NoticePlacementType | string,\r\n options?: {\r\n offset?: number | string\r\n zIndex?: number\r\n wrapperClass?: any\r\n wrapperStyle?: Record<string, string>\r\n },\r\n) {\r\n const { zIndex, add } = useGlobalZIndex()\r\n\r\n if (placement in WRAPPERS) {\r\n const el = WRAPPERS[placement]\r\n el.style.zIndex =\r\n options?.zIndex != null ? String(options.zIndex) : String(add())\r\n applyWrapperStyle(el, options)\r\n return el\r\n }\r\n\r\n const el = document.createElement('div')\r\n const id = `notice_container_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`\r\n const klass = `w-notice w-notice--${placement}`\r\n el.id = id\r\n el.className = klass\r\n el.setAttribute('data-base-class', klass)\r\n el.style.zIndex =\r\n options?.zIndex != null ? String(options.zIndex) : String(zIndex.value)\r\n applyWrapperStyle(el, options)\r\n WRAPPERS[placement] = el\r\n document.body.appendChild(el)\r\n return el\r\n}\r\n\r\nfunction removeNoticeWrapper(el: HTMLElement) {\r\n let p = ''\r\n for (const pla in WRAPPERS) {\r\n if (WRAPPERS[pla] === el) {\r\n p = pla\r\n }\r\n }\r\n if (p) {\r\n if (el.parentNode) {\r\n document.body.removeChild(el)\r\n }\r\n delete WRAPPERS[p]\r\n }\r\n}\r\n\r\nfunction clearNoticeWrapper() {\r\n for (const p in WRAPPERS) {\r\n if (WRAPPERS[p]) {\r\n if (WRAPPERS[p].parentNode) {\r\n document.body.removeChild(WRAPPERS[p])\r\n }\r\n delete WRAPPERS[p]\r\n }\r\n }\r\n}\r\n\r\nfunction getWrapperCount(placement?: string) {\r\n if (placement) {\r\n const el = WRAPPERS[placement]\r\n return el ? el.childElementCount : 0\r\n }\r\n return Object.values(WRAPPERS).reduce((n, el) => n + el.childElementCount, 0)\r\n}\r\n\r\nexport {\r\n createNoticeWrapper,\r\n removeNoticeWrapper,\r\n clearNoticeWrapper,\r\n getWrapperCount,\r\n}\r\n"],"mappings":";;AAOA,IAAI,WAAwB,CAAC;AAE7B,SAAS,gBAAgB,QAA0B;CACjD,IAAI,WAAW,KAAA,KAAa,WAAW,QAAQ,WAAW,IAAI,OAAO,KAAA;CACrE,OAAO,OAAO,WAAW,WAAW,GAAG,OAAO,MAAM,OAAO,MAAM;AACnE;AAEA,SAAS,kBACP,IACA,SAMA;CACA,MAAM,EAAE,QAAQ,QAAQ,cAAc,iBAAiB,WAAW,CAAC;CAEnE,IAAI,cAAc;EAChB,MAAM,QAAQ,MAAM,QAAQ,YAAY,IACpC,aAAa,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,IACrC,OAAO,iBAAiB,WACtB,eACA,OAAO,KAAK,YAAY,CAAC,CACtB,QAAQ,MAAO,aAAyC,EAAE,CAAC,CAC3D,KAAK,GAAG;EACJ,GAAG,aAAa,iBAAiB,KAAK,GAAG;EACtD,IAAI,CAAC,GAAG,aAAa,iBAAiB,GACpC,GAAG,aAAa,mBAAmB,GAAG,SAAS;EAEjD,GAAG,YAAY,GAAG,GAAG,aAAa,iBAAiB,EAAE,GAAG,QAAQ,KAAK;CACvE;CAEA,IAAI,cACF,OAAO,OAAO,GAAG,OAAO,YAAY;CAGtC,MAAM,cAAc,gBAAgB,MAAM;CAC1C,IAAI,aACF,GAAG,MAAM,YAAY,qBAAqB,WAAW;CAGvD,IAAI,OAAO,WAAW,UACpB,GAAG,MAAM,SAAS,OAAO,MAAM;AAEnC;AAEA,SAAS,oBACP,WACA,SAMA;CACA,MAAM,EAAE,QAAQ,QAAQ,gBAAgB;CAExC,IAAI,aAAa,UAAU;EACzB,MAAM,KAAK,SAAS;EACpB,GAAG,MAAM,SACP,SAAS,UAAU,OAAO,OAAO,QAAQ,MAAM,IAAI,OAAO,IAAI,CAAC;EACjE,kBAAkB,IAAI,OAAO;EAC7B,OAAO;CACT;CAEA,MAAM,KAAK,SAAS,cAAc,KAAK;CACvC,MAAM,KAAK,oBAAoB,KAAK,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;CAClF,MAAM,QAAQ,sBAAsB;CACpC,GAAG,KAAK;CACR,GAAG,YAAY;CACf,GAAG,aAAa,mBAAmB,KAAK;CACxC,GAAG,MAAM,SACP,SAAS,UAAU,OAAO,OAAO,QAAQ,MAAM,IAAI,OAAO,OAAO,KAAK;CACxE,kBAAkB,IAAI,OAAO;CAC7B,SAAS,aAAa;CACtB,SAAS,KAAK,YAAY,EAAE;CAC5B,OAAO;AACT;AAiBA,SAAS,qBAAqB;CAC5B,KAAK,MAAM,KAAK,UACd,IAAI,SAAS,IAAI;EACf,IAAI,SAAS,EAAE,CAAC,YACd,SAAS,KAAK,YAAY,SAAS,EAAE;EAEvC,OAAO,SAAS;CAClB;AAEJ"}
@@ -45,9 +45,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
45
45
  }>, {
46
46
  block: boolean;
47
47
  disabled: boolean;
48
+ step: number;
48
49
  readonly: boolean;
49
50
  hasBtn: boolean;
50
- step: number;
51
51
  }, {}, {
52
52
  Write: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
53
53
  modelValue: {
@@ -112,10 +112,10 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
112
112
  color: string;
113
113
  cssVars: CssVars;
114
114
  disabled: boolean;
115
+ step: number;
115
116
  readonly: boolean;
116
117
  hasBtn: boolean;
117
118
  allowDecimal: boolean;
118
- step: number;
119
119
  }, {}, {
120
120
  Write: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
121
121
  modelValue: {
@@ -511,8 +511,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
511
511
  manual: boolean;
512
512
  exclude: HTMLElement[];
513
513
  hasMask: boolean;
514
- clearable: boolean;
515
514
  placeholder: string;
515
+ clearable: boolean;
516
516
  virtual: boolean;
517
517
  virtualThreshold: number;
518
518
  itemHeight: number;
@@ -820,7 +820,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
820
820
  }, {}, {}, {
821
821
  clickOutside: import('vue').ObjectDirective<any, any, string, any>;
822
822
  }, string, import('vue').ComponentProvideOptions, true, {}, any>;
823
- Virtual: import('../..').VirtualComponent;
823
+ Virtual: new <T = any>() => import('../..').VirtualListMethods & {
824
+ $props: import('../..').VirtualJSXProps<T>;
825
+ };
824
826
  Close: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
825
827
  name: {
826
828
  type: StringConstructor;
@@ -1118,7 +1120,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1118
1120
  tag: string;
1119
1121
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1120
1122
  }, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1121
- Btn: import('../..').BtnComponent;
1123
+ Btn: import('vue').DefineComponent<import('../..').BtnJSXProps>;
1122
1124
  Tooltip: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
1123
1125
  trigger: {
1124
1126
  default: string;
@@ -1758,10 +1760,10 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
1758
1760
  color: string;
1759
1761
  cssVars: CssVars;
1760
1762
  disabled: boolean;
1763
+ step: number;
1761
1764
  readonly: boolean;
1762
1765
  hasBtn: boolean;
1763
1766
  allowDecimal: boolean;
1764
- step: number;
1765
1767
  }, {}, {
1766
1768
  Write: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
1767
1769
  modelValue: {
@@ -1,3 +1,4 @@
1
+ import { DefineComponent } from 'vue';
1
2
  import { CssVars } from '../../util';
2
3
  export type { PictureGlobalConfig } from './config';
3
4
  export { PICTURE_FALLBACK, normalizePictureImages } from './config';
@@ -9,10 +10,7 @@ export type PictureProps = {
9
10
  cssVars?: CssVars;
10
11
  };
11
12
  export type PictureJSXProps = PictureProps & Omit<JSX.IntrinsicElements['div'], keyof PictureProps | 'ref'>;
12
- export type PictureComponent = {
13
- new (): {
14
- $props: PictureJSXProps;
15
- };
16
- };
17
- declare const _default: PictureComponent;
18
- export default _default;
13
+ /** 断言为 DefineComponent,hover / 补全直接看到 PictureJSXProps(勿再包 XxxComponent 别名) */
14
+ declare const Picture: DefineComponent<PictureJSXProps>;
15
+ export type PictureInstance = InstanceType<typeof Picture>;
16
+ export default Picture;
@@ -7,7 +7,7 @@ import Mask_default from "../mask/Mask.js";
7
7
  import Close_default from "../close/Close.js";
8
8
  import { useUII18n } from "../../use/useUII18n.js";
9
9
  import Toggle_default from "../toggle/Toggle.js";
10
- import ImageImpl from "../image/Image.js";
10
+ import Image from "../image/Image.js";
11
11
  import { createPictureViewport } from "../../use/usePictureViewport.js";
12
12
  import { PICTURE_FALLBACK, normalizePictureImages } from "./config.js";
13
13
  import { runPictureImgEnter } from "./pictureFlip.js";
@@ -16,11 +16,12 @@ import PictureViewport from "./PictureViewport.js";
16
16
  import { Fragment, Teleport, computed, createVNode, defineComponent, mergeProps, nextTick, onBeforeUnmount, ref, watch } from "vue";
17
17
  //#region components/picture/Picture.tsx
18
18
  var INTERACT_SAFE = ".w-picture-viewer__viewport, .w-picture-viewer__img-wrap, .w-picture-viewer__img, .w-picture-viewer__thumb, .w-picture-viewer__nav, .w-picture-viewer__close, .w-picture-viewer__thumbs, .w-picture-viewer__toolbar";
19
- var PictureImpl = /* @__PURE__ */ defineComponent({
19
+ /** 断言为 DefineComponent,hover / 补全直接看到 PictureJSXProps(勿再包 XxxComponent 别名) */
20
+ var Picture = /* @__PURE__ */ defineComponent({
20
21
  name: "Picture",
21
22
  inheritAttrs: false,
22
23
  components: {
23
- Image: ImageImpl,
24
+ Image,
24
25
  Mask: Mask_default,
25
26
  Toggle: Toggle_default,
26
27
  Close: Close_default,
@@ -154,7 +155,7 @@ var PictureImpl = /* @__PURE__ */ defineComponent({
154
155
  }, attrs);
155
156
  const multi = images.length > 1;
156
157
  return createVNode(Fragment, null, [
157
- createVNode("div", rootProps, [images.map((src, i) => createVNode(ImageImpl, {
158
+ createVNode("div", rootProps, [images.map((src, i) => createVNode(Image, {
158
159
  "key": `${src}-${i}`,
159
160
  "class": ["w-picture__thumb", { "is-previewing": show.value && curIndex.value === i }],
160
161
  "src": src,
@@ -249,6 +250,6 @@ var PictureImpl = /* @__PURE__ */ defineComponent({
249
250
  }
250
251
  });
251
252
  //#endregion
252
- export { PictureImpl as default };
253
+ export { Picture as default };
253
254
 
254
255
  //# sourceMappingURL=Picture.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Picture.js","names":["Teleport","computed","defineComponent","mergeProps","nextTick","onBeforeUnmount","ref","watch","Fragment","_Fragment","createVNode","_createVNode","propSizeToCssVars","toCssVarsStyle","useComponentConfig","useEscStack","useGlobalZIndex","useUII18n","createPictureViewport","Close","Icon","Image","Mask","Toggle","normalizePictureImages","PICTURE_FALLBACK","runPictureImgEnter","PictureToolbar","PictureViewport","INTERACT_SAFE","PictureImpl","name","inheritAttrs","components","props","images","type","String","Array","default","undefined","size","Number","round","Boolean","cssVars","Object","emits","_v","show","_index","hide","setup","attrs","emit","cfg","t","zIndex","add","curIndex","alwaysOneWay","fromRect","interact","viewportApi","viewportController","stopFlip","list","v","value","reset","prepareImageChange","enableInteract","fit","playEnterFlip","Promise","r","requestAnimationFrame","el","getFlipEl","from","onEnd","openAt","i","e","target","currentTarget","getBoundingClientRect","close","onViewerClick","closest","onThumbClick","goPrev","prev","goNext","next","bindViewport","length","rootProps","class","style","multi","map","src","stopPropagation","item","use","index","onClick"],"sources":["../../../components/picture/Picture.tsx"],"sourcesContent":["import {\r\n Teleport,\r\n computed,\r\n defineComponent,\r\n mergeProps,\r\n nextTick,\r\n onBeforeUnmount,\r\n ref,\r\n watch,\r\n type PropType,\r\n} from 'vue'\r\nimport {\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useEscStack from '../../use/useEscStack'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { createPictureViewport } from '../../use/usePictureViewport'\r\nimport Close from '../close/index'\r\nimport Icon from '../icon/index'\r\nimport Image from '../image/index'\r\nimport Mask from '../mask/index'\r\nimport Toggle from '../toggle/index'\r\nimport {\r\n normalizePictureImages,\r\n PICTURE_FALLBACK,\r\n} from './config'\r\nimport { runPictureImgEnter } from './pictureFlip'\r\nimport PictureToolbar from './PictureToolbar'\r\nimport PictureViewport, {\r\n type PictureViewportMethods,\r\n} from './PictureViewport'\r\n\r\nexport type { PictureGlobalConfig } from './config'\r\nexport { PICTURE_FALLBACK, normalizePictureImages } from './config'\r\n\r\nexport type PictureProps = {\r\n /** 图片地址:逗号分隔字符串或数组 */\r\n images?: string | string[]\r\n size?: number\r\n round?: boolean | string\r\n cssVars?: CssVars\r\n}\r\n\r\nexport type PictureJSXProps = PictureProps &\r\n Omit<JSX.IntrinsicElements['div'], keyof PictureProps | 'ref'>\r\n\r\nexport type PictureComponent = {\r\n new (): {\r\n $props: PictureJSXProps\r\n }\r\n}\r\n\r\nconst INTERACT_SAFE =\r\n '.w-picture-viewer__viewport, .w-picture-viewer__img-wrap, .w-picture-viewer__img, .w-picture-viewer__thumb, .w-picture-viewer__nav, .w-picture-viewer__close, .w-picture-viewer__thumbs, .w-picture-viewer__toolbar'\r\n\r\nconst PictureImpl = defineComponent({\r\n name: 'Picture',\r\n inheritAttrs: false,\r\n components: {\r\n Image,\r\n Mask,\r\n Toggle,\r\n Close,\r\n Icon,\r\n PictureViewport,\r\n PictureToolbar,\r\n },\r\n props: {\r\n images: {\r\n type: [String, Array] as PropType<string | string[]>,\r\n default: undefined,\r\n },\r\n size: { type: Number, default: undefined },\r\n round: {\r\n type: [Boolean, String] as PropType<boolean | string>,\r\n default: undefined,\r\n },\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n emits: {\r\n 'update:show': (_v: boolean) => true,\r\n show: (_index: number) => true,\r\n hide: () => true,\r\n },\r\n setup(props, { attrs, emit }) {\r\n const cfg = useComponentConfig('Picture', props, PICTURE_FALLBACK)\r\n const { t } = useUII18n()\r\n const { zIndex, add } = useGlobalZIndex()\r\n const show = ref(false)\r\n const curIndex = ref(0)\r\n const alwaysOneWay = ref(false)\r\n const fromRect = ref<DOMRect | null>(null)\r\n const interact = ref(false)\r\n const viewportApi = ref<PictureViewportMethods | null>(null)\r\n const viewportController = createPictureViewport()\r\n let stopFlip: (() => void) | undefined\r\n\r\n const list = computed(() => normalizePictureImages(props.images))\r\n\r\n watch(show, (v) => {\r\n emit('update:show', v)\r\n if (!v) {\r\n emit('hide')\r\n stopFlip?.()\r\n stopFlip = undefined\r\n fromRect.value = null\r\n interact.value = false\r\n viewportApi.value = null\r\n viewportController.reset()\r\n }\r\n })\r\n\r\n watch(curIndex, () => {\r\n if (!show.value || !interact.value) return\r\n // 切图:保留相对缩放,仅清平移(具体落点在新图 onLoad)\r\n viewportController.prepareImageChange()\r\n })\r\n\r\n useEscStack(\r\n show,\r\n () => {\r\n show.value = false\r\n },\r\n () => zIndex.value,\r\n )\r\n\r\n function enableInteract() {\r\n // 仅打开进场结束后校准一次适应;切图不走这里\r\n viewportApi.value?.fit(false)\r\n interact.value = true\r\n }\r\n\r\n async function playEnterFlip() {\r\n stopFlip?.()\r\n stopFlip = undefined\r\n interact.value = false\r\n await nextTick()\r\n await new Promise<void>((r) => requestAnimationFrame(() => r()))\r\n const el = viewportApi.value?.getFlipEl()\r\n const from = fromRect.value\r\n if (!el || !from) {\r\n fromRect.value = null\r\n enableInteract()\r\n return\r\n }\r\n fromRect.value = null\r\n stopFlip = runPictureImgEnter(el, from, {\r\n onEnd: () => {\r\n enableInteract()\r\n },\r\n })\r\n }\r\n\r\n function openAt(i: number, e?: MouseEvent) {\r\n const target = (e?.currentTarget as HTMLElement | null) ?? null\r\n fromRect.value = target?.getBoundingClientRect() ?? null\r\n viewportController.reset()\r\n curIndex.value = i\r\n alwaysOneWay.value = false\r\n interact.value = false\r\n add()\r\n show.value = true\r\n emit('show', i)\r\n void playEnterFlip()\r\n }\r\n\r\n function close() {\r\n show.value = false\r\n }\r\n\r\n function onViewerClick(e: MouseEvent) {\r\n const el = e.target as HTMLElement | null\r\n if (el?.closest(INTERACT_SAFE)) return\r\n close()\r\n }\r\n\r\n function onThumbClick(i: number) {\r\n curIndex.value = i\r\n alwaysOneWay.value = false\r\n }\r\n\r\n function goPrev(prev: () => void) {\r\n alwaysOneWay.value = true\r\n prev()\r\n }\r\n\r\n function goNext(next: () => void) {\r\n alwaysOneWay.value = true\r\n next()\r\n }\r\n\r\n function bindViewport(el: unknown) {\r\n // Toggle 切图时旧实例可能后触发 null,勿清掉新实例\r\n if (el) viewportApi.value = el as PictureViewportMethods\r\n }\r\n\r\n onBeforeUnmount(() => {\r\n stopFlip?.()\r\n })\r\n\r\n return () => {\r\n const images = list.value\r\n if (!images.length) return null\r\n\r\n const rootProps = mergeProps(\r\n {\r\n class: 'w-picture',\r\n style: toCssVarsStyle({\r\n ...propSizeToCssVars('picture', cfg.value.size),\r\n ...props.cssVars,\r\n }),\r\n },\r\n attrs,\r\n )\r\n\r\n const multi = images.length > 1\r\n\r\n return (\r\n <>\r\n <div {...rootProps}>\r\n {images.map((src, i) => (\r\n <Image\r\n key={`${src}-${i}`}\r\n class={[\r\n 'w-picture__thumb',\r\n { 'is-previewing': show.value && curIndex.value === i },\r\n ]}\r\n src={src}\r\n round={cfg.value.round}\r\n onClick={(e: MouseEvent) => openAt(i, e)}\r\n />\r\n ))}\r\n </div>\r\n\r\n <Mask\r\n show={show.value}\r\n zIndex={zIndex.value}\r\n class=\"w-picture-mask\"\r\n canCloseByClickSelf\r\n onUpdate:show={(v: boolean) => {\r\n show.value = v\r\n }}\r\n />\r\n\r\n <Teleport to=\"body\">\r\n {show.value ? (\r\n <div\r\n class=\"w-picture-viewer\"\r\n style={{\r\n /* 高于 Mask,避免同层 portal 重排后盖住操作控件 */\r\n ['--__w-picture-viewer-z-index' as string]: zIndex.value + 1,\r\n }}\r\n onClick={onViewerClick}>\r\n <Close\r\n class=\"w-picture-viewer__close\"\r\n size={24}\r\n ariaLabel={t('picture.close')}\r\n title={t('picture.close')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n close()\r\n }}\r\n />\r\n\r\n <Toggle\r\n class=\"w-picture-viewer__stage\"\r\n wheel={false}\r\n index={curIndex.value}\r\n data={images}\r\n itemClass=\"w-picture-viewer__item\"\r\n transform=\"translate\"\r\n alwaysOneWay={alwaysOneWay.value}\r\n onUpdate:index={(i: number) => {\r\n curIndex.value = i\r\n }}\r\n v-slots={{\r\n default: ({ item }: { item: string }) => (\r\n <PictureViewport\r\n key={`${item}-${curIndex.value}`}\r\n ref={bindViewport}\r\n src={item}\r\n interact={interact.value}\r\n controller={viewportController}\r\n />\r\n ),\r\n use: ({\r\n index,\r\n prev,\r\n next,\r\n }: {\r\n index: number\r\n prev: () => void\r\n next: () => void\r\n }) => (\r\n <>\r\n <PictureToolbar\r\n viewport={viewportApi.value}\r\n disabled={!interact.value}\r\n />\r\n {multi ? (\r\n <div class=\"w-picture-viewer__thumbs\">\r\n {images.map((src, i) => (\r\n <img\r\n key={`${src}-t-${i}`}\r\n class={[\r\n 'w-picture-viewer__thumb',\r\n { 'is-active': i === index },\r\n ]}\r\n src={src}\r\n alt=\"\"\r\n draggable={false}\r\n onClick={() => onThumbClick(i)}\r\n />\r\n ))}\r\n </div>\r\n ) : null}\r\n {multi ? (\r\n <>\r\n <Icon\r\n class=\"w-picture-viewer__nav w-picture-viewer__nav--prev\"\r\n name=\"w-icon-arrow-down\"\r\n rotate\r\n direction=\"z\"\r\n deg={90}\r\n size=\"var(--w-picture-viewer-nav-size)\"\r\n ariaLabel={t('picture.prev')}\r\n title={t('picture.prev')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n goPrev(prev)\r\n }}\r\n />\r\n <Icon\r\n class=\"w-picture-viewer__nav w-picture-viewer__nav--next\"\r\n name=\"w-icon-arrow-down\"\r\n rotate\r\n direction=\"z\"\r\n deg={-90}\r\n size=\"var(--w-picture-viewer-nav-size)\"\r\n ariaLabel={t('picture.next')}\r\n title={t('picture.next')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n goNext(next)\r\n }}\r\n />\r\n </>\r\n ) : null}\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n ) : null}\r\n </Teleport>\r\n </>\r\n )\r\n }\r\n },\r\n})\r\n\r\nexport default PictureImpl as unknown as PictureComponent\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"Picture.js","names":["Teleport","computed","defineComponent","mergeProps","nextTick","onBeforeUnmount","ref","watch","Fragment","_Fragment","createVNode","_createVNode","propSizeToCssVars","toCssVarsStyle","useComponentConfig","useEscStack","useGlobalZIndex","useUII18n","createPictureViewport","Close","Icon","Image","Mask","Toggle","normalizePictureImages","PICTURE_FALLBACK","runPictureImgEnter","PictureToolbar","PictureViewport","INTERACT_SAFE","PictureImpl","name","inheritAttrs","components","props","images","type","String","Array","default","undefined","size","Number","round","Boolean","cssVars","Object","emits","_v","show","_index","hide","setup","attrs","emit","cfg","t","zIndex","add","curIndex","alwaysOneWay","fromRect","interact","viewportApi","viewportController","stopFlip","list","v","value","reset","prepareImageChange","enableInteract","fit","playEnterFlip","Promise","r","requestAnimationFrame","el","getFlipEl","from","onEnd","openAt","i","e","target","currentTarget","getBoundingClientRect","close","onViewerClick","closest","onThumbClick","goPrev","prev","goNext","next","bindViewport","length","rootProps","class","style","multi","map","src","stopPropagation","item","use","index","onClick","Picture"],"sources":["../../../components/picture/Picture.tsx"],"sourcesContent":["import {\r\n Teleport,\r\n computed,\r\n defineComponent,\r\n mergeProps,\r\n nextTick,\r\n onBeforeUnmount,\r\n ref,\r\n watch,\r\n type DefineComponent,\r\n type PropType,\r\n} from 'vue'\r\nimport {\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useEscStack from '../../use/useEscStack'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { createPictureViewport } from '../../use/usePictureViewport'\r\nimport Close from '../close/index'\r\nimport Icon from '../icon/index'\r\nimport Image from '../image/index'\r\nimport Mask from '../mask/index'\r\nimport Toggle from '../toggle/index'\r\nimport {\r\n normalizePictureImages,\r\n PICTURE_FALLBACK,\r\n} from './config'\r\nimport { runPictureImgEnter } from './pictureFlip'\r\nimport PictureToolbar from './PictureToolbar'\r\nimport PictureViewport, {\r\n type PictureViewportMethods,\r\n} from './PictureViewport'\r\n\r\nexport type { PictureGlobalConfig } from './config'\r\nexport { PICTURE_FALLBACK, normalizePictureImages } from './config'\r\n\r\nexport type PictureProps = {\r\n /** 图片地址:逗号分隔字符串或数组 */\r\n images?: string | string[]\r\n size?: number\r\n round?: boolean | string\r\n cssVars?: CssVars\r\n}\r\n\r\nexport type PictureJSXProps = PictureProps &\r\n Omit<JSX.IntrinsicElements['div'], keyof PictureProps | 'ref'>\r\n\r\nconst INTERACT_SAFE =\r\n '.w-picture-viewer__viewport, .w-picture-viewer__img-wrap, .w-picture-viewer__img, .w-picture-viewer__thumb, .w-picture-viewer__nav, .w-picture-viewer__close, .w-picture-viewer__thumbs, .w-picture-viewer__toolbar'\r\n\r\nconst PictureImpl = defineComponent({\r\n name: 'Picture',\r\n inheritAttrs: false,\r\n components: {\r\n Image,\r\n Mask,\r\n Toggle,\r\n Close,\r\n Icon,\r\n PictureViewport,\r\n PictureToolbar,\r\n },\r\n props: {\r\n images: {\r\n type: [String, Array] as PropType<string | string[]>,\r\n default: undefined,\r\n },\r\n size: { type: Number, default: undefined },\r\n round: {\r\n type: [Boolean, String] as PropType<boolean | string>,\r\n default: undefined,\r\n },\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n emits: {\r\n 'update:show': (_v: boolean) => true,\r\n show: (_index: number) => true,\r\n hide: () => true,\r\n },\r\n setup(props, { attrs, emit }) {\r\n const cfg = useComponentConfig('Picture', props, PICTURE_FALLBACK)\r\n const { t } = useUII18n()\r\n const { zIndex, add } = useGlobalZIndex()\r\n const show = ref(false)\r\n const curIndex = ref(0)\r\n const alwaysOneWay = ref(false)\r\n const fromRect = ref<DOMRect | null>(null)\r\n const interact = ref(false)\r\n const viewportApi = ref<PictureViewportMethods | null>(null)\r\n const viewportController = createPictureViewport()\r\n let stopFlip: (() => void) | undefined\r\n\r\n const list = computed(() => normalizePictureImages(props.images))\r\n\r\n watch(show, (v) => {\r\n emit('update:show', v)\r\n if (!v) {\r\n emit('hide')\r\n stopFlip?.()\r\n stopFlip = undefined\r\n fromRect.value = null\r\n interact.value = false\r\n viewportApi.value = null\r\n viewportController.reset()\r\n }\r\n })\r\n\r\n watch(curIndex, () => {\r\n if (!show.value || !interact.value) return\r\n // 切图:保留相对缩放,仅清平移(具体落点在新图 onLoad)\r\n viewportController.prepareImageChange()\r\n })\r\n\r\n useEscStack(\r\n show,\r\n () => {\r\n show.value = false\r\n },\r\n () => zIndex.value,\r\n )\r\n\r\n function enableInteract() {\r\n // 仅打开进场结束后校准一次适应;切图不走这里\r\n viewportApi.value?.fit(false)\r\n interact.value = true\r\n }\r\n\r\n async function playEnterFlip() {\r\n stopFlip?.()\r\n stopFlip = undefined\r\n interact.value = false\r\n await nextTick()\r\n await new Promise<void>((r) => requestAnimationFrame(() => r()))\r\n const el = viewportApi.value?.getFlipEl()\r\n const from = fromRect.value\r\n if (!el || !from) {\r\n fromRect.value = null\r\n enableInteract()\r\n return\r\n }\r\n fromRect.value = null\r\n stopFlip = runPictureImgEnter(el, from, {\r\n onEnd: () => {\r\n enableInteract()\r\n },\r\n })\r\n }\r\n\r\n function openAt(i: number, e?: MouseEvent) {\r\n const target = (e?.currentTarget as HTMLElement | null) ?? null\r\n fromRect.value = target?.getBoundingClientRect() ?? null\r\n viewportController.reset()\r\n curIndex.value = i\r\n alwaysOneWay.value = false\r\n interact.value = false\r\n add()\r\n show.value = true\r\n emit('show', i)\r\n void playEnterFlip()\r\n }\r\n\r\n function close() {\r\n show.value = false\r\n }\r\n\r\n function onViewerClick(e: MouseEvent) {\r\n const el = e.target as HTMLElement | null\r\n if (el?.closest(INTERACT_SAFE)) return\r\n close()\r\n }\r\n\r\n function onThumbClick(i: number) {\r\n curIndex.value = i\r\n alwaysOneWay.value = false\r\n }\r\n\r\n function goPrev(prev: () => void) {\r\n alwaysOneWay.value = true\r\n prev()\r\n }\r\n\r\n function goNext(next: () => void) {\r\n alwaysOneWay.value = true\r\n next()\r\n }\r\n\r\n function bindViewport(el: unknown) {\r\n // Toggle 切图时旧实例可能后触发 null,勿清掉新实例\r\n if (el) viewportApi.value = el as PictureViewportMethods\r\n }\r\n\r\n onBeforeUnmount(() => {\r\n stopFlip?.()\r\n })\r\n\r\n return () => {\r\n const images = list.value\r\n if (!images.length) return null\r\n\r\n const rootProps = mergeProps(\r\n {\r\n class: 'w-picture',\r\n style: toCssVarsStyle({\r\n ...propSizeToCssVars('picture', cfg.value.size),\r\n ...props.cssVars,\r\n }),\r\n },\r\n attrs,\r\n )\r\n\r\n const multi = images.length > 1\r\n\r\n return (\r\n <>\r\n <div {...rootProps}>\r\n {images.map((src, i) => (\r\n <Image\r\n key={`${src}-${i}`}\r\n class={[\r\n 'w-picture__thumb',\r\n { 'is-previewing': show.value && curIndex.value === i },\r\n ]}\r\n src={src}\r\n round={cfg.value.round}\r\n onClick={(e: MouseEvent) => openAt(i, e)}\r\n />\r\n ))}\r\n </div>\r\n\r\n <Mask\r\n show={show.value}\r\n zIndex={zIndex.value}\r\n class=\"w-picture-mask\"\r\n canCloseByClickSelf\r\n onUpdate:show={(v: boolean) => {\r\n show.value = v\r\n }}\r\n />\r\n\r\n <Teleport to=\"body\">\r\n {show.value ? (\r\n <div\r\n class=\"w-picture-viewer\"\r\n style={{\r\n /* 高于 Mask,避免同层 portal 重排后盖住操作控件 */\r\n ['--__w-picture-viewer-z-index' as string]: zIndex.value + 1,\r\n }}\r\n onClick={onViewerClick}>\r\n <Close\r\n class=\"w-picture-viewer__close\"\r\n size={24}\r\n ariaLabel={t('picture.close')}\r\n title={t('picture.close')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n close()\r\n }}\r\n />\r\n\r\n <Toggle\r\n class=\"w-picture-viewer__stage\"\r\n wheel={false}\r\n index={curIndex.value}\r\n data={images}\r\n itemClass=\"w-picture-viewer__item\"\r\n transform=\"translate\"\r\n alwaysOneWay={alwaysOneWay.value}\r\n onUpdate:index={(i: number) => {\r\n curIndex.value = i\r\n }}\r\n v-slots={{\r\n default: ({ item }: { item: string }) => (\r\n <PictureViewport\r\n key={`${item}-${curIndex.value}`}\r\n ref={bindViewport}\r\n src={item}\r\n interact={interact.value}\r\n controller={viewportController}\r\n />\r\n ),\r\n use: ({\r\n index,\r\n prev,\r\n next,\r\n }: {\r\n index: number\r\n prev: () => void\r\n next: () => void\r\n }) => (\r\n <>\r\n <PictureToolbar\r\n viewport={viewportApi.value}\r\n disabled={!interact.value}\r\n />\r\n {multi ? (\r\n <div class=\"w-picture-viewer__thumbs\">\r\n {images.map((src, i) => (\r\n <img\r\n key={`${src}-t-${i}`}\r\n class={[\r\n 'w-picture-viewer__thumb',\r\n { 'is-active': i === index },\r\n ]}\r\n src={src}\r\n alt=\"\"\r\n draggable={false}\r\n onClick={() => onThumbClick(i)}\r\n />\r\n ))}\r\n </div>\r\n ) : null}\r\n {multi ? (\r\n <>\r\n <Icon\r\n class=\"w-picture-viewer__nav w-picture-viewer__nav--prev\"\r\n name=\"w-icon-arrow-down\"\r\n rotate\r\n direction=\"z\"\r\n deg={90}\r\n size=\"var(--w-picture-viewer-nav-size)\"\r\n ariaLabel={t('picture.prev')}\r\n title={t('picture.prev')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n goPrev(prev)\r\n }}\r\n />\r\n <Icon\r\n class=\"w-picture-viewer__nav w-picture-viewer__nav--next\"\r\n name=\"w-icon-arrow-down\"\r\n rotate\r\n direction=\"z\"\r\n deg={-90}\r\n size=\"var(--w-picture-viewer-nav-size)\"\r\n ariaLabel={t('picture.next')}\r\n title={t('picture.next')}\r\n onClick={(e: MouseEvent) => {\r\n e.stopPropagation()\r\n goNext(next)\r\n }}\r\n />\r\n </>\r\n ) : null}\r\n </>\r\n ),\r\n }}\r\n />\r\n </div>\r\n ) : null}\r\n </Teleport>\r\n </>\r\n )\r\n }\r\n },\r\n})\r\n\r\n/** 断言为 DefineComponent,hover / 补全直接看到 PictureJSXProps(勿再包 XxxComponent 别名) */\r\nconst Picture = PictureImpl as unknown as DefineComponent<PictureJSXProps>\r\n\r\nexport type PictureInstance = InstanceType<typeof Picture>\r\n\r\nexport default Picture\r\n"],"mappings":";;;;;;;;;;;;;;;;;AAmDA,IAAM6B,gBACJ;;AAqTF,IAAM+E,UAnTc1G,gCAAgB;CAClC6B,MAAM;CACNC,cAAc;CACdC,YAAY;EACVZ;EACAC,MAAAA;EACAC,QAAAA;EACAJ,OAAAA;EACAC,MAAAA;EACAQ;EACAD;CACF;CACAO,OAAO;EACLC,QAAQ;GACNC,MAAM,CAACC,QAAQC,KAAK;GACpBC,SAASC,KAAAA;EACX;EACAC,MAAM;GAAEL,MAAMM;GAAQH,SAASC,KAAAA;EAAU;EACzCG,OAAO;GACLP,MAAM,CAACQ,SAASP,MAAM;GACtBE,SAASC,KAAAA;EACX;EACAK,SAAS;GAAET,MAAMU;GAA6BP,SAASC,KAAAA;EAAU;CACnE;CACAO,OAAO;EACL,gBAAgBC,OAAgB;EAChCC,OAAOC,WAAmB;EAC1BC,YAAY;CACd;CACAC,MAAMlB,OAAO,EAAEmB,OAAOC,QAAQ;EAC5B,MAAMC,MAAMzC,mBAAmB,WAAWoB,OAAOT,gBAAgB;EACjE,MAAM,EAAE+B,MAAMvC,UAAU;EACxB,MAAM,EAAEwC,QAAQC,QAAQ1C,gBAAgB;EACxC,MAAMiC,OAAO3C,IAAI,KAAK;EACtB,MAAMqD,WAAWrD,IAAI,CAAC;EACtB,MAAMsD,eAAetD,IAAI,KAAK;EAC9B,MAAMuD,WAAWvD,IAAoB,IAAI;EACzC,MAAMwD,WAAWxD,IAAI,KAAK;EAC1B,MAAMyD,cAAczD,IAAmC,IAAI;EAC3D,MAAM0D,qBAAqB9C,sBAAsB;EACjD,IAAI+C;EAEJ,MAAMC,OAAOjE,eAAeuB,uBAAuBU,MAAMC,MAAM,CAAC;EAEhE5B,MAAM0C,OAAOkB,MAAM;GACjBb,KAAK,eAAea,CAAC;GACrB,IAAI,CAACA,GAAG;IACNb,KAAK,MAAM;IACXW,WAAW;IACXA,WAAWzB,KAAAA;IACXqB,SAASO,QAAQ;IACjBN,SAASM,QAAQ;IACjBL,YAAYK,QAAQ;IACpBJ,mBAAmBK,MAAM;GAC3B;EACF,CAAC;EAED9D,MAAMoD,gBAAgB;GACpB,IAAI,CAACV,KAAKmB,SAAS,CAACN,SAASM,OAAO;GAEpCJ,mBAAmBM,mBAAmB;EACxC,CAAC;EAEDvD,YACEkC,YACM;GACJA,KAAKmB,QAAQ;EACf,SACMX,OAAOW,KACf;EAEA,SAASG,iBAAiB;GAExBR,YAAYK,OAAOI,IAAI,KAAK;GAC5BV,SAASM,QAAQ;EACnB;EAEA,eAAeK,gBAAgB;GAC7BR,WAAW;GACXA,WAAWzB,KAAAA;GACXsB,SAASM,QAAQ;GACjB,MAAMhE,SAAS;GACf,MAAM,IAAIsE,SAAeC,MAAMC,4BAA4BD,EAAE,CAAC,CAAC;GAC/D,MAAME,KAAKd,YAAYK,OAAOU,UAAU;GACxC,MAAMC,OAAOlB,SAASO;GACtB,IAAI,CAACS,MAAM,CAACE,MAAM;IAChBlB,SAASO,QAAQ;IACjBG,eAAe;IACf;GACF;GACAV,SAASO,QAAQ;GACjBH,WAAWvC,mBAAmBmD,IAAIE,MAAM,EACtCC,aAAa;IACXT,eAAe;GACjB,EACF,CAAC;EACH;EAEA,SAASU,OAAOC,GAAWC,GAAgB;GACzC,MAAMC,SAAUD,GAAGE,iBAAwC;GAC3DxB,SAASO,QAAQgB,QAAQE,sBAAsB,KAAK;GACpDtB,mBAAmBK,MAAM;GACzBV,SAASS,QAAQc;GACjBtB,aAAaQ,QAAQ;GACrBN,SAASM,QAAQ;GACjBV,IAAI;GACJT,KAAKmB,QAAQ;GACbd,KAAK,QAAQ4B,CAAC;GACd,cAAmB;EACrB;EAEA,SAASK,QAAQ;GACftC,KAAKmB,QAAQ;EACf;EAEA,SAASoB,cAAcL,GAAe;GAEpC,IADWA,EAAEC,QACLK,QAAQ5D,aAAa,GAAG;GAChC0D,MAAM;EACR;EAEA,SAASG,aAAaR,GAAW;GAC/BvB,SAASS,QAAQc;GACjBtB,aAAaQ,QAAQ;EACvB;EAEA,SAASuB,OAAOC,MAAkB;GAChChC,aAAaQ,QAAQ;GACrBwB,KAAK;EACP;EAEA,SAASC,OAAOC,MAAkB;GAChClC,aAAaQ,QAAQ;GACrB0B,KAAK;EACP;EAEA,SAASC,aAAalB,IAAa;GAEjC,IAAIA,IAAId,YAAYK,QAAQS;EAC9B;EAEAxE,sBAAsB;GACpB4D,WAAW;EACb,CAAC;EAED,aAAa;GACX,MAAM9B,SAAS+B,KAAKE;GACpB,IAAI,CAACjC,OAAO6D,QAAQ,OAAO;GAE3B,MAAMC,YAAY9F,WAChB;IACE+F,OAAO;IACPC,OAAOtF,eAAe;KACpB,GAAGD,kBAAkB,WAAW2C,IAAIa,MAAM3B,IAAI;KAC9C,GAAGP,MAAMW;IACX,CAAC;GACH,GACAQ,KACF;GAEA,MAAM+C,QAAQjE,OAAO6D,SAAS;GAE9B,OAAArF,YAAAF,UAAA,MAAA;IAAAE,YAAA,OAEasF,WAAS,CACf9D,OAAOkE,KAAKC,KAAKpB,MAACvE,YAAAU,OAAA;KAAA,OAEV,GAAGiF,IAAG,GAAIpB;KAAG,SACX,CACL,oBACA,EAAE,iBAAiBjC,KAAKmB,SAAST,SAASS,UAAUc,EAAE,CAAC;KACxD,OACIoB;KAAG,SACD/C,IAAIa,MAAMzB;KAAK,YACZwC,MAAkBF,OAAOC,GAAGC,CAAC;IAAC,GAAA,IAAA,CAE3C,CAAC,CAAA;IAAAxE,YAAAW,cAAA;KAAA,QAII2B,KAAKmB;KAAK,UACRX,OAAOW;KAAK,SAAA;KAAA,uBAAA;KAAA,kBAGJD,MAAe;MAC7BlB,KAAKmB,QAAQD;KACf;IAAC,GAAA,IAAA;IAAAxD,YAAAX,UAAA,EAAA,MAAA,OAAA,GAAA,EAAAuC,eAAA,CAIAU,KAAKmB,QAAKzD,YAAA,OAAA;KAAA,SAAA;KAAA,SAGA,GAEJ,iCAA2C8C,OAAOW,QAAQ,EAC7D;KAAC,WACQoB;IAAa,GAAA,CAAA7E,YAAAQ,eAAA;KAAA,SAAA;KAAA,QAGd;KAAE,aACGqC,EAAE,eAAe;KAAC,SACtBA,EAAE,eAAe;KAAC,YACf2B,MAAkB;MAC1BA,EAAEoB,gBAAgB;MAClBhB,MAAM;KACR;IAAC,GAAA,IAAA,GAAA5E,YAAAY,gBAAA;KAAA,SAAA;KAAA,SAKM;KAAK,SACLoC,SAASS;KAAK,QACfjC;KAAM,aAAA;KAAA,aAAA;KAAA,gBAGEyB,aAAaQ;KAAK,mBACfc,MAAc;MAC7BvB,SAASS,QAAQc;KACnB;IAAC,GACQ;KACP3C,UAAU,EAAEiE,WAAwB7F,YAAAiB,iBAAA;MAAA,OAE3B,GAAG4E,KAAI,GAAI7C,SAASS;MAAO,OAC3B2B;MAAY,OACZS;MAAI,YACC1C,SAASM;MAAK,cACZJ;KAAkB,GAAA,IAAA;KAGlCyC,MAAM,EACJC,OACAd,MACAE,WAKDnF,YAAAF,UAAA,MAAA;MAAAE,YAAAgB,gBAAA;OAAA,YAGeoC,YAAYK;OAAK,YACjB,CAACN,SAASM;MAAK,GAAA,IAAA;MAE1BgC,QAAKzF,YAAA,OAAA,EAAA,SAAA,2BAAA,GAAA,CAEDwB,OAAOkE,KAAKC,KAAKpB,MAACvE,YAAA,OAAA;OAAA,OAEV,GAAG2F,IAAG,KAAMpB;OAAG,SACb,CACL,2BACA,EAAE,aAAaA,MAAMwB,MAAM,CAAC;OAC7B,OACIJ;OAAG,OAAA;OAAA,aAEG;OAAK,iBACDZ,aAAaR,CAAC;MAAC,GAAA,IAAA,CAEjC,CAAC,CAAA,IAEF;MACHkB,QAAKzF,YAAAF,UAAA,MAAA,CAAAE,YAAAS,cAAA;OAAA,SAAA;OAAA,QAAA;OAAA,UAAA;OAAA,aAAA;OAAA,OAOK;OAAE,QAAA;OAAA,aAEIoC,EAAE,cAAc;OAAC,SACrBA,EAAE,cAAc;OAAC,YACd2B,MAAkB;QAC1BA,EAAEoB,gBAAgB;QAClBZ,OAAOC,IAAI;OACb;MAAC,GAAA,IAAA,GAAAjF,YAAAS,cAAA;OAAA,SAAA;OAAA,QAAA;OAAA,UAAA;OAAA,aAAA;OAAA,OAOI;OAAG,QAAA;OAAA,aAEGoC,EAAE,cAAc;OAAC,SACrBA,EAAE,cAAc;OAAC,YACd2B,MAAkB;QAC1BA,EAAEoB,gBAAgB;QAClBV,OAAOC,IAAI;OACb;MAAC,GAAA,IAAA,CAAA,CAAA,IAGH;KAAI,CAAA;IAGd,CAAC,CAAA,CAAA,IAGH,IAAI,EAAA,CAAA;GAAA,CAAA;EAIhB;CACF;AACF,CAGgBhE"}
@@ -1,5 +1,6 @@
1
1
  import useVisibleResize from "../../use/useVisibleResize.js";
2
2
  import { PICTURE_VIEWPORT_ZOOM_STEP, createPictureViewport } from "../../use/usePictureViewport.js";
3
+ import usePointerDrag from "../../use/usePointerDrag.js";
3
4
  import { computed, createVNode, defineComponent, onBeforeUnmount, onMounted, ref, shallowRef, watch } from "vue";
4
5
  //#region components/picture/PictureViewport.tsx
5
6
  var PictureViewport = /* @__PURE__ */ defineComponent({
@@ -27,7 +28,6 @@ var PictureViewport = /* @__PURE__ */ defineComponent({
27
28
  const transformCss = ref("translate(0px, 0px) rotate(0deg) scale(1, 1)");
28
29
  const useTransition = ref(false);
29
30
  const ready = ref(false);
30
- const dragging = ref(false);
31
31
  const canPan = ref(false);
32
32
  const natural = shallowRef({
33
33
  w: 0,
@@ -35,7 +35,6 @@ var PictureViewport = /* @__PURE__ */ defineComponent({
35
35
  });
36
36
  const localApi = createPictureViewport();
37
37
  const api = () => props.controller ?? localApi;
38
- let dragLast = null;
39
38
  let unsub;
40
39
  const syncFromApi = () => {
41
40
  const a = api();
@@ -102,36 +101,27 @@ var PictureViewport = /* @__PURE__ */ defineComponent({
102
101
  const p = pointerFromCenter(e.clientX, e.clientY);
103
102
  api().zoomAt(p.x, p.y, factor);
104
103
  }
105
- function onPointerDown(e) {
106
- if (!props.interact || !ready.value) return;
107
- if (e.button !== 0) return;
108
- if (!api().canPan()) return;
109
- e.preventDefault();
110
- dragging.value = true;
111
- dragLast = {
112
- x: e.clientX,
113
- y: e.clientY
114
- };
115
- e.currentTarget.setPointerCapture?.(e.pointerId);
116
- }
117
- function onPointerMove(e) {
118
- if (!dragging.value || !dragLast) return;
119
- const dx = e.clientX - dragLast.x;
120
- const dy = e.clientY - dragLast.y;
121
- dragLast = {
122
- x: e.clientX,
123
- y: e.clientY
124
- };
125
- api().panBy(dx, dy);
126
- }
127
- function onPointerUp(e) {
128
- if (!dragging.value) return;
129
- dragging.value = false;
130
- dragLast = null;
131
- try {
132
- e.currentTarget.releasePointerCapture?.(e.pointerId);
133
- } catch {}
134
- }
104
+ const { dragging, onPointerDown, onPointerMove, onPointerUp } = usePointerDrag({
105
+ events: "pointer",
106
+ bind: "capture",
107
+ disabled: () => !props.interact || !ready.value,
108
+ onStart: (e, ctx) => {
109
+ if (e.button !== 0) return false;
110
+ if (!api().canPan()) return false;
111
+ e.preventDefault();
112
+ ctx.data.lastX = e.clientX;
113
+ ctx.data.lastY = e.clientY;
114
+ },
115
+ onMove: (e, ctx) => {
116
+ const lastX = ctx.data.lastX;
117
+ const lastY = ctx.data.lastY;
118
+ const dx = e.clientX - lastX;
119
+ const dy = e.clientY - lastY;
120
+ ctx.data.lastX = e.clientX;
121
+ ctx.data.lastY = e.clientY;
122
+ api().panBy(dx, dy);
123
+ }
124
+ });
135
125
  onMounted(() => {
136
126
  measureViewport();
137
127
  if (imgRef.value?.complete) onImgLoad();