@tiny-codes/react-easy 1.4.19 → 1.4.20
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/CHANGELOG.md +9 -0
- package/es/components/Animation/Pulse/index.d.ts +52 -0
- package/es/components/Animation/Pulse/index.js +71 -0
- package/es/components/Animation/Pulse/index.js.map +1 -0
- package/es/components/Animation/Pulse/style/index.d.ts +3 -0
- package/es/components/Animation/Pulse/style/index.js +37 -0
- package/es/components/Animation/Pulse/style/index.js.map +1 -0
- package/es/components/ModalAction/index.d.ts +1 -1
- package/es/components/ModalAction/index.js.map +1 -1
- package/es/components/index.d.ts +2 -0
- package/es/components/index.js +1 -0
- package/es/components/index.js.map +1 -1
- package/es/hooks/index.d.ts +4 -0
- package/es/hooks/index.js +4 -0
- package/es/hooks/index.js.map +1 -1
- package/es/hooks/useMovable.d.ts +36 -0
- package/es/hooks/useMovable.js +126 -0
- package/es/hooks/useMovable.js.map +1 -0
- package/es/hooks/useProcessingText.d.ts +38 -0
- package/es/hooks/useProcessingText.js +57 -0
- package/es/hooks/useProcessingText.js.map +1 -0
- package/es/utils/base64.d.ts +7 -1
- package/es/utils/base64.js +30 -9
- package/es/utils/base64.js.map +1 -1
- package/lib/components/Animation/Pulse/index.d.ts +52 -0
- package/lib/components/Animation/Pulse/index.js +88 -0
- package/lib/components/Animation/Pulse/index.js.map +7 -0
- package/lib/components/Animation/Pulse/style/index.d.ts +3 -0
- package/lib/components/Animation/Pulse/style/index.js +55 -0
- package/lib/components/Animation/Pulse/style/index.js.map +7 -0
- package/lib/components/ModalAction/index.d.ts +1 -1
- package/lib/components/ModalAction/index.js.map +1 -1
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +3 -0
- package/lib/components/index.js.map +2 -2
- package/lib/hooks/index.d.ts +4 -0
- package/lib/hooks/index.js +10 -0
- package/lib/hooks/index.js.map +2 -2
- package/lib/hooks/useMovable.d.ts +36 -0
- package/lib/hooks/useMovable.js +119 -0
- package/lib/hooks/useMovable.js.map +7 -0
- package/lib/hooks/useProcessingText.d.ts +38 -0
- package/lib/hooks/useProcessingText.js +51 -0
- package/lib/hooks/useProcessingText.js.map +7 -0
- package/lib/utils/base64.d.ts +7 -1
- package/lib/utils/base64.js +30 -10
- package/lib/utils/base64.js.map +2 -2
- package/package.json +2 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
export interface UseMovableProps {
|
|
3
|
+
/**
|
|
4
|
+
* - **EN:** Whether dragging is enabled, default is `true`
|
|
5
|
+
* - **CN:** 是否启用拖动,默认`true`
|
|
6
|
+
*/
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* - **EN:** The ref of the container element
|
|
10
|
+
* - **CN:** 容器元素的ref
|
|
11
|
+
*/
|
|
12
|
+
containerRef: RefObject<HTMLElement>;
|
|
13
|
+
/**
|
|
14
|
+
* - **EN:** Selectors of elements that should not trigger dragging, e.g., interactive controls
|
|
15
|
+
* - **CN:** 不应触发拖动的元素的选择器,例如交互控件
|
|
16
|
+
*/
|
|
17
|
+
ignoreSelectors?: string[];
|
|
18
|
+
/**
|
|
19
|
+
* - **EN:** Key for storing position in localStorage; if not provided, position won't be saved
|
|
20
|
+
* - **CN:** 用于在 localStorage 中存储位置的键;如果未提供,则不会保存位置
|
|
21
|
+
*/
|
|
22
|
+
storageKey?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* - **EN:** Hook to make an element movable by dragging, with position persistence using localStorage
|
|
26
|
+
* - **CN:** 通过拖动使元素可移动的钩子,并使用 localStorage 持久化位置
|
|
27
|
+
*/
|
|
28
|
+
declare const useMovable: (props: UseMovableProps) => {
|
|
29
|
+
onPointerDown: (e: React.PointerEvent<HTMLDivElement>) => void;
|
|
30
|
+
position: MovePosition | undefined;
|
|
31
|
+
};
|
|
32
|
+
export interface MovePosition {
|
|
33
|
+
left: number;
|
|
34
|
+
top: number;
|
|
35
|
+
}
|
|
36
|
+
export default useMovable;
|
|
@@ -0,0 +1,126 @@
|
|
|
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 { useEffect, useRef, useState } from 'react';
|
|
8
|
+
import { useLocalStorage } from 'react-use';
|
|
9
|
+
import useRefFunction from "./useRefFunction";
|
|
10
|
+
import useRefValue from "./useRefValue";
|
|
11
|
+
/**
|
|
12
|
+
* - **EN:** Hook to make an element movable by dragging, with position persistence using localStorage
|
|
13
|
+
* - **CN:** 通过拖动使元素可移动的钩子,并使用 localStorage 持久化位置
|
|
14
|
+
*/
|
|
15
|
+
var useMovable = function useMovable(props) {
|
|
16
|
+
var enabled = props.enabled,
|
|
17
|
+
containerRef = props.containerRef,
|
|
18
|
+
ignoreSelectors = props.ignoreSelectors,
|
|
19
|
+
storageKey = props.storageKey;
|
|
20
|
+
var storageKeyRef = useRefValue(storageKey);
|
|
21
|
+
var _useLocalStorage = useLocalStorage(storageKey !== null && storageKey !== void 0 ? storageKey : ''),
|
|
22
|
+
_useLocalStorage2 = _slicedToArray(_useLocalStorage, 2),
|
|
23
|
+
savedPosition = _useLocalStorage2[0],
|
|
24
|
+
savePosition = _useLocalStorage2[1];
|
|
25
|
+
var savePositionRef = useRefValue(savePosition);
|
|
26
|
+
var _useState = useState(savedPosition !== null && savedPosition !== void 0 ? savedPosition : undefined),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
position = _useState2[0],
|
|
29
|
+
setPosition = _useState2[1];
|
|
30
|
+
var draggingRef = useRef(false);
|
|
31
|
+
var dragOffsetRef = useRef({
|
|
32
|
+
x: 0,
|
|
33
|
+
y: 0
|
|
34
|
+
});
|
|
35
|
+
var sizeRef = useRef({
|
|
36
|
+
w: 0,
|
|
37
|
+
h: 0
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Drag start (exclude interactive controls)
|
|
41
|
+
var handlePointerDown = useRefFunction(function (e) {
|
|
42
|
+
var _position$left, _position$top;
|
|
43
|
+
var target = e.target;
|
|
44
|
+
// Set the selector for elements that do not trigger dragging
|
|
45
|
+
if (ignoreSelectors && target.closest(ignoreSelectors.join(','))) return;
|
|
46
|
+
if (!containerRef.current) return;
|
|
47
|
+
var rect = containerRef.current.getBoundingClientRect();
|
|
48
|
+
sizeRef.current = {
|
|
49
|
+
w: rect.width,
|
|
50
|
+
h: rect.height
|
|
51
|
+
};
|
|
52
|
+
var currentLeft = (_position$left = position === null || position === void 0 ? void 0 : position.left) !== null && _position$left !== void 0 ? _position$left : rect.left;
|
|
53
|
+
var currentTop = (_position$top = position === null || position === void 0 ? void 0 : position.top) !== null && _position$top !== void 0 ? _position$top : rect.top;
|
|
54
|
+
dragOffsetRef.current = {
|
|
55
|
+
x: e.clientX - currentLeft,
|
|
56
|
+
y: e.clientY - currentTop
|
|
57
|
+
};
|
|
58
|
+
draggingRef.current = true;
|
|
59
|
+
try {
|
|
60
|
+
var _containerRef$current, _containerRef$current2;
|
|
61
|
+
(_containerRef$current = (_containerRef$current2 = containerRef.current).setPointerCapture) === null || _containerRef$current === void 0 || _containerRef$current.call(_containerRef$current2, e.pointerId);
|
|
62
|
+
} catch (_unused) {
|
|
63
|
+
// do nothing
|
|
64
|
+
}
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Adjust position when window size changes
|
|
69
|
+
useEffect(function () {
|
|
70
|
+
if (!position) return;
|
|
71
|
+
var maxLeft = Math.max(0, window.innerWidth - sizeRef.current.w);
|
|
72
|
+
var maxTop = Math.max(0, window.innerHeight - sizeRef.current.h);
|
|
73
|
+
var clampedLeft = Math.min(Math.max(0, position.left), maxLeft);
|
|
74
|
+
var clampedTop = Math.min(Math.max(0, position.top), maxTop);
|
|
75
|
+
if (clampedLeft !== position.left || clampedTop !== position.top) {
|
|
76
|
+
var pos = {
|
|
77
|
+
left: clampedLeft,
|
|
78
|
+
top: clampedTop
|
|
79
|
+
};
|
|
80
|
+
setPosition(pos);
|
|
81
|
+
if (storageKeyRef.current) {
|
|
82
|
+
savePositionRef.current(pos);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}, [position]);
|
|
86
|
+
|
|
87
|
+
// Update position during dragging; restrict within the visible area.
|
|
88
|
+
useEffect(function () {
|
|
89
|
+
var onMove = function onMove(e) {
|
|
90
|
+
if (!draggingRef.current) return;
|
|
91
|
+
var newLeft = e.clientX - dragOffsetRef.current.x;
|
|
92
|
+
var newTop = e.clientY - dragOffsetRef.current.y;
|
|
93
|
+
var maxLeft = Math.max(0, window.innerWidth - sizeRef.current.w);
|
|
94
|
+
var maxTop = Math.max(0, window.innerHeight - sizeRef.current.h);
|
|
95
|
+
var clampedLeft = Math.min(Math.max(0, newLeft), maxLeft);
|
|
96
|
+
var clampedTop = Math.min(Math.max(0, newTop), maxTop);
|
|
97
|
+
var pos = {
|
|
98
|
+
left: clampedLeft,
|
|
99
|
+
top: clampedTop
|
|
100
|
+
};
|
|
101
|
+
setPosition(pos);
|
|
102
|
+
if (storageKeyRef.current) {
|
|
103
|
+
savePositionRef.current(pos);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
var onUp = function onUp() {
|
|
107
|
+
if (draggingRef.current) draggingRef.current = false;
|
|
108
|
+
};
|
|
109
|
+
if (enabled) {
|
|
110
|
+
window.addEventListener('pointermove', onMove);
|
|
111
|
+
window.addEventListener('pointerup', onUp);
|
|
112
|
+
window.addEventListener('pointercancel', onUp);
|
|
113
|
+
}
|
|
114
|
+
return function () {
|
|
115
|
+
window.removeEventListener('pointermove', onMove);
|
|
116
|
+
window.removeEventListener('pointerup', onUp);
|
|
117
|
+
window.removeEventListener('pointercancel', onUp);
|
|
118
|
+
};
|
|
119
|
+
}, [enabled]);
|
|
120
|
+
return {
|
|
121
|
+
onPointerDown: handlePointerDown,
|
|
122
|
+
position: position
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
export default useMovable;
|
|
126
|
+
//# sourceMappingURL=useMovable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","useLocalStorage","useRefFunction","useRefValue","useMovable","props","enabled","containerRef","ignoreSelectors","storageKey","storageKeyRef","_useLocalStorage","_useLocalStorage2","_slicedToArray","savedPosition","savePosition","savePositionRef","_useState","undefined","_useState2","position","setPosition","draggingRef","dragOffsetRef","x","y","sizeRef","w","h","handlePointerDown","e","_position$left","_position$top","target","closest","join","current","rect","getBoundingClientRect","width","height","currentLeft","left","currentTop","top","clientX","clientY","_containerRef$current","_containerRef$current2","setPointerCapture","call","pointerId","_unused","preventDefault","maxLeft","Math","max","window","innerWidth","maxTop","innerHeight","clampedLeft","min","clampedTop","pos","onMove","newLeft","newTop","onUp","addEventListener","removeEventListener","onPointerDown"],"sources":["../../src/hooks/useMovable.ts"],"sourcesContent":["import { type RefObject, useEffect, useRef, useState } from 'react';\nimport { useLocalStorage } from 'react-use';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\n\nexport interface UseMovableProps {\n /**\n * - **EN:** Whether dragging is enabled, default is `true`\n * - **CN:** 是否启用拖动,默认`true`\n */\n enabled?: boolean;\n /**\n * - **EN:** The ref of the container element\n * - **CN:** 容器元素的ref\n */\n containerRef: RefObject<HTMLElement>;\n /**\n * - **EN:** Selectors of elements that should not trigger dragging, e.g., interactive controls\n * - **CN:** 不应触发拖动的元素的选择器,例如交互控件\n */\n ignoreSelectors?: string[];\n /**\n * - **EN:** Key for storing position in localStorage; if not provided, position won't be saved\n * - **CN:** 用于在 localStorage 中存储位置的键;如果未提供,则不会保存位置\n */\n storageKey?: string;\n}\n\n/**\n * - **EN:** Hook to make an element movable by dragging, with position persistence using localStorage\n * - **CN:** 通过拖动使元素可移动的钩子,并使用 localStorage 持久化位置\n */\nconst useMovable = (props: UseMovableProps) => {\n const { enabled, containerRef, ignoreSelectors, storageKey } = props;\n\n const storageKeyRef = useRefValue(storageKey);\n const [savedPosition, savePosition] = useLocalStorage<MovePosition>(storageKey ?? '');\n const savePositionRef = useRefValue(savePosition);\n const [position, setPosition] = useState<MovePosition | undefined>(savedPosition ?? undefined);\n const draggingRef = useRef(false);\n const dragOffsetRef = useRef({ x: 0, y: 0 });\n const sizeRef = useRef({ w: 0, h: 0 });\n\n // Drag start (exclude interactive controls)\n const handlePointerDown = useRefFunction((e: React.PointerEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n // Set the selector for elements that do not trigger dragging\n if (ignoreSelectors && target.closest(ignoreSelectors.join(','))) return;\n\n if (!containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n sizeRef.current = { w: rect.width, h: rect.height };\n const currentLeft = position?.left ?? rect.left;\n const currentTop = position?.top ?? rect.top;\n\n dragOffsetRef.current = { x: e.clientX - currentLeft, y: e.clientY - currentTop };\n draggingRef.current = true;\n try {\n containerRef.current.setPointerCapture?.(e.pointerId);\n } catch {\n // do nothing\n }\n e.preventDefault();\n });\n\n // Adjust position when window size changes\n useEffect(() => {\n if (!position) return;\n const maxLeft = Math.max(0, window.innerWidth - sizeRef.current.w);\n const maxTop = Math.max(0, window.innerHeight - sizeRef.current.h);\n const clampedLeft = Math.min(Math.max(0, position.left), maxLeft);\n const clampedTop = Math.min(Math.max(0, position.top), maxTop);\n if (clampedLeft !== position.left || clampedTop !== position.top) {\n const pos = { left: clampedLeft, top: clampedTop };\n setPosition(pos);\n if (storageKeyRef.current) {\n savePositionRef.current(pos);\n }\n }\n }, [position]);\n\n // Update position during dragging; restrict within the visible area.\n useEffect(() => {\n const onMove = (e: PointerEvent) => {\n if (!draggingRef.current) return;\n const newLeft = e.clientX - dragOffsetRef.current.x;\n const newTop = e.clientY - dragOffsetRef.current.y;\n const maxLeft = Math.max(0, window.innerWidth - sizeRef.current.w);\n const maxTop = Math.max(0, window.innerHeight - sizeRef.current.h);\n const clampedLeft = Math.min(Math.max(0, newLeft), maxLeft);\n const clampedTop = Math.min(Math.max(0, newTop), maxTop);\n const pos = { left: clampedLeft, top: clampedTop };\n setPosition(pos);\n if (storageKeyRef.current) {\n savePositionRef.current(pos);\n }\n };\n const onUp = () => {\n if (draggingRef.current) draggingRef.current = false;\n };\n if (enabled) {\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n }\n return () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n }, [enabled]);\n\n return {\n onPointerDown: handlePointerDown,\n position,\n };\n};\n\nexport interface MovePosition {\n left: number;\n top: number;\n}\n\nexport default useMovable;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface UseProcessingTextProps {
|
|
2
|
+
/**
|
|
3
|
+
* - **EN:** Whether the animation is enabled, default is `true`
|
|
4
|
+
* - **CN:** 是否启用,默认`true`
|
|
5
|
+
*/
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* - **EN:** Prefix text (e.g., "Processing"), default is `""`
|
|
9
|
+
* - **CN:** 前缀文本(例如 "处理中"),默认`""`
|
|
10
|
+
*/
|
|
11
|
+
prefixText?: string;
|
|
12
|
+
/**
|
|
13
|
+
* - **EN:** Dot text (e.g., "."), default is `"."`
|
|
14
|
+
* - **CN:** 点文本(例如 "."),默认`"."`
|
|
15
|
+
*/
|
|
16
|
+
dotText?: string;
|
|
17
|
+
/**
|
|
18
|
+
* - **EN:** Animation interval (milliseconds), default is `300`
|
|
19
|
+
* - **CN:** 动画间隔(毫秒),默认`300`
|
|
20
|
+
*/
|
|
21
|
+
interval?: number;
|
|
22
|
+
/**
|
|
23
|
+
* - **EN:** Maximum number of dots, default is `3`
|
|
24
|
+
* - **CN:** 最大点数,默认`3`
|
|
25
|
+
*/
|
|
26
|
+
maxDots?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* - **EN:** Hook to create a processing text animation (e.g., "Processing.", "Processing..",
|
|
30
|
+
* "Processing...")
|
|
31
|
+
* - **CN:** 创建处理文本动画的钩子(例如 "处理中."、"处理中.."、"处理中...")
|
|
32
|
+
*
|
|
33
|
+
* @param props Configuration options
|
|
34
|
+
*
|
|
35
|
+
* @returns Animated processing text
|
|
36
|
+
*/
|
|
37
|
+
declare function useProcessingText(props?: UseProcessingTextProps): string;
|
|
38
|
+
export default useProcessingText;
|
|
@@ -0,0 +1,57 @@
|
|
|
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 { useEffect, useRef, useState } from 'react';
|
|
8
|
+
/**
|
|
9
|
+
* - **EN:** Hook to create a processing text animation (e.g., "Processing.", "Processing..",
|
|
10
|
+
* "Processing...")
|
|
11
|
+
* - **CN:** 创建处理文本动画的钩子(例如 "处理中."、"处理中.."、"处理中...")
|
|
12
|
+
*
|
|
13
|
+
* @param props Configuration options
|
|
14
|
+
*
|
|
15
|
+
* @returns Animated processing text
|
|
16
|
+
*/
|
|
17
|
+
function useProcessingText(props) {
|
|
18
|
+
var _ref = props || {},
|
|
19
|
+
_ref$enabled = _ref.enabled,
|
|
20
|
+
enabled = _ref$enabled === void 0 ? true : _ref$enabled,
|
|
21
|
+
_ref$prefixText = _ref.prefixText,
|
|
22
|
+
prefixText = _ref$prefixText === void 0 ? '' : _ref$prefixText,
|
|
23
|
+
_ref$dotText = _ref.dotText,
|
|
24
|
+
dotText = _ref$dotText === void 0 ? '.' : _ref$dotText,
|
|
25
|
+
_ref$interval = _ref.interval,
|
|
26
|
+
interval = _ref$interval === void 0 ? 300 : _ref$interval,
|
|
27
|
+
_ref$maxDots = _ref.maxDots,
|
|
28
|
+
maxDots = _ref$maxDots === void 0 ? 3 : _ref$maxDots;
|
|
29
|
+
var _useState = useState(0),
|
|
30
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
31
|
+
dots = _useState2[0],
|
|
32
|
+
setDots = _useState2[1];
|
|
33
|
+
var timerRef = useRef(0);
|
|
34
|
+
useEffect(function () {
|
|
35
|
+
if (enabled) {
|
|
36
|
+
timerRef.current = window.setInterval(function () {
|
|
37
|
+
setDots(function (prev) {
|
|
38
|
+
return (prev + 1) % (maxDots + 1);
|
|
39
|
+
});
|
|
40
|
+
}, interval);
|
|
41
|
+
} else {
|
|
42
|
+
setDots(0);
|
|
43
|
+
if (timerRef.current) {
|
|
44
|
+
clearInterval(timerRef.current);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return function () {
|
|
48
|
+
if (timerRef.current) {
|
|
49
|
+
clearInterval(timerRef.current);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}, [enabled, interval, maxDots]);
|
|
53
|
+
var text = prefixText + dotText.repeat(dots);
|
|
54
|
+
return text;
|
|
55
|
+
}
|
|
56
|
+
export default useProcessingText;
|
|
57
|
+
//# sourceMappingURL=useProcessingText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","useProcessingText","props","_ref","_ref$enabled","enabled","_ref$prefixText","prefixText","_ref$dotText","dotText","_ref$interval","interval","_ref$maxDots","maxDots","_useState","_useState2","_slicedToArray","dots","setDots","timerRef","current","window","setInterval","prev","clearInterval","text","repeat"],"sources":["../../src/hooks/useProcessingText.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport interface UseProcessingTextProps {\n /**\n * - **EN:** Whether the animation is enabled, default is `true`\n * - **CN:** 是否启用,默认`true`\n */\n enabled?: boolean;\n /**\n * - **EN:** Prefix text (e.g., \"Processing\"), default is `\"\"`\n * - **CN:** 前缀文本(例如 \"处理中\"),默认`\"\"`\n */\n prefixText?: string;\n /**\n * - **EN:** Dot text (e.g., \".\"), default is `\".\"`\n * - **CN:** 点文本(例如 \".\"),默认`\".\"`\n */\n dotText?: string;\n /**\n * - **EN:** Animation interval (milliseconds), default is `300`\n * - **CN:** 动画间隔(毫秒),默认`300`\n */\n interval?: number;\n /**\n * - **EN:** Maximum number of dots, default is `3`\n * - **CN:** 最大点数,默认`3`\n */\n maxDots?: number;\n}\n/**\n * - **EN:** Hook to create a processing text animation (e.g., \"Processing.\", \"Processing..\",\n * \"Processing...\")\n * - **CN:** 创建处理文本动画的钩子(例如 \"处理中.\"、\"处理中..\"、\"处理中...\")\n *\n * @param props Configuration options\n *\n * @returns Animated processing text\n */\nfunction useProcessingText(props?: UseProcessingTextProps) {\n const { enabled = true, prefixText = '', dotText = '.', interval = 300, maxDots = 3 } = props || {};\n const [dots, setDots] = useState(0);\n const timerRef = useRef(0);\n\n useEffect(() => {\n if (enabled) {\n timerRef.current = window.setInterval(() => {\n setDots((prev) => (prev + 1) % (maxDots + 1));\n }, interval);\n } else {\n setDots(0);\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n }\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }, [enabled, interval, maxDots]);\n\n const text = prefixText + dotText.repeat(dots);\n return text;\n}\n\nexport default useProcessingText;\n"],"mappings":";;;;;;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AA6BnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,KAA8B,EAAE;EACzD,IAAAC,IAAA,GAAwFD,KAAK,IAAI,CAAC,CAAC;IAAAE,YAAA,GAAAD,IAAA,CAA3FE,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,IAAI,GAAAA,YAAA;IAAAE,eAAA,GAAAH,IAAA,CAAEI,UAAU;IAAVA,UAAU,GAAAD,eAAA,cAAG,EAAE,GAAAA,eAAA;IAAAE,YAAA,GAAAL,IAAA,CAAEM,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,GAAG,GAAAA,YAAA;IAAAE,aAAA,GAAAP,IAAA,CAAEQ,QAAQ;IAARA,QAAQ,GAAAD,aAAA,cAAG,GAAG,GAAAA,aAAA;IAAAE,YAAA,GAAAT,IAAA,CAAEU,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,CAAC,GAAAA,YAAA;EACnF,IAAAE,SAAA,GAAwBd,QAAQ,CAAC,CAAC,CAAC;IAAAe,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA5BG,IAAI,GAAAF,UAAA;IAAEG,OAAO,GAAAH,UAAA;EACpB,IAAMI,QAAQ,GAAGpB,MAAM,CAAC,CAAC,CAAC;EAE1BD,SAAS,CAAC,YAAM;IACd,IAAIO,OAAO,EAAE;MACXc,QAAQ,CAACC,OAAO,GAAGC,MAAM,CAACC,WAAW,CAAC,YAAM;QAC1CJ,OAAO,CAAC,UAACK,IAAI;UAAA,OAAK,CAACA,IAAI,GAAG,CAAC,KAAKV,OAAO,GAAG,CAAC,CAAC;QAAA,EAAC;MAC/C,CAAC,EAAEF,QAAQ,CAAC;IACd,CAAC,MAAM;MACLO,OAAO,CAAC,CAAC,CAAC;MACV,IAAIC,QAAQ,CAACC,OAAO,EAAE;QACpBI,aAAa,CAACL,QAAQ,CAACC,OAAO,CAAC;MACjC;IACF;IACA,OAAO,YAAM;MACX,IAAID,QAAQ,CAACC,OAAO,EAAE;QACpBI,aAAa,CAACL,QAAQ,CAACC,OAAO,CAAC;MACjC;IACF,CAAC;EACH,CAAC,EAAE,CAACf,OAAO,EAAEM,QAAQ,EAAEE,OAAO,CAAC,CAAC;EAEhC,IAAMY,IAAI,GAAGlB,UAAU,GAAGE,OAAO,CAACiB,MAAM,CAACT,IAAI,CAAC;EAC9C,OAAOQ,IAAI;AACb;AAEA,eAAexB,iBAAiB"}
|
package/es/utils/base64.d.ts
CHANGED
|
@@ -45,4 +45,10 @@ export declare function arrayBufferToBase64(buf: ArrayBuffer): string;
|
|
|
45
45
|
*
|
|
46
46
|
* @returns The decoded ArrayBuffer | 解码后的 ArrayBuffer
|
|
47
47
|
*/
|
|
48
|
-
export declare function base64ToArrayBuffer(base64: string
|
|
48
|
+
export declare function base64ToArrayBuffer(base64: string, opts?: {
|
|
49
|
+
/**
|
|
50
|
+
* - EN: Use URL-safe Base64 if true (replace -_ back to +/ and restore padding)
|
|
51
|
+
* - CN: 为 true 时按 URL 安全 Base64 进行规范化(将 -_ 还原为 +/ 并补齐 =)
|
|
52
|
+
*/
|
|
53
|
+
urlSafe?: boolean;
|
|
54
|
+
}): ArrayBuffer;
|
package/es/utils/base64.js
CHANGED
|
@@ -124,16 +124,37 @@ export function arrayBufferToBase64(buf) {
|
|
|
124
124
|
* @returns The decoded ArrayBuffer | 解码后的 ArrayBuffer
|
|
125
125
|
*/
|
|
126
126
|
export function base64ToArrayBuffer(base64) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
128
|
+
var _opts$urlSafe3 = opts.urlSafe,
|
|
129
|
+
urlSafe = _opts$urlSafe3 === void 0 ? false : _opts$urlSafe3;
|
|
130
|
+
if (base64 == null || base64 === '') return new ArrayBuffer(0);
|
|
131
|
+
|
|
132
|
+
// Normalize to standard Base64 (align with base64ToString)
|
|
133
|
+
var normalized = base64;
|
|
134
|
+
if (urlSafe) {
|
|
135
|
+
normalized = normalized.replace(/-/g, '+').replace(/_/g, '/');
|
|
130
136
|
}
|
|
131
|
-
var
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
137
|
+
var padNeeded = normalized.length % 4;
|
|
138
|
+
if (padNeeded === 2) normalized += '==';else if (padNeeded === 3) normalized += '=';else if (padNeeded === 1) {
|
|
139
|
+
throw new Error('Invalid Base64 string length');
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
if (typeof Buffer !== 'undefined' && typeof Buffer.from === 'function') {
|
|
143
|
+
// Node.js / environments with Buffer
|
|
144
|
+
var buf = Buffer.from(normalized, 'base64');
|
|
145
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
146
|
+
} else {
|
|
147
|
+
// Browser
|
|
148
|
+
var binary = atob(normalized);
|
|
149
|
+
var len = binary.length;
|
|
150
|
+
var bytes = new Uint8Array(len);
|
|
151
|
+
for (var i = 0; i < len; i++) {
|
|
152
|
+
bytes[i] = binary.charCodeAt(i);
|
|
153
|
+
}
|
|
154
|
+
return bytes.buffer;
|
|
155
|
+
}
|
|
156
|
+
} catch (e) {
|
|
157
|
+
throw new Error('Failed to decode Base64: ' + (e instanceof Error ? e.message : String(e)));
|
|
136
158
|
}
|
|
137
|
-
return bytes.buffer;
|
|
138
159
|
}
|
|
139
160
|
//# sourceMappingURL=base64.js.map
|
package/es/utils/base64.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["stringToBase64","content","opts","arguments","length","undefined","_opts$urlSafe","urlSafe","base64","hasBuffer","Buffer","from","toString","encoder","TextEncoder","bytes","encode","binary","_iterator","_createForOfIteratorHelper","_step","s","n","done","i","value","String","fromCharCode","err","e","f","btoa","replace","base64ToString","_opts$urlSafe2","normalized","padNeeded","Error","atob","len","Uint8Array","charCodeAt","decoder","TextDecoder","decode","message","arrayBufferToBase64","buf","chunk","apply","_toConsumableArray","subarray","padding","repeat","base64ToArrayBuffer","buffer","slice","byteOffset","byteLength","binaryString"],"sources":["../../src/utils/base64.ts"],"sourcesContent":["/**\n * - **EN:** Encode a UTF-8 string into Base64 (standard or URL-safe).\n * - **CN:** 将 UTF-8 字符串编码为 Base64(标准或 URL 安全格式)。\n *\n * @param content Input text to encode | 要编码的输入文本\n *\n * @returns Base64 encoded string | Base64 编码后的字符串\n */\nexport function stringToBase64(\n content: string,\n opts: {\n /**\n * - **EN:** Use URL-safe Base64 if true (replace +/ with -_ and strip =)\n * - **CN:** 为 true 时使用 URL 安全 Base64(将 +/ 替换为 -_ 并去掉 =)\n */\n urlSafe?: boolean;\n } = {}\n): string {\n const { urlSafe = false } = opts;\n if (content == null || content === '') return '';\n\n let base64: string;\n const hasBuffer = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function';\n if (hasBuffer) {\n // Node.js\n base64 = Buffer.from(content, 'utf8').toString('base64');\n } else {\n // Browser\n const encoder = new TextEncoder();\n const bytes = encoder.encode(content);\n let binary = '';\n for (const i of bytes) {\n binary += String.fromCharCode(i);\n }\n base64 = btoa(binary);\n }\n\n if (urlSafe) {\n // Replace chars and strip padding for URL-safe variant\n base64 = base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/u, '');\n }\n return base64;\n}\n\n/**\n * - EN: Decode a Base64 (standard or URL-safe) string into UTF-8 text.\n * - CN: 将(标准或 URL 安全)Base64 字符串解码为 UTF-8 文本。\n *\n * @param content Base64 encoded string | Base64 编码字符串\n *\n * @returns Decoded UTF-8 string | 解码后的 UTF-8 字符串\n */\nexport function base64ToString(\n content: string,\n opts: {\n /**\n * - **EN:** Use URL-safe Base64 if true (replace +/ with -_ and strip =)\n * - **CN:** 为 true 时使用 URL 安全 Base64(将 +/ 替换为 -_ 并去掉 =)\n */\n urlSafe?: boolean;\n } = {}\n): string {\n const { urlSafe = false } = opts;\n if (content == null || content === '') return '';\n\n let normalized = content;\n if (urlSafe) {\n normalized = normalized.replace(/-/g, '+').replace(/_/g, '/');\n }\n // Restore padding if stripped\n const padNeeded = normalized.length % 4;\n if (padNeeded === 2) normalized += '==';\n else if (padNeeded === 3) normalized += '=';\n else if (padNeeded === 1) {\n throw new Error('Invalid Base64 string length');\n }\n\n const hasBuffer = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function';\n try {\n if (hasBuffer) {\n return Buffer.from(normalized, 'base64').toString('utf8');\n } else {\n const binary = atob(normalized);\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n const decoder = new TextDecoder();\n return decoder.decode(bytes);\n }\n } catch (e) {\n throw new Error('Failed to decode Base64: ' + (e instanceof Error ? e.message : String(e)));\n }\n}\n\n/**\n * - **EN:** Convert an ArrayBuffer to a Base64 encoded string.\n * - **CN:** 将 ArrayBuffer 转换为 Base64 编码的字符串。\n *\n * @param buf The ArrayBuffer to convert | 要转换的 ArrayBuffer\n *\n * @returns The Base64 encoded string | Base64 编码的字符串\n */\nexport function arrayBufferToBase64(buf: ArrayBuffer): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(buf).toString('base64');\n }\n const bytes = new Uint8Array(buf);\n const chunk = 0x8000;\n let binary = '';\n for (let i = 0; i < bytes.length; i += chunk) {\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\n }\n let base64 = btoa(binary);\n // Add padding for Base64\n const padding = (4 - (base64.length % 4)) % 4;\n if (padding) base64 += '='.repeat(padding);\n return base64;\n}\n\n/**\n * - **EN:** Decode a Base64 (standard or URL-safe) string into an ArrayBuffer.\n * - **CN:** 将(标准或 URL 安全)Base64 字符串解码为 ArrayBuffer。\n *\n * @param base64 The Base64 encoded string | Base64 编码的字符串\n *\n * @returns The decoded ArrayBuffer | 解码后的 ArrayBuffer\n */\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\n if (typeof Buffer !== 'undefined') {\n const buffer = Buffer.from(base64, 'base64');\n return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n }\n const binaryString = atob(base64);\n const len = binaryString.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes.buffer;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["stringToBase64","content","opts","arguments","length","undefined","_opts$urlSafe","urlSafe","base64","hasBuffer","Buffer","from","toString","encoder","TextEncoder","bytes","encode","binary","_iterator","_createForOfIteratorHelper","_step","s","n","done","i","value","String","fromCharCode","err","e","f","btoa","replace","base64ToString","_opts$urlSafe2","normalized","padNeeded","Error","atob","len","Uint8Array","charCodeAt","decoder","TextDecoder","decode","message","arrayBufferToBase64","buf","chunk","apply","_toConsumableArray","subarray","padding","repeat","base64ToArrayBuffer","_opts$urlSafe3","ArrayBuffer","buffer","slice","byteOffset","byteLength"],"sources":["../../src/utils/base64.ts"],"sourcesContent":["/**\n * - **EN:** Encode a UTF-8 string into Base64 (standard or URL-safe).\n * - **CN:** 将 UTF-8 字符串编码为 Base64(标准或 URL 安全格式)。\n *\n * @param content Input text to encode | 要编码的输入文本\n *\n * @returns Base64 encoded string | Base64 编码后的字符串\n */\nexport function stringToBase64(\n content: string,\n opts: {\n /**\n * - **EN:** Use URL-safe Base64 if true (replace +/ with -_ and strip =)\n * - **CN:** 为 true 时使用 URL 安全 Base64(将 +/ 替换为 -_ 并去掉 =)\n */\n urlSafe?: boolean;\n } = {}\n): string {\n const { urlSafe = false } = opts;\n if (content == null || content === '') return '';\n\n let base64: string;\n const hasBuffer = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function';\n if (hasBuffer) {\n // Node.js\n base64 = Buffer.from(content, 'utf8').toString('base64');\n } else {\n // Browser\n const encoder = new TextEncoder();\n const bytes = encoder.encode(content);\n let binary = '';\n for (const i of bytes) {\n binary += String.fromCharCode(i);\n }\n base64 = btoa(binary);\n }\n\n if (urlSafe) {\n // Replace chars and strip padding for URL-safe variant\n base64 = base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/u, '');\n }\n return base64;\n}\n\n/**\n * - EN: Decode a Base64 (standard or URL-safe) string into UTF-8 text.\n * - CN: 将(标准或 URL 安全)Base64 字符串解码为 UTF-8 文本。\n *\n * @param content Base64 encoded string | Base64 编码字符串\n *\n * @returns Decoded UTF-8 string | 解码后的 UTF-8 字符串\n */\nexport function base64ToString(\n content: string,\n opts: {\n /**\n * - **EN:** Use URL-safe Base64 if true (replace +/ with -_ and strip =)\n * - **CN:** 为 true 时使用 URL 安全 Base64(将 +/ 替换为 -_ 并去掉 =)\n */\n urlSafe?: boolean;\n } = {}\n): string {\n const { urlSafe = false } = opts;\n if (content == null || content === '') return '';\n\n let normalized = content;\n if (urlSafe) {\n normalized = normalized.replace(/-/g, '+').replace(/_/g, '/');\n }\n // Restore padding if stripped\n const padNeeded = normalized.length % 4;\n if (padNeeded === 2) normalized += '==';\n else if (padNeeded === 3) normalized += '=';\n else if (padNeeded === 1) {\n throw new Error('Invalid Base64 string length');\n }\n\n const hasBuffer = typeof Buffer !== 'undefined' && typeof Buffer.from === 'function';\n try {\n if (hasBuffer) {\n return Buffer.from(normalized, 'base64').toString('utf8');\n } else {\n const binary = atob(normalized);\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n const decoder = new TextDecoder();\n return decoder.decode(bytes);\n }\n } catch (e) {\n throw new Error('Failed to decode Base64: ' + (e instanceof Error ? e.message : String(e)));\n }\n}\n\n/**\n * - **EN:** Convert an ArrayBuffer to a Base64 encoded string.\n * - **CN:** 将 ArrayBuffer 转换为 Base64 编码的字符串。\n *\n * @param buf The ArrayBuffer to convert | 要转换的 ArrayBuffer\n *\n * @returns The Base64 encoded string | Base64 编码的字符串\n */\nexport function arrayBufferToBase64(buf: ArrayBuffer): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(buf).toString('base64');\n }\n const bytes = new Uint8Array(buf);\n const chunk = 0x8000;\n let binary = '';\n for (let i = 0; i < bytes.length; i += chunk) {\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\n }\n let base64 = btoa(binary);\n // Add padding for Base64\n const padding = (4 - (base64.length % 4)) % 4;\n if (padding) base64 += '='.repeat(padding);\n return base64;\n}\n\n/**\n * - **EN:** Decode a Base64 (standard or URL-safe) string into an ArrayBuffer.\n * - **CN:** 将(标准或 URL 安全)Base64 字符串解码为 ArrayBuffer。\n *\n * @param base64 The Base64 encoded string | Base64 编码的字符串\n *\n * @returns The decoded ArrayBuffer | 解码后的 ArrayBuffer\n */\nexport function base64ToArrayBuffer(\n base64: string,\n opts: {\n /**\n * - EN: Use URL-safe Base64 if true (replace -_ back to +/ and restore padding)\n * - CN: 为 true 时按 URL 安全 Base64 进行规范化(将 -_ 还原为 +/ 并补齐 =)\n */\n urlSafe?: boolean;\n } = {}\n): ArrayBuffer {\n const { urlSafe = false } = opts;\n if (base64 == null || base64 === '') return new ArrayBuffer(0);\n\n // Normalize to standard Base64 (align with base64ToString)\n let normalized = base64;\n if (urlSafe) {\n normalized = normalized.replace(/-/g, '+').replace(/_/g, '/');\n }\n const padNeeded = normalized.length % 4;\n if (padNeeded === 2) normalized += '==';\n else if (padNeeded === 3) normalized += '=';\n else if (padNeeded === 1) {\n throw new Error('Invalid Base64 string length');\n }\n\n try {\n if (typeof Buffer !== 'undefined' && typeof Buffer.from === 'function') {\n // Node.js / environments with Buffer\n const buf = Buffer.from(normalized, 'base64');\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n } else {\n // Browser\n const binary = atob(normalized);\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n }\n } catch (e) {\n throw new Error('Failed to decode Base64: ' + (e instanceof Error ? e.message : String(e)));\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CSSProperties, FC } from 'react';
|
|
2
|
+
export interface PulseAnimationProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
style?: CSSProperties;
|
|
5
|
+
barStyle?: CSSProperties;
|
|
6
|
+
prefixCls?: string;
|
|
7
|
+
/**
|
|
8
|
+
* - **EN:** Number of bars, default is `24`
|
|
9
|
+
* - **CN:** 心跳柱子数量,默认`24`
|
|
10
|
+
*/
|
|
11
|
+
bars?: number;
|
|
12
|
+
/**
|
|
13
|
+
* - **EN:** Gap between bars, default is `4px`
|
|
14
|
+
* - **CN:** 心跳柱子间隙,默认`4px`
|
|
15
|
+
*/
|
|
16
|
+
barGap?: CSSProperties['gap'];
|
|
17
|
+
/**
|
|
18
|
+
* - **EN:** Background color of the bars, default is theme's `colorFillSecondary`
|
|
19
|
+
* - **CN:** 心跳柱子背景色,默认主题的 `colorFillSecondary`
|
|
20
|
+
*/
|
|
21
|
+
barColor?: CSSProperties['backgroundColor'];
|
|
22
|
+
/**
|
|
23
|
+
* - **EN:** Minimum height of the bar, default is `10%`
|
|
24
|
+
* - **CN:** 心跳柱子最小高度,默认`10%`
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* - **EN:** Maximum height of the bar, default is `90%`
|
|
28
|
+
* - **CN:** 心跳柱子最大高度,默认`90%`
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* - **EN:** Animation duration in seconds, default is `1.6` seconds
|
|
32
|
+
* - **CN:** 动画持续时间,单位秒,默认`1.6`秒
|
|
33
|
+
*/
|
|
34
|
+
duration?: number;
|
|
35
|
+
/**
|
|
36
|
+
* - **EN:** Animation delay rate, the delay between bars is calculated based on `{bars *
|
|
37
|
+
* delayRate}`, default is `0.09`
|
|
38
|
+
* - **CN:** 动画延迟的百分比,根据 `{bars * delayRate}` 计算柱子之间的延迟,默认 `0.09`
|
|
39
|
+
*/
|
|
40
|
+
delayRate?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* - **EN:** Pulse animation component, used to indicate loading or processing state
|
|
44
|
+
*
|
|
45
|
+
* > Use `token.AnimationPulse` to globally configure `barMinSize` and `barMaxSize` properties
|
|
46
|
+
*
|
|
47
|
+
* - **CN:** 脉动动画组件,用于表示加载或处理状态
|
|
48
|
+
*
|
|
49
|
+
* > 使用 `token.AnimationPulse` 来全局配置 `barMinSize` 和 `barMaxSize` 属性
|
|
50
|
+
*/
|
|
51
|
+
export declare const PulseAnimation: FC<PulseAnimationProps>;
|
|
52
|
+
export default PulseAnimation;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/components/Animation/Pulse/index.tsx
|
|
30
|
+
var Pulse_exports = {};
|
|
31
|
+
__export(Pulse_exports, {
|
|
32
|
+
PulseAnimation: () => PulseAnimation,
|
|
33
|
+
default: () => Pulse_default
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(Pulse_exports);
|
|
36
|
+
var import_react = require("react");
|
|
37
|
+
var import_antd = require("antd");
|
|
38
|
+
var import_classnames = __toESM(require("classnames"));
|
|
39
|
+
var import_style = __toESM(require("./style"));
|
|
40
|
+
var PulseAnimation = (props) => {
|
|
41
|
+
const {
|
|
42
|
+
bars = 8,
|
|
43
|
+
barGap,
|
|
44
|
+
barColor,
|
|
45
|
+
duration,
|
|
46
|
+
delayRate = 0.09,
|
|
47
|
+
prefixCls: prefixClsInProps,
|
|
48
|
+
className,
|
|
49
|
+
style,
|
|
50
|
+
barStyle
|
|
51
|
+
} = props;
|
|
52
|
+
const { getPrefixCls } = (0, import_react.useContext)(import_antd.ConfigProvider.ConfigContext);
|
|
53
|
+
const prefixCls = getPrefixCls("animation-pulse", prefixClsInProps);
|
|
54
|
+
const [wrapCSSVar, hashId, cssVarCls] = (0, import_style.default)(prefixCls);
|
|
55
|
+
const array = (0, import_react.useMemo)(() => Array.from({ length: bars }), [bars]);
|
|
56
|
+
return wrapCSSVar(
|
|
57
|
+
/* @__PURE__ */ React.createElement(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
className: (0, import_classnames.default)(prefixCls, hashId, cssVarCls, className),
|
|
61
|
+
style: {
|
|
62
|
+
gridTemplateColumns: `repeat(${array.length}, 1fr)`,
|
|
63
|
+
gap: barGap,
|
|
64
|
+
...style
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
array.map((_, i) => /* @__PURE__ */ React.createElement(
|
|
68
|
+
"div",
|
|
69
|
+
{
|
|
70
|
+
key: i,
|
|
71
|
+
className: `${prefixCls}-bar`,
|
|
72
|
+
style: {
|
|
73
|
+
animationDuration: duration != null ? `${duration}s` : void 0,
|
|
74
|
+
animationDelay: `${i % array.length * delayRate}s`,
|
|
75
|
+
backgroundColor: barColor != null ? barColor : void 0,
|
|
76
|
+
...barStyle
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
))
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
var Pulse_default = PulseAnimation;
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
PulseAnimation
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/Animation/Pulse/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import type { CSSProperties, FC } from 'react';\nimport { useContext, useMemo } from 'react';\nimport { ConfigProvider } from 'antd';\nimport classNames from 'classnames';\nimport useStyle from './style';\n\nexport interface PulseAnimationProps {\n className?: string;\n style?: CSSProperties;\n barStyle?: CSSProperties;\n prefixCls?: string;\n /**\n * - **EN:** Number of bars, default is `24`\n * - **CN:** 心跳柱子数量,默认`24`\n */\n\n bars?: number;\n /**\n * - **EN:** Gap between bars, default is `4px`\n * - **CN:** 心跳柱子间隙,默认`4px`\n */\n barGap?: CSSProperties['gap'];\n /**\n * - **EN:** Background color of the bars, default is theme's `colorFillSecondary`\n * - **CN:** 心跳柱子背景色,默认主题的 `colorFillSecondary`\n */\n barColor?: CSSProperties['backgroundColor'];\n /**\n * - **EN:** Minimum height of the bar, default is `10%`\n * - **CN:** 心跳柱子最小高度,默认`10%`\n */\n // barMinSize?: CSSProperties['height'];\n /**\n * - **EN:** Maximum height of the bar, default is `90%`\n * - **CN:** 心跳柱子最大高度,默认`90%`\n */\n // barMaxSize?: CSSProperties['height'];\n /**\n * - **EN:** Animation duration in seconds, default is `1.6` seconds\n * - **CN:** 动画持续时间,单位秒,默认`1.6`秒\n */\n duration?: number;\n /**\n * - **EN:** Animation delay rate, the delay between bars is calculated based on `{bars *\n * delayRate}`, default is `0.09`\n * - **CN:** 动画延迟的百分比,根据 `{bars * delayRate}` 计算柱子之间的延迟,默认 `0.09`\n */\n delayRate?: number;\n}\n\n/**\n * - **EN:** Pulse animation component, used to indicate loading or processing state\n *\n * > Use `token.AnimationPulse` to globally configure `barMinSize` and `barMaxSize` properties\n *\n * - **CN:** 脉动动画组件,用于表示加载或处理状态\n *\n * > 使用 `token.AnimationPulse` 来全局配置 `barMinSize` 和 `barMaxSize` 属性\n */\nexport const PulseAnimation: FC<PulseAnimationProps> = (props) => {\n const {\n bars = 8,\n barGap,\n barColor,\n duration,\n delayRate = 0.09,\n prefixCls: prefixClsInProps,\n className,\n style,\n barStyle,\n } = props;\n const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);\n const prefixCls = getPrefixCls('animation-pulse', prefixClsInProps);\n const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);\n const array = useMemo(() => Array.from({ length: bars }), [bars]);\n\n return wrapCSSVar(\n <div\n className={classNames(prefixCls, hashId, cssVarCls, className)}\n style={{\n gridTemplateColumns: `repeat(${array.length}, 1fr)`,\n gap: barGap,\n ...style,\n }}\n >\n {array.map((_, i) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={`${prefixCls}-bar`}\n style={{\n animationDuration: duration != null ? `${duration}s` : undefined,\n animationDelay: `${(i % array.length) * delayRate}s`,\n backgroundColor: barColor != null ? barColor : undefined,\n ...barStyle,\n }}\n />\n ))}\n </div>\n );\n};\n\nexport default PulseAnimation;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAoC;AACpC,kBAA+B;AAC/B,wBAAuB;AACvB,mBAAqB;AAuDd,IAAM,iBAA0C,CAAC,UAAU;AAChE,QAAM;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM,EAAE,aAAa,QAAI,yBAAW,2BAAe,aAAa;AAChE,QAAM,YAAY,aAAa,mBAAmB,gBAAgB;AAClE,QAAM,CAAC,YAAY,QAAQ,SAAS,QAAI,aAAAA,SAAS,SAAS;AAC1D,QAAM,YAAQ,sBAAQ,MAAM,MAAM,KAAK,EAAE,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEhE,SAAO;AAAA,IACL;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,kBAAAC,SAAW,WAAW,QAAQ,WAAW,SAAS;AAAA,QAC7D,OAAO;AAAA,UACL,qBAAqB,UAAU,MAAM;AAAA,UACrC,KAAK;AAAA,UACL,GAAG;AAAA,QACL;AAAA;AAAA,MAEC,MAAM,IAAI,CAAC,GAAG,MACb;AAAA,QAAC;AAAA;AAAA,UAEC,KAAK;AAAA,UACL,WAAW,GAAG;AAAA,UACd,OAAO;AAAA,YACL,mBAAmB,YAAY,OAAO,GAAG,cAAc;AAAA,YACvD,gBAAgB,GAAI,IAAI,MAAM,SAAU;AAAA,YACxC,iBAAiB,YAAY,OAAO,WAAW;AAAA,YAC/C,GAAG;AAAA,UACL;AAAA;AAAA,MACF,CACD;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;",
|
|
6
|
+
"names": ["useStyle", "classNames"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare const _default: (prefixCls: string, rootCls?: string | undefined) => readonly [(node: import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>, string, string];
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/components/Animation/Pulse/style/index.ts
|
|
20
|
+
var style_exports = {};
|
|
21
|
+
__export(style_exports, {
|
|
22
|
+
default: () => style_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(style_exports);
|
|
25
|
+
var import_internal = require("antd/es/theme/internal");
|
|
26
|
+
var genStyle = (token) => {
|
|
27
|
+
var _a, _b, _c;
|
|
28
|
+
const { componentCls } = token;
|
|
29
|
+
const componentClsNoPrefix = componentCls.replace(/^\./, "");
|
|
30
|
+
return {
|
|
31
|
+
[componentCls]: {
|
|
32
|
+
display: "grid",
|
|
33
|
+
alignItems: "end",
|
|
34
|
+
width: "100%",
|
|
35
|
+
height: "100%",
|
|
36
|
+
inset: 0,
|
|
37
|
+
gap: 4,
|
|
38
|
+
[`${componentCls}-bar`]: {
|
|
39
|
+
width: "100%",
|
|
40
|
+
background: token.colorFillSecondary,
|
|
41
|
+
borderRadius: 4,
|
|
42
|
+
opacity: 0.85,
|
|
43
|
+
animation: `${componentClsNoPrefix} 1.6s ease-in-out infinite`,
|
|
44
|
+
transformOrigin: "bottom"
|
|
45
|
+
},
|
|
46
|
+
[`@keyframes ${componentClsNoPrefix}`]: {
|
|
47
|
+
"0%": { height: ((_a = token.AnimationPulse) == null ? void 0 : _a.barMinSize) ?? "10%" },
|
|
48
|
+
"50%": { height: ((_b = token.AnimationPulse) == null ? void 0 : _b.barMaxSize) ?? "90%" },
|
|
49
|
+
"100%": { height: ((_c = token.AnimationPulse) == null ? void 0 : _c.barMinSize) ?? "10%" }
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
var style_default = (0, import_internal.genStyleHooks)("AnimationPulse", genStyle);
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/Animation/Pulse/style/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { genStyleHooks } from 'antd/es/theme/internal';\nimport type { AliasToken, GenerateStyle } from 'antd/es/theme/internal';\nimport type { CSSObject } from '@ant-design/cssinjs';\nimport type { FullToken } from '@ant-design/cssinjs-utils';\n\ntype PulseToken = FullToken<\n {\n AnimationPulse?: {\n barMinSize?: string | number;\n barMaxSize?: string | number;\n };\n },\n AliasToken,\n 'AnimationPulse'\n>;\n\nconst genStyle: GenerateStyle<PulseToken> = (token): CSSObject => {\n const { componentCls } = token;\n const componentClsNoPrefix = componentCls.replace(/^\\./, '');\n return {\n [componentCls]: {\n display: 'grid',\n alignItems: 'end',\n width: '100%',\n height: '100%',\n inset: 0,\n gap: 4,\n\n [`${componentCls}-bar`]: {\n width: '100%',\n background: token.colorFillSecondary,\n borderRadius: 4,\n opacity: 0.85,\n animation: `${componentClsNoPrefix} 1.6s ease-in-out infinite`,\n transformOrigin: 'bottom',\n },\n\n [`@keyframes ${componentClsNoPrefix}`]: {\n '0%': { height: token.AnimationPulse?.barMinSize ?? '10%' },\n '50%': { height: token.AnimationPulse?.barMaxSize ?? '90%' },\n '100%': { height: token.AnimationPulse?.barMinSize ?? '10%' },\n },\n },\n };\n};\n\nexport default genStyleHooks('AnimationPulse' as never, genStyle);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA8B;AAgB9B,IAAM,WAAsC,CAAC,UAAqB;AAhBlE;AAiBE,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,uBAAuB,aAAa,QAAQ,OAAO,EAAE;AAC3D,SAAO;AAAA,IACL,CAAC,YAAY,GAAG;AAAA,MACd,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK;AAAA,MAEL,CAAC,GAAG,kBAAkB,GAAG;AAAA,QACvB,OAAO;AAAA,QACP,YAAY,MAAM;AAAA,QAClB,cAAc;AAAA,QACd,SAAS;AAAA,QACT,WAAW,GAAG;AAAA,QACd,iBAAiB;AAAA,MACnB;AAAA,MAEA,CAAC,cAAc,sBAAsB,GAAG;AAAA,QACtC,MAAM,EAAE,UAAQ,WAAM,mBAAN,mBAAsB,eAAc,MAAM;AAAA,QAC1D,OAAO,EAAE,UAAQ,WAAM,mBAAN,mBAAsB,eAAc,MAAM;AAAA,QAC3D,QAAQ,EAAE,UAAQ,WAAM,mBAAN,mBAAsB,eAAc,MAAM;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ,+BAAc,kBAA2B,QAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|