@v-c/image 1.0.0 → 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 (46) hide show
  1. package/dist/Preview/index.js +1 -1
  2. package/package.json +4 -4
  3. package/dist/Image.cjs +0 -231
  4. package/dist/Preview/CloseBtn.cjs +0 -44
  5. package/dist/Preview/Footer.cjs +0 -234
  6. package/dist/Preview/PrevNext.cjs +0 -59
  7. package/dist/Preview/index.cjs +0 -404
  8. package/dist/PreviewGroup.cjs +0 -138
  9. package/dist/common.cjs +0 -13
  10. package/dist/context.cjs +0 -11
  11. package/dist/getFixScaleEleTransPosition.cjs +0 -28
  12. package/dist/hooks/useImageTransform.cjs +0 -99
  13. package/dist/hooks/useMouseEvent.cjs +0 -96
  14. package/dist/hooks/usePreviewItems.cjs +0 -48
  15. package/dist/hooks/useRegisterImage.cjs +0 -28
  16. package/dist/hooks/useStatus.cjs +0 -49
  17. package/dist/hooks/useTouchEvent.cjs +0 -125
  18. package/dist/index.cjs +0 -11
  19. package/dist/interface.cjs +0 -1
  20. package/dist/portal/dist/Context.cjs +0 -12
  21. package/dist/portal/dist/Portal.cjs +0 -100
  22. package/dist/portal/dist/index.cjs +0 -3
  23. package/dist/portal/dist/useDom.cjs +0 -47
  24. package/dist/portal/dist/useEscKeyDown.cjs +0 -57
  25. package/dist/portal/dist/useScrollLocker.cjs +0 -28
  26. package/dist/portal/dist/util.cjs +0 -4
  27. package/dist/previewConfig.cjs +0 -5
  28. package/dist/util/dist/Dom/canUseDom.cjs +0 -4
  29. package/dist/util/dist/Dom/contains.cjs +0 -11
  30. package/dist/util/dist/Dom/dynamicCSS.cjs +0 -80
  31. package/dist/util/dist/KeyCode.cjs +0 -81
  32. package/dist/util/dist/RenderComponent.cjs +0 -29
  33. package/dist/util/dist/classnames.cjs +0 -36
  34. package/dist/util/dist/getScrollBarSize.cjs +0 -53
  35. package/dist/util/dist/hooks/useId.cjs +0 -5
  36. package/dist/util/dist/hooks/useMergedState.cjs +0 -24
  37. package/dist/util/dist/index.cjs +0 -7
  38. package/dist/util/dist/isEqual.cjs +0 -27
  39. package/dist/util/dist/omit.cjs +0 -8
  40. package/dist/util/dist/pickAttrs.cjs +0 -39
  41. package/dist/util/dist/props-util/index.cjs +0 -47
  42. package/dist/util/dist/raf.cjs +0 -36
  43. package/dist/util/dist/type.cjs +0 -2
  44. package/dist/util/dist/utils/transition.cjs +0 -21
  45. package/dist/util/dist/warning.cjs +0 -37
  46. package/dist/util.cjs +0 -27
@@ -1,404 +0,0 @@
1
- Object.defineProperties(exports, {
2
- __esModule: { value: true },
3
- [Symbol.toStringTag]: { value: "Module" }
4
- });
5
- const require_KeyCode = require("../util/dist/KeyCode.cjs");
6
- const require_classnames = require("../util/dist/classnames.cjs");
7
- require("../util/dist/index.cjs");
8
- const require_context = require("../context.cjs");
9
- const require_useStatus = require("../hooks/useStatus.cjs");
10
- const require_canUseDom = require("../util/dist/Dom/canUseDom.cjs");
11
- const require_index$1 = require("../portal/dist/index.cjs");
12
- const require_transition = require("../util/dist/utils/transition.cjs");
13
- const require_useImageTransform = require("../hooks/useImageTransform.cjs");
14
- const require_previewConfig = require("../previewConfig.cjs");
15
- const require_useMouseEvent = require("../hooks/useMouseEvent.cjs");
16
- const require_useTouchEvent = require("../hooks/useTouchEvent.cjs");
17
- const require_CloseBtn = require("./CloseBtn.cjs");
18
- const require_Footer = require("./Footer.cjs");
19
- const require_PrevNext = require("./PrevNext.cjs");
20
- let vue = require("vue");
21
- var Preview = /* @__PURE__ */ (0, vue.defineComponent)((props, { attrs, slots }) => {
22
- const imgEl = (0, vue.shallowRef)();
23
- const groupContext = require_context.usePreviewGroupContext();
24
- const showLeftOrRightSwitches = (0, vue.computed)(() => !!groupContext && (props.count ?? 1) > 1);
25
- const showOperationsProgress = (0, vue.computed)(() => !!groupContext && (props.count ?? 1) >= 1);
26
- const enableTransition = (0, vue.shallowRef)(true);
27
- (0, vue.watch)(enableTransition, async (val) => {
28
- if (!val) {
29
- await (0, vue.nextTick)();
30
- enableTransition.value = true;
31
- }
32
- });
33
- const { transform, resetTransform, updateTransform, dispatchZoomChange } = require_useImageTransform.default(imgEl, (0, vue.computed)(() => props.minScale ?? 1), (0, vue.computed)(() => props.maxScale ?? 50), (info) => props.onTransform?.(info));
34
- const { isMoving, onMouseDown, onWheel } = require_useMouseEvent.default(imgEl, (0, vue.computed)(() => props.movable ?? true), (0, vue.computed)(() => !!props.open), (0, vue.computed)(() => props.scaleStep ?? .5), transform, updateTransform, dispatchZoomChange);
35
- const { isTouching, onTouchStart, onTouchMove, onTouchEnd } = require_useTouchEvent.default(imgEl, (0, vue.computed)(() => props.movable ?? true), (0, vue.computed)(() => !!props.open), (0, vue.computed)(() => props.minScale ?? 1), transform, updateTransform, dispatchZoomChange);
36
- (0, vue.watch)(() => props.open, (open) => {
37
- if (!open) resetTransform("close");
38
- });
39
- const onDoubleClick = (event) => {
40
- if (!props.open) return;
41
- if (transform.value.scale !== 1) updateTransform({
42
- x: 0,
43
- y: 0,
44
- scale: 1
45
- }, "doubleClick");
46
- else dispatchZoomChange(1 + (props.scaleStep ?? .5), "doubleClick", event.clientX, event.clientY);
47
- };
48
- const onZoomIn = () => {
49
- dispatchZoomChange(1 + (props.scaleStep ?? .5), "zoomIn");
50
- };
51
- const onZoomOut = () => {
52
- dispatchZoomChange(1 / (1 + (props.scaleStep ?? .5)), "zoomOut");
53
- };
54
- const onRotateRight = () => {
55
- updateTransform({ rotate: transform.value.rotate + 90 }, "rotateRight");
56
- };
57
- const onRotateLeft = () => {
58
- updateTransform({ rotate: transform.value.rotate - 90 }, "rotateLeft");
59
- };
60
- const onFlipX = () => {
61
- updateTransform({ flipX: !transform.value.flipX }, "flipX");
62
- };
63
- const onFlipY = () => {
64
- updateTransform({ flipY: !transform.value.flipY }, "flipY");
65
- };
66
- const onReset = () => {
67
- resetTransform("reset");
68
- };
69
- const onActive = (offset) => {
70
- const current = props.current ?? 0;
71
- const count = props.count ?? 1;
72
- const nextCurrent = current + offset;
73
- if (nextCurrent >= 0 && nextCurrent <= count - 1) {
74
- enableTransition.value = false;
75
- resetTransform(offset < 0 ? "prev" : "next");
76
- props.onChange?.(nextCurrent, current);
77
- }
78
- };
79
- const onKeyDown = (event) => {
80
- if (!props.open) return;
81
- const { key } = event;
82
- if (key === require_KeyCode.KeyCodeStr.Escape) {
83
- props.onClose?.();
84
- return;
85
- }
86
- if (showLeftOrRightSwitches.value) {
87
- if (key === require_KeyCode.KeyCodeStr.ArrowLeft) onActive(-1);
88
- else if (key === require_KeyCode.KeyCodeStr.ArrowRight) onActive(1);
89
- }
90
- };
91
- (0, vue.watchEffect)((onCleanup) => {
92
- if (!require_canUseDom.canUseDom()) return;
93
- if (props.open) window.addEventListener("keydown", onKeyDown);
94
- onCleanup(() => {
95
- window.removeEventListener("keydown", onKeyDown);
96
- });
97
- });
98
- const lockScroll = (0, vue.shallowRef)(false);
99
- (0, vue.watch)(() => props.open, (open) => {
100
- if (open) lockScroll.value = true;
101
- });
102
- const portalRender = (0, vue.shallowRef)(false);
103
- (0, vue.watch)(() => props.open, (open) => {
104
- if (open) portalRender.value = true;
105
- });
106
- const onVisibleChanged = (nextVisible) => {
107
- if (!nextVisible) {
108
- lockScroll.value = false;
109
- portalRender.value = false;
110
- }
111
- props.afterOpenChange?.(nextVisible);
112
- };
113
- const setImgRef = (el) => {
114
- imgEl.value = el;
115
- };
116
- const [getImgRef, srcAndOnload] = require_useStatus.default({
117
- src: (0, vue.computed)(() => props.src),
118
- fallback: (0, vue.computed)(() => props.fallback)
119
- });
120
- return () => {
121
- const { prefixCls, rootClassName, src, alt, imageInfo, open, closeIcon, getContainer, current = 0, count = 1, countRender, motionName = "fade", imageRender, imgCommonProps, actionsRender = slots?.actionsRender, classNames = {}, styles = {}, mousePosition, zIndex, icons = {} } = props;
122
- const bodyStyle = { ...styles.body ?? {} };
123
- if (mousePosition) bodyStyle.transformOrigin = `${mousePosition.x}px ${mousePosition.y}px`;
124
- const image = {
125
- url: src || "",
126
- alt: alt || "",
127
- ...imageInfo
128
- };
129
- const imgNode = (0, vue.createVNode)("img", (0, vue.mergeProps)(imgCommonProps, {
130
- "src": srcAndOnload.value.src,
131
- "ref": (el) => {
132
- setImgRef(el);
133
- getImgRef(el);
134
- },
135
- "width": props.width,
136
- "height": props.height,
137
- "class": `${prefixCls}-img`,
138
- "alt": alt,
139
- "onLoad": srcAndOnload.value.onLoad,
140
- "style": {
141
- transform: `translate3d(${transform.value.x}px, ${transform.value.y}px, 0) scale3d(${transform.value.flipX ? "-" : ""}${transform.value.scale}, ${transform.value.flipY ? "-" : ""}${transform.value.scale}, 1) rotate(${transform.value.rotate}deg)`,
142
- transitionDuration: !enableTransition.value || isTouching.value ? "0s" : void 0
143
- },
144
- "onWheel": onWheel,
145
- "onMousedown": onMouseDown,
146
- "onDblclick": onDoubleClick,
147
- "onTouchstart": onTouchStart,
148
- "onTouchmove": onTouchMove,
149
- "onTouchend": onTouchEnd,
150
- "onTouchcancel": onTouchEnd
151
- }), null);
152
- const mergedRootStyle = {
153
- ...styles.root ?? {},
154
- ...attrs.style
155
- };
156
- if (zIndex) mergedRootStyle.zIndex = zIndex;
157
- const mergedRootCls = require_classnames.clsx(prefixCls, rootClassName, classNames.root, { [`${prefixCls}-moving`]: isMoving.value });
158
- const transitionProps = require_transition.getTransitionProps(motionName);
159
- return (0, vue.createVNode)(require_index$1.src_default, {
160
- "open": portalRender.value,
161
- "getContainer": getContainer,
162
- "autoLock": lockScroll.value
163
- }, { default: () => [(0, vue.createVNode)(vue.Transition, (0, vue.mergeProps)(transitionProps, {
164
- "onAfterEnter": () => onVisibleChanged(true),
165
- "onAfterLeave": () => onVisibleChanged(false)
166
- }), { default: () => {
167
- if (!(portalRender.value && open)) return null;
168
- return (0, vue.createVNode)("div", {
169
- "class": mergedRootCls,
170
- "style": mergedRootStyle
171
- }, [
172
- (0, vue.createVNode)("div", {
173
- "class": require_classnames.clsx(`${prefixCls}-mask`, classNames.mask),
174
- "style": styles.mask,
175
- "onClick": () => props.onClose?.()
176
- }, null),
177
- (0, vue.createVNode)("div", {
178
- "class": require_classnames.clsx(`${prefixCls}-body`, classNames.body),
179
- "style": bodyStyle
180
- }, [imageRender ? imageRender(imgNode, {
181
- transform: transform.value,
182
- image,
183
- ...groupContext ? { current } : {}
184
- }) : imgNode]),
185
- closeIcon !== false && closeIcon !== null && (0, vue.createVNode)(require_CloseBtn.default, {
186
- "prefixCls": prefixCls,
187
- "icon": closeIcon === true ? icons.close : closeIcon || icons.close,
188
- "onClick": () => props.onClose?.()
189
- }, null),
190
- showLeftOrRightSwitches.value && (0, vue.createVNode)(require_PrevNext.default, {
191
- "prefixCls": prefixCls,
192
- "current": current,
193
- "count": count,
194
- "icons": icons,
195
- "onActive": onActive
196
- }, null),
197
- (0, vue.createVNode)(require_Footer.default, {
198
- "prefixCls": prefixCls,
199
- "showProgress": showOperationsProgress.value,
200
- "current": current,
201
- "count": count,
202
- "showSwitch": showLeftOrRightSwitches.value,
203
- "classNames": classNames,
204
- "styles": styles,
205
- "image": image,
206
- "transform": transform.value,
207
- "icons": icons,
208
- "countRender": countRender,
209
- "actionsRender": actionsRender,
210
- "scale": transform.value.scale,
211
- "minScale": props.minScale ?? 1,
212
- "maxScale": props.maxScale ?? 50,
213
- "onActive": onActive,
214
- "onFlipY": onFlipY,
215
- "onFlipX": onFlipX,
216
- "onRotateLeft": onRotateLeft,
217
- "onRotateRight": onRotateRight,
218
- "onZoomOut": onZoomOut,
219
- "onZoomIn": onZoomIn,
220
- "onClose": () => props.onClose?.(),
221
- "onReset": onReset
222
- }, null)
223
- ]);
224
- } })] });
225
- };
226
- }, {
227
- props: /* @__PURE__ */ (0, vue.mergeDefaults)({
228
- prefixCls: {
229
- type: String,
230
- required: true,
231
- default: void 0
232
- },
233
- classNames: {
234
- type: Object,
235
- required: false,
236
- default: void 0
237
- },
238
- styles: {
239
- type: Object,
240
- required: false,
241
- default: void 0
242
- },
243
- imageInfo: {
244
- type: Object,
245
- required: false,
246
- default: void 0
247
- },
248
- fallback: {
249
- type: String,
250
- required: false,
251
- default: void 0
252
- },
253
- imgCommonProps: {
254
- type: Object,
255
- required: false,
256
- default: void 0
257
- },
258
- width: {
259
- type: [String, Number],
260
- required: false,
261
- default: void 0
262
- },
263
- height: {
264
- type: [String, Number],
265
- required: false,
266
- default: void 0
267
- },
268
- current: {
269
- type: Number,
270
- required: false,
271
- default: void 0
272
- },
273
- count: {
274
- type: Number,
275
- required: false,
276
- default: void 0
277
- },
278
- onChange: {
279
- type: Function,
280
- required: false,
281
- default: void 0
282
- },
283
- onClose: {
284
- type: Function,
285
- required: false,
286
- default: void 0
287
- },
288
- mousePosition: {
289
- type: [null, Object],
290
- required: true,
291
- default: void 0
292
- },
293
- rootClassName: {
294
- type: String,
295
- required: false,
296
- default: void 0
297
- },
298
- src: {
299
- type: String,
300
- required: false,
301
- default: void 0
302
- },
303
- alt: {
304
- type: String,
305
- required: false,
306
- default: void 0
307
- },
308
- scaleStep: {
309
- type: Number,
310
- required: false,
311
- default: void 0
312
- },
313
- minScale: {
314
- type: Number,
315
- required: false,
316
- default: void 0
317
- },
318
- maxScale: {
319
- type: Number,
320
- required: false,
321
- default: void 0
322
- },
323
- motionName: {
324
- type: String,
325
- required: false,
326
- default: void 0
327
- },
328
- open: {
329
- type: Boolean,
330
- required: false,
331
- default: void 0
332
- },
333
- getContainer: {
334
- required: false,
335
- default: void 0
336
- },
337
- zIndex: {
338
- type: Number,
339
- required: false,
340
- default: void 0
341
- },
342
- afterOpenChange: {
343
- type: Function,
344
- required: false,
345
- default: void 0
346
- },
347
- movable: {
348
- type: Boolean,
349
- required: false,
350
- default: void 0
351
- },
352
- icons: {
353
- type: Object,
354
- required: false,
355
- default: void 0
356
- },
357
- closeIcon: {
358
- type: [
359
- Object,
360
- Function,
361
- String,
362
- Number,
363
- null,
364
- Boolean,
365
- Array
366
- ],
367
- required: false,
368
- default: void 0
369
- },
370
- onTransform: {
371
- type: Function,
372
- required: false,
373
- default: void 0
374
- },
375
- countRender: {
376
- type: Function,
377
- required: false,
378
- default: void 0
379
- },
380
- imageRender: {
381
- type: Function,
382
- required: false,
383
- default: void 0
384
- },
385
- actionsRender: {
386
- type: Function,
387
- required: false,
388
- default: void 0
389
- }
390
- }, {
391
- movable: true,
392
- scaleStep: .5,
393
- minScale: 1,
394
- maxScale: 50,
395
- motionName: "fade",
396
- current: 0,
397
- count: 1,
398
- icons: {}
399
- }),
400
- name: "ImagePreview",
401
- inheritAttrs: false
402
- });
403
- var Preview_default = Preview;
404
- exports.default = Preview_default;
@@ -1,138 +0,0 @@
1
- Object.defineProperties(exports, {
2
- __esModule: { value: true },
3
- [Symbol.toStringTag]: { value: "Module" }
4
- });
5
- const require_useMergedState = require("./util/dist/hooks/useMergedState.cjs");
6
- const require_context = require("./context.cjs");
7
- const require_index = require("./Preview/index.cjs");
8
- const require_usePreviewItems = require("./hooks/usePreviewItems.cjs");
9
- let vue = require("vue");
10
- var PreviewGroup = /* @__PURE__ */ (0, vue.defineComponent)((props, { slots, emit }) => {
11
- const mergedPreviewConfig = (0, vue.computed)(() => {
12
- if (props.preview && typeof props.preview === "object") return props.preview;
13
- return {};
14
- });
15
- const previewOpen = (0, vue.computed)(() => mergedPreviewConfig.value.open);
16
- const previewCurrent = (0, vue.computed)(() => mergedPreviewConfig.value.current);
17
- const [mergedItems, register, fromItems] = require_usePreviewItems.default((0, vue.toRef)(props, "items"));
18
- const [current, setCurrent] = require_useMergedState.useMergedState(0, { value: previewCurrent });
19
- const keepOpenIndex = (0, vue.shallowRef)(false);
20
- const [isShowPreview, setShowPreview] = require_useMergedState.useMergedState(!!previewOpen.value, { value: previewOpen });
21
- const triggerShowPreview = (next) => {
22
- const prev = isShowPreview.value;
23
- setShowPreview(next);
24
- if (next !== prev) mergedPreviewConfig.value.onOpenChange?.(next, { current: current.value });
25
- };
26
- const mousePosition = (0, vue.shallowRef)(null);
27
- const onPreviewFromImage = (id, imageSrc, mouseX, mouseY) => {
28
- const itemsList = mergedItems.value;
29
- const index = fromItems.value ? itemsList.findIndex((item) => item.data.src === imageSrc) : itemsList.findIndex((item) => item.id === id);
30
- setCurrent(index < 0 ? 0 : index);
31
- triggerShowPreview(true);
32
- mousePosition.value = {
33
- x: mouseX,
34
- y: mouseY
35
- };
36
- keepOpenIndex.value = true;
37
- };
38
- (0, vue.watch)(isShowPreview, (open) => {
39
- if (open) {
40
- if (!keepOpenIndex.value) setCurrent(0);
41
- } else keepOpenIndex.value = false;
42
- });
43
- const onInternalChange = (next, prev) => {
44
- setCurrent(next);
45
- mergedPreviewConfig.value.onChange?.(next, prev);
46
- emit("change", next, prev);
47
- };
48
- const onPreviewClose = () => {
49
- triggerShowPreview(false);
50
- mousePosition.value = null;
51
- };
52
- require_context.usePreviewGroupProvider({
53
- register,
54
- onPreview: onPreviewFromImage
55
- });
56
- return () => {
57
- const itemsList = mergedItems.value;
58
- const { src, ...imgCommonProps } = itemsList[current.value]?.data || {};
59
- const countRender = slots.countRender ? (currentNum, total) => slots.countRender?.(currentNum, total) : mergedPreviewConfig.value.countRender;
60
- const { open: _open, current: _current, onOpenChange: _onOpenChange, onChange: _onChange, ...restPreviewConfig } = mergedPreviewConfig.value;
61
- return (0, vue.createVNode)(vue.Fragment, null, [slots.default?.(), (0, vue.createVNode)(require_index.default, (0, vue.mergeProps)({
62
- "aria-hidden": !isShowPreview.value,
63
- "open": isShowPreview.value,
64
- "prefixCls": props.previewPrefixCls,
65
- "onClose": onPreviewClose,
66
- "mousePosition": mousePosition.value,
67
- "imgCommonProps": imgCommonProps,
68
- "src": src,
69
- "fallback": props.fallback,
70
- "icons": props.icons,
71
- "current": current.value,
72
- "count": itemsList.length,
73
- "onChange": onInternalChange
74
- }, restPreviewConfig, {
75
- "countRender": countRender,
76
- "classNames": props.classNames?.popup,
77
- "styles": props.styles?.popup
78
- }), slots)]);
79
- };
80
- }, {
81
- props: /* @__PURE__ */ (0, vue.mergeDefaults)({
82
- previewPrefixCls: {
83
- type: String,
84
- required: false,
85
- default: void 0
86
- },
87
- classNames: {
88
- type: Object,
89
- required: false,
90
- default: void 0
91
- },
92
- styles: {
93
- type: Object,
94
- required: false,
95
- default: void 0
96
- },
97
- icons: {
98
- required: false,
99
- default: void 0
100
- },
101
- items: {
102
- type: Array,
103
- required: false,
104
- default: void 0
105
- },
106
- fallback: {
107
- type: String,
108
- required: false,
109
- default: void 0
110
- },
111
- preview: {
112
- type: [Boolean, Object],
113
- required: false,
114
- default: void 0
115
- },
116
- children: {
117
- type: [
118
- Object,
119
- Function,
120
- String,
121
- Number,
122
- null,
123
- Boolean,
124
- Array
125
- ],
126
- required: false,
127
- default: void 0
128
- }
129
- }, {
130
- previewPrefixCls: "vc-image-preview",
131
- icons: {}
132
- }),
133
- name: "ImagePreviewGroup",
134
- inheritAttrs: false,
135
- emits: ["change"]
136
- });
137
- var PreviewGroup_default = PreviewGroup;
138
- exports.default = PreviewGroup_default;
package/dist/common.cjs DELETED
@@ -1,13 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const COMMON_PROPS = [
3
- "crossOrigin",
4
- "decoding",
5
- "draggable",
6
- "loading",
7
- "referrerPolicy",
8
- "sizes",
9
- "srcset",
10
- "useMap",
11
- "alt"
12
- ];
13
- exports.COMMON_PROPS = COMMON_PROPS;
package/dist/context.cjs DELETED
@@ -1,11 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- let vue = require("vue");
3
- var PreviewGroupContextKey = Symbol("PreviewGroupContext");
4
- function usePreviewGroupContext() {
5
- return (0, vue.inject)(PreviewGroupContextKey, null);
6
- }
7
- function usePreviewGroupProvider(value) {
8
- (0, vue.provide)(PreviewGroupContextKey, value);
9
- }
10
- exports.usePreviewGroupContext = usePreviewGroupContext;
11
- exports.usePreviewGroupProvider = usePreviewGroupProvider;
@@ -1,28 +0,0 @@
1
- Object.defineProperties(exports, {
2
- __esModule: { value: true },
3
- [Symbol.toStringTag]: { value: "Module" }
4
- });
5
- const require_util = require("./util.cjs");
6
- function fixPoint(key, start, width, clientWidth) {
7
- const startAddWidth = start + width;
8
- const offsetStart = (width - clientWidth) / 2;
9
- if (width > clientWidth) {
10
- if (start > 0) return { [key]: offsetStart };
11
- if (start < 0 && startAddWidth < clientWidth) return { [key]: -offsetStart };
12
- } else if (start < 0 || startAddWidth > clientWidth) return { [key]: start < 0 ? offsetStart : -offsetStart };
13
- return {};
14
- }
15
- function getFixScaleEleTransPosition(width, height, left, top) {
16
- const { width: clientWidth, height: clientHeight } = require_util.getClientSize();
17
- let fixPos = null;
18
- if (width <= clientWidth && height <= clientHeight) fixPos = {
19
- x: 0,
20
- y: 0
21
- };
22
- else if (width > clientWidth || height > clientHeight) fixPos = {
23
- ...fixPoint("x", left, width, clientWidth),
24
- ...fixPoint("y", top, height, clientHeight)
25
- };
26
- return fixPos;
27
- }
28
- exports.default = getFixScaleEleTransPosition;
@@ -1,99 +0,0 @@
1
- Object.defineProperties(exports, {
2
- __esModule: { value: true },
3
- [Symbol.toStringTag]: { value: "Module" }
4
- });
5
- const require_raf = require("../util/dist/raf.cjs");
6
- const require_util = require("../util.cjs");
7
- const require_isEqual = require("../util/dist/isEqual.cjs");
8
- let vue = require("vue");
9
- var initialTransform = {
10
- x: 0,
11
- y: 0,
12
- rotate: 0,
13
- scale: 1,
14
- flipX: false,
15
- flipY: false
16
- };
17
- function useImageTransform(imgRef, minScale, maxScale, onTransform) {
18
- const frame = (0, vue.shallowRef)(null);
19
- const queue = (0, vue.ref)([]);
20
- const transform = (0, vue.shallowRef)(initialTransform);
21
- const resetTransform = (action) => {
22
- const oldTransform = transform.value;
23
- transform.value = initialTransform;
24
- if (!require_isEqual.isEqual_default(initialTransform, oldTransform)) onTransform?.({
25
- transform: initialTransform,
26
- action
27
- });
28
- };
29
- const updateTransform = (newTransform, action) => {
30
- if (frame.value === null) {
31
- queue.value = [];
32
- frame.value = require_raf.raf_default(() => {
33
- let memoState = transform.value;
34
- queue.value.forEach((queueState) => {
35
- memoState = {
36
- ...memoState,
37
- ...queueState
38
- };
39
- });
40
- frame.value = null;
41
- onTransform?.({
42
- transform: memoState,
43
- action
44
- });
45
- transform.value = memoState;
46
- });
47
- }
48
- queue.value.push({
49
- ...transform.value,
50
- ...newTransform
51
- });
52
- };
53
- const dispatchZoomChange = (ratio, action, centerX, centerY, isTouch) => {
54
- if (!imgRef.value) return;
55
- const { width, height, offsetWidth, offsetHeight, offsetLeft, offsetTop } = imgRef.value;
56
- const _transform = transform.value;
57
- const _maxScale = maxScale.value;
58
- const _minScale = minScale.value;
59
- let newRatio = ratio;
60
- let newScale = _transform.scale * ratio;
61
- if (newScale > _maxScale) {
62
- newScale = _maxScale;
63
- newRatio = _maxScale / _transform.scale;
64
- } else if (newScale < _minScale) {
65
- newScale = isTouch ? newScale : _minScale;
66
- newRatio = newScale / _transform.scale;
67
- }
68
- const mergedCenterX = centerX ?? innerWidth / 2;
69
- const mergedCenterY = centerY ?? innerHeight / 2;
70
- const diffRatio = newRatio - 1;
71
- const diffImgX = diffRatio * width * .5;
72
- const diffImgY = diffRatio * height * .5;
73
- const diffOffsetLeft = diffRatio * (mergedCenterX - _transform.x - offsetLeft);
74
- const diffOffsetTop = diffRatio * (mergedCenterY - _transform.y - offsetTop);
75
- let newX = _transform.x - (diffOffsetLeft - diffImgX);
76
- let newY = _transform.y - (diffOffsetTop - diffImgY);
77
- if (ratio < 1 && newScale === 1) {
78
- const mergedWidth = offsetWidth * newScale;
79
- const mergedHeight = offsetHeight * newScale;
80
- const { width: clientWidth, height: clientHeight } = require_util.getClientSize();
81
- if (mergedWidth <= clientWidth && mergedHeight <= clientHeight) {
82
- newX = 0;
83
- newY = 0;
84
- }
85
- }
86
- updateTransform({
87
- x: newX,
88
- y: newY,
89
- scale: newScale
90
- }, action);
91
- };
92
- return {
93
- transform,
94
- resetTransform,
95
- updateTransform,
96
- dispatchZoomChange
97
- };
98
- }
99
- exports.default = useImageTransform;