@ctzhian/tiptap 2.1.5 → 2.1.6
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.
- package/dist/Editor/demo.js +1 -1
- package/dist/component/ImageViewer/Item.d.ts +3 -1
- package/dist/component/ImageViewer/Item.js +38 -15
- package/dist/component/ImageViewer/Provider.js +124 -121
- package/dist/component/ImageViewer/Toolbar.d.ts +1 -5
- package/dist/component/ImageViewer/Toolbar.js +113 -136
- package/dist/component/ImageViewer/context.js +15 -12
- package/dist/component/ImageViewer/index.d.ts +3 -1
- package/dist/component/ImageViewer/types.d.ts +10 -21
- package/dist/extension/component/Image/index.js +1 -1
- package/package.json +1 -1
package/dist/Editor/demo.js
CHANGED
|
@@ -8,7 +8,7 @@ import React from 'react';
|
|
|
8
8
|
import "../index.css";
|
|
9
9
|
var EDITABLE = true;
|
|
10
10
|
var DEFAULT_CONTENT_TYPE = 'html';
|
|
11
|
-
var DEFAULT_HTML_CONTENT = "<p></p>\n<h6 id=\"4b8d8c4e-29dc-4674-928b-b9ded0e363ae\" data-toc-id=\"4b8d8c4e-29dc-4674-928b-b9ded0e363ae\"><span data-name=\"watch\" data-type=\"emoji\">\u231A</span> \u8868\u683C\u64CD\u4F5C</h6>\n<table><tbody><tr class=\"table-row\"><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" colwidth=\"361\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u94FE\u63A5</p></th><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u590D\u6742\u6587\u672C</p></th><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u56FE\u7247</p></th><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u9644\u4EF6</p></th></tr><tr class=\"table-row\"><td colspan=\"1\" rowspan=\"1\" colwidth=\"361\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><a target=\"_blank\" class=\"MuiBox-root css-1ivg9gg\" type=\"icon\" rel=\"noopener noreferrer\" title=\"\u70B9\u51FB\u6B64\u5904\u8DF3\u8F6C\" href=\"http://localhost:8000/components/editor\">\u70B9\u51FB\u6B64\u5904\u8DF3\u8F6C</a></p></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><code>\u77E5</code><span style=\"background-color: rgb(255, 204, 188); color: rgb(90, 141, 218);\">\u529B</span><span style=\"color: rgb(90, 141, 218);\">\u4F9B</span><sup>\u5386</sup><sub>\u53F2</sub><u>\u52A8</u><s>\u5927</s><span style=\"background-color: rgb(172, 84, 84);\">\u501F</span><mark>\u7B54</mark></p></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><img src=\"https://
|
|
11
|
+
var DEFAULT_HTML_CONTENT = "<p></p>\n<p><img src=\"https://fuss10.elemecdn.com/8/27/f01c15bb73e1ef3793e64e6b7bbccjpeg.jpeg\" width=\"100\"></p>\n<p><img src=\"https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg\" width=\"100\"></p>\n<h6 id=\"4b8d8c4e-29dc-4674-928b-b9ded0e363ae\" data-toc-id=\"4b8d8c4e-29dc-4674-928b-b9ded0e363ae\"><span data-name=\"watch\" data-type=\"emoji\">\u231A</span> \u8868\u683C\u64CD\u4F5C</h6>\n<table><tbody><tr class=\"table-row\"><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" colwidth=\"361\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u94FE\u63A5</p></th><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u590D\u6742\u6587\u672C</p></th><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u56FE\u7247</p></th><th class=\"table-header\" colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p>\u9644\u4EF6</p></th></tr><tr class=\"table-row\"><td colspan=\"1\" rowspan=\"1\" colwidth=\"361\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><a target=\"_blank\" class=\"MuiBox-root css-1ivg9gg\" type=\"icon\" rel=\"noopener noreferrer\" title=\"\u70B9\u51FB\u6B64\u5904\u8DF3\u8F6C\" href=\"http://localhost:8000/components/editor\">\u70B9\u51FB\u6B64\u5904\u8DF3\u8F6C</a></p></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><code>\u77E5</code><span style=\"background-color: rgb(255, 204, 188); color: rgb(90, 141, 218);\">\u529B</span><span style=\"color: rgb(90, 141, 218);\">\u4F9B</span><sup>\u5386</sup><sub>\u53F2</sub><u>\u52A8</u><s>\u5927</s><span style=\"background-color: rgb(172, 84, 84);\">\u501F</span><mark>\u7B54</mark></p></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><img src=\"https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg\" width=\"100\"></p></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" data-vertical-align=\"middle\" style=\"text-align: center; vertical-align: middle;\"><p><span data-tag=\"attachment\" url=\"\" title=\"\" size=\"0\" data-url=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" data-title=\"\u8C01\u662F\u6211\u4EEC\u7684\u654C\u4EBA.txt\" data-size=\"18.27 KB\"></span></p></td></tr><tr class=\"table-row\"><td colspan=\"1\" rowspan=\"1\" colwidth=\"361\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><video src=\"https://media.w3.org/2010/05/sintel/trailer.mp4\" controls=\"true\" width=\"75%\"></video></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p></p><audio src=\"http://vjs.zencdn.net/v/oceans.mp4\" controls=\"true\"></audio></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p></p></td><td colspan=\"1\" rowspan=\"1\" data-background-color=\"\" data-text-align=\"center\" style=\"text-align: center;\"><p></p></td></tr></tbody></table>\n<p><img src=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" width=\"100\"></p>\n<h6 id=\"a025f782-910f-4f17-9d0b-8f31f9cde175\" data-toc-id=\"a025f782-910f-4f17-9d0b-8f31f9cde175\"><span data-name=\"page_facing_up\" data-type=\"emoji\">\uD83D\uDCC4</span> \u6587\u672C\u5904\u7406</h6>\n<p>PandaWiki \u662F\u4E00\u6B3E AI \u5927\u6A21<code>\u578B\u9A71\u52A8\u7684\u5F00\u6E90\u77E5\u8BC6\u5E93\u642D</code>\u5EFA\u7CFB\u7EDF\uFF0CF<strong>AQ \u3001 \u535A\u5BA2\u7CFB\u7EDF \uFF0C\u501F\u52A9\u5927\u6A21\u578B\u7684\u529B\u91CF\u4E3A\u4F60\u63D0\u4F9B AI </strong>\u521B\u4F5C \u3001 AI \u95EE\u7B54 \u3001 AI \u641C\u7D22 \u7B49\u80FD\u529B\u3002\u501F<span style=\"color: rgb(90, 141, 218);\">\u52A9\u5927\u6A21\u578B\u7684</span><span style=\"background-color: rgb(255, 204, 188); color: rgb(90, 141, 218);\">\u529B\u91CF\u4E3A\u4F60\u63D0</span><span style=\"color: rgb(90, 141, 218);\">\u4F9B AI \u521B</span>\u4F5C\u80FD\u529B\u3002PandaWiki \u662F<u>\u4E00\u6B3E AI \u5927\u6A21\u578B\u9A71\u52A8\u7684\u5F00\u6E90\u77E5\u8BC6\u5E93\u642D\u5EFA\u7CFB\u7EDF\uFF0C\u5E2E</u>\u52A9\u4F60\u5FEB\u901F\u6784\u5EFA\u667A\u80FD\u5316\u7684 <s><u>\u4EA7\u54C1\u6587\u6863\u3001\u6280\u672F</u></s>\u6587\u6863\u3001FAQ \u3001<s> \u535A\u5BA2\u7CFB\u7EDF \uFF0C\u501F\u52A9\u5927\u6A21\u578B\u7684</s>\u529B\u91CF\u7CFB\u7EDF \uFF0C<span style=\"background-color: rgb(172, 84, 84);\">\u501F\u52A9\u5927\u6A21\u578B\u7684\u529B\u91CF\u4E3A\u4F60\u63D0\u4F9B AI \u521B\u4F5C \u3001 AI \u95EE</span>\u7B54 \u3001 AI \u641C\u7D22 \u7B49\u80FD\u529B\u3002\u7684\u529B\u91CF\u4E3A<mark>\u4F60\u63D0\u4F9B AI \u521B\u4F5C \u3001 AI \u95EE\u7B54 \u3001</mark> AI \u641C\u7D22\u3002</p>\n<a target=\"_blank\" type=\"block\" href=\"http://localhost:8000/components/editor\" title=\"\u770B\u98CE\u666F\">\u770B\u98CE\u666F</a>\n<h6>\uD83D\uDCCE \u9644\u4EF6</h6>\n<div data-tag=\"attachment\" url=\"\" title=\"\" size=\"0\" data-url=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" data-title=\"\u8C01\u662F\u6211\u4EEC\u7684\u654C\u4EBA\uFF1F\u8C01\u662F\u6211\u4EEC\u7684\u670B\u53CB\uFF1F\u8FD9\u4E2A\u95EE\u9898\u662F\u9769\u547D\u7684\u9996\u8981\u95EE\u9898\u3002\u4E2D\u56FD\u8FC7\u53BB\u4E00\u5207\u9769\u547D\u6597\u4E89\u6210.txt\" data-size=\"18.27 KB\"></div>\n<p>\u884C\u5185\u9644\u4EF6\uFF1A<span data-tag=\"attachment\" url=\"\" title=\"\" size=\"0\" data-url=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" data-title=\"font_4856251_qynqqohzdp.js\" data-size=\"412.34 KB\"></span><span data-tag=\"attachment\" url=\"\" title=\"\" size=\"0\" data-url=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" data-title=\"\u96F7\u6C60\u9879\u76EE\u8BBE\u8BA1\u65B9\u6848.docx\" data-size=\"635.74 KB\"></span></p>\n<div data-tag=\"attachment\" url=\"\" title=\"\" size=\"0\" data-url=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" data-title=\"b0f4a3e0-639f-4c09-ab33-ea9417939f87.tiff\" data-size=\"3.03 MB\"></div>\n<div data-tag=\"attachment\" url=\"\" title=\"\" size=\"0\" data-url=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" data-title=\"\u957F\u4EAD\u79D1\u6280\u516C\u53F8\u4ECB\u7ECDPPT-25.07.007_\u526F\u672C.pptx\" data-size=\"40.18 MB\"></div>\n<h6><span data-name=\"loudspeaker\" data-type=\"emoji\">\uD83D\uDCE2</span> \u97F3\u9891</h6>\n<audio src=\"http://vjs.zencdn.net/v/oceans.mp4\" controls=\"true\"></audio>\n<h6 id=\"1739ed5e-f03c-4c2f-b763-37505601c935\" data-toc-id=\"1739ed5e-f03c-4c2f-b763-37505601c935\"><span data-name=\"video_camera\" data-type=\"emoji\">\uD83D\uDCF9</span> \u89C6\u9891</h6>\n<video src=\"https://media.w3.org/2010/05/sintel/trailer.mp4\" controls=\"true\" width=\"400\" data-align=\"center\"></video>\n<h6 id=\"746ea233-0e30-44a6-849a-090202217299\" data-toc-id=\"746ea233-0e30-44a6-849a-090202217299\">\u26A0\uFE0F \u8B66\u544A\u5757</h6>\n<div data-id=\"alert_5ysakwbhvqv\" data-variant=\"warning\" data-type=\"icon\" data-node=\"alert\"><p>\u6B64\u65F6\u8FD9\u662F\u4E00\u4E2A\u8B66\u544A\u5757\u3002</p></div>\n<h6 id=\"ebb64062-9efb-4de8-887f-7f8b7f9e54ca\" data-toc-id=\"ebb64062-9efb-4de8-887f-7f8b7f9e54ca\"><span data-name=\"bar_chart\" data-type=\"emoji\">\uD83D\uDCCA</span> \u6D41\u7A0B\u56FE\u64CD\u4F5C</h6>\n<div data-type=\"flow\" data-code=\"mindmap\n root((mindmap))\n Origins\n Long history\n ::icon(fa fa-book)\n Popularisation\n British popular psychology author Tony Buzan\n Research\n On effectiveness<br/>and features\n On Automatic creation\n Uses\n Creative techniques\n Strategic planning\n Argument mapping\n Tools\n Pen and paper\n Mermaid\" data-width=\"246px\"></div>\n";
|
|
12
12
|
var DEFAULT_MARKDOWN_CONTENT = "###### :page_facing_up: \u6587\u672C\u5904\u7406\n\nPandaWiki \u662F\u4E00\u6B3E AI \u5927\u6A21`\u578B\u9A71\u52A8\u7684\u5F00\u6E90\u77E5\u8BC6\u5E93\u642D`\u5EFA\u7CFB\u7EDF\uFF0CF**AQ \u3001 \u535A\u5BA2\u7CFB\u7EDF \uFF0C\u501F\u52A9\u5927\u6A21\u578B\u7684\u529B\u91CF\u4E3A\u4F60\u63D0\u4F9B AI **\u521B\u4F5C \u3001 AI \u95EE\u7B54 \u3001 AI \u641C\u7D22 \u7B49\u80FD\u529B\u3002\u501F\u52A9\u5927\u6A21\u578B\u7684\u529B\u91CF\u4E3A\u4F60\u63D0\u4F9B AI \u521B\u4F5C\u80FD\u529B\u3002PandaWiki \u662F++\u4E00\u6B3E AI \u5927\u6A21\u578B\u9A71\u52A8\u7684\u5F00\u6E90\u77E5\u8BC6\u5E93\u642D\u5EFA\u7CFB\u7EDF\uFF0C\u5E2E++\u52A9\u4F60\u5FEB\u901F\u6784\u5EFA\u667A\u80FD\u5316\u7684 ++~~\u4EA7\u54C1\u6587\u6863\u3001\u6280\u672F~~++\u6587\u6863\u3001FAQ \u3001~~ \u535A\u5BA2\u7CFB\u7EDF \uFF0C\u501F\u52A9\u5927\u6A21\u578B\u7684~~\u529B\u91CF\u7CFB\u7EDF \uFF0C\u501F\u52A9\u5927\u6A21\u578B\u7684\u529B\u91CF\u4E3A\u4F60\u63D0\u4F9B AI \u521B\u4F5C \u3001 AI \u95EE\u7B54 \u3001 AI \u641C\u7D22 \u7B49\u80FD\u529B\u3002\u7684\u529B\u91CF\u4E3A==\u4F60\u63D0\u4F9B AI \u521B\u4F5C \u3001 AI \u95EE\u7B54 \u3001== AI \u641C\u7D22\u3002\n\n###### :video_camera: \u89C6\u9891\n\n<video src=\"https://media.w3.org/2010/05/sintel/trailer.mp4\" width=\"400\" controls ></video>\n\n###### \u26A0\uFE0F \u8B66\u544A\u5757\n\n:::alert {#alert_5ysakwbhvqv indent=\"0\" variant=\"warning\" type=\"icon\"}\n\n\u6B64\u65F6\u8FD9\u662F\u4E00\u4E2A\u8B66\u544A\u5757\u3002\n\n:::\n\n###### :bar_chart: \u6D41\u7A0B\u56FE\u64CD\u4F5C\n\n```mermaid\nmindmap\n root((mindmap))\n Origins\n Long history\n ::icon(fa fa-book)\n Popularisation\n British popular psychology author Tony Buzan\n Research\n On effectiveness<br/>and features\n On Automatic creation\n Uses\n Creative techniques\n Strategic planning\n Argument mapping\n Tools\n Pen and paper\n Mermaid\n```\n\n###### :watch: \u8868\u683C\u64CD\u4F5C\n\n\n| \u94FE\u63A5 | \u590D\u6742\u6587\u672C | \u56FE\u7247 | \u9644\u4EF6 |\n| ------------------------------------------------------------------------------------------- | --------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| [\u70B9\u51FB\u6B64\u5904\u8DF3\u8F6C](http://localhost:8000/components/editor) | `\u77E5`\u529B\u4F9B^\u5386^~\u53F2~++\u52A8++~~\u5927~~\u501F==\u7B54== |  | <a href=\"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg\" target=\"_blank\" download=\"\u8C01\u662F\u6211\u4EEC\u7684\u654C\u4EBA.txt\">\u8C01\u662F\u6211\u4EEC\u7684\u654C\u4EBA.txt</a> |\n| <video src=\"https://media.w3.org/2010/05/sintel/trailer.mp4\" width=\"75%\" controls ></video> | \x1F | | |\n\n\n";
|
|
13
13
|
var Reader = function Reader() {
|
|
14
14
|
// @ts-ignore
|
|
@@ -1,20 +1,43 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import {
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import { ImageViewerContext } from "./context";
|
|
3
3
|
export var ImageViewerItem = function ImageViewerItem(_ref) {
|
|
4
4
|
var src = _ref.src,
|
|
5
5
|
children = _ref.children,
|
|
6
|
-
render = _ref.render,
|
|
7
|
-
overlay = _ref.overlay,
|
|
8
|
-
width = _ref.width,
|
|
9
|
-
height = _ref.height,
|
|
10
6
|
_ref$triggers = _ref.triggers,
|
|
11
|
-
triggers = _ref$triggers === void 0 ? ['onClick'] : _ref$triggers
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
triggers = _ref$triggers === void 0 ? ['onClick'] : _ref$triggers,
|
|
8
|
+
onImageClick = _ref.onImageClick;
|
|
9
|
+
var context = useContext(ImageViewerContext);
|
|
10
|
+
var handleClick = function handleClick(e) {
|
|
11
|
+
// 如果在拖拽,不处理
|
|
12
|
+
if (e.defaultPrevented) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (triggers.includes('onClick')) {
|
|
16
|
+
var clickHandler = onImageClick || context.onImageClick;
|
|
17
|
+
if (clickHandler) {
|
|
18
|
+
e.stopPropagation();
|
|
19
|
+
clickHandler(src);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// 直接克隆 children 并添加点击事件
|
|
25
|
+
if ( /*#__PURE__*/React.isValidElement(children)) {
|
|
26
|
+
var originalProps = children.props;
|
|
27
|
+
return /*#__PURE__*/React.cloneElement(children, {
|
|
28
|
+
onClick: function onClick(e) {
|
|
29
|
+
// 先调用原来的 onClick
|
|
30
|
+
if (originalProps.onClick) {
|
|
31
|
+
originalProps.onClick(e);
|
|
32
|
+
}
|
|
33
|
+
// 再调用我们的处理
|
|
34
|
+
if (!e.defaultPrevented) {
|
|
35
|
+
handleClick(e);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
'data-image-viewer-item': true,
|
|
39
|
+
'data-src': src
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
20
43
|
};
|
|
@@ -4,10 +4,9 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
4
4
|
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; }
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
-
import React, {
|
|
8
|
-
import {
|
|
7
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
8
|
+
import { PhotoSlider } from 'react-photo-view';
|
|
9
9
|
import { ImageViewerContext } from "./context";
|
|
10
|
-
import { ImageViewerItem } from "./Item";
|
|
11
10
|
import { customStyles } from "./styles";
|
|
12
11
|
import { CustomToolbar } from "./Toolbar";
|
|
13
12
|
export var ImageViewerProvider = function ImageViewerProvider(_ref) {
|
|
@@ -16,7 +15,7 @@ export var ImageViewerProvider = function ImageViewerProvider(_ref) {
|
|
|
16
15
|
speed = _ref$speed === void 0 ? 500 : _ref$speed,
|
|
17
16
|
_ref$maskOpacity = _ref.maskOpacity,
|
|
18
17
|
maskOpacity = _ref$maskOpacity === void 0 ? 0.3 : _ref$maskOpacity,
|
|
19
|
-
|
|
18
|
+
onVisibleChange = _ref.onVisibleChange,
|
|
20
19
|
_onIndexChange = _ref.onIndexChange,
|
|
21
20
|
_ref$loop = _ref.loop,
|
|
22
21
|
loop = _ref$loop === void 0 ? 3 : _ref$loop,
|
|
@@ -40,41 +39,24 @@ export var ImageViewerProvider = function ImageViewerProvider(_ref) {
|
|
|
40
39
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
41
40
|
visible = _useState4[0],
|
|
42
41
|
setVisible = _useState4[1];
|
|
43
|
-
var _useState5 = useState(
|
|
42
|
+
var _useState5 = useState(0),
|
|
44
43
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
viewIndex = _useState6[0],
|
|
45
|
+
setViewIndex = _useState6[1];
|
|
47
46
|
var _useState7 = useState(0),
|
|
48
47
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var
|
|
52
|
-
_useState10 = _slicedToArray(_useState9, 2),
|
|
53
|
-
onScale = _useState10[0],
|
|
54
|
-
setOnScale = _useState10[1];
|
|
55
|
-
var _useState11 = useState(null),
|
|
56
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
57
|
-
onRotate = _useState12[0],
|
|
58
|
-
setOnRotate = _useState12[1];
|
|
59
|
-
var _useState13 = useState(null),
|
|
60
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
|
61
|
-
onClose = _useState14[0],
|
|
62
|
-
setOnClose = _useState14[1];
|
|
63
|
-
var imageSrcsRef = useRef([]);
|
|
48
|
+
totalImages = _useState8[0],
|
|
49
|
+
setTotalImages = _useState8[1];
|
|
50
|
+
var containerRef = useRef(null);
|
|
64
51
|
var overlayStateRef = useRef({
|
|
65
52
|
scale: 1,
|
|
66
53
|
rotate: 0,
|
|
67
|
-
visible: false,
|
|
68
|
-
onScale: null,
|
|
69
|
-
onRotate: null,
|
|
70
|
-
onClose: null,
|
|
71
|
-
index: undefined
|
|
72
|
-
});
|
|
73
|
-
var callbacksRef = useRef({
|
|
74
54
|
onScale: null,
|
|
75
55
|
onRotate: null,
|
|
76
56
|
onClose: null
|
|
77
57
|
});
|
|
58
|
+
|
|
59
|
+
// 注入自定义样式
|
|
78
60
|
useEffect(function () {
|
|
79
61
|
if (typeof document !== 'undefined' && !document.getElementById('image-viewer-custom-styles')) {
|
|
80
62
|
var styleElement = document.createElement('style');
|
|
@@ -83,69 +65,115 @@ export var ImageViewerProvider = function ImageViewerProvider(_ref) {
|
|
|
83
65
|
document.head.appendChild(styleElement);
|
|
84
66
|
}
|
|
85
67
|
}, []);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
setOnScale(function () {
|
|
95
|
-
return state.onScale;
|
|
96
|
-
});
|
|
97
|
-
setOnRotate(function () {
|
|
98
|
-
return state.onRotate;
|
|
99
|
-
});
|
|
100
|
-
setOnClose(function () {
|
|
101
|
-
return state.onClose;
|
|
102
|
-
});
|
|
103
|
-
if (state.visible && state.index !== undefined) {
|
|
104
|
-
var src = imageSrcsRef.current[state.index];
|
|
68
|
+
|
|
69
|
+
// 从 DOM 中动态收集所有图片数据(按照 DOM 顺序)
|
|
70
|
+
var collectImagesFromDOM = useCallback(function () {
|
|
71
|
+
if (!containerRef.current) return [];
|
|
72
|
+
var items = containerRef.current.querySelectorAll('[data-image-viewer-item]');
|
|
73
|
+
var result = [];
|
|
74
|
+
items.forEach(function (item) {
|
|
75
|
+
var src = item.getAttribute('data-src');
|
|
105
76
|
if (src) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
useEffect(function () {
|
|
111
|
-
var srcs = [];
|
|
112
|
-
React.Children.forEach(children, function (child) {
|
|
113
|
-
if ( /*#__PURE__*/React.isValidElement(child) && child.type === ImageViewerItem) {
|
|
114
|
-
var src = child.props.src;
|
|
115
|
-
if (src) {
|
|
116
|
-
srcs.push(src);
|
|
117
|
-
}
|
|
77
|
+
result.push({
|
|
78
|
+
src: src,
|
|
79
|
+
key: src
|
|
80
|
+
});
|
|
118
81
|
}
|
|
119
82
|
});
|
|
120
|
-
|
|
121
|
-
}, [
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
83
|
+
return result;
|
|
84
|
+
}, []);
|
|
85
|
+
|
|
86
|
+
// 处理图片点击
|
|
87
|
+
var handleImageClick = useCallback(function (src) {
|
|
88
|
+
// 每次点击时动态从 DOM 收集图片列表
|
|
89
|
+
var images = collectImagesFromDOM();
|
|
90
|
+
var index = images.findIndex(function (img) {
|
|
91
|
+
return img.src === src;
|
|
92
|
+
});
|
|
93
|
+
if (index !== -1) {
|
|
94
|
+
setViewIndex(index);
|
|
95
|
+
setCurrentSrc(src);
|
|
96
|
+
setTotalImages(images.length);
|
|
97
|
+
setVisible(true);
|
|
98
|
+
onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(true, index);
|
|
99
|
+
}
|
|
100
|
+
}, [collectImagesFromDOM, onVisibleChange]);
|
|
101
|
+
|
|
102
|
+
// 上一张
|
|
103
|
+
var handlePrevImage = useCallback(function () {
|
|
104
|
+
var images = collectImagesFromDOM();
|
|
105
|
+
if (images.length === 0) return;
|
|
106
|
+
var newIndex = viewIndex > 0 ? viewIndex - 1 : images.length - 1;
|
|
107
|
+
setViewIndex(newIndex);
|
|
108
|
+
setCurrentSrc(images[newIndex].src);
|
|
109
|
+
_onIndexChange === null || _onIndexChange === void 0 || _onIndexChange(newIndex);
|
|
110
|
+
}, [viewIndex, collectImagesFromDOM, _onIndexChange]);
|
|
111
|
+
|
|
112
|
+
// 下一张
|
|
113
|
+
var handleNextImage = useCallback(function () {
|
|
114
|
+
var images = collectImagesFromDOM();
|
|
115
|
+
if (images.length === 0) return;
|
|
116
|
+
var newIndex = viewIndex < images.length - 1 ? viewIndex + 1 : 0;
|
|
117
|
+
setViewIndex(newIndex);
|
|
118
|
+
setCurrentSrc(images[newIndex].src);
|
|
119
|
+
_onIndexChange === null || _onIndexChange === void 0 || _onIndexChange(newIndex);
|
|
120
|
+
}, [viewIndex, collectImagesFromDOM, _onIndexChange]);
|
|
121
|
+
var contextValue = React.useMemo(function () {
|
|
122
|
+
return {
|
|
123
|
+
currentSrc: currentSrc,
|
|
124
|
+
visible: visible,
|
|
125
|
+
currentIndex: viewIndex,
|
|
126
|
+
totalImages: totalImages,
|
|
127
|
+
getScale: function getScale() {
|
|
128
|
+
return overlayStateRef.current.scale;
|
|
129
|
+
},
|
|
130
|
+
getRotate: function getRotate() {
|
|
131
|
+
return overlayStateRef.current.rotate;
|
|
132
|
+
},
|
|
133
|
+
getOnScale: function getOnScale() {
|
|
134
|
+
return overlayStateRef.current.onScale;
|
|
135
|
+
},
|
|
136
|
+
getOnRotate: function getOnRotate() {
|
|
137
|
+
return overlayStateRef.current.onRotate;
|
|
138
|
+
},
|
|
139
|
+
getOnClose: function getOnClose() {
|
|
140
|
+
return overlayStateRef.current.onClose;
|
|
141
|
+
},
|
|
142
|
+
onImageClick: handleImageClick,
|
|
143
|
+
onPrevImage: handlePrevImage,
|
|
144
|
+
onNextImage: handleNextImage
|
|
145
|
+
};
|
|
146
|
+
}, [currentSrc, visible, viewIndex, totalImages, handleImageClick, handlePrevImage, handleNextImage]);
|
|
143
147
|
var handleSpeed = typeof speed === 'function' ? speed : function () {
|
|
144
|
-
return
|
|
148
|
+
return speed;
|
|
145
149
|
};
|
|
150
|
+
|
|
151
|
+
// 当需要显示时,动态获取图片列表
|
|
152
|
+
var displayImages = React.useMemo(function () {
|
|
153
|
+
if (visible) {
|
|
154
|
+
return collectImagesFromDOM();
|
|
155
|
+
}
|
|
156
|
+
return [];
|
|
157
|
+
}, [visible, collectImagesFromDOM]);
|
|
146
158
|
return /*#__PURE__*/React.createElement(ImageViewerContext.Provider, {
|
|
147
159
|
value: contextValue
|
|
148
|
-
}, /*#__PURE__*/React.createElement(
|
|
160
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
161
|
+
ref: containerRef
|
|
162
|
+
}, children), /*#__PURE__*/React.createElement(PhotoSlider, {
|
|
163
|
+
images: displayImages,
|
|
164
|
+
visible: visible,
|
|
165
|
+
index: viewIndex,
|
|
166
|
+
onClose: function onClose() {
|
|
167
|
+
setVisible(false);
|
|
168
|
+
onVisibleChange === null || onVisibleChange === void 0 || onVisibleChange(false, viewIndex);
|
|
169
|
+
},
|
|
170
|
+
onIndexChange: function onIndexChange(index) {
|
|
171
|
+
var _displayImages$index;
|
|
172
|
+
setViewIndex(index);
|
|
173
|
+
var src = (_displayImages$index = displayImages[index]) === null || _displayImages$index === void 0 ? void 0 : _displayImages$index.src;
|
|
174
|
+
if (src) setCurrentSrc(src);
|
|
175
|
+
_onIndexChange === null || _onIndexChange === void 0 || _onIndexChange(index);
|
|
176
|
+
},
|
|
149
177
|
bannerVisible: false,
|
|
150
178
|
speed: handleSpeed,
|
|
151
179
|
maskOpacity: maskOpacity,
|
|
@@ -161,44 +189,19 @@ export var ImageViewerProvider = function ImageViewerProvider(_ref) {
|
|
|
161
189
|
brokenElement: brokenElement,
|
|
162
190
|
portalContainer: portalContainer,
|
|
163
191
|
overlayRender: function overlayRender(_ref2) {
|
|
164
|
-
var
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
index = _ref2.index,
|
|
170
|
-
overlayVisible = _ref2.visible;
|
|
192
|
+
var onScale = _ref2.onScale,
|
|
193
|
+
scale = _ref2.scale,
|
|
194
|
+
rotate = _ref2.rotate,
|
|
195
|
+
onRotate = _ref2.onRotate,
|
|
196
|
+
onClose = _ref2.onClose;
|
|
171
197
|
overlayStateRef.current = {
|
|
172
|
-
scale:
|
|
173
|
-
rotate:
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
onClose: overlayOnClose,
|
|
178
|
-
index: index
|
|
198
|
+
scale: scale,
|
|
199
|
+
rotate: rotate,
|
|
200
|
+
onScale: onScale,
|
|
201
|
+
onRotate: onRotate,
|
|
202
|
+
onClose: onClose
|
|
179
203
|
};
|
|
180
204
|
return null;
|
|
181
|
-
},
|
|
182
|
-
onVisibleChange: function onVisibleChange(visible, index) {
|
|
183
|
-
setVisible(visible);
|
|
184
|
-
if (visible && index !== undefined) {
|
|
185
|
-
var src = imageSrcsRef.current[index];
|
|
186
|
-
if (src) {
|
|
187
|
-
setCurrentSrc(src);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
_onVisibleChange === null || _onVisibleChange === void 0 || _onVisibleChange(visible, index);
|
|
191
|
-
},
|
|
192
|
-
onIndexChange: function onIndexChange(index) {
|
|
193
|
-
if (index !== undefined) {
|
|
194
|
-
var src = imageSrcsRef.current[index];
|
|
195
|
-
if (src) {
|
|
196
|
-
setCurrentSrc(src);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
_onIndexChange === null || _onIndexChange === void 0 || _onIndexChange(index);
|
|
200
205
|
}
|
|
201
|
-
}
|
|
202
|
-
currentSrc: currentSrc
|
|
203
|
-
}));
|
|
206
|
+
}), /*#__PURE__*/React.createElement(CustomToolbar, null));
|
|
204
207
|
};
|
|
@@ -7,19 +7,57 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
7
7
|
import { Box, IconButton, Stack, Tooltip } from '@mui/material';
|
|
8
8
|
import React, { useCallback, useContext, useEffect, useState } from 'react';
|
|
9
9
|
import { createPortal } from 'react-dom';
|
|
10
|
-
import { AnticlockwiseLineIcon, ClockwiseLineIcon, CloseCircleFillIcon, Download2LineIcon, FullscreenExitLineIcon, FullscreenLineIcon, ResetLeftFillIcon } from "../Icons";
|
|
10
|
+
import { AnticlockwiseLineIcon, ClockwiseLineIcon, CloseCircleFillIcon, Download2LineIcon, FullscreenExitLineIcon, FullscreenLineIcon, ResetLeftFillIcon, SkipLeftIcon, SkipRightIcon } from "../Icons";
|
|
11
11
|
import { ImageViewerContext } from "./context";
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
var iconButtonSx = {
|
|
13
|
+
color: 'white',
|
|
14
|
+
'&:hover': {
|
|
15
|
+
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var Divider = function Divider() {
|
|
19
|
+
return /*#__PURE__*/React.createElement(Box, {
|
|
20
|
+
sx: {
|
|
21
|
+
width: '1px',
|
|
22
|
+
height: '24px',
|
|
23
|
+
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
24
|
+
mx: 0.5
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var ZoomInIcon = function ZoomInIcon() {
|
|
29
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
30
|
+
width: "20",
|
|
31
|
+
height: "20",
|
|
32
|
+
viewBox: "0 0 768 768",
|
|
33
|
+
fill: "currentColor"
|
|
34
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
35
|
+
d: "M384 640.5q105 0 180.75-75.75t75.75-180.75-75.75-180.75-180.75-75.75-180.75 75.75-75.75 180.75 75.75 180.75 180.75 75.75zM384 64.5q132 0 225.75 93.75t93.75 225.75-93.75 225.75-225.75 93.75-225.75-93.75-93.75-225.75 93.75-225.75 225.75-93.75zM415.5 223.5v129h129v63h-129v129h-63v-129h-129v-63h129v-129h63z"
|
|
36
|
+
}));
|
|
37
|
+
};
|
|
38
|
+
var ZoomOutIcon = function ZoomOutIcon() {
|
|
39
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
40
|
+
width: "20",
|
|
41
|
+
height: "20",
|
|
42
|
+
viewBox: "0 0 768 768",
|
|
43
|
+
fill: "currentColor"
|
|
44
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
45
|
+
d: "M384 640.5q105 0 180.75-75.75t75.75-180.75-75.75-180.75-180.75-75.75-180.75 75.75-75.75 180.75 75.75 180.75 180.75 75.75zM384 64.5q132 0 225.75 93.75t93.75 225.75-93.75 225.75-225.75 93.75-225.75-93.75-93.75-225.75 93.75-225.75 225.75-93.75zM223.5 352.5h321v63h-321v-63z"
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
export var CustomToolbar = function CustomToolbar() {
|
|
14
49
|
var _useContext = useContext(ImageViewerContext),
|
|
15
50
|
visible = _useContext.visible,
|
|
16
|
-
|
|
17
|
-
|
|
51
|
+
currentSrc = _useContext.currentSrc,
|
|
52
|
+
currentIndex = _useContext.currentIndex,
|
|
53
|
+
totalImages = _useContext.totalImages,
|
|
18
54
|
getScale = _useContext.getScale,
|
|
19
55
|
getRotate = _useContext.getRotate,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
56
|
+
getOnScale = _useContext.getOnScale,
|
|
57
|
+
getOnRotate = _useContext.getOnRotate,
|
|
58
|
+
getOnClose = _useContext.getOnClose,
|
|
59
|
+
onPrevImage = _useContext.onPrevImage,
|
|
60
|
+
onNextImage = _useContext.onNextImage;
|
|
23
61
|
var _useState = useState(false),
|
|
24
62
|
_useState2 = _slicedToArray(_useState, 2),
|
|
25
63
|
isFullscreen = _useState2[0],
|
|
@@ -52,13 +90,31 @@ export var CustomToolbar = function CustomToolbar(_ref) {
|
|
|
52
90
|
(_document$exitFullscr = (_document = document).exitFullscreen) === null || _document$exitFullscr === void 0 || _document$exitFullscr.call(_document);
|
|
53
91
|
}
|
|
54
92
|
}, []);
|
|
93
|
+
var handleZoom = useCallback(function (delta) {
|
|
94
|
+
var onScaleFn = getOnScale();
|
|
95
|
+
if (onScaleFn) {
|
|
96
|
+
var currentScale = getScale();
|
|
97
|
+
var newScale = Math.max(0.5, Math.min(5, currentScale + delta));
|
|
98
|
+
onScaleFn(newScale);
|
|
99
|
+
}
|
|
100
|
+
}, [getOnScale, getScale]);
|
|
101
|
+
var handleRotate = useCallback(function (delta) {
|
|
102
|
+
var onRotateFn = getOnRotate();
|
|
103
|
+
if (onRotateFn) {
|
|
104
|
+
var currentRotate = getRotate();
|
|
105
|
+
onRotateFn(currentRotate + delta);
|
|
106
|
+
}
|
|
107
|
+
}, [getOnRotate, getRotate]);
|
|
55
108
|
var handleReset = useCallback(function () {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
109
|
+
var _getOnScale, _getOnRotate;
|
|
110
|
+
(_getOnScale = getOnScale()) === null || _getOnScale === void 0 || _getOnScale(1);
|
|
111
|
+
(_getOnRotate = getOnRotate()) === null || _getOnRotate === void 0 || _getOnRotate(0);
|
|
112
|
+
}, [getOnScale, getOnRotate]);
|
|
113
|
+
var handleClose = useCallback(function () {
|
|
114
|
+
var _getOnClose;
|
|
115
|
+
(_getOnClose = getOnClose()) === null || _getOnClose === void 0 || _getOnClose();
|
|
116
|
+
}, [getOnClose]);
|
|
117
|
+
if (!visible) return null;
|
|
62
118
|
var toolbarContent = /*#__PURE__*/React.createElement(Box, {
|
|
63
119
|
className: "PhotoView-Slider__toolbar-custom",
|
|
64
120
|
sx: {
|
|
@@ -87,76 +143,55 @@ export var CustomToolbar = function CustomToolbar(_ref) {
|
|
|
87
143
|
backdropFilter: 'blur(10px)'
|
|
88
144
|
}
|
|
89
145
|
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
146
|
+
title: "\u4E0A\u4E00\u5F20",
|
|
147
|
+
placement: "top"
|
|
148
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
149
|
+
onClick: onPrevImage,
|
|
150
|
+
sx: iconButtonSx,
|
|
151
|
+
size: "small",
|
|
152
|
+
disabled: totalImages <= 1
|
|
153
|
+
}, /*#__PURE__*/React.createElement(SkipLeftIcon, {
|
|
154
|
+
sx: {
|
|
155
|
+
fontSize: '20px'
|
|
156
|
+
}
|
|
157
|
+
}))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
158
|
+
title: "\u4E0B\u4E00\u5F20",
|
|
159
|
+
placement: "top"
|
|
160
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
161
|
+
onClick: onNextImage,
|
|
162
|
+
sx: iconButtonSx,
|
|
163
|
+
size: "small",
|
|
164
|
+
disabled: totalImages <= 1
|
|
165
|
+
}, /*#__PURE__*/React.createElement(SkipRightIcon, {
|
|
166
|
+
sx: {
|
|
167
|
+
fontSize: '20px'
|
|
168
|
+
}
|
|
169
|
+
}))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Tooltip, {
|
|
90
170
|
title: "\u653E\u5927",
|
|
91
171
|
placement: "top"
|
|
92
172
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
93
173
|
onClick: function onClick() {
|
|
94
|
-
|
|
95
|
-
var currentScale = getScale();
|
|
96
|
-
onScale(Math.min(currentScale + 0.5, 5));
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
sx: {
|
|
100
|
-
color: 'white',
|
|
101
|
-
'&:hover': {
|
|
102
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
103
|
-
}
|
|
174
|
+
return handleZoom(0.5);
|
|
104
175
|
},
|
|
176
|
+
sx: iconButtonSx,
|
|
105
177
|
size: "small"
|
|
106
|
-
}, /*#__PURE__*/React.createElement(
|
|
107
|
-
width: "20",
|
|
108
|
-
height: "20",
|
|
109
|
-
viewBox: "0 0 768 768",
|
|
110
|
-
fill: "currentColor"
|
|
111
|
-
}, /*#__PURE__*/React.createElement("path", {
|
|
112
|
-
d: "M384 640.5q105 0 180.75-75.75t75.75-180.75-75.75-180.75-180.75-75.75-180.75 75.75-75.75 180.75 75.75 180.75 180.75 75.75zM384 64.5q132 0 225.75 93.75t93.75 225.75-93.75 225.75-225.75 93.75-225.75-93.75-93.75-225.75 93.75-225.75 225.75-93.75zM415.5 223.5v129h129v63h-129v129h-63v-129h-129v-63h129v-129h63z"
|
|
113
|
-
})))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
178
|
+
}, /*#__PURE__*/React.createElement(ZoomInIcon, null))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
114
179
|
title: "\u7F29\u5C0F",
|
|
115
180
|
placement: "top"
|
|
116
181
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
117
182
|
onClick: function onClick() {
|
|
118
|
-
|
|
119
|
-
var currentScale = getScale();
|
|
120
|
-
onScale(Math.max(currentScale - 0.5, 0.5));
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
sx: {
|
|
124
|
-
color: 'white',
|
|
125
|
-
'&:hover': {
|
|
126
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
127
|
-
}
|
|
183
|
+
return handleZoom(-0.5);
|
|
128
184
|
},
|
|
185
|
+
sx: iconButtonSx,
|
|
129
186
|
size: "small"
|
|
130
|
-
}, /*#__PURE__*/React.createElement(
|
|
131
|
-
width: "20",
|
|
132
|
-
height: "20",
|
|
133
|
-
viewBox: "0 0 768 768",
|
|
134
|
-
fill: "currentColor"
|
|
135
|
-
}, /*#__PURE__*/React.createElement("path", {
|
|
136
|
-
d: "M384 640.5q105 0 180.75-75.75t75.75-180.75-75.75-180.75-180.75-75.75-180.75 75.75-75.75 180.75 75.75 180.75 180.75 75.75zM384 64.5q132 0 225.75 93.75t93.75 225.75-93.75 225.75-225.75 93.75-225.75-93.75-93.75-225.75 93.75-225.75 225.75-93.75zM223.5 352.5h321v63h-321v-63z"
|
|
137
|
-
})))), /*#__PURE__*/React.createElement(Box, {
|
|
138
|
-
sx: {
|
|
139
|
-
width: '1px',
|
|
140
|
-
height: '24px',
|
|
141
|
-
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
142
|
-
mx: 0.5
|
|
143
|
-
}
|
|
144
|
-
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
187
|
+
}, /*#__PURE__*/React.createElement(ZoomOutIcon, null))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Tooltip, {
|
|
145
188
|
title: "\u9006\u65F6\u9488\u65CB\u8F6C",
|
|
146
189
|
placement: "top"
|
|
147
190
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
148
191
|
onClick: function onClick() {
|
|
149
|
-
|
|
150
|
-
var currentRotate = getRotate();
|
|
151
|
-
onRotate(currentRotate - 90);
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
sx: {
|
|
155
|
-
color: 'white',
|
|
156
|
-
'&:hover': {
|
|
157
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
158
|
-
}
|
|
192
|
+
return handleRotate(-90);
|
|
159
193
|
},
|
|
194
|
+
sx: iconButtonSx,
|
|
160
195
|
size: "small"
|
|
161
196
|
}, /*#__PURE__*/React.createElement(AnticlockwiseLineIcon, {
|
|
162
197
|
sx: {
|
|
@@ -167,86 +202,42 @@ export var CustomToolbar = function CustomToolbar(_ref) {
|
|
|
167
202
|
placement: "top"
|
|
168
203
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
169
204
|
onClick: function onClick() {
|
|
170
|
-
|
|
171
|
-
var currentRotate = getRotate();
|
|
172
|
-
onRotate(currentRotate + 90);
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
sx: {
|
|
176
|
-
color: 'white',
|
|
177
|
-
'&:hover': {
|
|
178
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
179
|
-
}
|
|
205
|
+
return handleRotate(90);
|
|
180
206
|
},
|
|
207
|
+
sx: iconButtonSx,
|
|
181
208
|
size: "small"
|
|
182
209
|
}, /*#__PURE__*/React.createElement(ClockwiseLineIcon, {
|
|
183
210
|
sx: {
|
|
184
211
|
fontSize: '20px'
|
|
185
212
|
}
|
|
186
|
-
}))), /*#__PURE__*/React.createElement(
|
|
187
|
-
sx: {
|
|
188
|
-
width: '1px',
|
|
189
|
-
height: '24px',
|
|
190
|
-
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
191
|
-
mx: 0.5
|
|
192
|
-
}
|
|
193
|
-
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
213
|
+
}))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Tooltip, {
|
|
194
214
|
title: "\u91CD\u7F6E",
|
|
195
215
|
placement: "top"
|
|
196
216
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
197
217
|
onClick: handleReset,
|
|
198
|
-
sx:
|
|
199
|
-
color: 'white',
|
|
200
|
-
'&:hover': {
|
|
201
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
202
|
-
}
|
|
203
|
-
},
|
|
218
|
+
sx: iconButtonSx,
|
|
204
219
|
size: "small"
|
|
205
220
|
}, /*#__PURE__*/React.createElement(ResetLeftFillIcon, {
|
|
206
221
|
sx: {
|
|
207
222
|
fontSize: '20px'
|
|
208
223
|
}
|
|
209
|
-
}))), currentSrc && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(
|
|
210
|
-
sx: {
|
|
211
|
-
width: '1px',
|
|
212
|
-
height: '24px',
|
|
213
|
-
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
214
|
-
mx: 0.5
|
|
215
|
-
}
|
|
216
|
-
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
224
|
+
}))), currentSrc && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Tooltip, {
|
|
217
225
|
title: "\u4E0B\u8F7D",
|
|
218
226
|
placement: "top"
|
|
219
227
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
220
228
|
onClick: handleDownload,
|
|
221
|
-
sx:
|
|
222
|
-
color: 'white',
|
|
223
|
-
'&:hover': {
|
|
224
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
225
|
-
}
|
|
226
|
-
},
|
|
229
|
+
sx: iconButtonSx,
|
|
227
230
|
size: "small"
|
|
228
231
|
}, /*#__PURE__*/React.createElement(Download2LineIcon, {
|
|
229
232
|
sx: {
|
|
230
233
|
fontSize: '20px'
|
|
231
234
|
}
|
|
232
|
-
})))), /*#__PURE__*/React.createElement(
|
|
233
|
-
sx: {
|
|
234
|
-
width: '1px',
|
|
235
|
-
height: '24px',
|
|
236
|
-
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
237
|
-
mx: 0.5
|
|
238
|
-
}
|
|
239
|
-
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
235
|
+
})))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Tooltip, {
|
|
240
236
|
title: isFullscreen ? '退出全屏' : '全屏',
|
|
241
237
|
placement: "top"
|
|
242
238
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
243
239
|
onClick: handleFullscreen,
|
|
244
|
-
sx:
|
|
245
|
-
color: 'white',
|
|
246
|
-
'&:hover': {
|
|
247
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
248
|
-
}
|
|
249
|
-
},
|
|
240
|
+
sx: iconButtonSx,
|
|
250
241
|
size: "small"
|
|
251
242
|
}, isFullscreen ? /*#__PURE__*/React.createElement(FullscreenExitLineIcon, {
|
|
252
243
|
sx: {
|
|
@@ -256,26 +247,12 @@ export var CustomToolbar = function CustomToolbar(_ref) {
|
|
|
256
247
|
sx: {
|
|
257
248
|
fontSize: '20px'
|
|
258
249
|
}
|
|
259
|
-
}))), /*#__PURE__*/React.createElement(
|
|
260
|
-
sx: {
|
|
261
|
-
width: '1px',
|
|
262
|
-
height: '24px',
|
|
263
|
-
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
264
|
-
mx: 0.5
|
|
265
|
-
}
|
|
266
|
-
}), /*#__PURE__*/React.createElement(Tooltip, {
|
|
250
|
+
}))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Tooltip, {
|
|
267
251
|
title: "\u5173\u95ED",
|
|
268
252
|
placement: "top"
|
|
269
253
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
270
|
-
onClick:
|
|
271
|
-
|
|
272
|
-
},
|
|
273
|
-
sx: {
|
|
274
|
-
color: 'white',
|
|
275
|
-
'&:hover': {
|
|
276
|
-
backgroundColor: 'rgba(255, 255, 255, 0.1)'
|
|
277
|
-
}
|
|
278
|
-
},
|
|
254
|
+
onClick: handleClose,
|
|
255
|
+
sx: iconButtonSx,
|
|
279
256
|
size: "small"
|
|
280
257
|
}, /*#__PURE__*/React.createElement(CloseCircleFillIcon, {
|
|
281
258
|
sx: {
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export var ImageViewerContext = /*#__PURE__*/React.createContext({
|
|
3
|
-
|
|
3
|
+
currentSrc: '',
|
|
4
4
|
visible: false,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
setScale: function setScale() {},
|
|
8
|
-
rotate: 0,
|
|
9
|
-
setRotate: function setRotate() {},
|
|
5
|
+
currentIndex: 0,
|
|
6
|
+
totalImages: 0,
|
|
10
7
|
getScale: function getScale() {
|
|
11
8
|
return 1;
|
|
12
9
|
},
|
|
13
10
|
getRotate: function getRotate() {
|
|
14
11
|
return 0;
|
|
15
12
|
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
getOnScale: function getOnScale() {
|
|
14
|
+
return null;
|
|
15
|
+
},
|
|
16
|
+
getOnRotate: function getOnRotate() {
|
|
17
|
+
return null;
|
|
18
|
+
},
|
|
19
|
+
getOnClose: function getOnClose() {
|
|
20
|
+
return null;
|
|
21
|
+
},
|
|
22
|
+
onImageClick: function onImageClick() {},
|
|
23
|
+
onPrevImage: function onPrevImage() {},
|
|
24
|
+
onNextImage: function onNextImage() {}
|
|
22
25
|
});
|
|
@@ -6,6 +6,8 @@ export type { ImageViewerItemProps, ImageViewerProviderProps } from './types';
|
|
|
6
6
|
export { ImageViewerItem, ImageViewerProvider };
|
|
7
7
|
declare const _default: {
|
|
8
8
|
Provider: import("react").FC<import("./types").ImageViewerProviderProps>;
|
|
9
|
-
Item: import("react").FC<import("./types").ImageViewerItemProps
|
|
9
|
+
Item: import("react").FC<import("./types").ImageViewerItemProps & {
|
|
10
|
+
onImageClick?: ((src: string) => void) | undefined;
|
|
11
|
+
}>;
|
|
10
12
|
};
|
|
11
13
|
export default _default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
2
|
export interface ImageViewerProviderProps {
|
|
3
3
|
children: ReactNode;
|
|
4
4
|
speed?: number | ((type: number) => number);
|
|
@@ -22,30 +22,19 @@ export interface ImageViewerProviderProps {
|
|
|
22
22
|
export interface ImageViewerItemProps {
|
|
23
23
|
src: string;
|
|
24
24
|
children?: ReactNode;
|
|
25
|
-
render?: (props: {
|
|
26
|
-
attrs: Partial<React.HTMLAttributes<HTMLElement>>;
|
|
27
|
-
scale: number;
|
|
28
|
-
rotate: number;
|
|
29
|
-
}) => ReactNode;
|
|
30
|
-
overlay?: ReactNode;
|
|
31
|
-
width?: number;
|
|
32
|
-
height?: number;
|
|
33
25
|
triggers?: Array<'onClick' | 'onDoubleClick'>;
|
|
34
26
|
}
|
|
35
27
|
export interface ImageViewerContextType {
|
|
36
|
-
|
|
28
|
+
currentSrc: string;
|
|
37
29
|
visible: boolean;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
setScale: (scale: number) => void;
|
|
41
|
-
rotate: number;
|
|
42
|
-
setRotate: (rotate: number) => void;
|
|
30
|
+
currentIndex: number;
|
|
31
|
+
totalImages: number;
|
|
43
32
|
getScale: () => number;
|
|
44
33
|
getRotate: () => number;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
34
|
+
getOnScale: () => ((scale: number) => void) | null;
|
|
35
|
+
getOnRotate: () => ((rotate: number) => void) | null;
|
|
36
|
+
getOnClose: () => (() => void) | null;
|
|
37
|
+
onImageClick: (src: string) => void;
|
|
38
|
+
onPrevImage: () => void;
|
|
39
|
+
onNextImage: () => void;
|
|
51
40
|
}
|
|
@@ -181,7 +181,7 @@ var ImageViewWrapper = function ImageViewWrapper(_ref) {
|
|
|
181
181
|
e.stopPropagation();
|
|
182
182
|
return;
|
|
183
183
|
}
|
|
184
|
-
//
|
|
184
|
+
// 事件会冒泡到 ImageViewerItem 处理
|
|
185
185
|
};
|
|
186
186
|
var handleMouseMove = useCallback(function (e) {
|
|
187
187
|
if (!isDragging || !dragCorner) return;
|