deepsea-components 2.7.0 → 2.8.0-beta.20240516095230
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/AutoScroll.d.ts +22 -0
- package/dist/cjs/components/AutoScroll.js +88 -0
- package/dist/cjs/components/AutoScroll.js.map +7 -0
- package/dist/cjs/components/Scroll.d.ts +22 -0
- package/dist/cjs/components/Scroll.js +84 -0
- package/dist/cjs/components/Scroll.js.map +7 -0
- package/dist/cjs/index.d.ts +2 -18
- package/dist/cjs/index.js +6 -51
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/components/AutoScroll.d.ts +22 -0
- package/dist/esm/components/AutoScroll.js +90 -0
- package/dist/esm/components/AutoScroll.js.map +1 -0
- package/dist/esm/components/Scroll.d.ts +22 -0
- package/dist/esm/components/Scroll.js +60 -0
- package/dist/esm/components/Scroll.js.map +1 -0
- package/dist/esm/index.d.ts +2 -18
- package/dist/esm/index.js +2 -50
- package/dist/esm/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/AutoScroll.tsx +111 -0
- package/src/components/Scroll.tsx +72 -0
- package/src/index.tsx +3 -63
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import { ScrollOptions } from "./Scroll";
|
|
3
|
+
export interface SwiperScrollProps<T> extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
count: number;
|
|
5
|
+
/** 轮播元素的长度 */
|
|
6
|
+
itemHeight: number;
|
|
7
|
+
/** 轮播的数据 */
|
|
8
|
+
data: T[];
|
|
9
|
+
/** key 生成器 */
|
|
10
|
+
keyExtractor?: (item: T, index: number, data: T[]) => string | number;
|
|
11
|
+
/** 轮播元素的渲染函数 */
|
|
12
|
+
render: (item: T, index: number, data: T[]) => ReactNode;
|
|
13
|
+
/** 轮播动画的时间 */
|
|
14
|
+
animationTime: number;
|
|
15
|
+
/** 每个元素的停留时间 */
|
|
16
|
+
period: number;
|
|
17
|
+
/** 元素之间的间距 */
|
|
18
|
+
gap?: number;
|
|
19
|
+
/** 滚动条选项 */
|
|
20
|
+
options?: ScrollOptions;
|
|
21
|
+
}
|
|
22
|
+
export declare function AutoScroll<T>(props: SwiperScrollProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,88 @@
|
|
|
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/AutoScroll.tsx
|
|
20
|
+
var AutoScroll_exports = {};
|
|
21
|
+
__export(AutoScroll_exports, {
|
|
22
|
+
AutoScroll: () => AutoScroll
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(AutoScroll_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_Scroll = require("./Scroll");
|
|
27
|
+
function AutoScroll(props) {
|
|
28
|
+
const { style, itemHeight, count, data, render, animationTime, period, keyExtractor, options, onMouseEnter, onMouseLeave, gap = 0, ...rest } = props;
|
|
29
|
+
const [offset, setOffset] = (0, import_react.useState)(0);
|
|
30
|
+
const [paused, setPaused] = (0, import_react.useState)(false);
|
|
31
|
+
const pausedRef = (0, import_react.useRef)(paused);
|
|
32
|
+
pausedRef.current = paused;
|
|
33
|
+
const periodRef = (0, import_react.useRef)(period);
|
|
34
|
+
periodRef.current = period;
|
|
35
|
+
const height = (itemHeight + gap) * count - gap;
|
|
36
|
+
const bar = (0, import_react.useRef)(null);
|
|
37
|
+
(0, import_react.useEffect)(() => {
|
|
38
|
+
let timer;
|
|
39
|
+
const listener = (status) => {
|
|
40
|
+
const y = status.offset.y;
|
|
41
|
+
const a = y / (itemHeight + gap);
|
|
42
|
+
let newOffset;
|
|
43
|
+
if (a % 1 <= 0.05) {
|
|
44
|
+
newOffset = Math.floor(a);
|
|
45
|
+
} else {
|
|
46
|
+
newOffset = Math.ceil(a);
|
|
47
|
+
}
|
|
48
|
+
clearTimeout(timer);
|
|
49
|
+
timer = setTimeout(() => {
|
|
50
|
+
setOffset(newOffset);
|
|
51
|
+
}, periodRef.current);
|
|
52
|
+
};
|
|
53
|
+
bar.current?.addListener(listener);
|
|
54
|
+
return () => {
|
|
55
|
+
bar.current?.removeListener(listener);
|
|
56
|
+
};
|
|
57
|
+
}, []);
|
|
58
|
+
(0, import_react.useEffect)(() => {
|
|
59
|
+
if (data.length <= count || paused === true)
|
|
60
|
+
return;
|
|
61
|
+
const timer = setTimeout(() => {
|
|
62
|
+
setOffset((offset + 1) % (data.length + 1 - count));
|
|
63
|
+
}, periodRef.current);
|
|
64
|
+
return () => clearTimeout(timer);
|
|
65
|
+
}, [count, data.length, offset, paused]);
|
|
66
|
+
(0, import_react.useEffect)(() => {
|
|
67
|
+
setOffset(0);
|
|
68
|
+
}, [itemHeight, count, data.length, animationTime, period, gap]);
|
|
69
|
+
(0, import_react.useEffect)(() => {
|
|
70
|
+
if (pausedRef.current)
|
|
71
|
+
return;
|
|
72
|
+
bar.current?.scrollTo(0, offset * (itemHeight + gap), animationTime);
|
|
73
|
+
}, [offset]);
|
|
74
|
+
function onContainerMouseEnter(e) {
|
|
75
|
+
setPaused(true);
|
|
76
|
+
onMouseEnter?.(e);
|
|
77
|
+
}
|
|
78
|
+
function onContainerMouseLeave(e) {
|
|
79
|
+
setPaused(false);
|
|
80
|
+
onMouseLeave?.(e);
|
|
81
|
+
}
|
|
82
|
+
return /* @__PURE__ */ React.createElement(import_Scroll.Scroll, { scrollbar: bar, options, style: { height, ...style }, onMouseEnter: onContainerMouseEnter, onMouseLeave: onContainerMouseLeave, ...rest }, data.map((item, index, arr) => /* @__PURE__ */ React.createElement("div", { key: keyExtractor?.(item, index, arr) ?? index, style: { height: itemHeight, marginTop: index === 0 ? 0 : `${gap}px` } }, render(item, index, arr))));
|
|
83
|
+
}
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
AutoScroll
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=AutoScroll.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/AutoScroll.tsx"],
|
|
4
|
+
"sourcesContent": ["import { HTMLAttributes, ReactNode, useEffect, useRef, useState, MouseEvent as ReactMouseEvent } from \"react\"\r\nimport Scrollbar from \"smooth-scrollbar\"\r\nimport { ScrollStatus } from \"smooth-scrollbar/interfaces/scrollbar\"\r\nimport { Scroll, ScrollOptions } from \"./Scroll\"\r\n\r\nexport interface SwiperScrollProps<T> extends HTMLAttributes<HTMLDivElement> {\r\n count: number\r\n\r\n /** 轮播元素的长度 */\r\n itemHeight: number\r\n\r\n /** 轮播的数据 */\r\n data: T[]\r\n\r\n /** key 生成器 */\r\n keyExtractor?: (item: T, index: number, data: T[]) => string | number\r\n\r\n /** 轮播元素的渲染函数 */\r\n render: (item: T, index: number, data: T[]) => ReactNode\r\n\r\n /** 轮播动画的时间 */\r\n animationTime: number\r\n\r\n /** 每个元素的停留时间 */\r\n period: number\r\n\r\n /** 元素之间的间距 */\r\n gap?: number\r\n\r\n /** 滚动条选项 */\r\n options?: ScrollOptions\r\n}\r\n\r\nexport function AutoScroll<T>(props: SwiperScrollProps<T>) {\r\n const { style, itemHeight, count, data, render, animationTime, period, keyExtractor, options, onMouseEnter, onMouseLeave, gap = 0, ...rest } = props\r\n\r\n const [offset, setOffset] = useState(0)\r\n\r\n const [paused, setPaused] = useState(false)\r\n\r\n const pausedRef = useRef(paused)\r\n\r\n pausedRef.current = paused\r\n\r\n const periodRef = useRef(period)\r\n\r\n periodRef.current = period\r\n\r\n const height = (itemHeight + gap) * count - gap\r\n\r\n const bar = useRef<Scrollbar | null>(null)\r\n\r\n useEffect(() => {\r\n let timer: NodeJS.Timeout\r\n const listener = (status: ScrollStatus) => {\r\n const y = status.offset.y\r\n const a = y / (itemHeight + gap)\r\n let newOffset: number\r\n if (a % 1 <= 0.05) {\r\n newOffset = Math.floor(a)\r\n } else {\r\n newOffset = Math.ceil(a)\r\n }\r\n clearTimeout(timer)\r\n timer = setTimeout(() => {\r\n setOffset(newOffset)\r\n }, periodRef.current)\r\n }\r\n bar.current?.addListener(listener)\r\n return () => {\r\n bar.current?.removeListener(listener)\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (data.length <= count || paused === true) return\r\n const timer = setTimeout(() => {\r\n setOffset((offset + 1) % (data.length + 1 - count))\r\n }, periodRef.current)\r\n return () => clearTimeout(timer)\r\n }, [count, data.length, offset, paused])\r\n\r\n useEffect(() => {\r\n setOffset(0)\r\n }, [itemHeight, count, data.length, animationTime, period, gap])\r\n\r\n useEffect(() => {\r\n if (pausedRef.current) return\r\n bar.current?.scrollTo(0, offset * (itemHeight + gap), animationTime)\r\n }, [offset])\r\n\r\n function onContainerMouseEnter(e: ReactMouseEvent<HTMLDivElement, MouseEvent>) {\r\n setPaused(true)\r\n onMouseEnter?.(e)\r\n }\r\n\r\n function onContainerMouseLeave(e: ReactMouseEvent<HTMLDivElement, MouseEvent>) {\r\n setPaused(false)\r\n onMouseLeave?.(e)\r\n }\r\n\r\n return (\r\n <Scroll scrollbar={bar} options={options} style={{ height, ...style }} onMouseEnter={onContainerMouseEnter} onMouseLeave={onContainerMouseLeave} {...rest}>\r\n {data.map((item, index, arr) => (\r\n <div key={keyExtractor?.(item, index, arr) ?? index} style={{ height: itemHeight, marginTop: index === 0 ? 0 : `${gap}px` }}>\r\n {render(item, index, arr)}\r\n </div>\r\n ))}\r\n </Scroll>\r\n )\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsG;AAGtG,oBAAsC;AA8B/B,SAAS,WAAc,OAA6B;AACvD,QAAM,EAAE,OAAO,YAAY,OAAO,MAAM,QAAQ,eAAe,QAAQ,cAAc,SAAS,cAAc,cAAc,MAAM,GAAG,GAAG,KAAK,IAAI;AAE/I,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAS,CAAC;AAEtC,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAS,KAAK;AAE1C,QAAM,gBAAY,qBAAO,MAAM;AAE/B,YAAU,UAAU;AAEpB,QAAM,gBAAY,qBAAO,MAAM;AAE/B,YAAU,UAAU;AAEpB,QAAM,UAAU,aAAa,OAAO,QAAQ;AAE5C,QAAM,UAAM,qBAAyB,IAAI;AAEzC,8BAAU,MAAM;AACZ,QAAI;AACJ,UAAM,WAAW,CAAC,WAAyB;AACvC,YAAM,IAAI,OAAO,OAAO;AACxB,YAAM,IAAI,KAAK,aAAa;AAC5B,UAAI;AACJ,UAAI,IAAI,KAAK,MAAM;AACf,oBAAY,KAAK,MAAM,CAAC;AAAA,MAC5B,OAAO;AACH,oBAAY,KAAK,KAAK,CAAC;AAAA,MAC3B;AACA,mBAAa,KAAK;AAClB,cAAQ,WAAW,MAAM;AACrB,kBAAU,SAAS;AAAA,MACvB,GAAG,UAAU,OAAO;AAAA,IACxB;AACA,QAAI,SAAS,YAAY,QAAQ;AACjC,WAAO,MAAM;AACT,UAAI,SAAS,eAAe,QAAQ;AAAA,IACxC;AAAA,EACJ,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACZ,QAAI,KAAK,UAAU,SAAS,WAAW;AAAM;AAC7C,UAAM,QAAQ,WAAW,MAAM;AAC3B,iBAAW,SAAS,MAAM,KAAK,SAAS,IAAI,MAAM;AAAA,IACtD,GAAG,UAAU,OAAO;AACpB,WAAO,MAAM,aAAa,KAAK;AAAA,EACnC,GAAG,CAAC,OAAO,KAAK,QAAQ,QAAQ,MAAM,CAAC;AAEvC,8BAAU,MAAM;AACZ,cAAU,CAAC;AAAA,EACf,GAAG,CAAC,YAAY,OAAO,KAAK,QAAQ,eAAe,QAAQ,GAAG,CAAC;AAE/D,8BAAU,MAAM;AACZ,QAAI,UAAU;AAAS;AACvB,QAAI,SAAS,SAAS,GAAG,UAAU,aAAa,MAAM,aAAa;AAAA,EACvE,GAAG,CAAC,MAAM,CAAC;AAEX,WAAS,sBAAsB,GAAgD;AAC3E,cAAU,IAAI;AACd,mBAAe,CAAC;AAAA,EACpB;AAEA,WAAS,sBAAsB,GAAgD;AAC3E,cAAU,KAAK;AACf,mBAAe,CAAC;AAAA,EACpB;AAEA,SACI,oCAAC,wBAAO,WAAW,KAAK,SAAkB,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,uBAAuB,cAAc,uBAAwB,GAAG,QAChJ,KAAK,IAAI,CAAC,MAAM,OAAO,QACpB,oCAAC,SAAI,KAAK,eAAe,MAAM,OAAO,GAAG,KAAK,OAAO,OAAO,EAAE,QAAQ,YAAY,WAAW,UAAU,IAAI,IAAI,GAAG,QAAQ,KACrH,OAAO,MAAM,OAAO,GAAG,CAC5B,CACH,CACL;AAER;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CSSProperties, ForwardedRef, HTMLAttributes } from "react";
|
|
2
|
+
import SmoothScrollbar from "smooth-scrollbar";
|
|
3
|
+
import type { ScrollbarOptions } from "smooth-scrollbar/interfaces";
|
|
4
|
+
export interface ScrollOptions extends Partial<ScrollbarOptions> {
|
|
5
|
+
/** 滑块宽度 */
|
|
6
|
+
thumbWidth?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ScrollProps extends HTMLAttributes<HTMLDivElement> {
|
|
9
|
+
/** 滚动的配置 */
|
|
10
|
+
options?: ScrollOptions;
|
|
11
|
+
/** 容器宽度 */
|
|
12
|
+
containerClassName?: string;
|
|
13
|
+
/** 容器样式 */
|
|
14
|
+
containerStyle?: CSSProperties;
|
|
15
|
+
/** 滚动条实例 */
|
|
16
|
+
scrollbar?: ForwardedRef<SmoothScrollbar>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 滚动条组件
|
|
20
|
+
* @description 注意 children 不是直接渲染在组件上的,而是渲染在内部的容器上
|
|
21
|
+
*/
|
|
22
|
+
export declare const Scroll: import("react").ForwardRefExoticComponent<ScrollProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,84 @@
|
|
|
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/Scroll.tsx
|
|
30
|
+
var Scroll_exports = {};
|
|
31
|
+
__export(Scroll_exports, {
|
|
32
|
+
Scroll: () => Scroll
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(Scroll_exports);
|
|
35
|
+
var import_css = require("@emotion/css");
|
|
36
|
+
var import_deepsea_tools = require("deepsea-tools");
|
|
37
|
+
var import_react = require("react");
|
|
38
|
+
var import_smooth_scrollbar = __toESM(require("smooth-scrollbar"));
|
|
39
|
+
var Scroll = (0, import_react.forwardRef)((props, ref) => {
|
|
40
|
+
const { children, containerClassName, containerStyle, options, className, scrollbar, ...rest } = props;
|
|
41
|
+
const { thumbWidth, ...scrollbarOptions } = options || {};
|
|
42
|
+
const ele = (0, import_react.useRef)(null);
|
|
43
|
+
const [ins, setIns] = (0, import_react.useState)(null);
|
|
44
|
+
(0, import_react.useImperativeHandle)(ref, () => ele.current);
|
|
45
|
+
(0, import_react.useImperativeHandle)(scrollbar, () => ins, [ins]);
|
|
46
|
+
(0, import_react.useEffect)(() => {
|
|
47
|
+
const ins2 = import_smooth_scrollbar.default.init(ele.current, scrollbarOptions);
|
|
48
|
+
setIns(ins2);
|
|
49
|
+
return () => ins2.destroy();
|
|
50
|
+
}, []);
|
|
51
|
+
return /* @__PURE__ */ React.createElement(
|
|
52
|
+
"div",
|
|
53
|
+
{
|
|
54
|
+
ref: ele,
|
|
55
|
+
className: (0, import_deepsea_tools.clsx)(
|
|
56
|
+
typeof thumbWidth === "number" && import_css.css`
|
|
57
|
+
.scrollbar-track.scrollbar-track-x {
|
|
58
|
+
height: ${thumbWidth}px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.scrollbar-thumb.scrollbar-thumb-x {
|
|
62
|
+
height: ${thumbWidth}px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.scrollbar-track.scrollbar-track-y {
|
|
66
|
+
width: ${thumbWidth}px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.scrollbar-thumb.scrollbar-thumb-y {
|
|
70
|
+
width: ${thumbWidth}px;
|
|
71
|
+
}
|
|
72
|
+
`,
|
|
73
|
+
className
|
|
74
|
+
),
|
|
75
|
+
...rest
|
|
76
|
+
},
|
|
77
|
+
/* @__PURE__ */ React.createElement("div", { className: containerClassName, style: containerStyle }, children)
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
81
|
+
0 && (module.exports = {
|
|
82
|
+
Scroll
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=Scroll.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/Scroll.tsx"],
|
|
4
|
+
"sourcesContent": ["import { css } from \"@emotion/css\"\r\nimport { clsx } from \"deepsea-tools\"\r\nimport { CSSProperties, ForwardedRef, forwardRef, HTMLAttributes, useEffect, useImperativeHandle, useRef, useState } from \"react\"\r\nimport SmoothScrollbar from \"smooth-scrollbar\"\r\nimport type { ScrollbarOptions } from \"smooth-scrollbar/interfaces\"\r\n\r\nexport interface ScrollOptions extends Partial<ScrollbarOptions> {\r\n /** 滑块宽度 */\r\n thumbWidth?: number\r\n}\r\n\r\nexport interface ScrollProps extends HTMLAttributes<HTMLDivElement> {\r\n /** 滚动的配置 */\r\n options?: ScrollOptions\r\n /** 容器宽度 */\r\n containerClassName?: string\r\n /** 容器样式 */\r\n containerStyle?: CSSProperties\r\n /** 滚动条实例 */\r\n scrollbar?: ForwardedRef<SmoothScrollbar>\r\n}\r\n\r\n/**\r\n * 滚动条组件\r\n * @description 注意 children 不是直接渲染在组件上的,而是渲染在内部的容器上\r\n */\r\nexport const Scroll = forwardRef<HTMLDivElement, ScrollProps>((props, ref) => {\r\n const { children, containerClassName, containerStyle, options, className, scrollbar, ...rest } = props\r\n const { thumbWidth, ...scrollbarOptions } = options || {}\r\n const ele = useRef<HTMLDivElement>(null)\r\n const [ins, setIns] = useState<SmoothScrollbar | null>(null)\r\n\r\n useImperativeHandle(ref, () => ele.current!)\r\n useImperativeHandle(scrollbar, () => ins!, [ins])\r\n\r\n useEffect(() => {\r\n const ins = SmoothScrollbar.init(ele.current!, scrollbarOptions)\r\n setIns(ins)\r\n return () => ins.destroy()\r\n }, [])\r\n\r\n return (\r\n <div\r\n ref={ele}\r\n className={clsx(\r\n typeof thumbWidth === \"number\" &&\r\n css`\r\n .scrollbar-track.scrollbar-track-x {\r\n height: ${thumbWidth}px;\r\n }\r\n\r\n .scrollbar-thumb.scrollbar-thumb-x {\r\n height: ${thumbWidth}px;\r\n }\r\n\r\n .scrollbar-track.scrollbar-track-y {\r\n width: ${thumbWidth}px;\r\n }\r\n\r\n .scrollbar-thumb.scrollbar-thumb-y {\r\n width: ${thumbWidth}px;\r\n }\r\n `,\r\n className\r\n )}\r\n {...rest}>\r\n <div className={containerClassName} style={containerStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n )\r\n})\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,2BAAqB;AACrB,mBAA0H;AAC1H,8BAA4B;AAuBrB,IAAM,aAAS,yBAAwC,CAAC,OAAO,QAAQ;AAC1E,QAAM,EAAE,UAAU,oBAAoB,gBAAgB,SAAS,WAAW,WAAW,GAAG,KAAK,IAAI;AACjG,QAAM,EAAE,YAAY,GAAG,iBAAiB,IAAI,WAAW,CAAC;AACxD,QAAM,UAAM,qBAAuB,IAAI;AACvC,QAAM,CAAC,KAAK,MAAM,QAAI,uBAAiC,IAAI;AAE3D,wCAAoB,KAAK,MAAM,IAAI,OAAQ;AAC3C,wCAAoB,WAAW,MAAM,KAAM,CAAC,GAAG,CAAC;AAEhD,8BAAU,MAAM;AACZ,UAAMA,OAAM,wBAAAC,QAAgB,KAAK,IAAI,SAAU,gBAAgB;AAC/D,WAAOD,IAAG;AACV,WAAO,MAAMA,KAAI,QAAQ;AAAA,EAC7B,GAAG,CAAC,CAAC;AAEL,SACI;AAAA,IAAC;AAAA;AAAA,MACG,KAAK;AAAA,MACL,eAAW;AAAA,QACP,OAAO,eAAe,YAClB;AAAA;AAAA,sCAEkB;AAAA;AAAA;AAAA;AAAA,sCAIA;AAAA;AAAA;AAAA;AAAA,qCAID;AAAA;AAAA;AAAA;AAAA,qCAIA;AAAA;AAAA;AAAA,QAGrB;AAAA,MACJ;AAAA,MACC,GAAG;AAAA;AAAA,IACJ,oCAAC,SAAI,WAAW,oBAAoB,OAAO,kBACtC,QACL;AAAA,EACJ;AAER,CAAC;",
|
|
6
|
+
"names": ["ins", "SmoothScrollbar"]
|
|
7
|
+
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ButtonHTMLAttributes, CSSProperties, FC, HTMLAttributes, InputHTMLAttributes, ReactNode, TextareaHTMLAttributes } from "react";
|
|
2
|
-
|
|
2
|
+
export * from "./components/Scroll";
|
|
3
|
+
export * from "./components/AutoScroll";
|
|
3
4
|
export interface InputFileDataTypes {
|
|
4
5
|
base64: string;
|
|
5
6
|
text: string;
|
|
@@ -238,23 +239,6 @@ export interface CircleTextProps extends Omit<HTMLAttributes<HTMLSpanElement>, "
|
|
|
238
239
|
}
|
|
239
240
|
/** 环形文字 */
|
|
240
241
|
export declare const CircleText: FC<CircleTextProps>;
|
|
241
|
-
export interface ScrollOptions extends Partial<ScrollbarOptions> {
|
|
242
|
-
/** 滑块宽度 */
|
|
243
|
-
thumbWidth?: number;
|
|
244
|
-
}
|
|
245
|
-
export interface ScrollProps extends HTMLAttributes<HTMLDivElement> {
|
|
246
|
-
/** 滚动的配置 */
|
|
247
|
-
options?: ScrollOptions;
|
|
248
|
-
/** 容器宽度 */
|
|
249
|
-
containerClassName?: string;
|
|
250
|
-
/** 容器样式 */
|
|
251
|
-
containerStyle?: CSSProperties;
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* 滚动条组件
|
|
255
|
-
* @description 注意 children 不是直接渲染在组件上的,而是渲染在内部的容器上
|
|
256
|
-
*/
|
|
257
|
-
export declare const Scroll: import("react").ForwardRefExoticComponent<ScrollProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
258
242
|
export declare const AutoSizeTextArea: import("react").ForwardRefExoticComponent<TextareaHTMLAttributes<HTMLTextAreaElement> & import("react").RefAttributes<HTMLTextAreaElement>>;
|
|
259
243
|
export interface AutoFitProps extends HTMLAttributes<HTMLDivElement> {
|
|
260
244
|
/** 设计稿宽度,默认 1920 */
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
18
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
28
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
20
|
|
|
30
21
|
// src/index.tsx
|
|
@@ -40,7 +31,6 @@ __export(src_exports, {
|
|
|
40
31
|
InputFileButton: () => InputFileButton,
|
|
41
32
|
LoopSwiper: () => LoopSwiper,
|
|
42
33
|
Ring: () => Ring,
|
|
43
|
-
Scroll: () => Scroll,
|
|
44
34
|
SeaRadar: () => SeaRadar,
|
|
45
35
|
SectionRing: () => SectionRing,
|
|
46
36
|
TransitionBox: () => TransitionBox,
|
|
@@ -55,8 +45,9 @@ module.exports = __toCommonJS(src_exports);
|
|
|
55
45
|
var import_css = require("@emotion/css");
|
|
56
46
|
var import_deepsea_tools = require("deepsea-tools");
|
|
57
47
|
var import_react = require("react");
|
|
58
|
-
var import_smooth_scrollbar = __toESM(require("smooth-scrollbar"));
|
|
59
48
|
var import_xlsx = require("xlsx");
|
|
49
|
+
__reExport(src_exports, require("./components/Scroll"), module.exports);
|
|
50
|
+
__reExport(src_exports, require("./components/AutoScroll"), module.exports);
|
|
60
51
|
async function getFileData(file, type) {
|
|
61
52
|
const fileReader = new FileReader();
|
|
62
53
|
switch (type) {
|
|
@@ -425,43 +416,6 @@ var CircleText = (props) => {
|
|
|
425
416
|
words.reverse();
|
|
426
417
|
return /* @__PURE__ */ React.createElement(import_react.Fragment, null, words.map((w, idx) => /* @__PURE__ */ React.createElement("span", { key: idx, style: { position: "absolute", ...style, transform: getTransform(idx), textAlign: "center", width, lineHeight: `${height}px`, height }, ...others }, w)));
|
|
427
418
|
};
|
|
428
|
-
var Scroll = (0, import_react.forwardRef)((props, ref) => {
|
|
429
|
-
const { children, containerClassName, containerStyle, options, className, ...others } = props;
|
|
430
|
-
const { thumbWidth, ...scrollbarOptions } = options || {};
|
|
431
|
-
const ele = (0, import_react.useRef)(null);
|
|
432
|
-
(0, import_react.useImperativeHandle)(ref, () => ele.current);
|
|
433
|
-
(0, import_react.useEffect)(() => {
|
|
434
|
-
import_smooth_scrollbar.default.init(ele.current, scrollbarOptions);
|
|
435
|
-
}, []);
|
|
436
|
-
return /* @__PURE__ */ React.createElement(
|
|
437
|
-
"div",
|
|
438
|
-
{
|
|
439
|
-
ref: ele,
|
|
440
|
-
className: (0, import_deepsea_tools.clsx)(
|
|
441
|
-
!!thumbWidth && import_css.css`
|
|
442
|
-
.scrollbar-track.scrollbar-track-x {
|
|
443
|
-
height: ${thumbWidth}px;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
.scrollbar-thumb.scrollbar-thumb-x {
|
|
447
|
-
height: ${thumbWidth}px;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
.scrollbar-track.scrollbar-track-y {
|
|
451
|
-
width: ${thumbWidth}px;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
.scrollbar-thumb.scrollbar-thumb-y {
|
|
455
|
-
width: ${thumbWidth}px;
|
|
456
|
-
}
|
|
457
|
-
`,
|
|
458
|
-
className
|
|
459
|
-
),
|
|
460
|
-
...others
|
|
461
|
-
},
|
|
462
|
-
/* @__PURE__ */ React.createElement("div", { className: containerClassName, style: containerStyle }, children)
|
|
463
|
-
);
|
|
464
|
-
});
|
|
465
419
|
var AutoSizeTextArea = (0, import_react.forwardRef)((props, ref) => {
|
|
466
420
|
const { style = {}, ...others } = props;
|
|
467
421
|
const { height, resize, overflowY, ...otherStyle } = style;
|
|
@@ -560,7 +514,6 @@ var AutoFit = (0, import_react.forwardRef)((props, ref) => {
|
|
|
560
514
|
InputFileButton,
|
|
561
515
|
LoopSwiper,
|
|
562
516
|
Ring,
|
|
563
|
-
Scroll,
|
|
564
517
|
SeaRadar,
|
|
565
518
|
SectionRing,
|
|
566
519
|
TransitionBox,
|
|
@@ -569,6 +522,8 @@ var AutoFit = (0, import_react.forwardRef)((props, ref) => {
|
|
|
569
522
|
exportExcel,
|
|
570
523
|
getFileData,
|
|
571
524
|
getGapCountAndSize,
|
|
572
|
-
getGapRange
|
|
525
|
+
getGapRange,
|
|
526
|
+
...require("./components/Scroll"),
|
|
527
|
+
...require("./components/AutoScroll")
|
|
573
528
|
});
|
|
574
529
|
//# sourceMappingURL=index.js.map
|