@chaoswise/ui 2.3.16 → 2.3.18
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/README.md +1 -1
- package/lib/CWCascader/Cascader/index.js +1 -2
- package/lib/CWCascader/rc-cascader/OptionList/Checkbox.js +1 -2
- package/lib/CWCascader/rc-cascader/OptionList/Column.js +1 -2
- package/lib/CWCascader/rc-cascader/OptionList/index.js +3 -3
- package/lib/CWCascader/rc-cascader/hooks/useSearchOptions.js +1 -2
- package/lib/CWRangePicker/utils/index.js +28 -6
- package/lib/CWSelect/antd-select.js +1 -2
- package/lib/CWTable/CWTable.js +15 -11
- package/lib/CWTree/index.less +5 -0
- package/lib/CWUpload/upload/Upload.js +4 -6
- package/lib/CWUpload/upload/UploadList.js +4 -6
- package/lib/Checkbox/Checkbox.js +1 -2
- package/lib/FilterDropDown/DragList.js +33 -37
- package/lib/FilterDropDown/assets/DragSvg.js +33 -0
- package/lib/FilterDropDown/assets/ShowSvgIcon.js +14 -0
- package/lib/FilterDropDown/index.js +21 -9
- package/lib/FilterDropDown/index.less +8 -0
- package/lib/Input/InputComponent.js +1 -2
- package/lib/Radio/Group.js +1 -2
- package/lib/Radio/Radio.js +1 -2
- package/lib/SingleSpa/singleSpa/single-spa.dev.js +1 -2
- package/lib/TreeList/index.js +1 -2
- package/lib/Watermark/context.js +22 -0
- package/lib/Watermark/index.js +306 -0
- package/lib/Watermark/useClips.js +118 -0
- package/lib/Watermark/useRafDebounce.js +21 -0
- package/lib/Watermark/useWatermark.js +52 -0
- package/lib/Watermark/utils.js +42 -0
- package/lib/message/index.js +2 -3
- package/package.json +3 -2
- package/lib/FilterDropDown/drag.svg +0 -17
- package/lib/QuickTransfer/CheckList.js +0 -54
- package/lib/QuickTransfer/TopicList.js +0 -153
package/lib/Radio/Group.js
CHANGED
|
@@ -53,7 +53,6 @@ var RadioGroup = /*#__PURE__*/function (_Component) {
|
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
_defineProperty(_assertThisInitialized(_this), "renderGroup", function (_ref) {
|
|
56
|
-
var _classNames;
|
|
57
56
|
var getPrefixCls = _ref.getPrefixCls;
|
|
58
57
|
var _assertThisInitialize = _assertThisInitialized(_this),
|
|
59
58
|
props = _assertThisInitialize.props;
|
|
@@ -66,7 +65,7 @@ var RadioGroup = /*#__PURE__*/function (_Component) {
|
|
|
66
65
|
render = props.render;
|
|
67
66
|
var prefixCls = getPrefixCls("radio", customizePrefixCls);
|
|
68
67
|
var groupPrefixCls = "".concat(prefixCls, "-group");
|
|
69
|
-
var classString = classNames(groupPrefixCls, "".concat(groupPrefixCls, "-").concat(buttonStyle), (
|
|
68
|
+
var classString = classNames(groupPrefixCls, "".concat(groupPrefixCls, "-").concat(buttonStyle), _defineProperty(_defineProperty({}, "".concat(groupPrefixCls, "-").concat(props.size), props.size), "".concat(groupPrefixCls, "-").concat(type), type == "radio_" ? true : false), className);
|
|
70
69
|
var children = props.children;
|
|
71
70
|
if (options && options.length > 0) {
|
|
72
71
|
children = options.map(function (option) {
|
package/lib/Radio/Radio.js
CHANGED
|
@@ -47,7 +47,6 @@ var Radio = /*#__PURE__*/function (_Component) {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
_defineProperty(_assertThisInitialized(_this), "renderRadio", function (_ref) {
|
|
50
|
-
var _classNames;
|
|
51
50
|
var getPrefixCls = _ref.getPrefixCls;
|
|
52
51
|
var _assertThisInitialize = _assertThisInitialized(_this),
|
|
53
52
|
props = _assertThisInitialize.props,
|
|
@@ -70,7 +69,7 @@ var Radio = /*#__PURE__*/function (_Component) {
|
|
|
70
69
|
radioProps.checked = props.value === radioGroup.value;
|
|
71
70
|
radioProps.disabled = props.disabled || radioGroup.disabled;
|
|
72
71
|
}
|
|
73
|
-
var wrapperClassString = classNames(className, (
|
|
72
|
+
var wrapperClassString = classNames(className, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefixCls, "-wrapper"), true), "".concat(prefixCls, "-radio_-wrapper"), newTypeExist), "".concat(prefixCls, "-wrapper-checked"), radioProps.checked), "".concat(prefixCls, "-wrapper-disabled"), radioProps.disabled), "".concat(prefixCls, "-radio_-wrapper-checked"), radioProps.checked && newTypeExist), "".concat(prefixCls, "-radio_-wrapper-disabled"), radioProps.disabled && newTypeExist), "".concat(prefixCls, "-radio_-wrapper-custom"), render));
|
|
74
73
|
return (
|
|
75
74
|
/*#__PURE__*/
|
|
76
75
|
// eslint-disable-next-line jsx-a11y/label-has-associated-control
|
|
@@ -1416,10 +1416,9 @@ function reroute() {
|
|
|
1416
1416
|
callCapturedEventListeners(eventArguments);
|
|
1417
1417
|
}
|
|
1418
1418
|
function getCustomEventDetail() {
|
|
1419
|
-
var _appsByNewStatus;
|
|
1420
1419
|
var isBeforeChanges = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
1421
1420
|
var newAppStatuses = {};
|
|
1422
|
-
var appsByNewStatus = (
|
|
1421
|
+
var appsByNewStatus = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, MOUNTED, []), NOT_MOUNTED, []), NOT_LOADED, []), SKIP_BECAUSE_BROKEN, []);
|
|
1423
1422
|
if (isBeforeChanges) {
|
|
1424
1423
|
appsToLoad.concat(appsToMount).forEach(function (app, index) {
|
|
1425
1424
|
addApp(app, MOUNTED);
|
package/lib/TreeList/index.js
CHANGED
|
@@ -23,7 +23,6 @@ import './index.less';
|
|
|
23
23
|
* 树形结构列表,自定义列表样式和内容,异步加载交互等
|
|
24
24
|
*/
|
|
25
25
|
var TreeList = function TreeList(_ref) {
|
|
26
|
-
var _classNames;
|
|
27
26
|
var renderNode = _ref.renderNode,
|
|
28
27
|
loadData = _ref.loadData,
|
|
29
28
|
treeData = _ref.treeData,
|
|
@@ -135,7 +134,7 @@ var TreeList = function TreeList(_ref) {
|
|
|
135
134
|
}
|
|
136
135
|
updateExpandedKeys(key);
|
|
137
136
|
};
|
|
138
|
-
var wrapperClassName = classNames((
|
|
137
|
+
var wrapperClassName = classNames(_defineProperty(_defineProperty({}, 'cw-data-auth-tree', true), 'cw-data-auth-tree-no-data', treeData.length === 0));
|
|
139
138
|
if (_loading) {
|
|
140
139
|
return /*#__PURE__*/React.createElement("div", {
|
|
141
140
|
className: wrapperClassName
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useEvent } from 'rc-util';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
function voidFunc() {}
|
|
4
|
+
var WatermarkContext = /*#__PURE__*/React.createContext({
|
|
5
|
+
add: voidFunc,
|
|
6
|
+
remove: voidFunc
|
|
7
|
+
});
|
|
8
|
+
export function usePanelRef(panelSelector) {
|
|
9
|
+
var watermark = React.useContext(WatermarkContext);
|
|
10
|
+
var panelEleRef = React.useRef();
|
|
11
|
+
var panelRef = useEvent(function (ele) {
|
|
12
|
+
if (ele) {
|
|
13
|
+
var innerContentEle = panelSelector ? ele.querySelector(panelSelector) : ele;
|
|
14
|
+
watermark.add(innerContentEle);
|
|
15
|
+
panelEleRef.current = innerContentEle;
|
|
16
|
+
} else {
|
|
17
|
+
watermark.remove(panelEleRef.current);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return panelRef;
|
|
21
|
+
}
|
|
22
|
+
export default WatermarkContext;
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
4
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
+
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; }
|
|
9
|
+
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; } }
|
|
10
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
11
|
+
import React, { useEffect } from 'react';
|
|
12
|
+
import { useMutateObserver } from '@rc-component/mutate-observer';
|
|
13
|
+
import classNames from 'classnames';
|
|
14
|
+
import WatermarkContext from './context';
|
|
15
|
+
import useClips, { FontGap } from './useClips';
|
|
16
|
+
import useRafDebounce from './useRafDebounce';
|
|
17
|
+
import useWatermark from './useWatermark';
|
|
18
|
+
import { getPixelRatio, reRendering, verifyIsArrayOfNumberType } from './utils';
|
|
19
|
+
import PropTypes from "prop-types";
|
|
20
|
+
/**
|
|
21
|
+
* Only return `next` when size changed.
|
|
22
|
+
* This is only used for elements compare, not a shallow equal!
|
|
23
|
+
*/
|
|
24
|
+
function getSizeDiff(prev, next) {
|
|
25
|
+
return prev.size === next.size ? prev : next;
|
|
26
|
+
}
|
|
27
|
+
var DEFAULT_GAP_X = 100;
|
|
28
|
+
var DEFAULT_GAP_Y = 100;
|
|
29
|
+
var Watermark = function Watermark(props) {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
var _props$zIndex = props.zIndex,
|
|
32
|
+
zIndex = _props$zIndex === void 0 ? 9 : _props$zIndex,
|
|
33
|
+
_props$rotate = props.rotate,
|
|
34
|
+
rotate = _props$rotate === void 0 ? -22 : _props$rotate,
|
|
35
|
+
width = props.width,
|
|
36
|
+
height = props.height,
|
|
37
|
+
image = props.image,
|
|
38
|
+
content = props.content,
|
|
39
|
+
_props$font = props.font,
|
|
40
|
+
font = _props$font === void 0 ? {} : _props$font,
|
|
41
|
+
style = props.style,
|
|
42
|
+
className = props.className,
|
|
43
|
+
rootClassName = props.rootClassName,
|
|
44
|
+
_props$gap = props.gap,
|
|
45
|
+
gap = _props$gap === void 0 ? [DEFAULT_GAP_X, DEFAULT_GAP_Y] : _props$gap,
|
|
46
|
+
offset = props.offset,
|
|
47
|
+
children = props.children,
|
|
48
|
+
_props$inherit = props.inherit,
|
|
49
|
+
inherit = _props$inherit === void 0 ? true : _props$inherit;
|
|
50
|
+
var _font$color = font.color,
|
|
51
|
+
color = _font$color === void 0 ? "rgba(0, 0, 0, 0.15)" : _font$color,
|
|
52
|
+
_font$fontSize = font.fontSize,
|
|
53
|
+
fontSize = _font$fontSize === void 0 ? 16 : _font$fontSize,
|
|
54
|
+
_font$fontWeight = font.fontWeight,
|
|
55
|
+
fontWeight = _font$fontWeight === void 0 ? 'normal' : _font$fontWeight,
|
|
56
|
+
_font$fontStyle = font.fontStyle,
|
|
57
|
+
fontStyle = _font$fontStyle === void 0 ? 'normal' : _font$fontStyle,
|
|
58
|
+
_font$fontFamily = font.fontFamily,
|
|
59
|
+
fontFamily = _font$fontFamily === void 0 ? 'sans-serif' : _font$fontFamily,
|
|
60
|
+
_font$textAlign = font.textAlign,
|
|
61
|
+
textAlign = _font$textAlign === void 0 ? 'center' : _font$textAlign;
|
|
62
|
+
var _gap = _slicedToArray(gap, 2),
|
|
63
|
+
_gap$ = _gap[0],
|
|
64
|
+
gapX = _gap$ === void 0 ? DEFAULT_GAP_X : _gap$,
|
|
65
|
+
_gap$2 = _gap[1],
|
|
66
|
+
gapY = _gap$2 === void 0 ? DEFAULT_GAP_Y : _gap$2;
|
|
67
|
+
var gapXCenter = gapX / 2;
|
|
68
|
+
var gapYCenter = gapY / 2;
|
|
69
|
+
var offsetLeft = (_a = offset === null || offset === void 0 ? void 0 : offset[0]) !== null && _a !== void 0 ? _a : gapXCenter;
|
|
70
|
+
var offsetTop = (_b = offset === null || offset === void 0 ? void 0 : offset[1]) !== null && _b !== void 0 ? _b : gapYCenter;
|
|
71
|
+
var markStyle = React.useMemo(function () {
|
|
72
|
+
var mergedStyle = {
|
|
73
|
+
zIndex: zIndex,
|
|
74
|
+
position: 'absolute',
|
|
75
|
+
left: 0,
|
|
76
|
+
top: 0,
|
|
77
|
+
width: '100%',
|
|
78
|
+
height: '100%',
|
|
79
|
+
pointerEvents: 'none',
|
|
80
|
+
backgroundRepeat: 'repeat'
|
|
81
|
+
};
|
|
82
|
+
/** Calculate the style of the offset */
|
|
83
|
+
var positionLeft = offsetLeft - gapXCenter;
|
|
84
|
+
var positionTop = offsetTop - gapYCenter;
|
|
85
|
+
if (positionLeft > 0) {
|
|
86
|
+
mergedStyle.left = "".concat(positionLeft, "px");
|
|
87
|
+
mergedStyle.width = "calc(100% - ".concat(positionLeft, "px)");
|
|
88
|
+
positionLeft = 0;
|
|
89
|
+
}
|
|
90
|
+
if (positionTop > 0) {
|
|
91
|
+
mergedStyle.top = "".concat(positionTop, "px");
|
|
92
|
+
mergedStyle.height = "calc(100% - ".concat(positionTop, "px)");
|
|
93
|
+
positionTop = 0;
|
|
94
|
+
}
|
|
95
|
+
mergedStyle.backgroundPosition = "".concat(positionLeft, "px ").concat(positionTop, "px");
|
|
96
|
+
return mergedStyle;
|
|
97
|
+
}, [zIndex, offsetLeft, gapXCenter, offsetTop, gapYCenter]);
|
|
98
|
+
var _React$useState = React.useState(),
|
|
99
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
100
|
+
container = _React$useState2[0],
|
|
101
|
+
setContainer = _React$useState2[1];
|
|
102
|
+
// Used for nest case like Modal, Drawer
|
|
103
|
+
var _React$useState3 = React.useState(new Set()),
|
|
104
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
105
|
+
subElements = _React$useState4[0],
|
|
106
|
+
setSubElements = _React$useState4[1];
|
|
107
|
+
// Nest elements should also support watermark
|
|
108
|
+
var targetElements = React.useMemo(function () {
|
|
109
|
+
var list = container ? [container] : [];
|
|
110
|
+
return [].concat(list, _toConsumableArray(Array.from(subElements)));
|
|
111
|
+
}, [container, subElements]);
|
|
112
|
+
// ============================ Content =============================
|
|
113
|
+
/**
|
|
114
|
+
* Get the width and height of the watermark. The default values are as follows
|
|
115
|
+
* Image: [120, 64]; Content: It's calculated by content;
|
|
116
|
+
*/
|
|
117
|
+
var getMarkSize = function getMarkSize(ctx) {
|
|
118
|
+
var defaultWidth = 120;
|
|
119
|
+
var defaultHeight = 64;
|
|
120
|
+
if (!image && ctx.measureText) {
|
|
121
|
+
ctx.font = "".concat(Number(fontSize), "px ").concat(fontFamily);
|
|
122
|
+
var contents = Array.isArray(content) ? content : [content];
|
|
123
|
+
var sizes = contents.map(function (item) {
|
|
124
|
+
var metrics = ctx.measureText(item);
|
|
125
|
+
return [metrics.width, metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent];
|
|
126
|
+
});
|
|
127
|
+
defaultWidth = Math.ceil(Math.max.apply(Math, _toConsumableArray(sizes.map(function (size) {
|
|
128
|
+
return size[0];
|
|
129
|
+
}))));
|
|
130
|
+
defaultHeight = Math.ceil(Math.max.apply(Math, _toConsumableArray(sizes.map(function (size) {
|
|
131
|
+
return size[1];
|
|
132
|
+
})))) * contents.length + (contents.length - 1) * FontGap;
|
|
133
|
+
}
|
|
134
|
+
return [width !== null && width !== void 0 ? width : defaultWidth, height !== null && height !== void 0 ? height : defaultHeight];
|
|
135
|
+
};
|
|
136
|
+
var getClips = useClips();
|
|
137
|
+
var _React$useState5 = React.useState(null),
|
|
138
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
139
|
+
watermarkInfo = _React$useState6[0],
|
|
140
|
+
setWatermarkInfo = _React$useState6[1];
|
|
141
|
+
// Generate new Watermark content
|
|
142
|
+
var renderWatermark = function renderWatermark() {
|
|
143
|
+
var canvas = document.createElement('canvas');
|
|
144
|
+
var ctx = canvas.getContext('2d');
|
|
145
|
+
if (ctx) {
|
|
146
|
+
var ratio = getPixelRatio();
|
|
147
|
+
var _getMarkSize = getMarkSize(ctx),
|
|
148
|
+
_getMarkSize2 = _slicedToArray(_getMarkSize, 2),
|
|
149
|
+
markWidth = _getMarkSize2[0],
|
|
150
|
+
markHeight = _getMarkSize2[1];
|
|
151
|
+
var drawCanvas = function drawCanvas(drawContent) {
|
|
152
|
+
var _getClips = getClips(drawContent || '', rotate, ratio, markWidth, markHeight, {
|
|
153
|
+
color: color,
|
|
154
|
+
fontSize: fontSize,
|
|
155
|
+
fontStyle: fontStyle,
|
|
156
|
+
fontWeight: fontWeight,
|
|
157
|
+
fontFamily: fontFamily,
|
|
158
|
+
textAlign: textAlign
|
|
159
|
+
}, gapX, gapY),
|
|
160
|
+
_getClips2 = _slicedToArray(_getClips, 2),
|
|
161
|
+
nextClips = _getClips2[0],
|
|
162
|
+
clipWidth = _getClips2[1];
|
|
163
|
+
setWatermarkInfo([nextClips, clipWidth]);
|
|
164
|
+
};
|
|
165
|
+
if (image) {
|
|
166
|
+
var img = new Image();
|
|
167
|
+
img.onload = function () {
|
|
168
|
+
drawCanvas(img);
|
|
169
|
+
};
|
|
170
|
+
img.onerror = function () {
|
|
171
|
+
drawCanvas(content);
|
|
172
|
+
};
|
|
173
|
+
img.crossOrigin = 'anonymous';
|
|
174
|
+
img.referrerPolicy = 'no-referrer';
|
|
175
|
+
img.src = image;
|
|
176
|
+
} else {
|
|
177
|
+
drawCanvas(content);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
var syncWatermark = useRafDebounce(renderWatermark);
|
|
182
|
+
// ============================= Effect =============================
|
|
183
|
+
// Append watermark to the container
|
|
184
|
+
var _useWatermark = useWatermark(markStyle),
|
|
185
|
+
_useWatermark2 = _slicedToArray(_useWatermark, 3),
|
|
186
|
+
appendWatermark = _useWatermark2[0],
|
|
187
|
+
removeWatermark = _useWatermark2[1],
|
|
188
|
+
isWatermarkEle = _useWatermark2[2];
|
|
189
|
+
useEffect(function () {
|
|
190
|
+
if (watermarkInfo) {
|
|
191
|
+
targetElements.forEach(function (holder) {
|
|
192
|
+
appendWatermark(watermarkInfo[0], watermarkInfo[1], holder);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}, [watermarkInfo, targetElements]);
|
|
196
|
+
// ============================ Observe =============================
|
|
197
|
+
var onMutate = function onMutate(mutations) {
|
|
198
|
+
mutations.forEach(function (mutation) {
|
|
199
|
+
if (reRendering(mutation, isWatermarkEle)) {
|
|
200
|
+
syncWatermark();
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
};
|
|
204
|
+
useMutateObserver(targetElements, onMutate);
|
|
205
|
+
useEffect(syncWatermark, [rotate, zIndex, width, height, image, content, color, fontSize, fontWeight, fontStyle, fontFamily, textAlign, gapX, gapY, offsetLeft, offsetTop]);
|
|
206
|
+
// ============================ Context =============================
|
|
207
|
+
var watermarkContext = React.useMemo(function () {
|
|
208
|
+
return {
|
|
209
|
+
add: function add(ele) {
|
|
210
|
+
setSubElements(function (prev) {
|
|
211
|
+
var clone = new Set(prev);
|
|
212
|
+
clone.add(ele);
|
|
213
|
+
return getSizeDiff(prev, clone);
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
remove: function remove(ele) {
|
|
217
|
+
removeWatermark(ele);
|
|
218
|
+
setSubElements(function (prev) {
|
|
219
|
+
var clone = new Set(prev);
|
|
220
|
+
clone["delete"](ele);
|
|
221
|
+
return getSizeDiff(prev, clone);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
}, []);
|
|
226
|
+
// ============================= Render =============================
|
|
227
|
+
var childNode = inherit ? /*#__PURE__*/React.createElement(WatermarkContext.Provider, {
|
|
228
|
+
value: watermarkContext
|
|
229
|
+
}, children) : children;
|
|
230
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
231
|
+
ref: setContainer,
|
|
232
|
+
className: classNames(className, rootClassName),
|
|
233
|
+
style: Object.assign({
|
|
234
|
+
position: 'relative'
|
|
235
|
+
}, style)
|
|
236
|
+
}, childNode);
|
|
237
|
+
};
|
|
238
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
239
|
+
Watermark.displayName = 'Watermark';
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
//默认值
|
|
243
|
+
Watermark.defaultProps = {
|
|
244
|
+
inherit: true,
|
|
245
|
+
rotate: -20,
|
|
246
|
+
zIndex: 9,
|
|
247
|
+
font: {
|
|
248
|
+
color: 'rgba(0,0,0,.15)',
|
|
249
|
+
fontSize: 16,
|
|
250
|
+
fontFamily: 'sans-serif',
|
|
251
|
+
fontStyle: 'normal'
|
|
252
|
+
},
|
|
253
|
+
gap: [100, 100],
|
|
254
|
+
offset: [50, 50]
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
//Api
|
|
258
|
+
Watermark.propTypes = {
|
|
259
|
+
/**
|
|
260
|
+
* 宽度,水印的宽度,content 的默认值为自身的宽度
|
|
261
|
+
*/
|
|
262
|
+
width: PropTypes.number,
|
|
263
|
+
/**
|
|
264
|
+
* 水印的高度,content 的默认值为自身的高度
|
|
265
|
+
*/
|
|
266
|
+
height: PropTypes.number,
|
|
267
|
+
/**
|
|
268
|
+
* 是否将水印传导给弹出组件如 Modal、Drawer
|
|
269
|
+
*/
|
|
270
|
+
inherit: PropTypes.bool,
|
|
271
|
+
/**
|
|
272
|
+
* 水印绘制时,旋转的角度,单位 °
|
|
273
|
+
*/
|
|
274
|
+
rotate: PropTypes.number,
|
|
275
|
+
/**
|
|
276
|
+
* 追加的水印元素的 z-index
|
|
277
|
+
*/
|
|
278
|
+
zIndex: PropTypes.number,
|
|
279
|
+
/**
|
|
280
|
+
* 图片源,建议导出 2 倍或 3 倍图,优先级高 (支持 base64 格式)
|
|
281
|
+
*/
|
|
282
|
+
image: PropTypes.string,
|
|
283
|
+
/**
|
|
284
|
+
* 水印文字内容
|
|
285
|
+
*/
|
|
286
|
+
content: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
|
|
287
|
+
/**
|
|
288
|
+
* 文字样式<br/>
|
|
289
|
+
* color:字体颜色 <br/>
|
|
290
|
+
* fontSize:字体大小 (number) <br/>
|
|
291
|
+
* fontWeight:字体粗细 (normal | light | weight | number) <br/>
|
|
292
|
+
* fontFamily:字体类型 (string)<br/>
|
|
293
|
+
* fontStyle:字体样式 (none | normal | italic | oblique)<br/>
|
|
294
|
+
* textAlign:指定文本对齐方向 <br/>
|
|
295
|
+
*/
|
|
296
|
+
font: PropTypes.object,
|
|
297
|
+
/**
|
|
298
|
+
* gap 水印之间的间距
|
|
299
|
+
*/
|
|
300
|
+
gap: verifyIsArrayOfNumberType,
|
|
301
|
+
/**
|
|
302
|
+
* 水印距离容器左上角的偏移量,默认为 gap/2
|
|
303
|
+
*/
|
|
304
|
+
offset: verifyIsArrayOfNumberType
|
|
305
|
+
};
|
|
306
|
+
export default Watermark;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
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
|
+
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
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
export var FontGap = 3;
|
|
8
|
+
function prepareCanvas(width, height) {
|
|
9
|
+
var ratio = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
10
|
+
var canvas = document.createElement('canvas');
|
|
11
|
+
var ctx = canvas.getContext('2d');
|
|
12
|
+
var realWidth = width * ratio;
|
|
13
|
+
var realHeight = height * ratio;
|
|
14
|
+
canvas.setAttribute('width', "".concat(realWidth, "px"));
|
|
15
|
+
canvas.setAttribute('height', "".concat(realHeight, "px"));
|
|
16
|
+
ctx.save();
|
|
17
|
+
return [ctx, canvas, realWidth, realHeight];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the clips of text content.
|
|
21
|
+
* This is a lazy hook function since SSR no need this
|
|
22
|
+
*/
|
|
23
|
+
export default function useClips() {
|
|
24
|
+
// Get single clips
|
|
25
|
+
function getClips(content, rotate, ratio, width, height, font, gapX, gapY) {
|
|
26
|
+
// ================= Text / Image =================
|
|
27
|
+
var _prepareCanvas = prepareCanvas(width, height, ratio),
|
|
28
|
+
_prepareCanvas2 = _slicedToArray(_prepareCanvas, 4),
|
|
29
|
+
ctx = _prepareCanvas2[0],
|
|
30
|
+
canvas = _prepareCanvas2[1],
|
|
31
|
+
contentWidth = _prepareCanvas2[2],
|
|
32
|
+
contentHeight = _prepareCanvas2[3];
|
|
33
|
+
if (content instanceof HTMLImageElement) {
|
|
34
|
+
// Image
|
|
35
|
+
ctx.drawImage(content, 0, 0, contentWidth, contentHeight);
|
|
36
|
+
} else {
|
|
37
|
+
// Text
|
|
38
|
+
var color = font.color,
|
|
39
|
+
fontSize = font.fontSize,
|
|
40
|
+
fontStyle = font.fontStyle,
|
|
41
|
+
fontWeight = font.fontWeight,
|
|
42
|
+
fontFamily = font.fontFamily,
|
|
43
|
+
textAlign = font.textAlign;
|
|
44
|
+
var mergedFontSize = Number(fontSize) * ratio;
|
|
45
|
+
ctx.font = "".concat(fontStyle, " normal ").concat(fontWeight, " ").concat(mergedFontSize, "px/").concat(height, "px ").concat(fontFamily);
|
|
46
|
+
ctx.fillStyle = color;
|
|
47
|
+
ctx.textAlign = textAlign;
|
|
48
|
+
ctx.textBaseline = 'top';
|
|
49
|
+
var contents = Array.isArray(content) ? content : [content];
|
|
50
|
+
contents === null || contents === void 0 ? void 0 : contents.forEach(function (item, index) {
|
|
51
|
+
ctx.fillText(item !== null && item !== void 0 ? item : '', contentWidth / 2, index * (mergedFontSize + FontGap * ratio));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// ==================== Rotate ====================
|
|
55
|
+
var angle = Math.PI / 180 * Number(rotate);
|
|
56
|
+
var maxSize = Math.max(width, height);
|
|
57
|
+
var _prepareCanvas3 = prepareCanvas(maxSize, maxSize, ratio),
|
|
58
|
+
_prepareCanvas4 = _slicedToArray(_prepareCanvas3, 3),
|
|
59
|
+
rCtx = _prepareCanvas4[0],
|
|
60
|
+
rCanvas = _prepareCanvas4[1],
|
|
61
|
+
realMaxSize = _prepareCanvas4[2];
|
|
62
|
+
// Copy from `ctx` and rotate
|
|
63
|
+
rCtx.translate(realMaxSize / 2, realMaxSize / 2);
|
|
64
|
+
rCtx.rotate(angle);
|
|
65
|
+
if (contentWidth > 0 && contentHeight > 0) {
|
|
66
|
+
rCtx.drawImage(canvas, -contentWidth / 2, -contentHeight / 2);
|
|
67
|
+
}
|
|
68
|
+
// Get boundary of rotated text
|
|
69
|
+
function getRotatePos(x, y) {
|
|
70
|
+
var targetX = x * Math.cos(angle) - y * Math.sin(angle);
|
|
71
|
+
var targetY = x * Math.sin(angle) + y * Math.cos(angle);
|
|
72
|
+
return [targetX, targetY];
|
|
73
|
+
}
|
|
74
|
+
var left = 0;
|
|
75
|
+
var right = 0;
|
|
76
|
+
var top = 0;
|
|
77
|
+
var bottom = 0;
|
|
78
|
+
var halfWidth = contentWidth / 2;
|
|
79
|
+
var halfHeight = contentHeight / 2;
|
|
80
|
+
var points = [[0 - halfWidth, 0 - halfHeight], [0 + halfWidth, 0 - halfHeight], [0 + halfWidth, 0 + halfHeight], [0 - halfWidth, 0 + halfHeight]];
|
|
81
|
+
points.forEach(function (_ref) {
|
|
82
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
83
|
+
x = _ref2[0],
|
|
84
|
+
y = _ref2[1];
|
|
85
|
+
var _getRotatePos = getRotatePos(x, y),
|
|
86
|
+
_getRotatePos2 = _slicedToArray(_getRotatePos, 2),
|
|
87
|
+
targetX = _getRotatePos2[0],
|
|
88
|
+
targetY = _getRotatePos2[1];
|
|
89
|
+
left = Math.min(left, targetX);
|
|
90
|
+
right = Math.max(right, targetX);
|
|
91
|
+
top = Math.min(top, targetY);
|
|
92
|
+
bottom = Math.max(bottom, targetY);
|
|
93
|
+
});
|
|
94
|
+
var cutLeft = left + realMaxSize / 2;
|
|
95
|
+
var cutTop = top + realMaxSize / 2;
|
|
96
|
+
var cutWidth = right - left;
|
|
97
|
+
var cutHeight = bottom - top;
|
|
98
|
+
// ================ Fill Alternate ================
|
|
99
|
+
var realGapX = gapX * ratio;
|
|
100
|
+
var realGapY = gapY * ratio;
|
|
101
|
+
var filledWidth = (cutWidth + realGapX) * 2;
|
|
102
|
+
var filledHeight = cutHeight + realGapY;
|
|
103
|
+
var _prepareCanvas5 = prepareCanvas(filledWidth, filledHeight),
|
|
104
|
+
_prepareCanvas6 = _slicedToArray(_prepareCanvas5, 2),
|
|
105
|
+
fCtx = _prepareCanvas6[0],
|
|
106
|
+
fCanvas = _prepareCanvas6[1];
|
|
107
|
+
function drawImg() {
|
|
108
|
+
var targetX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
109
|
+
var targetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
110
|
+
fCtx.drawImage(rCanvas, cutLeft, cutTop, cutWidth, cutHeight, targetX, targetY, cutWidth, cutHeight);
|
|
111
|
+
}
|
|
112
|
+
drawImg();
|
|
113
|
+
drawImg(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2);
|
|
114
|
+
drawImg(cutWidth + realGapX, +cutHeight / 2 + realGapY / 2);
|
|
115
|
+
return [fCanvas.toDataURL(), filledWidth / ratio, filledHeight / ratio];
|
|
116
|
+
}
|
|
117
|
+
return getClips;
|
|
118
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import raf from 'rc-util/lib/raf';
|
|
3
|
+
import { useEvent } from 'rc-util';
|
|
4
|
+
/**
|
|
5
|
+
* Callback will only execute last one for each raf
|
|
6
|
+
*/
|
|
7
|
+
export default function useRafDebounce(callback) {
|
|
8
|
+
var executeRef = React.useRef(false);
|
|
9
|
+
var rafRef = React.useRef();
|
|
10
|
+
var wrapperCallback = useEvent(callback);
|
|
11
|
+
return function () {
|
|
12
|
+
if (executeRef.current) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
executeRef.current = true;
|
|
16
|
+
wrapperCallback();
|
|
17
|
+
rafRef.current = raf(function () {
|
|
18
|
+
executeRef.current = false;
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
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
|
+
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
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import * as React from 'react';
|
|
8
|
+
import { getStyleStr } from './utils';
|
|
9
|
+
/**
|
|
10
|
+
* Base size of the canvas, 1 for parallel layout and 2 for alternate layout
|
|
11
|
+
* Only alternate layout is currently supported
|
|
12
|
+
*/
|
|
13
|
+
export var BaseSize = 2;
|
|
14
|
+
export var FontGap = 3;
|
|
15
|
+
// Prevent external hidden elements from adding accent styles
|
|
16
|
+
var EmphasizedStyles = {
|
|
17
|
+
visibility: 'visible !important'
|
|
18
|
+
};
|
|
19
|
+
export default function useWatermark(markStyle) {
|
|
20
|
+
var _React$useState = React.useState(function () {
|
|
21
|
+
return new Map();
|
|
22
|
+
}),
|
|
23
|
+
_React$useState2 = _slicedToArray(_React$useState, 1),
|
|
24
|
+
watermarkMap = _React$useState2[0];
|
|
25
|
+
var appendWatermark = function appendWatermark(base64Url, markWidth, container) {
|
|
26
|
+
if (container) {
|
|
27
|
+
if (!watermarkMap.get(container)) {
|
|
28
|
+
var newWatermarkEle = document.createElement('div');
|
|
29
|
+
watermarkMap.set(container, newWatermarkEle);
|
|
30
|
+
}
|
|
31
|
+
var watermarkEle = watermarkMap.get(container);
|
|
32
|
+
watermarkEle.setAttribute('style', getStyleStr(Object.assign(Object.assign(Object.assign({}, markStyle), {
|
|
33
|
+
backgroundImage: "url('".concat(base64Url, "')"),
|
|
34
|
+
backgroundSize: "".concat(Math.floor(markWidth), "px")
|
|
35
|
+
}), EmphasizedStyles)));
|
|
36
|
+
// Prevents using the browser `Hide Element` to hide watermarks
|
|
37
|
+
watermarkEle.removeAttribute('class');
|
|
38
|
+
container.append(watermarkEle);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
var removeWatermark = function removeWatermark(container) {
|
|
42
|
+
var watermarkEle = watermarkMap.get(container);
|
|
43
|
+
if (watermarkEle && container) {
|
|
44
|
+
container.removeChild(watermarkEle);
|
|
45
|
+
}
|
|
46
|
+
watermarkMap["delete"](container);
|
|
47
|
+
};
|
|
48
|
+
var isWatermarkEle = function isWatermarkEle(ele) {
|
|
49
|
+
return Array.from(watermarkMap.values()).includes(ele);
|
|
50
|
+
};
|
|
51
|
+
return [appendWatermark, removeWatermark, isWatermarkEle];
|
|
52
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** converting camel-cased strings to be lowercase and link it with Separato */
|
|
2
|
+
export function toLowercaseSeparator(key) {
|
|
3
|
+
return key.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
4
|
+
}
|
|
5
|
+
export function getStyleStr(style) {
|
|
6
|
+
return Object.keys(style).map(function (key) {
|
|
7
|
+
return "".concat(toLowercaseSeparator(key), ": ").concat(style[key], ";");
|
|
8
|
+
}).join(' ');
|
|
9
|
+
}
|
|
10
|
+
/** Returns the ratio of the device's physical pixel resolution to the css pixel resolution */
|
|
11
|
+
export function getPixelRatio() {
|
|
12
|
+
return window.devicePixelRatio || 1;
|
|
13
|
+
}
|
|
14
|
+
/** Whether to re-render the watermark */
|
|
15
|
+
export var reRendering = function reRendering(mutation, isWatermarkEle) {
|
|
16
|
+
var flag = false;
|
|
17
|
+
// Whether to delete the watermark node
|
|
18
|
+
if (mutation.removedNodes.length) {
|
|
19
|
+
flag = Array.from(mutation.removedNodes).some(function (node) {
|
|
20
|
+
return isWatermarkEle(node);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
// Whether the watermark dom property value has been modified
|
|
24
|
+
if (mutation.type === 'attributes' && isWatermarkEle(mutation.target)) {
|
|
25
|
+
flag = true;
|
|
26
|
+
}
|
|
27
|
+
return flag;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 自定义验证是否是数值类型组成的数组且长度为2
|
|
31
|
+
*/
|
|
32
|
+
export var verifyIsArrayOfNumberType = function verifyIsArrayOfNumberType(props, propName, componentName) {
|
|
33
|
+
if (props[propName] && props[propName].length !== 2) {
|
|
34
|
+
return new Error("Invalid prop ".concat(propName, " supplied to ").concat(componentName, ". Expected an array of length 2."));
|
|
35
|
+
}
|
|
36
|
+
if (props[propName] && !Array.isArray(props[propName])) {
|
|
37
|
+
return new Error("Invalid prop ".concat(propName, " supplied to ").concat(componentName, ". Expected an array."));
|
|
38
|
+
}
|
|
39
|
+
if (props[propName] && (typeof props[propName][0] !== 'number' || typeof props[propName][1] !== 'number')) {
|
|
40
|
+
return new Error("Invalid prop ".concat(propName, " supplied to ").concat(componentName, ". Expected an array of numbers."));
|
|
41
|
+
}
|
|
42
|
+
};
|
package/lib/message/index.js
CHANGED
|
@@ -73,7 +73,6 @@ function notice(args) {
|
|
|
73
73
|
return resolve(true);
|
|
74
74
|
};
|
|
75
75
|
getMessageInstance(function (instance) {
|
|
76
|
-
var _classnames;
|
|
77
76
|
var iconNode = /*#__PURE__*/React.createElement(_Icon, {
|
|
78
77
|
type: iconType,
|
|
79
78
|
theme: iconType === "loading" ? "outlined" : "filled",
|
|
@@ -90,9 +89,9 @@ function notice(args) {
|
|
|
90
89
|
"cw-message-wrapper-has-dec": args.dec
|
|
91
90
|
})
|
|
92
91
|
}, /*#__PURE__*/React.createElement("div", {
|
|
93
|
-
className: classnames((
|
|
92
|
+
className: classnames(_defineProperty(_defineProperty({
|
|
94
93
|
"cw-message-title": true
|
|
95
|
-
},
|
|
94
|
+
}, "".concat(prefixCls, "-custom-content"), true), "".concat(prefixCls, "-").concat(args.type), args.type))
|
|
96
95
|
}, args.icon ? args.icon : switchIconNode, /*#__PURE__*/React.createElement("span", {
|
|
97
96
|
className: "cw-message-content"
|
|
98
97
|
}, args.content), closable && /*#__PURE__*/React.createElement("span", {
|