@douyinfe/semi-ui 2.19.2-alpha.0 → 2.20.0-beta.1

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 (139) hide show
  1. package/dist/css/semi.css +243 -968
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +3449 -452
  4. package/dist/umd/semi-ui.js.map +1 -1
  5. package/dist/umd/semi-ui.min.js +1 -1
  6. package/dist/umd/semi-ui.min.js.map +1 -1
  7. package/lib/cjs/button/Button.d.ts +1 -1
  8. package/lib/cjs/button/index.d.ts +1 -1
  9. package/lib/cjs/carousel/CarouselIndicator.d.ts +1 -1
  10. package/lib/cjs/carousel/index.d.ts +1 -1
  11. package/lib/cjs/datePicker/dateInput.d.ts +1 -1
  12. package/lib/cjs/datePicker/datePicker.d.ts +1 -1
  13. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -1
  14. package/lib/cjs/image/image.d.ts +48 -0
  15. package/lib/cjs/image/image.js +248 -0
  16. package/lib/cjs/image/index.d.ts +6 -0
  17. package/lib/cjs/image/index.js +29 -0
  18. package/lib/cjs/image/interface.d.ts +178 -0
  19. package/lib/cjs/image/interface.js +5 -0
  20. package/lib/cjs/image/preview.d.ts +81 -0
  21. package/lib/cjs/image/preview.js +249 -0
  22. package/lib/cjs/image/previewContext.d.ts +12 -0
  23. package/lib/cjs/image/previewContext.js +11 -0
  24. package/lib/cjs/image/previewFooter.d.ts +62 -0
  25. package/lib/cjs/image/previewFooter.js +337 -0
  26. package/lib/cjs/image/previewHeader.d.ts +4 -0
  27. package/lib/cjs/image/previewHeader.js +57 -0
  28. package/lib/cjs/image/previewImage.d.ts +49 -0
  29. package/lib/cjs/image/previewImage.js +253 -0
  30. package/lib/cjs/image/previewInner.d.ts +87 -0
  31. package/lib/cjs/image/previewInner.js +443 -0
  32. package/lib/cjs/index.d.ts +2 -0
  33. package/lib/cjs/index.js +14 -0
  34. package/lib/cjs/locale/interface.d.ts +13 -0
  35. package/lib/cjs/locale/source/ar.js +13 -0
  36. package/lib/cjs/locale/source/de.js +13 -0
  37. package/lib/cjs/locale/source/en_GB.js +13 -0
  38. package/lib/cjs/locale/source/en_US.js +13 -0
  39. package/lib/cjs/locale/source/es.js +13 -0
  40. package/lib/cjs/locale/source/fr.js +13 -0
  41. package/lib/cjs/locale/source/id_ID.js +13 -0
  42. package/lib/cjs/locale/source/it.js +13 -0
  43. package/lib/cjs/locale/source/ja_JP.js +13 -0
  44. package/lib/cjs/locale/source/ko_KR.js +13 -0
  45. package/lib/cjs/locale/source/ms_MY.js +13 -0
  46. package/lib/cjs/locale/source/pt_BR.js +13 -0
  47. package/lib/cjs/locale/source/ru_RU.js +13 -0
  48. package/lib/cjs/locale/source/th_TH.js +13 -0
  49. package/lib/cjs/locale/source/tr_TR.js +13 -0
  50. package/lib/cjs/locale/source/vi_VN.js +13 -0
  51. package/lib/cjs/locale/source/zh_CN.js +13 -0
  52. package/lib/cjs/locale/source/zh_TW.js +13 -0
  53. package/lib/cjs/progress/index.d.ts +10 -2
  54. package/lib/cjs/progress/index.js +37 -8
  55. package/lib/cjs/radio/radio.d.ts +1 -1
  56. package/lib/cjs/radio/radioGroup.d.ts +1 -1
  57. package/lib/cjs/skeleton/item.d.ts +1 -0
  58. package/lib/cjs/skeleton/item.js +10 -4
  59. package/lib/cjs/tag/index.js +5 -1
  60. package/lib/cjs/tag/interface.d.ts +2 -0
  61. package/lib/cjs/timePicker/TimePicker.d.ts +2 -2
  62. package/lib/cjs/timePicker/TimeShape.d.ts +1 -1
  63. package/lib/cjs/timePicker/index.d.ts +2 -2
  64. package/lib/cjs/toast/index.d.ts +9 -0
  65. package/lib/cjs/toast/index.js +50 -10
  66. package/lib/cjs/toast/toast.d.ts +1 -0
  67. package/lib/cjs/toast/toast.js +4 -0
  68. package/lib/cjs/typography/base.d.ts +1 -1
  69. package/lib/cjs/typography/paragraph.d.ts +1 -1
  70. package/lib/cjs/typography/text.d.ts +1 -1
  71. package/lib/cjs/typography/title.d.ts +2 -2
  72. package/lib/cjs/upload/index.d.ts +1 -1
  73. package/lib/es/button/Button.d.ts +1 -1
  74. package/lib/es/button/index.d.ts +1 -1
  75. package/lib/es/carousel/CarouselIndicator.d.ts +1 -1
  76. package/lib/es/carousel/index.d.ts +1 -1
  77. package/lib/es/datePicker/dateInput.d.ts +1 -1
  78. package/lib/es/datePicker/datePicker.d.ts +1 -1
  79. package/lib/es/datePicker/monthsGrid.d.ts +1 -1
  80. package/lib/es/image/image.d.ts +48 -0
  81. package/lib/es/image/image.js +224 -0
  82. package/lib/es/image/index.d.ts +6 -0
  83. package/lib/es/image/index.js +5 -0
  84. package/lib/es/image/interface.d.ts +178 -0
  85. package/lib/es/image/interface.js +1 -0
  86. package/lib/es/image/preview.d.ts +81 -0
  87. package/lib/es/image/preview.js +229 -0
  88. package/lib/es/image/previewContext.d.ts +12 -0
  89. package/lib/es/image/previewContext.js +2 -0
  90. package/lib/es/image/previewFooter.d.ts +62 -0
  91. package/lib/es/image/previewFooter.js +301 -0
  92. package/lib/es/image/previewHeader.d.ts +4 -0
  93. package/lib/es/image/previewHeader.js +38 -0
  94. package/lib/es/image/previewImage.d.ts +49 -0
  95. package/lib/es/image/previewImage.js +235 -0
  96. package/lib/es/image/previewInner.d.ts +87 -0
  97. package/lib/es/image/previewInner.js +419 -0
  98. package/lib/es/index.d.ts +2 -0
  99. package/lib/es/index.js +3 -1
  100. package/lib/es/locale/interface.d.ts +13 -0
  101. package/lib/es/locale/source/ar.js +13 -0
  102. package/lib/es/locale/source/de.js +13 -0
  103. package/lib/es/locale/source/en_GB.js +13 -0
  104. package/lib/es/locale/source/en_US.js +13 -0
  105. package/lib/es/locale/source/es.js +13 -0
  106. package/lib/es/locale/source/fr.js +13 -0
  107. package/lib/es/locale/source/id_ID.js +13 -0
  108. package/lib/es/locale/source/it.js +13 -0
  109. package/lib/es/locale/source/ja_JP.js +13 -0
  110. package/lib/es/locale/source/ko_KR.js +13 -0
  111. package/lib/es/locale/source/ms_MY.js +13 -0
  112. package/lib/es/locale/source/pt_BR.js +13 -0
  113. package/lib/es/locale/source/ru_RU.js +13 -0
  114. package/lib/es/locale/source/th_TH.js +13 -0
  115. package/lib/es/locale/source/tr_TR.js +13 -0
  116. package/lib/es/locale/source/vi_VN.js +13 -0
  117. package/lib/es/locale/source/zh_CN.js +13 -0
  118. package/lib/es/locale/source/zh_TW.js +13 -0
  119. package/lib/es/progress/index.d.ts +10 -2
  120. package/lib/es/progress/index.js +36 -8
  121. package/lib/es/radio/radio.d.ts +1 -1
  122. package/lib/es/radio/radioGroup.d.ts +1 -1
  123. package/lib/es/skeleton/item.d.ts +1 -0
  124. package/lib/es/skeleton/item.js +10 -4
  125. package/lib/es/tag/index.js +5 -1
  126. package/lib/es/tag/interface.d.ts +2 -0
  127. package/lib/es/timePicker/TimePicker.d.ts +2 -2
  128. package/lib/es/timePicker/TimeShape.d.ts +1 -1
  129. package/lib/es/timePicker/index.d.ts +2 -2
  130. package/lib/es/toast/index.d.ts +9 -0
  131. package/lib/es/toast/index.js +50 -10
  132. package/lib/es/toast/toast.d.ts +1 -0
  133. package/lib/es/toast/toast.js +4 -0
  134. package/lib/es/typography/base.d.ts +1 -1
  135. package/lib/es/typography/paragraph.d.ts +1 -1
  136. package/lib/es/typography/text.d.ts +1 -1
  137. package/lib/es/typography/title.d.ts +2 -2
  138. package/lib/es/upload/index.d.ts +1 -1
  139. package/package.json +8 -8
@@ -0,0 +1,81 @@
1
+ import React from "react";
2
+ import BaseComponent from "../_base/baseComponent";
3
+ import PropTypes from "prop-types";
4
+ import { PreviewProps, PreviewState } from "./interface";
5
+ import PreviewInner from "./previewInner";
6
+ import PreviewFoundation from '@douyinfe/semi-foundation/lib/es/image/previewFoundation';
7
+ export default class Preview extends BaseComponent<PreviewProps, PreviewState> {
8
+ static propTypes: {
9
+ style: PropTypes.Requireable<object>;
10
+ className: PropTypes.Requireable<string>;
11
+ visible: PropTypes.Requireable<boolean>;
12
+ src: PropTypes.Requireable<string | any[]>;
13
+ currentIndex: PropTypes.Requireable<number>;
14
+ defaultIndex: PropTypes.Requireable<number>;
15
+ defaultVisible: PropTypes.Requireable<boolean>;
16
+ maskClosable: PropTypes.Requireable<boolean>;
17
+ closable: PropTypes.Requireable<boolean>;
18
+ zoomStep: PropTypes.Requireable<number>;
19
+ infinite: PropTypes.Requireable<boolean>;
20
+ showTooltip: PropTypes.Requireable<boolean>;
21
+ closeOnEsc: PropTypes.Requireable<boolean>;
22
+ prevTip: PropTypes.Requireable<string>;
23
+ nextTip: PropTypes.Requireable<string>;
24
+ zoomInTip: PropTypes.Requireable<string>;
25
+ zoomOutTip: PropTypes.Requireable<string>;
26
+ downloadTip: PropTypes.Requireable<string>;
27
+ adaptiveTip: PropTypes.Requireable<string>;
28
+ originTip: PropTypes.Requireable<string>;
29
+ lazyLoad: PropTypes.Requireable<boolean>;
30
+ lazyLoadMargin: PropTypes.Requireable<string>;
31
+ preLoad: PropTypes.Requireable<boolean>;
32
+ preLoadGap: PropTypes.Requireable<number>;
33
+ disableDownload: PropTypes.Requireable<boolean>;
34
+ zIndex: PropTypes.Requireable<number>;
35
+ renderHeader: PropTypes.Requireable<(...args: any[]) => any>;
36
+ renderPreviewMenu: PropTypes.Requireable<(...args: any[]) => any>;
37
+ getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
38
+ onVisibleChange: PropTypes.Requireable<(...args: any[]) => any>;
39
+ onChange: PropTypes.Requireable<(...args: any[]) => any>;
40
+ onClose: PropTypes.Requireable<(...args: any[]) => any>;
41
+ onZoomIn: PropTypes.Requireable<(...args: any[]) => any>;
42
+ onZoomOut: PropTypes.Requireable<(...args: any[]) => any>;
43
+ onPrev: PropTypes.Requireable<(...args: any[]) => any>;
44
+ onNext: PropTypes.Requireable<(...args: any[]) => any>;
45
+ onDownload: PropTypes.Requireable<(...args: any[]) => any>;
46
+ onRatioChange: PropTypes.Requireable<(...args: any[]) => any>;
47
+ onRotateChange: PropTypes.Requireable<(...args: any[]) => any>;
48
+ };
49
+ static defaultProps: {
50
+ src: any[];
51
+ lazyLoad: boolean;
52
+ lazyLoadMargin: string;
53
+ };
54
+ get adapter(): {
55
+ getContext(key: string): any;
56
+ getContexts(): any;
57
+ getProp(key: string): any;
58
+ getProps(): PreviewProps;
59
+ getState(key: string): any;
60
+ getStates(): PreviewState;
61
+ setState(s: Pick<PreviewState, keyof PreviewState>, callback?: any): void;
62
+ getCache(c: string): any;
63
+ getCaches(): any;
64
+ setCache(key: any, value: any): void;
65
+ stopPropagation(e: any): void;
66
+ };
67
+ foundation: PreviewFoundation;
68
+ previewGroupId: string;
69
+ previewRef: React.RefObject<PreviewInner>;
70
+ constructor(props: any);
71
+ componentDidMount(): void;
72
+ static getDerivedStateFromProps(props: PreviewProps, state: PreviewState): Partial<PreviewState>;
73
+ handleVisibleChange: (newVisible: boolean) => void;
74
+ handleCurrentIndexChange: (index: number) => void;
75
+ loopImageIndex: () => {
76
+ srcListInChildren: any[];
77
+ newChildren: any;
78
+ titles: React.ReactNode[];
79
+ };
80
+ render(): JSX.Element;
81
+ }
@@ -0,0 +1,229 @@
1
+ import _isObject from "lodash/isObject";
2
+
3
+ var __rest = this && this.__rest || function (s, e) {
4
+ var t = {};
5
+
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
7
+
8
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
9
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+
14
+ import React from "react";
15
+ import { PreviewContext } from "./previewContext";
16
+ import BaseComponent from "../_base/baseComponent";
17
+ import PropTypes from "prop-types";
18
+ import PreviewInner from "./previewInner";
19
+ import PreviewFoundation from '@douyinfe/semi-foundation/lib/es/image/previewFoundation';
20
+ import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';
21
+ import { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';
22
+ const prefixCls = cssClasses.PREFIX;
23
+ export default class Preview extends BaseComponent {
24
+ constructor(props) {
25
+ super(props);
26
+
27
+ this.handleVisibleChange = newVisible => {
28
+ this.foundation.handleVisibleChange(newVisible);
29
+ };
30
+
31
+ this.handleCurrentIndexChange = index => {
32
+ this.foundation.handleCurrentIndexChange(index);
33
+ };
34
+
35
+ this.loopImageIndex = () => {
36
+ const {
37
+ children
38
+ } = this.props;
39
+ let index = 0;
40
+ const srcListInChildren = [];
41
+ const titles = [];
42
+
43
+ const loop = children => {
44
+ return React.Children.map(children, child => {
45
+ var _a;
46
+
47
+ if (child && child.props && child.type) {
48
+ if (child.type.isSemiImage) {
49
+ const {
50
+ src,
51
+ preview,
52
+ alt
53
+ } = child.props;
54
+
55
+ if (preview) {
56
+ const previewSrc = _isObject(preview) ? (_a = preview.src) !== null && _a !== void 0 ? _a : src : src;
57
+ srcListInChildren.push(previewSrc);
58
+ titles.push(preview === null || preview === void 0 ? void 0 : preview.previewTitle);
59
+ return /*#__PURE__*/React.cloneElement(child, {
60
+ imageID: index++
61
+ });
62
+ }
63
+
64
+ return child;
65
+ }
66
+ }
67
+
68
+ if (child && child.props && child.props.children) {
69
+ return /*#__PURE__*/React.cloneElement(child, {
70
+ children: loop(child.props.children)
71
+ });
72
+ }
73
+
74
+ return child;
75
+ });
76
+ };
77
+
78
+ return {
79
+ srcListInChildren,
80
+ newChildren: loop(children),
81
+ titles
82
+ };
83
+ };
84
+
85
+ this.state = {
86
+ currentIndex: props.currentIndex || props.defaultCurrentIndex || 0,
87
+ visible: props.visible || props.currentDefaultVisible || false
88
+ };
89
+ this.foundation = new PreviewFoundation(this.adapter);
90
+ this.previewGroupId = getUuidShort({
91
+ prefix: "semi-image-preview-group",
92
+ length: 4
93
+ });
94
+ this.previewRef = /*#__PURE__*/React.createRef();
95
+ }
96
+
97
+ get adapter() {
98
+ return Object.assign({}, super.adapter);
99
+ }
100
+
101
+ componentDidMount() {
102
+ const {
103
+ lazyLoadMargin
104
+ } = this.props;
105
+ const allElement = document.querySelectorAll(".".concat(prefixCls, "-img")); // use IntersectionObserver to lazy load image
106
+
107
+ const observer = new IntersectionObserver(entries => {
108
+ entries.forEach(item => {
109
+ var _a;
110
+
111
+ const src = (_a = item.target.dataset) === null || _a === void 0 ? void 0 : _a.src;
112
+
113
+ if (item.isIntersecting && src) {
114
+ item.target.src = src;
115
+ observer.unobserve(item.target);
116
+ }
117
+ });
118
+ }, {
119
+ root: document.querySelector("#".concat(this.previewGroupId)),
120
+ rootMargin: lazyLoadMargin
121
+ });
122
+ allElement.forEach(item => observer.observe(item));
123
+ }
124
+
125
+ static getDerivedStateFromProps(props, state) {
126
+ const willUpdateStates = {};
127
+
128
+ if ("currentIndex" in props && props.currentIndex !== state.currentIndex) {
129
+ willUpdateStates.currentIndex = props.currentIndex;
130
+ }
131
+
132
+ if ("visible" in props && props.visible !== state.visible) {
133
+ willUpdateStates.visible = props.visible;
134
+ }
135
+
136
+ return willUpdateStates;
137
+ }
138
+
139
+ render() {
140
+ const _a = this.props,
141
+ {
142
+ src,
143
+ style,
144
+ lazyLoad
145
+ } = _a,
146
+ restProps = __rest(_a, ["src", "style", "lazyLoad"]);
147
+
148
+ const {
149
+ currentIndex,
150
+ visible
151
+ } = this.state;
152
+ const {
153
+ srcListInChildren,
154
+ newChildren,
155
+ titles
156
+ } = this.loopImageIndex();
157
+ const srcArr = Array.isArray(src) ? src : typeof src === "string" ? [src] : [];
158
+ const finalSrcList = [...srcArr, ...srcListInChildren];
159
+ return /*#__PURE__*/React.createElement(PreviewContext.Provider, {
160
+ value: {
161
+ isGroup: finalSrcList.length > 1,
162
+ previewSrc: finalSrcList,
163
+ titles: titles,
164
+ currentIndex,
165
+ visible,
166
+ lazyLoad,
167
+ setCurrentIndex: this.handleCurrentIndexChange,
168
+ handleVisibleChange: this.handleVisibleChange
169
+ }
170
+ }, /*#__PURE__*/React.createElement("div", {
171
+ id: this.previewGroupId,
172
+ style: style,
173
+ className: "".concat(prefixCls, "-preview-group")
174
+ }, newChildren), /*#__PURE__*/React.createElement(PreviewInner, Object.assign({}, restProps, {
175
+ ref: this.previewRef,
176
+ src: finalSrcList,
177
+ currentIndex: currentIndex,
178
+ visible: visible,
179
+ onVisibleChange: this.handleVisibleChange
180
+ })));
181
+ }
182
+
183
+ }
184
+ Preview.propTypes = {
185
+ style: PropTypes.object,
186
+ className: PropTypes.string,
187
+ visible: PropTypes.bool,
188
+ src: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
189
+ currentIndex: PropTypes.number,
190
+ defaultIndex: PropTypes.number,
191
+ defaultVisible: PropTypes.bool,
192
+ maskClosable: PropTypes.bool,
193
+ closable: PropTypes.bool,
194
+ zoomStep: PropTypes.number,
195
+ infinite: PropTypes.bool,
196
+ showTooltip: PropTypes.bool,
197
+ closeOnEsc: PropTypes.bool,
198
+ prevTip: PropTypes.string,
199
+ nextTip: PropTypes.string,
200
+ zoomInTip: PropTypes.string,
201
+ zoomOutTip: PropTypes.string,
202
+ downloadTip: PropTypes.string,
203
+ adaptiveTip: PropTypes.string,
204
+ originTip: PropTypes.string,
205
+ lazyLoad: PropTypes.bool,
206
+ lazyLoadMargin: PropTypes.string,
207
+ preLoad: PropTypes.bool,
208
+ preLoadGap: PropTypes.number,
209
+ disableDownload: PropTypes.bool,
210
+ zIndex: PropTypes.number,
211
+ renderHeader: PropTypes.func,
212
+ renderPreviewMenu: PropTypes.func,
213
+ getPopupContainer: PropTypes.func,
214
+ onVisibleChange: PropTypes.func,
215
+ onChange: PropTypes.func,
216
+ onClose: PropTypes.func,
217
+ onZoomIn: PropTypes.func,
218
+ onZoomOut: PropTypes.func,
219
+ onPrev: PropTypes.func,
220
+ onNext: PropTypes.func,
221
+ onDownload: PropTypes.func,
222
+ onRatioChange: PropTypes.func,
223
+ onRotateChange: PropTypes.func
224
+ };
225
+ Preview.defaultProps = {
226
+ src: [],
227
+ lazyLoad: true,
228
+ lazyLoadMargin: "0px 100px 100px 0px"
229
+ };
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from "react";
2
+ export interface PreviewContextProps {
3
+ isGroup: boolean;
4
+ lazyLoad: boolean;
5
+ previewSrc: string[];
6
+ titles: ReactNode[];
7
+ currentIndex: number;
8
+ visible: boolean;
9
+ setCurrentIndex: (current: number) => void;
10
+ handleVisibleChange: (visible: boolean, preVisible?: boolean) => void;
11
+ }
12
+ export declare const PreviewContext: import("react").Context<PreviewContextProps>;
@@ -0,0 +1,2 @@
1
+ import { createContext } from "react";
2
+ export const PreviewContext = /*#__PURE__*/createContext({});
@@ -0,0 +1,62 @@
1
+ /// <reference types="lodash" />
2
+ import React, { ReactNode } from "react";
3
+ import BaseComponent from "../_base/baseComponent";
4
+ import { FooterProps } from "./interface";
5
+ import PropTypes from "prop-types";
6
+ import PreviewFooterFoundation, { PreviewFooterAdapter } from '@douyinfe/semi-foundation/lib/es/image/previewFooterFoundation';
7
+ export default class Footer extends BaseComponent<FooterProps> {
8
+ static propTypes: {
9
+ curPage: PropTypes.Requireable<number>;
10
+ totalNum: PropTypes.Requireable<number>;
11
+ disabledPrev: PropTypes.Requireable<boolean>;
12
+ disabledNext: PropTypes.Requireable<boolean>;
13
+ disableDownload: PropTypes.Requireable<boolean>;
14
+ className: PropTypes.Requireable<string>;
15
+ zoom: PropTypes.Requireable<number>;
16
+ ratio: PropTypes.Requireable<string>;
17
+ prevTip: PropTypes.Requireable<string>;
18
+ nextTip: PropTypes.Requireable<string>;
19
+ zoomInTip: PropTypes.Requireable<string>;
20
+ zoomOutTip: PropTypes.Requireable<string>;
21
+ rotateTip: PropTypes.Requireable<string>;
22
+ downloadTip: PropTypes.Requireable<string>;
23
+ adaptiveTip: PropTypes.Requireable<string>;
24
+ originTip: PropTypes.Requireable<string>;
25
+ showTooltip: PropTypes.Requireable<boolean>;
26
+ onZoomIn: PropTypes.Requireable<(...args: any[]) => any>;
27
+ onZoomOut: PropTypes.Requireable<(...args: any[]) => any>;
28
+ onPrev: PropTypes.Requireable<(...args: any[]) => any>;
29
+ onNext: PropTypes.Requireable<(...args: any[]) => any>;
30
+ onAdjustRatio: PropTypes.Requireable<(...args: any[]) => any>;
31
+ onRotateLeft: PropTypes.Requireable<(...args: any[]) => any>;
32
+ onDownload: PropTypes.Requireable<(...args: any[]) => any>;
33
+ };
34
+ static defaultProps: {
35
+ min: number;
36
+ max: number;
37
+ step: number;
38
+ showTooltip: boolean;
39
+ disableDownload: boolean;
40
+ };
41
+ get adapter(): PreviewFooterAdapter<FooterProps>;
42
+ foundation: PreviewFooterFoundation;
43
+ constructor(props: FooterProps);
44
+ changeSliderValue: (type: string) => void;
45
+ handleMinusClick: () => void;
46
+ handlePlusClick: () => void;
47
+ handleRotateLeft: () => void;
48
+ handleRotateRight: () => void;
49
+ handleSlideChange: import("lodash").DebouncedFunc<(value: any) => void>;
50
+ handleRatioClick: () => void;
51
+ customRenderViewMenu: () => ReactNode;
52
+ getFinalIconElement: (element: ReactNode, content: ReactNode) => string | number | boolean | React.ReactFragment | JSX.Element;
53
+ getLocalTextByKey: (key: string) => JSX.Element;
54
+ getIconChevronLeft: () => string | number | boolean | React.ReactFragment | JSX.Element;
55
+ getIconChevronRight: () => string | number | boolean | React.ReactFragment | JSX.Element;
56
+ getIconMinus: () => string | number | boolean | React.ReactFragment | JSX.Element;
57
+ getIconPlus: () => string | number | boolean | React.ReactFragment | JSX.Element;
58
+ getIconRatio: () => string | number | boolean | React.ReactFragment | JSX.Element;
59
+ getIconRotate: () => string | number | boolean | React.ReactFragment | JSX.Element;
60
+ getIconDownload: () => string | number | boolean | React.ReactFragment | JSX.Element;
61
+ render(): JSX.Element;
62
+ }
@@ -0,0 +1,301 @@
1
+ import _throttle from "lodash/throttle";
2
+ import React from "react";
3
+ import BaseComponent from "../_base/baseComponent";
4
+ import { IconChevronLeft, IconChevronRight, IconMinus, IconPlus, IconRotate, IconDownload, IconWindowAdaptionStroked, IconRealSizeStroked } from "@douyinfe/semi-icons";
5
+ import PropTypes from "prop-types";
6
+ import Tooltip from "../tooltip";
7
+ import Divider from "../divider";
8
+ import Slider from "../slider";
9
+ import { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';
10
+ import cls from "classnames";
11
+ import PreviewFooterFoundation from '@douyinfe/semi-foundation/lib/es/image/previewFooterFoundation';
12
+ import LocaleConsumer from "../locale/localeConsumer";
13
+ const prefixCls = cssClasses.PREFIX;
14
+ const footerPrefixCls = "".concat(cssClasses.PREFIX, "-preview-footer");
15
+ let mouseActiveTime = 0;
16
+ export default class Footer extends BaseComponent {
17
+ constructor(props) {
18
+ super(props);
19
+
20
+ this.changeSliderValue = type => {
21
+ this.foundation.changeSliderValue(type);
22
+ };
23
+
24
+ this.handleMinusClick = () => {
25
+ this.changeSliderValue("minus");
26
+ };
27
+
28
+ this.handlePlusClick = () => {
29
+ this.changeSliderValue("plus");
30
+ };
31
+
32
+ this.handleRotateLeft = () => {
33
+ this.foundation.handleRotate("left");
34
+ };
35
+
36
+ this.handleRotateRight = () => {
37
+ this.foundation.handleRotate("right");
38
+ };
39
+
40
+ this.handleSlideChange = _throttle(value => {
41
+ this.foundation.handleValueChange(value);
42
+ }, 50);
43
+
44
+ this.handleRatioClick = () => {
45
+ this.foundation.handleRatioClick();
46
+ };
47
+
48
+ this.customRenderViewMenu = () => {
49
+ const {
50
+ min,
51
+ max,
52
+ step,
53
+ curPage,
54
+ totalNum,
55
+ ratio,
56
+ zoom,
57
+ disabledPrev,
58
+ disabledNext,
59
+ disableDownload,
60
+ onNext,
61
+ onPrev,
62
+ onDownload,
63
+ renderPreviewMenu
64
+ } = this.props;
65
+ const props = {
66
+ min,
67
+ max,
68
+ step,
69
+ curPage,
70
+ totalNum,
71
+ ratio,
72
+ zoom,
73
+ disabledPrev,
74
+ disabledNext,
75
+ disableDownload,
76
+ onNext,
77
+ onPrev,
78
+ onDownload,
79
+ onRotateLeft: this.handleRotateLeft,
80
+ onRotateRight: this.handleRotateRight,
81
+ disabledZoomIn: zoom === max,
82
+ disabledZoomOut: zoom === min,
83
+ onRatioClick: this.handleRatioClick,
84
+ onZoomIn: this.handlePlusClick,
85
+ onZoomOut: this.handleMinusClick
86
+ };
87
+ return renderPreviewMenu(props);
88
+ }; // According to showTooltip in props, decide whether to use Tooltip to pack a layer
89
+ // 根据 props 中的 showTooltip 决定是否使用 Tooltip 包一层
90
+
91
+
92
+ this.getFinalIconElement = (element, content) => {
93
+ const {
94
+ showTooltip
95
+ } = this.props;
96
+ return showTooltip ? /*#__PURE__*/React.createElement(Tooltip, {
97
+ content: content
98
+ }, element) : element;
99
+ };
100
+
101
+ this.getLocalTextByKey = key => /*#__PURE__*/React.createElement(LocaleConsumer, {
102
+ componentName: "Image"
103
+ }, locale => locale[key]);
104
+
105
+ this.getIconChevronLeft = () => {
106
+ const {
107
+ disabledPrev,
108
+ onPrev,
109
+ prevTip
110
+ } = this.props;
111
+ const icon = /*#__PURE__*/React.createElement(IconChevronLeft, {
112
+ size: "large",
113
+ className: disabledPrev ? "".concat(footerPrefixCls, "-disabled") : "",
114
+ onClick: !disabledPrev ? onPrev : undefined
115
+ });
116
+ const content = prevTip !== null && prevTip !== void 0 ? prevTip : this.getLocalTextByKey("prevTip");
117
+ return this.getFinalIconElement(icon, content);
118
+ };
119
+
120
+ this.getIconChevronRight = () => {
121
+ const {
122
+ disabledNext,
123
+ onNext,
124
+ nextTip
125
+ } = this.props;
126
+ const icon = /*#__PURE__*/React.createElement(IconChevronRight, {
127
+ size: "large",
128
+ className: disabledNext ? "".concat(footerPrefixCls, "-disabled") : "",
129
+ onClick: !disabledNext ? onNext : undefined
130
+ });
131
+ const content = nextTip !== null && nextTip !== void 0 ? nextTip : this.getLocalTextByKey("nextTip");
132
+ return this.getFinalIconElement(icon, content);
133
+ };
134
+
135
+ this.getIconMinus = () => {
136
+ const {
137
+ zoomOutTip,
138
+ zoom,
139
+ min
140
+ } = this.props;
141
+ const disabledZoomOut = zoom === min;
142
+ const icon = /*#__PURE__*/React.createElement(IconMinus, {
143
+ size: "large",
144
+ onClick: !disabledZoomOut ? this.handleMinusClick : undefined,
145
+ className: disabledZoomOut ? "".concat(footerPrefixCls, "-disabled") : ""
146
+ });
147
+ const content = zoomOutTip !== null && zoomOutTip !== void 0 ? zoomOutTip : this.getLocalTextByKey("zoomOutTip");
148
+ return this.getFinalIconElement(icon, content);
149
+ };
150
+
151
+ this.getIconPlus = () => {
152
+ const {
153
+ zoomInTip,
154
+ zoom,
155
+ max
156
+ } = this.props;
157
+ const disabledZoomIn = zoom === max;
158
+ const icon = /*#__PURE__*/React.createElement(IconPlus, {
159
+ size: "large",
160
+ onClick: !disabledZoomIn ? this.handlePlusClick : undefined,
161
+ className: disabledZoomIn ? "".concat(footerPrefixCls, "-disabled") : ""
162
+ });
163
+ const content = zoomInTip !== null && zoomInTip !== void 0 ? zoomInTip : this.getLocalTextByKey("zoomInTip");
164
+ return this.getFinalIconElement(icon, content);
165
+ };
166
+
167
+ this.getIconRatio = () => {
168
+ const {
169
+ ratio,
170
+ originTip,
171
+ adaptiveTip
172
+ } = this.props;
173
+ const props = {
174
+ size: "large",
175
+ className: cls("".concat(footerPrefixCls, "-gap")),
176
+ onClick: this.handleRatioClick
177
+ };
178
+ const icon = ratio === "adaptation" ? /*#__PURE__*/React.createElement(IconRealSizeStroked, Object.assign({}, props)) : /*#__PURE__*/React.createElement(IconWindowAdaptionStroked, Object.assign({}, props));
179
+ let content;
180
+
181
+ if (ratio === "adaptation") {
182
+ content = originTip !== null && originTip !== void 0 ? originTip : this.getLocalTextByKey("originTip");
183
+ } else {
184
+ content = adaptiveTip !== null && adaptiveTip !== void 0 ? adaptiveTip : this.getLocalTextByKey("adaptiveTip");
185
+ }
186
+
187
+ return this.getFinalIconElement(icon, content);
188
+ };
189
+
190
+ this.getIconRotate = () => {
191
+ const {
192
+ rotateTip
193
+ } = this.props;
194
+ const icon = /*#__PURE__*/React.createElement(IconRotate, {
195
+ size: "large",
196
+ onClick: this.handleRotateLeft
197
+ });
198
+ const content = rotateTip !== null && rotateTip !== void 0 ? rotateTip : this.getLocalTextByKey("rotateTip");
199
+ return this.getFinalIconElement(icon, content);
200
+ };
201
+
202
+ this.getIconDownload = () => {
203
+ const {
204
+ downloadTip,
205
+ onDownload,
206
+ disableDownload
207
+ } = this.props;
208
+ const icon = /*#__PURE__*/React.createElement(IconDownload, {
209
+ size: "large",
210
+ onClick: !disableDownload ? onDownload : undefined,
211
+ className: cls("".concat(footerPrefixCls, "-gap"), {
212
+ ["".concat(footerPrefixCls, "-disabled")]: disableDownload
213
+ })
214
+ });
215
+ const content = downloadTip !== null && downloadTip !== void 0 ? downloadTip : this.getLocalTextByKey("downloadTip");
216
+ return this.getFinalIconElement(icon, content);
217
+ };
218
+
219
+ this.foundation = new PreviewFooterFoundation(this.adapter);
220
+ }
221
+
222
+ get adapter() {
223
+ return Object.assign(Object.assign({}, super.adapter), {
224
+ setStartMouseOffset: time => {
225
+ mouseActiveTime = time;
226
+ }
227
+ });
228
+ }
229
+
230
+ render() {
231
+ const {
232
+ min,
233
+ max,
234
+ step,
235
+ curPage,
236
+ totalNum,
237
+ zoom,
238
+ showTooltip,
239
+ className,
240
+ renderPreviewMenu
241
+ } = this.props;
242
+
243
+ if (renderPreviewMenu) {
244
+ return /*#__PURE__*/React.createElement("div", {
245
+ className: "".concat(footerPrefixCls, "-wrapper")
246
+ }, this.customRenderViewMenu());
247
+ }
248
+
249
+ return /*#__PURE__*/React.createElement("section", {
250
+ className: cls(footerPrefixCls, "".concat(footerPrefixCls, "-wrapper"), className)
251
+ }, this.getIconChevronLeft(), /*#__PURE__*/React.createElement("div", {
252
+ className: "".concat(footerPrefixCls, "-page")
253
+ }, /*#__PURE__*/React.createElement("span", null, curPage), /*#__PURE__*/React.createElement("span", null, "/"), /*#__PURE__*/React.createElement("span", null, totalNum)), this.getIconChevronRight(), /*#__PURE__*/React.createElement(Divider, {
254
+ layout: "vertical"
255
+ }), this.getIconMinus(), /*#__PURE__*/React.createElement(Slider, {
256
+ value: zoom,
257
+ min: min,
258
+ max: max,
259
+ step: step,
260
+ tipFormatter: v => "".concat(v, "%"),
261
+ tooltipVisible: showTooltip ? undefined : false,
262
+ onChange: this.handleSlideChange
263
+ }), this.getIconPlus(), this.getIconRatio(), /*#__PURE__*/React.createElement(Divider, {
264
+ layout: "vertical"
265
+ }), this.getIconRotate(), this.getIconDownload());
266
+ }
267
+
268
+ }
269
+ Footer.propTypes = {
270
+ curPage: PropTypes.number,
271
+ totalNum: PropTypes.number,
272
+ disabledPrev: PropTypes.bool,
273
+ disabledNext: PropTypes.bool,
274
+ disableDownload: PropTypes.bool,
275
+ className: PropTypes.string,
276
+ zoom: PropTypes.number,
277
+ ratio: PropTypes.string,
278
+ prevTip: PropTypes.string,
279
+ nextTip: PropTypes.string,
280
+ zoomInTip: PropTypes.string,
281
+ zoomOutTip: PropTypes.string,
282
+ rotateTip: PropTypes.string,
283
+ downloadTip: PropTypes.string,
284
+ adaptiveTip: PropTypes.string,
285
+ originTip: PropTypes.string,
286
+ showTooltip: PropTypes.bool,
287
+ onZoomIn: PropTypes.func,
288
+ onZoomOut: PropTypes.func,
289
+ onPrev: PropTypes.func,
290
+ onNext: PropTypes.func,
291
+ onAdjustRatio: PropTypes.func,
292
+ onRotateLeft: PropTypes.func,
293
+ onDownload: PropTypes.func
294
+ };
295
+ Footer.defaultProps = {
296
+ min: 10,
297
+ max: 500,
298
+ step: 10,
299
+ showTooltip: false,
300
+ disableDownload: false
301
+ };
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ import { HeaderProps } from "./interface";
3
+ declare const Header: React.FC<HeaderProps>;
4
+ export default Header;