iglooform 3.7.9 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.dumi/tmp/core/defineApp.ts +1 -1
  2. package/.dumi/tmp/core/helmet.ts +1 -1
  3. package/.dumi/tmp/core/history.ts +1 -1
  4. package/.dumi/tmp/core/historyIntelli.ts +1 -1
  5. package/.dumi/tmp/core/plugin.ts +2 -2
  6. package/.dumi/tmp/core/polyfill.ts +197 -197
  7. package/.dumi/tmp/core/route.tsx +33 -33
  8. package/.dumi/tmp/dumi/exports.ts +1 -1
  9. package/.dumi/tmp/dumi/locales/runtime.tsx +2 -2
  10. package/.dumi/tmp/dumi/meta/index.ts +33 -33
  11. package/.dumi/tmp/dumi/meta/runtime.ts +1 -1
  12. package/.dumi/tmp/dumi/theme/ContextWrapper.tsx +2 -2
  13. package/.dumi/tmp/dumi/theme/builtins/API.ts +1 -1
  14. package/.dumi/tmp/dumi/theme/builtins/Badge.ts +1 -1
  15. package/.dumi/tmp/dumi/theme/builtins/Container.ts +1 -1
  16. package/.dumi/tmp/dumi/theme/builtins/Previewer.ts +1 -1
  17. package/.dumi/tmp/dumi/theme/builtins/SourceCode.ts +1 -1
  18. package/.dumi/tmp/dumi/theme/builtins/Table.ts +1 -1
  19. package/.dumi/tmp/dumi/theme/builtins/Tree.ts +1 -1
  20. package/.dumi/tmp/dumi/theme/layouts/DocLayout.ts +1 -1
  21. package/.dumi/tmp/dumi/theme/loading.tsx +1 -1
  22. package/.dumi/tmp/dumi/theme/slots/ColorSwitch.ts +1 -1
  23. package/.dumi/tmp/dumi/theme/slots/Content.ts +1 -1
  24. package/.dumi/tmp/dumi/theme/slots/ContentFooter.ts +1 -1
  25. package/.dumi/tmp/dumi/theme/slots/ContentTabs.ts +1 -1
  26. package/.dumi/tmp/dumi/theme/slots/Features.ts +1 -1
  27. package/.dumi/tmp/dumi/theme/slots/Footer.ts +1 -1
  28. package/.dumi/tmp/dumi/theme/slots/Header.ts +1 -1
  29. package/.dumi/tmp/dumi/theme/slots/HeaderExtra.ts +1 -1
  30. package/.dumi/tmp/dumi/theme/slots/Hero.ts +1 -1
  31. package/.dumi/tmp/dumi/theme/slots/HeroTitle.ts +1 -1
  32. package/.dumi/tmp/dumi/theme/slots/LangSwitch.ts +1 -1
  33. package/.dumi/tmp/dumi/theme/slots/Logo.ts +1 -1
  34. package/.dumi/tmp/dumi/theme/slots/Navbar.ts +1 -1
  35. package/.dumi/tmp/dumi/theme/slots/NavbarExtra.ts +1 -1
  36. package/.dumi/tmp/dumi/theme/slots/NotFound.ts +1 -1
  37. package/.dumi/tmp/dumi/theme/slots/PreviewerActions.ts +1 -1
  38. package/.dumi/tmp/dumi/theme/slots/PreviewerActionsExtra.ts +1 -1
  39. package/.dumi/tmp/dumi/theme/slots/RtlSwitch.ts +1 -1
  40. package/.dumi/tmp/dumi/theme/slots/SearchBar.ts +2 -2
  41. package/.dumi/tmp/dumi/theme/slots/SearchResult.ts +1 -1
  42. package/.dumi/tmp/dumi/theme/slots/Sidebar.ts +1 -1
  43. package/.dumi/tmp/dumi/theme/slots/SocialIcon.ts +1 -1
  44. package/.dumi/tmp/dumi/theme/slots/Toc.ts +1 -1
  45. package/.dumi/tmp/exports.ts +5 -5
  46. package/.dumi/tmp/testBrowser.tsx +3 -3
  47. package/.dumi/tmp/umi.ts +4 -4
  48. package/es/media/index.js +62 -30
  49. package/es/media/preview.d.ts +1 -0
  50. package/es/media/preview.js +118 -35
  51. package/es/media/style/index.less +6 -11
  52. package/lib/media/index.js +61 -29
  53. package/lib/media/preview.d.ts +1 -0
  54. package/lib/media/preview.js +117 -34
  55. package/lib/media/style/index.less +6 -11
  56. package/package.json +1 -1
  57. package/.idea/codeStyles/Project.xml +0 -80
  58. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  59. package/.idea/iglooformv3.iml +0 -12
  60. package/.idea/modules.xml +0 -8
  61. package/.idea/prettier.xml +0 -6
  62. package/.idea/vcs.xml +0 -6
  63. package/es/currency-context/index.d.ts +0 -8
  64. package/es/media/index.d.ts +0 -30
  65. package/es/media/media.d.ts +0 -14
  66. package/lib/currency-context/index.d.ts +0 -8
  67. package/lib/media/index.d.ts +0 -30
  68. package/lib/media/media.d.ts +0 -14
package/es/media/index.js CHANGED
@@ -16,12 +16,13 @@ import PreviewMedia from "./preview";
16
16
  import classnames from 'classnames';
17
17
  import Typography from "../typography";
18
18
  import FileIcon from "./file-icon";
19
- import { MinusOutlined, PlusOutlined, ArrowRightOutlined, ArrowLeftOutlined, CrossOutlined, DownloadOutlined } from 'iglooicon';
19
+ import { MinusOutlined, PlusOutlined, ArrowRightOutlined, ArrowLeftOutlined, CrossOutlined, DownloadOutlined, RefreshOutlined } from 'iglooicon';
20
20
  import "./style";
21
21
  import { jsx as _jsx } from "react/jsx-runtime";
22
22
  import { Fragment as _Fragment } from "react/jsx-runtime";
23
23
  import { jsxs as _jsxs } from "react/jsx-runtime";
24
24
  var MediaWithPreview = function MediaWithPreview(_ref) {
25
+ var _list$current;
25
26
  var srcProp = _ref.src,
26
27
  name = _ref.name,
27
28
  className = _ref.className,
@@ -76,6 +77,10 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
76
77
  _useState14 = _slicedToArray(_useState13, 2),
77
78
  direction = _useState14[0],
78
79
  setDirection = _useState14[1];
80
+ var _useState15 = useState(0),
81
+ _useState16 = _slicedToArray(_useState15, 2),
82
+ rotation = _useState16[0],
83
+ setRotation = _useState16[1];
79
84
  useEffect(function () {
80
85
  setType(type);
81
86
  }, [type]);
@@ -185,6 +190,9 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
185
190
  var close = function close() {
186
191
  setShowModal(false);
187
192
  setCurrent(index);
193
+ setScale(1);
194
+ setRotation(0);
195
+ setDirection('');
188
196
  };
189
197
  var toLeft = function toLeft() {
190
198
  setCurrent(function (current) {
@@ -198,6 +206,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
198
206
  return next;
199
207
  });
200
208
  setScale(1);
209
+ setRotation(0);
201
210
  setDirection('left');
202
211
  };
203
212
  var toRight = function toRight() {
@@ -212,6 +221,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
212
221
  return next;
213
222
  });
214
223
  setScale(1);
224
+ setRotation(0);
215
225
  setDirection('right');
216
226
  };
217
227
  var zoomIn = function zoomIn(e) {
@@ -222,6 +232,12 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
222
232
  e.preventDefault();
223
233
  setScale(scale + 0.2);
224
234
  };
235
+ var rotate = function rotate(e) {
236
+ e.preventDefault();
237
+ setRotation(function (rotation) {
238
+ return (rotation + 270) % 360;
239
+ });
240
+ };
225
241
  var onDownloadClick = /*#__PURE__*/function () {
226
242
  var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(downloadUrl) {
227
243
  var filename, actionType, res, blob, url;
@@ -372,6 +388,8 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
372
388
  return index === current - 1;
373
389
  }
374
390
  };
391
+ var currentPreviewType = (list === null || list === void 0 ? void 0 : list.length) > 0 ? (_list$current = list[current]) === null || _list$current === void 0 ? void 0 : _list$current.type : mediaType;
392
+ var canRotate = currentPreviewType === 'image';
375
393
  return /*#__PURE__*/_jsxs("div", {
376
394
  className: className,
377
395
  style: style,
@@ -437,6 +455,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
437
455
  type: type,
438
456
  src: src,
439
457
  scale: scale,
458
+ rotation: rotation,
440
459
  isCurrent: index === current
441
460
  })
442
461
  }, index);
@@ -446,38 +465,51 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
446
465
  type: mediaType,
447
466
  src: src,
448
467
  scale: scale,
468
+ rotation: rotation,
449
469
  isCurrent: true,
450
470
  showAllPages: showAllPages
451
471
  })
452
- }, index), /*#__PURE__*/_jsx(MinusOutlined, {
453
- onClick: zoomIn,
454
- className: classnames({
455
- 'igloo-preview-action-btn': true,
456
- 'igloo-preview-zoom-in': true,
457
- 'igloo-preview-disabled': scale <= 0.5
458
- }),
459
- style: {
460
- fontSize: 24
461
- }
462
- }), /*#__PURE__*/_jsx(PlusOutlined, {
463
- onClick: zoomOut,
464
- className: classnames({
465
- 'igloo-preview-action-btn': true,
466
- 'igloo-preview-zoom-out': true,
467
- 'igloo-preview-disabled': scale >= 2
468
- }),
469
- style: {
470
- fontSize: 24
471
- }
472
- }), download && /*#__PURE__*/_jsx(DownloadOutlined, {
473
- onClick: onDownloadByModal,
474
- className: classnames({
475
- 'igloo-preview-action-btn': true,
476
- 'igloo-preview-download-btn': true
477
- }),
478
- style: {
479
- fontSize: 24
480
- }
472
+ }, index), /*#__PURE__*/_jsxs("div", {
473
+ className: "igloo-preview-actions",
474
+ children: [/*#__PURE__*/_jsx(MinusOutlined, {
475
+ onClick: zoomIn,
476
+ className: classnames({
477
+ 'igloo-preview-action-btn': true,
478
+ 'igloo-preview-zoom-in': true,
479
+ 'igloo-preview-disabled': scale <= 0.5
480
+ }),
481
+ style: {
482
+ fontSize: 24
483
+ }
484
+ }), /*#__PURE__*/_jsx(PlusOutlined, {
485
+ onClick: zoomOut,
486
+ className: classnames({
487
+ 'igloo-preview-action-btn': true,
488
+ 'igloo-preview-zoom-out': true,
489
+ 'igloo-preview-disabled': scale >= 2
490
+ }),
491
+ style: {
492
+ fontSize: 24
493
+ }
494
+ }), canRotate && /*#__PURE__*/_jsx(RefreshOutlined, {
495
+ onClick: rotate,
496
+ className: classnames({
497
+ 'igloo-preview-action-btn': true,
498
+ 'igloo-preview-rotate-btn': true
499
+ }),
500
+ style: {
501
+ fontSize: 24
502
+ }
503
+ }), download && /*#__PURE__*/_jsx(DownloadOutlined, {
504
+ onClick: onDownloadByModal,
505
+ className: classnames({
506
+ 'igloo-preview-action-btn': true,
507
+ 'igloo-preview-download-btn': true
508
+ }),
509
+ style: {
510
+ fontSize: 24
511
+ }
512
+ })]
481
513
  }), (list.length > 2 || list.length === 2 && current === 1) && /*#__PURE__*/_jsx(ArrowLeftOutlined, {
482
514
  className: "igloo-media-page-btn",
483
515
  style: {
@@ -3,6 +3,7 @@ interface MediaProps {
3
3
  src: string;
4
4
  type: string;
5
5
  scale?: number;
6
+ rotation?: number;
6
7
  isCurrent?: boolean;
7
8
  className?: any;
8
9
  style?: CSSProperties;
@@ -10,7 +10,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
10
10
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
11
  function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
12
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
- import React, { useState, useRef, useContext, useReducer } from 'react';
13
+ import React, { useState, useRef, useContext, useReducer, useEffect } from 'react';
14
14
  import { Document, Page } from 'react-pdf/dist/esm/entry.webpack';
15
15
  import classnames from 'classnames';
16
16
  import { ArrowLeftOutlined, ArrowRightOutlined } from 'iglooicon';
@@ -207,10 +207,30 @@ var PdfViewer = function PdfViewer(_ref) {
207
207
  })]
208
208
  });
209
209
  };
210
+ var getImageLayoutSize = function getImageLayoutSize(imageSize, containerSize, rotation) {
211
+ var imageWidth = imageSize.width,
212
+ imageHeight = imageSize.height;
213
+ var containerWidth = containerSize.width,
214
+ containerHeight = containerSize.height;
215
+ if (!imageWidth || !imageHeight || !containerWidth || !containerHeight) {
216
+ return undefined;
217
+ }
218
+ var isQuarterTurn = Math.abs(rotation % 180) === 90;
219
+ var ratio = isQuarterTurn ? Math.min(containerWidth / imageHeight, containerHeight / imageWidth) : Math.min(containerWidth / imageWidth, containerHeight / imageHeight);
220
+ if (!isFinite(ratio) || ratio <= 0) {
221
+ return undefined;
222
+ }
223
+ return {
224
+ width: imageWidth * ratio,
225
+ height: imageHeight * ratio
226
+ };
227
+ };
210
228
  var MediaItem = function MediaItem(_ref3) {
211
229
  var type = _ref3.type,
212
230
  src = _ref3.src,
213
231
  scale = _ref3.scale,
232
+ rotation = _ref3.rotation,
233
+ containerSize = _ref3.containerSize,
214
234
  offset = _ref3.offset,
215
235
  isCurrent = _ref3.isCurrent,
216
236
  showAllPages = _ref3.showAllPages;
@@ -218,6 +238,14 @@ var MediaItem = function MediaItem(_ref3) {
218
238
  left = offset.left;
219
239
  var _useContext2 = useContext(LocaleContext),
220
240
  formatMessage = _useContext2.formatMessage;
241
+ var _useState7 = useState({
242
+ width: 0,
243
+ height: 0
244
+ }),
245
+ _useState8 = _slicedToArray(_useState7, 2),
246
+ imageSize = _useState8[0],
247
+ setImageSize = _useState8[1];
248
+ var imageLayoutSize = getImageLayoutSize(imageSize, containerSize, rotation);
221
249
  switch (type) {
222
250
  case 'video':
223
251
  return /*#__PURE__*/_jsx("video", {
@@ -238,14 +266,32 @@ var MediaItem = function MediaItem(_ref3) {
238
266
  showAllPages: showAllPages
239
267
  });
240
268
  case 'image':
241
- return /*#__PURE__*/_jsx("img", {
242
- src: src,
269
+ return /*#__PURE__*/_jsx("div", {
243
270
  style: {
244
- maxWidth: '100%',
245
- maxHeight: '100%',
246
- transform: "scale(".concat(scale, ") translate(").concat(left, "px, ").concat(top, "px)"),
247
- position: 'absolute'
248
- }
271
+ position: 'absolute',
272
+ inset: 0,
273
+ display: 'flex',
274
+ justifyContent: 'center',
275
+ alignItems: 'center',
276
+ transform: "translate(".concat(left, "px, ").concat(top, "px)")
277
+ },
278
+ children: /*#__PURE__*/_jsx("img", {
279
+ src: src,
280
+ onLoad: function onLoad(_ref4) {
281
+ var currentTarget = _ref4.currentTarget;
282
+ return setImageSize({
283
+ width: currentTarget.naturalWidth,
284
+ height: currentTarget.naturalHeight
285
+ });
286
+ },
287
+ style: _objectSpread(_objectSpread({}, imageLayoutSize ? imageLayoutSize : {
288
+ maxWidth: '100%',
289
+ maxHeight: '100%'
290
+ }), {}, {
291
+ display: 'block',
292
+ transform: "scale(".concat(scale, ") rotate(").concat(rotation, "deg)")
293
+ })
294
+ })
249
295
  });
250
296
  default:
251
297
  return /*#__PURE__*/_jsxs("div", {
@@ -262,42 +308,76 @@ var MediaItem = function MediaItem(_ref3) {
262
308
  });
263
309
  }
264
310
  };
265
- var Media = function Media(_ref4) {
266
- var src = _ref4.src,
267
- className = _ref4.className,
268
- style = _ref4.style,
269
- _ref4$scale = _ref4.scale,
270
- scale = _ref4$scale === void 0 ? 1 : _ref4$scale,
271
- type = _ref4.type,
272
- _ref4$isCurrent = _ref4.isCurrent,
273
- isCurrent = _ref4$isCurrent === void 0 ? false : _ref4$isCurrent,
274
- _ref4$showAllPages = _ref4.showAllPages,
275
- showAllPages = _ref4$showAllPages === void 0 ? true : _ref4$showAllPages;
276
- var _useState7 = useState(false),
277
- _useState8 = _slicedToArray(_useState7, 2),
278
- isDrag = _useState8[0],
279
- setIsDrag = _useState8[1];
280
- var _useState9 = useState({
281
- startX: 0,
282
- startY: 0
283
- }),
311
+ var Media = function Media(_ref5) {
312
+ var src = _ref5.src,
313
+ className = _ref5.className,
314
+ style = _ref5.style,
315
+ _ref5$scale = _ref5.scale,
316
+ scale = _ref5$scale === void 0 ? 1 : _ref5$scale,
317
+ _ref5$rotation = _ref5.rotation,
318
+ rotation = _ref5$rotation === void 0 ? 0 : _ref5$rotation,
319
+ type = _ref5.type,
320
+ _ref5$isCurrent = _ref5.isCurrent,
321
+ isCurrent = _ref5$isCurrent === void 0 ? false : _ref5$isCurrent,
322
+ _ref5$showAllPages = _ref5.showAllPages,
323
+ showAllPages = _ref5$showAllPages === void 0 ? true : _ref5$showAllPages;
324
+ var _useState9 = useState(false),
284
325
  _useState10 = _slicedToArray(_useState9, 2),
285
- startPos = _useState10[0],
286
- setStartPos = _useState10[1];
326
+ isDrag = _useState10[0],
327
+ setIsDrag = _useState10[1];
287
328
  var _useState11 = useState({
288
- top: 0,
289
- left: 0
329
+ startX: 0,
330
+ startY: 0
290
331
  }),
291
332
  _useState12 = _slicedToArray(_useState11, 2),
292
- offset = _useState12[0],
293
- setOffset = _useState12[1];
333
+ startPos = _useState12[0],
334
+ setStartPos = _useState12[1];
294
335
  var _useState13 = useState({
295
336
  top: 0,
296
337
  left: 0
297
338
  }),
298
339
  _useState14 = _slicedToArray(_useState13, 2),
299
- lastOffset = _useState14[0],
300
- setLastOffset = _useState14[1];
340
+ offset = _useState14[0],
341
+ setOffset = _useState14[1];
342
+ var _useState15 = useState({
343
+ top: 0,
344
+ left: 0
345
+ }),
346
+ _useState16 = _slicedToArray(_useState15, 2),
347
+ lastOffset = _useState16[0],
348
+ setLastOffset = _useState16[1];
349
+ var containerRef = useRef(null);
350
+ var _useState17 = useState({
351
+ width: 0,
352
+ height: 0
353
+ }),
354
+ _useState18 = _slicedToArray(_useState17, 2),
355
+ containerSize = _useState18[0],
356
+ setContainerSize = _useState18[1];
357
+ useEffect(function () {
358
+ var current = containerRef.current;
359
+ if (!current) {
360
+ return;
361
+ }
362
+ var updateContainerSize = function updateContainerSize() {
363
+ setContainerSize({
364
+ width: current.clientWidth,
365
+ height: current.clientHeight
366
+ });
367
+ };
368
+ updateContainerSize();
369
+ if (typeof ResizeObserver === 'undefined') {
370
+ window.addEventListener('resize', updateContainerSize);
371
+ return function () {
372
+ return window.removeEventListener('resize', updateContainerSize);
373
+ };
374
+ }
375
+ var observer = new ResizeObserver(updateContainerSize);
376
+ observer.observe(current);
377
+ return function () {
378
+ return observer.disconnect();
379
+ };
380
+ }, []);
301
381
  var handleMouseUp = function handleMouseUp(e) {
302
382
  e.preventDefault();
303
383
  var button = e.button;
@@ -340,6 +420,7 @@ var Media = function Media(_ref4) {
340
420
  });
341
421
  };
342
422
  return /*#__PURE__*/_jsx("div", {
423
+ ref: containerRef,
343
424
  style: {
344
425
  position: 'relative',
345
426
  width: '100%',
@@ -356,6 +437,8 @@ var Media = function Media(_ref4) {
356
437
  type: type,
357
438
  src: src,
358
439
  scale: scale,
440
+ rotation: rotation,
441
+ containerSize: containerSize,
359
442
  offset: offset,
360
443
  isCurrent: isCurrent,
361
444
  showAllPages: showAllPages
@@ -108,21 +108,16 @@
108
108
  margin-top: 16px;
109
109
  }
110
110
 
111
- .igloo-preview-zoom-in {
111
+ .igloo-preview-actions {
112
+ position: fixed;
112
113
  right: 24px;
113
- }
114
-
115
- .igloo-preview-zoom-out {
116
- right: 80px;
117
- }
118
-
119
- .igloo-preview-download-btn {
120
- right: 136px;
114
+ bottom: 24px;
115
+ display: flex;
116
+ flex-direction: row-reverse;
117
+ gap: 16px;
121
118
  }
122
119
 
123
120
  .igloo-preview-action-btn {
124
- position: fixed;
125
- bottom: 24px;
126
121
  display: flex;
127
122
  justify-content: center;
128
123
  align-items: center;
@@ -29,6 +29,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
29
29
  function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
30
30
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
31
31
  var MediaWithPreview = function MediaWithPreview(_ref) {
32
+ var _list$current;
32
33
  var srcProp = _ref.src,
33
34
  name = _ref.name,
34
35
  className = _ref.className,
@@ -83,6 +84,10 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
83
84
  _useState14 = _slicedToArray(_useState13, 2),
84
85
  direction = _useState14[0],
85
86
  setDirection = _useState14[1];
87
+ var _useState15 = (0, _react.useState)(0),
88
+ _useState16 = _slicedToArray(_useState15, 2),
89
+ rotation = _useState16[0],
90
+ setRotation = _useState16[1];
86
91
  (0, _react.useEffect)(function () {
87
92
  setType(type);
88
93
  }, [type]);
@@ -192,6 +197,9 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
192
197
  var close = function close() {
193
198
  setShowModal(false);
194
199
  setCurrent(index);
200
+ setScale(1);
201
+ setRotation(0);
202
+ setDirection('');
195
203
  };
196
204
  var toLeft = function toLeft() {
197
205
  setCurrent(function (current) {
@@ -205,6 +213,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
205
213
  return next;
206
214
  });
207
215
  setScale(1);
216
+ setRotation(0);
208
217
  setDirection('left');
209
218
  };
210
219
  var toRight = function toRight() {
@@ -219,6 +228,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
219
228
  return next;
220
229
  });
221
230
  setScale(1);
231
+ setRotation(0);
222
232
  setDirection('right');
223
233
  };
224
234
  var zoomIn = function zoomIn(e) {
@@ -229,6 +239,12 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
229
239
  e.preventDefault();
230
240
  setScale(scale + 0.2);
231
241
  };
242
+ var rotate = function rotate(e) {
243
+ e.preventDefault();
244
+ setRotation(function (rotation) {
245
+ return (rotation + 270) % 360;
246
+ });
247
+ };
232
248
  var onDownloadClick = /*#__PURE__*/function () {
233
249
  var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(downloadUrl) {
234
250
  var filename, actionType, res, blob, url;
@@ -379,6 +395,8 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
379
395
  return index === current - 1;
380
396
  }
381
397
  };
398
+ var currentPreviewType = (list === null || list === void 0 ? void 0 : list.length) > 0 ? (_list$current = list[current]) === null || _list$current === void 0 ? void 0 : _list$current.type : mediaType;
399
+ var canRotate = currentPreviewType === 'image';
382
400
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
383
401
  className: className,
384
402
  style: style,
@@ -444,6 +462,7 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
444
462
  type: type,
445
463
  src: src,
446
464
  scale: scale,
465
+ rotation: rotation,
447
466
  isCurrent: index === current
448
467
  })
449
468
  }, index);
@@ -453,38 +472,51 @@ var MediaWithPreview = function MediaWithPreview(_ref) {
453
472
  type: mediaType,
454
473
  src: src,
455
474
  scale: scale,
475
+ rotation: rotation,
456
476
  isCurrent: true,
457
477
  showAllPages: showAllPages
458
478
  })
459
- }, index), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.MinusOutlined, {
460
- onClick: zoomIn,
461
- className: (0, _classnames.default)({
462
- 'igloo-preview-action-btn': true,
463
- 'igloo-preview-zoom-in': true,
464
- 'igloo-preview-disabled': scale <= 0.5
465
- }),
466
- style: {
467
- fontSize: 24
468
- }
469
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.PlusOutlined, {
470
- onClick: zoomOut,
471
- className: (0, _classnames.default)({
472
- 'igloo-preview-action-btn': true,
473
- 'igloo-preview-zoom-out': true,
474
- 'igloo-preview-disabled': scale >= 2
475
- }),
476
- style: {
477
- fontSize: 24
478
- }
479
- }), download && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.DownloadOutlined, {
480
- onClick: onDownloadByModal,
481
- className: (0, _classnames.default)({
482
- 'igloo-preview-action-btn': true,
483
- 'igloo-preview-download-btn': true
484
- }),
485
- style: {
486
- fontSize: 24
487
- }
479
+ }, index), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
480
+ className: "igloo-preview-actions",
481
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.MinusOutlined, {
482
+ onClick: zoomIn,
483
+ className: (0, _classnames.default)({
484
+ 'igloo-preview-action-btn': true,
485
+ 'igloo-preview-zoom-in': true,
486
+ 'igloo-preview-disabled': scale <= 0.5
487
+ }),
488
+ style: {
489
+ fontSize: 24
490
+ }
491
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.PlusOutlined, {
492
+ onClick: zoomOut,
493
+ className: (0, _classnames.default)({
494
+ 'igloo-preview-action-btn': true,
495
+ 'igloo-preview-zoom-out': true,
496
+ 'igloo-preview-disabled': scale >= 2
497
+ }),
498
+ style: {
499
+ fontSize: 24
500
+ }
501
+ }), canRotate && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.RefreshOutlined, {
502
+ onClick: rotate,
503
+ className: (0, _classnames.default)({
504
+ 'igloo-preview-action-btn': true,
505
+ 'igloo-preview-rotate-btn': true
506
+ }),
507
+ style: {
508
+ fontSize: 24
509
+ }
510
+ }), download && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.DownloadOutlined, {
511
+ onClick: onDownloadByModal,
512
+ className: (0, _classnames.default)({
513
+ 'igloo-preview-action-btn': true,
514
+ 'igloo-preview-download-btn': true
515
+ }),
516
+ style: {
517
+ fontSize: 24
518
+ }
519
+ })]
488
520
  }), (list.length > 2 || list.length === 2 && current === 1) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iglooicon.ArrowLeftOutlined, {
489
521
  className: "igloo-media-page-btn",
490
522
  style: {
@@ -3,6 +3,7 @@ interface MediaProps {
3
3
  src: string;
4
4
  type: string;
5
5
  scale?: number;
6
+ rotation?: number;
6
7
  isCurrent?: boolean;
7
8
  className?: any;
8
9
  style?: CSSProperties;